@blade-hq/agent-react 2610.0.1 → 2612.0.0-beta.1

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 (180) hide show
  1. package/README.md +88 -258
  2. package/dist/chat/AgentLoopBlock.d.ts +14 -0
  3. package/dist/{components → chat}/AskUserQuestionBlock.d.ts +3 -7
  4. package/dist/chat/AssistantTurnBlock.d.ts +50 -0
  5. package/dist/chat/AttachmentPreviewDialog.d.ts +26 -0
  6. package/dist/chat/ChatPanel.d.ts +64 -0
  7. package/dist/chat/CompactionCard.d.ts +6 -0
  8. package/dist/chat/ConnectionBanner.d.ts +10 -0
  9. package/dist/chat/CurrentPlanPanel.d.ts +20 -0
  10. package/dist/chat/FileDeliveryCards.d.ts +26 -0
  11. package/dist/chat/FinalArtifactCards.d.ts +8 -0
  12. package/dist/chat/ImageLightbox.d.ts +11 -0
  13. package/dist/chat/LightComposer.d.ts +7 -0
  14. package/dist/chat/LiteMessageList.d.ts +82 -0
  15. package/dist/chat/MessageActions.d.ts +6 -0
  16. package/dist/chat/MessageContextPills.d.ts +6 -0
  17. package/dist/chat/MessageFileAttachmentList.d.ts +13 -0
  18. package/dist/chat/MessageList.d.ts +54 -0
  19. package/dist/chat/PostChatFollowupBlock.d.ts +11 -0
  20. package/dist/{components → chat}/RenderErrorBoundary.d.ts +0 -1
  21. package/dist/chat/ResultFeedback.d.ts +11 -0
  22. package/dist/chat/SessionReplayBar.d.ts +12 -0
  23. package/dist/chat/TextAttachmentPills.d.ts +10 -0
  24. package/dist/chat/ToolCallBlock.d.ts +48 -0
  25. package/dist/chat/ToolUiCard.d.ts +6 -0
  26. package/dist/chat/TurnNavRail.d.ts +17 -0
  27. package/dist/chat/UserMessageBubble.d.ts +20 -0
  28. package/dist/chat/WorkflowRunBlock.d.ts +13 -0
  29. package/dist/chat/ai-elements/reasoning.d.ts +32 -0
  30. package/dist/chat/ai-elements/shimmer.d.ts +15 -0
  31. package/dist/chat/assistant-turn-questions.d.ts +14 -0
  32. package/dist/chat/card/CardContext.d.ts +7 -0
  33. package/dist/chat/chat-theme.d.ts +19 -0
  34. package/dist/chat/customization.d.ts +214 -0
  35. package/dist/chat/display-utils.d.ts +48 -0
  36. package/dist/{components/PostChatFollowupBlock.d.ts → chat/followup-interaction.d.ts} +5 -17
  37. package/dist/chat/index.d.ts +100 -0
  38. package/dist/chat/lib/citations.d.ts +30 -0
  39. package/dist/chat/lib/code-language.d.ts +5 -0
  40. package/dist/chat/lib/loopback.d.ts +8 -0
  41. package/dist/chat/lib/markdown-asset-url.d.ts +5 -0
  42. package/dist/chat/lib/preview-dispatch.d.ts +24 -0
  43. package/dist/chat/lib/skill-name.d.ts +9 -0
  44. package/dist/chat/lib/skill-visibility.d.ts +8 -0
  45. package/dist/chat/lib/ui-meta.d.ts +5 -0
  46. package/dist/chat/lib/use-async-value.d.ts +8 -0
  47. package/dist/chat/markdown/ExternalAnchor.d.ts +9 -0
  48. package/dist/chat/markdown/MarkdownContent.d.ts +40 -0
  49. package/dist/chat/markdown/text.d.ts +11 -0
  50. package/dist/chat/message-list-blocks.d.ts +92 -0
  51. package/dist/chat/plan/PlanSummaryCard.d.ts +10 -0
  52. package/dist/chat/plan/extract-plan-messages.d.ts +4 -0
  53. package/dist/chat/plan/parse-plan-messages.d.ts +10 -0
  54. package/dist/chat/plan/parse-plan-tree.d.ts +16 -0
  55. package/dist/chat/plan/types.d.ts +56 -0
  56. package/dist/chat/reasoning-visibility.d.ts +2 -0
  57. package/dist/chat/runtime/actions.d.ts +22 -0
  58. package/dist/chat/runtime/background-task-dismissals.d.ts +10 -0
  59. package/dist/chat/runtime/composer-channels.d.ts +46 -0
  60. package/dist/chat/runtime/environment.d.ts +152 -0
  61. package/dist/chat/runtime/input-cache-reset.d.ts +8 -0
  62. package/dist/chat/runtime/input-services.d.ts +111 -0
  63. package/dist/chat/runtime/session-source.d.ts +49 -0
  64. package/dist/chat/runtime/use-chat-actions.d.ts +19 -0
  65. package/dist/chat/runtime/use-session-replay.d.ts +16 -0
  66. package/dist/chat/scroll-anchor.d.ts +46 -0
  67. package/dist/chat/tool-renderers/BashRenderer.d.ts +2 -0
  68. package/dist/chat/tool-renderers/FileEditRenderer.d.ts +2 -0
  69. package/dist/chat/tool-renderers/FileReadRenderer.d.ts +2 -0
  70. package/dist/chat/tool-renderers/KbSearchRenderer.d.ts +2 -0
  71. package/dist/chat/tool-renderers/SearchRenderer.d.ts +2 -0
  72. package/dist/chat/tool-renderers/SubmitResultRenderer.d.ts +2 -0
  73. package/dist/chat/tool-renderers/kb-search-result.d.ts +19 -0
  74. package/dist/chat/tool-renderers/registry.d.ts +5 -0
  75. package/dist/chat/tool-renderers/shared.d.ts +30 -0
  76. package/dist/chat/tool-renderers/write-preview-scroll.d.ts +5 -0
  77. package/dist/chat-OCLOVB3H.css +175 -0
  78. package/dist/chat.css +175 -0
  79. package/dist/chunk-6ZDOQEWK.js +49365 -0
  80. package/dist/chunk-6ZDOQEWK.js.map +1 -0
  81. package/dist/chunk-FQQJP2GJ.js +26986 -0
  82. package/dist/chunk-FQQJP2GJ.js.map +1 -0
  83. package/dist/{chunk-G3PMV62Z.js → chunk-PR4QN5HX.js} +9 -2
  84. package/dist/chunk-WCMGQJLE.js +258 -0
  85. package/dist/chunk-WCMGQJLE.js.map +1 -0
  86. package/dist/components/AgentChat.d.ts +3 -3
  87. package/dist/components/ChatView.d.ts +2 -2
  88. package/dist/components/ConnectorPanel.d.ts +1 -1
  89. package/dist/components/ContextCard.d.ts +1 -1
  90. package/dist/components/LlmChat.d.ts +1 -1
  91. package/dist/components/McpAppCard.d.ts +1 -1
  92. package/dist/components/PlanUpdateBlock.d.ts +0 -8
  93. package/dist/components/PluginConnectorList.d.ts +1 -1
  94. package/dist/components/ReplayBar.d.ts +1 -1
  95. package/dist/components/SessionPluginConfigDialog.d.ts +1 -1
  96. package/dist/components/SessionPluginConfigForm.d.ts +1 -1
  97. package/dist/components/SessionPluginIcon.d.ts +1 -1
  98. package/dist/components/SessionPluginSelector.d.ts +1 -1
  99. package/dist/components/SessionQueuePanel.d.ts +1 -1
  100. package/dist/components/ToolUiCardView.d.ts +1 -1
  101. package/dist/components/plugin-config-draft.d.ts +1 -1
  102. package/dist/components/plugin-config-schema.d.ts +1 -1
  103. package/dist/components/plugin-connector.d.ts +1 -1
  104. package/dist/components/use-session-plugin-activation.d.ts +1 -1
  105. package/dist/context.d.ts +11 -2
  106. package/dist/embed/blade-chat-element.d.ts +14 -1
  107. package/dist/embed/entry.d.ts +8 -78
  108. package/dist/hooks/use-replay.d.ts +1 -1
  109. package/dist/hooks/use-turn-navigation.d.ts +1 -1
  110. package/dist/host.d.ts +54 -0
  111. package/dist/index.d.ts +11 -69
  112. package/dist/index.js +12 -63525
  113. package/dist/index.js.map +1 -1
  114. package/dist/internal.d.ts +60 -0
  115. package/dist/internal.js +656 -0
  116. package/dist/internal.js.map +1 -0
  117. package/dist/lib/mount-renderers.d.ts +25 -0
  118. package/dist/lib/use-effect-event.d.ts +3 -0
  119. package/dist/rich-input/BackgroundTasksPill.d.ts +3 -0
  120. package/dist/rich-input/ChatInput.d.ts +59 -0
  121. package/dist/rich-input/ComposerAttachmentViewport.d.ts +3 -0
  122. package/dist/rich-input/ConnectButton.d.ts +24 -0
  123. package/dist/rich-input/FileCompletionMenu.d.ts +44 -0
  124. package/dist/rich-input/FileSizeLimitDialog.d.ts +9 -0
  125. package/dist/rich-input/ModelSelector.d.ts +10 -0
  126. package/dist/rich-input/PlanningToggle.d.ts +7 -0
  127. package/dist/rich-input/ProgressCircle.d.ts +12 -0
  128. package/dist/rich-input/ReasoningModeSelect.d.ts +9 -0
  129. package/dist/rich-input/SkillCompletionMenu.d.ts +9 -0
  130. package/dist/rich-input/SkillStatusBar.d.ts +15 -0
  131. package/dist/rich-input/extensions/file-mention.d.ts +12 -0
  132. package/dist/rich-input/extensions/kb-mention.d.ts +18 -0
  133. package/dist/rich-input/extensions/skill-mention.d.ts +48 -0
  134. package/dist/rich-input/extensions/workflow-mention.d.ts +10 -0
  135. package/dist/rich-input/index.d.ts +48 -0
  136. package/dist/rich-input/input-keyboard.d.ts +13 -0
  137. package/dist/rich-input/lib/attachment-upload.d.ts +10 -0
  138. package/dist/rich-input/lib/background-tasks-view.d.ts +31 -0
  139. package/dist/rich-input/lib/client-query.d.ts +32 -0
  140. package/dist/rich-input/lib/composer-content.d.ts +42 -0
  141. package/dist/rich-input/lib/image-input-availability.d.ts +3 -0
  142. package/dist/rich-input/lib/kb-suggestions.d.ts +37 -0
  143. package/dist/rich-input/lib/reasoning-levels.d.ts +1 -0
  144. package/dist/rich-input/lib/session-data.d.ts +20 -0
  145. package/dist/rich-input/lib/skill-suggestions.d.ts +19 -0
  146. package/dist/rich-input/lib/token-estimate.d.ts +2 -0
  147. package/dist/rich-input/lib/token-pressure.d.ts +8 -0
  148. package/dist/rich-input/lib/upload-results.d.ts +8 -0
  149. package/dist/rich-input/lib/user-home.d.ts +33 -0
  150. package/dist/rich-input/model/model-data.d.ts +6 -0
  151. package/dist/rich-input/model/resolve-model.d.ts +59 -0
  152. package/dist/rich-input/model/use-composer-model.d.ts +24 -0
  153. package/dist/rich-input/services.d.ts +22 -0
  154. package/dist/rich-input/use-dismiss-skill-suggestions-on-mode-change.d.ts +3 -0
  155. package/dist/rich-input/use-input-history.d.ts +14 -0
  156. package/dist/rich-input/voice/VoiceWaveform.d.ts +10 -0
  157. package/dist/rich-input/voice/use-tiptap-voice-input.d.ts +47 -0
  158. package/dist/rich-input/voice/use-voice-input.d.ts +2 -0
  159. package/dist/rich-input/voice/voice-input-support.d.ts +5 -0
  160. package/dist/rich-input.js +29853 -0
  161. package/dist/rich-input.js.map +1 -0
  162. package/dist/style.css +30 -64
  163. package/dist/style.full.css +210 -65
  164. package/dist/{webapi-W3IB5DO4.js → webapi-E7K2CNM7.js} +2 -2
  165. package/package.json +12 -3
  166. package/public-api.md +206 -3603
  167. package/dist/components/AgentLoopBlock.d.ts +0 -8
  168. package/dist/components/AgentTaskCard.d.ts +0 -12
  169. package/dist/components/AssistantTurnBlock.d.ts +0 -36
  170. package/dist/components/ChatSurface.d.ts +0 -199
  171. package/dist/components/ConnectionBanner.d.ts +0 -8
  172. package/dist/components/MarkdownContent.d.ts +0 -30
  173. package/dist/components/MessageList.d.ts +0 -62
  174. package/dist/components/Shimmer.d.ts +0 -7
  175. package/dist/components/ToolCallBlock.d.ts +0 -41
  176. package/dist/components/TurnNavRail.d.ts +0 -23
  177. package/dist/components/UserMessageBubble.d.ts +0 -25
  178. package/dist/components/display-utils.d.ts +0 -4
  179. /package/dist/{chunk-G3PMV62Z.js.map → chunk-PR4QN5HX.js.map} +0 -0
  180. /package/dist/{webapi-W3IB5DO4.js.map → webapi-E7K2CNM7.js.map} +0 -0
