@unif/react-native-chat-sdk 0.1.2 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_useXChat","_useXConversations","_useXModel","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ChatContext","createContext","memoryStorage","_data","Map","getItem","key","setItem","value","removeItem","delete","ChatProvider","props","provider","storage","models","defaultModel","generateId","requestPlaceholder","requestFallback","children","chatConfig","useMemo","chat","useXChat","convOptions","conversations","useXConversations","model","useXModel","jsx","Provider","useChatContext","ctx","useContext","Error"],"sourceRoot":"../../../src","sources":["hooks/ChatProvider.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_useXChat","_useXConversations","_useXModel","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ChatContext","createContext","memoryStorage","_data","Map","getItem","key","setItem","value","removeItem","delete","ChatProvider","props","provider","storage","models","defaultModel","generateId","requestPlaceholder","requestFallback","children","chatConfig","useMemo","chat","useXChat","convOptions","conversations","useXConversations","model","useXModel","jsx","Provider","useChatContext","ctx","useContext","Error"],"sourceRoot":"../../../src","sources":["hooks/ChatProvider.tsx"],"mappings":"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","ignoreList":[]}
@@ -69,6 +69,80 @@ function useXChat(config) {
69
69
  const clearError = (0, _react.useCallback)(() => {
70
70
  store.getState().setError(null);
71
71
  }, [store]);
72
+ const onReload = (0, _react.useCallback)((id, input) => {
73
+ const s = store.getState();
74
+ if (s.isRequesting) return;
75
+
76
+ // 将目标消息标记为 loading,移除其后的 assistant 消息
77
+ const targetIdx = s.messages.findIndex(m => m.id === id);
78
+ if (targetIdx < 0) return;
79
+ store.getState().setRequesting(true);
80
+ store.getState().setError(null);
81
+ store.getState().setSuggestions([]);
82
+ provider.sendMessage(input, {
83
+ onUpdate: message => {
84
+ store.getState().upsertMessage(message);
85
+ },
86
+ onSuccess: message => {
87
+ const m = message;
88
+ store.getState().upsertMessage({
89
+ ...m,
90
+ status: 'success'
91
+ });
92
+ store.getState().setRequesting(false);
93
+ },
94
+ onError: error => {
95
+ store.getState().setError(error.message);
96
+ store.getState().setRequesting(false);
97
+ if (config.requestFallback) {
98
+ const fallbackMsg = config.requestFallback(input, {
99
+ error
100
+ });
101
+ store.getState().addMessage(fallbackMsg);
102
+ }
103
+ },
104
+ onSuggestion: items => {
105
+ store.getState().setSuggestions(items);
106
+ }
107
+ });
108
+ }, [provider, store, config]);
109
+ const setMessages = (0, _react.useCallback)(messagesOrFn => {
110
+ if (typeof messagesOrFn === 'function') {
111
+ const current = store.getState().messages;
112
+ const currentInfos = current.map(m => ({
113
+ id: m.id,
114
+ message: m,
115
+ status: m.status,
116
+ extra: m.extra
117
+ }));
118
+ const next = messagesOrFn(currentInfos);
119
+ store.getState().setMessages(next.map(info => info.message));
120
+ } else {
121
+ store.getState().setMessages(messagesOrFn.map(info => info.message));
122
+ }
123
+ }, [store]);
124
+ const setMessage = (0, _react.useCallback)((id, partialOrFn) => {
125
+ store.getState().setMessage(id, m => {
126
+ const info = {
127
+ id: m.id,
128
+ message: m,
129
+ status: m.status,
130
+ extra: m.extra
131
+ };
132
+ const partial = typeof partialOrFn === 'function' ? partialOrFn(info) : partialOrFn;
133
+ const updated = {};
134
+ if (partial.message !== undefined) {
135
+ Object.assign(updated, partial.message);
136
+ }
137
+ if (partial.status !== undefined) {
138
+ updated.status = partial.status;
139
+ }
140
+ return updated;
141
+ });
142
+ }, [store]);
143
+ const removeMessage = (0, _react.useCallback)(id => {
144
+ store.getState().removeMessage(id);
145
+ }, [store]);
72
146
  (0, _react.useEffect)(() => {
73
147
  return () => {
74
148
  provider.abort();
@@ -86,10 +160,14 @@ function useXChat(config) {
86
160
  suggestions: state.suggestions,
87
161
  error: state.error,
88
162
  onRequest,
163
+ onReload,
89
164
  abort,
90
165
  resetChat,
91
166
  loadSession,
92
- clearError
167
+ clearError,
168
+ setMessages,
169
+ setMessage,
170
+ removeMessage
93
171
  };
94
172
  }
95
173
  //# sourceMappingURL=useXChat.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_chatStore","useXChat","config","provider","storeRef","useRef","createChatStore","store","current","state","useSyncExternalStore","subscribe","getState","onRequest","useCallback","input","s","isRequesting","setRequesting","setError","setSuggestions","localMessage","transformLocalMessage","addMessage","sendMessage","onUpdate","message","upsertMessage","onSuccess","m","status","onError","error","requestFallback","fallbackMsg","onSuggestion","items","abort","resetChat","loadSession","messages","clearError","useEffect","map","id","extra","requesting","suggestions"],"sourceRoot":"../../../src","sources":["hooks/useXChat.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_chatStore","useXChat","config","provider","storeRef","useRef","createChatStore","store","current","state","useSyncExternalStore","subscribe","getState","onRequest","useCallback","input","s","isRequesting","setRequesting","setError","setSuggestions","localMessage","transformLocalMessage","addMessage","sendMessage","onUpdate","message","upsertMessage","onSuccess","m","status","onError","error","requestFallback","fallbackMsg","onSuggestion","items","abort","resetChat","loadSession","messages","clearError","onReload","id","targetIdx","findIndex","setMessages","messagesOrFn","currentInfos","map","extra","next","info","setMessage","partialOrFn","partial","updated","undefined","Object","assign","removeMessage","useEffect","requesting","suggestions"],"sourceRoot":"../../../src","sources":["hooks/useXChat.ts"],"mappings":"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","ignoreList":[]}
@@ -37,6 +37,22 @@ const createChatStore = () => (0, _zustand.create)((set, get) => ({
37
37
  });
38
38
  }
39
39
  },
40
+ setMessages: messagesOrFn => set(state => ({
41
+ messages: typeof messagesOrFn === 'function' ? messagesOrFn(state.messages) : messagesOrFn
42
+ })),
43
+ setMessage: (id, partialOrFn) => set(state => ({
44
+ messages: state.messages.map(m => {
45
+ if (m.id !== id) return m;
46
+ const partial = typeof partialOrFn === 'function' ? partialOrFn(m) : partialOrFn;
47
+ return {
48
+ ...m,
49
+ ...partial
50
+ };
51
+ })
52
+ })),
53
+ removeMessage: id => set(state => ({
54
+ messages: state.messages.filter(m => m.id !== id)
55
+ })),
40
56
  setSuggestions: items => set({
41
57
  suggestions: items
42
58
  }),
@@ -1 +1 @@
1
- {"version":3,"names":["_zustand","require","createChatStore","create","set","get","messages","streamingText","suggestions","isRequesting","error","addMessage","message","state","updateMessage","id","updater","map","m","upsertMessage","existingIdx","findIndex","newMessages","setSuggestions","items","setRequesting","v","setError","resetChat","loadSession","exports"],"sourceRoot":"../../../src","sources":["stores/chatStore.ts"],"mappings":";;;;;;AAKA,IAAAA,QAAA,GAAAC,OAAA;AALA;AACA;AACA;AACA;;AAuBO,MAAMC,eAAe,GAAGA,CAAA,KAC7B,IAAAC,eAAM,EAAY,CAACC,GAAG,EAAEC,GAAG,MAAM;EAC/BC,QAAQ,EAAE,EAAE;EACZC,aAAa,EAAE,EAAE;EACjBC,WAAW,EAAE,EAAE;EACfC,YAAY,EAAE,KAAK;EACnBC,KAAK,EAAE,IAAI;EAEXC,UAAU,EAAGC,OAAO,IAClBR,GAAG,CAAES,KAAK,KAAM;IACdP,QAAQ,EAAE,CAACM,OAAO,EAAE,GAAGC,KAAK,CAACP,QAAQ;EACvC,CAAC,CAAC,CAAC;EAELQ,aAAa,EAAEA,CAACC,EAAE,EAAEC,OAAO,KACzBZ,GAAG,CAAES,KAAK,KAAM;IACdP,QAAQ,EAAEO,KAAK,CAACP,QAAQ,CAACW,GAAG,CAAEC,CAAC,IAAMA,CAAC,CAACH,EAAE,KAAKA,EAAE,GAAGC,OAAO,CAACE,CAAC,CAAC,GAAGA,CAAE;EACpE,CAAC,CAAC,CAAC;EAELC,aAAa,EAAGP,OAAO,IAAK;IAC1B,MAAMC,KAAK,GAAGR,GAAG,CAAC,CAAC;IACnB,MAAMe,WAAW,GAAGP,KAAK,CAACP,QAAQ,CAACe,SAAS,CAAEH,CAAC,IAAKA,CAAC,CAACH,EAAE,KAAKH,OAAO,CAACG,EAAE,CAAC;IAExE,IAAIK,WAAW,IAAI,CAAC,EAAE;MACpB,MAAME,WAAW,GAAG,CAAC,GAAGT,KAAK,CAACP,QAAQ,CAAC;MACvCgB,WAAW,CAACF,WAAW,CAAC,GAAGR,OAAO;MAClCR,GAAG,CAAC;QAAEE,QAAQ,EAAEgB;MAAY,CAAC,CAAC;IAChC,CAAC,MAAM;MACLlB,GAAG,CAAC;QAAEE,QAAQ,EAAE,CAACM,OAAO,EAAE,GAAGC,KAAK,CAACP,QAAQ;MAAE,CAAC,CAAC;IACjD;EACF,CAAC;EAEDiB,cAAc,EAAGC,KAAK,IAAKpB,GAAG,CAAC;IAAEI,WAAW,EAAEgB;EAAM,CAAC,CAAC;EACtDC,aAAa,EAAGC,CAAC,IAAKtB,GAAG,CAAC;IAAEK,YAAY,EAAEiB;EAAE,CAAC,CAAC;EAC9CC,QAAQ,EAAGjB,KAAK,IAAKN,GAAG,CAAC;IAAEM;EAAM,CAAC,CAAC;EAEnCkB,SAAS,EAAEA,CAAA,KACTxB,GAAG,CAAC;IACFE,QAAQ,EAAE,EAAE;IACZC,aAAa,EAAE,EAAE;IACjBC,WAAW,EAAE,EAAE;IACfC,YAAY,EAAE,KAAK;IACnBC,KAAK,EAAE;EACT,CAAC,CAAC;EAEJmB,WAAW,EAAGvB,QAAQ,IACpBF,GAAG,CAAC;IACFE,QAAQ;IACRC,aAAa,EAAE,EAAE;IACjBC,WAAW,EAAE,EAAE;IACfC,YAAY,EAAE,KAAK;IACnBC,KAAK,EAAE;EACT,CAAC;AACL,CAAC,CAAC,CAAC;AAACoB,OAAA,CAAA5B,eAAA,GAAAA,eAAA","ignoreList":[]}
1
+ {"version":3,"names":["_zustand","require","createChatStore","create","set","get","messages","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 +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","chatConfig","chat","convOptions","conversations","model","Provider","useChatContext","ctx","Error"],"sourceRoot":"../../../src","sources":["hooks/ChatProvider.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,IAAGC,aAAa,EAAEC,UAAU,EAAEC,OAAO,QAAO,OAAO;AAC/D,SAAQC,QAAQ,QAAO,eAAY;AACnC,SAAQC,iBAAiB,QAAO,wBAAqB;AACrD,SAAQC,SAAS,QAAO,gBAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAiDtC,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,UAAkD,GAAG5B,OAAO,CAChE,OAAO;IACLoB,QAAQ;IACRI,UAAU;IACVC,kBAAkB;IAClBC;EACF,CAAC,CAAC,EACF,CAACN,QAAQ,EAAEI,UAAU,EAAEC,kBAAkB,EAAEC,eAAe,CAC5D,CAAC;EAED,MAAMG,IAAI,GAAG5B,QAAQ,CAAC2B,UAAU,CAAC;EAEjC,MAAME,WAAqC,GAAG9B,OAAO,CACnD,OAAO;IAAEqB,OAAO,EAAEA,OAAO,IAAId;EAAc,CAAC,CAAC,EAC7C,CAACc,OAAO,CACV,CAAC;EACD,MAAMU,aAAa,GAAG7B,iBAAiB,CAAC4B,WAAW,CAAC;EAEpD,MAAME,KAAK,GAAG7B,SAAS,CAAC;IAAEmB,MAAM;IAAEC;EAAa,CAAC,CAAC;EAEjD,MAAMT,KAAK,GAAGd,OAAO,CACnB,OAAO;IACL,GAAG6B,IAAI;IACP,GAAGE,aAAa;IAChB,GAAGC;EACL,CAAC,CAAC,EACF,CAACH,IAAI,EAAEE,aAAa,EAAEC,KAAK,CAC7B,CAAC;EAED,oBACE3B,IAAA,CAACC,WAAW,CAAC2B,QAAQ;IAACnB,KAAK,EAAEA,KAAqC;IAAAa,QAAA,EAC/DA;EAAQ,CACW,CAAC;AAE3B;AAEA,OAAO,SAASO,cAAcA,CAAA,EAEC;EAC7B,MAAMC,GAAG,GAAGpC,UAAU,CAACO,WAAW,CAAC;EACnC,IAAI,CAAC6B,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","ChatProvider","props","provider","storage","models","defaultModel","generateId","requestPlaceholder","requestFallback","children","chatConfig","chat","convOptions","conversations","model","Provider","useChatContext","ctx","Error"],"sourceRoot":"../../../src","sources":["hooks/ChatProvider.tsx"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAEA,OAAOA,KAAK,IAAGC,aAAa,EAAEC,UAAU,EAAEC,OAAO,QAAO,OAAO;AAC/D,SAAQC,QAAQ,QAAO,eAAY;AACnC,SAAQC,iBAAiB,QAAO,wBAAqB;AACrD,SAAQC,SAAS,QAAO,gBAAa;AAAC,SAAAC,GAAA,IAAAC,IAAA;AA8DtC,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,UAAkD,GAAG5B,OAAO,CAChE,OAAO;IACLoB,QAAQ;IACRI,UAAU;IACVC,kBAAkB;IAClBC;EACF,CAAC,CAAC,EACF,CAACN,QAAQ,EAAEI,UAAU,EAAEC,kBAAkB,EAAEC,eAAe,CAC5D,CAAC;EAED,MAAMG,IAAI,GAAG5B,QAAQ,CAAC2B,UAAU,CAAC;EAEjC,MAAME,WAAqC,GAAG9B,OAAO,CACnD,OAAO;IAAEqB,OAAO,EAAEA,OAAO,IAAId;EAAc,CAAC,CAAC,EAC7C,CAACc,OAAO,CACV,CAAC;EACD,MAAMU,aAAa,GAAG7B,iBAAiB,CAAC4B,WAAW,CAAC;EAEpD,MAAME,KAAK,GAAG7B,SAAS,CAAC;IAAEmB,MAAM;IAAEC;EAAa,CAAC,CAAC;EAEjD,MAAMT,KAAK,GAAGd,OAAO,CACnB,OAAO;IACL,GAAG6B,IAAI;IACP,GAAGE,aAAa;IAChB,GAAGC;EACL,CAAC,CAAC,EACF,CAACH,IAAI,EAAEE,aAAa,EAAEC,KAAK,CAC7B,CAAC;EAED,oBACE3B,IAAA,CAACC,WAAW,CAAC2B,QAAQ;IAACnB,KAAK,EAAEA,KAAqC;IAAAa,QAAA,EAC/DA;EAAQ,CACW,CAAC;AAE3B;AAEA,OAAO,SAASO,cAAcA,CAAA,EAEC;EAC7B,MAAMC,GAAG,GAAGpC,UAAU,CAACO,WAAW,CAAC;EACnC,IAAI,CAAC6B,GAAG,EAAE;IACR,MAAM,IAAIC,KAAK,CAAC,mDAAmD,CAAC;EACtE;EACA,OAAOD,GAAG;AACZ","ignoreList":[]}
@@ -65,6 +65,80 @@ export function useXChat(config) {
65
65
  const clearError = useCallback(() => {
66
66
  store.getState().setError(null);
67
67
  }, [store]);
68
+ const onReload = useCallback((id, input) => {
69
+ const s = store.getState();
70
+ if (s.isRequesting) return;
71
+
72
+ // 将目标消息标记为 loading,移除其后的 assistant 消息
73
+ const targetIdx = s.messages.findIndex(m => m.id === id);
74
+ if (targetIdx < 0) return;
75
+ store.getState().setRequesting(true);
76
+ store.getState().setError(null);
77
+ store.getState().setSuggestions([]);
78
+ provider.sendMessage(input, {
79
+ onUpdate: message => {
80
+ store.getState().upsertMessage(message);
81
+ },
82
+ onSuccess: message => {
83
+ const m = message;
84
+ store.getState().upsertMessage({
85
+ ...m,
86
+ status: 'success'
87
+ });
88
+ store.getState().setRequesting(false);
89
+ },
90
+ onError: error => {
91
+ store.getState().setError(error.message);
92
+ store.getState().setRequesting(false);
93
+ if (config.requestFallback) {
94
+ const fallbackMsg = config.requestFallback(input, {
95
+ error
96
+ });
97
+ store.getState().addMessage(fallbackMsg);
98
+ }
99
+ },
100
+ onSuggestion: items => {
101
+ store.getState().setSuggestions(items);
102
+ }
103
+ });
104
+ }, [provider, store, config]);
105
+ const setMessages = useCallback(messagesOrFn => {
106
+ if (typeof messagesOrFn === 'function') {
107
+ const current = store.getState().messages;
108
+ const currentInfos = current.map(m => ({
109
+ id: m.id,
110
+ message: m,
111
+ status: m.status,
112
+ extra: m.extra
113
+ }));
114
+ const next = messagesOrFn(currentInfos);
115
+ store.getState().setMessages(next.map(info => info.message));
116
+ } else {
117
+ store.getState().setMessages(messagesOrFn.map(info => info.message));
118
+ }
119
+ }, [store]);
120
+ const setMessage = useCallback((id, partialOrFn) => {
121
+ store.getState().setMessage(id, m => {
122
+ const info = {
123
+ id: m.id,
124
+ message: m,
125
+ status: m.status,
126
+ extra: m.extra
127
+ };
128
+ const partial = typeof partialOrFn === 'function' ? partialOrFn(info) : partialOrFn;
129
+ const updated = {};
130
+ if (partial.message !== undefined) {
131
+ Object.assign(updated, partial.message);
132
+ }
133
+ if (partial.status !== undefined) {
134
+ updated.status = partial.status;
135
+ }
136
+ return updated;
137
+ });
138
+ }, [store]);
139
+ const removeMessage = useCallback(id => {
140
+ store.getState().removeMessage(id);
141
+ }, [store]);
68
142
  useEffect(() => {
69
143
  return () => {
70
144
  provider.abort();
@@ -82,10 +156,14 @@ export function useXChat(config) {
82
156
  suggestions: state.suggestions,
83
157
  error: state.error,
84
158
  onRequest,
159
+ onReload,
85
160
  abort,
86
161
  resetChat,
87
162
  loadSession,
88
- clearError
163
+ clearError,
164
+ setMessages,
165
+ setMessage,
166
+ removeMessage
89
167
  };
90
168
  }
91
169
  //# sourceMappingURL=useXChat.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useRef","useSyncExternalStore","createChatStore","useXChat","config","provider","storeRef","store","current","state","subscribe","getState","onRequest","input","s","isRequesting","setRequesting","setError","setSuggestions","localMessage","transformLocalMessage","addMessage","sendMessage","onUpdate","message","upsertMessage","onSuccess","m","status","onError","error","requestFallback","fallbackMsg","onSuggestion","items","abort","resetChat","loadSession","messages","clearError","map","id","extra","requesting","suggestions"],"sourceRoot":"../../../src","sources":["hooks/useXChat.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useEffect","useRef","useSyncExternalStore","createChatStore","useXChat","config","provider","storeRef","store","current","state","subscribe","getState","onRequest","input","s","isRequesting","setRequesting","setError","setSuggestions","localMessage","transformLocalMessage","addMessage","sendMessage","onUpdate","message","upsertMessage","onSuccess","m","status","onError","error","requestFallback","fallbackMsg","onSuggestion","items","abort","resetChat","loadSession","messages","clearError","onReload","id","targetIdx","findIndex","setMessages","messagesOrFn","currentInfos","map","extra","next","info","setMessage","partialOrFn","partial","updated","undefined","Object","assign","removeMessage","requesting","suggestions"],"sourceRoot":"../../../src","sources":["hooks/useXChat.ts"],"mappings":"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","ignoreList":[]}
@@ -33,6 +33,22 @@ export const createChatStore = () => create((set, get) => ({
33
33
  });
34
34
  }
35
35
  },
36
+ setMessages: messagesOrFn => set(state => ({
37
+ messages: typeof messagesOrFn === 'function' ? messagesOrFn(state.messages) : messagesOrFn
38
+ })),
39
+ setMessage: (id, partialOrFn) => set(state => ({
40
+ messages: state.messages.map(m => {
41
+ if (m.id !== id) return m;
42
+ const partial = typeof partialOrFn === 'function' ? partialOrFn(m) : partialOrFn;
43
+ return {
44
+ ...m,
45
+ ...partial
46
+ };
47
+ })
48
+ })),
49
+ removeMessage: id => set(state => ({
50
+ messages: state.messages.filter(m => m.id !== id)
51
+ })),
36
52
  setSuggestions: items => set({
37
53
  suggestions: items
38
54
  }),
@@ -1 +1 @@
1
- {"version":3,"names":["create","createChatStore","set","get","messages","streamingText","suggestions","isRequesting","error","addMessage","message","state","updateMessage","id","updater","map","m","upsertMessage","existingIdx","findIndex","newMessages","setSuggestions","items","setRequesting","v","setError","resetChat","loadSession"],"sourceRoot":"../../../src","sources":["stores/chatStore.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA,SAAQA,MAAM,QAAO,SAAS;AAqB9B,OAAO,MAAMC,eAAe,GAAGA,CAAA,KAC7BD,MAAM,CAAY,CAACE,GAAG,EAAEC,GAAG,MAAM;EAC/BC,QAAQ,EAAE,EAAE;EACZC,aAAa,EAAE,EAAE;EACjBC,WAAW,EAAE,EAAE;EACfC,YAAY,EAAE,KAAK;EACnBC,KAAK,EAAE,IAAI;EAEXC,UAAU,EAAGC,OAAO,IAClBR,GAAG,CAAES,KAAK,KAAM;IACdP,QAAQ,EAAE,CAACM,OAAO,EAAE,GAAGC,KAAK,CAACP,QAAQ;EACvC,CAAC,CAAC,CAAC;EAELQ,aAAa,EAAEA,CAACC,EAAE,EAAEC,OAAO,KACzBZ,GAAG,CAAES,KAAK,KAAM;IACdP,QAAQ,EAAEO,KAAK,CAACP,QAAQ,CAACW,GAAG,CAAEC,CAAC,IAAMA,CAAC,CAACH,EAAE,KAAKA,EAAE,GAAGC,OAAO,CAACE,CAAC,CAAC,GAAGA,CAAE;EACpE,CAAC,CAAC,CAAC;EAELC,aAAa,EAAGP,OAAO,IAAK;IAC1B,MAAMC,KAAK,GAAGR,GAAG,CAAC,CAAC;IACnB,MAAMe,WAAW,GAAGP,KAAK,CAACP,QAAQ,CAACe,SAAS,CAAEH,CAAC,IAAKA,CAAC,CAACH,EAAE,KAAKH,OAAO,CAACG,EAAE,CAAC;IAExE,IAAIK,WAAW,IAAI,CAAC,EAAE;MACpB,MAAME,WAAW,GAAG,CAAC,GAAGT,KAAK,CAACP,QAAQ,CAAC;MACvCgB,WAAW,CAACF,WAAW,CAAC,GAAGR,OAAO;MAClCR,GAAG,CAAC;QAAEE,QAAQ,EAAEgB;MAAY,CAAC,CAAC;IAChC,CAAC,MAAM;MACLlB,GAAG,CAAC;QAAEE,QAAQ,EAAE,CAACM,OAAO,EAAE,GAAGC,KAAK,CAACP,QAAQ;MAAE,CAAC,CAAC;IACjD;EACF,CAAC;EAEDiB,cAAc,EAAGC,KAAK,IAAKpB,GAAG,CAAC;IAAEI,WAAW,EAAEgB;EAAM,CAAC,CAAC;EACtDC,aAAa,EAAGC,CAAC,IAAKtB,GAAG,CAAC;IAAEK,YAAY,EAAEiB;EAAE,CAAC,CAAC;EAC9CC,QAAQ,EAAGjB,KAAK,IAAKN,GAAG,CAAC;IAAEM;EAAM,CAAC,CAAC;EAEnCkB,SAAS,EAAEA,CAAA,KACTxB,GAAG,CAAC;IACFE,QAAQ,EAAE,EAAE;IACZC,aAAa,EAAE,EAAE;IACjBC,WAAW,EAAE,EAAE;IACfC,YAAY,EAAE,KAAK;IACnBC,KAAK,EAAE;EACT,CAAC,CAAC;EAEJmB,WAAW,EAAGvB,QAAQ,IACpBF,GAAG,CAAC;IACFE,QAAQ;IACRC,aAAa,EAAE,EAAE;IACjBC,WAAW,EAAE,EAAE;IACfC,YAAY,EAAE,KAAK;IACnBC,KAAK,EAAE;EACT,CAAC;AACL,CAAC,CAAC,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["create","createChatStore","set","get","messages","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"],"sourceRoot":"../../../src","sources":["stores/chatStore.ts"],"mappings":";;AAAA;AACA;AACA;AACA;;AAEA,SAAQA,MAAM,QAAO,SAAS;AAiC9B,OAAO,MAAMC,eAAe,GAAGA,CAAA,KAC7BD,MAAM,CAAY,CAACE,GAAG,EAAEC,GAAG,MAAM;EAC/BC,QAAQ,EAAE,EAAE;EACZC,aAAa,EAAE,EAAE;EACjBC,WAAW,EAAE,EAAE;EACfC,YAAY,EAAE,KAAK;EACnBC,KAAK,EAAE,IAAI;EAEXC,UAAU,EAAGC,OAAO,IAClBR,GAAG,CAAES,KAAK,KAAM;IACdP,QAAQ,EAAE,CAACM,OAAO,EAAE,GAAGC,KAAK,CAACP,QAAQ;EACvC,CAAC,CAAC,CAAC;EAELQ,aAAa,EAAEA,CAACC,EAAE,EAAEC,OAAO,KACzBZ,GAAG,CAAES,KAAK,KAAM;IACdP,QAAQ,EAAEO,KAAK,CAACP,QAAQ,CAACW,GAAG,CAAEC,CAAC,IAAMA,CAAC,CAACH,EAAE,KAAKA,EAAE,GAAGC,OAAO,CAACE,CAAC,CAAC,GAAGA,CAAE;EACpE,CAAC,CAAC,CAAC;EAELC,aAAa,EAAGP,OAAO,IAAK;IAC1B,MAAMC,KAAK,GAAGR,GAAG,CAAC,CAAC;IACnB,MAAMe,WAAW,GAAGP,KAAK,CAACP,QAAQ,CAACe,SAAS,CAAEH,CAAC,IAAKA,CAAC,CAACH,EAAE,KAAKH,OAAO,CAACG,EAAE,CAAC;IAExE,IAAIK,WAAW,IAAI,CAAC,EAAE;MACpB,MAAME,WAAW,GAAG,CAAC,GAAGT,KAAK,CAACP,QAAQ,CAAC;MACvCgB,WAAW,CAACF,WAAW,CAAC,GAAGR,OAAO;MAClCR,GAAG,CAAC;QAAEE,QAAQ,EAAEgB;MAAY,CAAC,CAAC;IAChC,CAAC,MAAM;MACLlB,GAAG,CAAC;QAAEE,QAAQ,EAAE,CAACM,OAAO,EAAE,GAAGC,KAAK,CAACP,QAAQ;MAAE,CAAC,CAAC;IACjD;EACF,CAAC;EAEDiB,WAAW,EAAGC,YAAY,IACxBpB,GAAG,CAAES,KAAK,KAAM;IACdP,QAAQ,EACN,OAAOkB,YAAY,KAAK,UAAU,GAC9BA,YAAY,CAACX,KAAK,CAACP,QAAQ,CAAC,GAC5BkB;EACR,CAAC,CAAC,CAAC;EAELC,UAAU,EAAEA,CAACV,EAAE,EAAEW,WAAW,KAC1BtB,GAAG,CAAES,KAAK,KAAM;IACdP,QAAQ,EAAEO,KAAK,CAACP,QAAQ,CAACW,GAAG,CAAEC,CAAC,IAAK;MAClC,IAAIA,CAAC,CAACH,EAAE,KAAKA,EAAE,EAAE,OAAOG,CAAC;MACzB,MAAMS,OAAO,GACX,OAAOD,WAAW,KAAK,UAAU,GAAGA,WAAW,CAACR,CAAC,CAAC,GAAGQ,WAAW;MAClE,OAAO;QAAE,GAAGR,CAAC;QAAE,GAAGS;MAAQ,CAAC;IAC7B,CAAC;EACH,CAAC,CAAC,CAAC;EAELC,aAAa,EAAGb,EAAE,IAChBX,GAAG,CAAES,KAAK,KAAM;IACdP,QAAQ,EAAEO,KAAK,CAACP,QAAQ,CAACuB,MAAM,CAAEX,CAAC,IAAKA,CAAC,CAACH,EAAE,KAAKA,EAAE;EACpD,CAAC,CAAC,CAAC;EAELe,cAAc,EAAGC,KAAK,IAAK3B,GAAG,CAAC;IAAEI,WAAW,EAAEuB;EAAM,CAAC,CAAC;EACtDC,aAAa,EAAGC,CAAC,IAAK7B,GAAG,CAAC;IAAEK,YAAY,EAAEwB;EAAE,CAAC,CAAC;EAC9CC,QAAQ,EAAGxB,KAAK,IAAKN,GAAG,CAAC;IAAEM;EAAM,CAAC,CAAC;EAEnCyB,SAAS,EAAEA,CAAA,KACT/B,GAAG,CAAC;IACFE,QAAQ,EAAE,EAAE;IACZC,aAAa,EAAE,EAAE;IACjBC,WAAW,EAAE,EAAE;IACfC,YAAY,EAAE,KAAK;IACnBC,KAAK,EAAE;EACT,CAAC,CAAC;EAEJ0B,WAAW,EAAG9B,QAAQ,IACpBF,GAAG,CAAC;IACFE,QAAQ;IACRC,aAAa,EAAE,EAAE;IACjBC,WAAW,EAAE,EAAE;IACfC,YAAY,EAAE,KAAK;IACnBC,KAAK,EAAE;EACT,CAAC;AACL,CAAC,CAAC,CAAC","ignoreList":[]}
@@ -30,10 +30,14 @@ interface ChatContextValue<Message = ChatMessage> {
30
30
  suggestions: SuggestionItem[];
31
31
  error: string | null;
32
32
  onRequest: (input: unknown) => void;
33
+ onReload: (id: string, input: unknown) => void;
33
34
  abort: () => void;
34
35
  resetChat: () => void;
35
36
  loadSession: (messages: ChatMessage[]) => void;
36
37
  clearError: () => void;
38
+ setMessages: (messages: MessageInfo<Message>[] | ((prev: MessageInfo<Message>[]) => MessageInfo<Message>[])) => void;
39
+ setMessage: (id: string, partial: Partial<MessageInfo<Message>> | ((msg: MessageInfo<Message>) => Partial<MessageInfo<Message>>)) => void;
40
+ removeMessage: (id: string) => void;
37
41
  sessions: SessionSummary[];
38
42
  activeId: string;
39
43
  switchSession: (id: string) => Promise<Message[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"ChatProvider.d.ts","sourceRoot":"","sources":["../../../../src/hooks/ChatProvider.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAA2C,MAAM,OAAO,CAAC;AAIhE,OAAO,KAAK,EAAiB,WAAW,EAAC,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAA2B,cAAc,EAAC,MAAM,qBAAqB,CAAC;AAClF,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAC,aAAa,EAAE,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,mCAAmC,CAAC;AAE5E,MAAM,WAAW,iBAAiB,CAChC,OAAO,GAAG,WAAW,EACrB,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,EAC9B,MAAM,GAAG,SAAS;IAElB,QAAQ,EAAE,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACvD,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC;IAC1B,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,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,UAAU,gBAAgB,CAAC,OAAO,GAAG,WAAW;IAE9C,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,OAAO,KAAK,IAAI,CAAC;IACpC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAC/C,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAElF,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAiBD,wBAAgB,YAAY,CAC1B,OAAO,GAAG,WAAW,EACrB,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,EAC9B,MAAM,GAAG,SAAS,EAClB,KAAK,EAAE,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,2CA8CjD;AAED,wBAAgB,cAAc,CAC5B,OAAO,GAAG,WAAW,KAClB,gBAAgB,CAAC,OAAO,CAAC,CAM7B"}
1
+ {"version":3,"file":"ChatProvider.d.ts","sourceRoot":"","sources":["../../../../src/hooks/ChatProvider.tsx"],"names":[],"mappings":"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"}
@@ -27,10 +27,14 @@ export interface UseXChatReturn<Message = ChatMessage, Input = RequestParams<Mes
27
27
  suggestions: SuggestionItem[];
28
28
  error: string | null;
29
29
  onRequest: (input: Input) => void;
30
+ onReload: (id: string, input: Input) => void;
30
31
  abort: () => void;
31
32
  resetChat: () => void;
32
33
  loadSession: (messages: ChatMessage[]) => void;
33
34
  clearError: () => void;
35
+ setMessages: (messages: MessageInfo<Message>[] | ((prev: MessageInfo<Message>[]) => MessageInfo<Message>[])) => void;
36
+ setMessage: (id: string, partial: Partial<MessageInfo<Message>> | ((msg: MessageInfo<Message>) => Partial<MessageInfo<Message>>)) => void;
37
+ removeMessage: (id: string) => void;
34
38
  }
35
39
  export declare function useXChat<Message = ChatMessage, Input = RequestParams<Message>, Output = SSEOutput>(config: UseXChatConfig<Message, Input, Output>): UseXChatReturn<Message, Input>;
36
40
  //# 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,EAAC,oBAAoB,EAAC,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAC,WAAW,EAAE,aAAa,EAAC,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAC,aAAa,EAAE,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAEjD,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,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,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAC/C,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;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,CAsGhC"}
1
+ {"version":3,"file":"useXChat.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useXChat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAC,WAAW,EAAE,aAAa,EAAC,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAC,aAAa,EAAE,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAEjD,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,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,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAC/C,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,CAyNhC"}
@@ -13,6 +13,9 @@ interface ChatState {
13
13
  addMessage: (message: ChatMessage) => void;
14
14
  updateMessage: (id: string, updater: (msg: ChatMessage) => ChatMessage) => void;
15
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;
18
+ removeMessage: (id: string) => void;
16
19
  setSuggestions: (items: SuggestionItem[]) => void;
17
20
  setRequesting: (v: boolean) => void;
18
21
  setError: (error: string | null) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"chatStore.d.ts","sourceRoot":"","sources":["../../../../src/stores/chatStore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAEjD,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,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,WAAW,KAAK,IAAI,CAAC;IAChF,aAAa,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9C,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;AAED,eAAO,MAAM,eAAe,8EAoDvB,CAAC"}
1
+ {"version":3,"file":"chatStore.d.ts","sourceRoot":"","sources":["../../../../src/stores/chatStore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAEjD,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,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,WAAW,KAAK,IAAI,CAAC;IAChF,aAAa,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9C,WAAW,EAAE,CACX,QAAQ,EACJ,WAAW,EAAE,GACb,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,CAAC,KACzC,IAAI,CAAC;IACV,UAAU,EAAE,CACV,EAAE,EAAE,MAAM,EACV,OAAO,EACH,OAAO,CAAC,WAAW,CAAC,GACpB,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC,KAC7C,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;AAED,eAAO,MAAM,eAAe,8EA2EvB,CAAC"}
@@ -30,10 +30,14 @@ interface ChatContextValue<Message = ChatMessage> {
30
30
  suggestions: SuggestionItem[];
31
31
  error: string | null;
32
32
  onRequest: (input: unknown) => void;
33
+ onReload: (id: string, input: unknown) => void;
33
34
  abort: () => void;
34
35
  resetChat: () => void;
35
36
  loadSession: (messages: ChatMessage[]) => void;
36
37
  clearError: () => void;
38
+ setMessages: (messages: MessageInfo<Message>[] | ((prev: MessageInfo<Message>[]) => MessageInfo<Message>[])) => void;
39
+ setMessage: (id: string, partial: Partial<MessageInfo<Message>> | ((msg: MessageInfo<Message>) => Partial<MessageInfo<Message>>)) => void;
40
+ removeMessage: (id: string) => void;
37
41
  sessions: SessionSummary[];
38
42
  activeId: string;
39
43
  switchSession: (id: string) => Promise<Message[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"ChatProvider.d.ts","sourceRoot":"","sources":["../../../../src/hooks/ChatProvider.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAA2C,MAAM,OAAO,CAAC;AAIhE,OAAO,KAAK,EAAiB,WAAW,EAAC,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAA2B,cAAc,EAAC,MAAM,qBAAqB,CAAC;AAClF,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAC,aAAa,EAAE,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,mCAAmC,CAAC;AAE5E,MAAM,WAAW,iBAAiB,CAChC,OAAO,GAAG,WAAW,EACrB,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,EAC9B,MAAM,GAAG,SAAS;IAElB,QAAQ,EAAE,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IACvD,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC;IAC1B,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,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,UAAU,gBAAgB,CAAC,OAAO,GAAG,WAAW;IAE9C,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,OAAO,KAAK,IAAI,CAAC;IACpC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAC/C,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAElF,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,gBAAgB,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACxC;AAiBD,wBAAgB,YAAY,CAC1B,OAAO,GAAG,WAAW,EACrB,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,EAC9B,MAAM,GAAG,SAAS,EAClB,KAAK,EAAE,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,2CA8CjD;AAED,wBAAgB,cAAc,CAC5B,OAAO,GAAG,WAAW,KAClB,gBAAgB,CAAC,OAAO,CAAC,CAM7B"}
1
+ {"version":3,"file":"ChatProvider.d.ts","sourceRoot":"","sources":["../../../../src/hooks/ChatProvider.tsx"],"names":[],"mappings":"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"}
@@ -27,10 +27,14 @@ export interface UseXChatReturn<Message = ChatMessage, Input = RequestParams<Mes
27
27
  suggestions: SuggestionItem[];
28
28
  error: string | null;
29
29
  onRequest: (input: Input) => void;
30
+ onReload: (id: string, input: Input) => void;
30
31
  abort: () => void;
31
32
  resetChat: () => void;
32
33
  loadSession: (messages: ChatMessage[]) => void;
33
34
  clearError: () => void;
35
+ setMessages: (messages: MessageInfo<Message>[] | ((prev: MessageInfo<Message>[]) => MessageInfo<Message>[])) => void;
36
+ setMessage: (id: string, partial: Partial<MessageInfo<Message>> | ((msg: MessageInfo<Message>) => Partial<MessageInfo<Message>>)) => void;
37
+ removeMessage: (id: string) => void;
34
38
  }
35
39
  export declare function useXChat<Message = ChatMessage, Input = RequestParams<Message>, Output = SSEOutput>(config: UseXChatConfig<Message, Input, Output>): UseXChatReturn<Message, Input>;
36
40
  //# 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,EAAC,oBAAoB,EAAC,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAC,WAAW,EAAE,aAAa,EAAC,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAC,aAAa,EAAE,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAEjD,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,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,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAC/C,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;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,CAsGhC"}
1
+ {"version":3,"file":"useXChat.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useXChat.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,mCAAmC,CAAC;AAC5E,OAAO,KAAK,EAAC,WAAW,EAAE,aAAa,EAAC,MAAM,kBAAkB,CAAC;AACjE,OAAO,KAAK,EAAC,aAAa,EAAE,SAAS,EAAC,MAAM,mBAAmB,CAAC;AAChE,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAEjD,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,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,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,WAAW,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC;IAC/C,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,CAyNhC"}
@@ -13,6 +13,9 @@ interface ChatState {
13
13
  addMessage: (message: ChatMessage) => void;
14
14
  updateMessage: (id: string, updater: (msg: ChatMessage) => ChatMessage) => void;
15
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;
18
+ removeMessage: (id: string) => void;
16
19
  setSuggestions: (items: SuggestionItem[]) => void;
17
20
  setRequesting: (v: boolean) => void;
18
21
  setError: (error: string | null) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"chatStore.d.ts","sourceRoot":"","sources":["../../../../src/stores/chatStore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAEjD,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,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,WAAW,KAAK,IAAI,CAAC;IAChF,aAAa,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9C,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;AAED,eAAO,MAAM,eAAe,8EAoDvB,CAAC"}
1
+ {"version":3,"file":"chatStore.d.ts","sourceRoot":"","sources":["../../../../src/stores/chatStore.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAC,WAAW,EAAC,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAC,cAAc,EAAC,MAAM,cAAc,CAAC;AAEjD,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,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,WAAW,KAAK,IAAI,CAAC;IAChF,aAAa,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAC9C,WAAW,EAAE,CACX,QAAQ,EACJ,WAAW,EAAE,GACb,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,CAAC,KACzC,IAAI,CAAC;IACV,UAAU,EAAE,CACV,EAAE,EAAE,MAAM,EACV,OAAO,EACH,OAAO,CAAC,WAAW,CAAC,GACpB,CAAC,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC,KAC7C,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;AAED,eAAO,MAAM,eAAe,8EA2EvB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unif/react-native-chat-sdk",
3
- "version": "0.1.2",
3
+ "version": "0.2.1",
4
4
  "description": "UNIF React Native Chat SDK — 流式通信、Provider、状态管理",
5
5
  "main": "./lib/commonjs/index.js",
6
6
  "module": "./lib/module/index.js",
@@ -39,10 +39,23 @@ interface ChatContextValue<Message = ChatMessage> {
39
39
  suggestions: SuggestionItem[];
40
40
  error: string | null;
41
41
  onRequest: (input: unknown) => void;
42
+ onReload: (id: string, input: unknown) => void;
42
43
  abort: () => void;
43
44
  resetChat: () => void;
44
45
  loadSession: (messages: ChatMessage[]) => void;
45
46
  clearError: () => void;
47
+ setMessages: (
48
+ messages:
49
+ | MessageInfo<Message>[]
50
+ | ((prev: MessageInfo<Message>[]) => MessageInfo<Message>[]),
51
+ ) => void;
52
+ setMessage: (
53
+ id: string,
54
+ partial:
55
+ | Partial<MessageInfo<Message>>
56
+ | ((msg: MessageInfo<Message>) => Partial<MessageInfo<Message>>),
57
+ ) => void;
58
+ removeMessage: (id: string) => void;
46
59
  // useXConversations
47
60
  sessions: SessionSummary[];
48
61
  activeId: string;
@@ -38,10 +38,23 @@ export interface UseXChatReturn<
38
38
  suggestions: SuggestionItem[];
39
39
  error: string | null;
40
40
  onRequest: (input: Input) => void;
41
+ onReload: (id: string, input: Input) => void;
41
42
  abort: () => void;
42
43
  resetChat: () => void;
43
44
  loadSession: (messages: ChatMessage[]) => void;
44
45
  clearError: () => void;
46
+ setMessages: (
47
+ messages:
48
+ | MessageInfo<Message>[]
49
+ | ((prev: MessageInfo<Message>[]) => MessageInfo<Message>[]),
50
+ ) => void;
51
+ setMessage: (
52
+ id: string,
53
+ partial:
54
+ | Partial<MessageInfo<Message>>
55
+ | ((msg: MessageInfo<Message>) => Partial<MessageInfo<Message>>),
56
+ ) => void;
57
+ removeMessage: (id: string) => void;
45
58
  }
46
59
 
47
60
  export function useXChat<
@@ -128,6 +141,117 @@ export function useXChat<
128
141
  store.getState().setError(null);
129
142
  }, [store]);
130
143
 
144
+ const onReload = useCallback(
145
+ (id: string, input: Input) => {
146
+ const s = store.getState();
147
+ if (s.isRequesting) return;
148
+
149
+ // 将目标消息标记为 loading,移除其后的 assistant 消息
150
+ const targetIdx = s.messages.findIndex((m) => m.id === id);
151
+ if (targetIdx < 0) return;
152
+
153
+ store.getState().setRequesting(true);
154
+ store.getState().setError(null);
155
+ store.getState().setSuggestions([]);
156
+
157
+ provider.sendMessage(input, {
158
+ onUpdate: (message) => {
159
+ store
160
+ .getState()
161
+ .upsertMessage(message as unknown as ChatMessage);
162
+ },
163
+ onSuccess: (message) => {
164
+ const m = message as unknown as ChatMessage;
165
+ store.getState().upsertMessage({
166
+ ...m,
167
+ status: 'success',
168
+ });
169
+ store.getState().setRequesting(false);
170
+ },
171
+ onError: (error) => {
172
+ store.getState().setError(error.message);
173
+ store.getState().setRequesting(false);
174
+
175
+ if (config.requestFallback) {
176
+ const fallbackMsg = config.requestFallback(input, { error });
177
+ store
178
+ .getState()
179
+ .addMessage(fallbackMsg as unknown as ChatMessage);
180
+ }
181
+ },
182
+ onSuggestion: (items) => {
183
+ store.getState().setSuggestions(items);
184
+ },
185
+ });
186
+ },
187
+ [provider, store, config]
188
+ );
189
+
190
+ const setMessages = useCallback(
191
+ (
192
+ messagesOrFn:
193
+ | MessageInfo<Message>[]
194
+ | ((prev: MessageInfo<Message>[]) => MessageInfo<Message>[]),
195
+ ) => {
196
+ if (typeof messagesOrFn === 'function') {
197
+ const current = store.getState().messages;
198
+ const currentInfos: MessageInfo<Message>[] = current.map((m) => ({
199
+ id: m.id,
200
+ message: m as unknown as Message,
201
+ status: m.status,
202
+ extra: m.extra as Record<string, unknown> | undefined,
203
+ }));
204
+ const next = messagesOrFn(currentInfos);
205
+ store
206
+ .getState()
207
+ .setMessages(next.map((info) => info.message as unknown as ChatMessage));
208
+ } else {
209
+ store
210
+ .getState()
211
+ .setMessages(
212
+ messagesOrFn.map((info) => info.message as unknown as ChatMessage),
213
+ );
214
+ }
215
+ },
216
+ [store]
217
+ );
218
+
219
+ const setMessage = useCallback(
220
+ (
221
+ id: string,
222
+ partialOrFn:
223
+ | Partial<MessageInfo<Message>>
224
+ | ((msg: MessageInfo<Message>) => Partial<MessageInfo<Message>>),
225
+ ) => {
226
+ store.getState().setMessage(id, (m) => {
227
+ const info: MessageInfo<Message> = {
228
+ id: m.id,
229
+ message: m as unknown as Message,
230
+ status: m.status,
231
+ extra: m.extra as Record<string, unknown> | undefined,
232
+ };
233
+ const partial =
234
+ typeof partialOrFn === 'function' ? partialOrFn(info) : partialOrFn;
235
+ const updated: Partial<ChatMessage> = {};
236
+ if (partial.message !== undefined) {
237
+ Object.assign(updated, partial.message);
238
+ }
239
+ if (partial.status !== undefined) {
240
+ updated.status = partial.status;
241
+ }
242
+ return updated;
243
+ });
244
+ },
245
+ [store]
246
+ );
247
+
248
+ const removeMessage = useCallback(
249
+ (id: string) => {
250
+ store.getState().removeMessage(id);
251
+ },
252
+ [store]
253
+ );
254
+
131
255
  useEffect(() => {
132
256
  return () => {
133
257
  provider.abort();
@@ -147,9 +271,13 @@ export function useXChat<
147
271
  suggestions: state.suggestions,
148
272
  error: state.error,
149
273
  onRequest,
274
+ onReload,
150
275
  abort,
151
276
  resetChat,
152
277
  loadSession,
153
278
  clearError,
279
+ setMessages,
280
+ setMessage,
281
+ removeMessage,
154
282
  };
155
283
  }
@@ -17,6 +17,18 @@ interface ChatState {
17
17
  addMessage: (message: ChatMessage) => void;
18
18
  updateMessage: (id: string, updater: (msg: ChatMessage) => ChatMessage) => void;
19
19
  upsertMessage: (message: ChatMessage) => void;
20
+ setMessages: (
21
+ messages:
22
+ | ChatMessage[]
23
+ | ((prev: ChatMessage[]) => ChatMessage[]),
24
+ ) => void;
25
+ setMessage: (
26
+ id: string,
27
+ partial:
28
+ | Partial<ChatMessage>
29
+ | ((msg: ChatMessage) => Partial<ChatMessage>),
30
+ ) => void;
31
+ removeMessage: (id: string) => void;
20
32
  setSuggestions: (items: SuggestionItem[]) => void;
21
33
  setRequesting: (v: boolean) => void;
22
34
  setError: (error: string | null) => void;
@@ -55,6 +67,29 @@ export const createChatStore = () =>
55
67
  }
56
68
  },
57
69
 
70
+ setMessages: (messagesOrFn) =>
71
+ set((state) => ({
72
+ messages:
73
+ typeof messagesOrFn === 'function'
74
+ ? messagesOrFn(state.messages)
75
+ : messagesOrFn,
76
+ })),
77
+
78
+ setMessage: (id, partialOrFn) =>
79
+ set((state) => ({
80
+ messages: state.messages.map((m) => {
81
+ if (m.id !== id) return m;
82
+ const partial =
83
+ typeof partialOrFn === 'function' ? partialOrFn(m) : partialOrFn;
84
+ return { ...m, ...partial };
85
+ }),
86
+ })),
87
+
88
+ removeMessage: (id) =>
89
+ set((state) => ({
90
+ messages: state.messages.filter((m) => m.id !== id),
91
+ })),
92
+
58
93
  setSuggestions: (items) => set({ suggestions: items }),
59
94
  setRequesting: (v) => set({ isRequesting: v }),
60
95
  setError: (error) => set({ error }),