@opengeni/react-native 1.4.5-canary.37615713321001
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +190 -0
- package/README.md +74 -0
- package/dist/adapters.d.ts +53 -0
- package/dist/adapters.js +3 -0
- package/dist/adapters.js.map +1 -0
- package/dist/attachments.d.ts +75 -0
- package/dist/chunk-3VSZAQ7G.js +391 -0
- package/dist/chunk-3VSZAQ7G.js.map +1 -0
- package/dist/chunk-5ZVK7WKA.js +88 -0
- package/dist/chunk-5ZVK7WKA.js.map +1 -0
- package/dist/chunk-EEDIMY3L.js +240 -0
- package/dist/chunk-EEDIMY3L.js.map +1 -0
- package/dist/chunk-M23SDI4R.js +83 -0
- package/dist/chunk-M23SDI4R.js.map +1 -0
- package/dist/chunk-PHJBSAR3.js +2006 -0
- package/dist/chunk-PHJBSAR3.js.map +1 -0
- package/dist/environment.d.ts +19 -0
- package/dist/expo.d.ts +25 -0
- package/dist/expo.js +267 -0
- package/dist/expo.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +3345 -0
- package/dist/index.js.map +1 -0
- package/dist/presentation.d.ts +262 -0
- package/dist/read-acknowledgement.d.ts +39 -0
- package/dist/realtime/call-events.d.ts +11 -0
- package/dist/realtime/call-view.d.ts +26 -0
- package/dist/realtime/expo-call.d.ts +11 -0
- package/dist/realtime/native-call.d.ts +104 -0
- package/dist/realtime/native-realtime.d.ts +35 -0
- package/dist/realtime/use-native-session-realtime.d.ts +25 -0
- package/dist/session-view.d.ts +87 -0
- package/dist/timeline/activity.d.ts +34 -0
- package/dist/timeline/composer.d.ts +86 -0
- package/dist/timeline/controls.d.ts +27 -0
- package/dist/timeline/decisions.d.ts +29 -0
- package/dist/timeline/feedback.d.ts +26 -0
- package/dist/timeline/icon-nodes.generated.d.ts +738 -0
- package/dist/timeline/icon.d.ts +11 -0
- package/dist/timeline/index.d.ts +32 -0
- package/dist/timeline/index.js +5419 -0
- package/dist/timeline/index.js.map +1 -0
- package/dist/timeline/markdown.d.ts +11 -0
- package/dist/timeline/markdown.js +415 -0
- package/dist/timeline/markdown.js.map +1 -0
- package/dist/timeline/message-attachments.d.ts +13 -0
- package/dist/timeline/message-timeline.d.ts +36 -0
- package/dist/timeline/model-picker.d.ts +17 -0
- package/dist/timeline/primitives.d.ts +85 -0
- package/dist/timeline/queue-dock.d.ts +19 -0
- package/dist/timeline/session-actions.d.ts +34 -0
- package/dist/timeline/session-list.d.ts +50 -0
- package/dist/timeline/session-screen.d.ts +35 -0
- package/dist/timeline/session-signals.d.ts +37 -0
- package/dist/timeline/sheet.d.ts +14 -0
- package/dist/timeline/theme.d.ts +58 -0
- package/dist/timeline/thinking-orb.d.ts +13 -0
- package/dist/timeline/turn.d.ts +80 -0
- package/dist/ui/attention.d.ts +14 -0
- package/dist/ui/cards.d.ts +21 -0
- package/dist/ui/composer.d.ts +21 -0
- package/dist/ui/format.d.ts +13 -0
- package/dist/ui/icons.d.ts +9 -0
- package/dist/ui/index.d.ts +12 -0
- package/dist/ui/index.js +1757 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/steps-sheet.d.ts +10 -0
- package/dist/ui/theme.d.ts +63 -0
- package/dist/ui/timeline.d.ts +48 -0
- package/dist/ui/web-tokens.gen.d.ts +90 -0
- package/dist/use-native-session.d.ts +40 -0
- package/dist/view-model.d.ts +52 -0
- package/dist/voice-input.d.ts +102 -0
- package/dist/webrtc.d.ts +9 -0
- package/dist/webrtc.js +19 -0
- package/dist/webrtc.js.map +1 -0
- package/expo-module.config.json +7 -0
- package/ios/OpenGeniCall.podspec +22 -0
- package/ios/OpenGeniCallAppDelegateSubscriber.swift +29 -0
- package/ios/OpenGeniCallCenter.swift +189 -0
- package/ios/OpenGeniCallModule.swift +64 -0
- package/package.json +93 -0
- package/src/adapters.ts +150 -0
- package/src/attachments.ts +396 -0
- package/src/environment.tsx +214 -0
- package/src/expo.ts +295 -0
- package/src/index.ts +98 -0
- package/src/presentation.ts +285 -0
- package/src/read-acknowledgement.ts +72 -0
- package/src/realtime/call-events.ts +41 -0
- package/src/realtime/call-view.tsx +220 -0
- package/src/realtime/expo-call.ts +49 -0
- package/src/realtime/native-call.ts +266 -0
- package/src/realtime/native-realtime.ts +115 -0
- package/src/realtime/use-native-session-realtime.ts +29 -0
- package/src/session-view.tsx +2251 -0
- package/src/timeline/activity.tsx +736 -0
- package/src/timeline/composer.tsx +686 -0
- package/src/timeline/controls.tsx +151 -0
- package/src/timeline/decisions.tsx +651 -0
- package/src/timeline/feedback.tsx +251 -0
- package/src/timeline/icon-nodes.generated.ts +1830 -0
- package/src/timeline/icon.tsx +44 -0
- package/src/timeline/index.ts +67 -0
- package/src/timeline/markdown.tsx +510 -0
- package/src/timeline/message-attachments.tsx +155 -0
- package/src/timeline/message-timeline.tsx +1042 -0
- package/src/timeline/model-picker.tsx +450 -0
- package/src/timeline/primitives.tsx +561 -0
- package/src/timeline/queue-dock.tsx +331 -0
- package/src/timeline/session-actions.tsx +379 -0
- package/src/timeline/session-list.tsx +338 -0
- package/src/timeline/session-screen.tsx +488 -0
- package/src/timeline/session-signals.tsx +312 -0
- package/src/timeline/sheet.tsx +153 -0
- package/src/timeline/theme.tsx +128 -0
- package/src/timeline/thinking-orb.tsx +93 -0
- package/src/timeline/turn.tsx +569 -0
- package/src/ui/attention.tsx +220 -0
- package/src/ui/cards.tsx +267 -0
- package/src/ui/composer.tsx +296 -0
- package/src/ui/format.ts +86 -0
- package/src/ui/icons.tsx +131 -0
- package/src/ui/index.ts +18 -0
- package/src/ui/steps-sheet.tsx +71 -0
- package/src/ui/theme.ts +261 -0
- package/src/ui/timeline.tsx +837 -0
- package/src/ui/web-tokens.gen.ts +94 -0
- package/src/use-native-session.ts +219 -0
- package/src/view-model.ts +485 -0
- package/src/voice-input.ts +382 -0
- package/src/webrtc.ts +30 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/timeline/activity.tsx","../../src/timeline/turn.tsx","../../src/timeline/message-timeline.tsx","../../src/timeline/controls.tsx","../../src/timeline/composer.tsx","../../src/timeline/feedback.tsx","../../src/timeline/decisions.tsx","../../src/timeline/message-attachments.tsx","../../src/timeline/queue-dock.tsx","../../src/timeline/session-list.tsx","../../src/timeline/sheet.tsx","../../src/timeline/session-signals.tsx","../../src/timeline/session-screen.tsx","../../src/timeline/model-picker.tsx","../../src/timeline/session-actions.tsx"],"names":["createContext","jsx","Text","useContext","jsxs","Fragment","Pressable","View","toolDisplayName","useMemo","useRef","useState","Animated","FadeIn","FadeOut","useEffect","Platform","ActivityIndicator","useCallback","TextInput","ScrollView","useAnimatedStyle","SESSION_STATUS_PRESENTATION","useWindowDimensions","AccessibilityInfo","Easing","Modal","KeyboardAvoidingView","Chip","defaultChatComposerMessages","sessionDisplayTitle"],"mappings":"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","file":"index.js","sourcesContent":["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 sandboxRowTitle,\n startupDuration,\n startupPhaseTitle,\n STARTUP_WAIT_TITLES,\n toolDisplayName,\n toolRowPresentation,\n workerRowTitle,\n type ToolBody,\n type ToolIconKind,\n type ToolPreview,\n type ToolRowPresentation,\n type WebSearchResult,\n} from \"@opengeni/react/timeline-model\";\nimport { createContext, useContext, 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\";\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 renderMarkdown?:\n | ((text: string, options: { tone: \"body\" | \"muted\"; streaming?: boolean }) => ReactNode)\n | undefined;\n onOpenSession?: ((sessionId: string) => void) | undefined;\n}\n\nconst ActivityOptionsContext = createContext<NativeActivityOptions>({});\nexport const NativeActivityOptionsProvider = ActivityOptionsContext.Provider;\nexport function useNativeActivityOptions(): NativeActivityOptions {\n return useContext(ActivityOptionsContext);\n}\n\nconst TOOL_ICON: Record<ToolIconKind, NativeIconName> = {\n terminal: \"terminal\",\n keyboard: \"keyboard\",\n \"file-diff\": \"file-diff\",\n search: \"search\",\n question: \"message-circle-question\",\n target: \"target\",\n brain: \"brain-circuit\",\n sessions: \"messages-square\",\n server: \"server\",\n \"server-cog\": \"server-cog\",\n calendar: \"calendar-clock\",\n panels: \"panels-top-left\",\n share: \"share-2\",\n message: \"message-square\",\n git: \"folder-git\",\n box: \"box\",\n key: \"key-round\",\n \"file-search\": \"file-search\",\n \"package-search\": \"package-search\",\n plug: \"plug\",\n wrench: \"wrench\",\n};\n\nfunction PreviewNode({ preview, compact }: { preview: ToolPreview; compact: boolean }) {\n const 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\"] }}>{preview.count} files</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 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>results folded into model context — no list available.</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 \"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 +{body.more} 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}: {\n presentation: ToolRowPresentation;\n compact?: boolean;\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 >\n <ToolBodyView body={p.body} />\n </ActivityDisclosure>\n );\n}\n\nfunction ToolCallRow({ item, compact }: { item: ToolCallItem; compact: boolean }) {\n const options = useNativeActivityOptions();\n const presentation = toolRowPresentation(item, { computeLabel: options.computeLabel ?? null });\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 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 return <PresentedToolRow presentation={presentation} compact={compact} />;\n}\n\nfunction ReasoningRow({ item, compact }: { item: ReasoningItem; compact: boolean }) {\n const theme = useNativeTimelineTheme();\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 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 Thought\n </Text>\n )\n }\n accessibilityLabel={item.streaming ? \"Thinking\" : \"Thought\"}\n preview={plain || undefined}\n >\n {options.renderMarkdown ? (\n options.renderMarkdown(item.text, { tone: \"muted\", streaming: item.streaming })\n ) : (\n <Text\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 </ActivityDisclosure>\n );\n}\n\nfunction SandboxRow({ item, compact }: { item: SandboxItem; compact: boolean }) {\n return (\n <ActivityDisclosure\n icon=\"square-terminal\"\n iconTone={\n item.status === \"failed\" ? \"failed\" : item.status === \"running\" ? \"running\" : \"muted\"\n }\n title={sandboxRowTitle(item, (name) => toolDisplayName(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=\"Command\" value={item.command} /> : null}\n {item.output ? <PayloadBlock label=\"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 failed = item.status === \"failed\";\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[item.blockedReason]\n : startupPhaseTitle(item.phase, item.status, item.outcome)\n }\n preview={\n item.phase === \"model_preparation\"\n ? \"Includes overlapping sandbox startup, custom environment setup, repository preparation, and runtime setup shown below.\"\n : undefined\n }\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 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(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 style={{ flex: 1, minWidth: 0 }}>\n {options.renderMarkdown ? (\n options.renderMarkdown(item.text, { tone: \"muted\", streaming: item.streaming })\n ) : (\n <Text\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 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 ? \"Proposed knowledge\"\n : item.outcome === \"failed\"\n ? \"Knowledge save failed\"\n : \"Saved to knowledge\"\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=\"Saved to memory\"\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=\"Worker decision\"\n expandable={false}\n compact={compact}\n />\n );\n default:\n return null;\n }\n}\n","import type { ActivityItem, TurnOutcome } from \"@opengeni/react/session\";\nimport {\n createTurnSummaryContext,\n formatElapsed,\n GENIE_PREPARING_PHRASES,\n GENIE_WAITING_PHRASES,\n resolveTurnSummaryFacets,\n rollingActivityItem,\n selectTurnSummaryFacets,\n toolDisplayName,\n type TurnSummaryFacetConfiguration,\n} from \"@opengeni/react/timeline-model\";\nimport {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport { Platform, Pressable, Text, View, type TextStyle } from \"react-native\";\nimport Animated, { FadeIn, FadeInDown, FadeOut, FadeOutUp } from \"react-native-reanimated\";\nimport { ActivityRow } from \"./activity\";\nimport { ThinkingOrb } from \"./thinking-orb\";\nimport { Icon } from \"./icon\";\nimport { PulseDot, ShimmerText, ROW_MIN_HEIGHT, useReleaseFollow } from \"./primitives\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\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 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(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 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 children,\n}: TurnSummaryProps) {\n const theme = useNativeTimelineTheme();\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 useEffect(() => {\n if (status && defaultOpen && remembered === undefined && !readerOwnsOpen.current) setOpen(true);\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 setOpen(next);\n };\n const context = useMemo(\n () =>\n createTurnSummaryContext(\n items,\n outcome,\n failureText,\n durationMs,\n contextCompactionCount ?? 0,\n ),\n [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 ?? \"Worked for\"} ${formatElapsed(status.durationMs)}`}</Text>\n );\n }\n } else if (status) {\n hasStatusText = true;\n const label = status.label ?? (status.kind === \"working\" ? \"Working\" : \"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 =\n (showLive\n ? \"\"\n : facetText\n .map((value, index) => (index > 0 || hasStatusText ? ` · ${value}` : value))\n .join(\"\")) + \"\";\n\n const renderHeader = (pinned: boolean) => (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityState={{ expanded: open }}\n onPress={() => (pinned ? collapseFromPin() : toggle(!open))}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n minHeight: ROW_MIN_HEIGHT,\n paddingVertical: 10,\n borderRadius: theme.radius.sm,\n // Web `-mx-2 px-2 w-full`: shifted left 8 with the same width.\n ...(bare\n ? { gap: 8, paddingHorizontal: 6 }\n : { gap: 10, paddingHorizontal: 8, marginLeft: -8, marginRight: 8 }),\n backgroundColor: pressed\n ? theme.colors.hover\n : !bare && open\n ? theme.colors.bg\n : \"transparent\",\n })}\n >\n <View style={{ transform: [{ rotate: open ? \"90deg\" : \"0deg\" }] }}>\n <Icon name=\"chevron-right\" size={14} color={theme.colors[\"fg-subtle\"]} />\n </View>\n {showMarker ? (\n <View\n style={{\n width: bare ? 14 : 20,\n height: bare ? 14 : 20,\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {outcome === \"failed\" ? (\n <Icon name=\"triangle-alert\" size={12} color={theme.colors[\"status-failed\"]} />\n ) : outcome === \"cancelled\" ? (\n <Icon name=\"circle-slash\" size={12} color={theme.colors[\"fg-subtle\"]} />\n ) : (\n <PulseDot color={theme.colors[\"fg-subtle\"]} />\n )}\n </View>\n ) : null}\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n minWidth: 0,\n ...(status?.kind === \"worked\" ? { flexShrink: 1 } : { flex: 1 }),\n }}\n >\n {statusNode}\n {showLive ? (\n <View style={{ flex: 1, minWidth: 0 }}>{liveHeader}</View>\n ) : (\n <Text style={[text, TRUNCATED_TAIL]} numberOfLines={1}>\n {tail}\n {outcome === \"failed\" && failureText ? (\n <Text style={{ color: theme.colors[\"status-failed\"] }}>{` · ${failureText}`}</Text>\n ) : null}\n {outcome === \"cancelled\" ? (\n <Text style={{ color: theme.colors[\"fg-subtle\"] }}>{\" · interrupted\"}</Text>\n ) : null}\n </Text>\n )}\n </View>\n {status?.kind === \"worked\" ? (\n <View\n style={{\n marginLeft: 4,\n height: 1,\n flex: 1,\n minWidth: 0,\n backgroundColor: theme.colors.border,\n }}\n />\n ) : null}\n {status && status.kind !== \"worked\" && (contextCompactionCount ?? 0) > 0 ? (\n <Icon name=\"shrink\" size={14} color={theme.colors[\"fg-muted\"]} />\n ) : null}\n </Pressable>\n );\n const sticky = !bare && open && foldKey !== undefined && registerSticky !== null;\n const collapseFromPin = () => {\n toggle(false);\n registerSticky?.reveal(frame.current.top);\n };\n const report = () => {\n if (!sticky || !registerSticky || foldKey === undefined) return;\n registerSticky.register(foldKey, { ...frame.current, render: () => renderHeader(true) });\n };\n // oxlint-disable-next-line react-hooks/exhaustive-deps -- re-report when the row content changes\n useEffect(() => {\n if (!sticky) {\n if (registerSticky && foldKey !== undefined) registerSticky.register(foldKey, null);\n return;\n }\n report();\n return () => registerSticky?.register(foldKey!, null);\n });\n\n return (\n <View\n onLayout={(event) => {\n const { y, height } = event.nativeEvent.layout;\n frame.current = { ...frame.current, top: y, height };\n report();\n }}\n >\n <View\n onLayout={(event) => {\n frame.current = { ...frame.current, headerHeight: event.nativeEvent.layout.height };\n report();\n }}\n >\n {renderHeader(false)}\n </View>\n {status && status.kind !== \"worked\" && !open && status.preview ? (\n <Pressable\n onPress={() => toggle(true)}\n style={{ paddingBottom: 4, paddingLeft: 24, minWidth: 0 }}\n >\n {status.preview}\n </Pressable>\n ) : null}\n {open ? (\n <Animated.View\n entering={FadeIn.duration(160)}\n style={bare ? { paddingTop: 4, paddingLeft: 20 } : { paddingTop: 8 }}\n >\n {children}\n </Animated.View>\n ) : null}\n </View>\n );\n}\n\n/** The stable left rule under a turn/activity body (web TurnRailFrame). */\nexport function TurnRailFrame({\n children,\n compact = false,\n}: {\n children: ReactNode;\n compact?: boolean;\n}) {\n const theme = useNativeTimelineTheme();\n return (\n <View\n style={{\n borderLeftWidth: 2,\n borderLeftColor: theme.colors.border,\n paddingLeft: 12,\n gap: compact ? 2 : 16,\n }}\n >\n {children}\n </View>\n );\n}\n\nfunction familyOf(item: ActivityItem): string {\n if (item.kind === \"tool-call\") return `tool:${item.name}`;\n return item.kind;\n}\n\n/** The native ActivityRail (bare): tight same-family rows, breathing room between families. */\nexport function ActivityRail({\n items,\n startupActive,\n renderPreparing,\n}: {\n items: ActivityItem[];\n startupActive?: boolean | undefined;\n renderPreparing?: ((props: PreparingProps) => ReactNode) | undefined;\n}) {\n const phases = items.filter((item) => item.kind === \"startup-phase\");\n const hasWork = items.some(\n (item) =>\n item.kind !== \"startup-phase\" && (item.kind !== \"reasoning\" || item.text.trim().length > 0),\n );\n const interrupted = phases.some(\n (item) => item.status === \"failed\" || item.status === \"cancelled\",\n );\n const providerResponded = phases.some(\n (item) => item.phase === \"provider_first_byte\" && item.status === \"complete\",\n );\n const responsePending = phases.some((item) => item.phase === \"provider_first_byte\");\n const loading =\n !hasWork &&\n !interrupted &&\n (startupActive ?? (!providerResponded && phases.some((item) => item.status === \"running\")));\n const visibleItems = items.filter((item) =>\n item.kind === \"startup-phase\"\n ? item.status === \"failed\" || item.status === \"cancelled\"\n : item.kind !== \"reasoning\" || item.text.trim().length > 0,\n );\n const startedAt = phases.reduce(\n (first, item) => (item.startedAt < first ? item.startedAt : first),\n phases[0]?.startedAt ?? \"\",\n );\n return (\n <View style={{ gap: 2 }}>\n {loading ? (\n <Animated.View entering={FadeIn.duration(160)} exiting={FadeOut.duration(160)}>\n <PreparingState\n startedAt={startedAt}\n phase={responsePending ? \"waiting\" : \"preparing\"}\n render={renderPreparing}\n />\n </Animated.View>\n ) : null}\n {visibleItems.map((item, index) => {\n const newFamily = index > 0 && familyOf(item) !== familyOf(visibleItems[index - 1]!);\n return (\n <View key={item.id} style={newFamily ? { marginTop: 12 } : undefined}>\n <ActivityRow item={item} />\n </View>\n );\n })}\n </View>\n );\n}\n\nexport interface PreparingProps {\n startedAt: string;\n phase: \"preparing\" | \"waiting\";\n phrase: string;\n slow: boolean;\n}\n\n/** The web GenieLoading: a visual (orb by default; hosts supply a character) + rotating copy. */\nexport function PreparingState({\n startedAt,\n phase,\n render,\n}: {\n startedAt: string;\n phase: \"preparing\" | \"waiting\";\n render?: ((props: PreparingProps) => ReactNode) | undefined;\n}) {\n const theme = useNativeTimelineTheme();\n const phrases = phase === \"waiting\" ? GENIE_WAITING_PHRASES : GENIE_PREPARING_PHRASES;\n const [index, setIndex] = useState(() => Math.floor(Math.random() * phrases.length));\n const [slow, setSlow] = useState(false);\n useEffect(() => {\n const update = () => {\n setSlow(Date.now() - Date.parse(startedAt) >= 30_000);\n setIndex(Math.floor(Math.random() * phrases.length));\n };\n const timer = setInterval(update, 5_000);\n return () => clearInterval(timer);\n }, [startedAt, phrases]);\n const phrase = slow\n ? phase === \"waiting\"\n ? \"Still waiting for a response…\"\n : \"A little longer than usual…\"\n : (phrases[index % phrases.length] ?? \"\");\n if (render) return <>{render({ startedAt, phase, phrase, slow })}</>;\n return (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 14,\n minHeight: 88,\n paddingVertical: 12,\n }}\n >\n <ThinkingOrb />\n <Animated.Text\n key={phrase}\n entering={FadeIn.duration(650)}\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {phrase}\n </Animated.Text>\n </View>\n );\n}\n\n/** One stable 24pt viewport; updates replace its content without moving the conversation. */\nexport function RollingActivity({\n items,\n previousItem,\n showCount = true,\n}: {\n items: ActivityItem[];\n previousItem?: ActivityItem | undefined;\n showCount?: boolean;\n}) {\n const theme = useNativeTimelineTheme();\n const [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(item.name, item.display)\n : item.kind === \"reasoning\"\n ? \"Thinking\"\n : \"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 { SessionEvent, SessionStatus } from \"@opengeni/sdk\";\nimport {\n buildTimeline,\n groupTimeline,\n type AgentMessageItem,\n type HumanInputItem,\n type TimelineGroup,\n type TimelineItem,\n type UserMessageItem,\n} from \"@opengeni/react/session\";\nimport {\n compactedLandmarkCount,\n durationBetween,\n flattenActivityItems,\n formatClockTime,\n formatRelativeTime,\n isPreparingWork,\n noticeDisplayText,\n noticeTone,\n QUESTION_NAV_MARGIN_PX,\n recordedWaitSummaryText,\n questionNavTarget,\n readableWorkDefaultOpen,\n readableWorkShowsPreview,\n readableWorkStatus,\n SESSION_STATUS_PRESENTATION,\n timelineGroupContainsPresentedImage,\n type TurnSummaryFacetConfiguration,\n} from \"@opengeni/react/timeline-model\";\nimport { useCallback, useMemo, useRef, useState, type ComponentRef, type ReactNode } from \"react\";\nimport {\n Pressable,\n ScrollView,\n Text,\n View,\n type NativeScrollEvent,\n type NativeSyntheticEvent,\n type StyleProp,\n type ViewStyle,\n} from \"react-native\";\nimport Animated, { FadeIn, FadeOut } from \"react-native-reanimated\";\nimport { NativeActivityOptionsProvider, type NativeActivityOptions } from \"./activity\";\nimport { Icon } from \"./icon\";\nimport { ReleaseFollowProvider, withAlpha } from \"./primitives\";\nimport { 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\";\n\n/* ----------------------------------------------------------------------------\n Native MessageTimeline: the web MessageTimeline (components/message-timeline)\n in its rolling readable-turn configuration, drawn with native primitives.\n Grouping, fold defaults, statuses and facets come from the shared model.\n -------------------------------------------------------------------------- */\n\nexport type NativeMarkdownRenderer = (\n text: string,\n options: { tone: \"body\" | \"muted\"; streaming?: boolean | undefined },\n) => ReactNode;\n\nexport interface NativeMessageTimelineProps extends NativeActivityOptions {\n /** Projected items (preferred) or raw durable events. */\n items?: TimelineItem[] | undefined;\n events?: SessionEvent[] | undefined;\n status?: SessionStatus | null | undefined;\n facets?: TurnSummaryFacetConfiguration | undefined;\n renderMarkdown?: NativeMarkdownRenderer | undefined;\n /** Replace the preparing visual (the web orb) — e.g. a product character. */\n renderPreparing?: ((props: PreparingProps) => ReactNode) | undefined;\n /** Extra actions beside copy under a message (feedback, share, …). */\n renderMessageActions?: ((item: AgentMessageItem | UserMessageItem) => ReactNode) | undefined;\n /** Files sent with a user message, shown above its bubble (images as previews). */\n renderUserAttachments?: ((item: UserMessageItem) => ReactNode) | undefined;\n onCopy?: ((text: string) => void) | undefined;\n /** Rendered after the last group (pending questions, approvals, errors). */\n trailing?: ReactNode;\n emptyState?: ReactNode;\n header?: ReactNode;\n 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 style?: StyleProp<ViewStyle>;\n}\n\nexport function MessageTimeline(props: NativeMessageTimelineProps) {\n const theme = useNativeTimelineTheme();\n const items = useMemo(\n () => props.items ?? buildTimeline(props.events ?? []),\n [props.items, props.events],\n );\n const groups = useMemo(() => groupTimeline(items, { readableTurns: true }), [items]);\n const foldMemory = useRef(new Map<string, \"open\" | \"closed\">()).current;\n const scrollRef = useRef<ComponentRef<typeof ScrollView>>(null);\n const following = useRef(true);\n // Only reader gestures change follow intent; layout-driven scroll events\n // (content growing before the first scroll-to-end) must not unstick it.\n const readerScrolling = useRef(false);\n const [showJump, setShowJump] = useState(false);\n // \"Back to your message\": prompt rows' content offsets, read on scroll.\n const promptFrames = useRef(new Map<string, { top: number; bottom: number }>()).current;\n const [questionNav, setQuestionNav] = useState<string | null>(null);\n // Expanded outer turn headers, for the pinned copy (web: sticky in its section).\n const stickyHeaders = useRef(new Map<string, StickyWorkHeader>()).current;\n const scrollY = useRef(0);\n const [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 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 scrollRef.current?.scrollTo({ y: Math.max(0, top - 8), 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 if (readerScrolling.current) following.current = distance < 48;\n setShowJump(distance > 240 && !following.current);\n const { contentOffset, layoutMeasurement } = event.nativeEvent;\n scrollY.current = contentOffset.y;\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, updatePinned],\n );\n const onScrollEnd = useCallback(\n (event: NativeSyntheticEvent<NativeScrollEvent>) => {\n following.current = measure(event) < 48;\n readerScrolling.current = false;\n },\n [measure],\n );\n const onContentSizeChange = useCallback(() => {\n if (following.current) scrollRef.current?.scrollToEnd({ animated: false });\n }, []);\n const activityOptions = useMemo<NativeActivityOptions>(\n () => ({\n toolRenderers: props.toolRenderers,\n renderTool: props.renderTool,\n computeLabel: props.computeLabel,\n renderMarkdown: props.renderMarkdown,\n onOpenSession: props.onOpenSession,\n }),\n [\n props.toolRenderers,\n props.renderTool,\n props.computeLabel,\n props.renderMarkdown,\n props.onOpenSession,\n ],\n );\n const context: GroupContext = {\n facets: props.facets,\n renderMarkdown: props.renderMarkdown,\n renderPreparing: props.renderPreparing,\n renderMessageActions: props.renderMessageActions,\n renderUserAttachments: props.renderUserAttachments,\n onCopy: props.onCopy,\n };\n return (\n <NativeActivityOptionsProvider value={activityOptions}>\n <FoldMemoryProvider value={foldMemory}>\n <StickyWorkHeaderProvider value={registerSticky}>\n <ReleaseFollowProvider value={releaseFollow}>\n <View style={[{ flex: 1, backgroundColor: theme.colors.bg }, props.style]}>\n <ScrollView\n ref={scrollRef}\n onScroll={onScroll}\n onScrollBeginDrag={() => {\n readerScrolling.current = true;\n }}\n onScrollEndDrag={onScrollEnd}\n onMomentumScrollEnd={onScrollEnd}\n onLayout={() => {\n if (following.current) scrollRef.current?.scrollToEnd({ animated: false });\n }}\n scrollEventThrottle={32}\n onContentSizeChange={onContentSizeChange}\n keyboardDismissMode=\"interactive\"\n keyboardShouldPersistTaps=\"handled\"\n contentContainerStyle={{\n paddingTop: props.contentInsetTop ?? 16,\n paddingHorizontal: 16,\n paddingBottom: props.contentInsetBottom ?? 24,\n gap: 20,\n flexGrow: 1,\n }}\n >\n {props.header}\n {groups.length === 0 && props.emptyState ? props.emptyState : null}\n {groups.map((group) => {\n const key = groupKey(group);\n const prompt = group.kind === \"item\" && group.item.kind === \"user-message\";\n return prompt ? (\n <View\n key={key}\n onLayout={(event) => {\n const { y, height } = event.nativeEvent.layout;\n promptFrames.set(key, { top: y, bottom: y + height });\n }}\n >\n <TimelineGroupView group={group} context={context} />\n </View>\n ) : (\n <TimelineGroupView key={key} group={group} context={context} />\n );\n })}\n {props.trailing}\n </ScrollView>\n {pinned && stickyHeaders.get(pinned.key) ? (\n <View\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n paddingHorizontal: 16,\n backgroundColor: theme.colors.bg,\n transform: [{ translateY: pinned.offset }],\n }}\n >\n {stickyHeaders.get(pinned.key)!.render()}\n </View>\n ) : null}\n {/* Web timeline navigation: two identical small round arrow buttons at\n fixed, centered spots that never dodge the content beneath them. */}\n {questionNav ? (\n <View\n pointerEvents=\"box-none\"\n style={{\n position: \"absolute\",\n // Below a pinned work header so that strip stays a full-width target.\n top: pinned ? pinned.height + pinned.offset + 8 : 12,\n left: 0,\n right: 0,\n alignItems: \"center\",\n }}\n >\n <NavButton\n icon=\"arrow-up\"\n label=\"Back to your message\"\n onPress={() => {\n const frame = promptFrames.get(questionNav);\n if (!frame) return;\n following.current = false;\n scrollRef.current?.scrollTo({\n y: Math.max(0, frame.top - QUESTION_NAV_MARGIN_PX),\n animated: true,\n });\n }}\n />\n </View>\n ) : null}\n {showJump ? (\n <View\n pointerEvents=\"box-none\"\n style={{\n position: \"absolute\",\n bottom: (props.overlayInsetBottom ?? 0) + 12,\n left: 0,\n right: 0,\n alignItems: \"center\",\n }}\n >\n <NavButton\n icon=\"arrow-down\"\n label=\"Jump to latest\"\n onPress={() => {\n following.current = true;\n scrollRef.current?.scrollToEnd({ animated: true });\n }}\n />\n </View>\n ) : null}\n </View>\n </ReleaseFollowProvider>\n </StickyWorkHeaderProvider>\n </FoldMemoryProvider>\n </NativeActivityOptionsProvider>\n );\n}\n\n/**\n * The web timeline's navigation button (NAV_BUTTON_CLASS): 32pt round, surface-3\n * at 90% with a border and shadow, a 16pt fg-muted arrow, and a 44pt touch target.\n */\nfunction NavButton(props: { icon: \"arrow-up\" | \"arrow-down\"; label: string; onPress: () => void }) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n return (\n <Animated.View entering={FadeIn.duration(150)} exiting={FadeOut.duration(150)}>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={props.label}\n onPress={props.onPress}\n hitSlop={6}\n style={({ pressed }) => ({\n width: 32,\n height: 32,\n borderRadius: 16,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderWidth: 1,\n borderColor: pressed ? c[\"border-strong\"] : c.border,\n backgroundColor: withAlpha(c[\"surface-3\"], 0.9),\n shadowColor: \"#000\",\n shadowOpacity: 0.1,\n shadowRadius: 6,\n shadowOffset: { width: 0, height: 2 },\n elevation: 3,\n })}\n >\n {({ pressed }) => (\n <Icon name={props.icon} size={16} color={pressed ? c.fg : c[\"fg-muted\"]} />\n )}\n </Pressable>\n </Animated.View>\n );\n}\n\ntype GroupContext = {\n facets?: TurnSummaryFacetConfiguration | undefined;\n renderMarkdown?: NativeMarkdownRenderer | undefined;\n renderPreparing?: ((props: PreparingProps) => ReactNode) | undefined;\n renderMessageActions?: ((item: AgentMessageItem | UserMessageItem) => ReactNode) | undefined;\n renderUserAttachments?: ((item: UserMessageItem) => ReactNode) | undefined;\n onCopy?: ((text: string) => void) | undefined;\n};\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 switch (group.kind) {\n case \"activity\": {\n if (group.work) {\n if (isPreparingWork(group, { startupDetails: false, startupDismissed: insideTurn })) {\n return (\n <ActivityRail\n items={group.items}\n startupActive\n renderPreparing={context.renderPreparing}\n />\n );\n }\n const base = readableWorkStatus({ ...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 ? { kind: \"waiting\", since: base.since, label: base.label }\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 facets={context.facets}\n contextCompactionCount={compactedLandmarkCount(group.work.details)}\n >\n <TurnRailFrame compact>\n <FoldedGroups groups={group.work.details} context={context} />\n </TurnRailFrame>\n </TurnSummary>\n );\n }\n const preparationOnly =\n !insideTurn &&\n !group.outcome &&\n group.items.every(\n (item) =>\n item.kind === \"startup-phase\" || (item.kind === \"reasoning\" && !item.text.trim()),\n );\n if (preparationOnly) {\n return <ActivityRail items={group.items} renderPreparing={context.renderPreparing} />;\n }\n if (insideTurn) {\n return <ActivityRail items={group.items} startupActive={false} />;\n }\n const image = timelineGroupContainsPresentedImage(group);\n return (\n <TurnSummary\n items={group.items}\n outcome={group.outcome}\n failureText={group.failureText}\n defaultOpen={group.outcome === \"failed\" || image ? true : undefined}\n liveHeader={\n !image && !group.outcome ? <RollingActivity items={group.items} /> : undefined\n }\n foldKey={group.id}\n facets={context.facets}\n >\n <TurnRailFrame>\n <ActivityRail items={group.items} startupActive={false} />\n </TurnRailFrame>\n </TurnSummary>\n );\n }\n case \"turn\": {\n const activityItems = flattenActivityItems(group.groups);\n const image = timelineGroupContainsPresentedImage(group);\n return (\n <TurnSummary\n items={activityItems}\n outcome={group.outcome}\n failureText={insideTurn ? undefined : group.failureText}\n durationMs={durationBetween(group.startedAt, group.endedAt)}\n defaultOpen={!insideTurn && (group.outcome === \"failed\" || image) ? true : undefined}\n bare={insideTurn}\n foldKey={group.id}\n facets={context.facets}\n contextCompactionCount={group.contextCompactionCount}\n >\n {insideTurn ? (\n <View style={{ gap: 16 }}>\n <FoldedGroups groups={group.groups} context={context} />\n </View>\n ) : (\n <TurnRailFrame>\n <FoldedGroups groups={group.groups} context={context} />\n </TurnRailFrame>\n )}\n </TurnSummary>\n );\n }\n case \"item\":\n return <TimelineRow item={group.item} context={context} />;\n }\n}\n\nfunction FoldedGroups({\n groups,\n context,\n}: {\n groups: readonly TimelineGroup[];\n context: GroupContext;\n}) {\n return (\n <>\n {groups.map((child, index) => (\n <View\n key={groupKey(child)}\n style={\n index > 0 && (child.kind !== \"activity\" || groups[index - 1]?.kind !== \"activity\")\n ? { marginTop: 12 }\n : undefined\n }\n >\n <TimelineGroupView group={child} context={context} insideTurn />\n </View>\n ))}\n </>\n );\n}\n\nfunction TimelineRow({ item, context }: { item: TimelineItem; context: GroupContext }) {\n const theme = useNativeTimelineTheme();\n switch (item.kind) {\n case \"user-message\":\n return <UserMessageRow item={item} context={context} />;\n case \"agent-message\":\n return <AgentMessageRow item={item} context={context} />;\n case \"human-input\":\n return <HumanInputRow item={item} onCopy={context.onCopy} />;\n case \"session-status\": {\n const meta = SESSION_STATUS_PRESENTATION[item.status];\n return (\n <SeparatorRow\n dot={item.resolvedAt ? undefined : theme.colors[`status-${meta.tone}`]}\n text={`${item.resolvedAt ? \"work resumed\" : meta.label.toLowerCase()} · ${formatRelativeTime(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 Worker reported back\n </Text>\n <Text\n numberOfLines={3}\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {item.text}\n </Text>\n </View>\n );\n case \"auth-needed\":\n return (\n <View\n style={{\n borderRadius: theme.radius.md,\n borderWidth: 1,\n borderColor: theme.colors.border,\n padding: 14,\n backgroundColor: theme.colors[\"surface-1\"],\n }}\n >\n <Text\n style={{ ...fontStyle(theme, 500), fontSize: theme.size.md, color: theme.colors.fg }}\n >\n Connection needed\n </Text>\n <Text\n style={{\n ...fontStyle(theme),\n marginTop: 4,\n fontSize: theme.size.sm,\n color: theme.colors[\"fg-muted\"],\n }}\n >\n {item.providerDomain} needs to be reconnected before the agent can continue.\n </Text>\n </View>\n );\n default:\n return null;\n }\n}\n\n/**\n * The web footer stamp. Hermes/iOS ICU joins date and time with \" at \" where the\n * browser's ICU uses \", \"; normalize to the web form.\n */\nfunction nativeClockTime(iso: string): string {\n return formatClockTime(iso).replace(\" at \", \", \");\n}\n\nfunction NoticeRow({ item }: { item: Extract<TimelineItem, { kind: \"notice\" }> }) {\n const theme = useNativeTimelineTheme();\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(item).replace(\" at \", \", \")}\n </Text>\n </View>\n {open ? (\n <Text\n style={{\n ...fontStyle(theme),\n marginTop: 4,\n paddingLeft: 22,\n fontSize: theme.size.sm,\n lineHeight: 19,\n color: c[\"fg-muted\"],\n }}\n >\n {item.text}\n </Text>\n ) : null}\n </Pressable>\n );\n }\n const tone = noticeTone(item);\n const accent =\n tone === \"failed\"\n ? c[\"status-failed\"]\n : tone === \"waiting\"\n ? c[\"status-waiting\"]\n : c[\"fg-muted\"];\n return (\n <View\n accessibilityRole=\"text\"\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n borderRadius: theme.radius.md,\n borderWidth: 1,\n paddingHorizontal: 14,\n paddingVertical: 10,\n borderColor: tone === \"neutral\" ? c.border : withAlpha(accent, 0.35),\n backgroundColor: tone === \"neutral\" ? c[\"surface-1\"] : withAlpha(accent, 0.1),\n }}\n >\n <View style={{ marginTop: 2, opacity: item.tone === \"cancelled\" ? 0.6 : 1 }}>\n <Icon name=\"triangle-alert\" size={16} color={accent} />\n </View>\n <Text style={{ ...fontStyle(theme), flex: 1, fontSize: 14, lineHeight: 20, color: accent }}>\n {noticeDisplayText(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 [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=\"Copy message\"\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(occurredAt)}\n </Text>\n </View>\n );\n}\n\nfunction UserMessageRow({ item, context }: { item: UserMessageItem; context: GroupContext }) {\n const theme = useNativeTimelineTheme();\n const failed = item.delivery?.state === \"failed\";\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 ? (\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 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 ) : 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 || \"Message not sent\"}\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 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 {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 {item.streaming ? null : (\n <MessageFooter\n text={item.text}\n occurredAt={item.occurredAt}\n align=\"start\"\n actions={context.renderMessageActions?.(item)}\n onCopy={context.onCopy}\n />\n )}\n </Animated.View>\n );\n}\n\nfunction HumanInputRow({\n item,\n onCopy,\n}: {\n item: HumanInputItem;\n onCopy?: ((text: string) => void) | undefined;\n}) {\n const theme = useNativeTimelineTheme();\n const multiple = Math.max(item.questions.length, item.answers.length) > 1;\n const settled =\n item.response.outcome === \"answered\"\n ? \"You answered\"\n : item.response.outcome === \"skipped\"\n ? \"Skipped\"\n : item.response.outcome === \"expired\"\n ? \"Expired\"\n : \"Cancelled\";\n const answerText = item.answers\n .map((answer) => `${multiple ? `${answer.label}: ` : \"\"}${answer.values.join(\", \")}`)\n .join(\"\\n\");\n return (\n <View style={{ gap: 10 }}>\n <View\n style={{\n maxWidth: \"90%\",\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 12,\n borderWidth: 1,\n borderColor: theme.colors.border,\n backgroundColor: theme.colors[\"surface-1\"],\n borderTopLeftRadius: theme.radius.lg,\n borderTopRightRadius: theme.radius.lg,\n borderBottomRightRadius: theme.radius.lg,\n borderBottomLeftRadius: theme.radius.xs,\n paddingHorizontal: 14,\n paddingVertical: 12,\n }}\n >\n <View\n style={{\n marginTop: 2,\n width: 32,\n height: 32,\n borderRadius: theme.radius.md,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: withAlpha(theme.colors[\"status-waiting\"], 0.1),\n }}\n >\n <Icon name=\"message-circle-question\" size={16} color={theme.colors[\"status-waiting\"]} />\n </View>\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.xs,\n color: theme.colors[\"fg-subtle\"],\n }}\n >\n Agent asked\n </Text>\n <View style={{ marginTop: 6, gap: 12 }}>\n {item.questions.map((question, index) => (\n <View key={question.id}>\n {question.label ? (\n <Text\n style={{\n ...fontStyle(theme, 600),\n fontSize: theme.size.sm,\n color: theme.colors.fg,\n }}\n >\n {multiple ? `${index + 1}. ` : \"\"}\n {question.label}\n </Text>\n ) : null}\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: question.label ? theme.size.sm : theme.size.md,\n lineHeight: question.label ? 18 : 24,\n marginTop: question.label ? 2 : 0,\n color: question.label ? theme.colors[\"fg-muted\"] : theme.colors.fg,\n }}\n >\n {question.prompt}\n </Text>\n </View>\n ))}\n </View>\n </View>\n </View>\n <View style={{ alignItems: \"flex-end\" }}>\n <View\n style={{\n maxWidth: \"85%\",\n backgroundColor: theme.colors[\"surface-2\"],\n borderWidth: 1,\n borderColor: theme.colors.border,\n borderTopLeftRadius: 14,\n borderTopRightRadius: 14,\n borderBottomLeftRadius: 14,\n borderBottomRightRadius: 4,\n paddingHorizontal: 16,\n paddingVertical: 10,\n }}\n >\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.xs,\n color: theme.colors[\"fg-subtle\"],\n }}\n >\n {settled}\n </Text>\n {answerText ? (\n <Text\n style={{\n ...fontStyle(theme),\n marginTop: 2,\n fontSize: theme.size.md,\n lineHeight: 24,\n color: theme.colors.fg,\n }}\n >\n {answerText}\n </Text>\n ) : null}\n </View>\n <MessageFooter\n text={answerText || settled}\n occurredAt={item.occurredAt}\n align=\"end\"\n onCopy={onCopy}\n />\n </View>\n </View>\n );\n}\n","import type { ReactNode } from \"react\";\nimport { ActivityIndicator, Pressable, Text, type ViewStyle } from \"react-native\";\nimport { Icon, type NativeIconName } from \"./icon\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\n\n/* Web Button variants at `size=\"sm\"` (h-9, rounded-og-md, text-og-sm font-medium). */\n\nexport type ButtonVariant = \"primary\" | \"secondary\" | \"destructive\" | \"ghost\";\n/** `sm`: web Button size=\"sm\" (h-8, text 14). `form`: the question-form action (h-9, text 12). */\nexport type ButtonSize = \"sm\" | \"form\";\n\nexport function Button({\n label,\n icon,\n onPress,\n variant = \"secondary\",\n size = \"sm\",\n disabled,\n busy,\n style,\n accessibilityLabel,\n}: {\n label?: string | undefined;\n icon?: NativeIconName | undefined;\n onPress?: (() => void) | undefined;\n variant?: ButtonVariant;\n size?: ButtonSize;\n disabled?: boolean | undefined;\n busy?: boolean | undefined;\n style?: ViewStyle | undefined;\n accessibilityLabel?: string | undefined;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const palette =\n variant === \"primary\"\n ? { bg: c.primary, border: c[\"primary-border\"], fg: c[\"primary-fg\"] }\n : variant === \"destructive\"\n ? { bg: c[\"danger-fill\"], border: c[\"danger-fill\"], fg: c[\"danger-fg\"] }\n : variant === \"ghost\"\n ? { bg: \"transparent\", border: \"transparent\", fg: c[\"fg-muted\"] }\n : { bg: c[\"surface-2\"], border: c.border, fg: c[\"fg-muted\"] };\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel ?? label}\n accessibilityState={{ disabled: Boolean(disabled), busy: Boolean(busy) }}\n disabled={disabled || busy}\n onPress={onPress}\n style={({ pressed }) => [\n {\n minHeight: size === \"form\" ? 36 : 32,\n minWidth: label ? undefined : 44,\n paddingHorizontal: label ? (size === \"form\" ? 12 : 10) : 0,\n borderRadius: theme.radius.md,\n borderWidth: variant === \"destructive\" ? 0 : 1,\n borderColor: palette.border,\n backgroundColor: palette.bg,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 6,\n opacity: disabled ? 0.5 : pressed ? 0.85 : 1,\n },\n style,\n ]}\n >\n {busy ? (\n <ActivityIndicator size=\"small\" color={palette.fg} />\n ) : icon ? (\n <Icon name={icon} size={14} color={palette.fg} />\n ) : null}\n {label ? (\n <Text\n style={{\n ...fontStyle(theme, 500),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: palette.fg,\n }}\n >\n {label}\n </Text>\n ) : null}\n </Pressable>\n );\n}\n\n/** A 44pt square icon control (composer toolbar buttons). */\nexport function IconButton({\n icon,\n onPress,\n accessibilityLabel,\n tone = \"plain\",\n disabled,\n busy,\n children,\n}: {\n icon: NativeIconName;\n onPress?: (() => void) | undefined;\n accessibilityLabel: string;\n tone?: \"plain\" | \"primary\" | \"secondary\";\n disabled?: boolean | undefined;\n busy?: boolean | undefined;\n children?: ReactNode;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const framed = tone !== \"plain\";\n const fg = tone === \"primary\" ? c[\"primary-fg\"] : c[\"fg-muted\"];\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n accessibilityState={{ disabled: Boolean(disabled), busy: Boolean(busy) }}\n disabled={disabled || busy}\n onPress={onPress}\n hitSlop={4}\n style={({ pressed }) => ({\n width: 44,\n height: 44,\n borderRadius: theme.radius.md,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderWidth: framed ? 1 : 0,\n borderColor: tone === \"primary\" ? c[\"primary-border\"] : c.border,\n backgroundColor:\n tone === \"primary\"\n ? c.primary\n : tone === \"secondary\"\n ? c[\"surface-2\"]\n : pressed\n ? c.hover\n : \"transparent\",\n opacity: disabled ? 0.45 : pressed && framed ? 0.85 : 1,\n })}\n >\n {busy ? (\n <ActivityIndicator size=\"small\" color={fg} />\n ) : (\n <Icon\n name={icon}\n size={icon === \"pause\" ? 14 : 16}\n color={fg}\n fill={icon === \"pause\" || icon === \"play\" ? fg : undefined}\n />\n )}\n {children}\n </Pressable>\n );\n}\n","import {\n defaultChatComposerMessages,\n type ChatComposerMessages,\n} from \"@opengeni/react/composer-messages\";\nimport { GlassView, isLiquidGlassAvailable } from \"expo-glass-effect\";\nimport { useEffect, useState, type ComponentRef, type ReactNode, type Ref } from \"react\";\nimport {\n AccessibilityInfo,\n ActivityIndicator,\n Platform,\n Pressable,\n Text,\n TextInput,\n View,\n type ViewStyle,\n} from \"react-native\";\nimport Animated, { useAnimatedKeyboard, useAnimatedStyle } from \"react-native-reanimated\";\nimport { Button } from \"./controls\";\nimport { Icon, type NativeIconName } from \"./icon\";\nimport { withAlpha } from \"./primitives\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\nimport type { NativeVoiceInput } from \"../voice-input\";\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 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}\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 c = theme.colors;\n const ios = Platform.OS === \"ios\";\n const [height, setHeight] = useState(22);\n const empty = !props.value;\n useEffect(() => {\n if (empty) setHeight(22);\n }, [empty]);\n // Track the keyboard directly: React Native's KeyboardAvoidingView mis-measures\n // inside modals and overlays; the animated keyboard height does not.\n const keyboard = useAnimatedKeyboard();\n const floating = props.floating ?? false;\n // Only Liquid Glass lets the conversation scroll visibly beneath the composer;\n // a solid surface (Android, older iOS) sits on an opaque band down to the\n // screen edge, or text would peek out under the card and the gesture handle.\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 messages = { ...defaultChatComposerMessages, ...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=\"Dictate\" onPress={voice.start} />\n ) : null}\n </>\n ) : null;\n const field = (inline: boolean) => (\n <TextInput\n ref={props.inputRef}\n accessibilityLabel={messages.inputLabel}\n value={props.value}\n onChangeText={props.onChangeText}\n placeholder={\n props.placeholder ?? (props.paused ? messages.pausedPlaceholder : \"Send a follow-up...\")\n }\n placeholderTextColor={c[\"fg-subtle\"]}\n multiline\n autoFocus={props.autoFocus}\n selectionColor={c.accent}\n onContentSizeChange={(event) =>\n setHeight(Math.min(150, Math.max(22, event.nativeEvent.contentSize.height)))\n }\n style={{\n ...fontStyle(theme),\n fontSize: fieldSize,\n lineHeight: 22,\n color: c.fg,\n ...(inline\n ? { paddingTop: 7, paddingBottom: 7, paddingHorizontal: 6, minHeight: 36 }\n : { paddingTop: 14, paddingBottom: 2, paddingHorizontal: 16, minHeight: 40 }),\n // The inline field sizes itself; the stacked one tracks its content.\n // (iOS never shrinks a self-sized multiline field, so an empty one is pinned.)\n // A cleared field (after Send) returns to one line: iOS does not report\n // the smaller content size, so the last height would otherwise stick.\n height: ios\n ? inline\n ? props.value\n ? undefined\n : 36\n : (props.value ? height : 22) + 16\n : undefined,\n maxHeight: 166,\n textAlignVertical: inline ? \"center\" : \"top\",\n }}\n />\n );\n return (\n <Animated.View\n pointerEvents={floating ? \"box-none\" : \"auto\"}\n onLayout={(event) => props.onHeightChange?.(event.nativeEvent.layout.height)}\n style={[\n {\n paddingHorizontal: props.inset ?? 12,\n paddingTop: 6,\n gap: 8,\n backgroundColor: seeThrough ? \"transparent\" : c.bg,\n },\n floating ? { position: \"absolute\", left: 0, right: 0, bottom: 0 } : null,\n lift,\n ]}\n >\n {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={`${voice.error} Dismiss`}\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 }}>\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 <TrailingAction {...props} messages={messages} />\n </View>\n </>\n )}\n </ComposerSurface>\n </Animated.View>\n );\n}\n\n/** A quiet round toolbar button (the web composer's leading actions). */\nexport function ToolbarButton({\n icon,\n accessibilityLabel,\n onPress,\n}: {\n icon: NativeIconName;\n accessibilityLabel: string;\n onPress: () => void;\n}) {\n const theme = useNativeTimelineTheme();\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n onPress={onPress}\n hitSlop={4}\n style={({ pressed }) => ({\n width: 36,\n height: 36,\n borderRadius: 18,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: pressed ? theme.colors.hover : \"transparent\",\n })}\n >\n <Icon name={icon} size={20} color={theme.colors[\"fg-muted\"]} />\n </Pressable>\n );\n}\n\nconst LEVEL_BARS = 28;\n\nfunction formatDictationTime(seconds: number): string {\n const whole = Math.max(0, Math.floor(seconds));\n return `${Math.floor(whole / 60)}:${String(whole % 60).padStart(2, \"0\")}`;\n}\n\n/**\n * A recording whose text could not be fetched yet. It stays on the device:\n * Retry sends the same audio again; Discard is the only way to drop it.\n */\nfunction SavedRecordingStrip({ voice }: { voice: NativeVoiceInput }) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n return (\n <View style={{ gap: 6, paddingHorizontal: 16, paddingTop: 10 }}>\n <View style={{ flexDirection: \"row\", alignItems: \"flex-start\", gap: 8 }}>\n <Icon name=\"audio-lines\" size={14} color={c[\"status-waiting\"]} />\n <Text\n accessibilityLiveRegion=\"polite\"\n style={{ ...fontStyle(theme), flex: 1, fontSize: 13, lineHeight: 18, color: c.fg }}\n >\n {voice.error ?? \"Your recording is saved.\"}\n </Text>\n </View>\n <View style={{ flexDirection: \"row\", justifyContent: \"flex-end\", gap: 6 }}>\n <Button label=\"Discard\" variant=\"ghost\" onPress={voice.cancel} />\n <Button label=\"Retry\" variant=\"primary\" onPress={voice.retry} />\n </View>\n </View>\n );\n}\n\n/**\n * Dictation in progress, in place of the field: cancel, a live level meter with\n * the elapsed time, and stop (which transcribes into the draft).\n */\nfunction VoiceStrip({ voice }: { voice: NativeVoiceInput }) {\n const theme = useNativeTimelineTheme();\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=\"Cancel dictation\"\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 ? \"Transcribing\" : `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 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=\"Stop and transcribe\"\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 * 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 shows a\n * quiet, disabled send.\n */\nfunction TrailingAction(props: SessionComposerProps & { messages: ChatComposerMessages }) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const hasText = props.value.trim().length > 0;\n const mode: \"send\" | \"pause\" | \"resume\" | \"idle\" =\n hasText || props.canSend\n ? \"send\"\n : props.paused && props.onResume\n ? \"resume\"\n : props.running && props.onPause\n ? \"pause\"\n : \"idle\";\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}: {\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 onPress?: (() => void) | undefined;\n /** Shown before the label (the web picker's maker mark). */\n leading?: ReactNode;\n}) {\n const theme = useNativeTimelineTheme();\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={[label, detail, fast ? \"Fast\" : null].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 ? <Icon name=\"zap\" size={13} color={theme.colors.fg} fill={theme.colors.fg} /> : null}\n <Icon name=\"chevron-down\" size={12} color={theme.colors[\"fg-muted\"]} />\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 { 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\";\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 label = feedbackSentimentLabel(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 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 copy = feedbackDialogCopy({ 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 ? ` ${caught.message}` : \" Try again.\";\n setError(`Couldn't send feedback.${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(props.sentiment)}\n </Text>\n ) : null}\n <Text style={{ ...fontStyle(theme, 500), fontSize: 13, color: c.fg }}>\n Comment (optional)\n </Text>\n <TextInput\n accessibilityLabel=\"Comment (optional)\"\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=\"Cancel\" variant=\"ghost\" onPress={close} disabled={busy} />\n <Button\n label={busy ? \"Sending…\" : \"Send feedback\"}\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 type {\n HumanInputQuestion,\n SessionHumanInputRequest,\n SubmitHumanInputResponseRequest,\n} from \"@opengeni/sdk\";\nimport type { PendingApproval } from \"@opengeni/react/session\";\nimport {\n answersFromDrafts,\n defaultHumanInputFormMessages,\n emptyDraft,\n humanInputHeading,\n initialDrafts,\n isActionableHumanInputRequest,\n type HumanInputAnswerDraft,\n type HumanInputFormMessages,\n} from \"@opengeni/react/timeline-model\";\nimport { createContext, useContext, useMemo, useRef, useState } from \"react\";\nimport { Pressable, ScrollView, Text, TextInput, View } from \"react-native\";\nimport { Button } from \"./controls\";\nimport { Icon } from \"./icon\";\nimport { blendOver, withAlpha } from \"./primitives\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\n\n/* ----------------------------------------------------------------------------\n Decision surfaces: the web HumanInputSurface/HumanInputForm (waiting tone,\n question-first, options, Other, Skip / Send answers) and the approval\n Notice strip, with the shared drafting and validation rules.\n -------------------------------------------------------------------------- */\n\nfunction useWaitingTone() {\n const theme = useNativeTimelineTheme();\n const waiting = theme.colors[\"status-waiting\"];\n return {\n theme,\n waiting,\n surface: withAlpha(waiting, 0.05),\n border: withAlpha(waiting, 0.35),\n divider: withAlpha(waiting, 0.2),\n iconBox: withAlpha(waiting, 0.12),\n };\n}\n\nexport interface HumanInputCardProps {\n requests: SessionHumanInputRequest[];\n onSubmit: (requestId: string, response: SubmitHumanInputResponseRequest) => void | Promise<void>;\n respondingRequestId?: string | null | undefined;\n error?: string | null | undefined;\n /** The shared question-form catalog; hosts translate by overriding entries. */\n messages?: Partial<HumanInputFormMessages> | undefined;\n}\n\nconst HumanInputMessagesContext = createContext<HumanInputFormMessages>(\n defaultHumanInputFormMessages,\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}: HumanInputCardProps) {\n const merged = useMemo(() => ({ ...defaultHumanInputFormMessages, ...messages }), [messages]);\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 <HumanInputForm\n key={active.id}\n request={active}\n progressLabel={batchTotal.current > 1 ? `${position} of ${batchTotal.current}` : null}\n submitting={respondingRequestId !== null}\n error={error ?? null}\n onSubmit={(response) => onSubmit(active.id, response)}\n />\n </HumanInputMessagesContext.Provider>\n );\n}\n\nfunction HumanInputForm({\n request,\n progressLabel,\n submitting,\n error,\n onSubmit,\n}: {\n request: SessionHumanInputRequest;\n progressLabel: string | null;\n submitting: boolean;\n error: string | null;\n onSubmit: (response: SubmitHumanInputResponseRequest) => void | Promise<void>;\n}) {\n const tone = useWaitingTone();\n const { theme } = tone;\n const c = theme.colors;\n const messages = useContext(HumanInputMessagesContext);\n const heading = humanInputHeading(request.questions, messages);\n const single = request.questions.length === 1;\n const required = single && request.questions[0]!.required;\n const [drafts, setDrafts] = useState<Record<string, HumanInputAnswerDraft>>(() =>\n initialDrafts(request.questions),\n );\n 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 } catch (cause) {\n setSubmitError(cause instanceof Error ? cause.message : String(cause));\n } finally {\n setInFlight(false);\n }\n };\n const send = () => {\n const result = answersFromDrafts(request.questions, drafts, messages);\n setErrors(result.errors);\n if (Object.keys(result.errors).length > 0) return;\n void submit({\n outcome: \"answered\",\n answers: result.answers,\n } as SubmitHumanInputResponseRequest);\n };\n const update = (id: string, next: (draft: HumanInputAnswerDraft) => HumanInputAnswerDraft) => {\n setDrafts((current) => ({ ...current, [id]: next(current[id] ?? emptyDraft()) }));\n // Editing a question clears its validation message, as on web.\n setErrors((current) => {\n if (!(id in current)) return current;\n const remaining = { ...current };\n delete remaining[id];\n return remaining;\n });\n };\n\n return (\n <View\n style={{\n borderRadius: theme.radius.lg,\n borderWidth: 1,\n borderColor: tone.border,\n backgroundColor: tone.surface,\n overflow: \"hidden\",\n }}\n >\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 12,\n padding: 16,\n paddingBottom: collapsed ? 16 : 14,\n }}\n >\n <View\n style={{\n width: 32,\n height: 32,\n borderRadius: theme.radius.md,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: tone.iconBox,\n }}\n >\n <Icon name=\"message-circle-question\" size={16} color={tone.waiting} />\n </View>\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text\n style={{\n ...fontStyle(theme, 600),\n fontSize: theme.size.md,\n lineHeight: 24,\n color: c.fg,\n }}\n >\n {heading.title}\n {required ? <Text style={{ color: c[\"status-failed\"] }}> *</Text> : null}\n </Text>\n {heading.description ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: c[\"fg-muted\"],\n }}\n >\n {heading.description}\n </Text>\n ) : null}\n {progressLabel ? (\n <Text\n style={{\n ...fontStyle(theme),\n marginTop: 2,\n fontSize: theme.size.xs,\n color: c[\"fg-subtle\"],\n }}\n >\n {progressLabel}\n </Text>\n ) : null}\n </View>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={collapsed ? messages.expand : messages.collapse}\n onPress={() => setCollapsed((value) => !value)}\n style={{\n width: 32,\n height: 32,\n borderRadius: theme.radius.md,\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n <Icon name={collapsed ? \"chevron-down\" : \"chevron-up\"} size={16} color={c[\"fg-muted\"]} />\n </Pressable>\n </View>\n {collapsed ? null : (\n <>\n <ScrollView\n style={{ maxHeight: 360, borderTopWidth: 1, borderTopColor: tone.divider }}\n contentContainerStyle={{ paddingHorizontal: 20, paddingVertical: 14, gap: 18 }}\n nestedScrollEnabled\n keyboardShouldPersistTaps=\"handled\"\n >\n {request.questions.map((question, index) => (\n <QuestionControls\n key={question.id}\n question={question}\n index={single ? null : index + 1}\n draft={drafts[question.id] ?? emptyDraft()}\n error={errors[question.id]}\n disabled={busy}\n onChange={(next) => update(question.id, next)}\n />\n ))}\n </ScrollView>\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"flex-end\",\n gap: 8,\n paddingHorizontal: 16,\n paddingVertical: 12,\n borderTopWidth: 1,\n borderTopColor: tone.divider,\n backgroundColor: withAlpha(c[\"surface-1\"], 0.95),\n }}\n >\n {error || submitError ? (\n <Text\n style={{\n ...fontStyle(theme),\n flex: 1,\n fontSize: theme.size.xs,\n color: c[\"status-failed\"],\n }}\n >\n {submitError ?? error}\n </Text>\n ) : null}\n {request.allowSkip ? (\n <Button\n label={messages.skip}\n variant=\"ghost\"\n size=\"form\"\n disabled={busy}\n onPress={() =>\n void submit({ outcome: \"skipped\" } as SubmitHumanInputResponseRequest)\n }\n />\n ) : null}\n <Button\n label={busy ? messages.submitting : messages.submit}\n variant=\"primary\"\n size=\"form\"\n busy={busy}\n onPress={send}\n />\n </View>\n </>\n )}\n </View>\n );\n}\n\nfunction QuestionControls({\n question,\n index,\n draft,\n error,\n disabled,\n onChange,\n}: {\n question: HumanInputQuestion;\n index: number | null;\n draft: HumanInputAnswerDraft;\n error?: string | undefined;\n disabled: boolean;\n onChange: (next: (draft: HumanInputAnswerDraft) => HumanInputAnswerDraft) => void;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const messages = useContext(HumanInputMessagesContext);\n const multi = question.kind === \"multi_select\";\n const label = { ...fontStyle(theme, 500), fontSize: theme.size.sm, lineHeight: 18, color: c.fg };\n const input = {\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n color: c.fg,\n minHeight: 32,\n paddingHorizontal: 8,\n paddingVertical: 6,\n borderRadius: theme.radius.sm,\n borderWidth: 1,\n borderColor: error ? c[\"status-failed\"] : c.border,\n backgroundColor: c[\"surface-1\"],\n };\n const toggle = (value: string) =>\n onChange((current) => {\n if (!multi) return { ...current, values: [value], otherSelected: false };\n const has = current.values.includes(value);\n return {\n ...current,\n values: has\n ? current.values.filter((entry) => entry !== value)\n : [...current.values, value],\n };\n });\n const hint = multi\n ? messages.selectionHint(question.validation?.minSelections, question.validation?.maxSelections)\n : null;\n return (\n <View style={{ gap: 10 }}>\n {index !== null ? (\n <View>\n <Text\n style={{\n ...fontStyle(theme, 600),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: c.fg,\n }}\n >\n {`${index}. ${question.label ?? question.prompt}`}\n {question.required ? <Text style={{ color: c[\"status-failed\"] }}> *</Text> : null}\n </Text>\n {question.label ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.sm,\n lineHeight: 18,\n color: c[\"fg-muted\"],\n }}\n >\n {question.prompt}\n </Text>\n ) : null}\n </View>\n ) : null}\n {hint ? (\n <Text style={{ ...fontStyle(theme), fontSize: theme.size.xs, color: c[\"fg-subtle\"] }}>\n {hint}\n </Text>\n ) : null}\n {question.kind === \"text\" ? (\n <TextInput\n accessibilityLabel={question.label ?? question.prompt}\n editable={!disabled}\n multiline\n value={draft.values[0] ?? \"\"}\n onChangeText={(text) => onChange((current) => ({ ...current, values: [text] }))}\n placeholder=\"Type your answer...\"\n placeholderTextColor={c[\"fg-subtle\"]}\n style={{ ...input, minHeight: 64, textAlignVertical: \"top\" }}\n />\n ) : (\n <View style={{ gap: 2 }}>\n {question.options.map((option) => {\n const selected = draft.values.includes(option.id);\n return (\n <Pressable\n key={option.id}\n accessibilityRole={multi ? \"checkbox\" : \"radio\"}\n accessibilityState={{ checked: selected, disabled }}\n disabled={disabled}\n onPress={() => toggle(option.id)}\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n minHeight: 36,\n paddingVertical: 8,\n }}\n >\n <Selector multi={multi} selected={selected} />\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text style={label}>{option.label}</Text>\n {option.description ? (\n <Text\n style={{\n ...fontStyle(theme),\n fontSize: theme.size.xs,\n lineHeight: 16,\n color: c[\"fg-muted\"],\n }}\n >\n {option.description}\n </Text>\n ) : null}\n </View>\n </Pressable>\n );\n })}\n {question.allowOther ? (\n <View\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-start\",\n gap: 10,\n paddingVertical: 8,\n }}\n >\n <Pressable\n accessibilityRole={multi ? \"checkbox\" : \"radio\"}\n accessibilityState={{ checked: draft.otherSelected, disabled }}\n accessibilityLabel={messages.other}\n disabled={disabled}\n onPress={() =>\n onChange((current) =>\n multi\n ? { ...current, otherSelected: !current.otherSelected }\n : { ...current, values: [], otherSelected: true },\n )\n }\n style={{ paddingTop: 2 }}\n >\n <Selector multi={multi} selected={draft.otherSelected} />\n </Pressable>\n <View style={{ flex: 1, gap: 6 }}>\n <Text style={label}>{messages.other}</Text>\n <TextInput\n accessibilityLabel={`Other answer for ${question.label ?? question.prompt}`}\n editable={!disabled}\n value={draft.other}\n onFocus={() =>\n onChange((current) =>\n multi\n ? { ...current, otherSelected: true }\n : { ...current, values: [], otherSelected: true },\n )\n }\n onChangeText={(text) => onChange((current) => ({ ...current, other: text }))}\n placeholder=\"Type a value...\"\n placeholderTextColor={c[\"fg-subtle\"]}\n style={input}\n />\n </View>\n </View>\n ) : null}\n </View>\n )}\n {error ? (\n <Text\n accessibilityRole=\"alert\"\n style={{ ...fontStyle(theme), fontSize: theme.size.xs, color: c[\"status-failed\"] }}\n >\n {error}\n </Text>\n ) : null}\n </View>\n );\n}\n\nfunction Selector({ multi, selected }: { multi: boolean; selected: boolean }) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n return (\n <View\n style={{\n marginTop: 2,\n width: 14,\n height: 14,\n borderRadius: multi ? 3 : 7,\n borderWidth: 1,\n borderColor: selected ? c.accent : c[\"fg-muted\"],\n backgroundColor: selected && multi ? c.accent : c[\"surface-1\"],\n alignItems: \"center\",\n justifyContent: \"center\",\n }}\n >\n {selected ? (\n multi ? (\n <Icon name=\"check\" size={10} color={c[\"accent-fg\"]} strokeWidth={3} />\n ) : (\n <View style={{ width: 6, height: 6, borderRadius: 3, backgroundColor: c.accent }} />\n )\n ) : null}\n </View>\n );\n}\n\nexport interface ApprovalStripMessages {\n approve: string;\n reject: string;\n approved: string;\n rejected: string;\n /** The tool's display name; the web live strip shows the raw name. */\n formatToolName: (name: string) => string;\n}\n\nexport const defaultApprovalStripMessages: ApprovalStripMessages = {\n approve: \"Approve\",\n reject: \"Reject\",\n approved: \"Approved\",\n rejected: \"Rejected\",\n formatToolName: (name) => name,\n};\n\nexport interface ApprovalStripProps {\n approvals: PendingApproval[];\n onDecide: (approvalId: string, decision: \"approve\" | \"reject\") => void | Promise<void>;\n messages?: Partial<ApprovalStripMessages> | undefined;\n}\n\n/** The web live decision strip: one waiting Notice per pending tool approval. */\nexport function ApprovalStrip({ approvals, onDecide, messages: overrides }: ApprovalStripProps) {\n const messages = { ...defaultApprovalStripMessages, ...overrides };\n const tone = useWaitingTone();\n const { theme } = tone;\n const c = theme.colors;\n const [pending, setPending] = useState<Record<string, \"approve\" | \"reject\">>({});\n const [settled, setSettled] = useState<Record<string, \"approve\" | \"reject\">>({});\n if (approvals.length === 0) return null;\n const decide = async (id: string, decision: \"approve\" | \"reject\") => {\n setPending((current) => ({ ...current, [id]: decision }));\n try {\n await onDecide(id, decision);\n setSettled((current) => ({ ...current, [id]: decision }));\n } finally {\n setPending((current) => {\n const next = { ...current };\n delete next[id];\n return next;\n });\n }\n };\n return (\n <ScrollView style={{ maxHeight: 256 }} contentContainerStyle={{ gap: 12 }} nestedScrollEnabled>\n {approvals.map((approval) => {\n const busy = Boolean(pending[approval.id]) || Boolean(settled[approval.id]);\n const payload = JSON.stringify(approval.arguments ?? approval.raw ?? {}, null, 2);\n return (\n <View\n key={approval.id}\n style={{\n borderRadius: theme.radius.lg,\n borderWidth: 1,\n borderColor: withAlpha(tone.waiting, 0.3),\n // Opaque: the strip floats over scrolling conversation.\n backgroundColor: blendOver(c.bg, tone.waiting, 0.06),\n padding: 12,\n flexDirection: \"row\",\n gap: 10,\n }}\n >\n <View style={{ paddingTop: 2 }}>\n <Icon name=\"circle-alert\" size={16} color={tone.waiting} />\n </View>\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text\n style={{ ...fontStyle(theme, 500), fontSize: 14, lineHeight: 20, color: c.fg }}\n numberOfLines={2}\n >\n {messages.formatToolName(approval.name)}\n </Text>\n <ScrollView\n style={{\n marginTop: 8,\n maxHeight: 160,\n borderRadius: theme.radius.md,\n borderWidth: 1,\n borderColor: c.border,\n backgroundColor: withAlpha(c[\"surface-2\"], 0.6),\n }}\n contentContainerStyle={{ padding: 10 }}\n nestedScrollEnabled\n >\n <Text\n selectable\n style={{\n ...fontStyle(theme, 400, \"mono\"),\n fontSize: theme.size.sm,\n lineHeight: 20,\n color: c[\"fg-muted\"],\n }}\n >\n {payload}\n </Text>\n </ScrollView>\n <View\n style={{ marginTop: 12, flexDirection: \"row\", justifyContent: \"flex-end\", gap: 8 }}\n >\n <Button\n icon=\"check\"\n variant=\"primary\"\n label={settled[approval.id] === \"approve\" ? messages.approved : messages.approve}\n busy={pending[approval.id] === \"approve\"}\n disabled={busy}\n onPress={() => void decide(approval.id, \"approve\")}\n />\n <Button\n icon=\"x\"\n variant=\"destructive\"\n label={settled[approval.id] === \"reject\" ? messages.rejected : messages.reject}\n busy={pending[approval.id] === \"reject\"}\n disabled={busy}\n onPress={() => void decide(approval.id, \"reject\")}\n />\n </View>\n </View>\n </View>\n );\n })}\n </ScrollView>\n );\n}\n","import type { FileAsset, OpenGeniClient, ResourceRef } from \"@opengeni/sdk\";\nimport { useEffect, useState } from \"react\";\nimport { ActivityIndicator, Image, Linking, Pressable, Text, View } from \"react-native\";\nimport { Icon } from \"./icon\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\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 the full image), 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 if (files.length === 0) return null;\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 />\n ))}\n </View>\n );\n}\n\nfunction Attachment(props: {\n client: AttachmentClient;\n workspaceId: string;\n sessionId?: string | undefined;\n resource: FileResource;\n}) {\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 ?? \"Attachment\";\n const image = asset?.contentType.startsWith(\"image/\") === true && !failed;\n\n if (image) {\n return (\n <Pressable\n accessibilityRole=\"imagebutton\"\n accessibilityLabel={`Open ${name}`}\n onPress={() => void open()}\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={`Open ${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 { 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 { 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 { fontStyle, useNativeTimelineTheme } from \"./theme\";\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.\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 leading,\n}: {\n queue: TurnQueue;\n composer?: QueueDockComposer | undefined;\n onComposerFocus?: (() => void) | undefined;\n /** Chips sharing the queue chip's row (goal, agents, commands). */\n leading?: ReactNode;\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const [open, setOpen] = useState(true);\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 if (turns.length === 0) {\n return leading ? <View style={{ flexDirection: \"row\" }}>{leading}</View> : null;\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 {leading}\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={`${turns.length} queued prompt${turns.length === 1 ? \"\" : \"s\"}`}\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}>{`${turns.length} queued`}</Text>\n </Pressable>\n <View style={{ width: 1, height: 14, backgroundColor: c.border }} />\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel=\"Steer first queued message\"\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}>Steer</Text>\n </Pressable>\n </View>\n </View>\n {open ? (\n <View\n accessibilityLabel=\"Queued prompts\"\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(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 ? `${annotationCount} timeline annotation${annotationCount === 1 ? \"\" : \"s\"}`\n : QUEUE_ITEM_CONTENT_UNAVAILABLE;\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 {turns.length > 1 ? (\n <>\n <RowAction\n icon=\"arrow-up\"\n label={`Move queued prompt ${index + 1} up`}\n disabled={busy || index === 0}\n onPress={() => void queue.moveTurn(turn.id, beforeUp)}\n />\n <RowAction\n icon=\"arrow-down\"\n label={`Move queued prompt ${index + 1} down`}\n disabled={busy || index >= turns.length - 1}\n onPress={() => void queue.moveTurn(turn.id, beforeDown)}\n />\n </>\n ) : null}\n <RowAction\n icon=\"corner-down-right\"\n label={`Steer queued prompt ${index + 1}`}\n disabled={busy}\n busy={pending === \"steer\"}\n onPress={() => void queue.steerTurn(turn.id)}\n />\n {canEdit ? (\n <RowAction\n icon=\"pencil\"\n label={`Edit queued prompt ${index + 1}`}\n disabled={busy}\n busy={pending === \"edit\"}\n onPress={() => edit(turn)}\n />\n ) : null}\n <RowAction\n icon=\"trash-2\"\n label={`Remove queued prompt ${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.title}\n </Text>\n <Text\n style={{ ...fontStyle(theme), fontSize: theme.size.xs, color: c[\"fg-muted\"] }}\n >\n {QUEUE_REPLACE_DRAFT_COPY.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.keep}\n variant=\"ghost\"\n onPress={() => setReplaceDraftFor(null)}\n />\n <Button\n label={QUEUE_REPLACE_DRAFT_COPY.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 {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 </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 type { ClientModel, Session, SessionStatus } from \"@opengeni/sdk\";\nimport { SESSION_STATUS_BADGE, SESSION_STATUS_PRESENTATION } 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 { useEffect, useMemo } from \"react\";\nimport { Platform, Pressable, Text, useWindowDimensions, View } 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 { withAlpha } from \"./primitives\";\nimport { fontStyle, useNativeTimelineTheme, type WebColorToken } from \"./theme\";\n\n/* ----------------------------------------------------------------------------\n The web app's session list rows at phone width (Recent sessions on the\n home canvas): status dot, title, maker mark + catalog model label, and a\n compact relative time. Ordering and labels come from the shared\n session-list model so web and native read identically.\n -------------------------------------------------------------------------- */\n\nconst TONE_COLOR: Record<SessionStatusTone, WebColorToken> = {\n queued: \"status-queued\",\n running: \"status-running\",\n waiting: \"status-waiting\",\n idle: \"status-idle\",\n failed: \"status-failed\",\n cancelled: \"status-cancelled\",\n};\n\n/** The web StatusDot: an 8pt dot with a gentle pulse for live states. */\nexport function StatusDot({\n tone,\n pulse,\n size = 8,\n}: {\n tone: SessionStatusTone;\n pulse?: boolean;\n size?: number;\n}) {\n const theme = useNativeTimelineTheme();\n const reduceMotion = useReducedMotion();\n const opacity = useSharedValue(1);\n useEffect(() => {\n if (!pulse || reduceMotion) {\n cancelAnimation(opacity);\n opacity.value = 1;\n return;\n }\n // Tailwind animate-pulse: 2s, cubic-bezier(0.4, 0, 0.6, 1), 1 → 0.5 → 1.\n opacity.value = withRepeat(\n withTiming(0.5, { duration: 1000, easing: Easing.bezier(0.4, 0, 0.6, 1) }),\n -1,\n true,\n );\n return () => cancelAnimation(opacity);\n }, [opacity, pulse, reduceMotion]);\n const style = useAnimatedStyle(() => ({ opacity: opacity.value }));\n return (\n <Animated.View\n accessibilityElementsHidden\n importantForAccessibility=\"no\"\n style={[\n {\n width: size,\n height: size,\n borderRadius: size / 2,\n backgroundColor: theme.colors[TONE_COLOR[tone]],\n },\n style,\n ]}\n />\n );\n}\n\n/** The model maker's logo (OpenAI, Claude, Grok) with the web's neutral fallback. */\nexport function ModelMark({\n model,\n size = 12,\n color,\n}: {\n model: string;\n size?: number;\n color: string;\n}) {\n const vendor = modelMarkVendor(model);\n if (!vendor) return <Icon name=\"sparkles\" size={size} color={color} />;\n return (\n <Svg width={size} height={size} viewBox=\"0 0 24 24\" accessibilityElementsHidden>\n <Path d={MODEL_MARK_PATHS[vendor]} fill={color} />\n </Svg>\n );\n}\n\nexport interface SessionRowProps {\n session: Session;\n /** The deployment's client model catalog, for catalog labels. */\n models: readonly ClientModel[];\n onPress: () => void;\n now?: Date | undefined;\n}\n\n/** One recent-session row, as the web home canvas renders it. */\nexport function SessionRow({ session, models, onPress, now }: SessionRowProps) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const rows = useMemo(() => projectClientModelRows([...models]), [models]);\n const title = sessionDisplayTitle(session);\n const status = recentSessionStatus(session);\n const model = recentSessionModelPresentation(session.model, rows);\n const repo = sessionRepoLabel(session);\n const meta = [model.label, repo].filter(Boolean).join(\" · \");\n return (\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={title}\n onPress={onPress}\n style={({ pressed }) => ({\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 12,\n paddingHorizontal: 4,\n paddingVertical: 10,\n borderRadius: theme.radius.md,\n backgroundColor: pressed ? c.hover : \"transparent\",\n })}\n >\n <StatusDot tone={status.tone} pulse={status.pulse} />\n <View style={{ flex: 1, minWidth: 0 }}>\n <Text\n numberOfLines={1}\n style={{ ...fontStyle(theme, 400), fontSize: 14, lineHeight: 20, color: c.fg }}\n >\n {title}\n </Text>\n {meta ? (\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 6, marginTop: 2 }}>\n <ModelMark model={session.model} size={12} color={c[\"fg-muted\"]} />\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme, 400),\n fontSize: 11,\n lineHeight: 16,\n color: c[\"fg-subtle\"],\n flexShrink: 1,\n }}\n >\n {meta}\n </Text>\n </View>\n ) : null}\n </View>\n <Text\n style={{\n ...fontStyle(theme, 400),\n fontSize: 11,\n lineHeight: 16,\n color: c[\"fg-subtle\"],\n fontVariant: [\"tabular-nums\"],\n }}\n >\n {relativeTimeLabel(session.updatedAt, now)}\n </Text>\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}) {\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 />\n </View>\n ))}\n </View>\n );\n}\n\n/** The web session status badge: tinted pill, breathing dot for live states. */\nexport function SessionStatusBadge({ status, label }: { status: SessionStatus; label?: string }) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const presentation = SESSION_STATUS_PRESENTATION[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}: {\n title: string;\n status: SessionStatus | null;\n /** Override the label (\"Paused\" for a paused workstream). */\n statusLabel?: string | undefined;\n align?: \"center\" | \"left\";\n}) {\n const theme = useNativeTimelineTheme();\n const c = theme.colors;\n const viewport = useWindowDimensions();\n const presentation = status ? SESSION_STATUS_PRESENTATION[status] : null;\n // A settled, idle session needs no status line: the title stands alone, as in\n // native messaging apps. Running, waiting, paused and failed states still say so.\n const label = statusLabel ?? (status === \"idle\" ? undefined : presentation?.label);\n // Live and attention states take their status colour; settled ones stay quiet.\n const emphasized =\n presentation?.tone === \"running\" ||\n presentation?.tone === \"waiting\" ||\n presentation?.tone === \"failed\";\n return (\n <View\n accessible\n accessibilityRole=\"header\"\n accessibilityLabel={label ? `${title}, ${label}` : title}\n // iOS sizes a custom title view once, often before the session (and its\n // title) has loaded; a fixed width keeps a late title from collapsing to\n // \"H…\". The bar's back and actions buttons take about 150pt.\n style={\n align === \"center\"\n ? { alignItems: \"center\", width: Math.max(120, Math.min(260, viewport.width - 150)) }\n : { alignItems: \"flex-start\", maxWidth: 240 }\n }\n >\n <Text\n numberOfLines={1}\n style={{ ...fontStyle(theme, 600), fontSize: 16, lineHeight: 20, color: c.fg }}\n >\n {title}\n </Text>\n {presentation && label ? (\n <View style={{ flexDirection: \"row\", alignItems: \"center\", gap: 5, marginTop: 1 }}>\n <StatusDot tone={presentation.tone} pulse={presentation.pulse} size={6} />\n <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme, 500),\n fontSize: 12,\n lineHeight: 15,\n color: emphasized ? c[TONE_COLOR[presentation.tone]] : c[\"fg-muted\"],\n }}\n >\n {label}\n </Text>\n </View>\n ) : null}\n </View>\n );\n}\n","import { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport {\n AccessibilityInfo,\n Animated,\n Easing,\n KeyboardAvoidingView,\n Modal,\n PanResponder,\n Platform,\n Pressable,\n View,\n useWindowDimensions,\n} from \"react-native\";\nimport { useSafeAreaInsets } from \"react-native-safe-area-context\";\nimport { useNativeTimelineTheme } from \"./theme\";\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 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 behavior={Platform.OS === \"ios\" ? \"padding\" : undefined}\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=\"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 { ClientModel, LineageNode, SessionBackgroundCommand } from \"@opengeni/sdk\";\nimport type { UseGoalResult } from \"@opengeni/react/session\";\nimport { sessionAgentsSignal, sessionGoalStateLabel } from \"@opengeni/react/session-agents-model\";\nimport { 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\";\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 [open, setOpen] = useState<\"goal\" | \"agents\" | \"commands\" | null>(null);\n const goal = props.goal?.goal ?? null;\n const agents = sessionAgentsSignal(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=\"Goal\"\n detail={sessionGoalStateLabel(goal)}\n tone={goal.status === \"active\" ? \"running\" : \"neutral\"}\n onPress={() => setOpen(\"goal\")}\n />\n ) : null}\n {agents ? (\n <Chip\n icon=\"bot\"\n label={`${agents.count} agent${agents.count === 1 ? \"\" : \"s\"}`}\n detail={agents.detail}\n tone={agents.tone}\n onPress={() => setOpen(\"agents\")}\n />\n ) : null}\n {props.commandsCount > 0 ? (\n <Chip\n icon=\"terminal\"\n label={`${props.commandsCount} command${props.commandsCount === 1 ? \"\" : \"s\"}`}\n detail=\"Running\"\n tone=\"running\"\n onPress={() => setOpen(\"commands\")}\n />\n ) : null}\n </ScrollView>\n\n <BottomSheet open={open === \"goal\"} onClose={close} accessibilityLabel=\"Goal\">\n {goal && props.goal ? <GoalPanel goal={props.goal} readOnly={props.readOnly} /> : null}\n </BottomSheet>\n <BottomSheet open={open === \"agents\"} onClose={close} accessibilityLabel=\"Agents\">\n <SheetTitle>Agents</SheetTitle>\n <ScrollView style={{ paddingHorizontal: 12 }}>\n {props.agents.map((node) => (\n <View key={node.session.id}>\n <SessionRow\n session={node.session}\n models={props.models ?? []}\n onPress={() => {\n close();\n props.onOpenSession?.(node.session.id);\n }}\n />\n {node.children.map((child) => (\n <View key={child.session.id} style={{ paddingLeft: 18 }}>\n <SessionRow\n session={child.session}\n models={props.models ?? []}\n onPress={() => {\n close();\n props.onOpenSession?.(child.session.id);\n }}\n />\n </View>\n ))}\n </View>\n ))}\n </ScrollView>\n </BottomSheet>\n <BottomSheet open={open === \"commands\"} onClose={close} accessibilityLabel=\"Commands\">\n <SheetTitle>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 detail: string;\n tone: \"running\" | \"waiting\" | \"neutral\";\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 }) => signalChipStyle(theme, pressed)}\n >\n <Icon name={props.icon} size={13} color={c[\"fg-muted\"]} />\n <Text style={signalChipText(theme)}>{props.label}</Text>\n <View style={{ width: 6, height: 6, borderRadius: 3, backgroundColor: toneColor }} />\n </Pressable>\n );\n}\n\nfunction SheetTitle({ children }: { children: string }) {\n const theme = useNativeTimelineTheme();\n return (\n <Text\n accessibilityRole=\"header\"\n style={{\n ...fontStyle(theme, 600),\n fontSize: 17,\n color: theme.colors.fg,\n paddingHorizontal: 20,\n paddingBottom: 8,\n }}\n >\n {children}\n </Text>\n );\n}\n\nfunction GoalPanel({ goal, readOnly }: { goal: UseGoalResult; readOnly?: boolean | undefined }) {\n const theme = useNativeTimelineTheme();\n const 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 }}>Goal</Text>\n <Text style={{ ...fontStyle(theme, 500), fontSize: 13, color: c[\"fg-muted\"] }}>\n {sessionGoalStateLabel(record)}\n </Text>\n </View>\n <View style={{ gap: 4 }}>\n <Text style={label}>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}>DONE WHEN</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}>WHY IT PAUSED</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}>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=\"Pause goal\"\n icon=\"pause\"\n busy={goal.updating}\n onPress={() => void goal.pause()}\n />\n ) : (\n <Button\n label=\"Resume goal\"\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 theme = useNativeTimelineTheme();\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 No commands are running.\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\" ? \"On a machine\" : \"In the sandbox\"} ·{\" \"}\n {command.state === \"stopping\" ? \"Stopping\" : running ? \"Running\" : \"Finished\"}\n </Text>\n {running && !readOnly ? (\n <Button\n label=\"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 {\n conversationTimeline,\n type AgentMessageItem,\n type UserMessageItem,\n} from \"@opengeni/react/session\";\nimport {\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n type ComponentRef,\n type ReactNode,\n} from \"react\";\nimport { ActivityIndicator, Pressable, Text, View, type TextInput } from \"react-native\";\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 { SessionCommandsList, SessionSignals } from \"./session-signals\";\nimport type { ClientModel, OpenGeniClient, SessionBackgroundCommand } from \"@opengeni/sdk\";\nimport { MessageTimeline, type NativeMessageTimelineProps } from \"./message-timeline\";\nimport { fontStyle, useNativeTimelineTheme } from \"./theme\";\n\n/* ----------------------------------------------------------------------------\n The web session page body at phone width: timeline (with the question card\n as its trailing state), the live approval strip and the composer, driven by\n the shared session controller. Navigation chrome belongs to the host.\n -------------------------------------------------------------------------- */\n\nexport interface NativeSessionScreenProps extends Omit<\n NativeMessageTimelineProps,\n \"items\" | \"events\" | \"status\" | \"trailing\"\n> {\n controller: OpenGeniNativeSessionController;\n /** Composer slots (products add their own actions/options here). */\n composer?:\n | Partial<\n Pick<\n SessionComposerProps,\n | \"renderLeading\"\n | \"options\"\n | \"header\"\n | \"placeholder\"\n | \"onAttach\"\n | \"messages\"\n | \"onActionFeedback\"\n | \"voice\"\n >\n >\n | undefined;\n /** Extra content after the question card (host recovery, banners). */\n trailing?: ReactNode;\n /** Fixed host chrome above the timeline, inside the keyboard-avoiding area. */\n topBar?: ReactNode;\n bottomInset?: number | undefined;\n /** Distance from this screen's bottom edge to the window bottom (e.g. a tab bar). */\n keyboardBottomOffset?: number | undefined;\n /** Reply feedback (thumbs beside Copy), as the web timeline offers it. */\n feedback?: TurnFeedbackTarget | undefined;\n /** Translations for the question card (the shared human-input catalog). */\n humanInputMessages?: HumanInputCardProps[\"messages\"];\n /** Translations for the approval strip. */\n approvalMessages?: ApprovalStripProps[\"messages\"];\n /** Reads the commands panel (the full client; omit to hide command details). */\n client?: OpenGeniClient | undefined;\n /** Model catalog for the agents panel rows. */\n models?: readonly ClientModel[] | undefined;\n}\n\nexport function NativeSessionScreen({\n controller,\n composer: composerSlots,\n trailing,\n topBar,\n bottomInset,\n keyboardBottomOffset,\n feedback,\n humanInputMessages,\n approvalMessages,\n client,\n models,\n renderMessageActions: hostMessageActions,\n ...timelineProps\n}: NativeSessionScreenProps) {\n const theme = useNativeTimelineTheme();\n const { composer, queue, humanInput, approvals, control, attachments } = controller;\n const composerInput = useRef<ComponentRef<typeof TextInput>>(null);\n // The composer floats over the conversation; its occupied height insets the timeline.\n const [composerHeight, setComposerHeight] = useState(120);\n const items = useMemo(\n () => conversationTimeline(controller.timeline, queue, composer),\n [controller.timeline, queue, composer],\n );\n const status = controller.sessionStatus;\n const paused = queue.effectiveControl?.state === \"paused\";\n const waitingOnInput = humanInput.requests.length > 0 && status === \"requires_action\";\n const busy = composer.sending || composer.pausing || composer.resuming;\n const { ratings, rate } = useTurnRatings(feedback);\n const failed = controller.connectionState === \"error\";\n useAutoRecover(\n failed && controller.active,\n controller.connectionState === \"live\",\n controller.refresh,\n );\n const empty = items.length === 0;\n // Web order beside Copy: reply feedback, then host actions (fork, share…).\n const renderMessageActions = useCallback(\n (item: AgentMessageItem | UserMessageItem) => {\n const host = hostMessageActions?.(item);\n if (!feedback || item.kind !== \"agent-message\" || item.streaming || !item.turnId) return host;\n const turnId = item.turnId;\n return (\n <>\n <TurnFeedbackButtons\n target={feedback}\n turnId={turnId}\n saved={ratings[turnId]}\n onRated={(sentiment) => rate(turnId, sentiment)}\n />\n {host}\n </>\n );\n },\n [feedback, hostMessageActions, rate, ratings],\n );\n return (\n <View style={{ flex: 1, backgroundColor: theme.colors.bg }}>\n {topBar}\n <MessageTimeline\n {...timelineProps}\n contentInsetBottom={composerHeight + 20}\n overlayInsetBottom={composerHeight}\n renderMessageActions={feedback || hostMessageActions ? renderMessageActions : undefined}\n renderUserAttachments={\n timelineProps.renderUserAttachments ??\n (client\n ? (item) => (\n <NativeMessageAttachments\n client={client}\n workspaceId={controller.workspaceId}\n sessionId={controller.sessionId}\n resources={item.resources}\n />\n )\n : undefined)\n }\n items={items}\n status={status}\n emptyState={\n empty && failed ? (\n <LoadFailure\n message={loadFailureMessage(controller.error)}\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 {waitingOnInput ? (\n <HumanInputCard\n requests={humanInput.requests}\n respondingRequestId={humanInput.respondingRequestId}\n error={humanInput.mutationError?.message}\n messages={humanInputMessages}\n onSubmit={(requestId, response) =>\n humanInput.respond(requestId, response).then(() => undefined)\n }\n />\n ) : null}\n {trailing}\n </>\n }\n />\n <SessionComposer\n floating\n onHeightChange={(height) => setComposerHeight(Math.round(height))}\n onActionFeedback={composerSlots?.onActionFeedback}\n value={composer.value}\n onChangeText={composer.setValue}\n onSend={() => void composer.send()}\n canSend={composer.canSend && !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 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 below={\n composer.draftConflict ? (\n <DraftConflictStrip\n messages={composerSlots?.messages}\n onResolve={(choice) => void composer.resolveDraftConflict(choice)}\n />\n ) : null\n }\n header={\n <>\n {composerSlots?.header}\n <AttachmentChips attachments={attachments} />\n </>\n }\n above={\n <>\n <QueueDock\n queue={queue}\n composer={composer}\n onComposerFocus={() => composerInput.current?.focus()}\n leading={\n <SessionSignals\n goal={controller.goal}\n agents={controller.lineage.lineage?.children ?? []}\n commandsCount={controller.session.session?.backgroundCommandActivity?.count ?? 0}\n onOpenSession={timelineProps.onOpenSession}\n models={models}\n readOnly={status === \"failed\" || status === \"cancelled\"}\n renderCommands={() =>\n client ? (\n <NativeSessionCommands\n client={client}\n workspaceId={controller.workspaceId}\n sessionId={controller.sessionId}\n />\n ) : null\n }\n />\n }\n />\n {approvals.length > 0 && status === \"requires_action\" ? (\n <ApprovalStrip\n approvals={approvals}\n messages={approvalMessages}\n onDecide={(id, decision) =>\n (decision === \"approve\" ? control.approve(id) : control.reject(id)).then(\n () => undefined,\n )\n }\n />\n ) : null}\n </>\n }\n />\n </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): 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 \"OpenGeni couldn't be reached. Check your connection; this retries automatically.\";\n }\n return error.message;\n}\n\nfunction LoadFailure({ message, onRetry }: { message?: string | undefined; onRetry: () => void }) {\n const theme = useNativeTimelineTheme();\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 Couldn't load this session\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=\"Retry\" onPress={onRetry} />\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 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 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={failed ? `Retry ${item.name}` : item.name}\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 ? \" · tap to retry\" : \"\"}\n </Text>\n </Pressable>\n <Pressable\n accessibilityRole=\"button\"\n accessibilityLabel={`Remove ${item.name}`}\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 c = theme.colors;\n const messages = { ...defaultChatComposerMessages, ...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","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 { 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 [query, setQuery] = useState(\"\");\n const view = modelPickerMenuView(props, query);\n const { messages, groups, thinking } = view;\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=\"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 }}>Done</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 <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(props.latencyMode === \"fast\" ? \"standard\" : \"fast\");\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\"] }}>{messages.fastRateHint}</Text>\n </Pressable>\n ) : null}\n </View>\n {thinking.showThinking ? (\n <View\n accessibilityRole=\"radiogroup\"\n accessibilityLabel={messages.thinkingEffort}\n style={{\n flexDirection: \"row\",\n gap: 2,\n padding: 2,\n borderRadius: theme.radius.md,\n backgroundColor: c[\"surface-2\"],\n }}\n >\n {thinking.efforts.map((effort) => {\n const checked = effort === thinking.value;\n const disabled = Boolean(props.disabled || thinking.disabled);\n return (\n <Pressable\n key={effort}\n accessibilityRole=\"radio\"\n accessibilityLabel={labelReasoningEffort(effort)}\n accessibilityState={{ checked, disabled }}\n disabled={disabled}\n onPress={() => {\n if (checked) return;\n props.onEffortChange(effort);\n props.onSelectionFeedback?.();\n }}\n style={{\n flex: 1,\n minHeight: 36,\n alignItems: \"center\",\n justifyContent: \"center\",\n borderRadius: theme.radius.sm,\n backgroundColor: checked ? c[\"surface-1\"] : \"transparent\",\n opacity: 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 <Text\n numberOfLines={1}\n style={{\n ...fontStyle(theme),\n fontSize: 13,\n color: checked ? c.fg : c[\"fg-muted\"],\n }}\n >\n {compactEffortLabel(effort, labelReasoningEffort(effort))}\n </Text>\n </Pressable>\n );\n })}\n </View>\n ) : null}\n </>\n ) : null}\n </View>\n ) : null}\n </BottomSheet>\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\";\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 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 `Couldn't ${next ? \"pin\" : \"unpin\"} this chat. ${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: \"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 ? \"Unpin\" : \"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=\"Chat actions\"\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=\"Chat actions\"\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=\"Chat actions\"\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 // 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=\"Rename chat\">\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 theme = useNativeTimelineTheme();\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(\n `Couldn't rename this chat. ${caught instanceof Error ? caught.message : \"Try again.\"}`,\n );\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 Rename chat\n </Text>\n <TextInput\n accessibilityLabel=\"Chat title\"\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=\"Cancel\" variant=\"ghost\" onPress={props.onClose} disabled={saving} />\n <Button\n label={saving ? \"Saving…\" : \"Save\"}\n variant=\"primary\"\n onPress={() => void save()}\n disabled={saving}\n busy={saving}\n />\n </View>\n </View>\n );\n}\n"]}
|