@@ -1,8 +0,0 @@
1
- import type { ToolCallInfo } from "@blade-hq/agent-client";
2
- interface Props {
3
- toolCall: ToolCallInfo;
4
- className?: string;
5
- }
6
- /** SDK receives the parent tool status and result; child-stream hosts supply card content separately. */
7
- export declare function AgentLoopBlock({ toolCall, className }: Props): import("react/jsx-runtime").JSX.Element;
8
- export {};
@@ -1,12 +0,0 @@
1
- import { type ReactNode } from "react";
2
- export type AgentTaskStatus = "running" | "waiting_input" | "completed" | "failed" | "cancelled";
3
- export interface AgentTaskCardProps {
4
- title: string;
5
- status: AgentTaskStatus;
6
- activity?: string;
7
- children?: ReactNode;
8
- className?: string;
9
- recordId?: string;
10
- }
11
- /** Shared child-agent boundary; activity remains visible while details are collapsed. */
12
- export declare function AgentTaskCard({ title, status, activity, children, className, recordId }: AgentTaskCardProps): import("react/jsx-runtime").JSX.Element;
@@ -1,36 +0,0 @@
1
- import type { AskUserAnswerData, ChatMessage, MemoryRefInfo } from "@blade-hq/agent-client";
2
- import type { ChatViewClassNames, ChatViewRenderers } from "./ChatSurface";
3
- interface Props {
4
- messages: ChatMessage[];
5
- isStreaming?: boolean;
6
- askAnswers?: Record<string, AskUserAnswerData>;
7
- onAnswer?: (answer: string, toolCallId: string, answerData: AskUserAnswerData) => void;
8
- sessionStatus?: string;
9
- /** 各可见区块的 className 落点;键与元素上的 `blade-chat-*` 锚点一一对应。 */
10
- classNames?: ChatViewClassNames;
11
- /** 区块级渲染器;返回 null 走默认渲染。 */
12
- renderers?: ChatViewRenderers;
13
- /** Agent 模式把 update_plan 收口到输入框上方的任务面板;纯 LLM 同名工具照常展示。 */
14
- hidePlanUpdateTools?: boolean;
15
- /** 会话 id;传给 Markdown 渲染的统一上下文。 */
16
- sessionId?: string;
17
- }
18
- export type TurnDisplayMode = "compact" | "detail";
19
- export declare function resolveTurnDisplayMode({ isStreaming: _isStreaming, displayMode, }: {
20
- isStreaming: boolean;
21
- displayMode: TurnDisplayMode;
22
- }): TurnDisplayMode;
23
- export declare function formatExecutionDuration(durationMs: number): string;
24
- export declare function getExecutionDurationMs({ messages, isStreaming, now, }: {
25
- messages: ChatMessage[];
26
- isStreaming: boolean;
27
- now?: number;
28
- }): number;
29
- /** 一轮助手回复:执行过程默认折叠,最终正文始终显示在摘要下方。 */
30
- export declare function AssistantTurnBlock({ messages, isStreaming, askAnswers, onAnswer, sessionStatus, classNames, renderers, hidePlanUpdateTools, sessionId, }: Props): import("react/jsx-runtime").JSX.Element;
31
- export declare function collectMemoryRefs(messages: ChatMessage[]): MemoryRefInfo[];
32
- export declare function MemoryRefsHint({ refs, className }: {
33
- refs: MemoryRefInfo[];
34
- className?: string;
35
- }): import("react/jsx-runtime").JSX.Element;
36
- export {};
@@ -1,199 +0,0 @@
1
- import type { AskUserAnswerData, ChatMessage, ConnectionStatus, PostChatFollowup } from "@blade-hq/agent-client";
2
- import { type ReactNode } from "react";
3
- import type { TurnNavigationSource } from "../hooks/use-turn-navigation";
4
- import type { ToolCallRenderer } from "./ToolCallBlock";
5
- import type { FollowupInteractionEvent } from "./PostChatFollowupBlock";
6
- import type { ResultFeedback } from "@blade-hq/agent-client";
7
- import { type PlanUpdateData } from "./PlanUpdateBlock";
8
- import type { AskUserQuestionData } from "./AskUserQuestionBlock";
9
- /**
10
- * 每个可见区块的 className 落点,键名与元素上的 `blade-chat-*` 语义锚点一一对应。
11
- *
12
- * 传进来的类会与 SDK 自己的类一起经过 `cn`(clsx + tailwind-merge),放在
13
- * 最后一个参数,因此 `classNames={{ chatInput: "p-0" }}` 能盖掉组件内部的 `p-4`,
14
- * 不依赖 CSS 输出顺序、也不需要 `!important`。锚点本身不带视觉规则(清单见
15
- * README「样式定制」与 src/style.css 顶部),用普通 CSS 选它们同样稳定生效。
16
- */
17
- export interface ChatViewClassNames {
18
- /** 聊天根容器(`.blade-chat`)。 */
19
- root?: string;
20
- /** 连接状态提示条(`.blade-chat-banner`)。 */
21
- banner?: string;
22
- /** 顶部出错条(`.blade-chat-error-bar`)。 */
23
- errorBar?: string;
24
- /** 消息区(`.blade-chat-messages`)。 */
25
- messageList?: string;
26
- /** 消息区滚动内容(`.blade-chat-messages-scroll`):内边距在这里。 */
27
- messagesScroll?: string;
28
- /** 消息内容列(`.blade-chat-messages-content`):居中与最大宽度在这里。 */
29
- messagesContent?: string;
30
- /** 无消息时的空状态(`.blade-chat-empty`)。 */
31
- empty?: string;
32
- /** 「滚动到底部」按钮(`.blade-chat-scroll-bottom`)。 */
33
- scrollToBottom?: string;
34
- /** 用户消息行(`.blade-chat-user-row`)。 */
35
- userMessage?: string;
36
- /** 用户气泡(`.blade-chat-user-bubble`)。 */
37
- userBubble?: string;
38
- /** 消息里的文件附件卡(`.blade-chat-file-card`)。 */
39
- fileCard?: string;
40
- /** 消息流里的出错块(`.blade-chat-error-row`)。 */
41
- errorMessage?: string;
42
- /** 一轮助手回复(`.blade-chat-assistant-turn`)。 */
43
- assistantTurn?: string;
44
- /** 思考过程(`.blade-chat-thinking`)。 */
45
- thinking?: string;
46
- /** 助手正文(`.blade-chat-assistant-text`)。 */
47
- assistantText?: string;
48
- /** 记忆引用(`.blade-chat-memory-refs`)。 */
49
- memoryRefs?: string;
50
- /** 执行过程里的工具行(`.blade-chat-tool-row`):智能体模式下工具调用都走这条路径。 */
51
- toolRow?: string;
52
- /** 子智能体行(`.blade-chat-agent-loop`)。 */
53
- agentLoop?: string;
54
- /** 提问卡(`.blade-chat-ask-card`)。 */
55
- askCard?: string;
56
- /** 提问卡的每个选项(`.blade-chat-ask-option`)。 */
57
- askOption?: string;
58
- /** 计划面板(`.blade-chat-plan`)。 */
59
- planPanel?: string;
60
- /** 会话队列面板(`.blade-chat-queue`)。 */
61
- queuePanel?: string;
62
- /** 本轮小结与跟进区(`.blade-chat-followup`)。 */
63
- followup?: string;
64
- /** 跟进建议按钮(`.blade-chat-followup-action`)。 */
65
- followupAction?: string;
66
- /** 输入区外层(`.blade-chat-input`)。 */
67
- chatInput?: string;
68
- /** 输入框卡片(`.blade-chat-input-inner`):边框、圆角、底色在这里。 */
69
- inputInner?: string;
70
- /** 文本输入框(`.blade-chat-textarea`)。 */
71
- textarea?: string;
72
- /** 输入框右侧按钮组(`.blade-chat-input-toolbar`)。 */
73
- inputToolbar?: string;
74
- }
75
- /** 用户消息渲染器:`message` 是投影层给出的用户消息。 */
76
- export interface UserMessageRendererProps {
77
- message: ChatMessage;
78
- }
79
- /** 助手正文渲染器:`compact` 为真时正文在执行过程里,字号更小。 */
80
- export interface AssistantTextRendererProps {
81
- message: ChatMessage;
82
- streaming: boolean;
83
- compact: boolean;
84
- sessionId?: string;
85
- }
86
- /** 提问卡渲染器:字段与 `AskUserQuestionBlock` 的 props 一致。 */
87
- export interface AskUserQuestionRendererProps {
88
- data: AskUserQuestionData;
89
- answered: boolean;
90
- toolCallId: string;
91
- sessionStatus: string;
92
- answerData?: AskUserAnswerData;
93
- onAnswer?: (answer: string, toolCallId: string, answerData: AskUserAnswerData) => void;
94
- }
95
- /** 计划面板渲染器:`plan` 是最近一次成功的 update_plan 解析结果。 */
96
- export interface PlanUpdateRendererProps {
97
- plan: PlanUpdateData;
98
- running: boolean;
99
- sessionId?: string;
100
- }
101
- /**
102
- * 区块级渲染器:每个都返回 `ReactNode`,返回 `null` 走 SDK 默认渲染。
103
- *
104
- * 与 `toolCall` 的老签名一致:参数是一个描述该区块的对象,而不是裸数据。
105
- */
106
- export interface ChatViewRenderers {
107
- /** 自定义工具调用渲染;返回 null 走默认渲染。 */
108
- toolCall?: ToolCallRenderer;
109
- /** 自定义用户消息渲染;返回 null 走默认渲染。 */
110
- userMessage?: (props: UserMessageRendererProps) => ReactNode | null;
111
- /** 自定义助手正文渲染;返回 null 走默认渲染。 */
112
- assistantText?: (props: AssistantTextRendererProps) => ReactNode | null;
113
- /** 自定义提问卡渲染;返回 null 走默认渲染。 */
114
- askUserQuestion?: (props: AskUserQuestionRendererProps) => ReactNode | null;
115
- /** 自定义计划面板渲染;返回 null 走默认渲染。 */
116
- planUpdate?: (props: PlanUpdateRendererProps) => ReactNode | null;
117
- }
118
- export interface ChatViewSlots {
119
- /** 消息列表上方的自定义区域。 */
120
- header?: ReactNode;
121
- /** 无消息时的空状态。 */
122
- emptyState?: ReactNode;
123
- /** 输入框下方的自定义区域。 */
124
- footer?: ReactNode;
125
- }
126
- /** 两种模式共用的外观属性。 */
127
- export interface ChatPresentationProps {
128
- classNames?: ChatViewClassNames;
129
- renderers?: ChatViewRenderers;
130
- slots?: ChatViewSlots;
131
- placeholder?: string;
132
- /** 配色主题,默认浅色。宿主已经在祖先元素上写了 data-theme 时不用传。 */
133
- theme?: "light" | "dark";
134
- }
135
- /** 主题落到聊天根节点上:深色变量挂在 [data-theme="dark"] 上,由它继承给整棵子树。 */
136
- export declare function themeAttr(theme: ChatPresentationProps["theme"]): "dark" | undefined;
137
- interface ChatSurfaceProps extends ChatPresentationProps {
138
- /** follow-up、成果和评分交互;SDK 不绑定任何分析厂商。 */
139
- onFollowupInteraction?: (event: FollowupInteractionEvent) => void;
140
- connection: ConnectionStatus;
141
- errorMessage: string | null;
142
- messages: ChatMessage[];
143
- postChatFollowup?: PostChatFollowup | null;
144
- isStreaming: boolean;
145
- isStopping: boolean;
146
- inputText: string;
147
- onInputChange: (value: string) => void;
148
- onSuggestion?: (value: string) => void;
149
- onSend: (text: string) => Promise<boolean>;
150
- onStop: () => void;
151
- sessionStatus?: string;
152
- askAnswers?: Record<string, AskUserAnswerData>;
153
- onAnswer?: (answer: string, toolCallId: string, answerData: AskUserAnswerData) => void;
154
- sessionId?: string;
155
- isViewer?: boolean;
156
- resultFeedbackByEntry?: ReadonlyMap<string, ResultFeedback>;
157
- onResultFeedbackSaved?: (feedback: ResultFeedback) => void;
158
- /** 输入框上方的内部区域(纯 LLM 模式的高级设置用)。不传时不渲染任何节点。 */
159
- beforeInput?: ReactNode;
160
- /** 输入框上方的会话队列面板(智能体模式用)。不传时不渲染任何节点。 */
161
- queuePanel?: ReactNode;
162
- /**
163
- * 队列面板此刻是否真的占位(由面板的 `onVisibleChange` 上报)。
164
- *
165
- * 不能用 `queuePanel != null` 代替:面板有本地编辑态(编辑到一半、那条等待
166
- * 消息被服务端拿走时仍留在原地保住草稿),这时它显示但 snapshot 里没有条目,
167
- * 光看节点是否存在判不出来,输入框上两角就会在面板还开着的时候恢复成圆角。
168
- */
169
- queuePanelVisible?: boolean;
170
- /** 仅 Agent 模式启用 Blade 的 update_plan 面板。 */
171
- showPlanUpdates?: boolean;
172
- /** 仅实时成功的 update_plan 递增;历史 hydration 不得改变。 */
173
- planRevealRevision?: number;
174
- historyPaging?: {
175
- hasOlder: boolean;
176
- loading: boolean;
177
- /** Resolves true only when the paging cursor advanced. */
178
- loadOlder: (beforeCommit?: () => void) => Promise<boolean>;
179
- };
180
- /** 消息导航的数据源(目录 + 定位);不传就没有导航轨道。 */
181
- turnNavigation?: TurnNavigationSource;
182
- /** 连接状态条下方的横幅(回放模式条用)。不传时不渲染任何节点。 */
183
- banner?: ReactNode;
184
- /**
185
- * 打字机式显示节流是否还没追平目标全文——调用方需要跟 isStreaming 做
186
- * `||` 判断输入框"运行中"状态。
187
- */
188
- onRevealingChange?: (revealing: boolean) => void;
189
- /** 是否正在回放(演示 / 彩排)而非真正的实时直播——透传给 MessageList。 */
190
- isReplay?: boolean;
191
- }
192
- /**
193
- * 消息流 + 输入框:智能体模式与纯 LLM 模式共用同一套外观,差别只在谁喂数据。
194
- *
195
- * 这里的 DOM 结构受 tests/chat-view-compat.test.tsx 的快照保护——接入方拿
196
- * .blade-chat-* 类名写了自己的样式,结构一动他们的页面就歪。
197
- */
198
- export declare function ChatSurface({ theme, classNames, renderers, slots, placeholder, connection, errorMessage, messages, postChatFollowup, isStreaming, isStopping, inputText, onInputChange, onSuggestion, onSend, onStop, sessionStatus, askAnswers, onAnswer, sessionId, isViewer, resultFeedbackByEntry, onResultFeedbackSaved, onFollowupInteraction, beforeInput, queuePanel, queuePanelVisible, showPlanUpdates, planRevealRevision, historyPaging, turnNavigation, banner, onRevealingChange, isReplay, }: ChatSurfaceProps): import("react/jsx-runtime").JSX.Element;
199
- export {};
@@ -1,8 +0,0 @@
1
- import type { ConnectionStatus } from "@blade-hq/agent-client";
2
- interface Props {
3
- connection: ConnectionStatus;
4
- className?: string;
5
- }
6
- /** 连接状态提示条:短暂断线静默,超过容错时间后再逐级提示。 */
7
- export declare function ConnectionBanner({ connection, className }: Props): import("react/jsx-runtime").JSX.Element | null;
8
- export {};
@@ -1,30 +0,0 @@
1
- import { type ComponentPropsWithRef } from "react";
2
- /** 内置 Web(`apps/web/src/agent/components/markdown/MarkdownContent.tsx`)
3
- * 有一份同名同签名的实现,两处共用同一套"跳过代码区间"的判定逻辑,改动
4
- * 时要一起确认。这里作为 SDK 侧的规范实现导出,内置 Web 直接复用,不要
5
- * 各写一份(对齐 CLAUDE.md"判定逻辑不许各写一份")。 */
6
- export declare function stripSystemReminders(text: string): string;
7
- /** Keep inline formatting markers from being consumed by URL autolinking. */
8
- export declare function normalizeAdjacentUrlFormatting(value: string): string;
9
- type AnchorProps = ComponentPropsWithRef<"a">;
10
- /** 链接一律新窗口打开并断开 opener,SDK 不接管站内跳转。
11
- * 页内锚点(脚注引用/回链这类 `href="#fn-note"`)不能套"新窗口打开"这套
12
- * 逻辑——新开一个标签页访问 `#片段` 只是把整篇文档重新打开一次,不是
13
- * 滚动到页内位置,会破坏脚注的跳转体验。只有真正的外部链接才需要新窗口
14
- * + 断开 opener。导出给内置 Web 直接复用——两处原来各写了一份完全相同的
15
- * 判定逻辑,对齐 CLAUDE.md"判定逻辑不允许两处各写一份"。 */
16
- export declare function ExternalAnchor({ children, href, ...props }: AnchorProps): import("react/jsx-runtime").JSX.Element;
17
- export interface MarkdownContentProps {
18
- children: string;
19
- className?: string;
20
- /** 流式渲染传 "streaming",历史静态内容默认 "static"。 */
21
- mode?: "streaming" | "static";
22
- /** 会话 id;保留给聊天组件统一透传上下文。 */
23
- sessionId?: string;
24
- }
25
- /**
26
- * SDK 版 Markdown 渲染:附带代码块复制按钮;相比第一方版本去掉了
27
- * mermaid、外链确认弹窗与文件预览。
28
- */
29
- export declare function MarkdownContent({ children, className, mode, sessionId }: MarkdownContentProps): import("react/jsx-runtime").JSX.Element;
30
- export {};
@@ -1,62 +0,0 @@
1
- import type { AskUserAnswerData, ChatMessage, PostChatFollowup, ResultFeedback } from "@blade-hq/agent-client";
2
- import { type ReactNode } from "react";
3
- import { type TurnNavigationSource } from "../hooks/use-turn-navigation";
4
- import { type FollowupInteractionEvent } from "./PostChatFollowupBlock";
5
- import type { ChatViewClassNames, ChatViewRenderers } from "./ChatSurface";
6
- interface Props {
7
- messages: ChatMessage[];
8
- postChatFollowup?: PostChatFollowup | null;
9
- onSuggestion?: (value: string) => void;
10
- isStreaming: boolean;
11
- sessionStatus?: string;
12
- askAnswers?: Record<string, AskUserAnswerData>;
13
- onAnswer?: (answer: string, toolCallId: string, answerData: AskUserAnswerData) => void;
14
- hidePlanUpdateTools?: boolean;
15
- /** 无消息时替换默认空状态。 */
16
- emptyState?: ReactNode;
17
- /** 各可见区块的 className 落点;键与元素上的 `blade-chat-*` 锚点一一对应。 */
18
- classNames?: ChatViewClassNames;
19
- /** 区块级渲染器;返回 null 走默认渲染。 */
20
- renderers?: ChatViewRenderers;
21
- /** 会话 id;传给助手消息的统一上下文。 */
22
- sessionId?: string;
23
- isViewer?: boolean;
24
- onFollowupInteraction?: (event: FollowupInteractionEvent) => void;
25
- resultFeedbackByEntry?: ReadonlyMap<string, ResultFeedback>;
26
- onResultFeedbackSaved?: (feedback: ResultFeedback) => void;
27
- historyPaging?: {
28
- hasOlder: boolean;
29
- loading: boolean;
30
- /** Resolves true only when the paging cursor advanced. */
31
- loadOlder: (beforeCommit?: () => void) => Promise<boolean>;
32
- };
33
- /**
34
- * 消息导航的数据源(目录 + 定位)。不传就没有导航轨道,也不会请求目录——
35
- * 纯 LLM 会话与自带入口的宿主都属于这种。
36
- */
37
- turnNavigation?: TurnNavigationSource;
38
- /**
39
- * 用户点了停止(还没等服务端确认)——打字机式显示节流要在这一刻立刻整段
40
- * 显示已到达内容,不能等 chat:stop 的服务端回包才响应。跟 isStreaming
41
- * 翻转成 false 不是一回事:那个信号来得晚,点击到服务端确认之间有一段
42
- * 网络往返,这段时间里节流动画不该继续播。
43
- */
44
- isStopping?: boolean;
45
- /**
46
- * 打字机式显示节流是否还没追平目标全文——调用方需要跟 isStreaming 做
47
- * `||` 判断输入框"运行中"状态,否则输入框会先于文字播完就翻回可输入。
48
- */
49
- onRevealingChange?: (revealing: boolean) => void;
50
- /**
51
- * 是否正在回放(演示 / 彩排)而非真正的实时直播——回放期间即使内容在
52
- * 增长也不进入打字机式节流,直接整段显示:这是"流式与历史必须产生相同
53
- * 结果"这条硬规则的一部分,节流只在真正的实时直播里生效。
54
- */
55
- isReplay?: boolean;
56
- }
57
- /**
58
- * 消息列表:use-stick-to-bottom 自动滚动 + 按轮次分组渲染。
59
- * 相比第一方版本去掉了轮次导航栏、吸顶状态条与规划摘要卡片。
60
- */
61
- export declare function MessageList({ messages, postChatFollowup, onSuggestion, isStreaming, sessionStatus, askAnswers, onAnswer, hidePlanUpdateTools, emptyState, classNames, renderers, sessionId, isViewer, onFollowupInteraction, resultFeedbackByEntry, onResultFeedbackSaved, historyPaging, turnNavigation, isStopping, onRevealingChange, isReplay, }: Props): import("react/jsx-runtime").JSX.Element;
62
- export {};
@@ -1,7 +0,0 @@
1
- interface ShimmerProps {
2
- children?: string;
3
- className?: string;
4
- }
5
- /** 流式等待时的呼吸文字效果(样式见 style.css 的 .blade-shimmer-text)。 */
6
- export declare function Shimmer({ children, className }: ShimmerProps): import("react/jsx-runtime").JSX.Element;
7
- export {};
@@ -1,41 +0,0 @@
1
- import type { AskUserAnswerData, ToolCallInfo } from "@blade-hq/agent-client";
2
- import type { ReactNode } from "react";
3
- import type { ChatViewClassNames, ChatViewRenderers } from "./ChatSurface";
4
- /** 接入方自定义渲染器:返回 null 时回落到默认渲染。 */
5
- export type ToolCallRenderer = (info: ToolCallInfo) => ReactNode | null;
6
- interface Props {
7
- toolCall: ToolCallInfo;
8
- onAnswer?: (answer: string, toolCallId: string, answerData: AskUserAnswerData) => void;
9
- answered?: boolean;
10
- answerData?: AskUserAnswerData;
11
- sessionStatus?: string;
12
- isActiveQuestion?: boolean;
13
- /** 各可见区块的 className 落点;键与元素上的 `blade-chat-*` 锚点一一对应。 */
14
- classNames?: ChatViewClassNames;
15
- /** 区块级渲染器;返回 null 走默认渲染。 */
16
- renderers?: ChatViewRenderers;
17
- }
18
- /**
19
- * 判断提问卡片该等待作答还是展示成已作答,只认工具状态。
20
- * 与 apps/web 的 ToolCallBlock 里同名函数保持一致:两处算出不同结果时,
21
- * 同一份会话在内置页面能点、在 SDK 里点不动。
22
- *
23
- * 不要再拿 sessionStatus 兜底。历史投影算错时用 waiting_for_input 补救,
24
- * 会同时把已经回答过的旧提问重新变成可作答(历史加载不会带回 answerData),
25
- * 而且会盖住投影层的错误——这个 bug 就是这么藏住的。
26
- */
27
- export declare function resolveAskQuestionState({ toolStatus, hasAnswerData, fallbackAnswered, fallbackAwaiting, }: {
28
- toolStatus: ToolCallInfo["status"];
29
- hasAnswerData: boolean;
30
- fallbackAnswered?: boolean;
31
- fallbackAwaiting?: boolean;
32
- }): {
33
- awaitingAnswer: boolean;
34
- answered: boolean;
35
- };
36
- /**
37
- * 极简工具调用块:状态 + 展示名一行,点开后是参数/结果的 <pre> 折叠展示。
38
- * AskUserQuestion 特殊处理为提问选项卡片。
39
- */
40
- export declare function ToolCallBlock({ toolCall, onAnswer, answered, answerData, sessionStatus, isActiveQuestion, classNames, renderers, }: Props): import("react/jsx-runtime").JSX.Element | undefined;
41
- export {};
@@ -1,23 +0,0 @@
1
- import type { TurnNavItem } from "../hooks/use-turn-navigation";
2
- export interface TurnNavRailProps {
3
- /** 当前会话全部用户发言的目录;少于两条时不渲染(一条没有导航的意义)。 */
4
- items: TurnNavItem[];
5
- /** 正在高亮的那条发言(视口所在轮,或刚定位到的目标)。 */
6
- activeTurnId: string | null;
7
- /** 正在请求定位的目标;null 表示没有在途定位。 */
8
- loadingTurnId?: string | null;
9
- /** 定位失败提示。 */
10
- error?: string | null;
11
- /** 定位失败的那条发言;重试按钮就再点它一次。 */
12
- failedTurnId?: string | null;
13
- /** 点击/重试某条发言。 */
14
- onSelectTurn: (entryId: string) => void;
15
- }
16
- /**
17
- * 用户发言的刻度轨:右侧一列刻度,悬停/聚焦展开目录列表。
18
- *
19
- * 只负责显示和点击,请求、滚动与高亮全在 `useTurnNavigation` 里——内置 Web 那份
20
- * rail(apps/web 的 TurnNavRail.tsx)有同样的语义,样式与交互各自实现。
21
- * 类名走 `blade-turn-nav-*`:宿主没装 Tailwind 时 style.css 提供等效样式。
22
- */
23
- export declare function TurnNavRail({ items, activeTurnId, loadingTurnId, error, failedTurnId, onSelectTurn, }: TurnNavRailProps): import("react/jsx-runtime").JSX.Element | null;
@@ -1,25 +0,0 @@
1
- import type { ChatMessage } from "@blade-hq/agent-client";
2
- import type { ChatViewClassNames, ChatViewRenderers } from "./ChatSurface";
3
- export type UserChatMessage = ChatMessage & {
4
- role: "user";
5
- };
6
- export type ErrorChatMessage = ChatMessage & {
7
- role: "error";
8
- };
9
- export declare function isUserMessage(message: ChatMessage): message is UserChatMessage;
10
- export declare function isErrorMessage(message: ChatMessage): message is ErrorChatMessage;
11
- interface UserMessageProps {
12
- message: UserChatMessage;
13
- /** 各可见区块的 className 落点;键与元素上的 `blade-chat-*` 锚点一一对应。 */
14
- classNames?: ChatViewClassNames;
15
- /** 区块级渲染器;userMessage 只替换气泡本身,行与附件仍由 SDK 渲染。 */
16
- renderers?: ChatViewRenderers;
17
- }
18
- /** 用户消息气泡:文本、canonical 引用消息与图片/文件附件。 */
19
- export declare function UserMessageBubble({ message, classNames, renderers }: UserMessageProps): import("react/jsx-runtime").JSX.Element;
20
- /** 错误消息:居中红色提示条。 */
21
- export declare function ErrorMessageBlock({ message, className, }: {
22
- message: ErrorChatMessage;
23
- className?: string;
24
- }): import("react/jsx-runtime").JSX.Element;
25
- export {};
@@ -1,4 +0,0 @@
1
- /** 归一化工具名:去掉命名空间前缀并映射到别名表(如 "fork:Agent" → "Agent")。 */
2
- export declare function formatToolName(name: string): string;
3
- /** 工具结果的文本化 + 截断:长结果只在折叠面板里展示前若干字符。 */
4
- export declare function formatToolResult(result: unknown): string;