@unif/react-native-chat-sdk 0.6.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +4 -4
  2. package/lib/commonjs/hooks/ChatProvider.js +26 -8
  3. package/lib/commonjs/hooks/ChatProvider.js.map +1 -1
  4. package/lib/commonjs/hooks/useXChat.js +76 -32
  5. package/lib/commonjs/hooks/useXChat.js.map +1 -1
  6. package/lib/commonjs/index.js.map +1 -1
  7. package/lib/commonjs/providers/AbstractChatProvider.js +8 -4
  8. package/lib/commonjs/providers/AbstractChatProvider.js.map +1 -1
  9. package/lib/commonjs/providers/DeepSeekChatProvider.js +7 -4
  10. package/lib/commonjs/providers/DeepSeekChatProvider.js.map +1 -1
  11. package/lib/commonjs/providers/OpenAIChatProvider.js +6 -1
  12. package/lib/commonjs/providers/OpenAIChatProvider.js.map +1 -1
  13. package/lib/commonjs/stores/chatStore.js +83 -70
  14. package/lib/commonjs/stores/chatStore.js.map +1 -1
  15. package/lib/module/hooks/ChatProvider.js +26 -8
  16. package/lib/module/hooks/ChatProvider.js.map +1 -1
  17. package/lib/module/hooks/useXChat.js +77 -33
  18. package/lib/module/hooks/useXChat.js.map +1 -1
  19. package/lib/module/index.js.map +1 -1
  20. package/lib/module/providers/AbstractChatProvider.js +8 -4
  21. package/lib/module/providers/AbstractChatProvider.js.map +1 -1
  22. package/lib/module/providers/DeepSeekChatProvider.js +7 -4
  23. package/lib/module/providers/DeepSeekChatProvider.js.map +1 -1
  24. package/lib/module/providers/OpenAIChatProvider.js +6 -1
  25. package/lib/module/providers/OpenAIChatProvider.js.map +1 -1
  26. package/lib/module/stores/chatStore.js +83 -68
  27. package/lib/module/stores/chatStore.js.map +1 -1
  28. package/lib/typescript/commonjs/hooks/ChatProvider.d.ts +10 -3
  29. package/lib/typescript/commonjs/hooks/ChatProvider.d.ts.map +1 -1
  30. package/lib/typescript/commonjs/hooks/useXChat.d.ts +10 -4
  31. package/lib/typescript/commonjs/hooks/useXChat.d.ts.map +1 -1
  32. package/lib/typescript/commonjs/index.d.ts +2 -1
  33. package/lib/typescript/commonjs/index.d.ts.map +1 -1
  34. package/lib/typescript/commonjs/providers/AbstractChatProvider.d.ts +6 -6
  35. package/lib/typescript/commonjs/providers/AbstractChatProvider.d.ts.map +1 -1
  36. package/lib/typescript/commonjs/providers/DeepSeekChatProvider.d.ts +3 -2
  37. package/lib/typescript/commonjs/providers/DeepSeekChatProvider.d.ts.map +1 -1
  38. package/lib/typescript/commonjs/providers/OpenAIChatProvider.d.ts +3 -2
  39. package/lib/typescript/commonjs/providers/OpenAIChatProvider.d.ts.map +1 -1
  40. package/lib/typescript/commonjs/stores/chatStore.d.ts +24 -14
  41. package/lib/typescript/commonjs/stores/chatStore.d.ts.map +1 -1
  42. package/lib/typescript/commonjs/types/provider.d.ts +14 -1
  43. package/lib/typescript/commonjs/types/provider.d.ts.map +1 -1
  44. package/lib/typescript/module/hooks/ChatProvider.d.ts +10 -3
  45. package/lib/typescript/module/hooks/ChatProvider.d.ts.map +1 -1
  46. package/lib/typescript/module/hooks/useXChat.d.ts +10 -4
  47. package/lib/typescript/module/hooks/useXChat.d.ts.map +1 -1
  48. package/lib/typescript/module/index.d.ts +2 -1
  49. package/lib/typescript/module/index.d.ts.map +1 -1
  50. package/lib/typescript/module/providers/AbstractChatProvider.d.ts +6 -6
  51. package/lib/typescript/module/providers/AbstractChatProvider.d.ts.map +1 -1
  52. package/lib/typescript/module/providers/DeepSeekChatProvider.d.ts +3 -2
  53. package/lib/typescript/module/providers/DeepSeekChatProvider.d.ts.map +1 -1
  54. package/lib/typescript/module/providers/OpenAIChatProvider.d.ts +3 -2
  55. package/lib/typescript/module/providers/OpenAIChatProvider.d.ts.map +1 -1
  56. package/lib/typescript/module/stores/chatStore.d.ts +24 -14
  57. package/lib/typescript/module/stores/chatStore.d.ts.map +1 -1
  58. package/lib/typescript/module/types/provider.d.ts +14 -1
  59. package/lib/typescript/module/types/provider.d.ts.map +1 -1
  60. package/package.json +1 -1
  61. package/src/hooks/ChatProvider.tsx +34 -17
  62. package/src/hooks/useXChat.ts +111 -65
  63. package/src/index.ts +3 -0
  64. package/src/providers/AbstractChatProvider.ts +17 -9
  65. package/src/providers/DeepSeekChatProvider.ts +5 -6
  66. package/src/providers/OpenAIChatProvider.ts +10 -2
  67. package/src/stores/chatStore.ts +53 -41
  68. package/src/types/provider.ts +19 -1
@@ -3,18 +3,95 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.createChatStore = void 0;
6
+ exports.createChatStore = createChatStore;
7
7
  exports.deleteChatStore = deleteChatStore;
