@yourgpt/copilot-sdk 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1143 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React$1 from 'react';
3
+ import React__default from 'react';
4
+ import { Components } from 'react-markdown';
5
+ import * as class_variance_authority_types from 'class-variance-authority/types';
6
+ import { VariantProps } from 'class-variance-authority';
7
+ import * as use_stick_to_bottom from 'use-stick-to-bottom';
8
+ import { ClassValue } from 'clsx';
9
+
10
+ interface LoaderProps {
11
+ variant?: "circular" | "classic" | "pulse" | "pulse-dot" | "dots" | "typing" | "wave" | "bars" | "terminal" | "text-blink" | "text-shimmer" | "loading-dots";
12
+ size?: "sm" | "md" | "lg";
13
+ text?: string;
14
+ className?: string;
15
+ }
16
+ declare function Loader({ variant, size, text, className, }: LoaderProps): react_jsx_runtime.JSX.Element;
17
+
18
+ type MarkdownProps = {
19
+ children: string;
20
+ id?: string;
21
+ className?: string;
22
+ components?: Partial<Components>;
23
+ };
24
+ declare function MarkdownComponent({ children, id, className, components, }: MarkdownProps): react_jsx_runtime.JSX.Element;
25
+ declare const Markdown: React$1.MemoExoticComponent<typeof MarkdownComponent>;
26
+
27
+ type CodeBlockProps = {
28
+ children?: React__default.ReactNode;
29
+ className?: string;
30
+ } & React__default.HTMLProps<HTMLDivElement>;
31
+ declare function CodeBlock({ children, className, ...props }: CodeBlockProps): react_jsx_runtime.JSX.Element;
32
+
33
+ declare const buttonVariants: (props?: ({
34
+ variant?: "link" | "default" | "destructive" | "outline" | "secondary" | "ghost" | null | undefined;
35
+ size?: "sm" | "lg" | "default" | "icon" | null | undefined;
36
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
37
+ interface ButtonProps extends React$1.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
38
+ asChild?: boolean;
39
+ }
40
+ declare const Button: React$1.ForwardRefExoticComponent<ButtonProps & React$1.RefAttributes<HTMLButtonElement>>;
41
+
42
+ type FeedbackBarProps = {
43
+ className?: string;
44
+ title?: string;
45
+ icon?: React.ReactNode;
46
+ onHelpful?: () => void;
47
+ onNotHelpful?: () => void;
48
+ onClose?: () => void;
49
+ };
50
+ declare function FeedbackBar({ className, title, icon, onHelpful, onNotHelpful, onClose, }: FeedbackBarProps): react_jsx_runtime.JSX.Element;
51
+
52
+ type ScrollButtonProps = {
53
+ className?: string;
54
+ variant?: VariantProps<typeof buttonVariants>["variant"];
55
+ size?: VariantProps<typeof buttonVariants>["size"];
56
+ } & React.ButtonHTMLAttributes<HTMLButtonElement>;
57
+ declare function ScrollButton({ className, variant, size, ...props }: ScrollButtonProps): react_jsx_runtime.JSX.Element;
58
+
59
+ type TooltipProviderProps = {
60
+ children: React__default.ReactNode;
61
+ delayDuration?: number;
62
+ };
63
+ declare function TooltipProvider({ children, delayDuration, }: TooltipProviderProps): react_jsx_runtime.JSX.Element;
64
+ type TooltipProps = {
65
+ children: React__default.ReactNode;
66
+ open?: boolean;
67
+ defaultOpen?: boolean;
68
+ onOpenChange?: (open: boolean) => void;
69
+ };
70
+ declare function Tooltip({ children, open, defaultOpen, onOpenChange }: TooltipProps): react_jsx_runtime.JSX.Element;
71
+ type TooltipTriggerProps = {
72
+ children: React__default.ReactNode;
73
+ asChild?: boolean;
74
+ disabled?: boolean;
75
+ } & React__default.ComponentPropsWithoutRef<"button">;
76
+ declare function TooltipTrigger({ children, asChild, disabled, ...props }: TooltipTriggerProps): react_jsx_runtime.JSX.Element;
77
+ type TooltipContentProps = {
78
+ children: React__default.ReactNode;
79
+ className?: string;
80
+ side?: "top" | "bottom" | "left" | "right";
81
+ align?: "start" | "center" | "end";
82
+ sideOffset?: number;
83
+ showArrow?: boolean;
84
+ };
85
+ declare function TooltipContent({ children, className, side, align, sideOffset, showArrow, }: TooltipContentProps): react_jsx_runtime.JSX.Element;
86
+
87
+ type MessageProps = {
88
+ children: React.ReactNode;
89
+ className?: string;
90
+ } & React.HTMLProps<HTMLDivElement>;
91
+ declare const Message: ({ children, className, ...props }: MessageProps) => react_jsx_runtime.JSX.Element;
92
+ type MessageAvatarProps = {
93
+ src: string;
94
+ alt: string;
95
+ fallback?: string;
96
+ delayMs?: number;
97
+ className?: string;
98
+ };
99
+ declare const MessageAvatar: ({ src, alt, fallback, delayMs, className, }: MessageAvatarProps) => react_jsx_runtime.JSX.Element;
100
+ type MessageContentProps = {
101
+ children: React.ReactNode;
102
+ markdown?: boolean;
103
+ className?: string;
104
+ /** Font size variant: 'sm' (14px), 'base' (16px), 'lg' (18px) */
105
+ size?: "sm" | "base" | "lg";
106
+ } & React.ComponentProps<typeof Markdown> & Omit<React.HTMLProps<HTMLDivElement>, "size">;
107
+ declare const MessageContent: ({ children, markdown, className, size, ...props }: MessageContentProps) => react_jsx_runtime.JSX.Element;
108
+
109
+ declare const Textarea: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>, "ref"> & React$1.RefAttributes<HTMLTextAreaElement>>;
110
+
111
+ type PromptInputProps = {
112
+ isLoading?: boolean;
113
+ value?: string;
114
+ onValueChange?: (value: string) => void;
115
+ maxHeight?: number | string;
116
+ onSubmit?: () => void;
117
+ children: React__default.ReactNode;
118
+ className?: string;
119
+ disabled?: boolean;
120
+ } & React__default.ComponentProps<"div">;
121
+ declare function PromptInput({ className, isLoading, maxHeight, value, onValueChange, onSubmit, children, disabled, onClick, ...props }: PromptInputProps): react_jsx_runtime.JSX.Element;
122
+ type PromptInputTextareaProps = {
123
+ disableAutosize?: boolean;
124
+ } & React__default.ComponentProps<typeof Textarea>;
125
+ declare function PromptInputTextarea({ className, onKeyDown, disableAutosize, ...props }: PromptInputTextareaProps): react_jsx_runtime.JSX.Element;
126
+ type PromptInputActionsProps = React__default.HTMLAttributes<HTMLDivElement>;
127
+ declare function PromptInputActions({ children, className, ...props }: PromptInputActionsProps): react_jsx_runtime.JSX.Element;
128
+ type PromptInputActionProps = {
129
+ className?: string;
130
+ tooltip: React__default.ReactNode;
131
+ children: React__default.ReactNode;
132
+ side?: "top" | "bottom" | "left" | "right";
133
+ };
134
+ declare function PromptInputAction({ tooltip, children, className, side, }: PromptInputActionProps): react_jsx_runtime.JSX.Element;
135
+
136
+ declare function useChatContainer(): {
137
+ isAtBottom: boolean;
138
+ scrollToBottom: use_stick_to_bottom.ScrollToBottom;
139
+ };
140
+ type ChatContainerRootProps = {
141
+ children: React.ReactNode;
142
+ className?: string;
143
+ } & React.HTMLAttributes<HTMLDivElement>;
144
+ type ChatContainerContentProps = {
145
+ children: React.ReactNode;
146
+ className?: string;
147
+ } & React.HTMLAttributes<HTMLDivElement>;
148
+ type ChatContainerScrollAnchorProps = {
149
+ className?: string;
150
+ ref?: React.RefObject<HTMLDivElement>;
151
+ } & React.HTMLAttributes<HTMLDivElement>;
152
+ declare function ChatContainerRoot({ children, className, ...props }: ChatContainerRootProps): react_jsx_runtime.JSX.Element;
153
+ declare function ChatContainerContent({ children, className, ...props }: ChatContainerContentProps): react_jsx_runtime.JSX.Element;
154
+ declare function ChatContainerScrollAnchor({ className, ...props }: ChatContainerScrollAnchorProps): react_jsx_runtime.JSX.Element;
155
+
156
+ type SourceProps = {
157
+ href: string;
158
+ children: React.ReactNode;
159
+ };
160
+ declare function Source({ href, children }: SourceProps): react_jsx_runtime.JSX.Element;
161
+ type SourceTriggerProps = {
162
+ label?: string | number;
163
+ showFavicon?: boolean;
164
+ className?: string;
165
+ };
166
+ declare function SourceTrigger({ label, showFavicon, className, }: SourceTriggerProps): react_jsx_runtime.JSX.Element;
167
+ type SourceContentProps = {
168
+ title: string;
169
+ description: string;
170
+ className?: string;
171
+ };
172
+ declare function SourceContent({ title, description, className, }: SourceContentProps): react_jsx_runtime.JSX.Element;
173
+
174
+ interface ReasoningProps {
175
+ children: React$1.ReactNode;
176
+ /** Whether content is currently streaming */
177
+ isStreaming?: boolean;
178
+ /** Controlled open state */
179
+ open?: boolean;
180
+ /** Callback when open state changes */
181
+ onOpenChange?: (open: boolean) => void;
182
+ /** Default open state (uncontrolled) */
183
+ defaultOpen?: boolean;
184
+ /** Class name for the container */
185
+ className?: string;
186
+ }
187
+ /**
188
+ * Reasoning component - Collapsible container for AI thinking/reasoning content
189
+ *
190
+ * Auto-expands during streaming and collapses when complete.
191
+ *
192
+ * @example
193
+ * ```tsx
194
+ * <Reasoning isStreaming={isStreaming}>
195
+ * <ReasoningTrigger>Thinking...</ReasoningTrigger>
196
+ * <ReasoningContent>{thinkingText}</ReasoningContent>
197
+ * </Reasoning>
198
+ * ```
199
+ */
200
+ declare function Reasoning({ children, isStreaming, open: controlledOpen, onOpenChange, defaultOpen, className, }: ReasoningProps): react_jsx_runtime.JSX.Element;
201
+ interface ReasoningTriggerProps {
202
+ children: React$1.ReactNode;
203
+ className?: string;
204
+ }
205
+ /**
206
+ * Clickable trigger to expand/collapse reasoning content
207
+ */
208
+ declare function ReasoningTrigger({ children, className, }: ReasoningTriggerProps): react_jsx_runtime.JSX.Element;
209
+ interface ReasoningContentProps {
210
+ children: React$1.ReactNode;
211
+ /** Render content as markdown */
212
+ markdown?: boolean;
213
+ /** Class name for the content */
214
+ className?: string;
215
+ }
216
+ /**
217
+ * Collapsible content area for reasoning text
218
+ */
219
+ declare function ReasoningContent({ children, markdown, className, }: ReasoningContentProps): react_jsx_runtime.JSX.Element;
220
+ interface SimpleReasoningProps {
221
+ /** The reasoning/thinking content */
222
+ content: string;
223
+ /** Whether content is streaming */
224
+ isStreaming?: boolean;
225
+ /** Label when streaming */
226
+ streamingLabel?: string;
227
+ /** Label when collapsed */
228
+ collapsedLabel?: string;
229
+ /** Render as markdown */
230
+ markdown?: boolean;
231
+ /** Class name */
232
+ className?: string;
233
+ }
234
+ /**
235
+ * Simple reasoning display with default trigger labels
236
+ *
237
+ * @example
238
+ * ```tsx
239
+ * <SimpleReasoning
240
+ * content={message.thinking}
241
+ * isStreaming={isLoading}
242
+ * />
243
+ * ```
244
+ */
245
+ declare function SimpleReasoning({ content, isStreaming, streamingLabel, collapsedLabel, markdown, className, }: SimpleReasoningProps): react_jsx_runtime.JSX.Element | null;
246
+
247
+ type ToolStepStatus = "pending" | "executing" | "completed" | "error" | "failed" | "rejected";
248
+ interface ToolStepData {
249
+ id: string;
250
+ name: string;
251
+ args?: Record<string, unknown>;
252
+ status: ToolStepStatus;
253
+ result?: {
254
+ success: boolean;
255
+ message?: string;
256
+ error?: string;
257
+ data?: unknown;
258
+ };
259
+ error?: string;
260
+ /** Human-readable title (resolved from tool definition) */
261
+ title?: string;
262
+ /** Title shown while executing */
263
+ executingTitle?: string;
264
+ /** Title shown after completion */
265
+ completedTitle?: string;
266
+ }
267
+ interface ToolStepProps {
268
+ step: ToolStepData;
269
+ /** Show connecting line to next step */
270
+ showLine?: boolean;
271
+ /** Override debug mode from context */
272
+ debug?: boolean;
273
+ /** Expanded by default (for debug mode) */
274
+ defaultExpanded?: boolean;
275
+ className?: string;
276
+ }
277
+ /**
278
+ * Individual tool step with shimmer loading, status icons, and debug mode
279
+ */
280
+ declare function ToolStep({ step, showLine, debug: debugProp, defaultExpanded, className, }: ToolStepProps): react_jsx_runtime.JSX.Element;
281
+ interface ToolStepsProps {
282
+ steps: ToolStepData[];
283
+ /** Override debug mode from context */
284
+ debug?: boolean;
285
+ /** Expand all by default (in debug mode) */
286
+ defaultExpanded?: boolean;
287
+ /** Class name */
288
+ className?: string;
289
+ }
290
+ /**
291
+ * Compact tool steps display with shimmer loading and debug mode
292
+ *
293
+ * @example
294
+ * ```tsx
295
+ * <ToolSteps
296
+ * steps={[
297
+ * { id: "1", name: "get_weather", status: "completed", title: "Get weather" },
298
+ * { id: "2", name: "navigate", status: "executing", executingTitle: "Navigating..." },
299
+ * ]}
300
+ * debug={true}
301
+ * />
302
+ * ```
303
+ */
304
+ declare function ToolSteps({ steps, debug, defaultExpanded, className, }: ToolStepsProps): react_jsx_runtime.JSX.Element | null;
305
+ interface InlineToolStepsProps {
306
+ steps: ToolStepData[];
307
+ /** Max steps to show before collapsing */
308
+ maxVisible?: number;
309
+ className?: string;
310
+ }
311
+ /**
312
+ * Ultra-compact inline display showing just status icons
313
+ *
314
+ * @example
315
+ * ```tsx
316
+ * <InlineToolSteps steps={toolExecutions} />
317
+ * // Shows: ✓ ✓ ⟳ ○
318
+ * ```
319
+ */
320
+ declare function InlineToolSteps({ steps, maxVisible, className, }: InlineToolStepsProps): react_jsx_runtime.JSX.Element | null;
321
+
322
+ type ConfirmationState$1 = "pending" | "approved" | "rejected";
323
+ interface ConfirmationProps {
324
+ children?: React$1.ReactNode;
325
+ /** Current approval state */
326
+ state?: ConfirmationState$1;
327
+ /** Message to display */
328
+ message?: string;
329
+ /** Called when user approves */
330
+ onApprove?: () => void;
331
+ /** Called when user rejects */
332
+ onReject?: () => void;
333
+ /** Additional class name */
334
+ className?: string;
335
+ }
336
+ /**
337
+ * Confirmation component - Tool approval/rejection UI
338
+ *
339
+ * Similar to Vercel AI SDK's Confirmation component for human-in-the-loop patterns.
340
+ *
341
+ * @example
342
+ * ```tsx
343
+ * <Confirmation
344
+ * state={execution.approvalStatus}
345
+ * message="This tool wants to delete a file."
346
+ * onApprove={() => approveToolExecution(execution.id)}
347
+ * onReject={() => rejectToolExecution(execution.id)}
348
+ * >
349
+ * <ConfirmationPending>
350
+ * <ConfirmationMessage />
351
+ * <ConfirmationActions />
352
+ * </ConfirmationPending>
353
+ * <ConfirmationApproved />
354
+ * <ConfirmationRejected />
355
+ * </Confirmation>
356
+ * ```
357
+ */
358
+ declare function Confirmation({ children, state, message, onApprove, onReject, className, }: ConfirmationProps): react_jsx_runtime.JSX.Element;
359
+ interface ConfirmationPendingProps {
360
+ children: React$1.ReactNode;
361
+ className?: string;
362
+ }
363
+ /**
364
+ * Renders children only when state is "pending"
365
+ */
366
+ declare function ConfirmationPending({ children, className, }: ConfirmationPendingProps): react_jsx_runtime.JSX.Element | null;
367
+ interface ConfirmationApprovedProps {
368
+ children?: React$1.ReactNode;
369
+ className?: string;
370
+ }
371
+ /**
372
+ * Renders children (or default approved message) when state is "approved"
373
+ */
374
+ declare function ConfirmationApproved({ children, className, }: ConfirmationApprovedProps): react_jsx_runtime.JSX.Element | null;
375
+ interface ConfirmationRejectedProps {
376
+ children?: React$1.ReactNode;
377
+ className?: string;
378
+ }
379
+ /**
380
+ * Renders children (or default rejected message) when state is "rejected"
381
+ */
382
+ declare function ConfirmationRejected({ children, className, }: ConfirmationRejectedProps): react_jsx_runtime.JSX.Element | null;
383
+ interface ConfirmationMessageProps {
384
+ children?: React$1.ReactNode;
385
+ className?: string;
386
+ }
387
+ /**
388
+ * Displays the approval message
389
+ */
390
+ declare function ConfirmationMessage({ children, className, }: ConfirmationMessageProps): react_jsx_runtime.JSX.Element;
391
+ interface ConfirmationActionsProps {
392
+ children?: React$1.ReactNode;
393
+ className?: string;
394
+ /** Label for reject button */
395
+ rejectLabel?: string;
396
+ /** Label for approve button */
397
+ approveLabel?: string;
398
+ }
399
+ /**
400
+ * Renders approval/rejection action buttons
401
+ */
402
+ declare function ConfirmationActions({ children, className, rejectLabel, approveLabel, }: ConfirmationActionsProps): react_jsx_runtime.JSX.Element;
403
+ interface SimpleConfirmationProps {
404
+ /** Current approval state */
405
+ state: ConfirmationState$1;
406
+ /** Message to display */
407
+ message?: string;
408
+ /** Called when user approves */
409
+ onApprove?: () => void;
410
+ /** Called when user rejects */
411
+ onReject?: () => void;
412
+ /** Label for reject button */
413
+ rejectLabel?: string;
414
+ /** Label for approve button */
415
+ approveLabel?: string;
416
+ /** Additional class name */
417
+ className?: string;
418
+ }
419
+ /**
420
+ * SimpleConfirmation - Convenience wrapper with all states built-in
421
+ *
422
+ * @example
423
+ * ```tsx
424
+ * <SimpleConfirmation
425
+ * state={execution.approvalStatus === "required" ? "pending" : execution.approvalStatus}
426
+ * message="Delete file /tmp/example.txt?"
427
+ * onApprove={() => approveToolExecution(execution.id)}
428
+ * onReject={() => rejectToolExecution(execution.id)}
429
+ * />
430
+ * ```
431
+ */
432
+ declare function SimpleConfirmation({ state, message, onApprove, onReject, rejectLabel, approveLabel, className, }: SimpleConfirmationProps): react_jsx_runtime.JSX.Element;
433
+
434
+ /**
435
+ * Permission level for tool execution
436
+ */
437
+ type PermissionLevel = "ask" | "allow_always" | "deny_always" | "session";
438
+ /**
439
+ * Permission option for dropdown/selection
440
+ */
441
+ interface PermissionOption {
442
+ value: PermissionLevel;
443
+ label: string;
444
+ description?: string;
445
+ }
446
+ /**
447
+ * Default permission options
448
+ */
449
+ declare const DEFAULT_PERMISSION_OPTIONS: PermissionOption[];
450
+ type ConfirmationState = "pending" | "approved" | "rejected";
451
+ interface PermissionConfirmationProps {
452
+ /** Current state: pending, approved, or rejected */
453
+ state: ConfirmationState;
454
+ /** Tool name */
455
+ toolName?: string;
456
+ /** Message to display */
457
+ message?: string;
458
+ /** Called when user approves with permission level */
459
+ onApprove?: (permissionLevel: PermissionLevel) => void;
460
+ /** Called when user rejects with permission level */
461
+ onReject?: (permissionLevel?: PermissionLevel) => void;
462
+ /** Show permission options (default: true) */
463
+ showPermissionOptions?: boolean;
464
+ /** Available permission options */
465
+ permissionOptions?: PermissionOption[];
466
+ /** Additional class name */
467
+ className?: string;
468
+ }
469
+ /**
470
+ * PermissionConfirmation - Enhanced confirmation with permission level selection
471
+ *
472
+ * Shows a confirmation dialog for tool approval with options to remember the choice.
473
+ *
474
+ * @example
475
+ * ```tsx
476
+ * <PermissionConfirmation
477
+ * state="pending"
478
+ * toolName="capture_screenshot"
479
+ * message="Take a screenshot of the current screen?"
480
+ * onApprove={(level) => approveToolExecution(tool.id, level)}
481
+ * onReject={(level) => rejectToolExecution(tool.id, undefined, level)}
482
+ * />
483
+ * ```
484
+ */
485
+ declare function PermissionConfirmation({ state, toolName, message, onApprove, onReject, showPermissionOptions, permissionOptions, className, }: PermissionConfirmationProps): react_jsx_runtime.JSX.Element;
486
+ interface CompactPermissionConfirmationProps {
487
+ /** Current state: pending, approved, or rejected */
488
+ state: ConfirmationState;
489
+ /** Message to display */
490
+ message?: string;
491
+ /** Called when user approves */
492
+ onApprove?: (permissionLevel: PermissionLevel) => void;
493
+ /** Called when user rejects */
494
+ onReject?: (permissionLevel?: PermissionLevel) => void;
495
+ /** Additional class name */
496
+ className?: string;
497
+ }
498
+ /**
499
+ * CompactPermissionConfirmation - Simpler version with "Don't ask again" checkbox
500
+ *
501
+ * @example
502
+ * ```tsx
503
+ * <CompactPermissionConfirmation
504
+ * state="pending"
505
+ * message="Take a screenshot?"
506
+ * onApprove={(level) => approveToolExecution(tool.id, level)}
507
+ * onReject={(level) => rejectToolExecution(tool.id, undefined, level)}
508
+ * />
509
+ * ```
510
+ */
511
+ declare function CompactPermissionConfirmation({ state, message, onApprove, onReject, className, }: CompactPermissionConfirmationProps): react_jsx_runtime.JSX.Element;
512
+
513
+ type FollowUpProps = {
514
+ /** Follow-up questions to display */
515
+ questions: string[];
516
+ /** Called when a follow-up is clicked */
517
+ onSelect: (question: string) => void;
518
+ /** Custom class for container */
519
+ className?: string;
520
+ /** Custom class for buttons */
521
+ buttonClassName?: string;
522
+ };
523
+ /**
524
+ * Parse follow-up questions from message content
525
+ * Format: [FOLLOWUP: question1 | question2 | question3]
526
+ */
527
+ declare function parseFollowUps(content: string): {
528
+ cleanContent: string;
529
+ followUps: string[];
530
+ };
531
+ /**
532
+ * Follow-up questions component
533
+ * Displays clickable chips for suggested follow-up actions
534
+ */
535
+ declare function FollowUpQuestions({ questions, onSelect, className, buttonClassName, }: FollowUpProps): react_jsx_runtime.JSX.Element | null;
536
+
537
+ /**
538
+ * SDK State for DevLogger
539
+ */
540
+ interface DevLoggerState {
541
+ chat: {
542
+ isLoading: boolean;
543
+ messageCount: number;
544
+ threadId: string;
545
+ error: string | null;
546
+ };
547
+ tools: {
548
+ isEnabled: boolean;
549
+ isCapturing: boolean;
550
+ pendingConsent: boolean;
551
+ };
552
+ agentLoop: {
553
+ toolExecutions: Array<{
554
+ id: string;
555
+ name: string;
556
+ status: string;
557
+ approvalStatus: string;
558
+ }>;
559
+ pendingApprovals: number;
560
+ iteration: number;
561
+ maxIterations: number;
562
+ };
563
+ registered: {
564
+ tools: Array<{
565
+ name: string;
566
+ location: string;
567
+ }>;
568
+ actions: Array<{
569
+ name: string;
570
+ }>;
571
+ contextCount: number;
572
+ };
573
+ permissions: {
574
+ stored: Array<{
575
+ toolName: string;
576
+ level: string;
577
+ }>;
578
+ loaded: boolean;
579
+ };
580
+ config: {
581
+ provider: string;
582
+ model: string;
583
+ runtimeUrl: string;
584
+ };
585
+ }
586
+ interface DevLoggerProps {
587
+ /** SDK state to display */
588
+ state: DevLoggerState;
589
+ /** Position of the floating button */
590
+ position?: "bottom-left" | "bottom-right" | "top-left" | "top-right";
591
+ /** Custom class name */
592
+ className?: string;
593
+ }
594
+ /**
595
+ * DevLogger - Floating debug panel for SDK development
596
+ *
597
+ * Shows a floating button that opens a modal with all SDK state
598
+ * for debugging purposes.
599
+ */
600
+ declare function DevLogger({ state, position, className, }: DevLoggerProps): react_jsx_runtime.JSX.Element;
601
+
602
+ type CapabilityType = "vision" | "tools" | "thinking" | "streaming" | "pdf" | "audio" | "video" | "json";
603
+ interface CapabilityBadgeProps {
604
+ /** Capability type to display */
605
+ type: CapabilityType;
606
+ /** Whether the capability is supported */
607
+ supported?: boolean;
608
+ /** Show label text next to icon */
609
+ showLabel?: boolean;
610
+ /** Size variant */
611
+ size?: "sm" | "md" | "lg";
612
+ /** Additional class name */
613
+ className?: string;
614
+ }
615
+ /**
616
+ * Badge showing a model capability with icon
617
+ *
618
+ * @example
619
+ * ```tsx
620
+ * <CapabilityBadge type="vision" supported />
621
+ * <CapabilityBadge type="audio" supported={false} />
622
+ * ```
623
+ */
624
+ declare function CapabilityBadge({ type, supported, showLabel, size, className, }: CapabilityBadgeProps): react_jsx_runtime.JSX.Element;
625
+ interface CapabilityListProps {
626
+ /** Capabilities object */
627
+ capabilities: {
628
+ supportsVision?: boolean;
629
+ supportsTools?: boolean;
630
+ supportsThinking?: boolean;
631
+ supportsStreaming?: boolean;
632
+ supportsPDF?: boolean;
633
+ supportsAudio?: boolean;
634
+ supportsVideo?: boolean;
635
+ supportsJsonMode?: boolean;
636
+ };
637
+ /** Show labels */
638
+ showLabels?: boolean;
639
+ /** Only show supported capabilities */
640
+ onlySupported?: boolean;
641
+ /** Size variant */
642
+ size?: "sm" | "md" | "lg";
643
+ /** Additional class name */
644
+ className?: string;
645
+ }
646
+ /**
647
+ * Display a list of capability badges
648
+ *
649
+ * @example
650
+ * ```tsx
651
+ * const { capabilities } = useCapabilities();
652
+ * <CapabilityList capabilities={capabilities} />
653
+ * ```
654
+ */
655
+ declare function CapabilityList({ capabilities, showLabels, onlySupported, size, className, }: CapabilityListProps): react_jsx_runtime.JSX.Element | null;
656
+
657
+ interface ModelOption {
658
+ /** Model ID */
659
+ id: string;
660
+ /** Display name */
661
+ name?: string;
662
+ /** Provider name */
663
+ provider?: string;
664
+ /** Model capabilities (optional, for showing badges) */
665
+ capabilities?: {
666
+ supportsVision?: boolean;
667
+ supportsTools?: boolean;
668
+ supportsThinking?: boolean;
669
+ supportsStreaming?: boolean;
670
+ supportsPDF?: boolean;
671
+ supportsAudio?: boolean;
672
+ supportsVideo?: boolean;
673
+ supportsJsonMode?: boolean;
674
+ };
675
+ }
676
+ interface ProviderGroup {
677
+ /** Provider name */
678
+ name: string;
679
+ /** Provider display label */
680
+ label?: string;
681
+ /** Models in this provider */
682
+ models: ModelOption[];
683
+ }
684
+ interface ModelSelectorProps {
685
+ /** Currently selected model ID */
686
+ value?: string;
687
+ /** Called when selection changes */
688
+ onChange?: (modelId: string, provider?: string) => void;
689
+ /** Models grouped by provider */
690
+ providers?: ProviderGroup[];
691
+ /** Flat list of models (alternative to providers) */
692
+ models?: ModelOption[];
693
+ /** Current capabilities (for showing in header) */
694
+ currentCapabilities?: ModelOption["capabilities"];
695
+ /** Placeholder text */
696
+ placeholder?: string;
697
+ /** Disabled state */
698
+ disabled?: boolean;
699
+ /** Size variant */
700
+ size?: "sm" | "md" | "lg";
701
+ /** Show capability badges */
702
+ showCapabilities?: boolean;
703
+ /** Additional class name */
704
+ className?: string;
705
+ }
706
+ /**
707
+ * Model selector dropdown with provider grouping
708
+ *
709
+ * @example
710
+ * ```tsx
711
+ * const { provider, model, supportedModels } = useCapabilities();
712
+ *
713
+ * <ModelSelector
714
+ * value={model}
715
+ * onChange={(modelId) => console.log('Selected:', modelId)}
716
+ * providers={[
717
+ * {
718
+ * name: 'openai',
719
+ * label: 'OpenAI',
720
+ * models: [
721
+ * { id: 'gpt-4o', name: 'GPT-4o' },
722
+ * { id: 'gpt-4o-mini', name: 'GPT-4o Mini' },
723
+ * ],
724
+ * },
725
+ * ]}
726
+ * />
727
+ * ```
728
+ */
729
+ declare function ModelSelector({ value, onChange, providers, models, currentCapabilities, placeholder, disabled, size, showCapabilities, className, }: ModelSelectorProps): react_jsx_runtime.JSX.Element;
730
+ interface SimpleModelSelectorProps {
731
+ /** Currently selected model ID */
732
+ value?: string;
733
+ /** Called when selection changes */
734
+ onChange?: (modelId: string) => void;
735
+ /** List of model IDs */
736
+ models: string[];
737
+ /** Disabled state */
738
+ disabled?: boolean;
739
+ /** Additional class name */
740
+ className?: string;
741
+ }
742
+ /**
743
+ * Simple native select for model selection
744
+ *
745
+ * @example
746
+ * ```tsx
747
+ * const { model, supportedModels } = useCapabilities();
748
+ *
749
+ * <SimpleModelSelector
750
+ * value={model}
751
+ * onChange={(id) => console.log('Selected:', id)}
752
+ * models={supportedModels}
753
+ * />
754
+ * ```
755
+ */
756
+ declare function SimpleModelSelector({ value, onChange, models, disabled, className, }: SimpleModelSelectorProps): react_jsx_runtime.JSX.Element;
757
+
758
+ interface CopilotUIConfig {
759
+ /**
760
+ * Debug mode - shows JSON args/results in collapsible sections
761
+ * @default false
762
+ */
763
+ debug?: boolean;
764
+ /**
765
+ * Default expanded state for debug content
766
+ * @default false
767
+ */
768
+ defaultDebugExpanded?: boolean;
769
+ }
770
+ interface CopilotUIContextValue extends CopilotUIConfig {
771
+ /** Computed: whether debug mode is active */
772
+ isDebug: boolean;
773
+ }
774
+ /**
775
+ * Hook to access CopilotUI configuration
776
+ *
777
+ * Returns defaults if no provider is present (allows standalone component usage)
778
+ */
779
+ declare function useCopilotUI(): CopilotUIContextValue;
780
+ interface CopilotUIProviderProps extends CopilotUIConfig {
781
+ children: React$1.ReactNode;
782
+ }
783
+ /**
784
+ * Provider for global UI configuration (debug mode, etc.)
785
+ *
786
+ * @example
787
+ * ```tsx
788
+ * <CopilotUIProvider debug={process.env.NODE_ENV === "development"}>
789
+ * <Chat messages={messages} />
790
+ * </CopilotUIProvider>
791
+ * ```
792
+ */
793
+ declare function CopilotUIProvider({ children, debug, defaultDebugExpanded, }: CopilotUIProviderProps): react_jsx_runtime.JSX.Element;
794
+
795
+ /**
796
+ * Tool execution status
797
+ */
798
+ type ToolExecutionStatus = "pending" | "executing" | "completed" | "error" | "failed" | "rejected";
799
+ /**
800
+ * Tool approval status (for human-in-the-loop)
801
+ */
802
+ type ToolApprovalStatus = "none" | "required" | "approved" | "rejected";
803
+ /**
804
+ * Tool execution data
805
+ */
806
+ interface ToolExecutionData {
807
+ id: string;
808
+ name: string;
809
+ args: Record<string, unknown>;
810
+ status: ToolExecutionStatus;
811
+ result?: {
812
+ success: boolean;
813
+ message?: string;
814
+ error?: string;
815
+ data?: unknown;
816
+ };
817
+ error?: string;
818
+ timestamp: number;
819
+ duration?: number;
820
+ /** Approval status for human-in-the-loop tools */
821
+ approvalStatus?: ToolApprovalStatus;
822
+ /** Message shown in approval UI */
823
+ approvalMessage?: string;
824
+ }
825
+
826
+ /**
827
+ * Message attachment (images, files, etc.)
828
+ *
829
+ * Attachments can be stored as:
830
+ * - Base64 data (free tier, embedded in message)
831
+ * - URL (premium cloud storage, lighter payload)
832
+ */
833
+ type MessageAttachment = {
834
+ /** Type of attachment */
835
+ type: "image" | "file" | "audio" | "video";
836
+ /** Base64 data (for embedded attachments) */
837
+ data?: string;
838
+ /** URL for cloud-stored attachments */
839
+ url?: string;
840
+ /** MIME type */
841
+ mimeType: string;
842
+ /** Optional filename */
843
+ filename?: string;
844
+ };
845
+ type ChatMessage = {
846
+ id: string;
847
+ role: "user" | "assistant" | "system" | "tool";
848
+ content: string;
849
+ /** Thinking/reasoning content (for models with extended thinking) */
850
+ thinking?: string;
851
+ /** Tool executions associated with this message */
852
+ toolExecutions?: ToolExecutionData[];
853
+ /** Attachments (images, files) */
854
+ attachments?: MessageAttachment[];
855
+ /** Tool call ID - for tool result messages (links to assistant's tool_calls) */
856
+ tool_call_id?: string;
857
+ /** Tool calls made by assistant */
858
+ tool_calls?: Array<{
859
+ id: string;
860
+ type: "function";
861
+ function: {
862
+ name: string;
863
+ arguments: string;
864
+ };
865
+ }>;
866
+ };
867
+
868
+ /**
869
+ * Props passed to custom tool renderer components
870
+ *
871
+ * @example
872
+ * ```tsx
873
+ * import type { ToolRendererProps } from '@yourgpt/copilot-sdk-ui';
874
+ *
875
+ * function WeatherCard({ execution }: ToolRendererProps) {
876
+ * if (execution.status !== 'completed') {
877
+ * return <div>Loading...</div>;
878
+ * }
879
+ * const { city, temperature } = execution.result;
880
+ * return <div>{city}: {temperature}°</div>;
881
+ * }
882
+ * ```
883
+ */
884
+ interface ToolRendererProps {
885
+ execution: {
886
+ /** Unique execution ID */
887
+ id: string;
888
+ /** Tool name (matches key in toolRenderers) */
889
+ name: string;
890
+ /** Arguments passed to the tool */
891
+ args: Record<string, unknown>;
892
+ /** Current execution status */
893
+ status: "pending" | "executing" | "completed" | "error" | "failed" | "rejected";
894
+ /** Tool result (available when status is 'completed') */
895
+ result?: unknown;
896
+ /** Error message (available when status is 'error' or 'failed') */
897
+ error?: string;
898
+ /** Approval status for tools requiring confirmation */
899
+ approvalStatus?: ToolApprovalStatus;
900
+ };
901
+ }
902
+ /**
903
+ * Map of tool names to their custom renderer components
904
+ *
905
+ * @example
906
+ * ```tsx
907
+ * const toolRenderers: ToolRenderers = {
908
+ * get_weather: WeatherCard,
909
+ * get_chart: ChartCard,
910
+ * };
911
+ * ```
912
+ */
913
+ type ToolRenderers = Record<string, React__default.ComponentType<ToolRendererProps>>;
914
+ type ChatProps = {
915
+ /** Messages to display */
916
+ messages?: ChatMessage[];
917
+ /** Called when user sends a message (with optional attachments) */
918
+ onSendMessage?: (message: string, attachments?: MessageAttachment[]) => void;
919
+ /** Called when user stops generation */
920
+ onStop?: () => void;
921
+ /** Whether AI is currently generating */
922
+ isLoading?: boolean;
923
+ /** Placeholder text for input */
924
+ placeholder?: string;
925
+ /** Custom welcome message when no messages */
926
+ welcomeMessage?: React__default.ReactNode;
927
+ /** Title shown in header (if showHeader is true) */
928
+ title?: string;
929
+ /** Show header bar with title and close button */
930
+ showHeader?: boolean;
931
+ /** Called when close button is clicked */
932
+ onClose?: () => void;
933
+ /** Show powered by footer (free tier) */
934
+ showPoweredBy?: boolean;
935
+ /** Show user avatar (default: false) */
936
+ showUserAvatar?: boolean;
937
+ /** User avatar config */
938
+ userAvatar?: {
939
+ src?: string;
940
+ fallback?: string;
941
+ };
942
+ /** Assistant avatar config */
943
+ assistantAvatar?: {
944
+ src?: string;
945
+ fallback?: string;
946
+ };
947
+ /** Loader variant for typing indicator */
948
+ loaderVariant?: "circular" | "classic" | "dots" | "pulse" | "typing";
949
+ /** Font size for messages: 'sm' (14px), 'base' (16px), 'lg' (18px) */
950
+ fontSize?: "sm" | "base" | "lg";
951
+ /** Maximum file size in bytes (default: 5MB) */
952
+ maxFileSize?: number;
953
+ /** Allowed file types (MIME types or wildcards like "image/*") */
954
+ allowedFileTypes?: string[];
955
+ /** Whether attachments are supported (shows/hides attach button) */
956
+ attachmentsEnabled?: boolean;
957
+ /** Tooltip text when attachments are disabled */
958
+ attachmentsDisabledTooltip?: string;
959
+ /**
960
+ * Custom attachment processor (e.g., for cloud storage upload)
961
+ * If provided, uses this instead of default base64 conversion.
962
+ * @param file - The file to process
963
+ * @returns Promise<MessageAttachment> - The processed attachment (URL-based or base64)
964
+ */
965
+ processAttachment?: (file: File) => Promise<MessageAttachment>;
966
+ /** Quick reply suggestions */
967
+ suggestions?: string[];
968
+ /** Called when a suggestion is clicked */
969
+ onSuggestionClick?: (suggestion: string) => void;
970
+ /**
971
+ * Show AI-generated follow-up questions below the last message
972
+ * AI should include them in format: [FOLLOWUP: Q1? | Q2? | Q3?]
973
+ * @default true
974
+ */
975
+ showFollowUps?: boolean;
976
+ /** Custom class for follow-up container */
977
+ followUpClassName?: string;
978
+ /** Custom class for follow-up buttons */
979
+ followUpButtonClassName?: string;
980
+ /** Whether waiting for server after tool completion (shows "Continuing..." loader) */
981
+ isProcessing?: boolean;
982
+ /**
983
+ * Custom renderers for tool results (Generative UI)
984
+ *
985
+ * Map tool names to React components that render their results.
986
+ * When a tool execution matches a key, the custom component is rendered
987
+ * instead of the default ToolSteps display.
988
+ *
989
+ * @example
990
+ * ```tsx
991
+ * <Chat
992
+ * toolRenderers={{
993
+ * get_weather: WeatherCard,
994
+ * get_chart: ChartCard,
995
+ * }}
996
+ * />
997
+ * ```
998
+ */
999
+ toolRenderers?: ToolRenderers;
1000
+ /** Called when user approves a tool execution */
1001
+ onApproveToolExecution?: (executionId: string, permissionLevel?: PermissionLevel) => void;
1002
+ /** Called when user rejects a tool execution */
1003
+ onRejectToolExecution?: (executionId: string, reason?: string, permissionLevel?: PermissionLevel) => void;
1004
+ /** Custom message renderer */
1005
+ renderMessage?: (message: ChatMessage, index: number) => React__default.ReactNode;
1006
+ /** Custom input renderer (replaces entire input area) */
1007
+ renderInput?: () => React__default.ReactNode;
1008
+ /** Custom header renderer (replaces entire header) */
1009
+ renderHeader?: () => React__default.ReactNode;
1010
+ /** Class name for root container (use for sizing) */
1011
+ className?: string;
1012
+ /** Granular class names for sub-components */
1013
+ classNames?: {
1014
+ root?: string;
1015
+ header?: string;
1016
+ container?: string;
1017
+ messageList?: string;
1018
+ userMessage?: string;
1019
+ assistantMessage?: string;
1020
+ input?: string;
1021
+ suggestions?: string;
1022
+ footer?: string;
1023
+ };
1024
+ };
1025
+
1026
+ declare function Chat({ messages, onSendMessage, onStop, isLoading, placeholder, welcomeMessage, title, showHeader, onClose, showPoweredBy, showUserAvatar, userAvatar, assistantAvatar, loaderVariant, fontSize, maxFileSize, allowedFileTypes, attachmentsEnabled, attachmentsDisabledTooltip, processAttachment: processAttachmentProp, suggestions, onSuggestionClick, isProcessing, toolRenderers, onApproveToolExecution, onRejectToolExecution, showFollowUps, followUpClassName, followUpButtonClassName, renderMessage, renderInput, renderHeader, className, classNames, }: ChatProps): react_jsx_runtime.JSX.Element;
1027
+
1028
+ interface ToolExecutionMessageProps {
1029
+ executions: ToolExecutionData[];
1030
+ assistantAvatar?: {
1031
+ src?: string;
1032
+ fallback?: string;
1033
+ };
1034
+ onApprove?: (executionId: string, permissionLevel?: PermissionLevel) => void;
1035
+ onReject?: (executionId: string, reason?: string, permissionLevel?: PermissionLevel) => void;
1036
+ className?: string;
1037
+ }
1038
+ /**
1039
+ * Standalone tool execution message shown during agentic loop
1040
+ * Displays tool calls with status, progress, and approval UI
1041
+ */
1042
+ declare function ToolExecutionMessage({ executions, assistantAvatar, onApprove, onReject, className, }: ToolExecutionMessageProps): react_jsx_runtime.JSX.Element | null;
1043
+
1044
+ /**
1045
+ * Props for CopilotChat - auto-connects to CopilotProvider context
1046
+ * No need to pass messages, sendMessage, etc. - handled internally
1047
+ */
1048
+ type CopilotChatProps = Omit<ChatProps, "messages" | "onSendMessage" | "onStop" | "isLoading" | "isProcessing" | "onApproveToolExecution" | "onRejectToolExecution" | "processAttachment">;
1049
+ /**
1050
+ * CopilotChat - Auto-connected chat component
1051
+ *
1052
+ * Automatically connects to CopilotProvider context.
1053
+ * No need to use hooks or pass messages - everything is handled internally.
1054
+ *
1055
+ * @example
1056
+ * ```tsx
1057
+ * import { CopilotProvider } from '../../react';
1058
+ * import { CopilotChat } from '@yourgpt/copilot-sdk-ui';
1059
+ *
1060
+ * function App() {
1061
+ * return (
1062
+ * <CopilotProvider runtimeUrl="/api/chat">
1063
+ * <CopilotChat
1064
+ * title="AI Assistant"
1065
+ * placeholder="Ask anything..."
1066
+ * />
1067
+ * </CopilotProvider>
1068
+ * );
1069
+ * }
1070
+ * ```
1071
+ *
1072
+ * @example Generative UI with custom tool renderers
1073
+ * ```tsx
1074
+ * import { CopilotChat, type ToolRendererProps } from '@yourgpt/copilot-sdk-ui';
1075
+ *
1076
+ * function WeatherCard({ execution }: ToolRendererProps) {
1077
+ * if (execution.status !== 'completed') return <div>Loading...</div>;
1078
+ * return <div>{execution.result.city}: {execution.result.temperature}°</div>;
1079
+ * }
1080
+ *
1081
+ * <CopilotChat
1082
+ * toolRenderers={{
1083
+ * get_weather: WeatherCard,
1084
+ * }}
1085
+ * />
1086
+ * ```
1087
+ */
1088
+ declare function CopilotChat(props: CopilotChatProps): react_jsx_runtime.JSX.Element;
1089
+ declare const ConnectedChat: typeof CopilotChat;
1090
+ type ConnectedChatProps = CopilotChatProps;
1091
+
1092
+ type PoweredByProps = {
1093
+ className?: string;
1094
+ showLogo?: boolean;
1095
+ };
1096
+ declare function PoweredBy({ className, showLogo }: PoweredByProps): react_jsx_runtime.JSX.Element;
1097
+
1098
+ declare function SendIcon({ className }: {
1099
+ className?: string;
1100
+ }): react_jsx_runtime.JSX.Element;
1101
+ declare function StopIcon({ className }: {
1102
+ className?: string;
1103
+ }): react_jsx_runtime.JSX.Element;
1104
+ declare function CloseIcon({ className }: {
1105
+ className?: string;
1106
+ }): react_jsx_runtime.JSX.Element;
1107
+ declare function ChevronDownIcon({ className }: {
1108
+ className?: string;
1109
+ }): react_jsx_runtime.JSX.Element;
1110
+ declare function ChevronUpIcon({ className }: {
1111
+ className?: string;
1112
+ }): react_jsx_runtime.JSX.Element;
1113
+ declare function CopyIcon({ className }: {
1114
+ className?: string;
1115
+ }): react_jsx_runtime.JSX.Element;
1116
+ declare function CheckIcon({ className }: {
1117
+ className?: string;
1118
+ }): react_jsx_runtime.JSX.Element;
1119
+ declare function ThumbsUpIcon({ className }: {
1120
+ className?: string;
1121
+ }): react_jsx_runtime.JSX.Element;
1122
+ declare function ThumbsDownIcon({ className }: {
1123
+ className?: string;
1124
+ }): react_jsx_runtime.JSX.Element;
1125
+ declare function RefreshIcon({ className }: {
1126
+ className?: string;
1127
+ }): react_jsx_runtime.JSX.Element;
1128
+ declare function UserIcon({ className }: {
1129
+ className?: string;
1130
+ }): react_jsx_runtime.JSX.Element;
1131
+ declare function BotIcon({ className }: {
1132
+ className?: string;
1133
+ }): react_jsx_runtime.JSX.Element;
1134
+ declare function XIcon({ className }: {
1135
+ className?: string;
1136
+ }): react_jsx_runtime.JSX.Element;
1137
+ declare function AlertTriangleIcon({ className }: {
1138
+ className?: string;
1139
+ }): react_jsx_runtime.JSX.Element;
1140
+
1141
+ declare function cn(...inputs: ClassValue[]): string;
1142
+
1143
+ export { AlertTriangleIcon, BotIcon, Button, CapabilityBadge, type CapabilityBadgeProps, CapabilityList, type CapabilityListProps, type CapabilityType, Chat, ChatContainerContent, ChatContainerRoot, ChatContainerScrollAnchor, type ChatMessage, type ChatProps, CheckIcon, ChevronDownIcon, ChevronUpIcon, CloseIcon, CodeBlock, CompactPermissionConfirmation, type CompactPermissionConfirmationProps, Confirmation, ConfirmationActions, type ConfirmationActionsProps, ConfirmationApproved, type ConfirmationApprovedProps, ConfirmationMessage, type ConfirmationMessageProps, ConfirmationPending, type ConfirmationPendingProps, type ConfirmationProps, ConfirmationRejected, type ConfirmationRejectedProps, type ConfirmationState$1 as ConfirmationState, ConnectedChat, type ConnectedChatProps, CopilotChat, type CopilotChatProps, type CopilotUIConfig, type CopilotUIContextValue, CopilotUIProvider, type CopilotUIProviderProps, CopyIcon, DEFAULT_PERMISSION_OPTIONS, DevLogger, type DevLoggerProps, type DevLoggerState, FeedbackBar, type FollowUpProps, FollowUpQuestions, InlineToolSteps, type InlineToolStepsProps, Loader, Markdown, MessageAvatar, MessageContent, Message as MessagePrimitive, type ModelOption, ModelSelector, type ModelSelectorProps, PermissionConfirmation, type PermissionConfirmationProps, type PermissionLevel, type PermissionOption, PoweredBy, type PoweredByProps, PromptInput, PromptInputAction, PromptInputActions, PromptInputTextarea, type ProviderGroup, Reasoning, ReasoningContent, type ReasoningContentProps, type ReasoningProps, ReasoningTrigger, type ReasoningTriggerProps, RefreshIcon, ScrollButton, SendIcon, SimpleConfirmation, type SimpleConfirmationProps, SimpleModelSelector, type SimpleModelSelectorProps, SimpleReasoning, type SimpleReasoningProps, Source, SourceContent, SourceTrigger, StopIcon, ThumbsDownIcon, ThumbsUpIcon, ToolExecutionMessage, type ToolRendererProps, type ToolRenderers, ToolStep, type ToolStepData, type ToolStepProps, type ToolStepStatus, ToolSteps, type ToolStepsProps, Tooltip, TooltipContent, type TooltipContentProps, type TooltipProps, TooltipProvider, type TooltipProviderProps, TooltipTrigger, type TooltipTriggerProps, UserIcon, XIcon, cn, parseFollowUps, useChatContainer, useCopilotUI };