@turingfocus/chat-ui-antd 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.
Files changed (62) hide show
  1. package/LICENSE +21 -0
  2. package/dist/ask-user-interaction.d.ts +23 -0
  3. package/dist/ask-user-interaction.d.ts.map +1 -0
  4. package/dist/ask-user-interaction.js +116 -0
  5. package/dist/ask-user-interaction.js.map +1 -0
  6. package/dist/chat-composer.d.ts +13 -0
  7. package/dist/chat-composer.d.ts.map +1 -0
  8. package/dist/chat-composer.js +58 -0
  9. package/dist/chat-composer.js.map +1 -0
  10. package/dist/chat-conversation-view.d.ts +19 -0
  11. package/dist/chat-conversation-view.d.ts.map +1 -0
  12. package/dist/chat-conversation-view.js +71 -0
  13. package/dist/chat-conversation-view.js.map +1 -0
  14. package/dist/chat-run-status.d.ts +13 -0
  15. package/dist/chat-run-status.d.ts.map +1 -0
  16. package/dist/chat-run-status.js +59 -0
  17. package/dist/chat-run-status.js.map +1 -0
  18. package/dist/chat-state-view.d.ts +14 -0
  19. package/dist/chat-state-view.d.ts.map +1 -0
  20. package/dist/chat-state-view.js +59 -0
  21. package/dist/chat-state-view.js.map +1 -0
  22. package/dist/chat-timeline.d.ts +17 -0
  23. package/dist/chat-timeline.d.ts.map +1 -0
  24. package/dist/chat-timeline.js +79 -0
  25. package/dist/chat-timeline.js.map +1 -0
  26. package/dist/chat-ui-shell.d.ts +22 -0
  27. package/dist/chat-ui-shell.d.ts.map +1 -0
  28. package/dist/chat-ui-shell.js +41 -0
  29. package/dist/chat-ui-shell.js.map +1 -0
  30. package/dist/conversation-list.d.ts +21 -0
  31. package/dist/conversation-list.d.ts.map +1 -0
  32. package/dist/conversation-list.js +75 -0
  33. package/dist/conversation-list.js.map +1 -0
  34. package/dist/index.d.ts +13 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +12 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/labels.d.ts +4 -0
  39. package/dist/labels.d.ts.map +1 -0
  40. package/dist/labels.js +37 -0
  41. package/dist/labels.js.map +1 -0
  42. package/dist/markdown-content.d.ts +10 -0
  43. package/dist/markdown-content.d.ts.map +1 -0
  44. package/dist/markdown-content.js +20 -0
  45. package/dist/markdown-content.js.map +1 -0
  46. package/dist/renderer-registry.d.ts +33 -0
  47. package/dist/renderer-registry.d.ts.map +1 -0
  48. package/dist/renderer-registry.js +191 -0
  49. package/dist/renderer-registry.js.map +1 -0
  50. package/dist/timeline-tail-tracker.d.ts +21 -0
  51. package/dist/timeline-tail-tracker.d.ts.map +1 -0
  52. package/dist/timeline-tail-tracker.js +36 -0
  53. package/dist/timeline-tail-tracker.js.map +1 -0
  54. package/dist/types.d.ts +78 -0
  55. package/dist/types.d.ts.map +1 -0
  56. package/dist/types.js +2 -0
  57. package/dist/types.js.map +1 -0
  58. package/dist/use-chat-command-coordinator.d.ts +31 -0
  59. package/dist/use-chat-command-coordinator.d.ts.map +1 -0
  60. package/dist/use-chat-command-coordinator.js +303 -0
  61. package/dist/use-chat-command-coordinator.js.map +1 -0
  62. package/package.json +47 -0
