@huyooo/ai-chat-frontend-react 0.2.44 → 0.3.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/dist/adapter.d.ts +58 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/components/ChatPanel.d.ts +71 -0
- package/dist/components/ChatPanel.d.ts.map +1 -0
- package/dist/components/common/ConfirmDialog.d.ts +27 -0
- package/dist/components/common/ConfirmDialog.d.ts.map +1 -0
- package/dist/components/common/CopyButton.d.ts +15 -0
- package/dist/components/common/CopyButton.d.ts.map +1 -0
- package/dist/components/common/IndexingSettings.d.ts +3 -0
- package/dist/components/common/IndexingSettings.d.ts.map +1 -0
- package/dist/components/common/Toast.d.ts +12 -0
- package/dist/components/common/Toast.d.ts.map +1 -0
- package/dist/components/common/ToggleSwitch.d.ts +9 -0
- package/dist/components/common/ToggleSwitch.d.ts.map +1 -0
- package/dist/components/header/ChatHeader.d.ts +42 -0
- package/dist/components/header/ChatHeader.d.ts.map +1 -0
- package/dist/components/input/AtFilePicker.d.ts +16 -0
- package/dist/components/input/AtFilePicker.d.ts.map +1 -0
- package/dist/components/input/ChatInput.d.ts +49 -0
- package/dist/components/input/ChatInput.d.ts.map +1 -0
- package/dist/components/input/DropdownSelector.d.ts +46 -0
- package/dist/components/input/DropdownSelector.d.ts.map +1 -0
- package/dist/components/input/ImagePreviewModal.d.ts +11 -0
- package/dist/components/input/ImagePreviewModal.d.ts.map +1 -0
- package/dist/components/input/QueuedMessageList.d.ts +11 -0
- package/dist/components/input/QueuedMessageList.d.ts.map +1 -0
- package/dist/components/input/at-views/AtChatsView.d.ts +17 -0
- package/dist/components/input/at-views/AtChatsView.d.ts.map +1 -0
- package/dist/components/input/at-views/AtDocsView.d.ts +17 -0
- package/dist/components/input/at-views/AtDocsView.d.ts.map +1 -0
- package/dist/components/input/at-views/AtFilesView.d.ts +26 -0
- package/dist/components/input/at-views/AtFilesView.d.ts.map +1 -0
- package/dist/components/input/at-views/AtTerminalsView.d.ts +17 -0
- package/dist/components/input/at-views/AtTerminalsView.d.ts.map +1 -0
- package/dist/components/input/at-views/index.d.ts +9 -0
- package/dist/components/input/at-views/index.d.ts.map +1 -0
- package/dist/components/input/at-views/useAtViewTooltip.d.ts +12 -0
- package/dist/components/input/at-views/useAtViewTooltip.d.ts.map +1 -0
- package/dist/components/input/atContextItems.d.ts +9 -0
- package/dist/components/input/atContextItems.d.ts.map +1 -0
- package/dist/components/input/atContextToolHints.d.ts +2 -0
- package/dist/components/input/atContextToolHints.d.ts.map +1 -0
- package/dist/components/message/MessageBubble.d.ts +69 -0
- package/dist/components/message/MessageBubble.d.ts.map +1 -0
- package/dist/components/message/PartsRenderer.d.ts +22 -0
- package/dist/components/message/PartsRenderer.d.ts.map +1 -0
- package/dist/components/message/WelcomeMessage.d.ts +16 -0
- package/dist/components/message/WelcomeMessage.d.ts.map +1 -0
- package/dist/components/message/parts/CollapsibleCard.d.ts +29 -0
- package/dist/components/message/parts/CollapsibleCard.d.ts.map +1 -0
- package/dist/components/message/parts/CompactPart.d.ts +14 -0
- package/dist/components/message/parts/CompactPart.d.ts.map +1 -0
- package/dist/components/message/parts/ContentCompressPart.d.ts +13 -0
- package/dist/components/message/parts/ContentCompressPart.d.ts.map +1 -0
- package/dist/components/message/parts/ErrorPart.d.ts +10 -0
- package/dist/components/message/parts/ErrorPart.d.ts.map +1 -0
- package/dist/components/message/parts/ExtensionPartHost.d.ts +15 -0
- package/dist/components/message/parts/ExtensionPartHost.d.ts.map +1 -0
- package/dist/components/message/parts/ImagePart.d.ts +9 -0
- package/dist/components/message/parts/ImagePart.d.ts.map +1 -0
- package/dist/components/message/parts/PlanPart.d.ts +11 -0
- package/dist/components/message/parts/PlanPart.d.ts.map +1 -0
- package/dist/components/message/parts/TavilySearchPart.d.ts +18 -0
- package/dist/components/message/parts/TavilySearchPart.d.ts.map +1 -0
- package/dist/components/message/parts/TextPart.d.ts +9 -0
- package/dist/components/message/parts/TextPart.d.ts.map +1 -0
- package/dist/components/message/parts/ThinkingPart.d.ts +12 -0
- package/dist/components/message/parts/ThinkingPart.d.ts.map +1 -0
- package/dist/components/message/parts/ToolCallPart.d.ts +35 -0
- package/dist/components/message/parts/ToolCallPart.d.ts.map +1 -0
- package/dist/components/message/parts/ZhipuSearchPart.d.ts +20 -0
- package/dist/components/message/parts/ZhipuSearchPart.d.ts.map +1 -0
- package/dist/components/message/parts/index.d.ts +20 -0
- package/dist/components/message/parts/index.d.ts.map +1 -0
- package/dist/components/message/parts/tool-call-display.d.ts +26 -0
- package/dist/components/message/parts/tool-call-display.d.ts.map +1 -0
- package/dist/components/message/parts/visual-predicate.d.ts +7 -0
- package/dist/components/message/parts/visual-predicate.d.ts.map +1 -0
- package/dist/components/message/parts/visual-render.d.ts +2 -0
- package/dist/components/message/parts/visual-render.d.ts.map +1 -0
- package/dist/components/message/parts/visual.d.ts +3 -0
- package/dist/components/message/parts/visual.d.ts.map +1 -0
- package/dist/components/message/welcome-types.d.ts +28 -0
- package/dist/components/message/welcome-types.d.ts.map +1 -0
- package/dist/context/AutoRunConfigContext.d.ts +8 -0
- package/dist/context/AutoRunConfigContext.d.ts.map +1 -0
- package/dist/context/ChatAdapterContext.d.ts +4 -0
- package/dist/context/ChatAdapterContext.d.ts.map +1 -0
- package/dist/context/ChatInputContext.d.ts +51 -0
- package/dist/context/ChatInputContext.d.ts.map +1 -0
- package/dist/context/PartLoaderContext.d.ts +25 -0
- package/dist/context/PartLoaderContext.d.ts.map +1 -0
- package/dist/context/RenderersContext.d.ts +22 -0
- package/dist/context/RenderersContext.d.ts.map +1 -0
- package/dist/hooks/chat/types.d.ts +109 -0
- package/dist/hooks/chat/types.d.ts.map +1 -0
- package/dist/hooks/chat/useCapabilityConfig.d.ts +35 -0
- package/dist/hooks/chat/useCapabilityConfig.d.ts.map +1 -0
- package/dist/hooks/chat/useMessageActions.d.ts +13 -0
- package/dist/hooks/chat/useMessageActions.d.ts.map +1 -0
- package/dist/hooks/chat/useMessageSender.d.ts +15 -0
- package/dist/hooks/chat/useMessageSender.d.ts.map +1 -0
- package/dist/hooks/chat/useSessionManager.d.ts +18 -0
- package/dist/hooks/chat/useSessionManager.d.ts.map +1 -0
- package/dist/hooks/chat/utils.d.ts +20 -0
- package/dist/hooks/chat/utils.d.ts.map +1 -0
- package/dist/hooks/useChat.d.ts +105 -0
- package/dist/hooks/useChat.d.ts.map +1 -0
- package/dist/hooks/useImageUpload.d.ts +56 -0
- package/dist/hooks/useImageUpload.d.ts.map +1 -0
- package/dist/hooks/useVoiceInput.d.ts +26 -0
- package/dist/hooks/useVoiceInput.d.ts.map +1 -0
- package/dist/hooks/useVoiceToTextInput.d.ts +22 -0
- package/dist/hooks/useVoiceToTextInput.d.ts.map +1 -0
- package/dist/icons.d.ts +2 -0
- package/dist/icons.d.ts.map +1 -0
- package/dist/index.d.ts +55 -684
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -1
- package/dist/style.css +103 -0
- package/dist/types/index.d.ts +251 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/utils/applyToolCallResult.d.ts +8 -0
- package/dist/utils/applyToolCallResult.d.ts.map +1 -0
- package/dist/utils/applyToolCallResult.test.d.ts +2 -0
- package/dist/utils/applyToolCallResult.test.d.ts.map +1 -0
- package/package.json +19 -11
- package/dist/KaTeX_AMS-Regular-CYEKBG2K.woff +0 -0
- package/dist/KaTeX_AMS-Regular-JKX5W2C4.ttf +0 -0
- package/dist/KaTeX_AMS-Regular-U6PRYMIZ.woff2 +0 -0
- package/dist/KaTeX_Caligraphic-Bold-5QL5CMTE.woff2 +0 -0
- package/dist/KaTeX_Caligraphic-Bold-WZ3QSGD3.woff +0 -0
- package/dist/KaTeX_Caligraphic-Bold-ZTS3R3HK.ttf +0 -0
- package/dist/KaTeX_Caligraphic-Regular-3LKEU76G.woff +0 -0
- package/dist/KaTeX_Caligraphic-Regular-A7XRTZ5Q.ttf +0 -0
- package/dist/KaTeX_Caligraphic-Regular-KX5MEWCF.woff2 +0 -0
- package/dist/KaTeX_Fraktur-Bold-2QVFK6NQ.woff2 +0 -0
- package/dist/KaTeX_Fraktur-Bold-T4SWXBMT.woff +0 -0
- package/dist/KaTeX_Fraktur-Bold-WGHVTYOR.ttf +0 -0
- package/dist/KaTeX_Fraktur-Regular-2PEIFJSJ.woff2 +0 -0
- package/dist/KaTeX_Fraktur-Regular-5U4OPH2X.ttf +0 -0
- package/dist/KaTeX_Fraktur-Regular-PQMHCIK6.woff +0 -0
- package/dist/KaTeX_Main-Bold-2GA4IZIN.woff +0 -0
- package/dist/KaTeX_Main-Bold-W5FBVCZM.ttf +0 -0
- package/dist/KaTeX_Main-Bold-YP5VVQRP.woff2 +0 -0
- package/dist/KaTeX_Main-BoldItalic-4P4C7HJH.woff +0 -0
- package/dist/KaTeX_Main-BoldItalic-N4V3DX7S.woff2 +0 -0
- package/dist/KaTeX_Main-BoldItalic-ODMLBJJQ.ttf +0 -0
- package/dist/KaTeX_Main-Italic-I43T2HSR.ttf +0 -0
- package/dist/KaTeX_Main-Italic-RELBIK7M.woff2 +0 -0
- package/dist/KaTeX_Main-Italic-SASNQFN2.woff +0 -0
- package/dist/KaTeX_Main-Regular-ARRPAO67.woff2 +0 -0
- package/dist/KaTeX_Main-Regular-P5I74A2A.woff +0 -0
- package/dist/KaTeX_Main-Regular-W74P5G27.ttf +0 -0
- package/dist/KaTeX_Math-BoldItalic-6EBV3DK5.woff +0 -0
- package/dist/KaTeX_Math-BoldItalic-K4WTGH3J.woff2 +0 -0
- package/dist/KaTeX_Math-BoldItalic-VB447A4D.ttf +0 -0
- package/dist/KaTeX_Math-Italic-6KGCHLFN.woff2 +0 -0
- package/dist/KaTeX_Math-Italic-KKK3USB2.woff +0 -0
- package/dist/KaTeX_Math-Italic-SON4MRCA.ttf +0 -0
- package/dist/KaTeX_SansSerif-Bold-RRNVJFFW.woff2 +0 -0
- package/dist/KaTeX_SansSerif-Bold-STQ6RXC7.ttf +0 -0
- package/dist/KaTeX_SansSerif-Bold-X5M5EMOD.woff +0 -0
- package/dist/KaTeX_SansSerif-Italic-HMPFTM52.woff2 +0 -0
- package/dist/KaTeX_SansSerif-Italic-PSN4QKYX.woff +0 -0
- package/dist/KaTeX_SansSerif-Italic-WTBAZBGY.ttf +0 -0
- package/dist/KaTeX_SansSerif-Regular-2TL3USAE.ttf +0 -0
- package/dist/KaTeX_SansSerif-Regular-OQCII6EP.woff +0 -0
- package/dist/KaTeX_SansSerif-Regular-XIQ62X4E.woff2 +0 -0
- package/dist/KaTeX_Script-Regular-72OLXYNA.ttf +0 -0
- package/dist/KaTeX_Script-Regular-A5IFOEBS.woff +0 -0
- package/dist/KaTeX_Script-Regular-APUWIHLP.woff2 +0 -0
- package/dist/KaTeX_Size1-Regular-4HRHTS65.woff +0 -0
- package/dist/KaTeX_Size1-Regular-5LRUTBFT.woff2 +0 -0
- package/dist/KaTeX_Size1-Regular-7K6AASVL.ttf +0 -0
- package/dist/KaTeX_Size2-Regular-222HN3GT.ttf +0 -0
- package/dist/KaTeX_Size2-Regular-K5ZHAIS6.woff +0 -0
- package/dist/KaTeX_Size2-Regular-LELKET5D.woff2 +0 -0
- package/dist/KaTeX_Size3-Regular-TLFPAHDE.woff +0 -0
- package/dist/KaTeX_Size3-Regular-UFCO6WCA.ttf +0 -0
- package/dist/KaTeX_Size3-Regular-WQRQ47UD.woff2 +0 -0
- package/dist/KaTeX_Size4-Regular-7PGNVPQK.ttf +0 -0
- package/dist/KaTeX_Size4-Regular-CDMV7U5C.woff2 +0 -0
- package/dist/KaTeX_Size4-Regular-PKMWZHNC.woff +0 -0
- package/dist/KaTeX_Typewriter-Regular-3F5K6SQ6.ttf +0 -0
- package/dist/KaTeX_Typewriter-Regular-MJMFSK64.woff +0 -0
- package/dist/KaTeX_Typewriter-Regular-VBYJ4NRC.woff2 +0 -0
- package/dist/index.css +0 -4017
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PartLoaderContext.d.ts","sourceRoot":"","sources":["../../src/context/PartLoaderContext.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,SAAS,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAA;AAE1E,mCAAmC;AACnC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,MAAM,cAAc,GAAG,CAC3B,IAAI,EAAE,MAAM,KACT,OAAO,CAAC,MAAM,GAAG,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAC,CAAA;AAE3D;;;GAGG;AACH,eAAO,MAAM,iBAAiB,qDAAuD,CAAA;AACrF,eAAO,MAAM,qBAAqB,0DAA4D,CAAA;AAE9F,wBAAgB,aAAa,IAAI,cAAc,GAAG,SAAS,CAE1D;AAED,wBAAgB,iBAAiB,IAAI,WAAW,CAAC,MAAM,CAAC,GAAG,SAAS,CAEnE;AAED,UAAU,uBAAuB;IAC/B,KAAK,EAAE,cAAc,CAAA;IACrB,UAAU,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAChC,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,+CAA+C;AAC/C,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CAI1D,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Part 渲染器上下文
|
|
3
|
+
* 用于注入自定义 Part 类型渲染器(如 weather, stock 等)
|
|
4
|
+
*/
|
|
5
|
+
import { type ComponentType, type ReactNode, type FC } from 'react';
|
|
6
|
+
/** Part 渲染器 Props(每个自定义渲染器接收的 props) */
|
|
7
|
+
export interface PartRendererProps {
|
|
8
|
+
[key: string]: unknown;
|
|
9
|
+
}
|
|
10
|
+
/** Part 渲染器映射(key: part.type, value: 渲染组件) */
|
|
11
|
+
export type PartRenderers = Record<string, ComponentType<PartRendererProps>>;
|
|
12
|
+
/** Part 渲染器上下文 */
|
|
13
|
+
export declare const PartRenderersContext: import("react").Context<PartRenderers>;
|
|
14
|
+
/** Part 渲染器 Provider Props */
|
|
15
|
+
interface PartRenderersProviderProps {
|
|
16
|
+
partRenderers?: PartRenderers;
|
|
17
|
+
children: ReactNode;
|
|
18
|
+
}
|
|
19
|
+
/** Part 渲染器 Provider */
|
|
20
|
+
export declare const PartRenderersProvider: FC<PartRenderersProviderProps>;
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=RenderersContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RenderersContext.d.ts","sourceRoot":"","sources":["../../src/context/RenderersContext.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAiB,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,KAAK,EAAE,EAAE,MAAM,OAAO,CAAA;AAElF,wCAAwC;AACxC,MAAM,WAAW,iBAAiB;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,8CAA8C;AAC9C,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAA;AAE5E,kBAAkB;AAClB,eAAO,MAAM,oBAAoB,wCAAmC,CAAA;AAEpE,8BAA8B;AAC9B,UAAU,0BAA0B;IAClC,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED,wBAAwB;AACxB,eAAO,MAAM,qBAAqB,EAAE,EAAE,CAAC,0BAA0B,CAShE,CAAA"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 聊天模块内部共享类型(React 版)
|
|
3
|
+
*/
|
|
4
|
+
import type { MutableRefObject, Dispatch, SetStateAction } from 'react';
|
|
5
|
+
import type { ChatAdapter, ChatMode, SessionRecord, AutoRunConfig, ChatCapabilityExtensionGroup } from '@huyooo/ai-chat-bridge-electron/renderer';
|
|
6
|
+
import type { AtContextItem, ChatEvent, ChatHistoryMessage } from '@huyooo/ai-chat-types';
|
|
7
|
+
import type { ChatMessage } from '../../types';
|
|
8
|
+
/** 排队中的消息 */
|
|
9
|
+
export interface QueuedMessage {
|
|
10
|
+
id: string;
|
|
11
|
+
text: string;
|
|
12
|
+
images?: string[];
|
|
13
|
+
atContextItems?: AtContextItem[];
|
|
14
|
+
}
|
|
15
|
+
/** 会话状态 - 每个会话独立的状态 */
|
|
16
|
+
export interface SessionState {
|
|
17
|
+
messages: ChatMessage[];
|
|
18
|
+
hasMoreHistory: boolean;
|
|
19
|
+
oldestLoadedSequence: number | null;
|
|
20
|
+
isLoadingHistory: boolean;
|
|
21
|
+
isLoading: boolean;
|
|
22
|
+
abortController: AbortController | null;
|
|
23
|
+
activeAssistantMessageId: string | null;
|
|
24
|
+
queuedMessages: QueuedMessage[];
|
|
25
|
+
}
|
|
26
|
+
/** 工具 UI 声明 */
|
|
27
|
+
export interface ToolUI {
|
|
28
|
+
type: 'render' | 'action';
|
|
29
|
+
name: string;
|
|
30
|
+
props?: Record<string, unknown>;
|
|
31
|
+
renderOnResultOnly?: boolean;
|
|
32
|
+
}
|
|
33
|
+
/** 工具完成事件数据 */
|
|
34
|
+
export interface ToolCompleteEvent {
|
|
35
|
+
name: string;
|
|
36
|
+
result: unknown;
|
|
37
|
+
ui?: ToolUI;
|
|
38
|
+
}
|
|
39
|
+
export type ToolApprovalPendingEvent = Extract<ChatEvent, {
|
|
40
|
+
type: 'tool_approval_request';
|
|
41
|
+
}>['data'];
|
|
42
|
+
export interface UseChatOptions {
|
|
43
|
+
adapter: ChatAdapter;
|
|
44
|
+
defaultModel?: string;
|
|
45
|
+
defaultMode?: ChatMode;
|
|
46
|
+
onToolComplete?: (event: ToolCompleteEvent) => void;
|
|
47
|
+
onToolApprovalPending?: (event: ToolApprovalPendingEvent) => void;
|
|
48
|
+
/** 是否启动副作用;用于 ChatPanel 接入外部 runtime 时禁用内部 fallback runtime */
|
|
49
|
+
enabled?: boolean;
|
|
50
|
+
}
|
|
51
|
+
/** compact 压缩缓存数据(streaming 结束后再持久化) */
|
|
52
|
+
export interface PendingCompactData {
|
|
53
|
+
summaryContent: string;
|
|
54
|
+
model?: string;
|
|
55
|
+
tokensBeforeCompact: number;
|
|
56
|
+
compressedTokens: number;
|
|
57
|
+
originalMessageCount: number;
|
|
58
|
+
compressedMessageCount: number;
|
|
59
|
+
duration: number;
|
|
60
|
+
}
|
|
61
|
+
/** 单条消息内容压缩缓存数据 */
|
|
62
|
+
export interface PendingContentCompressData {
|
|
63
|
+
summary: string;
|
|
64
|
+
model?: string;
|
|
65
|
+
originalTokens: number;
|
|
66
|
+
compressedTokens: number;
|
|
67
|
+
duration: number;
|
|
68
|
+
}
|
|
69
|
+
/** streamAssistantResponse 参数 */
|
|
70
|
+
export interface StreamRequestParams {
|
|
71
|
+
sessionId: string;
|
|
72
|
+
state: SessionState;
|
|
73
|
+
userMsgId: string;
|
|
74
|
+
history: ChatHistoryMessage[];
|
|
75
|
+
text: string;
|
|
76
|
+
images?: string[];
|
|
77
|
+
atContextItems?: AtContextItem[];
|
|
78
|
+
/** finally 中是否处理队列(仅 sendMessage 需要) */
|
|
79
|
+
processQueue?: boolean;
|
|
80
|
+
}
|
|
81
|
+
/** 子模块间共享的上下文(React 版:使用 ref + state) */
|
|
82
|
+
export interface ChatContext {
|
|
83
|
+
adapter: ChatAdapter;
|
|
84
|
+
sessionStatesRef: MutableRefObject<Map<string, SessionState>>;
|
|
85
|
+
sessions: SessionRecord[];
|
|
86
|
+
setSessions: Dispatch<SetStateAction<SessionRecord[]>>;
|
|
87
|
+
currentSessionIdRef: MutableRefObject<string | null>;
|
|
88
|
+
currentSessionId: string | null;
|
|
89
|
+
setCurrentSessionId: Dispatch<SetStateAction<string | null>>;
|
|
90
|
+
modeRef: MutableRefObject<ChatMode>;
|
|
91
|
+
modelRef: MutableRefObject<string>;
|
|
92
|
+
webSearchRef: MutableRefObject<boolean>;
|
|
93
|
+
thinkingRef: MutableRefObject<boolean>;
|
|
94
|
+
enabledToolsRef: MutableRefObject<string[] | undefined>;
|
|
95
|
+
autoRunConfigRef: MutableRefObject<AutoRunConfig>;
|
|
96
|
+
capabilityExtensionsRef?: MutableRefObject<ChatCapabilityExtensionGroup[]>;
|
|
97
|
+
/** 确保聊天能力快照已完成首轮加载,避免首次发送时把 undefined 当作全量工具放行 */
|
|
98
|
+
ensureCapabilitiesLoaded?: () => Promise<void>;
|
|
99
|
+
onToolComplete?: (event: ToolCompleteEvent) => void;
|
|
100
|
+
onToolApprovalPending?: (event: ToolApprovalPendingEvent) => void;
|
|
101
|
+
getSessionState: (sessionId: string) => SessionState;
|
|
102
|
+
forceUpdate: () => void;
|
|
103
|
+
/** 配置 state setter(用于切换会话同步配置) */
|
|
104
|
+
setModeState: (v: ChatMode) => void;
|
|
105
|
+
setModelState: (v: string) => void;
|
|
106
|
+
setWebSearchState: (v: boolean) => void;
|
|
107
|
+
setThinkingState: (v: boolean) => void;
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/hooks/chat/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ChatAdapter, AutoRunConfig, ChatCapabilityExtensionGroup } from '@huyooo/ai-chat-bridge-electron/renderer';
|
|
2
|
+
import type { SkillEnabledItem } from '@huyooo/ai-chat-types';
|
|
3
|
+
import type { AssetSource } from '@huyooo/ai-chat-core';
|
|
4
|
+
export declare function useCapabilityConfig(adapter: ChatAdapter, enabled?: boolean): {
|
|
5
|
+
autoRunConfig: AutoRunConfig;
|
|
6
|
+
autoRunConfigRef: import("react").MutableRefObject<AutoRunConfig>;
|
|
7
|
+
loadAutoRunConfig: () => Promise<void>;
|
|
8
|
+
saveAutoRunConfig: (config: AutoRunConfig) => Promise<void>;
|
|
9
|
+
enabledTools: string[] | undefined;
|
|
10
|
+
enabledToolsRef: import("react").MutableRefObject<string[] | undefined>;
|
|
11
|
+
capabilityExtensions: ChatCapabilityExtensionGroup[];
|
|
12
|
+
capabilityExtensionsRef: import("react").MutableRefObject<ChatCapabilityExtensionGroup[]>;
|
|
13
|
+
loadCapabilities: (force?: boolean) => Promise<void>;
|
|
14
|
+
ensureCapabilitiesLoaded: () => Promise<void>;
|
|
15
|
+
setToolsChatEnabled: (items: Array<{
|
|
16
|
+
alias: string;
|
|
17
|
+
enabled: boolean;
|
|
18
|
+
}>) => Promise<void>;
|
|
19
|
+
setMcpToolsChatEnabled: (items: Array<{
|
|
20
|
+
alias: string;
|
|
21
|
+
enabled: boolean;
|
|
22
|
+
}>) => Promise<void>;
|
|
23
|
+
setSkillsChatEnabled: (items: SkillEnabledItem[]) => Promise<void>;
|
|
24
|
+
setExtensionEnabled: (payload: {
|
|
25
|
+
id: string;
|
|
26
|
+
enabled: boolean;
|
|
27
|
+
source: AssetSource;
|
|
28
|
+
}) => Promise<{
|
|
29
|
+
ok: true;
|
|
30
|
+
} | {
|
|
31
|
+
ok: false;
|
|
32
|
+
error: string;
|
|
33
|
+
}>;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=useCapabilityConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCapabilityConfig.d.ts","sourceRoot":"","sources":["../../../src/hooks/chat/useCapabilityConfig.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EAGb,4BAA4B,EAC7B,MAAM,0CAA0C,CAAA;AACjD,OAAO,KAAK,EAGV,gBAAgB,EACjB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AA0GvD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,GAAE,OAAc;;;;gCAyD1B,aAAa;;;;;+BAoHf,OAAO;;iCArDJ,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;oCAcvC,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;kCAc5C,gBAAgB,EAAE;mCAUjB;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,WAAW,CAAA;KAAE;;;;;;EAuE9G"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 消息操作模块(轻操作,React 版)
|
|
3
|
+
* 包含取消、复制、工作目录设置
|
|
4
|
+
* 发送/重发等流式操作统一在 useMessageSender 中
|
|
5
|
+
*/
|
|
6
|
+
import type { ChatContext } from './types';
|
|
7
|
+
export declare function useMessageActions(ctx: ChatContext): {
|
|
8
|
+
cancelRequest: () => void;
|
|
9
|
+
retryToolCall: (messageId: string, toolCallId: string) => Promise<void>;
|
|
10
|
+
copyMessage: (messageId: string) => Promise<void>;
|
|
11
|
+
setWorkingDirectory: (dir: string) => void;
|
|
12
|
+
};
|
|
13
|
+
//# sourceMappingURL=useMessageActions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMessageActions.d.ts","sourceRoot":"","sources":["../../../src/hooks/chat/useMessageActions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgBH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAK1C,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW;;+BAyFI,MAAM,cAAc,MAAM;6BAvC5B,MAAM;+BAiCV,MAAM;EAkFrD"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 消息发送核心逻辑(React 版)
|
|
3
|
+
* 包含消息保存、事件处理、流式消息发送、重发/分叉、队列管理
|
|
4
|
+
*/
|
|
5
|
+
import type { AtContextItem } from '@huyooo/ai-chat-types';
|
|
6
|
+
import type { ChatContext } from './types';
|
|
7
|
+
export declare function useMessageSender(ctx: ChatContext): {
|
|
8
|
+
sendMessage: (text: string, images?: string[], atContextItems?: AtContextItem[]) => Promise<void>;
|
|
9
|
+
resendFromIndex: (index: number, text: string, atContextItems?: AtContextItem[]) => Promise<void>;
|
|
10
|
+
regenerateMessage: (messageIndex: number) => void;
|
|
11
|
+
removeQueuedMessage: (messageId: string) => void;
|
|
12
|
+
editQueuedMessage: (messageId: string, newText: string) => void;
|
|
13
|
+
clearQueuedMessages: () => void;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=useMessageSender.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMessageSender.d.ts","sourceRoot":"","sources":["../../../src/hooks/chat/useMessageSender.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAa1D,OAAO,KAAK,EACV,WAAW,EAIZ,MAAM,SAAS,CAAA;AAmBhB,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,WAAW;wBAmrBF,MAAM,WAAW,MAAM,EAAE,mBAAmB,aAAa,EAAE;6BAoFtD,MAAM,QAAQ,MAAM,mBAAmB,aAAa,EAAE;sCAkDnD,MAAM;qCAeP,MAAM;mCASR,MAAM,WAAW,MAAM;;EA0B1E"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 会话管理模块(React 版)
|
|
3
|
+
* 包含会话的增删改查、切换、导出等操作
|
|
4
|
+
*/
|
|
5
|
+
import type { ChatContext } from './types';
|
|
6
|
+
export declare function useSessionManager(ctx: ChatContext): {
|
|
7
|
+
loadSessions: () => Promise<void>;
|
|
8
|
+
switchSession: (sessionId: string) => Promise<void>;
|
|
9
|
+
loadOlderMessages: () => Promise<void>;
|
|
10
|
+
createNewSession: () => Promise<import("@huyooo/ai-chat-types").SessionRecord | null>;
|
|
11
|
+
deleteSession: (sessionId: string) => Promise<void>;
|
|
12
|
+
deleteCurrentSession: () => Promise<void>;
|
|
13
|
+
hideSession: (sessionId: string, hidden: boolean) => Promise<void>;
|
|
14
|
+
clearAllSessions: () => Promise<void>;
|
|
15
|
+
hideOtherSessions: () => Promise<void>;
|
|
16
|
+
exportCurrentSession: () => string | null;
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=useSessionManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSessionManager.d.ts","sourceRoot":"","sources":["../../../src/hooks/chat/useSessionManager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAM1C,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,WAAW;;+BA+DI,MAAM;;;+BAwFN,MAAM;;6BAsCR,MAAM,UAAU,OAAO;;;gCAkD5B,MAAM,GAAG,IAAI;EAyC3D"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 聊天工具函数
|
|
3
|
+
*
|
|
4
|
+
* 框架无关的纯函数从 @huyooo/ai-chat-shared 导入(Vue/React 共享)
|
|
5
|
+
* 事件类型从 @huyooo/ai-chat-types 导入
|
|
6
|
+
* 此文件仅保留依赖前端 UI 类型的函数
|
|
7
|
+
*/
|
|
8
|
+
import type { MessagePartInput, MessageRecord } from '@huyooo/ai-chat-bridge-electron/renderer';
|
|
9
|
+
import type { ChatMessage, ContentPart } from '../../types';
|
|
10
|
+
export type { FrontendChatEvent as ChatEvent } from '@huyooo/ai-chat-types';
|
|
11
|
+
export { shouldSaveEvent } from '@huyooo/ai-chat-types';
|
|
12
|
+
export { hasSkipped, hasCancelled, AT_LINE_RE, stripAtContextLines, extractAtContextRefs, buildPromptWithAtContext, computeAtContextBudget, generateId, extractToolGovernance, mergeToolGovernance, } from '@huyooo/ai-chat-shared';
|
|
13
|
+
/** 获取消息的纯文本内容 */
|
|
14
|
+
export declare function extractTextContent(parts: ContentPart[]): string;
|
|
15
|
+
/** 提取消息内容,优先使用已完成的压缩摘要 */
|
|
16
|
+
export declare function extractMessageContent(parts: ContentPart[]): string;
|
|
17
|
+
export declare function serializeMessageParts(parts: ContentPart[]): MessagePartInput[];
|
|
18
|
+
/** 转换存储的消息为显示格式 */
|
|
19
|
+
export declare function convertToMessage(record: MessageRecord): ChatMessage;
|
|
20
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/hooks/chat/utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAA;AAC/F,OAAO,KAAK,EACV,WAAW,EACX,WAAW,EAGZ,MAAM,aAAa,CAAA;AAIpB,YAAY,EAAE,iBAAiB,IAAI,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAEvD,OAAO,EACL,UAAU,EACV,YAAY,EACZ,UAAU,EACV,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,EACtB,UAAU,EACV,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,wBAAwB,CAAA;AAI/B,iBAAiB;AACjB,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAK/D;AAED,0BAA0B;AAC1B,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAOlE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,gBAAgB,EAAE,CAK9E;AAED,mBAAmB;AACnB,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,CA2DnE"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useChat Hook — 组合入口
|
|
3
|
+
* 管理聊天状态和与后端的通信
|
|
4
|
+
*
|
|
5
|
+
* 架构:
|
|
6
|
+
* - 使用 Map 存储每个会话的独立状态
|
|
7
|
+
* - 多会话可同时进行,互不干扰
|
|
8
|
+
* - 切换 tab 不会停止正在进行的请求
|
|
9
|
+
* - ContentPart 数组存储消息内容,支持流式渲染和自定义 UI
|
|
10
|
+
*
|
|
11
|
+
* 拆分模块:
|
|
12
|
+
* - chat/utils.ts 纯工具函数(无框架依赖)
|
|
13
|
+
* - chat/types.ts 内部共享类型
|
|
14
|
+
* - chat/useCapabilityConfig.ts 聊天能力配置
|
|
15
|
+
* - chat/useSessionManager.ts 会话管理
|
|
16
|
+
* - chat/useMessageSender.ts 消息发送核心逻辑
|
|
17
|
+
* - chat/useMessageActions.ts 消息操作
|
|
18
|
+
*/
|
|
19
|
+
import type { ChatMode, SessionRecord } from '@huyooo/ai-chat-bridge-electron/renderer';
|
|
20
|
+
export type { QueuedMessage, ToolUI, ToolCompleteEvent, UseChatOptions } from './chat/types';
|
|
21
|
+
import type { UseChatOptions, SessionState } from './chat/types';
|
|
22
|
+
import type { ChatMessage, ContentPart } from '../types';
|
|
23
|
+
/**
|
|
24
|
+
* 聊天状态管理 Hook
|
|
25
|
+
*
|
|
26
|
+
* 核心架构:
|
|
27
|
+
* - sessionStatesRef: Map<sessionId, SessionState> 存储每个会话的独立状态
|
|
28
|
+
* - 多会话可同时进行请求,互不干扰
|
|
29
|
+
* - 切换 tab 不会停止任何正在进行的请求
|
|
30
|
+
*/
|
|
31
|
+
export declare function useChat(options: UseChatOptions): {
|
|
32
|
+
sessions: SessionRecord[];
|
|
33
|
+
currentSessionId: string | null;
|
|
34
|
+
messages: ChatMessage[];
|
|
35
|
+
isLoading: boolean;
|
|
36
|
+
hasMoreHistory: boolean;
|
|
37
|
+
isLoadingHistory: boolean;
|
|
38
|
+
sessionStates: Map<string, SessionState>;
|
|
39
|
+
mode: ChatMode;
|
|
40
|
+
model: string;
|
|
41
|
+
webSearch: boolean;
|
|
42
|
+
thinking: boolean;
|
|
43
|
+
loadSessions: () => Promise<void>;
|
|
44
|
+
switchSession: (sessionId: string) => Promise<void>;
|
|
45
|
+
loadOlderMessages: () => Promise<void>;
|
|
46
|
+
createNewSession: () => Promise<SessionRecord | null>;
|
|
47
|
+
deleteSession: (sessionId: string) => Promise<void>;
|
|
48
|
+
deleteCurrentSession: () => Promise<void>;
|
|
49
|
+
hideSession: (sessionId: string, hidden: boolean) => Promise<void>;
|
|
50
|
+
clearAllSessions: () => Promise<void>;
|
|
51
|
+
hideOtherSessions: () => Promise<void>;
|
|
52
|
+
exportCurrentSession: () => string | null;
|
|
53
|
+
sendMessage: (text: string, images?: string[], atContextItems?: import("@huyooo/ai-chat-types").AtContextItem[]) => Promise<void>;
|
|
54
|
+
appendAssistantMessage: (input: {
|
|
55
|
+
parts: ContentPart[];
|
|
56
|
+
content?: string;
|
|
57
|
+
timestamp?: number;
|
|
58
|
+
model?: string;
|
|
59
|
+
mode?: ChatMode;
|
|
60
|
+
webSearchEnabled?: boolean;
|
|
61
|
+
thinkingEnabled?: boolean;
|
|
62
|
+
}) => Promise<ChatMessage>;
|
|
63
|
+
cancelRequest: () => void;
|
|
64
|
+
copyMessage: (messageId: string) => Promise<void>;
|
|
65
|
+
retryToolCall: (messageId: string, toolCallId: string) => Promise<void>;
|
|
66
|
+
regenerateMessage: (messageIndex: number) => void;
|
|
67
|
+
resendFromIndex: (index: number, text: string, atContextItems?: import("@huyooo/ai-chat-types").AtContextItem[]) => Promise<void>;
|
|
68
|
+
queuedMessages: import("./useChat").QueuedMessage[];
|
|
69
|
+
removeQueuedMessage: (messageId: string) => void;
|
|
70
|
+
editQueuedMessage: (messageId: string, newText: string) => void;
|
|
71
|
+
clearQueuedMessages: () => void;
|
|
72
|
+
setMode: (value: ChatMode) => void;
|
|
73
|
+
setModel: (value: string) => void;
|
|
74
|
+
setWebSearch: (value: boolean) => void;
|
|
75
|
+
setThinking: (value: boolean) => void;
|
|
76
|
+
setWorkingDirectory: (dir: string) => void;
|
|
77
|
+
autoRunConfig: import("@huyooo/ai-chat-core").AutoRunConfig;
|
|
78
|
+
loadAutoRunConfig: () => Promise<void>;
|
|
79
|
+
saveAutoRunConfig: (config: import("@huyooo/ai-chat-core").AutoRunConfig) => Promise<void>;
|
|
80
|
+
enabledTools: string[] | undefined;
|
|
81
|
+
capabilityExtensions: import("@huyooo/ai-chat-types").ChatCapabilityExtensionGroup[];
|
|
82
|
+
loadCapabilities: (force?: boolean) => Promise<void>;
|
|
83
|
+
reloadCapabilities: () => Promise<void>;
|
|
84
|
+
setToolsChatEnabled: (items: Array<{
|
|
85
|
+
alias: string;
|
|
86
|
+
enabled: boolean;
|
|
87
|
+
}>) => Promise<void>;
|
|
88
|
+
setMcpToolsChatEnabled: (items: Array<{
|
|
89
|
+
alias: string;
|
|
90
|
+
enabled: boolean;
|
|
91
|
+
}>) => Promise<void>;
|
|
92
|
+
setSkillsChatEnabled: (items: import("@huyooo/ai-chat-types").SkillEnabledItem[]) => Promise<void>;
|
|
93
|
+
setExtensionEnabled: (payload: {
|
|
94
|
+
id: string;
|
|
95
|
+
enabled: boolean;
|
|
96
|
+
source: import("@huyooo/ai-chat-core").AssetSource;
|
|
97
|
+
}) => Promise<{
|
|
98
|
+
ok: true;
|
|
99
|
+
} | {
|
|
100
|
+
ok: false;
|
|
101
|
+
error: string;
|
|
102
|
+
}>;
|
|
103
|
+
};
|
|
104
|
+
export type ChatRuntime = ReturnType<typeof useChat>;
|
|
105
|
+
//# sourceMappingURL=useChat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useChat.d.ts","sourceRoot":"","sources":["../../src/hooks/useChat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,KAAK,EACV,QAAQ,EACR,aAAa,EACd,MAAM,0CAA0C,CAAA;AAUjD,YAAY,EAAE,aAAa,EAAE,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC5F,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAe,MAAM,cAAc,CAAA;AAC7E,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAIxD;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc;;;;;;;;;;;;;;;;;;;;;;;oCA8HY;QACvD,KAAK,EAAE,WAAW,EAAE,CAAA;QACpB,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,IAAI,CAAC,EAAE,QAAQ,CAAA;QACf,gBAAgB,CAAC,EAAE,OAAO,CAAA;QAC1B,eAAe,CAAC,EAAE,OAAO,CAAA;KAC1B,KAAG,OAAO,CAAC,WAAW,CAAC;;;;;;;;;;qBAmFL,QAAQ;sBAQP,MAAM;0BAQF,OAAO;yBAQR,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8B/B;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAA"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 图片上传 hook
|
|
3
|
+
* 处理图片选择、粘贴、拖拽、预览等功能
|
|
4
|
+
* 与 Vue 版本 useImageUpload.ts 保持一致
|
|
5
|
+
*/
|
|
6
|
+
/** 内部图片数据结构(包含预览用的 dataUrl) */
|
|
7
|
+
export interface ImageItem {
|
|
8
|
+
dataUrl: string;
|
|
9
|
+
base64: string;
|
|
10
|
+
mimeType: string;
|
|
11
|
+
}
|
|
12
|
+
/** 导出给外部使用的图片数据格式 */
|
|
13
|
+
export interface ImageData {
|
|
14
|
+
base64: string;
|
|
15
|
+
mimeType: string;
|
|
16
|
+
}
|
|
17
|
+
/** useImageUpload 配置项 */
|
|
18
|
+
interface UseImageUploadOptions {
|
|
19
|
+
/** 最大图片数量,默认 5 */
|
|
20
|
+
maxImages?: number;
|
|
21
|
+
/** 单张图片最大大小(字节),默认 10MB */
|
|
22
|
+
maxSize?: number;
|
|
23
|
+
/** 图片最大宽度,默认 4000px(避免超过 API 像素限制) */
|
|
24
|
+
maxWidth?: number;
|
|
25
|
+
/** 图片最大高度,默认 4000px(避免超过 API 像素限制) */
|
|
26
|
+
maxHeight?: number;
|
|
27
|
+
/** 压缩质量 0-1,默认 0.85 */
|
|
28
|
+
quality?: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 图片上传 hook
|
|
32
|
+
* @param options 配置项
|
|
33
|
+
*/
|
|
34
|
+
export declare function useImageUpload(options?: UseImageUploadOptions): {
|
|
35
|
+
images: ImageItem[];
|
|
36
|
+
isDragOver: boolean;
|
|
37
|
+
previewVisible: boolean;
|
|
38
|
+
previewIndex: number;
|
|
39
|
+
setPreviewIndex: import("react").Dispatch<import("react").SetStateAction<number>>;
|
|
40
|
+
imageUrls: string[];
|
|
41
|
+
imageData: ImageData[];
|
|
42
|
+
hasImages: boolean;
|
|
43
|
+
handleImageSelect: (event: React.ChangeEvent<HTMLInputElement>) => void;
|
|
44
|
+
handlePaste: (event: React.ClipboardEvent) => void;
|
|
45
|
+
handleDragOver: (event: React.DragEvent) => void;
|
|
46
|
+
handleDragLeave: () => void;
|
|
47
|
+
handleDrop: (event: React.DragEvent) => void;
|
|
48
|
+
openPreview: (index: number) => void;
|
|
49
|
+
closePreview: () => void;
|
|
50
|
+
removeImage: (index: number) => void;
|
|
51
|
+
clearImages: () => void;
|
|
52
|
+
addImages: (files: File[]) => void;
|
|
53
|
+
initImages: (data: string[]) => void;
|
|
54
|
+
};
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=useImageUpload.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useImageUpload.d.ts","sourceRoot":"","sources":["../../src/hooks/useImageUpload.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,+BAA+B;AAC/B,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAqB;AACrB,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,yBAAyB;AACzB,UAAU,qBAAqB;IAC7B,kBAAkB;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uBAAuB;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B;;;;;;;;;+BA2ItD,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC;yBAenC,KAAK,CAAC,cAAc;4BAuBa,KAAK,CAAC,SAAS;;wBAkBhD,KAAK,CAAC,SAAS;yBAee,MAAM;;yBAeN,MAAM;;uBAepC,IAAI,EAAE;uBAUsB,MAAM,EAAE;EAuD/C"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 语音输入 hook(React)
|
|
3
|
+
*
|
|
4
|
+
* 浏览器录音 + Electron bridge ASR(WebSocket)实时转写。
|
|
5
|
+
* 与 Vue 版本 useVoiceInput.ts 逻辑保持一致,但使用 React state。
|
|
6
|
+
*/
|
|
7
|
+
import type { ChatAdapter } from '@huyooo/ai-chat-bridge-electron/renderer';
|
|
8
|
+
export type VoiceInputStatus = 'idle' | 'connecting' | 'recording' | 'processing' | 'error';
|
|
9
|
+
export interface VoiceInputConfig {
|
|
10
|
+
sampleRate?: number;
|
|
11
|
+
sendInterval?: number;
|
|
12
|
+
enablePunc?: boolean;
|
|
13
|
+
enableItn?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface UseVoiceInputReturn {
|
|
16
|
+
status: VoiceInputStatus;
|
|
17
|
+
isRecording: boolean;
|
|
18
|
+
currentText: string;
|
|
19
|
+
finalText: string;
|
|
20
|
+
error: string | null;
|
|
21
|
+
start: () => Promise<void>;
|
|
22
|
+
stop: () => Promise<string>;
|
|
23
|
+
cancel: () => void;
|
|
24
|
+
}
|
|
25
|
+
export declare function useVoiceInput(adapter: ChatAdapter | undefined, config?: VoiceInputConfig): UseVoiceInputReturn;
|
|
26
|
+
//# sourceMappingURL=useVoiceInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useVoiceInput.d.ts","sourceRoot":"","sources":["../../src/hooks/useVoiceInput.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,0CAA0C,CAAC;AAE3F,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,YAAY,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,CAAC;AAE5F,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,gBAAgB,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAkID,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,EAAE,MAAM,GAAE,gBAAqB,GAAG,mBAAmB,CAqSlH"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 将语音识别(useVoiceInput)封装成“写入输入框”的高内聚控制层
|
|
3
|
+
* - 处理 prefix(追加模式)
|
|
4
|
+
* - 处理实时同步到 inputText
|
|
5
|
+
* - 处理 Enter:语音中 Enter 停止/取消语音(不发送)
|
|
6
|
+
* - 输出按钮状态/禁用逻辑(ChatInput 只负责渲染)
|
|
7
|
+
*/
|
|
8
|
+
import type { ChatAdapter } from '@huyooo/ai-chat-bridge-electron/renderer';
|
|
9
|
+
export declare function useVoiceToTextInput(opts: {
|
|
10
|
+
adapter: ChatAdapter | undefined;
|
|
11
|
+
inputText: string;
|
|
12
|
+
setInputText: (v: string) => void;
|
|
13
|
+
hasImages: boolean;
|
|
14
|
+
isLoading: boolean;
|
|
15
|
+
}): {
|
|
16
|
+
voiceInput: import("./useVoiceInput").UseVoiceInputReturn;
|
|
17
|
+
isVoiceActive: boolean;
|
|
18
|
+
toggleVoice: () => Promise<void>;
|
|
19
|
+
sendDisabled: boolean;
|
|
20
|
+
handleKeyDownForVoice: (e: React.KeyboardEvent<HTMLTextAreaElement>) => boolean;
|
|
21
|
+
};
|
|
22
|
+
//# sourceMappingURL=useVoiceToTextInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useVoiceToTextInput.d.ts","sourceRoot":"","sources":["../../src/hooks/useVoiceToTextInput.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0CAA0C,CAAC;AAG5E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,OAAO,EAAE,WAAW,GAAG,SAAS,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACpB;;;;;+BA+CO,KAAK,CAAC,aAAa,CAAC,mBAAmB,CAAC;EAmB/C"}
|
package/dist/icons.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.d.ts","sourceRoot":"","sources":["../src/icons.ts"],"names":[],"mappings":"AAuBA,wBAAgB,YAAY,SAI3B"}
|