@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.
Files changed (132) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +74 -0
  3. package/dist/adapters.d.ts +53 -0
  4. package/dist/adapters.js +3 -0
  5. package/dist/adapters.js.map +1 -0
  6. package/dist/attachments.d.ts +75 -0
  7. package/dist/chunk-3VSZAQ7G.js +391 -0
  8. package/dist/chunk-3VSZAQ7G.js.map +1 -0
  9. package/dist/chunk-5ZVK7WKA.js +88 -0
  10. package/dist/chunk-5ZVK7WKA.js.map +1 -0
  11. package/dist/chunk-EEDIMY3L.js +240 -0
  12. package/dist/chunk-EEDIMY3L.js.map +1 -0
  13. package/dist/chunk-M23SDI4R.js +83 -0
  14. package/dist/chunk-M23SDI4R.js.map +1 -0
  15. package/dist/chunk-PHJBSAR3.js +2006 -0
  16. package/dist/chunk-PHJBSAR3.js.map +1 -0
  17. package/dist/environment.d.ts +19 -0
  18. package/dist/expo.d.ts +25 -0
  19. package/dist/expo.js +267 -0
  20. package/dist/expo.js.map +1 -0
  21. package/dist/index.d.ts +13 -0
  22. package/dist/index.js +3345 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/presentation.d.ts +262 -0
  25. package/dist/read-acknowledgement.d.ts +39 -0
  26. package/dist/realtime/call-events.d.ts +11 -0
  27. package/dist/realtime/call-view.d.ts +26 -0
  28. package/dist/realtime/expo-call.d.ts +11 -0
  29. package/dist/realtime/native-call.d.ts +104 -0
  30. package/dist/realtime/native-realtime.d.ts +35 -0
  31. package/dist/realtime/use-native-session-realtime.d.ts +25 -0
  32. package/dist/session-view.d.ts +87 -0
  33. package/dist/timeline/activity.d.ts +34 -0
  34. package/dist/timeline/composer.d.ts +86 -0
  35. package/dist/timeline/controls.d.ts +27 -0
  36. package/dist/timeline/decisions.d.ts +29 -0
  37. package/dist/timeline/feedback.d.ts +26 -0
  38. package/dist/timeline/icon-nodes.generated.d.ts +738 -0
  39. package/dist/timeline/icon.d.ts +11 -0
  40. package/dist/timeline/index.d.ts +32 -0
  41. package/dist/timeline/index.js +5419 -0
  42. package/dist/timeline/index.js.map +1 -0
  43. package/dist/timeline/markdown.d.ts +11 -0
  44. package/dist/timeline/markdown.js +415 -0
  45. package/dist/timeline/markdown.js.map +1 -0
  46. package/dist/timeline/message-attachments.d.ts +13 -0
  47. package/dist/timeline/message-timeline.d.ts +36 -0
  48. package/dist/timeline/model-picker.d.ts +17 -0
  49. package/dist/timeline/primitives.d.ts +85 -0
  50. package/dist/timeline/queue-dock.d.ts +19 -0
  51. package/dist/timeline/session-actions.d.ts +34 -0
  52. package/dist/timeline/session-list.d.ts +50 -0
  53. package/dist/timeline/session-screen.d.ts +35 -0
  54. package/dist/timeline/session-signals.d.ts +37 -0
  55. package/dist/timeline/sheet.d.ts +14 -0
  56. package/dist/timeline/theme.d.ts +58 -0
  57. package/dist/timeline/thinking-orb.d.ts +13 -0
  58. package/dist/timeline/turn.d.ts +80 -0
  59. package/dist/ui/attention.d.ts +14 -0
  60. package/dist/ui/cards.d.ts +21 -0
  61. package/dist/ui/composer.d.ts +21 -0
  62. package/dist/ui/format.d.ts +13 -0
  63. package/dist/ui/icons.d.ts +9 -0
  64. package/dist/ui/index.d.ts +12 -0
  65. package/dist/ui/index.js +1757 -0
  66. package/dist/ui/index.js.map +1 -0
  67. package/dist/ui/steps-sheet.d.ts +10 -0
  68. package/dist/ui/theme.d.ts +63 -0
  69. package/dist/ui/timeline.d.ts +48 -0
  70. package/dist/ui/web-tokens.gen.d.ts +90 -0
  71. package/dist/use-native-session.d.ts +40 -0
  72. package/dist/view-model.d.ts +52 -0
  73. package/dist/voice-input.d.ts +102 -0
  74. package/dist/webrtc.d.ts +9 -0
  75. package/dist/webrtc.js +19 -0
  76. package/dist/webrtc.js.map +1 -0
  77. package/expo-module.config.json +7 -0
  78. package/ios/OpenGeniCall.podspec +22 -0
  79. package/ios/OpenGeniCallAppDelegateSubscriber.swift +29 -0
  80. package/ios/OpenGeniCallCenter.swift +189 -0
  81. package/ios/OpenGeniCallModule.swift +64 -0
  82. package/package.json +93 -0
  83. package/src/adapters.ts +150 -0
  84. package/src/attachments.ts +396 -0
  85. package/src/environment.tsx +214 -0
  86. package/src/expo.ts +295 -0
  87. package/src/index.ts +98 -0
  88. package/src/presentation.ts +285 -0
  89. package/src/read-acknowledgement.ts +72 -0
  90. package/src/realtime/call-events.ts +41 -0
  91. package/src/realtime/call-view.tsx +220 -0
  92. package/src/realtime/expo-call.ts +49 -0
  93. package/src/realtime/native-call.ts +266 -0
  94. package/src/realtime/native-realtime.ts +115 -0
  95. package/src/realtime/use-native-session-realtime.ts +29 -0
  96. package/src/session-view.tsx +2251 -0
  97. package/src/timeline/activity.tsx +736 -0
  98. package/src/timeline/composer.tsx +686 -0
  99. package/src/timeline/controls.tsx +151 -0
  100. package/src/timeline/decisions.tsx +651 -0
  101. package/src/timeline/feedback.tsx +251 -0
  102. package/src/timeline/icon-nodes.generated.ts +1830 -0
  103. package/src/timeline/icon.tsx +44 -0
  104. package/src/timeline/index.ts +67 -0
  105. package/src/timeline/markdown.tsx +510 -0
  106. package/src/timeline/message-attachments.tsx +155 -0
  107. package/src/timeline/message-timeline.tsx +1042 -0
  108. package/src/timeline/model-picker.tsx +450 -0
  109. package/src/timeline/primitives.tsx +561 -0
  110. package/src/timeline/queue-dock.tsx +331 -0
  111. package/src/timeline/session-actions.tsx +379 -0
  112. package/src/timeline/session-list.tsx +338 -0
  113. package/src/timeline/session-screen.tsx +488 -0
  114. package/src/timeline/session-signals.tsx +312 -0
  115. package/src/timeline/sheet.tsx +153 -0
  116. package/src/timeline/theme.tsx +128 -0
  117. package/src/timeline/thinking-orb.tsx +93 -0
  118. package/src/timeline/turn.tsx +569 -0
  119. package/src/ui/attention.tsx +220 -0
  120. package/src/ui/cards.tsx +267 -0
  121. package/src/ui/composer.tsx +296 -0
  122. package/src/ui/format.ts +86 -0
  123. package/src/ui/icons.tsx +131 -0
  124. package/src/ui/index.ts +18 -0
  125. package/src/ui/steps-sheet.tsx +71 -0
  126. package/src/ui/theme.ts +261 -0
  127. package/src/ui/timeline.tsx +837 -0
  128. package/src/ui/web-tokens.gen.ts +94 -0
  129. package/src/use-native-session.ts +219 -0
  130. package/src/view-model.ts +485 -0
  131. package/src/voice-input.ts +382 -0
  132. package/src/webrtc.ts +30 -0