8
8
  exports.getChatStoreMessages = getChatStoreMessages;
9
9
  exports.getOrCreateChatStore = getOrCreateChatStore;
10
10
  var _zustand = require("zustand");
11
11
  /**
12
12
  * Chat 消息状态管理(Zustand)
13
- * 内部 store,通过 useXChat hook 封装后对外暴露
13
+ *
14
+ * 泛型 store,通过 useXChat hook 封装后对外暴露。
15
+ * M 约束:必须包含 id 字段用于查找/去重。
14
16
  */
15
17
 
18
+ /** store 中消息的最小约束:必须有 id 用于查找/去重 */
19
+
20
+ /** 创建一个泛型 chat store 实例 */
21
+ function createChatStore() {
22
+ return (0, _zustand.create)((set, get) => ({
23
+ messages: [],
24
+ suggestions: [],
25
+ isRequesting: false,
26
+ error: null,
27
+ addMessage: message => set(state => ({
28
+ messages: [message, ...state.messages]
29
+ })),
30
+ updateMessage: (id, updater) => set(state => ({
31
+ messages: state.messages.map(m => m.id === id ? updater(m) : m)
32
+ })),
33
+ upsertMessage: message => {
34
+ const state = get();
35
+ const existingIdx = state.messages.findIndex(m => m.id === message.id);
36
+ if (existingIdx >= 0) {
37
+ const newMessages = [...state.messages];
38
+ newMessages[existingIdx] = message;
39
+ set({
40
+ messages: newMessages
41
+ });
42
+ } else {
43
+ set({
44
+ messages: [message, ...state.messages]
45
+ });
46
+ }
47
+ },
48
+ setMessages: messagesOrFn => set(state => ({
49
+ messages: typeof messagesOrFn === 'function' ? messagesOrFn(state.messages) : messagesOrFn
50
+ })),
51
+ setMessage: (id, partialOrFn) => set(state => ({
52
+ messages: state.messages.map(m => {
53
+ if (m.id !== id) return m;
54
+ const partial = typeof partialOrFn === 'function' ? partialOrFn(m) : partialOrFn;
55
+ return {
56
+ ...m,
57
+ ...partial
58
+ };
59
+ })
60
+ })),
61
+ removeMessage: id => set(state => ({
62
+ messages: state.messages.filter(m => m.id !== id)
63
+ })),
64
+ setSuggestions: items => set({
65
+ suggestions: items
66
+ }),
67
+ setRequesting: v => set({
68
+ isRequesting: v
69
+ }),
70
+ setError: error => set({
71
+ error
72
+ }),
73
+ resetChat: () => set({
74
+ messages: [],
75
+ suggestions: [],
76
+ isRequesting: false,
77
+ error: null
78
+ }),
79
+ loadSession: messages => set({
80
+ messages,
81
+ suggestions: [],
82
+ isRequesting: false,
83
+ error: null
84
+ })
85
+ }));
86
+ }
87
+
88
+ /** store 实例类型 */
89
+
16
90
  // 全局 store 管理器 — 多会话内存常驻
91
+
17
92
  const chatStoreMap = new Map();
