@unif/react-native-chat-sdk 0.6.1 → 1.0.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 (67) hide show
  1. package/lib/commonjs/hooks/ChatProvider.js +26 -8
  2. package/lib/commonjs/hooks/ChatProvider.js.map +1 -1
  3. package/lib/commonjs/hooks/useXChat.js +76 -32
  4. package/lib/commonjs/hooks/useXChat.js.map +1 -1
  5. package/lib/commonjs/index.js.map +1 -1
  6. package/lib/commonjs/providers/AbstractChatProvider.js +8 -4
  7. package/lib/commonjs/providers/AbstractChatProvider.js.map +1 -1
  8. package/lib/commonjs/providers/DeepSeekChatProvider.js +7 -4
  9. package/lib/commonjs/providers/DeepSeekChatProvider.js.map +1 -1
  10. package/lib/commonjs/providers/OpenAIChatProvider.js +6 -1
  11. package/lib/commonjs/providers/OpenAIChatProvider.js.map +1 -1
  12. package/lib/commonjs/stores/chatStore.js +83 -70
  13. package/lib/commonjs/stores/chatStore.js.map +1 -1
  14. package/lib/module/hooks/ChatProvider.js +26 -8
  15. package/lib/module/hooks/ChatProvider.js.map +1 -1
  16. package/lib/module/hooks/useXChat.js +77 -33
  17. package/lib/module/hooks/useXChat.js.map +1 -1
  18. package/lib/module/index.js.map +1 -1
  19. package/lib/module/providers/AbstractChatProvider.js +8 -4
  20. package/lib/module/providers/AbstractChatProvider.js.map +1 -1
  21. package/lib/module/providers/DeepSeekChatProvider.js +7 -4
  22. package/lib/module/providers/DeepSeekChatProvider.js.map +1 -1
  23. package/lib/module/providers/OpenAIChatProvider.js +6 -1
  24. package/lib/module/providers/OpenAIChatProvider.js.map +1 -1
  25. package/lib/module/stores/chatStore.js +83 -68
  26. package/lib/module/stores/chatStore.js.map +1 -1
  27. package/lib/typescript/commonjs/hooks/ChatProvider.d.ts +10 -3
  28. package/lib/typescript/commonjs/hooks/ChatProvider.d.ts.map +1 -1
  29. package/lib/typescript/commonjs/hooks/useXChat.d.ts +10 -4
  30. package/lib/typescript/commonjs/hooks/useXChat.d.ts.map +1 -1
  31. package/lib/typescript/commonjs/index.d.ts +2 -1
  32. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  33. package/lib/typescript/commonjs/providers/AbstractChatProvider.d.ts +6 -6
  34. package/lib/typescript/commonjs/providers/AbstractChatProvider.d.ts.map +1 -1
  35. package/lib/typescript/commonjs/providers/DeepSeekChatProvider.d.ts +3 -2
  36. package/lib/typescript/commonjs/providers/DeepSeekChatProvider.d.ts.map +1 -1
  37. package/lib/typescript/commonjs/providers/OpenAIChatProvider.d.ts +3 -2
  38. package/lib/typescript/commonjs/providers/OpenAIChatProvider.d.ts.map +1 -1
  39. package/lib/typescript/commonjs/stores/chatStore.d.ts +24 -14
  40. package/lib/typescript/commonjs/stores/chatStore.d.ts.map +1 -1
  41. package/lib/typescript/commonjs/types/provider.d.ts +14 -1
  42. package/lib/typescript/commonjs/types/provider.d.ts.map +1 -1
  43. package/lib/typescript/module/hooks/ChatProvider.d.ts +10 -3
  44. package/lib/typescript/module/hooks/ChatProvider.d.ts.map +1 -1
  45. package/lib/typescript/module/hooks/useXChat.d.ts +10 -4
  46. package/lib/typescript/module/hooks/useXChat.d.ts.map +1 -1
  47. package/lib/typescript/module/index.d.ts +2 -1
  48. package/lib/typescript/module/index.d.ts.map +1 -1
  49. package/lib/typescript/module/providers/AbstractChatProvider.d.ts +6 -6
  50. package/lib/typescript/module/providers/AbstractChatProvider.d.ts.map +1 -1
  51. package/lib/typescript/module/providers/DeepSeekChatProvider.d.ts +3 -2
  52. package/lib/typescript/module/providers/DeepSeekChatProvider.d.ts.map +1 -1
  53. package/lib/typescript/module/providers/OpenAIChatProvider.d.ts +3 -2
  54. package/lib/typescript/module/providers/OpenAIChatProvider.d.ts.map +1 -1
  55. package/lib/typescript/module/stores/chatStore.d.ts +24 -14
  56. package/lib/typescript/module/stores/chatStore.d.ts.map +1 -1
  57. package/lib/typescript/module/types/provider.d.ts +14 -1
  58. package/lib/typescript/module/types/provider.d.ts.map +1 -1
  59. package/package.json +1 -1
  60. package/src/hooks/ChatProvider.tsx +34 -17
  61. package/src/hooks/useXChat.ts +111 -65
  62. package/src/index.ts +3 -0
  63. package/src/providers/AbstractChatProvider.ts +17 -9
  64. package/src/providers/DeepSeekChatProvider.ts +5 -6
  65. package/src/providers/OpenAIChatProvider.ts +10 -2
  66. package/src/stores/chatStore.ts +53 -41
  67. package/src/types/provider.ts +19 -1