@@ -0,0 +1,19 @@
1
+ import type { ComposerDraft } from "@opengeni/sdk";
2
+ import type { useTurnQueue } from "@opengeni/react/session";
3
+ import { type ReactNode } from "react";
4
+ type TurnQueue = ReturnType<typeof useTurnQueue>;
5
+ /** The composer surface the dock checks prompts out into. */
6
+ export interface QueueDockComposer {
7
+ draftRevision: number;
8
+ hasDraftContent: () => boolean;
9
+ applyDraft: (draft: ComposerDraft) => void;
10
+ draftPersistence?: "durable" | "disabled" | undefined;
11
+ }
12
+ export declare function QueueDock({ queue, composer, onComposerFocus, leading, }: {
13
+ queue: TurnQueue;
14
+ composer?: QueueDockComposer | undefined;
15
+ onComposerFocus?: (() => void) | undefined;
16
+ /** Chips sharing the queue chip's row (goal, agents, commands). */
17
+ leading?: ReactNode;
18
+ }): import("react").JSX.Element | null;
19
+ export {};
@@ -0,0 +1,34 @@
1
+ import type { Session, UpdateSessionPinRequest, UpdateSessionRequest } from "@opengeni/sdk";
2
+ import { type ReactNode } from "react";
3
+ import { type NativeIconName } from "./icon.js";
4
+ export interface SessionActionsClient {
5
+ updateSession(workspaceId: string, sessionId: string, request: UpdateSessionRequest): Promise<Session>;
6
+ updateSessionPin(workspaceId: string, sessionId: string, request: UpdateSessionPinRequest): Promise<Session>;
7
+ }
8
+ export interface SessionActionsProps {
9
+ session: Session;
10
+ client: SessionActionsClient;
11
+ /** Called with the server's session after a change, so the host can refresh. */
12
+ onChanged: (session: Session) => void;
13
+ /** Host actions appended after Rename and Pin. */
14
+ extraActions?: SessionAction[] | undefined;
15
+ onActionFeedback?: (() => void) | undefined;
16
+ /**
17
+ * Present the actions in a host-native menu (a UIMenu on iOS) anchored to the
18
+ * trigger instead of the slide-up sheet. The host wraps `trigger`.
19
+ */
20
+ renderMenu?: ((input: {
21
+ actions: SessionAction[];
22
+ trigger: ReactNode;
23
+ }) => ReactNode) | undefined;
24
+ }
25
+ export interface SessionAction {
26
+ key: string;
27
+ label: string;
28
+ icon: NativeIconName;
29
+ onPress: () => void;
30
+ destructive?: boolean | undefined;
31
+ /** SF Symbol for a native menu. */
32
+ systemImage?: string | undefined;
33
+ }
34
+ export declare function SessionActionsButton(props: SessionActionsProps): import("react").JSX.Element;
@@ -0,0 +1,50 @@
1
+ import type { ClientModel, Session, SessionStatus } from "@opengeni/sdk";
2
+ import { type SessionStatusTone } from "@opengeni/react/session-list-model";
3
+ /** The web StatusDot: an 8pt dot with a gentle pulse for live states. */
4
+ export declare function StatusDot({ tone, pulse, size, }: {
5
+ tone: SessionStatusTone;
6
+ pulse?: boolean;
7
+ size?: number;
8
+ }): import("react").JSX.Element;
9
+ /** The model maker's logo (OpenAI, Claude, Grok) with the web's neutral fallback. */
10
+ export declare function ModelMark({ model, size, color, }: {
11
+ model: string;
12
+ size?: number;
13
+ color: string;
14
+ }): import("react").JSX.Element;
15
+ export interface SessionRowProps {
16
+ session: Session;
17
+ /** The deployment's client model catalog, for catalog labels. */
18
+ models: readonly ClientModel[];
19
+ onPress: () => void;
20
+ now?: Date | undefined;
21
+ }
22
+ /** One recent-session row, as the web home canvas renders it. */
23
+ export declare function SessionRow({ session, models, onPress, now }: SessionRowProps): import("react").JSX.Element;
24
+ /** A small-caps section label (web: text-2xs semibold uppercase tracking-wider). */
25
+ export declare function SectionLabel({ children }: {
26
+ children: string;
27
+ }): import("react").JSX.Element;
28
+ /** The web's divided list: rows separated by a hairline in border/60. */
29
+ export declare function SessionRowList(props: {
30
+ sessions: readonly Session[];
31
+ models: readonly ClientModel[];
32
+ onOpen: (sessionId: string) => void;
33
+ }): import("react").JSX.Element;
34
+ /** The web session status badge: tinted pill, breathing dot for live states. */
35
+ export declare function SessionStatusBadge({ status, label }: {
36
+ status: SessionStatus;
37
+ label?: string;
38
+ }): import("react").JSX.Element;
39
+ /**
40
+ * A native navigation-bar title for a session: the title on one line and, under
41
+ * it, the run state as a status dot and quiet label (the web header badge's
42
+ * information without boxing a pill inside the bar's glass).
43
+ */
44
+ export declare function SessionHeaderTitle({ title, status, statusLabel, align, }: {
45
+ title: string;
46
+ status: SessionStatus | null;
47
+ /** Override the label ("Paused" for a paused workstream). */
48
+ statusLabel?: string | undefined;
49
+ align?: "center" | "left";
50
+ }): import("react").JSX.Element;
@@ -0,0 +1,35 @@
1
+ import { type ReactNode } from "react";
2
+ import type { OpenGeniNativeSessionController } from "../use-native-session.js";
3
+ import type { NativeFileAttachmentsResult } from "../attachments.js";
4
+ import { type SessionComposerProps } from "./composer.js";
5
+ import { type TurnFeedbackTarget } from "./feedback.js";
6
+ import { type ApprovalStripProps, type HumanInputCardProps } from "./decisions.js";
7
+ import type { ClientModel, OpenGeniClient } from "@opengeni/sdk";
8
+ import { type NativeMessageTimelineProps } from "./message-timeline.js";
9
+ export interface NativeSessionScreenProps extends Omit<NativeMessageTimelineProps, "items" | "events" | "status" | "trailing"> {
10
+ controller: OpenGeniNativeSessionController;
11
+ /** Composer slots (products add their own actions/options here). */
12
+ composer?: Partial<Pick<SessionComposerProps, "renderLeading" | "options" | "header" | "placeholder" | "onAttach" | "messages" | "onActionFeedback" | "voice">> | undefined;
13
+ /** Extra content after the question card (host recovery, banners). */
14
+ trailing?: ReactNode;
15
+ /** Fixed host chrome above the timeline, inside the keyboard-avoiding area. */
16
+ topBar?: ReactNode;
17
+ bottomInset?: number | undefined;
18
+ /** Distance from this screen's bottom edge to the window bottom (e.g. a tab bar). */
19
+ keyboardBottomOffset?: number | undefined;
20
+ /** Reply feedback (thumbs beside Copy), as the web timeline offers it. */
21
+ feedback?: TurnFeedbackTarget | undefined;
22
+ /** Translations for the question card (the shared human-input catalog). */
23
+ humanInputMessages?: HumanInputCardProps["messages"];
24
+ /** Translations for the approval strip. */
25
+ approvalMessages?: ApprovalStripProps["messages"];
26
+ /** Reads the commands panel (the full client; omit to hide command details). */
27
+ client?: OpenGeniClient | undefined;
28
+ /** Model catalog for the agents panel rows. */
29
+ models?: readonly ClientModel[] | undefined;
30
+ }
31
+ export declare function NativeSessionScreen({ controller, composer: composerSlots, trailing, topBar, bottomInset, keyboardBottomOffset, feedback, humanInputMessages, approvalMessages, client, models, renderMessageActions: hostMessageActions, ...timelineProps }: NativeSessionScreenProps): import("react").JSX.Element;
32
+ /** Composer attachment chips: name, upload state, tap to retry a failure, remove. */
33
+ export declare function AttachmentChips({ attachments }: {
34
+ attachments: NativeFileAttachmentsResult;
35
+ }): import("react").JSX.Element | null;
@@ -0,0 +1,37 @@
1
+ import type { ClientModel, LineageNode, SessionBackgroundCommand } from "@opengeni/sdk";
2
+ import type { UseGoalResult } from "@opengeni/react/session";
3
+ import { type ReactNode } from "react";
4
+ import { type TextStyle } from "react-native";
5
+ import { type NativeTimelineTheme } from "./theme.js";
6
+ export interface SessionCommandsSource {
7
+ commands: SessionBackgroundCommand[];
8
+ loading: boolean;
9
+ error: Error | null;
10
+ cancel: (commandId: string) => Promise<void>;
11
+ }
12
+ export declare function SessionSignals(props: {
13
+ goal?: UseGoalResult | null | undefined;
14
+ agents: readonly LineageNode[];
15
+ commandsCount: number;
16
+ /** Mounted only while the commands sheet is open, so a closed chip never polls. */
17
+ renderCommands: (close: () => void) => ReactNode;
18
+ onOpenSession?: ((sessionId: string) => void) | undefined;
19
+ models?: readonly ClientModel[] | undefined;
20
+ readOnly?: boolean | undefined;
21
+ }): import("react").JSX.Element | null;
22
+ /** The web commands panel: each running command with its state and a Stop action. */
23
+ export declare function SessionCommandsList({ commands, readOnly, }: {
24
+ commands: SessionCommandsSource;
25
+ readOnly?: boolean | undefined;
26
+ }): import("react").JSX.Element;
27
+ /** The compact signal chip shared by goal, agents, commands and the queue. */
28
+ export declare function signalChipStyle(theme: NativeTimelineTheme, pressed: boolean): {
29
+ flexDirection: "row";
30
+ alignItems: "center";
31
+ gap: number;
32
+ height: number;
33
+ paddingHorizontal: number;
34
+ borderRadius: number;
35
+ backgroundColor: string;
36
+ };
37
+ export declare function signalChipText(theme: NativeTimelineTheme): TextStyle;
@@ -0,0 +1,14 @@
1
+ import { type ReactNode } from "react";
2
+ /**
3
+ * A content-sized bottom sheet: dimmed backdrop, grabber, drag or tap outside
4
+ * to dismiss, keyboard-aware and safe-area padded. The native counterpart of
5
+ * the web's anchored menus at phone width.
6
+ */
7
+ export declare function BottomSheet(props: {
8
+ open: boolean;
9
+ onClose: () => void;
10
+ accessibilityLabel: string;
11
+ /** Cap as a fraction of the window height (default 0.85). */
12
+ maxHeightRatio?: number | undefined;
13
+ children: ReactNode;
14
+ }): import("react").JSX.Element | null;
@@ -0,0 +1,58 @@
1
+ import { type ReactNode } from "react";
2
+ import { type TextStyle } from "react-native";
3
+ import { webColorsLight } from "../ui/web-tokens.gen.js";
4
+ export type WebColorToken = keyof typeof webColorsLight;
5
+ export type NativeTimelineColors = Record<WebColorToken, string>;
6
+ export interface NativeTimelineFonts {
7
+ /** Font family per weight for the sans face; undefined → platform system font. */
8
+ sans?: Partial<Record<"400" | "500" | "600" | "700", string>> | undefined;
9
+ /** Font family per weight for the mono face; undefined → platform monospace. */
10
+ mono?: Partial<Record<"400" | "500", string>> | undefined;
11
+ /** Regular-weight italic family (custom fonts cannot be synthesized italic on iOS). */
12
+ sansItalic?: string | undefined;
13
+ /** Extra sans letter spacing (pt) to match the web face's metrics. */
14
+ sansTracking?: number | undefined;
15
+ }
16
+ export interface NativeTimelineTheme {
17
+ scheme: "light" | "dark";
18
+ colors: NativeTimelineColors;
19
+ size: {
20
+ xs: number;
21
+ sm: number;
22
+ base: number;
23
+ md: number;
24
+ composer: number;
25
+ };
26
+ radius: {
27
+ xs: number;
28
+ sm: number;
29
+ md: number;
30
+ lg: number;
31
+ xl: number;
32
+ full: number;
33
+ };
34
+ fonts: NativeTimelineFonts;
35
+ }
36
+ export interface NativeTimelineThemeOverrides {
37
+ light?: Partial<NativeTimelineColors> | undefined;
38
+ dark?: Partial<NativeTimelineColors> | undefined;
39
+ fonts?: NativeTimelineFonts | undefined;
40
+ }
41
+ export declare function createNativeTimelineTheme(scheme: "light" | "dark", overrides?: NativeTimelineThemeOverrides): NativeTimelineTheme;
42
+ /**
43
+ * Fill for an inset block on the page (code blocks). Web uses `surface-1`, which reads
44
+ * as a block on the component `bg`; when the host page itself is `surface-1` (the
45
+ * white or near-black app canvas), the block falls back to the web component `bg` so
46
+ * it never disappears into the page.
47
+ */
48
+ export declare function insetSurface(theme: NativeTimelineTheme): string;
49
+ export declare function NativeTimelineThemeProvider({ scheme, overrides, children, }: {
50
+ scheme: "light" | "dark";
51
+ overrides?: NativeTimelineThemeOverrides | undefined;
52
+ children: ReactNode;
53
+ }): import("react").JSX.Element;
54
+ export declare function useNativeTimelineTheme(): NativeTimelineTheme;
55
+ /** Text style for a web weight, resolving host font families when supplied. */
56
+ export declare function fontStyle(theme: NativeTimelineTheme, weight?: 400 | 500 | 600 | 700, face?: "sans" | "mono"): TextStyle;
57
+ declare const MONO_FALLBACK = "Menlo";
58
+ export { MONO_FALLBACK };
@@ -0,0 +1,13 @@
1
+ import { type OrbState } from "thinking-orbs/engine";
2
+ /**
3
+ * The web's ThinkingOrb on native: the same `thinking-orbs` geometry (one
4
+ * frame of dots and edges per instant) drawn with SVG. Pauses in the
5
+ * background and holds a still frame under Reduce Motion, as the web does.
6
+ */
7
+ export declare function ThinkingOrb({ state, size, speed, displaySize, }: {
8
+ state?: OrbState;
9
+ size?: 64 | 20;
10
+ speed?: number;
11
+ /** Draw the tuned preset larger (for example a call screen) without losing sharpness. */
12
+ displaySize?: number;
13
+ }): import("react").JSX.Element;
@@ -0,0 +1,80 @@
1
+ import type { ActivityItem, TurnOutcome } from "@opengeni/react/session";
2
+ import { type TurnSummaryFacetConfiguration } from "@opengeni/react/timeline-model";
3
+ import { type ReactNode } from "react";
4
+ /** Native counterpart of the web `TurnSummaryStatus` with a renderable preview. */
5
+ export type NativeTurnStatus = {
6
+ kind: "worked";
7
+ durationMs?: number | undefined;
8
+ label?: string | undefined;
9
+ } | {
10
+ kind: "working" | "waiting";
11
+ since?: string | undefined;
12
+ label?: string | undefined;
13
+ preview?: ReactNode;
14
+ };
15
+ type FoldMemory = Map<string, "open" | "closed">;
16
+ export declare const FoldMemoryProvider: import("react").Provider<FoldMemory | null>;
17
+ /**
18
+ * An expanded outer turn header stays pinned to the top of the timeline while
19
+ * its section scrolls (web: sticky inside the section). Each open section
20
+ * reports its content-space frame and a renderer for the header row; the
21
+ * timeline draws the pinned copy over the scroll view.
22
+ */
23
+ export type StickyWorkHeader = {
24
+ top: number;
25
+ height: number;
26
+ headerHeight: number;
27
+ render: () => ReactNode;
28
+ };
29
+ export type StickyWorkHeaderRegistry = {
30
+ register: (key: string, entry: StickyWorkHeader | null) => void;
31
+ /** Bring a section's top back into view (after collapsing from the pinned copy). */
32
+ reveal: (top: number) => void;
33
+ };
34
+ export declare const StickyWorkHeaderProvider: import("react").Provider<StickyWorkHeaderRegistry | null>;
35
+ export declare function useLiveNow(active: boolean): number;
36
+ export interface TurnSummaryProps {
37
+ items: ActivityItem[];
38
+ outcome?: TurnOutcome | undefined;
39
+ failureText?: string | undefined;
40
+ durationMs?: number | undefined;
41
+ defaultOpen?: boolean | undefined;
42
+ liveHeader?: ReactNode;
43
+ bare?: boolean | undefined;
44
+ facets?: TurnSummaryFacetConfiguration | undefined;
45
+ foldKey?: string | undefined;
46
+ contextCompactionCount?: number | undefined;
47
+ status?: NativeTurnStatus | undefined;
48
+ children: ReactNode;
49
+ }
50
+ export declare function TurnSummary({ items, outcome, failureText, durationMs, defaultOpen, liveHeader, bare, facets: facetConfiguration, foldKey, contextCompactionCount, status, children, }: TurnSummaryProps): import("react").JSX.Element;
51
+ /** The stable left rule under a turn/activity body (web TurnRailFrame). */
52
+ export declare function TurnRailFrame({ children, compact, }: {
53
+ children: ReactNode;
54
+ compact?: boolean;
55
+ }): import("react").JSX.Element;
56
+ /** The native ActivityRail (bare): tight same-family rows, breathing room between families. */
57
+ export declare function ActivityRail({ items, startupActive, renderPreparing, }: {
58
+ items: ActivityItem[];
59
+ startupActive?: boolean | undefined;
60
+ renderPreparing?: ((props: PreparingProps) => ReactNode) | undefined;
61
+ }): import("react").JSX.Element;
62
+ export interface PreparingProps {
63
+ startedAt: string;
64
+ phase: "preparing" | "waiting";
65
+ phrase: string;
66
+ slow: boolean;
67
+ }
68
+ /** The web GenieLoading: a visual (orb by default; hosts supply a character) + rotating copy. */
69
+ export declare function PreparingState({ startedAt, phase, render, }: {
70
+ startedAt: string;
71
+ phase: "preparing" | "waiting";
72
+ render?: ((props: PreparingProps) => ReactNode) | undefined;
73
+ }): import("react").JSX.Element;
74
+ /** One stable 24pt viewport; updates replace its content without moving the conversation. */
75
+ export declare function RollingActivity({ items, previousItem, showCount, }: {
76
+ items: ActivityItem[];
77
+ previousItem?: ActivityItem | undefined;
78
+ showCount?: boolean;
79
+ }): import("react").JSX.Element | null;
80
+ export {};
@@ -0,0 +1,14 @@
1
+ import type { PendingApproval, PendingHumanInputRequest } from "@opengeni/react/session";
2
+ import type { HumanInputAnswer } from "@opengeni/sdk";
3
+ import type { AgentTheme } from "./theme.js";
4
+ /**
5
+ * Everything the agent is waiting on, docked directly above the composer. One item at a
6
+ * time with a counter; decisions never scroll away with the conversation.
7
+ */
8
+ export declare function AgentAttentionTray(props: {
9
+ approvals: readonly PendingApproval[];
10
+ humanInput: readonly PendingHumanInputRequest[];
11
+ theme: AgentTheme;
12
+ onApproval(approvalId: string, decision: "approve" | "reject"): void;
13
+ onAnswer(requestId: string, answers: HumanInputAnswer[] | null): void;
14
+ }): import("react").JSX.Element | null;
@@ -0,0 +1,21 @@
1
+ import type { PendingApproval, PendingHumanInputRequest } from "@opengeni/react/session";
2
+ import type { HumanInputAnswer } from "@opengeni/sdk";
3
+ import type { AgentTheme } from "./theme.js";
4
+ export declare function ActionButton(props: {
5
+ label: string;
6
+ onPress(): void;
7
+ theme: AgentTheme;
8
+ variant: "primary" | "secondary" | "danger";
9
+ disabled?: boolean;
10
+ flex?: boolean;
11
+ }): import("react").JSX.Element;
12
+ export declare function ApprovalCard(props: {
13
+ approval: PendingApproval;
14
+ theme: AgentTheme;
15
+ onDecision(decision: "approve" | "reject"): void;
16
+ }): import("react").JSX.Element;
17
+ export declare function QuestionCard(props: {
18
+ request: PendingHumanInputRequest;
19
+ theme: AgentTheme;
20
+ onAnswer(answers: HumanInputAnswer[] | null): void;
21
+ }): import("react").JSX.Element | null;
@@ -0,0 +1,21 @@
1
+ import type { ReactNode } from "react";
2
+ import type { AgentTheme } from "./theme.js";
3
+ export interface AgentComposerProps {
4
+ theme: AgentTheme;
5
+ value: string;
6
+ onChangeText(text: string): void;
7
+ onSend(): void;
8
+ onStop?: (() => void) | undefined;
9
+ onAttach?: (() => void) | undefined;
10
+ onVoice?: (() => void) | undefined;
11
+ running: boolean;
12
+ placeholder: string;
13
+ /** Chips shown in the bar composer (model, permissions…). */
14
+ accessories?: ReactNode | undefined;
15
+ bottomInset: number;
16
+ }
17
+ export declare function AgentComposer(props: AgentComposerProps): import("react").JSX.Element;
18
+ export declare function ComposerChip({ theme, label }: {
19
+ theme: AgentTheme;
20
+ label: string;
21
+ }): import("react").JSX.Element;
@@ -0,0 +1,13 @@
1
+ import type { ActivityItem, TimelineGroup, ToolCallItem } from "@opengeni/react/session";
2
+ export declare function toolTitle(item: ToolCallItem): string;
3
+ /** One-line human summary of a tool call's input. */
4
+ export declare function toolDetail(item: ToolCallItem): string | null;
5
+ /** Short preview of a settled tool output. */
6
+ export declare function toolOutputPreview(item: ToolCallItem, lines?: number): string | null;
7
+ export declare function formatDuration(ms: number): string;
8
+ export declare function itemTime(item: {
9
+ occurredAt?: string;
10
+ }): number;
11
+ /** Flatten nested work details of a group into its activity items, in order. */
12
+ export declare function activityItemsOf(group: TimelineGroup): ActivityItem[];
13
+ export declare function toolCallsOf(items: readonly ActivityItem[]): ToolCallItem[];
@@ -0,0 +1,9 @@
1
+ export type AgentIconName = "terminal" | "search" | "edit" | "globe" | "check" | "x" | "chevron-right" | "chevron-down" | "sparkle" | "mic" | "plus" | "arrow-up" | "stop" | "tool" | "send" | "alert" | "question" | "rocket";
2
+ export declare function AgentIcon({ name, size, color, strokeWidth, }: {
3
+ name: AgentIconName;
4
+ size?: number;
5
+ color: string;
6
+ strokeWidth?: number;
7
+ }): import("react").JSX.Element;
8
+ /** Category icon for a tool name (best effort, purely presentational). */
9
+ export declare function toolIconName(name: string): AgentIconName;
@@ -0,0 +1,12 @@
1
+ export { AgentStepList, AgentTimeline, UserMessage, WorkingLine } from "./timeline.js";
2
+ export { AgentStepsSheet } from "./steps-sheet.js";
3
+ export { AgentAttentionTray } from "./attention.js";
4
+ export type { AgentTimelineProps, MarkdownRenderer } from "./timeline.js";
5
+ export { AgentComposer, ComposerChip } from "./composer.js";
6
+ export type { AgentComposerProps } from "./composer.js";
7
+ export { ApprovalCard, QuestionCard, ActionButton } from "./cards.js";
8
+ export { AgentIcon, toolIconName } from "./icons.js";
9
+ export type { AgentIconName } from "./icons.js";
10
+ export { agentDirections, agentTheme } from "./theme.js";
11
+ export type { AgentDirection, AgentDirectionId, AgentTheme, ActivityStyle, ComposerStyle, } from "./theme.js";
12
+ export { formatDuration, toolDetail, toolOutputPreview, toolTitle } from "./format.js";