@@ -0,0 +1,191 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Alert, Card, Skeleton, Space, Tag, Typography, theme } from "antd";
3
+ import { Component, Suspense, createElement, } from "react";
4
+ import { AskUserInteractionResultView } from "./ask-user-interaction.js";
5
+ import { ChatMarkdownContent } from "./markdown-content.js";
6
+ export const formatChatTimestampUtc = (timestamp) => {
7
+ const date = new Date(timestamp);
8
+ if (Number.isNaN(date.getTime()))
9
+ return "Unknown time";
10
+ const iso = date.toISOString();
11
+ return `${iso.slice(0, 10)} ${iso.slice(11, 19)} UTC`;
12
+ };
13
+ const getItemSummary = (item) => {
14
+ if (item.kind === "message") {
15
+ return item.content.kind === "text"
16
+ ? item.content.text
17
+ : item.content.summary;
18
+ }
19
+ if (item.kind === "unknown-event")
20
+ return item.summary;
21
+ return (item.summary ??
22
+ item.transitions.at(-1)?.summary ??
23
+ `${item.eventType} (${item.status})`);
24
+ };
25
+ export const ChatMessageContent = ({ message }) => message.content.kind === "text" ? (_jsx(ChatMarkdownContent, { children: message.content.text })) : (_jsx(Typography.Paragraph, { style: { margin: 0, whiteSpace: "pre-wrap" }, children: message.content.summary }));
26
+ const MessageRenderer = ({ formatTimestamp, item }) => {
27
+ if (item.kind !== "message")
28
+ return null;
29
+ const { token } = theme.useToken();
30
+ const isUser = item.role === "user";
31
+ return (_jsx("div", { style: {
32
+ display: "flex",
33
+ justifyContent: isUser ? "flex-end" : "flex-start",
34
+ }, children: _jsxs("div", { style: {
35
+ background: isUser ? token.colorPrimaryBg : token.colorFillQuaternary,
36
+ borderRadius: token.borderRadiusLG,
37
+ maxWidth: "min(48rem, 85%)",
38
+ padding: `${token.paddingXS}px ${token.paddingSM}px`,
39
+ wordBreak: "break-word",
40
+ }, children: [_jsxs(Typography.Text, { style: { display: "block", fontSize: token.fontSizeSM }, type: "secondary", children: [item.author?.displayName ?? item.role, " \u00B7", " ", formatTimestamp(item.createdAt)] }), _jsx(ChatMessageContent, { message: item })] }) }));
41
+ };
42
+ const AgentEventRenderer = ({ formatTimestamp, item }) => {
43
+ if (item.kind !== "agent-event")
44
+ return null;
45
+ const { token } = theme.useToken();
46
+ const failed = item.status === "failed" || item.status === "timeout";
47
+ const statusColor = item.status === "success"
48
+ ? "success"
49
+ : item.status === "failed" || item.status === "timeout"
50
+ ? "error"
51
+ : item.status === "running"
52
+ ? "processing"
53
+ : "default";
54
+ return (_jsxs(Card, { extra: _jsx(Tag, { color: statusColor, children: item.status }), size: "small", ...(failed ? { style: { borderColor: token.colorError } } : {}), title: item.eventType, children: [failed ? (_jsx(Alert, { message: item.transitions.at(-1)?.error?.message ??
55
+ item.summary ??
56
+ "Event failed", showIcon: true, style: { marginBottom: token.marginXS }, type: "error" })) : null, _jsx(Typography.Paragraph, { style: { marginBottom: 4, whiteSpace: "pre-wrap" }, children: getItemSummary(item) }), _jsx(Typography.Text, { type: "secondary", children: formatTimestamp(item.createdAt) })] }));
57
+ };
58
+ const latestToolField = (item, select) => {
59
+ for (let index = item.transitions.length - 1; index >= 0; index -= 1) {
60
+ const value = select(item.transitions[index]);
61
+ if (value !== undefined)
62
+ return value;
63
+ }
64
+ return undefined;
65
+ };
66
+ const TOOL_RESULT_CHARACTER_LIMIT = 4_000;
67
+ const formatToolResult = (result) => {
68
+ const serialized = typeof result === "string" ? result : JSON.stringify(result, null, 2);
69
+ if (serialized.length <= TOOL_RESULT_CHARACTER_LIMIT)
70
+ return serialized;
71
+ return `${serialized.slice(0, TOOL_RESULT_CHARACTER_LIMIT)}\n[Result truncated]`;
72
+ };
73
+ const ToolEventRenderer = ({ formatTimestamp, item }) => {
74
+ if (item.kind !== "agent-event" || item.eventCategory !== "tool")
75
+ return null;
76
+ const { token } = theme.useToken();
77
+ const toolCall = latestToolField(item, (transition) => transition.toolCall);
78
+ const toolReturn = latestToolField(item, (transition) => transition.toolReturn);
79
+ const interaction = latestToolField(item, (transition) => transition.interaction);
80
+ const failed = item.status === "failed" ||
81
+ item.status === "timeout" ||
82
+ interaction?.status === "failed" ||
83
+ interaction?.status === "timeout" ||
84
+ toolReturn?.success === false;
85
+ const displayStatus = interaction?.status ??
86
+ (toolReturn?.success === false ? "failed" : item.status);
87
+ return (_jsx(Card, { extra: _jsx(Tag, { color: failed
88
+ ? "error"
89
+ : displayStatus === "success" ||
90
+ displayStatus === "answered" ||
91
+ displayStatus === "chat-about-this"
92
+ ? "success"
93
+ : displayStatus === "running"
94
+ ? "processing"
95
+ : "default", children: displayStatus }), size: "small", ...(failed ? { style: { borderColor: token.colorError } } : {}), title: toolCall?.name ?? item.eventType, children: _jsxs(Space, { direction: "vertical", size: "small", children: [failed ? (_jsx(Alert, { message: interaction?.error ??
96
+ item.transitions.at(-1)?.error?.message ??
97
+ item.summary ??
98
+ "Tool failed", showIcon: true, type: "error" })) : null, interaction === undefined ? (_jsxs(_Fragment, { children: [_jsx(Typography.Text, { children: getItemSummary(item) }), toolReturn === undefined ? null : (_jsxs(_Fragment, { children: [toolReturn.result === undefined ? null : (_jsx(Typography.Paragraph, { code: true, style: {
99
+ margin: 0,
100
+ maxWidth: "min(48rem, 80vw)",
101
+ overflowWrap: "anywhere",
102
+ whiteSpace: "pre-wrap",
103
+ }, children: formatToolResult(toolReturn.result) })), toolReturn.success === undefined &&
104
+ toolReturn.done === undefined ? null : (_jsx(Typography.Text, { type: "secondary", children: [
105
+ toolReturn.success === undefined
106
+ ? undefined
107
+ : `success: ${String(toolReturn.success)}`,
108
+ toolReturn.done === undefined
109
+ ? undefined
110
+ : `done: ${String(toolReturn.done)}`,
111
+ ]
112
+ .filter((value) => value !== undefined)
113
+ .join(" · ") }))] }))] })) : (_jsx(AskUserInteractionResultView, { result: interaction })), _jsx(Typography.Text, { type: "secondary", children: formatTimestamp(item.createdAt) })] }) }));
114
+ };
115
+ const UnknownEventRenderer = ({ formatTimestamp, item }) => {
116
+ if (item.kind !== "unknown-event")
117
+ return null;
118
+ return (_jsx(Alert, { description: _jsxs(_Fragment, { children: [_jsx(Typography.Paragraph, { style: { marginBottom: 4, whiteSpace: "pre-wrap" }, children: item.summary }), _jsx(Typography.Text, { type: "secondary", children: formatTimestamp(item.createdAt) })] }), message: `Unknown event: ${item.originalType}`, showIcon: true, type: "warning" }));
119
+ };
120
+ export const defaultChatRendererRegistry = Object.freeze({
121
+ "agent-event:tool": ToolEventRenderer,
122
+ "agent-event": AgentEventRenderer,
123
+ message: MessageRenderer,
124
+ "unknown-event": UnknownEventRenderer,
125
+ });
126
+ export const createChatRendererRegistry = (overrides) => Object.freeze({ ...defaultChatRendererRegistry, ...overrides });
127
+ const getRendererCandidates = (item) => {
128
+ switch (item.kind) {
129
+ case "message":
130
+ return [`message:${item.content.kind}`, "message"];
131
+ case "agent-event":
132
+ return [
133
+ `agent-event:${item.eventType}`,
134
+ `agent-event:${item.eventCategory}`,
135
+ "agent-event",
136
+ ];
137
+ case "unknown-event":
138
+ return [`unknown-event:${item.originalType}`, "unknown-event"];
139
+ }
140
+ throw new Error("Unsupported timeline item");
141
+ };
142
+ export const resolveChatRenderer = (registry, item) => {
143
+ for (const key of getRendererCandidates(item)) {
144
+ const renderer = registry[key];
145
+ if (renderer === null)
146
+ return undefined;
147
+ if (renderer !== undefined)
148
+ return renderer;
149
+ }
150
+ return undefined;
151
+ };
152
+ const SafeItemFallback = ({ failed, formatTimestamp, item, }) => {
153
+ const title = item.kind === "message"
154
+ ? `Message from ${item.role}`
155
+ : item.kind === "agent-event"
156
+ ? item.eventType
157
+ : item.originalType;
158
+ return (_jsx(Alert, { description: _jsxs(_Fragment, { children: [_jsx(Typography.Paragraph, { style: { marginBottom: 4, whiteSpace: "pre-wrap" }, children: getItemSummary(item) }), _jsx(Typography.Text, { type: "secondary", children: formatTimestamp(item.createdAt) })] }), message: failed ? `Renderer unavailable: ${title}` : title, showIcon: true, type: failed ? "error" : "info" }));
159
+ };
160
+ class RendererBoundary extends Component {
161
+ state = { failed: false };
162
+ static getDerivedStateFromError() {
163
+ return { failed: true };
164
+ }
165
+ componentDidCatch(error) {
166
+ try {
167
+ this.props.onError?.({ error, item: this.props.item });
168
+ }
169
+ catch {
170
+ // Host diagnostics must not defeat the renderer isolation boundary.
171
+ }
172
+ }
173
+ componentDidUpdate(previous) {
174
+ if (this.state.failed &&
175
+ (previous.item !== this.props.item ||
176
+ previous.renderer !== this.props.renderer)) {
177
+ this.setState({ failed: false });
178
+ }
179
+ }
180
+ render() {
181
+ return this.state.failed ? this.props.fallback : this.props.children;
182
+ }
183
+ }
184
+ export const ChatTimelineItem = ({ formatTimestamp = formatChatTimestampUtc, item, onRendererError, registry, }) => {
185
+ const renderer = resolveChatRenderer(registry, item);
186
+ const fallback = (_jsx(SafeItemFallback, { failed: renderer !== undefined, formatTimestamp: formatTimestamp, item: item }));
187
+ if (renderer === undefined)
188
+ return fallback;
189
+ return (_jsx(RendererBoundary, { fallback: fallback, item: item, onError: onRendererError, renderer: renderer, children: _jsx(Suspense, { fallback: _jsx(Skeleton, { active: true, paragraph: { rows: 2 } }), children: createElement(renderer, { formatTimestamp, item }) }) }));
190
+ };
191
+ //# sourceMappingURL=renderer-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer-registry.js","sourceRoot":"","sources":["../src/renderer-registry.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type TimelineItem } from "@turingfocus/chat-protocol";
2
+ export interface TimelineTailState {
3
+ readonly conversationId: string;
4
+ readonly length: number;
5
+ readonly tailKey: string | undefined;
6
+ }
7
+ export interface TimelineTailTransition {
8
+ readonly addedAfterTail: number;
9
+ readonly state: TimelineTailState;
10
+ }
11
+ type TimelineItemKeyReader = (item: TimelineItem) => string;
12
+ export declare const createTimelineTailState: (conversationId: string, items: readonly TimelineItem[], readKey?: TimelineItemKeyReader) => TimelineTailState;
13
+ /**
14
+ * Counts only items inserted after the previously observed chronological tail.
15
+ * Runtime upserts preserve unchanged item references and list order, so a
16
+ * length-preserving streaming replacement is O(1), while an insertion scans at
17
+ * most the number of added items plus the prior tail.
18
+ */
19
+ export declare const advanceTimelineTailState: (previous: TimelineTailState, conversationId: string, items: readonly TimelineItem[], readKey?: TimelineItemKeyReader) => TimelineTailTransition;
20
+ export {};
21
+ //# sourceMappingURL=timeline-tail-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-tail-tracker.d.ts","sourceRoot":"","sources":["../src/timeline-tail-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;CACnC;AAED,KAAK,qBAAqB,GAAG,CAAC,IAAI,EAAE,YAAY,KAAK,MAAM,CAAC;AAE5D,eAAO,MAAM,uBAAuB,GAClC,gBAAgB,MAAM,EACtB,OAAO,SAAS,YAAY,EAAE,EAC9B,UAAS,qBAA0C,KAClD,iBAOF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GACnC,UAAU,iBAAiB,EAC3B,gBAAgB,MAAM,EACtB,OAAO,SAAS,YAAY,EAAE,EAC9B,UAAS,qBAA0C,KAClD,sBAuBF,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { getTimelineItemKey, } from "@turingfocus/chat-protocol";
2
+ export const createTimelineTailState = (conversationId, items, readKey = getTimelineItemKey) => {
3
+ const tail = items.at(-1);
4
+ return {
5
+ conversationId,
6
+ length: items.length,
7
+ tailKey: tail === undefined ? undefined : readKey(tail),
8
+ };
9
+ };
10
+ /**
11
+ * Counts only items inserted after the previously observed chronological tail.
12
+ * Runtime upserts preserve unchanged item references and list order, so a
13
+ * length-preserving streaming replacement is O(1), while an insertion scans at
14
+ * most the number of added items plus the prior tail.
15
+ */
16
+ export const advanceTimelineTailState = (previous, conversationId, items, readKey = getTimelineItemKey) => {
17
+ const state = createTimelineTailState(conversationId, items, readKey);
18
+ if (previous.conversationId !== conversationId ||
19
+ previous.tailKey === undefined ||
20
+ items.length <= previous.length) {
21
+ return { addedAfterTail: 0, state };
22
+ }
23
+ for (let index = previous.length - 1; index < items.length; index += 1) {
24
+ const item = items[index];
25
+ if (readKey(item) === previous.tailKey) {
26
+ return {
27
+ addedAfterTail: items.length - index - 1,
28
+ state,
29
+ };
30
+ }
31
+ }
32
+ // Snapshot replacement or deletion is not an append. Avoid presenting its
33
+ // unmatched items as new realtime messages.
34
+ return { addedAfterTail: 0, state };
35
+ };
36
+ //# sourceMappingURL=timeline-tail-tracker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"timeline-tail-tracker.js","sourceRoot":"","sources":["../src/timeline-tail-tracker.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAEnB,MAAM,4BAA4B,CAAC;AAepC,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,cAAsB,EACtB,KAA8B,EAC9B,UAAiC,kBAAkB,EAChC,EAAE;IACrB,MAAM,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO;QACL,cAAc;QACd,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;KACxD,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CACtC,QAA2B,EAC3B,cAAsB,EACtB,KAA8B,EAC9B,UAAiC,kBAAkB,EAC3B,EAAE;IAC1B,MAAM,KAAK,GAAG,uBAAuB,CAAC,cAAc,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACtE,IACE,QAAQ,CAAC,cAAc,KAAK,cAAc;QAC1C,QAAQ,CAAC,OAAO,KAAK,SAAS;QAC9B,KAAK,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,EAC/B,CAAC;QACD,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IACtC,CAAC;IAED,KAAK,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAE,CAAC;QAC3B,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC;YACvC,OAAO;gBACL,cAAc,EAAE,KAAK,CAAC,MAAM,GAAG,KAAK,GAAG,CAAC;gBACxC,KAAK;aACN,CAAC;QACJ,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,4CAA4C;IAC5C,OAAO,EAAE,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;AACtC,CAAC,CAAC"}
@@ -0,0 +1,78 @@
1
+ import type { CSSProperties, ReactNode } from "react";
2
+ export interface ChatConversationListItem {
3
+ readonly description?: string | undefined;
4
+ readonly disabled?: boolean | undefined;
5
+ readonly id: string;
6
+ readonly title: string;
7
+ /** Unix epoch milliseconds. */
8
+ readonly updatedAt?: number | undefined;
9
+ }
10
+ export type ChatContentState = {
11
+ readonly kind: "ready";
12
+ } | {
13
+ readonly description?: ReactNode | undefined;
14
+ readonly kind: "loading";
15
+ readonly title?: ReactNode | undefined;
16
+ } | {
17
+ readonly description?: ReactNode | undefined;
18
+ readonly kind: "empty";
19
+ readonly title?: ReactNode | undefined;
20
+ } | {
21
+ readonly description?: ReactNode | undefined;
22
+ readonly kind: "error";
23
+ readonly onRetry?: (() => void) | undefined;
24
+ readonly title?: ReactNode | undefined;
25
+ } | {
26
+ readonly description?: ReactNode | undefined;
27
+ readonly kind: "disconnected";
28
+ readonly onRetry?: (() => void) | undefined;
29
+ readonly title?: ReactNode | undefined;
30
+ } | {
31
+ readonly capability?: string | undefined;
32
+ readonly description?: ReactNode | undefined;
33
+ readonly kind: "capability-unavailable";
34
+ readonly title?: ReactNode | undefined;
35
+ };
36
+ export interface ChatUiLabels {
37
+ readonly askUserCancel: ReactNode;
38
+ readonly askUserChatAboutThis: ReactNode;
39
+ readonly askUserLabel: string;
40
+ readonly askUserRequired: string;
41
+ readonly askUserSubmit: ReactNode;
42
+ readonly askUserSubmitting: ReactNode;
43
+ readonly askUserUnavailable: ReactNode;
44
+ readonly capabilityUnavailableDescription: ReactNode;
45
+ readonly capabilityUnavailableTitle: ReactNode;
46
+ readonly composerLabel: string;
47
+ readonly composerPlaceholder: string;
48
+ readonly conversationListLabel: string;
49
+ readonly disconnectedDescription: ReactNode;
50
+ readonly disconnectedTitle: ReactNode;
51
+ readonly emptyDescription: ReactNode;
52
+ readonly emptyTitle: ReactNode;
53
+ readonly errorDescription: ReactNode;
54
+ readonly errorTitle: ReactNode;
55
+ readonly loadingDescription: ReactNode;
56
+ readonly loadingTitle: ReactNode;
57
+ readonly emptyTimeline: ReactNode;
58
+ readonly interrupt: ReactNode;
59
+ readonly interruptUnavailable: ReactNode;
60
+ readonly interrupting: ReactNode;
61
+ readonly jumpToLatest: ReactNode;
62
+ readonly newMessages: ReactNode;
63
+ readonly noConversations: ReactNode;
64
+ readonly retry: ReactNode;
65
+ readonly runStatusLabel: ReactNode;
66
+ readonly send: ReactNode;
67
+ readonly sending: ReactNode;
68
+ readonly textSendingUnavailable: string;
69
+ readonly timelineLabel: string;
70
+ }
71
+ export type ChatUiLabelOverrides = Partial<ChatUiLabels>;
72
+ export interface ChatUiSlotStyles {
73
+ readonly content?: CSSProperties | undefined;
74
+ readonly conversationList?: CSSProperties | undefined;
75
+ readonly root?: CSSProperties | undefined;
76
+ readonly sidebar?: CSSProperties | undefined;
77
+ }
78
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,31 @@
1
+ import type { AskUserInteractionAnswer, ChatError, Run } from "@turingfocus/chat-protocol";
2
+ import type { ChatProviderProps } from "@turingfocus/chat-react";
3
+ type ChatClient = ChatProviderProps["client"];
4
+ export type ChatUiCommand = "answerInteraction" | "interrupt" | "sendText";
5
+ export interface ChatUiCommandFailure {
6
+ readonly command: ChatUiCommand;
7
+ readonly error: ChatError;
8
+ }
9
+ interface UseChatCommandCoordinatorInput {
10
+ readonly canAnswerInteraction: boolean;
11
+ readonly canInterrupt: boolean;
12
+ readonly client: ChatClient;
13
+ readonly conversationId: string | null;
14
+ readonly getDeadlineAt: () => number;
15
+ readonly interactionRequest?: Pick<AskUserInteractionAnswer, "requestId" | "revision"> | undefined;
16
+ readonly onCommandError?: ((failure: ChatUiCommandFailure) => void) | undefined;
17
+ readonly run: Run | null;
18
+ readonly snapshotError: ChatError | undefined;
19
+ }
20
+ interface UseChatCommandCoordinatorResult {
21
+ readonly answerInteraction: (answer: AskUserInteractionAnswer) => Promise<boolean>;
22
+ readonly dismissFailure: (command: ChatUiCommand) => void;
23
+ readonly interrupt: () => Promise<boolean>;
24
+ readonly sendText: (text: string) => Promise<boolean>;
25
+ readonly viewResetKey: string;
26
+ readonly visibleCommandFailures: readonly ChatUiCommandFailure[];
27
+ readonly visibleSnapshotError: ChatError | undefined;
28
+ }
29
+ export declare const useChatCommandCoordinator: ({ canAnswerInteraction, canInterrupt, client, conversationId, getDeadlineAt, interactionRequest, onCommandError, run, snapshotError, }: UseChatCommandCoordinatorInput) => UseChatCommandCoordinatorResult;
30
+ export {};
31
+ //# sourceMappingURL=use-chat-command-coordinator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-chat-command-coordinator.d.ts","sourceRoot":"","sources":["../src/use-chat-command-coordinator.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EACV,wBAAwB,EACxB,SAAS,EACT,GAAG,EACJ,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,KAAK,UAAU,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAE9C,MAAM,MAAM,aAAa,GAAG,mBAAmB,GAAG,WAAW,GAAG,UAAU,CAAC;AAE3E,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;CAC3B;AAuCD,UAAU,8BAA8B;IACtC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC;IACvC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,aAAa,EAAE,MAAM,MAAM,CAAC;IACrC,QAAQ,CAAC,kBAAkB,CAAC,EAC1B,IAAI,CAAC,wBAAwB,EAAE,WAAW,GAAG,UAAU,CAAC,GAAG,SAAS,CAAC;IACvE,QAAQ,CAAC,cAAc,CAAC,EACtB,CAAC,CAAC,OAAO,EAAE,oBAAoB,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,SAAS,GAAG,SAAS,CAAC;CAC/C;AAED,UAAU,+BAA+B;IACvC,QAAQ,CAAC,iBAAiB,EAAE,CAC1B,MAAM,EAAE,wBAAwB,KAC7B,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,QAAQ,CAAC,cAAc,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,IAAI,CAAC;IAC1D,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACtD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,sBAAsB,EAAE,SAAS,oBAAoB,EAAE,CAAC;IACjE,QAAQ,CAAC,oBAAoB,EAAE,SAAS,GAAG,SAAS,CAAC;CACtD;AAqMD,eAAO,MAAM,yBAAyB,GAAI,wIAUvC,8BAA8B,KAAG,+BA0MnC,CAAC"}