@qilin-agent/client-ui-chat 0.0.0-stage → 3.1.4
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 +21 -0
- package/README.i18n.yaml +55 -0
- package/README.md +132 -2
- package/README.zh.md +134 -0
- package/lib/client.js +13900 -0
- package/lib/index.js +54 -0
- package/lib/types/chat-settings.d.ts +47 -0
- package/lib/types/client/apply.d.ts +15 -0
- package/lib/types/client/chat/ApprovalCommand.d.ts +20 -0
- package/lib/types/client/chat/AssistantMarkdown.d.ts +52 -0
- package/lib/types/client/chat/AssistantNodeView.d.ts +7 -0
- package/lib/types/client/chat/ChatFlow.d.ts +4 -0
- package/lib/types/client/chat/ChatGroupSeat.d.ts +15 -0
- package/lib/types/client/chat/ChatNodeSeat.d.ts +25 -0
- package/lib/types/client/chat/ChatView.d.ts +7 -0
- package/lib/types/client/chat/CommandNodeView.d.ts +9 -0
- package/lib/types/client/chat/CompactionCommandCard.d.ts +8 -0
- package/lib/types/client/chat/CompactionItem.d.ts +19 -0
- package/lib/types/client/chat/ContextBody.d.ts +131 -0
- package/lib/types/client/chat/ContextInjectionRow.d.ts +26 -0
- package/lib/types/client/chat/GenericCommandCard.d.ts +9 -0
- package/lib/types/client/chat/MessageIconActions.d.ts +37 -0
- package/lib/types/client/chat/MessageItem.d.ts +42 -0
- package/lib/types/client/chat/ReasoningContent.d.ts +16 -0
- package/lib/types/client/chat/ReasoningRow.d.ts +23 -0
- package/lib/types/client/chat/RunningSeal.d.ts +6 -0
- package/lib/types/client/chat/RunningStatus.d.ts +13 -0
- package/lib/types/client/chat/StatsPills.d.ts +71 -0
- package/lib/types/client/chat/SystemPromptRow.d.ts +22 -0
- package/lib/types/client/chat/TurnNavigator.d.ts +28 -0
- package/lib/types/client/chat/TurnProcessNodeView.d.ts +4 -0
- package/lib/types/client/chat/TurnTailNodeView.d.ts +7 -0
- package/lib/types/client/chat/TurnTriggerNodeView.d.ts +4 -0
- package/lib/types/client/chat/TurnUsagePanel.d.ts +15 -0
- package/lib/types/client/chat/flow-motion.d.ts +59 -0
- package/lib/types/client/chat/message-chrome.d.ts +50 -0
- package/lib/types/client/chat/register-node-renderers.d.ts +14 -0
- package/lib/types/client/chat/render-entry.d.ts +9 -0
- package/lib/types/client/chat/searchable-hidden.d.ts +17 -0
- package/lib/types/client/chat/stat-dialog.d.ts +20 -0
- package/lib/types/client/chat/step-process.d.ts +11 -0
- package/lib/types/client/chat/token-format.d.ts +25 -0
- package/lib/types/client/chat/turn-assistant.d.ts +8 -0
- package/lib/types/client/chat/turn-rail-items.d.ts +37 -0
- package/lib/types/client/chat/turn-trigger.d.ts +15 -0
- package/lib/types/client/chat/use-calendar-day.d.ts +6 -0
- package/lib/types/client/chat/use-chat-navigation.d.ts +69 -0
- package/lib/types/client/chat/use-chat-reading.d.ts +110 -0
- package/lib/types/client/chat/use-chat-scroll.d.ts +43 -0
- package/lib/types/client/chat/use-chat-viewport.d.ts +197 -0
- package/lib/types/client/chat/use-disclosure.d.ts +15 -0
- package/lib/types/client/chat/use-process-scroll.d.ts +23 -0
- package/lib/types/client/chat/use-scroll-follow.d.ts +106 -0
- package/lib/types/client/chat/use-turn-data.d.ts +9 -0
- package/lib/types/client/contract/assistant-content.d.ts +9 -0
- package/lib/types/client/contract/chat-nodes.d.ts +108 -0
- package/lib/types/client/contract/chat-visibility.d.ts +10 -0
- package/lib/types/client/contract/process-groups.d.ts +25 -0
- package/lib/types/client/contract/slots.d.ts +340 -0
- package/lib/types/client/contract/snapshot.d.ts +107 -0
- package/lib/types/client/contract/store.d.ts +15 -0
- package/lib/types/client/contract/turn-metrics.d.ts +19 -0
- package/lib/types/client/contract/turn-process.d.ts +40 -0
- package/lib/types/client/conversation-nodes/assistant.d.ts +36 -0
- package/lib/types/client/conversation-nodes/chat-snapshot-builder.d.ts +103 -0
- package/lib/types/client/conversation-nodes/command.d.ts +53 -0
- package/lib/types/client/conversation-nodes/common.d.ts +41 -0
- package/lib/types/client/conversation-nodes/compaction.d.ts +21 -0
- package/lib/types/client/conversation-nodes/event-projection.d.ts +63 -0
- package/lib/types/client/conversation-nodes/fallback.d.ts +16 -0
- package/lib/types/client/conversation-nodes/inbox.d.ts +40 -0
- package/lib/types/client/conversation-nodes/message.d.ts +42 -0
- package/lib/types/client/conversation-nodes/process-activity.d.ts +9 -0
- package/lib/types/client/conversation-nodes/process-groups.d.ts +27 -0
- package/lib/types/client/conversation-nodes/register.d.ts +7 -0
- package/lib/types/client/conversation-nodes/request-prompt.d.ts +44 -0
- package/lib/types/client/conversation-nodes/retry.d.ts +22 -0
- package/lib/types/client/conversation-nodes/tool.d.ts +23 -0
- package/lib/types/client/conversation-nodes/turn-error.d.ts +30 -0
- package/lib/types/client/conversation-nodes/turn-max-tokens.d.ts +22 -0
- package/lib/types/client/conversation-nodes/turn-navigation.d.ts +17 -0
- package/lib/types/client/conversation-nodes/turn-process-presentation.d.ts +30 -0
- package/lib/types/client/conversation-nodes/turn-process.d.ts +34 -0
- package/lib/types/client/conversation-nodes/turn-tail.d.ts +28 -0
- package/lib/types/client/index.d.ts +38 -0
- package/lib/types/client/locale.d.ts +386 -0
- package/lib/types/client/markdown-labels.d.ts +10 -0
- package/lib/types/client/model/conversation-context.d.ts +21 -0
- package/lib/types/client/model/tool-call-tree.d.ts +45 -0
- package/lib/types/client/performance-usage.d.ts +20 -0
- package/lib/types/client/presentation-policy.d.ts +37 -0
- package/lib/types/client/settings/LinkOpeningRow.d.ts +24 -0
- package/lib/types/client/settings/PerformanceUsageRow.d.ts +22 -0
- package/lib/types/client/settings/PreferenceRow.d.ts +18 -0
- package/lib/types/client/settings/TranscriptViewRow.d.ts +27 -0
- package/lib/types/client/stores.d.ts +30 -0
- package/lib/types/client/transcript-view.d.ts +35 -0
- package/lib/types/index.d.ts +6 -0
- package/package.json +106 -3
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import type { UseProjection } from '@qilin-agent/api-session-controller/client';
|
|
2
|
+
import type { InjectFace, SnapshotSelectorHook } from '@qilin-agent/client-ui-slots';
|
|
3
|
+
import type { TokenUsageProjection } from '@qilin-agent/token-meter/client';
|
|
4
|
+
import type { ChatViewSlotProps, PerformanceUsageInjected } from '../contract/slots.ts';
|
|
5
|
+
import type { ChatSnapshot } from '../contract/snapshot.ts';
|
|
6
|
+
interface WindowStats {
|
|
7
|
+
turns: number;
|
|
8
|
+
steps: number;
|
|
9
|
+
/** Summed request wall time (step/start → assistant/message); 0 when no node carries timing. */
|
|
10
|
+
llmMs: number;
|
|
11
|
+
/** Summed tool wall time (tool/call → tool/result); 0 when no pair is in-window. */
|
|
12
|
+
toolMs: number;
|
|
13
|
+
/** Summed first-token latency over `ttftSteps`; 0 when no step records it. */
|
|
14
|
+
ttftMs: number;
|
|
15
|
+
/** Steps carrying a recorded TTFT. */
|
|
16
|
+
ttftSteps: number;
|
|
17
|
+
/** Summed decode wall time over steps that also report output tokens. */
|
|
18
|
+
decodeMs: number;
|
|
19
|
+
/** Summed output tokens over the same decode-timed steps. */
|
|
20
|
+
decodeTokens: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Fold assistant and tool-result nodes into window-scoped display totals —
|
|
24
|
+
* the FALLBACK for assemblies without the `sessionStats` projection.
|
|
25
|
+
*
|
|
26
|
+
* Every displayed figure rides that durable whole-log projection (and token
|
|
27
|
+
* accounting rides `tokenUsage`) because the window is paged and compaction
|
|
28
|
+
* rewrites it; this fold answers "what is on screen" only when no projection
|
|
29
|
+
* value is served. Its field names deliberately mirror the projection's so
|
|
30
|
+
* the two swap wholesale.
|
|
31
|
+
* @param nodes - snapshot nodes.
|
|
32
|
+
* @returns fallback counts and summed wall times.
|
|
33
|
+
*/
|
|
34
|
+
export declare function deriveStats(nodes: ChatSnapshot['legacy']['nodes']): WindowStats;
|
|
35
|
+
/**
|
|
36
|
+
* Compact duration: 45.2s under a minute, 2m42s from there on.
|
|
37
|
+
* @param ms - duration in milliseconds.
|
|
38
|
+
* @returns display string.
|
|
39
|
+
*/
|
|
40
|
+
export declare function formatDuration(ms: number, t: ChatViewSlotProps['t']): string;
|
|
41
|
+
/**
|
|
42
|
+
* Display-ready cache-hit share of prompt-side input over the whole durable log.
|
|
43
|
+
* @param usage - the session's token-usage projection value.
|
|
44
|
+
* @returns integer text when integer rounding stays below 100, otherwise the
|
|
45
|
+
* minimum decimal precision that still rounds below 100; a full hit returns
|
|
46
|
+
* 100, and no billed input returns null.
|
|
47
|
+
*/
|
|
48
|
+
export declare function cacheHitPercent(usage: TokenUsageProjection): string | null;
|
|
49
|
+
/**
|
|
50
|
+
* Sum the three disjoint prompt-side billing buckets.
|
|
51
|
+
* @param usage - the session's token-usage projection value.
|
|
52
|
+
* @returns billed input tokens.
|
|
53
|
+
*/
|
|
54
|
+
export declare function billedInputTokens(usage: TokenUsageProjection): number;
|
|
55
|
+
type Translate = ChatViewSlotProps['t'];
|
|
56
|
+
/** Props shared by every composer stats pill: the conversation-snapshot selector plus the projection read seat. */
|
|
57
|
+
export interface StatPillProps extends InjectFace<PerformanceUsageInjected> {
|
|
58
|
+
useChat: SnapshotSelectorHook<ChatSnapshot>;
|
|
59
|
+
useProjection: UseProjection;
|
|
60
|
+
/** The owning dock's locale seat. */
|
|
61
|
+
t: Translate;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Turn and step counts with whole-session speed, opening the time and speed
|
|
65
|
+
* dialog; Compact keeps only the speed reading.
|
|
66
|
+
*/
|
|
67
|
+
export declare const ActivityPill: import("react").MemoExoticComponent<({ useChat, useProjection, usePerformanceUsage, t }: StatPillProps) => import("react").JSX.Element | null>;
|
|
68
|
+
/** Whole-log token total and cache hit; Compact keeps only the cache hit. */
|
|
69
|
+
export declare const UsagePill: import("react").MemoExoticComponent<({ useProjection, usePerformanceUsage, t }: StatPillProps) => import("react").JSX.Element | null>;
|
|
70
|
+
export {};
|
|
71
|
+
//# sourceMappingURL=StatsPills.d.ts.map
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { ChatNodeViewProps, ChatViewSlotProps } from '../contract/slots.ts';
|
|
2
|
+
/** Props for one complete system prompt disclosure. */
|
|
3
|
+
export interface SystemPromptRowProps {
|
|
4
|
+
/** Complete model-visible prompt text. */
|
|
5
|
+
text: string;
|
|
6
|
+
/** True when the prompt replaced an earlier one from this position in the history. */
|
|
7
|
+
update?: boolean;
|
|
8
|
+
/** The owning view's locale seat. */
|
|
9
|
+
t: ChatViewSlotProps['t'];
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Render one complete system prompt as a collapsed disclosure whose expanded
|
|
13
|
+
* body is the same opaque context chrome: 141px code-block scrollport and
|
|
14
|
+
* model-facing text with its real line breaks. An in-history update uses the
|
|
15
|
+
* same row under its own title.
|
|
16
|
+
* @param props - Complete prompt text, whether it is an update, and the locale seat.
|
|
17
|
+
* @returns The system-prompt disclosure row.
|
|
18
|
+
*/
|
|
19
|
+
export declare function SystemPromptRow({ text, update, t }: SystemPromptRowProps): import("react").JSX.Element;
|
|
20
|
+
/** System-prompt keyed Chat renderer. */
|
|
21
|
+
export declare const SystemPromptNodeView: import("react").MemoExoticComponent<({ node, t, }: Pick<ChatNodeViewProps<"system-prompt">, "node" | "t">) => import("react").JSX.Element>;
|
|
22
|
+
//# sourceMappingURL=SystemPromptRow.d.ts.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ChatViewSlotProps } from '../contract/slots.ts';
|
|
2
|
+
import type { TurnRailItem } from './turn-rail-items.ts';
|
|
3
|
+
interface TurnNavigatorProps {
|
|
4
|
+
readonly items: readonly TurnRailItem[];
|
|
5
|
+
readonly activeTurn: number | null;
|
|
6
|
+
/** Turn whose jump is still paging history in; its mark pulses. */
|
|
7
|
+
readonly busyTurn: number | null;
|
|
8
|
+
readonly onNavigate: (item: TurnRailItem) => void;
|
|
9
|
+
readonly t: ChatViewSlotProps['t'];
|
|
10
|
+
}
|
|
11
|
+
/** Imperative controls for known turns; unknown turn numbers are ignored. */
|
|
12
|
+
export interface TurnNavigatorHandle {
|
|
13
|
+
/** @param turn - turn to activate through the navigation callback. */
|
|
14
|
+
activateTurn(turn: number): void;
|
|
15
|
+
/** @param turn - turn to center in the rail without navigating the transcript. */
|
|
16
|
+
scrollToTurn(turn: number): void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Fixed-pitch rail of every known Turn — loaded marks scroll, unloaded marks
|
|
20
|
+
* page history in first — with hover and focus previews. Overflow scrolls
|
|
21
|
+
* inside the frame, gradient fades marking each scrollable end, and the
|
|
22
|
+
* active mark centers only outside the fade-free band while the pointer is
|
|
23
|
+
* elsewhere. Previews follow pointer movement or focus, not scrolling under
|
|
24
|
+
* a stationary pointer.
|
|
25
|
+
*/
|
|
26
|
+
export declare const TurnNavigator: import("react").MemoExoticComponent<import("react").ForwardRefExoticComponent<TurnNavigatorProps & import("react").RefAttributes<TurnNavigatorHandle>>>;
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=TurnNavigator.d.ts.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ChatNodeViewProps } from '../contract/slots.ts';
|
|
2
|
+
/** Settled Turn duration and process disclosure above its content. */
|
|
3
|
+
export declare const TurnProcessNodeView: import("react").MemoExoticComponent<({ node, turnProcess, t, }: ChatNodeViewProps<"turn-process">) => import("react").JSX.Element | null>;
|
|
4
|
+
//# sourceMappingURL=TurnProcessNodeView.d.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { InjectFace, PropsRenderSlots } from '@qilin-agent/client-ui-slots';
|
|
2
|
+
import type { ChatNodeViewProps, PerformanceUsageInjected } from '../contract/slots.ts';
|
|
3
|
+
type TurnTailNodeViewProps = ChatNodeViewProps<'turn-tail'> & PropsRenderSlots<'conversation.chat.turnTail' | 'conversation.chat.assistant-actions'> & InjectFace<PerformanceUsageInjected>;
|
|
4
|
+
/** Turn-local actions and feature tail over the Location index, independent of Assistant placement. */
|
|
5
|
+
export declare const TurnTailNodeView: import("react").MemoExoticComponent<({ node, openFile, forkAt, renderSlot, t, useChat, usePerformanceUsage, }: TurnTailNodeViewProps) => import("react").JSX.Element | null>;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=TurnTailNodeView.d.ts.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ChatNodeViewProps } from '../contract/slots.ts';
|
|
2
|
+
/** Render recorded trigger attribution above the whole-Turn disclosure. */
|
|
3
|
+
export declare function TurnTriggerNodeView({ node, t }: Pick<ChatNodeViewProps<'turn-trigger'>, 'node' | 't'>): import("react").JSX.Element;
|
|
4
|
+
//# sourceMappingURL=TurnTriggerNodeView.d.ts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Completed-Turn token usage action and its accounting details dialog. */
|
|
2
|
+
import type { TurnTokenUsage } from '../contract/chat-nodes.ts';
|
|
3
|
+
import type { ChatViewSlotProps } from '../contract/slots.ts';
|
|
4
|
+
export interface TurnUsagePanelProps {
|
|
5
|
+
usage: TurnTokenUsage;
|
|
6
|
+
/** The owning view's locale seat, passed down as a plain prop. */
|
|
7
|
+
t: ChatViewSlotProps['t'];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Turn-usage IconActions pill with a click-open Turn-usage details dialog.
|
|
11
|
+
* @param props - Turn usage buckets and locale seat.
|
|
12
|
+
* @returns The trigger and, while open, its portaled dialog anchored above the trigger.
|
|
13
|
+
*/
|
|
14
|
+
export declare function TurnUsagePanel({ usage, t }: TurnUsagePanelProps): import("react").JSX.Element;
|
|
15
|
+
//# sourceMappingURL=TurnUsagePanel.d.ts.map
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fade-then-close transitions owned by one Chat viewport. Rows fade before their boxes close;
|
|
3
|
+
* the owner reserves removed height and holds scrolling until that viewport's folds finish.
|
|
4
|
+
* Motion is opt-in under `[data-chat-motion]`, respects reduced motion, and clears temporary styles.
|
|
5
|
+
*/
|
|
6
|
+
import { type RefObject } from 'react';
|
|
7
|
+
/** Row-local operations supplied by the containing viewport. */
|
|
8
|
+
export interface FlowMotionRows {
|
|
9
|
+
/** @param element - visible row. @param done - commits hidden state before idle callbacks run. */
|
|
10
|
+
collapse(element: HTMLElement, done: () => void): void;
|
|
11
|
+
/** @param element - newly visible row to grow to its natural size. */
|
|
12
|
+
reveal(element: HTMLElement): void;
|
|
13
|
+
/** @param element - row whose active transition should be cancelled without hiding it. */
|
|
14
|
+
cancelMotion(element: HTMLElement): void;
|
|
15
|
+
}
|
|
16
|
+
/** Animation lifetime and fold coordination for one viewport. */
|
|
17
|
+
export interface FlowMotion extends FlowMotionRows {
|
|
18
|
+
/** @returns whether a row owned by this viewport is closing. */
|
|
19
|
+
foldActive(): boolean;
|
|
20
|
+
/** @param listener - callback after the last fold. @returns cancellation for a pending callback. */
|
|
21
|
+
onFoldIdle(listener: () => void): () => void;
|
|
22
|
+
/** Cancel owned animations and pending work when the viewport detaches. */
|
|
23
|
+
clear(): void;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Decide whether a row may animate: inside a live scope and not under reduced motion.
|
|
27
|
+
* @param element - row about to be hidden.
|
|
28
|
+
* @returns whether the fade-then-close transition applies.
|
|
29
|
+
*/
|
|
30
|
+
export declare function motionEnabled(element: HTMLElement): boolean;
|
|
31
|
+
/**
|
|
32
|
+
* Whether a row is already hidden or on its way there.
|
|
33
|
+
* @param element - row under Turn-level visibility control.
|
|
34
|
+
* @returns hidden attribute present or a collapse transition outstanding.
|
|
35
|
+
*/
|
|
36
|
+
export declare function hiddenOrCollapsing(element: HTMLElement): boolean;
|
|
37
|
+
/**
|
|
38
|
+
* Create animation coordination without cross-viewport broadcasts.
|
|
39
|
+
* @param reserve - reserve the deduplicated removed height in this viewport.
|
|
40
|
+
* @param foldingChanged - disable or restore this viewport's native scroll anchoring.
|
|
41
|
+
* @returns stable callbacks and cleanup for this viewport's animations.
|
|
42
|
+
*/
|
|
43
|
+
export declare function createFlowMotion(reserve: (px: number) => void, foldingChanged: (active: boolean) => void): FlowMotion;
|
|
44
|
+
/**
|
|
45
|
+
* Apply searchable hiding with the containing Chat viewport's optional fold animation.
|
|
46
|
+
* @param hidden - desired visibility.
|
|
47
|
+
* @param reveal - browser-find and focus-protection callback.
|
|
48
|
+
* @param motion - owning viewport's row callbacks; absent in standalone rendering.
|
|
49
|
+
* @returns the stable subtree ref.
|
|
50
|
+
*/
|
|
51
|
+
export declare function useFlowHidden(hidden: boolean, reveal: () => void, motion: FlowMotionRows | undefined): RefObject<HTMLDivElement>;
|
|
52
|
+
/**
|
|
53
|
+
* Toggle a plain hidden attribute on the fold clock, growing newly revealed headers.
|
|
54
|
+
* @param ref - element whose visibility follows hidden.
|
|
55
|
+
* @param hidden - desired hidden state.
|
|
56
|
+
* @param motion - containing viewport's row callbacks.
|
|
57
|
+
*/
|
|
58
|
+
export declare function useMotionHidden(ref: RefObject<HTMLElement | null>, hidden: boolean, motion: FlowMotionRows): void;
|
|
59
|
+
//# sourceMappingURL=flow-motion.d.ts.map
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { Translate } from '@qilin-agent/client-ui-slots';
|
|
2
|
+
/** The date-template share of the conversation dictionary the clock consumes. */
|
|
3
|
+
export type ClockTranslate = Translate<'clock.md' | 'clock.ymd'>;
|
|
4
|
+
/** The elapsed-duration share of the conversation dictionary. */
|
|
5
|
+
export type RunDurationTranslate = Translate<'duration.secondUnit' | 'duration.minuteUnit' | 'duration.hourUnit'>;
|
|
6
|
+
/** Refresh interval for whole-second live run clocks. */
|
|
7
|
+
export declare const LIVE_RUN_CLOCK_INTERVAL_MS = 1000;
|
|
8
|
+
/**
|
|
9
|
+
* Local calendar-day epoch (ms at local midnight) for an instant.
|
|
10
|
+
* @param ms - Unix epoch ms.
|
|
11
|
+
* @returns Midnight of that local calendar day.
|
|
12
|
+
*/
|
|
13
|
+
export declare function startOfLocalDay(ms: number): number;
|
|
14
|
+
/**
|
|
15
|
+
* Delay until the next local midnight after `ms` (at least 1ms).
|
|
16
|
+
* @param ms - Unix epoch ms.
|
|
17
|
+
* @returns Milliseconds until the following local midnight.
|
|
18
|
+
*/
|
|
19
|
+
export declare function msUntilNextLocalMidnight(ms: number): number;
|
|
20
|
+
/** One numeric value or localized unit in an elapsed-time label. */
|
|
21
|
+
export interface RunDurationPart {
|
|
22
|
+
readonly text: string;
|
|
23
|
+
readonly numeric: boolean;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Build elapsed-time fragments for both live and completed Turn labels.
|
|
27
|
+
* @param ms - elapsed milliseconds; negatives clamp to zero and fractions floor.
|
|
28
|
+
* @param t - translate seat supplying units and their trailing spacing.
|
|
29
|
+
* @returns numbers and localized units in display order, without leading zeros;
|
|
30
|
+
* minutes start at 60 seconds and hours at 60 minutes.
|
|
31
|
+
*/
|
|
32
|
+
export declare function formatRunDuration(ms: number, t: RunDurationTranslate): RunDurationPart[];
|
|
33
|
+
/**
|
|
34
|
+
* Decode-throughput figure: whole tokens from ten up, one decimal below.
|
|
35
|
+
* @param tps - Tokens per second.
|
|
36
|
+
* @returns Display number without unit.
|
|
37
|
+
*/
|
|
38
|
+
export declare function formatTokensPerSecond(tps: number): string;
|
|
39
|
+
/**
|
|
40
|
+
* Compact local timestamp for message IconActions. Same calendar day →
|
|
41
|
+
* `HH:mm`; earlier this year → the `clock.md` date template + clock; other
|
|
42
|
+
* years → the `clock.ymd` template + clock. Pure: the date templates arrive
|
|
43
|
+
* through the caller's locale seat.
|
|
44
|
+
* @param time - Unix epoch ms from the source session event.
|
|
45
|
+
* @param t - translate seat supplying the `clock.md` / `clock.ymd` templates.
|
|
46
|
+
* @param now - Reference instant for the day/year cut (defaults to wall clock).
|
|
47
|
+
* @returns Date-aware clock string (24-hour, zero-padded time).
|
|
48
|
+
*/
|
|
49
|
+
export declare function formatMessageClock(time: number, t: ClockTranslate, now?: number): string;
|
|
50
|
+
//# sourceMappingURL=message-chrome.d.ts.map
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Context } from '@qilin-agent/kylin';
|
|
2
|
+
import type { ObservableSnapshot } from '@qilin-agent/client-store';
|
|
3
|
+
import type { PerformanceUsageMode } from '../../chat-settings.ts';
|
|
4
|
+
import type { ChatPresentationPolicy } from '../presentation-policy.ts';
|
|
5
|
+
/**
|
|
6
|
+
* Register this package's business renderers behind the keyed Chat Node seat.
|
|
7
|
+
* Renderers whose output depends on the work-details mode receive the policy
|
|
8
|
+
* through their own registration; the seat and the other renderers do not.
|
|
9
|
+
* @param ctx - owning UI Conversation context.
|
|
10
|
+
* @param performanceUsage - live statistics detail preference.
|
|
11
|
+
* @param presentation - live presentation policy.
|
|
12
|
+
*/
|
|
13
|
+
export declare function registerChatNodeRenderers(ctx: Context, performanceUsage: ObservableSnapshot<PerformanceUsageMode>, presentation: ObservableSnapshot<ChatPresentationPolicy>): void;
|
|
14
|
+
//# sourceMappingURL=register-node-renderers.d.ts.map
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Stable React identities for the two grouping reference kinds. */
|
|
2
|
+
import type { RenderEntry } from '@qilin-agent/client-ui-conversation/client';
|
|
3
|
+
/**
|
|
4
|
+
* Identify a rendering position independently of presentation mode.
|
|
5
|
+
* @param entry - mode-independent rendering reference.
|
|
6
|
+
* @returns its collision-free React key.
|
|
7
|
+
*/
|
|
8
|
+
export declare function chatRenderKey(entry: RenderEntry): string;
|
|
9
|
+
//# sourceMappingURL=render-entry.d.ts.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type RefObject } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Optional visibility operation; its caller owns cancellation and eventually commits the attribute.
|
|
4
|
+
* @param element - stable subtree root.
|
|
5
|
+
* @param hidden - desired hidden state.
|
|
6
|
+
* @param commit - apply the final visibility before reporting the operation complete.
|
|
7
|
+
*/
|
|
8
|
+
export type HiddenTransition = (element: HTMLElement, hidden: boolean, commit: () => void) => void;
|
|
9
|
+
/**
|
|
10
|
+
* Apply searchable hidden state without unmounting a stable subtree.
|
|
11
|
+
* @param hidden - whether the subtree is currently hidden.
|
|
12
|
+
* @param reveal - callback for browser find's beforematch reveal.
|
|
13
|
+
* @param transition - optional caller-owned visibility operation; otherwise apply synchronously.
|
|
14
|
+
* @returns ref for the stable subtree root.
|
|
15
|
+
*/
|
|
16
|
+
export declare function useSearchableHidden(hidden: boolean, reveal: () => void, transition?: HiddenTransition): RefObject<HTMLDivElement>;
|
|
17
|
+
//# sourceMappingURL=searchable-hidden.d.ts.map
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type CSSProperties, type MutableRefObject } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Unplaced portal panel: hidden but laid out so the clamp measures real
|
|
4
|
+
* dimensions (the `useAnchoredPosition` measure pass).
|
|
5
|
+
*/
|
|
6
|
+
export declare const MEASURE_STYLE: CSSProperties;
|
|
7
|
+
/** Open state, refs, and clamped placement for one stat dialog. */
|
|
8
|
+
export interface StatDialogSeat {
|
|
9
|
+
open: boolean;
|
|
10
|
+
setOpen: (open: boolean) => void;
|
|
11
|
+
rootRef: MutableRefObject<HTMLSpanElement | null>;
|
|
12
|
+
panelRef: MutableRefObject<HTMLDivElement | null>;
|
|
13
|
+
pos: CSSProperties | null;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* One trigger-anchored dialog seat: open state, viewport-clamped placement, outside-close.
|
|
17
|
+
* @returns the seat; spread `pos ?? MEASURE_STYLE` onto the portaled panel.
|
|
18
|
+
*/
|
|
19
|
+
export declare function useStatDialog(): StatDialogSeat;
|
|
20
|
+
//# sourceMappingURL=stat-dialog.d.ts.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** Localized titles for projected step-process activity. */
|
|
2
|
+
import type { ChatViewSlotProps } from '../contract/slots.ts';
|
|
3
|
+
import type { ProcessActivitySummary } from '../contract/process-groups.ts';
|
|
4
|
+
/**
|
|
5
|
+
* Compose a closed group's localized title from its top three categories without counts.
|
|
6
|
+
* @param summary - ranked work and phase evidence for this range.
|
|
7
|
+
* @param t - Chat namespace translator.
|
|
8
|
+
* @returns the secondary disclosure title.
|
|
9
|
+
*/
|
|
10
|
+
export declare function processTitle(summary: ProcessActivitySummary, t: ChatViewSlotProps['t']): string;
|
|
11
|
+
//# sourceMappingURL=step-process.d.ts.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ChatViewSlotProps } from '../contract/slots.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Compact token count: 517 / 12.2K / 517K / 1.2M.
|
|
4
|
+
* @param value - non-negative token count.
|
|
5
|
+
* @param t - Chat locale seat.
|
|
6
|
+
* @returns locale-owned compact display string.
|
|
7
|
+
*/
|
|
8
|
+
export declare function formatTokens(value: number, t: ChatViewSlotProps['t']): string;
|
|
9
|
+
/**
|
|
10
|
+
* Exact integer token count with locale-owned digit grouping.
|
|
11
|
+
* @param value - non-negative safe integer token count.
|
|
12
|
+
* @param t - Chat locale seat.
|
|
13
|
+
* @returns an unrounded display string.
|
|
14
|
+
*/
|
|
15
|
+
export declare function formatExactTokens(value: number, t: ChatViewSlotProps['t']): string;
|
|
16
|
+
/**
|
|
17
|
+
* Display-ready cache-hit share without rounding a partial hit to 100%.
|
|
18
|
+
* @param cacheReadTokens - exact prompt tokens served from cache.
|
|
19
|
+
* @param promptTokens - exact aggregate prompt tokens.
|
|
20
|
+
* @param decimalPlaces - ordinary-ratio precision; partial hits that would
|
|
21
|
+
* round to 100 automatically use enough additional precision to stay honest.
|
|
22
|
+
* @returns percentage text, or null when there was no prompt input.
|
|
23
|
+
*/
|
|
24
|
+
export declare function formatCacheHitPercent(cacheReadTokens: number, promptTokens: number, decimalPlaces?: 0 | 1): string | null;
|
|
25
|
+
//# sourceMappingURL=token-format.d.ts.map
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { AssistantBlock } from '../contract/snapshot.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Collect visible prose from one Assistant lifecycle.
|
|
4
|
+
* @param blocks - Assistant content blocks.
|
|
5
|
+
* @returns concatenated text blocks.
|
|
6
|
+
*/
|
|
7
|
+
export declare function assistantText(blocks: readonly AssistantBlock[]): string;
|
|
8
|
+
//# sourceMappingURL=turn-assistant.d.ts.map
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* View-layer union of the host turn outline and the loaded rail items. The
|
|
3
|
+
* conversation snapshot never carries projection values, so this merge is the
|
|
4
|
+
* one place the rail's two sources meet: the `turnOutline` projection names
|
|
5
|
+
* every turn of the session, and the loaded window supplies anchors and
|
|
6
|
+
* richer previews for the turns it holds.
|
|
7
|
+
*/
|
|
8
|
+
import { SessionSeq } from '@qilin-agent/session/types';
|
|
9
|
+
import type { TurnNavigationItem } from '../contract/snapshot.ts';
|
|
10
|
+
/** One rail mark: a loaded Turn scrolls to its row; an unloaded one pages history through its seq first. */
|
|
11
|
+
export interface TurnRailItem {
|
|
12
|
+
readonly turn: number;
|
|
13
|
+
/** Bounded prompt preview (loaded window first, outline fallback). */
|
|
14
|
+
readonly prompt: string;
|
|
15
|
+
/** Bounded response preview (loaded window first, outline fallback). */
|
|
16
|
+
readonly response: string;
|
|
17
|
+
/** How the rail reaches the Turn. */
|
|
18
|
+
readonly anchor: {
|
|
19
|
+
readonly kind: 'loaded';
|
|
20
|
+
readonly key: string;
|
|
21
|
+
} | {
|
|
22
|
+
readonly kind: 'unloaded';
|
|
23
|
+
readonly seq: SessionSeq;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Merge the host outline with the loaded rail items into the full ladder.
|
|
28
|
+
* A turn present in both sides keeps the loaded anchor, taking an outline
|
|
29
|
+
* preview only where the window's own is empty (a mid-Turn window head, or a
|
|
30
|
+
* turn whose loaded nodes carry no text); turns on one side only pass
|
|
31
|
+
* through. Result ascends by turn.
|
|
32
|
+
* @param loaded - loaded-window rail items (timeline order).
|
|
33
|
+
* @param outline - `turnOutline` projection value, treated as wire data.
|
|
34
|
+
* @returns every known turn, ascending; a stable empty array when none.
|
|
35
|
+
*/
|
|
36
|
+
export declare function mergeTurnRailItems(loaded: readonly TurnNavigationItem[], outline: unknown): readonly TurnRailItem[];
|
|
37
|
+
//# sourceMappingURL=turn-rail-items.d.ts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Presentation of durable non-human messages claimed to begin a Turn. */
|
|
2
|
+
import type { ContextMessageNode } from '../contract/snapshot.ts';
|
|
3
|
+
import type { ChatKey } from '../locale.ts';
|
|
4
|
+
/** Existing primitive glyph selected for a Turn trigger's source family. */
|
|
5
|
+
export type TurnTriggerIcon = 'agent' | 'github' | 'goal' | 'job' | 'plugin' | 'request' | 'schedule' | 'subagent' | 'team' | 'webhook';
|
|
6
|
+
/**
|
|
7
|
+
* Describe a waking message using its source and recognized producer framing.
|
|
8
|
+
* @param node - durable context, including the original notification body.
|
|
9
|
+
* @returns localized title key and source-family icon.
|
|
10
|
+
*/
|
|
11
|
+
export declare function turnTriggerDetails(node: ContextMessageNode): {
|
|
12
|
+
title: ChatKey;
|
|
13
|
+
icon: TurnTriggerIcon;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=turn-trigger.d.ts.map
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { ChatNode } from '../contract/chat-nodes.ts';
|
|
2
|
+
import type { ChatViewSlotProps } from '../contract/slots.ts';
|
|
3
|
+
import type { TurnRailItem } from './turn-rail-items.ts';
|
|
4
|
+
import type { ChatReading, ReadingSample } from './use-chat-reading.ts';
|
|
5
|
+
import type { ChatViewport } from './use-chat-viewport.ts';
|
|
6
|
+
/** History availability and loading operations for the committed Chat window. */
|
|
7
|
+
export interface ChatNavigationInput extends Pick<ChatViewSlotProps, 'loadOlder' | 'loadThrough'> {
|
|
8
|
+
readonly firstSeq: ChatNode['anchorSeq'] | null;
|
|
9
|
+
readonly hasMore: boolean;
|
|
10
|
+
readonly loadingOlder: boolean;
|
|
11
|
+
}
|
|
12
|
+
/** Owns one replaceable turn jump and the anchor retained while history loads. */
|
|
13
|
+
export declare class ChatNavigation {
|
|
14
|
+
private readonly viewport;
|
|
15
|
+
private readonly reading;
|
|
16
|
+
private input;
|
|
17
|
+
private readonly onBusyTurn;
|
|
18
|
+
private jump;
|
|
19
|
+
private settleFrame;
|
|
20
|
+
constructor(viewport: ChatViewport, reading: ChatReading, input: ChatNavigationInput, onBusyTurn: (turn: number | null) => void);
|
|
21
|
+
/**
|
|
22
|
+
* Adopt committed history availability without starting a request.
|
|
23
|
+
* @param input - history state from the latest committed render.
|
|
24
|
+
*/
|
|
25
|
+
setInput(input: ChatNavigationInput): void;
|
|
26
|
+
/** Cancel navigation when opening a Chat view. */
|
|
27
|
+
reset(): void;
|
|
28
|
+
/** Cancel local callbacks; late history completions cannot revive a task. */
|
|
29
|
+
dispose(): void;
|
|
30
|
+
/** Release the jump, paging anchor, and busy indicator without cancelling shared history I/O. */
|
|
31
|
+
cancel(): void;
|
|
32
|
+
private clearTask;
|
|
33
|
+
/**
|
|
34
|
+
* Replace the current jump with an explicit turn selection.
|
|
35
|
+
* @param item - loaded anchor or unloaded turn to fetch before landing.
|
|
36
|
+
*/
|
|
37
|
+
readonly navigateToTurn: (item: TurnRailItem) => void;
|
|
38
|
+
/** Request one older page while retaining the current semantic position. */
|
|
39
|
+
readonly loadEarlier: () => void;
|
|
40
|
+
/**
|
|
41
|
+
* Preserve reader ownership across pending history work.
|
|
42
|
+
* @param sample - settled reader movement that can update or interrupt an anchor.
|
|
43
|
+
*/
|
|
44
|
+
readerSampled(sample: ReadingSample): void;
|
|
45
|
+
/**
|
|
46
|
+
* Preserve one paging anchor after a commit or a later size change, regardless of head identity.
|
|
47
|
+
* @returns whether the retained anchor handled the layout change.
|
|
48
|
+
*/
|
|
49
|
+
contentCommitted(): boolean;
|
|
50
|
+
/** Retarget a still-loading page only after inner or outer reader scrolling ends. */
|
|
51
|
+
readerSettled(): void;
|
|
52
|
+
/** Land, retry, or complete the current jump against the committed window. */
|
|
53
|
+
reconcile(): void;
|
|
54
|
+
private landJump;
|
|
55
|
+
private request;
|
|
56
|
+
private cancelFrame;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Retain one navigation owner for the component's lifetime.
|
|
60
|
+
* @param viewport - turn-aware DOM operations.
|
|
61
|
+
* @param reading - reading and follow policy receiving navigation landings.
|
|
62
|
+
* @param input - committed history state and load operations.
|
|
63
|
+
* @returns the navigation owner and its visible busy turn.
|
|
64
|
+
*/
|
|
65
|
+
export declare function useChatNavigation(viewport: ChatViewport, reading: ChatReading, input: ChatNavigationInput): {
|
|
66
|
+
navigation: ChatNavigation;
|
|
67
|
+
busyTurn: number | null;
|
|
68
|
+
};
|
|
69
|
+
//# sourceMappingURL=use-chat-navigation.d.ts.map
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import type { ChatScrollPosition, ChatViewSlotProps } from '../contract/slots.ts';
|
|
2
|
+
import type { ChatViewport, ViewportLanding, ViewportScroll } from './use-chat-viewport.ts';
|
|
3
|
+
import { type ScrollFollow } from './use-scroll-follow.ts';
|
|
4
|
+
/** Reading facts that affect Chat chrome and initial rail placement. */
|
|
5
|
+
export interface ChatReadingState {
|
|
6
|
+
readonly initialized: boolean;
|
|
7
|
+
readonly followingTail: boolean;
|
|
8
|
+
readonly activeTurn: number | null;
|
|
9
|
+
}
|
|
10
|
+
/** Settled reader position delivered to history-navigation policy. */
|
|
11
|
+
export interface ReadingSample {
|
|
12
|
+
readonly position: ChatScrollPosition | null;
|
|
13
|
+
readonly movedByReader: boolean;
|
|
14
|
+
readonly followingTail: boolean;
|
|
15
|
+
}
|
|
16
|
+
type PositionStore = ChatViewSlotProps['chatScroll'];
|
|
17
|
+
/** Owns reading policy and its cancellable sampling work, without DOM access. */
|
|
18
|
+
export declare class ChatReading {
|
|
19
|
+
private readonly viewport;
|
|
20
|
+
private store;
|
|
21
|
+
private state;
|
|
22
|
+
private readonly onChange;
|
|
23
|
+
private readonly follow;
|
|
24
|
+
private sampleTimer;
|
|
25
|
+
private probeFrame;
|
|
26
|
+
/** Settled reader row and offset, re-aligned when a layout change moves it. */
|
|
27
|
+
private readerPosition;
|
|
28
|
+
private sampled;
|
|
29
|
+
constructor(viewport: ChatViewport, store: PositionStore, state: ChatReadingState, onChange: (state: ChatReadingState) => void, follow: ScrollFollow);
|
|
30
|
+
/**
|
|
31
|
+
* Expose pending reader ownership to navigation and resize handlers.
|
|
32
|
+
* @returns whether reader input still awaits interval or scrollend sampling.
|
|
33
|
+
*/
|
|
34
|
+
get pending(): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Expose the active follow policy.
|
|
37
|
+
* @returns whether content growth retains bottom-follow ownership.
|
|
38
|
+
*/
|
|
39
|
+
get followingTail(): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Adopt the committed Session's scroll memory.
|
|
42
|
+
* @param store - scroll memory for the current Session.
|
|
43
|
+
*/
|
|
44
|
+
setStore(store: PositionStore): void;
|
|
45
|
+
/**
|
|
46
|
+
* Connect history policy to settled reading observations.
|
|
47
|
+
* @param sampled - receives settled reader positions.
|
|
48
|
+
* @returns a disposer that disconnects only this listener.
|
|
49
|
+
*/
|
|
50
|
+
connect(sampled: (sample: ReadingSample) => void): () => void;
|
|
51
|
+
/** Cancel timers and animation frames and detach the sample listener. */
|
|
52
|
+
dispose(): void;
|
|
53
|
+
/** Release bottom follow and pending sampling for an explicit navigation. */
|
|
54
|
+
pauseFollowing(): void;
|
|
55
|
+
/**
|
|
56
|
+
* Land at the current floor and clear saved reader position.
|
|
57
|
+
* @param behavior - immediate positioning, or one native animation when the reader's own input moved the tail.
|
|
58
|
+
*/
|
|
59
|
+
followTail(behavior?: 'instant' | 'smooth'): void;
|
|
60
|
+
/** Stop a native follow animation where it is; the next sampled position decides follow intent. */
|
|
61
|
+
interruptFollow(): void;
|
|
62
|
+
/** Restore the Session's semantic position, or follow the tail when none is saved. */
|
|
63
|
+
restore(): void;
|
|
64
|
+
/**
|
|
65
|
+
* Adopt a known landing without rediscovering its anchor.
|
|
66
|
+
* @param landing - measured navigation result that replaces pending reader input.
|
|
67
|
+
*/
|
|
68
|
+
acceptNavigation(landing: ViewportLanding): void;
|
|
69
|
+
/**
|
|
70
|
+
* Retain reading policy while history changes the anchor's geometry.
|
|
71
|
+
* @param landing - compensated position that retains the current reading policy.
|
|
72
|
+
*/
|
|
73
|
+
preservePosition(landing: ViewportLanding): void;
|
|
74
|
+
/**
|
|
75
|
+
* Handle pinned layout movement and reader arrivals at the floor immediately.
|
|
76
|
+
* @param scroll - attributed scroll delivery; other reader movement remains pending until sampled.
|
|
77
|
+
*/
|
|
78
|
+
readonly onScroll: (scroll: ViewportScroll) => void;
|
|
79
|
+
/**
|
|
80
|
+
* Settle pending reader movement; only the outer scroller can finish its native follow animation.
|
|
81
|
+
* @param outer - whether the event belongs to the outer scroller rather than a process body.
|
|
82
|
+
*/
|
|
83
|
+
readonly onScrollEnd: (outer?: boolean) => void;
|
|
84
|
+
/**
|
|
85
|
+
* Reconcile a layout change without overriding unsampled reader input.
|
|
86
|
+
* A resize the reader did not cause moves their row; put it back on its
|
|
87
|
+
* sampled offset before resolving the reading line from the new layout.
|
|
88
|
+
*/
|
|
89
|
+
onResize(): void;
|
|
90
|
+
/** Resolve the active turn from tail ownership or a coalesced reading-line probe. */
|
|
91
|
+
refreshActiveTurn(): void;
|
|
92
|
+
private commit;
|
|
93
|
+
private publish;
|
|
94
|
+
private cancelPending;
|
|
95
|
+
private readonly probe;
|
|
96
|
+
private readonly flushSample;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Retain reading policy and expose only changes in visible reading state.
|
|
100
|
+
* @param viewport - turn-aware DOM operations.
|
|
101
|
+
* @param store - Session-owned semantic scroll memory.
|
|
102
|
+
* @param initialTurn - latest loaded turn before the first landing.
|
|
103
|
+
* @returns the reading owner and its React-visible state.
|
|
104
|
+
*/
|
|
105
|
+
export declare function useChatReading(viewport: ChatViewport, store: PositionStore, initialTurn: number | null): {
|
|
106
|
+
reading: ChatReading;
|
|
107
|
+
state: ChatReadingState;
|
|
108
|
+
};
|
|
109
|
+
export {};
|
|
110
|
+
//# sourceMappingURL=use-chat-reading.d.ts.map
|