@@ -11,8 +11,9 @@ import type { ChatMessage } from '../types/message';
11
11
  import type { RequestParams, SSEOutput } from '../types/provider';
12
12
  import type { SuggestionItem } from '../types/sse';
13
13
  import type { ChatStorage } from '../stores/storage';
14
+ import type { StoreMessage } from '../stores/chatStore';
14
15
  import type { AbstractChatProvider } from '../providers/AbstractChatProvider';
15
- export interface ChatProviderProps<Message = ChatMessage, Input = RequestParams<Message>, Output = SSEOutput> {
16
+ export interface ChatProviderProps<Message extends StoreMessage = ChatMessage, Input = RequestParams<Message>, Output = SSEOutput> {
16
17
  provider: AbstractChatProvider<Message, Input, Output>;
17
18
  storage?: ChatStorage;
18
19
  models?: ModelInfo[];
@@ -24,9 +25,10 @@ export interface ChatProviderProps<Message = ChatMessage, Input = RequestParams<
24
25
  }) => Message;
25
26
  children: React.ReactNode;
26
27
  }
28
+ /** Context 值类型 — 合并 useXChat + useXConversations + useXModel */
27
29
  interface ChatContextValue<Message = ChatMessage> {
28
30
  messages: MessageInfo<Message>[];
29
- requesting: boolean;
31
+ isRequesting: boolean;
30
32
  suggestions: SuggestionItem[];
31
33
  error: string | null;
32
34
  onRequest: (input: unknown) => void;
@@ -52,7 +54,12 @@ interface ChatContextValue<Message = ChatMessage> {
52
54
  models: ModelInfo[];
53
55
  setSelectedModel: (id: string) => void;
54
56
  }
55
- export declare function ChatProvider<Message = ChatMessage, Input = RequestParams<Message>, Output = SSEOutput>(props: ChatProviderProps<Message, Input, Output>): import("react/jsx-runtime").JSX.Element;
57
+ export declare function ChatProvider<Message extends StoreMessage = ChatMessage, Input = RequestParams<Message>, Output = SSEOutput>(props: ChatProviderProps<Message, Input, Output>): import("react/jsx-runtime").JSX.Element;
58
+ /**
59
+ * 消费 ChatProvider 注入的聊天上下文
60
+ *
61
+ * @template Message - 消息类型,默认 ChatMessage
62
+ */
56
63
  export declare function useChatContext<Message = ChatMessage>(): ChatContextValue<Message>;
57
64
  export {};
58
65
  //# sourceMappingURL=ChatProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChatProvider.d.ts","sourceRoot":"","sources":["../../../../src/hooks/ChatProvider.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChatProvider.d.ts","sourceRoot":"","sources":["../../../../src/hooks/ChatProvider.tsx"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  /**
2
- * useXChat — 聊天操作 hook
2
+ * useXChat — 聊天操作 Hook
3
3
  *
4
- * 消费 ChatProvider,输出可渲染的 messages 列表
4
+ * 支持 isRequesting / parser 消息展开 / defaultMessages 初始消息
5
5
  */
6
+ import type { StoreMessage } from '../stores/chatStore';
6
7
  import type { AbstractChatProvider } from '../providers/AbstractChatProvider';
7
8
  import type { ChatMessage, MessageStatus } from '../types/message';
8
9
  import type { RequestParams, SSEOutput } from '../types/provider';
@@ -16,6 +17,10 @@ export interface MessageInfo<Message = ChatMessage> {
16
17
  export interface UseXChatConfig<Message = ChatMessage, Input = RequestParams<Message>, Output = SSEOutput> {
17
18
  conversationKey: string;
18
19
  provider: AbstractChatProvider<Message, Input, Output>;
20
+ /** 将单条消息解析为多条展示消息 */
21
+ parser?: (message: Message) => Message[];
22
+ /** 初始消息(同步数组或异步 Promise) */
23
+ defaultMessages?: Message[] | (() => Promise<Message[]>);
19
24
  requestPlaceholder?: (input: Input) => Message;
20
25
  requestFallback?: (input: Input, info: {
21
26
  error: Error;
@@ -24,7 +29,8 @@ export interface UseXChatConfig<Message = ChatMessage, Input = RequestParams<Mes
24
29
  }
25
30
  export interface UseXChatReturn<Message = ChatMessage, Input = RequestParams<Message>> {
26
31
  messages: MessageInfo<Message>[];
27
- requesting: boolean;
32
+ /** 是否正在请求 */
33
+ isRequesting: boolean;
28
34
  suggestions: SuggestionItem[];
29
35
  error: string | null;
30
36
  onRequest: (input: Input) => void;
@@ -35,5 +41,5 @@ export interface UseXChatReturn<Message = ChatMessage, Input = RequestParams<Mes
35
41
  setMessage: (id: string, partial: Partial<MessageInfo<Message>> | ((msg: MessageInfo<Message>) => Partial<MessageInfo<Message>>)) => void;
36
42
  removeMessage: (id: string) => void;
37
43
  }
38
- export declare function useXChat<Message = ChatMessage, Input = RequestParams<Message>, Output = SSEOutput>(config: UseXChatConfig<Message, Input, Output>): UseXChatReturn<Message, Input>;
44
+ export declare function useXChat<Message extends StoreMessage = ChatMessage, Input = RequestParams<Message>, Output = SSEOutput>(config: UseXChatConfig<Message, Input, Output>): UseXChatReturn<Message, Input>;
39
45
  //# sourceMappingURL=useXChat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useXChat.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useXChat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,WAAW,WAAW,CAAC,OAAO,GAAG,WAAW;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,cAAc,CAC7B,OAAO,GAAG,WAAW,EACrB,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,EAC9B,MAAM,GAAG,SAAS;IAElB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACvD,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;IAC/C,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,KAAK,CAAA;KAAE,KAAK,OAAO,CAAC;IACpE,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc,CAC7B,OAAO,GAAG,WAAW,EACrB,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC;IAE9B,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;IACjC,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC7C,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,EAAE,CACX,QAAQ,EACJ,WAAW,CAAC,OAAO,CAAC,EAAE,GACtB,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,KAAK,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,KAC3D,IAAI,CAAC;IACV,UAAU,EAAE,CACV,EAAE,EAAE,MAAM,EACV,OAAO,EACH,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAC7B,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,KAC/D,IAAI,CAAC;IACV,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAED,wBAAgB,QAAQ,CACtB,OAAO,GAAG,WAAW,EACrB,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,EAC9B,MAAM,GAAG,SAAS,EAElB,MAAM,EAAE,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,GAC7C,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CA2OhC"}
1
+ {"version":3,"file":"useXChat.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useXChat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAUH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,WAAW,WAAW,CAAC,OAAO,GAAG,WAAW;IAChD,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,cAAc,CAC7B,OAAO,GAAG,WAAW,EACrB,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,EAC9B,MAAM,GAAG,SAAS;IAElB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACvD,qBAAqB;IACrB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,EAAE,CAAC;IACzC,4BAA4B;IAC5B,eAAe,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACzD,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;IAC/C,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,KAAK,CAAA;KAAE,KAAK,OAAO,CAAC;IACpE,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,cAAc,CAC7B,OAAO,GAAG,WAAW,EACrB,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC;IAE9B,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC;IACjC,aAAa;IACb,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC7C,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,WAAW,EAAE,CACX,QAAQ,EACJ,WAAW,CAAC,OAAO,CAAC,EAAE,GACtB,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,EAAE,KAAK,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,KAC3D,IAAI,CAAC;IACV,UAAU,EAAE,CACV,EAAE,EAAE,MAAM,EACV,OAAO,EACH,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,GAC7B,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,KAC/D,IAAI,CAAC;IACV,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACrC;AAcD,wBAAgB,QAAQ,CACtB,OAAO,SAAS,YAAY,GAAG,WAAW,EAC1C,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,EAC9B,MAAM,GAAG,SAAS,EAElB,MAAM,EAAE,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,GAC7C,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAqPhC"}
@@ -4,7 +4,7 @@
4
4
  */
5
5
  export type { ChatMessage, MessageRole, MessageType, MessageStatus, } from './types/message';
6
6
  export type { SSEEventType, SSEEnvelopeBase, SSETextEvent, SSECardDataEvent, SSESuggestionEvent, SSEErrorEvent, SSEDoneEvent, SSEEnvelope, SuggestionItem, } from './types/sse';
7
- export type { RequestParams, SSEOutput, ProviderCallbacks, } from './types/provider';
7
+ export type { RequestParams, SSEOutput, ProviderCallbacks, TransformMessageInfo, TransformParamsOptions, } from './types/provider';
8
8
  export { XStream } from './tools/XStream';
9
9
  export type { XStreamConfig, XStreamCallbacks } from './tools/XStream';
10
10
  export { XRequest } from './tools/XRequest';
@@ -16,6 +16,7 @@ export type { OpenAIChatProviderConfig } from './providers/OpenAIChatProvider';
16
16
  export { DeepSeekChatProvider } from './providers/DeepSeekChatProvider';
17
17
  export type { DeepSeekChatProviderConfig } from './providers/DeepSeekChatProvider';
18
18
  export type { ChatStorage } from './stores/storage';
19
+ export type { StoreMessage, ChatStoreApi } from './stores/chatStore';
19
20
  export { getOrCreateChatStore, deleteChatStore, getChatStoreMessages, } from './stores/chatStore';
20
21
  export { useXChat } from './hooks/useXChat';
21
22
  export type { UseXChatConfig, UseXChatReturn, MessageInfo, } from './hooks/useXChat';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,aAAa,EACb,SAAS,EACT,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEvE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1E,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,YAAY,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,YAAY,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAGnF,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,YAAY,EACV,cAAc,EACd,cAAc,EACd,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,YAAY,EACV,wBAAwB,EACxB,cAAc,GACf,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACpE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,aAAa,EACb,SAAS,EACT,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,YAAY,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEvE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1E,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,YAAY,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,YAAY,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAGnF,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EACL,oBAAoB,EACpB,eAAe,EACf,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,YAAY,EACV,cAAc,EACd,cAAc,EACd,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,YAAY,EACV,wBAAwB,EACxB,cAAc,GACf,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAErE,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACpE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC"}
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * AbstractChatProvider — Provider 抽象基类
3
3
  *
4
- * 3 个抽象方法:transformParams / transformLocalMessage / transformMessage
4
+ * 定义 transformMessage / transformParams / transformLocalMessage 抽象方法
5
5
  */
6
6
  import type { XRequest } from '../tools/XRequest';
7
7
  import type { ChatMessage } from '../types/message';
8
- import type { RequestParams, SSEOutput, ProviderCallbacks } from '../types/provider';
8
+ import type { RequestParams, SSEOutput, ProviderCallbacks, TransformMessageInfo, TransformParamsOptions } from '../types/provider';
9
9
  export declare abstract class AbstractChatProvider<Message = ChatMessage, Input = RequestParams<Message>, Output = SSEOutput> {
10
10
  protected request: XRequest;
11
11
  constructor(config: {
@@ -13,9 +13,9 @@ export declare abstract class AbstractChatProvider<Message = ChatMessage, Input
13
13
  });
14
14
  /**
15
15
  * 转换请求参数
16
- * useXChat.onRequest() 传入的参数转换为 XRequest 需要的格式
16
+ * 新签名:接收 options 参数(含 messages 等上下文)
17
17
  */
18
- abstract transformParams(input: Input): Record<string, unknown>;
18
+ abstract transformParams(input: Input, options?: TransformParamsOptions<Message>): Record<string, unknown>;
19
19
  /**
20
20
  * 转换本地消息
21
21
  * 将请求参数转换为用户发送的本地 ChatMessage(用于消息列表渲染)
@@ -23,9 +23,9 @@ export declare abstract class AbstractChatProvider<Message = ChatMessage, Input
23
23
  abstract transformLocalMessage(input: Input): Message;
24
24
  /**
25
25
  * 转换响应消息
26
- * XRequest 返回的流数据转换为 ChatMessage(用于 assistant 消息渲染)
26
+ * 新签名:接收 info 对象(含 output + current)
27
27
  */
28
- abstract transformMessage(output: Output, current?: Message): Message;
28
+ abstract transformMessage(info: TransformMessageInfo<Message, Output>): Message;
29
29
  /**
30
30
  * 发起请求(内部调用 XRequest)
31
31
  */
@@ -1 +1 @@
1
- {"version":3,"file":"AbstractChatProvider.d.ts","sourceRoot":"","sources":["../../../../src/providers/AbstractChatProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAqB,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAE3B,8BAAsB,oBAAoB,CACxC,OAAO,GAAG,WAAW,EACrB,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,EAC9B,MAAM,GAAG,SAAS;IAElB,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC;gBAEhB,MAAM,EAAE;QAAE,OAAO,EAAE,QAAQ,CAAA;KAAE;IAIzC;;;OAGG;IACH,QAAQ,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAE/D;;;OAGG;IACH,QAAQ,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAErD;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO;IAErE;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,IAAI;IAyBtE;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"AbstractChatProvider.d.ts","sourceRoot":"","sources":["../../../../src/providers/AbstractChatProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAqB,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,mBAAmB,CAAC;AAE3B,8BAAsB,oBAAoB,CACxC,OAAO,GAAG,WAAW,EACrB,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,EAC9B,MAAM,GAAG,SAAS;IAElB,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC;gBAEhB,MAAM,EAAE;QAAE,OAAO,EAAE,QAAQ,CAAA;KAAE;IAIzC;;;OAGG;IACH,QAAQ,CAAC,eAAe,CACtB,KAAK,EAAE,KAAK,EACZ,OAAO,CAAC,EAAE,sBAAsB,CAAC,OAAO,CAAC,GACxC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAE1B;;;OAGG;IACH,QAAQ,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAErD;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,CACvB,IAAI,EAAE,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,GAC1C,OAAO;IAEV;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,CAAC,OAAO,CAAC,GAAG,IAAI;IA0BtE;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import { OpenAIChatProvider } from './OpenAIChatProvider';
8
8
  import type { ChatMessage } from '../types/message';
9
- import type { SSEOutput } from '../types/provider';
9
+ import type { SSEOutput, TransformMessageInfo } from '../types/provider';
10
10
  export interface DeepSeekChatProviderConfig {
11
11
  apiKey?: string;
12
12
  model?: string;
@@ -17,7 +17,8 @@ export declare class DeepSeekChatProvider extends OpenAIChatProvider {
17
17
  constructor(config: DeepSeekChatProviderConfig);
18
18
  /**
19
19
  * 覆写 transformMessage,处理 DeepSeek reasoning_content
20
+ * 新签名:info.output + info.current
20
21
  */
21
- transformMessage(output: SSEOutput, current?: ChatMessage): ChatMessage;
22
+ transformMessage(info: TransformMessageInfo<ChatMessage, SSEOutput>): ChatMessage;
22
23
  }
23
24
  //# sourceMappingURL=DeepSeekChatProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DeepSeekChatProvider.d.ts","sourceRoot":"","sources":["../../../../src/providers/DeepSeekChatProvider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,oBAAqB,SAAQ,kBAAkB;gBAC9C,MAAM,EAAE,0BAA0B;IAS9C;;OAEG;IACM,gBAAgB,CACvB,MAAM,EAAE,SAAS,EACjB,OAAO,CAAC,EAAE,WAAW,GACpB,WAAW;CAmEf"}
1
+ {"version":3,"file":"DeepSeekChatProvider.d.ts","sourceRoot":"","sources":["../../../../src/providers/DeepSeekChatProvider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzE,MAAM,WAAW,0BAA0B;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,oBAAqB,SAAQ,kBAAkB;gBAC9C,MAAM,EAAE,0BAA0B;IAS9C;;;OAGG;IACM,gBAAgB,CACvB,IAAI,EAAE,oBAAoB,CAAC,WAAW,EAAE,SAAS,CAAC,GACjD,WAAW;CAkEf"}
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { AbstractChatProvider } from './AbstractChatProvider';
7
7
  import type { ChatMessage } from '../types/message';
8
- import type { RequestParams, SSEOutput } from '../types/provider';
8
+ import type { RequestParams, SSEOutput, TransformMessageInfo } from '../types/provider';
9
9
  export interface OpenAIChatProviderConfig {
10
10
  baseURL: string;
11
11
  apiKey?: string;
@@ -26,8 +26,9 @@ export declare class OpenAIChatProvider extends AbstractChatProvider<ChatMessage
26
26
  transformLocalMessage(input: RequestParams<ChatMessage>): ChatMessage;
27
27
  /**
28
28
  * 将 SSE delta 转为 ChatMessage(累积 content)
29
+ * 新签名:info.output + info.current
29
30
  */
30
- transformMessage(output: SSEOutput, current?: ChatMessage): ChatMessage;
31
+ transformMessage(info: TransformMessageInfo<ChatMessage, SSEOutput>): ChatMessage;
31
32
  private createEmptyAssistant;
32
33
  }
33
34
  //# sourceMappingURL=OpenAIChatProvider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"OpenAIChatProvider.d.ts","sourceRoot":"","sources":["../../../../src/providers/OpenAIChatProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAElE,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD,qBAAa,kBAAmB,SAAQ,oBAAoB,CAC1D,WAAW,EACX,aAAa,CAAC,WAAW,CAAC,EAC1B,SAAS,CACV;IACC,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,wBAAwB;IAiB5C;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAkB3E;;OAEG;IACH,qBAAqB,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,WAAW;IAYrE;;OAEG;IACH,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW;IAiCvE,OAAO,CAAC,oBAAoB;CAW7B"}
1
+ {"version":3,"file":"OpenAIChatProvider.d.ts","sourceRoot":"","sources":["../../../../src/providers/OpenAIChatProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,kBAAkB,CAAC;AACnE,OAAO,KAAK,EACV,aAAa,EACb,SAAS,EACT,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAE3B,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAKD,qBAAa,kBAAmB,SAAQ,oBAAoB,CAC1D,WAAW,EACX,aAAa,CAAC,WAAW,CAAC,EAC1B,SAAS,CACV;IACC,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,wBAAwB;IAiB5C;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAkB3E;;OAEG;IACH,qBAAqB,CAAC,KAAK,EAAE,aAAa,CAAC,WAAW,CAAC,GAAG,WAAW;IAYrE;;;OAGG;IACH,gBAAgB,CACd,IAAI,EAAE,oBAAoB,CAAC,WAAW,EAAE,SAAS,CAAC,GACjD,WAAW;IAkCd,OAAO,CAAC,oBAAoB;CAW7B"}
@@ -1,30 +1,40 @@
1
1
  /**
2
2
  * Chat 消息状态管理(Zustand)
3
- * 内部 store,通过 useXChat hook 封装后对外暴露
3
+ *
4
+ * 泛型 store,通过 useXChat hook 封装后对外暴露。
5
+ * M 约束:必须包含 id 字段用于查找/去重。
4
6
  */
5
- import type { ChatMessage } from '../types/message';
6
7
  import type { SuggestionItem } from '../types/sse';
7
- interface ChatState {
8
- messages: ChatMessage[];
9
- streamingText: string;
8
+ /** store 中消息的最小约束:必须有 id 用于查找/去重 */
9
+ export interface StoreMessage {
10
+ id: string;
11
+ }
12
+ interface ChatState<M extends StoreMessage> {
13
+ messages: M[];
10
14
  suggestions: SuggestionItem[];
11
15
  isRequesting: boolean;
12
16
  error: string | null;
13
- addMessage: (message: ChatMessage) => void;
14
- updateMessage: (id: string, updater: (msg: ChatMessage) => ChatMessage) => void;
15
- upsertMessage: (message: ChatMessage) => void;
16
- setMessages: (messages: ChatMessage[] | ((prev: ChatMessage[]) => ChatMessage[])) => void;
17
- setMessage: (id: string, partial: Partial<ChatMessage> | ((msg: ChatMessage) => Partial<ChatMessage>)) => void;
17
+ addMessage: (message: M) => void;
18
+ updateMessage: (id: string, updater: (msg: M) => M) => void;
19
+ upsertMessage: (message: M) => void;
20
+ setMessages: (messages: M[] | ((prev: M[]) => M[])) => void;
21
+ setMessage: (id: string, partial: Partial<M> | ((msg: M) => Partial<M>)) => void;
18
22
  removeMessage: (id: string) => void;
19
23
  setSuggestions: (items: SuggestionItem[]) => void;
20
24
  setRequesting: (v: boolean) => void;
21
25
  setError: (error: string | null) => void;
22
26
  resetChat: () => void;
23
- loadSession: (messages: ChatMessage[]) => void;
27
+ loadSession: (messages: M[]) => void;
24
28
  }
25
- export declare function getOrCreateChatStore(key: string): import("zustand").UseBoundStore<import("zustand").StoreApi<ChatState>>;
29
+ /** 创建一个泛型 chat store 实例 */
30
+ export declare function createChatStore<M extends StoreMessage>(): import("zustand").UseBoundStore<import("zustand").StoreApi<ChatState<M>>>;
31
+ /** store 实例类型 */
32
+ export type ChatStoreApi<M extends StoreMessage> = ReturnType<typeof createChatStore<M>>;
33
+ /** 获取或创建指定会话的 store */
34
+ export declare function getOrCreateChatStore<M extends StoreMessage>(key: string): ChatStoreApi<M>;
35
+ /** 删除指定会话的 store */
26
36
  export declare function deleteChatStore(key: string): void;
27
- export declare function getChatStoreMessages(key: string): ChatMessage[] | undefined;
28
- export declare const createChatStore: () => import("zustand").UseBoundStore<import("zustand").StoreApi<ChatState>>;
37
+ /** 读取指定会话的消息列表 */
38
+ export declare function getChatStoreMessages<M extends StoreMessage>(key: string): M[] | undefined;
29
39
  export {};
30
40
  //# sourceMappingURL=chatStore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chatStore.d.ts","sourceRoot":"","sources":["../../../../src/stores/chatStore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,UAAU,SAAS;IACjB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB,UAAU,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC3C,aAAa,EAAE,CACb,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,WAAW,KACvC,IAAI,CAAC;IACV,aAAa,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9C,WAAW,EAAE,CACX,QAAQ,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,CAAC,KAC/D,IAAI,CAAC;IACV,UAAU,EAAE,CACV,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC,KACzE,IAAI,CAAC;IACV,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,cAAc,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IAClD,aAAa,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;CAChD;AAKD,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,0EAO/C;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,QAE1C;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,6BAE/C;AAED,eAAO,MAAM,eAAe,8EA2EvB,CAAC"}
1
+ {"version":3,"file":"chatStore.d.ts","sourceRoot":"","sources":["../../../../src/stores/chatStore.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,oCAAoC;AACpC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,UAAU,SAAS,CAAC,CAAC,SAAS,YAAY;IACxC,QAAQ,EAAE,CAAC,EAAE,CAAC;IACd,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,YAAY,EAAE,OAAO,CAAC;IACtB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB,UAAU,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC;IACjC,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC;IAC5D,aAAa,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,IAAI,CAAC;IACpC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC;IAC5D,UAAU,EAAE,CACV,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,KAC3C,IAAI,CAAC;IACV,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,cAAc,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IAClD,aAAa,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzC,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;CACtC;AAED,2BAA2B;AAC3B,wBAAgB,eAAe,CAAC,CAAC,SAAS,YAAY,+EAyErD;AAED,iBAAiB;AACjB,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,YAAY,IAAI,UAAU,CAC3D,OAAO,eAAe,CAAC,CAAC,CAAC,CAC1B,CAAC;AAMF,uBAAuB;AACvB,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,YAAY,EACzD,GAAG,EAAE,MAAM,GACV,YAAY,CAAC,CAAC,CAAC,CAOjB;AAED,oBAAoB;AACpB,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,QAE1C;AAED,kBAAkB;AAClB,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,YAAY,EACzD,GAAG,EAAE,MAAM,GACV,CAAC,EAAE,GAAG,SAAS,CAEjB"}
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Provider 协议类型
3
- * 定义 ChatProvider ↔ useXChat 之间的数据契约
3
+ *
4
+ * 定义 ChatProvider 与 useXChat 之间的数据契约
4
5
  */
5
6
  import type { ChatMessage } from './message';
6
7
  import type { SuggestionItem } from './sse';
@@ -20,4 +21,16 @@ export interface ProviderCallbacks<Message = ChatMessage> {
20
21
  onError: (error: Error) => void;
21
22
  onSuggestion?: (items: SuggestionItem[]) => void;
22
23
  }
24
+ /** TransformMessage 接收 info 对象而非位置参数 */
25
+ export interface TransformMessageInfo<Message = ChatMessage, Output = SSEOutput> {
26
+ /** 当前 SSE 输出块 */
27
+ output: Output;
28
+ /** 已累积的消息(首块时为 undefined) */
29
+ current?: Message;
30
+ }
31
+ /** TransformParams 选项 */
32
+ export interface TransformParamsOptions<Message = ChatMessage> {
33
+ /** 会话中的全部消息 */
34
+ messages?: Message[];
35
+ }
23
36
  //# sourceMappingURL=provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/types/provider.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,WAAW;IAC5C,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB,CAAC,OAAO,GAAG,WAAW;IACtD,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;CAClD"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../../src/types/provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,OAAO,CAAC;AAE5C,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,WAAW;IAC5C,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB,CAAC,OAAO,GAAG,WAAW;IACtD,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACrC,SAAS,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;CAClD;AAED,wCAAwC;AACxC,MAAM,WAAW,oBAAoB,CACnC,OAAO,GAAG,WAAW,EACrB,MAAM,GAAG,SAAS;IAElB,iBAAiB;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,6BAA6B;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,yBAAyB;AACzB,MAAM,WAAW,sBAAsB,CAAC,OAAO,GAAG,WAAW;IAC3D,eAAe;IACf,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unif/react-native-chat-sdk",
3
- "version": "0.6.1",
3
+ "version": "1.0.0",
4
4
  "description": "UNIF React Native Chat SDK — 流式通信、Provider、状态管理",
5
5
  "main": "./lib/commonjs/index.js",
6
6
  "module": "./lib/module/index.js",
@@ -8,7 +8,7 @@ import React, { createContext, useContext, useMemo } from 'react';
8
8
  import { useXChat } from './useXChat';
9
9
  import { useXConversations } from './useXConversations';
10
10
  import { useXModel } from './useXModel';
11
- import type { UseXChatConfig, MessageInfo } from './useXChat';
11
+ import type { UseXChatConfig, UseXChatReturn, MessageInfo } from './useXChat';
12
12
  import type {
13
13
  UseXConversationsOptions,
14
14
  SessionSummary,
@@ -18,10 +18,11 @@ import type { ChatMessage } from '../types/message';
18
18
  import type { RequestParams, SSEOutput } from '../types/provider';
19
19
  import type { SuggestionItem } from '../types/sse';
20
20
  import type { ChatStorage } from '../stores/storage';
21
+ import type { StoreMessage } from '../stores/chatStore';
21
22
  import type { AbstractChatProvider } from '../providers/AbstractChatProvider';
22
23
 
23
24
  export interface ChatProviderProps<
24
- Message = ChatMessage,
25
+ Message extends StoreMessage = ChatMessage,
25
26
  Input = RequestParams<Message>,
26
27
  Output = SSEOutput,
27
28
  > {
@@ -35,10 +36,11 @@ export interface ChatProviderProps<
35
36
  children: React.ReactNode;
36
37
  }
37
38
 
39
+ /** Context 值类型 — 合并 useXChat + useXConversations + useXModel */
38
40
  interface ChatContextValue<Message = ChatMessage> {
39
41
  // useXChat
40
42
  messages: MessageInfo<Message>[];
41
- requesting: boolean;
43
+ isRequesting: boolean;
42
44
  suggestions: SuggestionItem[];
43
45
  error: string | null;
44
46
  onRequest: (input: unknown) => void;
@@ -82,23 +84,31 @@ interface ChatContextValue<Message = ChatMessage> {
82
84
  setSelectedModel: (id: string) => void;
83
85
  }
84
86
 
85
- const ChatContext = createContext<ChatContextValue | null>(null);
87
+ /**
88
+ * Context 使用 unknown 作为 Message 泛型的默认值,
89
+ * 在 ChatProvider 和 useChatContext 中通过泛型参数指定具体类型。
90
+ */
91
+ const ChatContext = createContext<ChatContextValue<unknown> | null>(null);
92
+
93
+ /** 内存存储实现,用于未传入 storage 时的默认行为 */
94
+ class MemoryStorage implements ChatStorage {
95
+ private data = new Map<string, string>();
86
96
 
87
- const memoryStorage: ChatStorage = {
88
- _data: new Map<string, string>(),
89
97
  async getItem(key: string) {
90
- return (this._data as Map<string, string>).get(key) ?? null;
91
- },
98
+ return this.data.get(key) ?? null;
99
+ }
92
100
  async setItem(key: string, value: string) {
93
- (this._data as Map<string, string>).set(key, value);
94
- },
101
+ this.data.set(key, value);
102
+ }
95
103
  async removeItem(key: string) {
96
- (this._data as Map<string, string>).delete(key);
97
- },
98
- } as ChatStorage & { _data: Map<string, string> };
104
+ this.data.delete(key);
105
+ }
106
+ }
107
+
108
+ const memoryStorage = new MemoryStorage();
99
109
 
100
110
  export function ChatProvider<
101
- Message = ChatMessage,
111
+ Message extends StoreMessage = ChatMessage,
102
112
  Input = RequestParams<Message>,
103
113
  Output = SSEOutput,
104
114
  >(props: ChatProviderProps<Message, Input, Output>) {
@@ -136,10 +146,11 @@ export function ChatProvider<
136
146
  ]
137
147
  );
138
148
 
139
- const chat = useXChat(chatConfig);
149
+ const chat: UseXChatReturn<Message, Input> = useXChat(chatConfig);
140
150
 
141
151
  const model = useXModel({ models, defaultModel });
142
152
 
153
+ // 合并三个 hook 的返回值
143
154
  const value = useMemo(
144
155
  () => ({
145
156
  ...chat,
@@ -150,12 +161,17 @@ export function ChatProvider<
150
161
  );
151
162
 
152
163
  return (
153
- <ChatContext.Provider value={value as unknown as ChatContextValue}>
164
+ <ChatContext.Provider value={value as ChatContextValue<unknown>}>
154
165
  {children}
155
166
  </ChatContext.Provider>
156
167
  );
157
168
  }
158
169
 
170
+ /**
171
+ * 消费 ChatProvider 注入的聊天上下文
172
+ *
173
+ * @template Message - 消息类型,默认 ChatMessage
174
+ */
159
175
  export function useChatContext<
160
176
  Message = ChatMessage,
161
177
  >(): ChatContextValue<Message> {
@@ -163,5 +179,6 @@ export function useChatContext<
163
179
  if (!ctx) {
164
180
  throw new Error('useChatContext must be used within a ChatProvider');
165
181
  }
166
- return ctx as unknown as ChatContextValue<Message>;
182
+ // Context 存储 unknown,读取时通过泛型窄化为具体类型
183
+ return ctx as ChatContextValue<Message>;
167
184
  }