93
+
94
+ /** 获取或创建指定会话的 store */
18
95
  function getOrCreateChatStore(key) {
19
96
  let store = chatStoreMap.get(key);
20
97
  if (!store) {
@@ -23,78 +100,14 @@ function getOrCreateChatStore(key) {
23
100
  }
24
101
  return store;
25
102
  }
103
+
104
+ /** 删除指定会话的 store */
26
105
  function deleteChatStore(key) {
27
106
  chatStoreMap.delete(key);
28
107
  }
108
+
109
+ /** 读取指定会话的消息列表 */
29
110
  function getChatStoreMessages(key) {
30
111
  return chatStoreMap.get(key)?.getState()?.messages;
31
112
  }
32
- const createChatStore = () => (0, _zustand.create)((set, get) => ({
33
- messages: [],
34
- streamingText: '',
35
- suggestions: [],
36
- isRequesting: false,
37
- error: null,
38
- addMessage: message => set(state => ({
39
- messages: [message, ...state.messages]
40
- })),
41
- updateMessage: (id, updater) => set(state => ({
42
- messages: state.messages.map(m => m.id === id ? updater(m) : m)
43
- })),
44
- upsertMessage: message => {
45
- const state = get();
46
- const existingIdx = state.messages.findIndex(m => m.id === message.id);
47
- if (existingIdx >= 0) {
48
- const newMessages = [...state.messages];
49
- newMessages[existingIdx] = message;
50
- set({
51
- messages: newMessages
52
- });
53
- } else {
54
- set({
55
- messages: [message, ...state.messages]
56
- });
57
- }
58
- },
59
- setMessages: messagesOrFn => set(state => ({
60
- messages: typeof messagesOrFn === 'function' ? messagesOrFn(state.messages) : messagesOrFn
61
- })),
62
- setMessage: (id, partialOrFn) => set(state => ({
63
- messages: state.messages.map(m => {
64
- if (m.id !== id) return m;
65
- const partial = typeof partialOrFn === 'function' ? partialOrFn(m) : partialOrFn;
66
- return {
67
- ...m,
68
- ...partial
69
- };
70
- })
71
- })),
72
- removeMessage: id => set(state => ({
73
- messages: state.messages.filter(m => m.id !== id)
74
- })),
75
- setSuggestions: items => set({
76
- suggestions: items
77
- }),
78
- setRequesting: v => set({
79
- isRequesting: v
80
- }),
81
- setError: error => set({
82
- error
83
- }),
84
- resetChat: () => set({
85
- messages: [],
86
- streamingText: '',
87
- suggestions: [],
88
- isRequesting: false,
89
- error: null
90
- }),
91
- loadSession: messages => set({
92
- messages,
93
- streamingText: '',
94
- suggestions: [],
95
- isRequesting: false,
96
- error: null
97
- })
98
- }));
99
- exports.createChatStore = createChatStore;
100
113
  //# sourceMappingURL=chatStore.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_zustand","require","chatStoreMap","Map","getOrCreateChatStore","key","store","get","createChatStore","set","deleteChatStore","delete","getChatStoreMessages","getState","messages","create","streamingText","suggestions","isRequesting","error","addMessage","message","state","updateMessage","id","updater","map","m","upsertMessage","existingIdx","findIndex","newMessages","setMessages","messagesOrFn","setMessage","partialOrFn","partial","removeMessage","filter","setSuggestions","items","setRequesting","v","setError","resetChat","loadSession","exports"],"sourceRoot":"../../../src","sources":["stores/chatStore.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_zustand","require","createChatStore","create","set","get","messages","suggestions","isRequesting","error","addMessage","message","state","updateMessage","id","updater","map","m","upsertMessage","existingIdx","findIndex","newMessages","setMessages","messagesOrFn","setMessage","partialOrFn","partial","removeMessage","filter","setSuggestions","items","setRequesting","v","setError","resetChat","loadSession","chatStoreMap","Map","getOrCreateChatStore","key","store","deleteChatStore","delete","getChatStoreMessages","getState"],"sourceRoot":"../../../src","sources":["stores/chatStore.ts"],"mappings":"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","ignoreList":[]}
@@ -10,20 +10,29 @@ import React, { createContext, useContext, useMemo } from 'react';
10
10
  import { useXChat } from "./useXChat.js";
11
11
  import { useXConversations } from "./useXConversations.js";
12
12
  import { useXModel } from "./useXModel.js";
13
+
14
+ /** Context 值类型 — 合并 useXChat + useXConversations + useXModel */
13
15
  import { jsx as _jsx } from "react/jsx-runtime";
16
+ /**
17
+ * Context 使用 unknown 作为 Message 泛型的默认值,
18
+ * 在 ChatProvider 和 useChatContext 中通过泛型参数指定具体类型。
19
+ */
14
20
  const ChatContext = /*#__PURE__*/createContext(null);
15
- const memoryStorage = {
16
- _data: new Map(),
21
+
22
+ /** 内存存储实现,用于未传入 storage 时的默认行为 */
23
+ class MemoryStorage {
24
+ data = new Map();
17
25
  async getItem(key) {
18
- return this._data.get(key) ?? null;
19
- },
26
+ return this.data.get(key) ?? null;
27
+ }
20
28
  async setItem(key, value) {
21
- this._data.set(key, value);
22
- },
29
+ this.data.set(key, value);
30
+ }
23
31
  async removeItem(key) {
24
- this._data.delete(key);
32
+ this.data.delete(key);
25
33
  }
26
- };
34
+ }
35
+ const memoryStorage = new MemoryStorage();
27
36
  export function ChatProvider(props) {
28
37
  const {
29
38
  provider,
@@ -51,6 +60,8 @@ export function ChatProvider(props) {
51
60
  models,
52
61
  defaultModel
53
62
  });
63
+
64
+ // 合并三个 hook 的返回值
54
65
  const value = useMemo(() => ({
55
66
  ...chat,
56
67
  ...conversations,
@@ -61,11 +72,18 @@ export function ChatProvider(props) {
61
72
  children: children
62
73
  });
63
74
  }
75
+
76
+ /**
77
+ * 消费 ChatProvider 注入的聊天上下文
78
+ *
79
+ * @template Message - 消息类型,默认 ChatMessage
80
+ */
64
81
  export function useChatContext() {
65
82
  const ctx = useContext(ChatContext);
66
83
  if (!ctx) {
67
84
  throw new Error('useChatContext must be used within a ChatProvider');
68
85
  }
86
+ // Context 存储 unknown,读取时通过泛型窄化为具体类型
69
87
  return ctx;
70
88
  }
71
89
  //# sourceMappingURL=ChatProvider.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","createContext","useContext","useMemo","useXChat","useXConversations","useXModel","jsx","_jsx","ChatContext","memoryStorage","_data","Map","getItem","key","get","setItem","value","set","removeItem","delete","ChatProvider","props","provider","storage","models","defaultModel","generateId","requestPlaceholder","requestFallback","children","convOptions","conversations","chatConfig","conversationKey","activeId","chat","model","Provider","useChatContext","ctx","Error"],"sourceRoot":"../../../src","sources":["hooks/ChatProvider.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,IAAIC,aAAa,EAAEC,UAAU,EAAEC,OAAO,QAAQ,OAAO;AACjE,SAASC,QAAQ,QAAQ,eAAY;AACrC,SAASC,iBAAiB,QAAQ,wBAAqB;AACvD,SAASC,SAAS,QAAQ,gBAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA;AA2ExC,MAAMC,WAAW,gBAAGR,aAAa,CAA0B,IAAI,CAAC;AAEhE,MAAMS,aAA0B,GAAG;EACjCC,KAAK,EAAE,IAAIC,GAAG,CAAiB,CAAC;EAChC,MAAMC,OAAOA,CAACC,GAAW,EAAE;IACzB,OAAQ,IAAI,CAACH,KAAK,CAAyBI,GAAG,CAACD,GAAG,CAAC,IAAI,IAAI;EAC7D,CAAC;EACD,MAAME,OAAOA,CAACF,GAAW,EAAEG,KAAa,EAAE;IACvC,IAAI,CAACN,KAAK,CAAyBO,GAAG,CAACJ,GAAG,EAAEG,KAAK,CAAC;EACrD,CAAC;EACD,MAAME,UAAUA,CAACL,GAAW,EAAE;IAC3B,IAAI,CAACH,KAAK,CAAyBS,MAAM,CAACN,GAAG,CAAC;EACjD;AACF,CAAiD;AAEjD,OAAO,SAASO,YAAYA,CAI1BC,KAAgD,EAAE;EAClD,MAAM;IACJC,QAAQ;IACRC,OAAO;IACPC,MAAM,GAAG,EAAE;IACXC,YAAY;IACZC,UAAU;IACVC,kBAAkB;IAClBC,eAAe;IACfC;EACF,CAAC,GAAGR,KAAK;EAET,MAAMS,WAAqC,GAAG5B,OAAO,CACnD,OAAO;IAAEqB,OAAO,EAAEA,OAAO,IAAId;EAAc,CAAC,CAAC,EAC7C,CAACc,OAAO,CACV,CAAC;EACD,MAAMQ,aAAa,GAAG3B,iBAAiB,CAAC0B,WAAW,CAAC;EAEpD,MAAME,UAAkD,GAAG9B,OAAO,CAChE,OAAO;IACL+B,eAAe,EAAEF,aAAa,CAACG,QAAQ;IACvCZ,QAAQ;IACRI,UAAU;IACVC,kBAAkB;IAClBC;EACF,CAAC,CAAC,EACF,CACEG,aAAa,CAACG,QAAQ,EACtBZ,QAAQ,EACRI,UAAU,EACVC,kBAAkB,EAClBC,eAAe,CAEnB,CAAC;EAED,MAAMO,IAAI,GAAGhC,QAAQ,CAAC6B,UAAU,CAAC;EAEjC,MAAMI,KAAK,GAAG/B,SAAS,CAAC;IAAEmB,MAAM;IAAEC;EAAa,CAAC,CAAC;EAEjD,MAAMT,KAAK,GAAGd,OAAO,CACnB,OAAO;IACL,GAAGiC,IAAI;IACP,GAAGJ,aAAa;IAChB,GAAGK;EACL,CAAC,CAAC,EACF,CAACD,IAAI,EAAEJ,aAAa,EAAEK,KAAK,CAC7B,CAAC;EAED,oBACE7B,IAAA,CAACC,WAAW,CAAC6B,QAAQ;IAACrB,KAAK,EAAEA,KAAqC;IAAAa,QAAA,EAC/DA;EAAQ,CACW,CAAC;AAE3B;AAEA,OAAO,SAASS,cAAcA,CAAA,EAEC;EAC7B,MAAMC,GAAG,GAAGtC,UAAU,CAACO,WAAW,CAAC;EACnC,IAAI,CAAC+B,GAAG,EAAE;IACR,MAAM,IAAIC,KAAK,CAAC,mDAAmD,CAAC;EACtE;EACA,OAAOD,GAAG;AACZ","ignoreList":[]}
1
+ {"version":3,"names":["React","createContext","useContext","useMemo","useXChat","useXConversations","useXModel","jsx","_jsx","ChatContext","MemoryStorage","data","Map","getItem","key","get","setItem","value","set","removeItem","delete","memoryStorage","ChatProvider","props","provider","storage","models","defaultModel","generateId","requestPlaceholder","requestFallback","children","convOptions","conversations","chatConfig","conversationKey","activeId","chat","model","Provider","useChatContext","ctx","Error"],"sourceRoot":"../../../src","sources":["hooks/ChatProvider.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,IAAIC,aAAa,EAAEC,UAAU,EAAEC,OAAO,QAAQ,OAAO;AACjE,SAASC,QAAQ,QAAQ,eAAY;AACrC,SAASC,iBAAiB,QAAQ,wBAAqB;AACvD,SAASC,SAAS,QAAQ,gBAAa;;AA6BvC;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAgDA;AACA;AACA;AACA;AACA,MAAMC,WAAW,gBAAGR,aAAa,CAAmC,IAAI,CAAC;;AAEzE;AACA,MAAMS,aAAa,CAAwB;EACjCC,IAAI,GAAG,IAAIC,GAAG,CAAiB,CAAC;EAExC,MAAMC,OAAOA,CAACC,GAAW,EAAE;IACzB,OAAO,IAAI,CAACH,IAAI,CAACI,GAAG,CAACD,GAAG,CAAC,IAAI,IAAI;EACnC;EACA,MAAME,OAAOA,CAACF,GAAW,EAAEG,KAAa,EAAE;IACxC,IAAI,CAACN,IAAI,CAACO,GAAG,CAACJ,GAAG,EAAEG,KAAK,CAAC;EAC3B;EACA,MAAME,UAAUA,CAACL,GAAW,EAAE;IAC5B,IAAI,CAACH,IAAI,CAACS,MAAM,CAACN,GAAG,CAAC;EACvB;AACF;AAEA,MAAMO,aAAa,GAAG,IAAIX,aAAa,CAAC,CAAC;AAEzC,OAAO,SAASY,YAAYA,CAI1BC,KAAgD,EAAE;EAClD,MAAM;IACJC,QAAQ;IACRC,OAAO;IACPC,MAAM,GAAG,EAAE;IACXC,YAAY;IACZC,UAAU;IACVC,kBAAkB;IAClBC,eAAe;IACfC;EACF,CAAC,GAAGR,KAAK;EAET,MAAMS,WAAqC,GAAG7B,OAAO,CACnD,OAAO;IAAEsB,OAAO,EAAEA,OAAO,IAAIJ;EAAc,CAAC,CAAC,EAC7C,CAACI,OAAO,CACV,CAAC;EACD,MAAMQ,aAAa,GAAG5B,iBAAiB,CAAC2B,WAAW,CAAC;EAEpD,MAAME,UAAkD,GAAG/B,OAAO,CAChE,OAAO;IACLgC,eAAe,EAAEF,aAAa,CAACG,QAAQ;IACvCZ,QAAQ;IACRI,UAAU;IACVC,kBAAkB;IAClBC;EACF,CAAC,CAAC,EACF,CACEG,aAAa,CAACG,QAAQ,EACtBZ,QAAQ,EACRI,UAAU,EACVC,kBAAkB,EAClBC,eAAe,CAEnB,CAAC;EAED,MAAMO,IAAoC,GAAGjC,QAAQ,CAAC8B,UAAU,CAAC;EAEjE,MAAMI,KAAK,GAAGhC,SAAS,CAAC;IAAEoB,MAAM;IAAEC;EAAa,CAAC,CAAC;;EAEjD;EACA,MAAMV,KAAK,GAAGd,OAAO,CACnB,OAAO;IACL,GAAGkC,IAAI;IACP,GAAGJ,aAAa;IAChB,GAAGK;EACL,CAAC,CAAC,EACF,CAACD,IAAI,EAAEJ,aAAa,EAAEK,KAAK,CAC7B,CAAC;EAED,oBACE9B,IAAA,CAACC,WAAW,CAAC8B,QAAQ;IAACtB,KAAK,EAAEA,KAAmC;IAAAc,QAAA,EAC7DA;EAAQ,CACW,CAAC;AAE3B;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASS,cAAcA,CAAA,EAEC;EAC7B,MAAMC,GAAG,GAAGvC,UAAU,CAACO,WAAW,CAAC;EACnC,IAAI,CAACgC,GAAG,EAAE;IACR,MAAM,IAAIC,KAAK,CAAC,mDAAmD,CAAC;EACtE;EACA;EACA,OAAOD,GAAG;AACZ","ignoreList":[]}
@@ -1,21 +1,44 @@
1
1
  "use strict";
2
2
 
3
3
  /**
4
- * useXChat — 聊天操作 hook
4
+ * useXChat — 聊天操作 Hook
5
5
  *
6
- * 消费 ChatProvider,输出可渲染的 messages 列表
6
+ * 支持 isRequesting / parser 消息展开 / defaultMessages 初始消息
7
7
  */
8
8
 
9
- import { useCallback, useEffect, useMemo, useSyncExternalStore } from 'react';
9
+ import { useCallback, useEffect, useMemo, useRef, useSyncExternalStore } from 'react';
10
10
  import { getOrCreateChatStore } from "../stores/chatStore.js";
11
+ /** 从 Message 中安全读取 status 字段 */
12
+ function getStatus(m) {
13
+ return m.status ?? 'local';
14
+ }
15
+
16
+ /** 从 Message 中安全读取 extra 字段 */
17
+ function getExtra(m) {
18
+ return m.extra;
19
+ }
11
20
  export function useXChat(config) {
12
21
  const {
13
22
  provider,
14
- conversationKey
23
+ conversationKey,
24
+ parser,
25
+ defaultMessages
15
26
  } = config;
27
+ const defaultMessagesLoadedRef = useRef(false);
16
28
  const store = useMemo(() => getOrCreateChatStore(conversationKey), [conversationKey]);
17
29
 
18
- // 使用 useSyncExternalStore 订阅 zustand store 变化
30
+ // 首次挂载时加载 defaultMessages
31
+ useEffect(() => {
32
+ if (!defaultMessages || defaultMessagesLoadedRef.current) return;
33
+ defaultMessagesLoadedRef.current = true;
34
+ if (Array.isArray(defaultMessages)) {
35
+ store.getState().setMessages(defaultMessages);
36
+ } else {
37
+ defaultMessages().then(msgs => {
38
+ store.getState().setMessages(msgs);
39
+ });
40
+ }
41
+ }, [defaultMessages, store]);
19
42
  const state = useSyncExternalStore(store.subscribe, store.getState, store.getState);
20
43
  const onRequest = useCallback(input => {
21
44
  const s = store.getState();
@@ -24,11 +47,12 @@ export function useXChat(config) {
24
47
  store.getState().setError(null);
25
48
  store.getState().setSuggestions([]);
26
49
  const localMessage = provider.transformLocalMessage(input);
27
- const localChatMessage = localMessage;
28
- store.getState().addMessage(localChatMessage);
50
+ store.getState().addMessage(localMessage);
29
51
 
30
- // 注入 loading 占位消息(显示"正在思考"动画)
31
- const loadingMessageId = `loading-${localChatMessage.id}`;
52
+ // loading 占位消息:合成临时对象,收到首条响应后立即移除。
53
+ // 这里无法直接构造 Message 泛型实例,因此使用 unknown 中转,
54
+ // 这是整个 SDK 中唯一一处不可避免的类型断言。
55
+ const loadingMessageId = `loading-${localMessage.id}`;
32
56
  const loadingMessage = {
33
57
  id: loadingMessageId,
34
58
  text: '',
@@ -36,7 +60,7 @@ export function useXChat(config) {
36
60
  createdAt: new Date(),
37
61
  messageType: 'text',
38
62
  status: 'loading',
39
- turnId: localChatMessage.turnId
63
+ turnId: localMessage.turnId ?? ''
40
64
  };
41
65
  store.getState().addMessage(loadingMessage);
42
66
  let loadingRemoved = false;
@@ -53,9 +77,8 @@ export function useXChat(config) {
53
77
  },
54
78
  onSuccess: message => {
55
79
  removeLoading();
56
- const m = message;
57
80
  store.getState().upsertMessage({
58
- ...m,
81
+ ...message,
59
82
  status: 'success'
60
83
  });
61
84
  store.getState().setRequesting(false);
@@ -78,9 +101,8 @@ export function useXChat(config) {
78
101
  }, [provider, store, config]);
79
102
  const abort = useCallback(() => {
80
103
  provider.abort();
81
- // 清理可能存在的 loading 占位消息
82
104
  const msgs = store.getState().messages;
83
- const loadingMsg = msgs.find(m => m.status === 'loading');
105
+ const loadingMsg = msgs.find(m => getStatus(m) === 'loading');
84
106
  if (loadingMsg) {
85
107
  store.getState().removeMessage(loadingMsg.id);
86
108
  }
@@ -92,8 +114,6 @@ export function useXChat(config) {
92
114
  const onReload = useCallback((id, input) => {
93
115
  const s = store.getState();
94
116
  if (s.isRequesting) return;
95
-
96
- // 将目标消息标记为 loading,移除其后的 assistant 消息
97
117
  const targetIdx = s.messages.findIndex(m => m.id === id);
98
118
  if (targetIdx < 0) return;
99
119
  store.getState().setRequesting(true);
@@ -104,9 +124,8 @@ export function useXChat(config) {
104
124
  store.getState().upsertMessage(message);
105
125
  },
106
126
  onSuccess: message => {
107
- const m = message;
108
127
  store.getState().upsertMessage({
109
- ...m,
128
+ ...message,
110
129
  status: 'success'
111
130
  });
112
131
  store.getState().setRequesting(false);
@@ -129,12 +148,7 @@ export function useXChat(config) {
129
148
  const setMessages = useCallback(messagesOrFn => {
130
149
  if (typeof messagesOrFn === 'function') {
131
150
  const current = store.getState().messages;
132
- const currentInfos = current.map(m => ({
133
- id: m.id,
134
- message: m,
135
- status: m.status,
136
- extra: m.extra
137
- }));
151
+ const currentInfos = toMessageInfoList(current);
138
152
  const next = messagesOrFn(currentInfos);
139
153
  store.getState().setMessages(next.map(info => info.message));
140
154
  } else {
@@ -146,8 +160,8 @@ export function useXChat(config) {
146
160
  const info = {
147
161
  id: m.id,
148
162
  message: m,
149
- status: m.status,
150
- extra: m.extra
163
+ status: getStatus(m),
164
+ extra: getExtra(m)
151
165
  };
152
166
  const partial = typeof partialOrFn === 'function' ? partialOrFn(info) : partialOrFn;
153
167
  const updated = {};
@@ -168,15 +182,35 @@ export function useXChat(config) {
168
182
  provider.abort();
169
183
  };
170
184
  }, [provider]);
171
- const messages = useMemo(() => state.messages.map(m => ({
172
- id: m.id,
173
- message: m,
174
- status: m.status,
175
- extra: m.extra
176
- })), [state.messages]);
185
+
186
+ // 应用 parser(一对多展开)
187
+ const messages = useMemo(() => {
188
+ const rawInfos = toMessageInfoList(state.messages);
189
+ if (!parser) return rawInfos;
190
+ const expanded = [];
191
+ for (const info of rawInfos) {
192
+ const parsed = parser(info.message);
193
+ if (parsed.length === 0) continue;
194
+ if (parsed.length === 1) {
195
+ expanded.push({
196
+ ...info,
197
+ message: parsed[0]
198
+ });
199
+ } else {
200
+ parsed.forEach((p, i) => {
201
+ expanded.push({
202
+ ...info,
203
+ id: `${info.id}-${i}`,
204
+ message: p
205
+ });
206
+ });
207
+ }
208
+ }
209
+ return expanded;
210
+ }, [state.messages, parser]);
177
211
  return {
178
212
  messages,
179
- requesting: state.isRequesting,
213
+ isRequesting: state.isRequesting,
180
214
  suggestions: state.suggestions,
181
215
  error: state.error,
182
216
  onRequest,
@@ -188,4 +222,14 @@ export function useXChat(config) {
188
222
  removeMessage
189
223
  };
190
224
  }
225
+
226
+ /** store messages → MessageInfo 列表 */
227
+ function toMessageInfoList(messages) {
228
+ return messages.map(m => ({
229
+ id: m.id,
230
+ message: m,
231
+ status: getStatus(m),
232
+ extra: getExtra(m)
233
+ }));
234
+ }
191
235
  //# sourceMappingURL=useXChat.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useMemo","useSyncExternalStore","getOrCreateChatStore","useXChat","config","provider","conversationKey","store","state","subscribe","getState","onRequest","input","s","isRequesting","setRequesting","setError","setSuggestions","localMessage","transformLocalMessage","localChatMessage","addMessage","loadingMessageId","id","loadingMessage","text","role","createdAt","Date","messageType","status","turnId","loadingRemoved","removeLoading","removeMessage","sendMessage","onUpdate","message","upsertMessage","onSuccess","m","onError","error","requestFallback","fallbackMsg","onSuggestion","items","abort","msgs","messages","loadingMsg","find","clearError","onReload","targetIdx","findIndex","setMessages","messagesOrFn","current","currentInfos","map","extra","next","info","setMessage","partialOrFn","partial","updated","undefined","Object","assign","requesting","suggestions"],"sourceRoot":"../../../src","sources":["hooks/useXChat.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useEffect","useMemo","useRef","useSyncExternalStore","getOrCreateChatStore","getStatus","m","status","getExtra","extra","useXChat","config","provider","conversationKey","parser","defaultMessages","defaultMessagesLoadedRef","store","current","Array","isArray","getState","setMessages","then","msgs","state","subscribe","onRequest","input","s","isRequesting","setRequesting","setError","setSuggestions","localMessage","transformLocalMessage","addMessage","loadingMessageId","id","loadingMessage","text","role","createdAt","Date","messageType","turnId","loadingRemoved","removeLoading","removeMessage","sendMessage","onUpdate","message","upsertMessage","onSuccess","onError","error","requestFallback","fallbackMsg","onSuggestion","items","abort","messages","loadingMsg","find","clearError","onReload","targetIdx","findIndex","messagesOrFn","currentInfos","toMessageInfoList","next","map","info","setMessage","partialOrFn","partial","updated","undefined","Object","assign","rawInfos","expanded","parsed","length","push","forEach","p","i","suggestions"],"sourceRoot":"../../../src","sources":["hooks/useXChat.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["XStream","XRequest","SSEParser","AbstractChatProvider","OpenAIChatProvider","DeepSeekChatProvider","getOrCreateChatStore","deleteChatStore","getChatStoreMessages","useXChat","useXConversations","useXModel","ChatProvider","useChatContext"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA;;AA0BA;AACA,SAASA,OAAO,QAAQ,oBAAiB;AAGzC,SAASC,QAAQ,QAAQ,qBAAkB;AAG3C,SAASC,SAAS,QAAQ,sBAAmB;;AAE7C;AACA,SAASC,oBAAoB,QAAQ,qCAAkC;AACvE,SAASC,kBAAkB,QAAQ,mCAAgC;AAEnE,SAASC,oBAAoB,QAAQ,qCAAkC;;AAGvE;;AAEA,SACEC,oBAAoB,EACpBC,eAAe,EACfC,oBAAoB,QACf,uBAAoB;;AAE3B;AACA,SAASC,QAAQ,QAAQ,qBAAkB;AAO3C,SAASC,iBAAiB,QAAQ,8BAA2B;AAM7D,SAASC,SAAS,QAAQ,sBAAmB;AAG7C,SAASC,YAAY,EAAEC,cAAc,QAAQ,yBAAsB","ignoreList":[]}
1
+ {"version":3,"names":["XStream","XRequest","SSEParser","AbstractChatProvider","OpenAIChatProvider","DeepSeekChatProvider","getOrCreateChatStore","deleteChatStore","getChatStoreMessages","useXChat","useXConversations","useXModel","ChatProvider","useChatContext"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA;;AA4BA;AACA,SAASA,OAAO,QAAQ,oBAAiB;AAGzC,SAASC,QAAQ,QAAQ,qBAAkB;AAG3C,SAASC,SAAS,QAAQ,sBAAmB;;AAE7C;AACA,SAASC,oBAAoB,QAAQ,qCAAkC;AACvE,SAASC,kBAAkB,QAAQ,mCAAgC;AAEnE,SAASC,oBAAoB,QAAQ,qCAAkC;;AAGvE;;AAGA,SACEC,oBAAoB,EACpBC,eAAe,EACfC,oBAAoB,QACf,uBAAoB;;AAE3B;AACA,SAASC,QAAQ,QAAQ,qBAAkB;AAO3C,SAASC,iBAAiB,QAAQ,8BAA2B;AAM7D,SAASC,SAAS,QAAQ,sBAAmB;AAG7C,SAASC,YAAY,EAAEC,cAAc,QAAQ,yBAAsB","ignoreList":[]}
@@ -3,7 +3,7 @@
3
3
  /**
4
4
  * AbstractChatProvider — Provider 抽象基类
5
5
  *
6
- * 3 个抽象方法:transformParams / transformLocalMessage / transformMessage
6
+ * 定义 transformMessage / transformParams / transformLocalMessage 抽象方法
7
7
  */
8
8
 
9
9
  export class AbstractChatProvider {
@@ -13,7 +13,7 @@ export class AbstractChatProvider {
13
13
 
14
14
  /**
15
15
  * 转换请求参数
16
- * useXChat.onRequest() 传入的参数转换为 XRequest 需要的格式
16
+ * 新签名:接收 options 参数(含 messages 等上下文)
17
17
  */
18
18
 
19
19
  /**
@@ -23,7 +23,7 @@ export class AbstractChatProvider {
23
23
 
24
24
  /**
25
25
  * 转换响应消息
26
- * XRequest 返回的流数据转换为 ChatMessage(用于 assistant 消息渲染)
26
+ * 新签名:接收 info 对象(含 output + current)
27
27
  */
28
28
 
29
29
  /**
@@ -34,7 +34,11 @@ export class AbstractChatProvider {
34
34
  let currentMessage;
35
35
  const requestCallbacks = {
36
36
  onStream: chunk => {
37
- currentMessage = this.transformMessage(chunk, currentMessage);
37
+ // XRequest 回调类型是 SSEOutput,与 Output 泛型默认一致
38
+ currentMessage = this.transformMessage({
39
+ output: chunk,
40
+ current: currentMessage
41
+ });
38
42
  callbacks.onUpdate(currentMessage);
39
43
  },
40
44
  onSuccess: () => {
@@ -1 +1 @@
1
- {"version":3,"names":["AbstractChatProvider","constructor","config","request","sendMessage","input","callbacks","params","transformParams","currentMessage","requestCallbacks","onStream","chunk","transformMessage","onUpdate","onSuccess","onError","error","Error","message","create","abort"],"sourceRoot":"../../../src","sources":["providers/AbstractChatProvider.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAUA,OAAO,MAAeA,oBAAoB,CAIxC;EAGAC,WAAWA,CAACC,MAA6B,EAAE;IACzC,IAAI,CAACC,OAAO,GAAGD,MAAM,CAACC,OAAO;EAC/B;;EAEA;AACF;AACA;AACA;;EAGE;AACF;AACA;AACA;;EAGE;AACF;AACA;AACA;;EAGE;AACF;AACA;EACEC,WAAWA,CAACC,KAAY,EAAEC,SAAqC,EAAQ;IACrE,MAAMC,MAAM,GAAG,IAAI,CAACC,eAAe,CAACH,KAAK,CAAC;IAC1C,IAAII,cAAmC;IAEvC,MAAMC,gBAAmC,GAAG;MAC1CC,QAAQ,EAAGC,KAAK,IAAK;QACnBH,cAAc,GAAG,IAAI,CAACI,gBAAgB,CACpCD,KAAK,EACLH,cACF,CAAC;QACDH,SAAS,CAACQ,QAAQ,CAACL,cAAc,CAAC;MACpC,CAAC;MACDM,SAAS,EAAEA,CAAA,KAAM;QACf,IAAIN,cAAc,EAAE;UAClBH,SAAS,CAACS,SAAS,CAACN,cAAc,CAAC;QACrC;MACF,CAAC;MACDO,OAAO,EAAGC,KAAK,IAAK;QAClBX,SAAS,CAACU,OAAO,CAAC,IAAIE,KAAK,CAACD,KAAK,CAACE,OAAO,CAAC,CAAC;MAC7C;IACF,CAAC;IAED,IAAI,CAAChB,OAAO,CAACiB,MAAM,CAACb,MAAM,EAAEG,gBAAgB,CAAC;EAC/C;;EAEA;AACF;AACA;EACEW,KAAKA,CAAA,EAAS;IACZ,IAAI,CAAClB,OAAO,CAACkB,KAAK,CAAC,CAAC;EACtB;AACF","ignoreList":[]}
1
+ {"version":3,"names":["AbstractChatProvider","constructor","config","request","sendMessage","input","callbacks","params","transformParams","currentMessage","requestCallbacks","onStream","chunk","transformMessage","output","current","onUpdate","onSuccess","onError","error","Error","message","create","abort"],"sourceRoot":"../../../src","sources":["providers/AbstractChatProvider.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAYA,OAAO,MAAeA,oBAAoB,CAIxC;EAGAC,WAAWA,CAACC,MAA6B,EAAE;IACzC,IAAI,CAACC,OAAO,GAAGD,MAAM,CAACC,OAAO;EAC/B;;EAEA;AACF;AACA;AACA;;EAME;AACF;AACA;AACA;;EAGE;AACF;AACA;AACA;;EAKE;AACF;AACA;EACEC,WAAWA,CAACC,KAAY,EAAEC,SAAqC,EAAQ;IACrE,MAAMC,MAAM,GAAG,IAAI,CAACC,eAAe,CAACH,KAAK,CAAC;IAC1C,IAAII,cAAmC;IAEvC,MAAMC,gBAAmC,GAAG;MAC1CC,QAAQ,EAAGC,KAAK,IAAK;QACnB;QACAH,cAAc,GAAG,IAAI,CAACI,gBAAgB,CAAC;UACrCC,MAAM,EAAEF,KAAe;UACvBG,OAAO,EAAEN;QACX,CAAC,CAAC;QACFH,SAAS,CAACU,QAAQ,CAACP,cAAc,CAAC;MACpC,CAAC;MACDQ,SAAS,EAAEA,CAAA,KAAM;QACf,IAAIR,cAAc,EAAE;UAClBH,SAAS,CAACW,SAAS,CAACR,cAAc,CAAC;QACrC;MACF,CAAC;MACDS,OAAO,EAAGC,KAAK,IAAK;QAClBb,SAAS,CAACY,OAAO,CAAC,IAAIE,KAAK,CAACD,KAAK,CAACE,OAAO,CAAC,CAAC;MAC7C;IACF,CAAC;IAED,IAAI,CAAClB,OAAO,CAACmB,MAAM,CAACf,MAAM,EAAEG,gBAAgB,CAAC;EAC/C;;EAEA;AACF;AACA;EACEa,KAAKA,CAAA,EAAS;IACZ,IAAI,CAACpB,OAAO,CAACoB,KAAK,CAAC,CAAC;EACtB;AACF","ignoreList":[]}
@@ -20,8 +20,13 @@ export class DeepSeekChatProvider extends OpenAIChatProvider {
20
20
 
21
21
  /**
22
22
  * 覆写 transformMessage,处理 DeepSeek reasoning_content
23
+ * 新签名:info.output + info.current
23
24
  */
24
- transformMessage(output, current) {
25
+ transformMessage(info) {
26
+ const {
27
+ output,
28
+ current
29
+ } = info;
25
30
  const raw = output.data;
26
31
  if (raw.trim() === '[DONE]') {
27
32
  return {
@@ -48,14 +53,12 @@ export class DeepSeekChatProvider extends OpenAIChatProvider {
48
53
 
49
54
  // 将 reasoning_content 映射为 <think> 标签包裹
50
55
  if (reasoningContent) {
51
- // 如果还没有开始 think 标签,添加开始标签
52
56
  if (!prevText.includes('<think>')) {
53
57
  newText += '<think>';
54
58
  }
55
59
  newText += reasoningContent;
56
60
  }
57
61
  if (content) {
58
- // 如果有未关闭的 think 标签,先关闭
59
62
  if (newText.includes('<think>') && !newText.includes('</think>')) {
60
63
  newText += '</think>';
61
64
  }
@@ -76,7 +79,7 @@ export class DeepSeekChatProvider extends OpenAIChatProvider {
76
79
  turnId: current?.turnId ?? `turn-${Date.now()}`
77
80
  };
78
81
  } catch {
79
- return current ?? super.transformMessage(output, current);
82
+ return current ?? super.transformMessage(info);
80
83
  }
81
84
  }
82
85
  }