@blocklet/pages-kit 0.2.312 → 0.2.313

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 (41) hide show
  1. package/lib/cjs/builtin/async/ai-runtime/api/session.js +10 -1
  2. package/lib/cjs/builtin/async/ai-runtime/components/PopperMenuButton/LoadingMenuItem.js +49 -0
  3. package/lib/cjs/builtin/async/ai-runtime/components/PopperMenuButton/index.js +68 -0
  4. package/lib/cjs/builtin/async/ai-runtime/locales/index.js +1 -1
  5. package/lib/cjs/builtin/async/ai-runtime/runtime/ChatBotButton/index.js +21 -4
  6. package/lib/cjs/builtin/async/ai-runtime/runtime/Runtime/index.js +22 -33
  7. package/lib/cjs/builtin/async/ai-runtime/runtime-components/AutoForm/index.js +2 -2
  8. package/lib/cjs/builtin/async/ai-runtime/runtime-components/MultiAgentsChat/index.js +6 -5
  9. package/lib/cjs/builtin/async/ai-runtime/runtime-components/PhotoGallery/index.js +6 -5
  10. package/lib/cjs/builtin/async/ai-runtime/runtime-components/SimpleChat/index.js +39 -14
  11. package/lib/cjs/builtin/async/ai-runtime/runtime-components/SimplePage/index.js +2 -2
  12. package/lib/cjs/builtin/async/ai-runtime/runtime-components/V0/Input.js +2 -2
  13. package/lib/cjs/builtin/async/ai-runtime/runtime-components/V0/Page.js +2 -3
  14. package/lib/cjs/builtin/async/ai-runtime/state/session.js +217 -79
  15. package/lib/cjs/builtin/page/header.js +45 -3
  16. package/lib/cjs/tsconfig.tsbuildinfo +1 -1
  17. package/lib/esm/builtin/async/ai-runtime/api/session.js +8 -0
  18. package/lib/esm/builtin/async/ai-runtime/components/PopperMenuButton/LoadingMenuItem.js +46 -0
  19. package/lib/esm/builtin/async/ai-runtime/components/PopperMenuButton/index.js +42 -0
  20. package/lib/esm/builtin/async/ai-runtime/locales/index.js +1 -1
  21. package/lib/esm/builtin/async/ai-runtime/runtime/ChatBotButton/index.js +23 -6
  22. package/lib/esm/builtin/async/ai-runtime/runtime/Runtime/index.js +23 -34
  23. package/lib/esm/builtin/async/ai-runtime/runtime-components/AutoForm/index.js +3 -3
  24. package/lib/esm/builtin/async/ai-runtime/runtime-components/MultiAgentsChat/index.js +7 -6
  25. package/lib/esm/builtin/async/ai-runtime/runtime-components/PhotoGallery/index.js +7 -6
  26. package/lib/esm/builtin/async/ai-runtime/runtime-components/SimpleChat/index.js +35 -10
  27. package/lib/esm/builtin/async/ai-runtime/runtime-components/SimplePage/index.js +3 -3
  28. package/lib/esm/builtin/async/ai-runtime/runtime-components/V0/Input.js +3 -3
  29. package/lib/esm/builtin/async/ai-runtime/runtime-components/V0/Page.js +3 -4
  30. package/lib/esm/builtin/async/ai-runtime/state/session.js +215 -79
  31. package/lib/esm/builtin/page/header.js +42 -1
  32. package/lib/esm/tsconfig.tsbuildinfo +1 -1
  33. package/lib/types/builtin/async/ai-runtime/api/session.d.ts +3 -0
  34. package/lib/types/builtin/async/ai-runtime/components/PopperMenuButton/LoadingMenuItem.d.ts +5 -0
  35. package/lib/types/builtin/async/ai-runtime/components/PopperMenuButton/index.d.ts +6 -0
  36. package/lib/types/builtin/async/ai-runtime/runtime-components/SimpleChat/index.d.ts +2 -1
  37. package/lib/types/builtin/async/ai-runtime/state/runtime.d.ts +1 -0
  38. package/lib/types/builtin/async/ai-runtime/state/session.d.ts +27 -6
  39. package/lib/types/builtin/page/header.d.ts +13 -0
  40. package/lib/types/tsconfig.tsbuildinfo +1 -1
  41. package/package.json +4 -3
@@ -15,8 +15,19 @@ var __asyncValues = (this && this.__asyncValues) || function (o) {
15
15
  function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
16
16
  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
17
17
  };
18
+ var __rest = (this && this.__rest) || function (s, e) {
19
+ var t = {};
20
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
21
+ t[p] = s[p];
22
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
23
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
24
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
25
+ t[p[i]] = s[p[i]];
26
+ }
27
+ return t;
28
+ };
18
29
  Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.useSessionState = exports.createSessionState = void 0;
30
+ exports.useCurrentSessionState = exports.useSessionState = exports.useAutoLoadSessionState = exports.createSessionState = void 0;
20
31
  const aid_1 = require("@blocklet/ai-runtime/common/aid");
21
32
  const react_1 = require("react");
22
33
  const zustand_1 = require("zustand");
@@ -33,88 +44,190 @@ const createSessionState = ({ aid }) => {
33
44
  set((state) => {
34
45
  state.loading = undefined;
35
46
  state.loaded = undefined;
36
- state.running = undefined;
37
- state.session = undefined;
38
- state.messages = undefined;
39
- state.noMoreMessage = undefined;
40
- state.messageLoading = undefined;
41
- state.error = undefined;
47
+ state.sessions = undefined;
48
+ state.sessionMap = undefined;
49
+ state.currentSessionId = undefined;
42
50
  });
43
51
  },
44
52
  load: () => __awaiter(void 0, void 0, void 0, function* () {
45
- var _a;
46
- set((state) => {
47
- state.loading = true;
48
- });
49
- try {
50
- const { sessions } = yield (0, session_1.getSessions)({ aid });
51
- const session = (_a = sessions[0]) !== null && _a !== void 0 ? _a : (yield (0, session_1.createSession)({ aid })).created;
52
- const { messages } = yield (0, message_1.getMessages)({
53
- sessionId: session.id,
54
- orderDirection: GET_MESSAGES_ORDER_DIRECTION,
55
- limit: GET_MESSAGES_LIMIT,
56
- });
53
+ const { loading, loaded } = get();
54
+ if (!loading && !loaded) {
57
55
  set((state) => {
58
- state.session = session;
59
- state.messages = messages.toReversed();
60
- state.noMoreMessage = messages.length < GET_MESSAGES_LIMIT;
56
+ state.loading = true;
61
57
  });
58
+ try {
59
+ const { sessions } = yield (0, session_1.getSessions)({ aid });
60
+ set((state) => {
61
+ var _a;
62
+ state.sessions = sessions;
63
+ state.currentSessionId = (_a = sessions[0]) === null || _a === void 0 ? void 0 : _a.id;
64
+ state.sessionMap = Object.fromEntries(sessions.map((i) => [i.id, { session: i }]));
65
+ });
66
+ }
67
+ catch (error) {
68
+ set((state) => {
69
+ state.error = error;
70
+ });
71
+ throw error;
72
+ }
73
+ finally {
74
+ set((state) => {
75
+ state.loading = false;
76
+ state.loaded = true;
77
+ });
78
+ }
62
79
  }
63
- catch (error) {
64
- set((state) => {
65
- state.error = error;
66
- });
67
- throw error;
68
- }
69
- finally {
70
- set((state) => {
71
- state.loaded = true;
72
- state.loading = false;
73
- });
80
+ const { sessionMap, currentSessionId: sessionId } = get();
81
+ const s = sessionMap === null || sessionMap === void 0 ? void 0 : sessionMap[sessionId];
82
+ if (!s || !sessionId)
83
+ return;
84
+ if (!s.loading && !s.loaded) {
85
+ try {
86
+ set((state) => {
87
+ var _a;
88
+ const s = (_a = state.sessionMap) === null || _a === void 0 ? void 0 : _a[state.currentSessionId];
89
+ if (!s)
90
+ return;
91
+ s.loading = true;
92
+ });
93
+ const { messages } = yield (0, message_1.getMessages)({
94
+ sessionId,
95
+ orderDirection: GET_MESSAGES_ORDER_DIRECTION,
96
+ limit: GET_MESSAGES_LIMIT,
97
+ });
98
+ set((state) => {
99
+ var _a;
100
+ const s = (_a = state.sessionMap) === null || _a === void 0 ? void 0 : _a[state.currentSessionId];
101
+ if (!s)
102
+ return;
103
+ s.messages = messages.toReversed();
104
+ s.noMoreMessage = messages.length < GET_MESSAGES_LIMIT;
105
+ });
106
+ }
107
+ catch (error) {
108
+ set((state) => {
109
+ var _a;
110
+ const s = (_a = state.sessionMap) === null || _a === void 0 ? void 0 : _a[state.currentSessionId];
111
+ if (!s)
112
+ return;
113
+ s.error = error;
114
+ });
115
+ throw error;
116
+ }
117
+ finally {
118
+ set((state) => {
119
+ var _a;
120
+ const s = (_a = state.sessionMap) === null || _a === void 0 ? void 0 : _a[state.currentSessionId];
121
+ if (!s)
122
+ return;
123
+ s.loaded = true;
124
+ s.loading = false;
125
+ });
126
+ }
74
127
  }
75
128
  }),
76
- loadMoreMessages: () => __awaiter(void 0, void 0, void 0, function* () {
77
- var _b;
129
+ setCurrentSessionId: (sessionId) => {
78
130
  set((state) => {
79
- state.messageLoading = true;
131
+ state.currentSessionId = sessionId;
80
132
  });
81
- const { session, messages } = get();
82
- if (!session)
133
+ },
134
+ createSession: () => __awaiter(void 0, void 0, void 0, function* () {
135
+ const { created, sessions } = yield (0, session_1.createSession)({ aid });
136
+ set((state) => {
137
+ state.sessions = sessions;
138
+ state.currentSessionId = created.id;
139
+ state.sessionMap = Object.fromEntries(sessions.map((i) => {
140
+ var _a;
141
+ return [
142
+ i.id,
143
+ Object.assign(Object.assign(Object.assign({}, (_a = state.sessionMap) === null || _a === void 0 ? void 0 : _a[i.id]), { session: i }), (i.id === created.id ? { messages: [], loaded: true } : {})),
144
+ ];
145
+ }));
146
+ });
147
+ return created;
148
+ }),
149
+ deleteSession: (...args_1) => __awaiter(void 0, [...args_1], void 0, function* (args = {}) {
150
+ const sessionId = args.sessionId || get().currentSessionId;
151
+ if (!sessionId)
152
+ return;
153
+ const { sessions } = yield (0, session_1.deleteSession)({ sessionId });
154
+ set((state) => {
155
+ var _a;
156
+ state.sessions = sessions;
157
+ if (!sessions.some((i) => i.id === state.currentSessionId))
158
+ state.currentSessionId = (_a = sessions[0]) === null || _a === void 0 ? void 0 : _a.id;
159
+ });
160
+ }),
161
+ clearSession: (...args_2) => __awaiter(void 0, [...args_2], void 0, function* (args = {}) {
162
+ const sessionId = args.sessionId || get().currentSessionId;
163
+ if (!sessionId)
164
+ return;
165
+ yield (0, session_1.clearSession)({ sessionId });
166
+ set((state) => {
167
+ var _a;
168
+ const s = (_a = state.sessionMap) === null || _a === void 0 ? void 0 : _a[sessionId];
169
+ if (!s)
170
+ return;
171
+ s.messages = undefined;
172
+ s.noMoreMessage = undefined;
173
+ s.messageLoading = undefined;
174
+ });
175
+ }),
176
+ loadMoreMessages: (...args_3) => __awaiter(void 0, [...args_3], void 0, function* (args = {}) {
177
+ var _a, _b;
178
+ const sessionId = args.sessionId || get().currentSessionId;
179
+ if (!sessionId)
180
+ return;
181
+ set((state) => {
182
+ var _a;
183
+ const s = (_a = state.sessionMap) === null || _a === void 0 ? void 0 : _a[sessionId];
184
+ if (!s)
185
+ return;
186
+ s.messageLoading = true;
187
+ });
188
+ const { sessionMap } = get();
189
+ const s = sessionMap === null || sessionMap === void 0 ? void 0 : sessionMap[sessionId];
190
+ if (!s)
83
191
  return;
84
192
  try {
85
193
  const result = yield (0, message_1.getMessages)({
86
- sessionId: session.id,
87
- before: (_b = messages === null || messages === void 0 ? void 0 : messages.slice(-1)[0]) === null || _b === void 0 ? void 0 : _b.id,
194
+ sessionId: s.session.id,
195
+ before: (_b = (_a = s.messages) === null || _a === void 0 ? void 0 : _a.slice(-1)[0]) === null || _b === void 0 ? void 0 : _b.id,
88
196
  orderDirection: GET_MESSAGES_ORDER_DIRECTION,
89
197
  limit: GET_MESSAGES_LIMIT,
90
198
  });
91
199
  set((state) => {
92
- var _a;
93
- state.messages = ((_a = state.messages) !== null && _a !== void 0 ? _a : []).concat(result.messages.toReversed());
94
- state.noMoreMessage = result.messages.length < GET_MESSAGES_LIMIT;
200
+ var _a, _b;
201
+ const s = (_a = state.sessionMap) === null || _a === void 0 ? void 0 : _a[sessionId];
202
+ if (!s)
203
+ return;
204
+ s.messages = ((_b = s.messages) !== null && _b !== void 0 ? _b : []).concat(result.messages.toReversed());
205
+ s.noMoreMessage = result.messages.length < GET_MESSAGES_LIMIT;
95
206
  });
96
207
  }
97
208
  finally {
98
209
  set((state) => {
99
- state.messageLoading = false;
210
+ var _a;
211
+ const s = (_a = state.sessionMap) === null || _a === void 0 ? void 0 : _a[sessionId];
212
+ if (!s)
213
+ return;
214
+ s.messageLoading = false;
100
215
  });
101
216
  }
102
217
  }),
103
- execute: (_c) => __awaiter(void 0, [_c], void 0, function* ({ aid, working, parameters, onResponseStart, }) {
218
+ execute: (_c) => __awaiter(void 0, void 0, void 0, function* () {
104
219
  var _d, e_1, _e, _f;
105
- let { session } = get();
106
- if (!session) {
107
- yield get().load();
108
- session = get().session;
109
- }
110
- if (!session)
111
- throw new Error('This session is not initialized');
112
- const { id: sessionId } = session;
220
+ var { aid, working, parameters, onResponseStart } = _c, args = __rest(_c, ["aid", "working", "parameters", "onResponseStart"]);
221
+ const sessionId = args.sessionId || get().currentSessionId || (yield get().createSession()).id;
113
222
  const identity = (0, aid_1.parseIdentity)(aid, { rejectWhenError: true });
114
223
  let message;
115
224
  set((state) => {
116
- state.running = true;
117
- state.error = undefined;
225
+ var _a;
226
+ const s = (_a = state.sessionMap) === null || _a === void 0 ? void 0 : _a[sessionId];
227
+ if (!s)
228
+ return;
229
+ s.running = true;
230
+ s.error = undefined;
118
231
  });
119
232
  try {
120
233
  const stream = (0, session_1.runAgent)({
@@ -145,26 +258,32 @@ const createSessionState = ({ aid }) => {
145
258
  loading: true,
146
259
  };
147
260
  set((state) => {
148
- var _a;
149
- (_a = state.messages) !== null && _a !== void 0 ? _a : (state.messages = []);
150
- state.messages.push(message);
261
+ var _a, _b;
262
+ const s = (_a = state.sessionMap) === null || _a === void 0 ? void 0 : _a[sessionId];
263
+ if (!s)
264
+ return;
265
+ (_b = s.messages) !== null && _b !== void 0 ? _b : (s.messages = []);
266
+ s.messages.push(message);
151
267
  });
152
268
  }
153
269
  if (message.taskId === value.taskId) {
154
270
  requestAnimationFrame(() => {
155
271
  set((state) => {
156
- var _a, _b, _c, _d, _e, _f;
157
- var _g;
158
- const msg = (_a = state.messages) === null || _a === void 0 ? void 0 : _a.findLast((i) => i.taskId === message.taskId);
272
+ var _a, _b, _c, _d, _e, _f, _g;
273
+ var _h;
274
+ const s = (_a = state.sessionMap) === null || _a === void 0 ? void 0 : _a[sessionId];
275
+ if (!s)
276
+ return;
277
+ const msg = (_b = s.messages) === null || _b === void 0 ? void 0 : _b.findLast((i) => i.taskId === message.taskId);
159
278
  if (!msg)
160
279
  return;
161
- (_b = msg.result) !== null && _b !== void 0 ? _b : (msg.result = {});
280
+ (_c = msg.result) !== null && _c !== void 0 ? _c : (msg.result = {});
162
281
  msg.result.content = (msg.result.content || '') + (value.delta.content || '');
163
- if ((_d = (_c = value.delta) === null || _c === void 0 ? void 0 : _c.images) === null || _d === void 0 ? void 0 : _d.length) {
164
- msg.result.images = ((_e = msg.result.images) !== null && _e !== void 0 ? _e : []).concat(value.delta.images);
282
+ if ((_e = (_d = value.delta) === null || _d === void 0 ? void 0 : _d.images) === null || _e === void 0 ? void 0 : _e.length) {
283
+ msg.result.images = ((_f = msg.result.images) !== null && _f !== void 0 ? _f : []).concat(value.delta.images);
165
284
  }
166
285
  if (value.delta.object) {
167
- (_f = (_g = msg.result).objects) !== null && _f !== void 0 ? _f : (_g.objects = []);
286
+ (_g = (_h = msg.result).objects) !== null && _g !== void 0 ? _g : (_h.objects = []);
168
287
  msg.result.objects.push({ taskId: value.taskId, data: value.delta.object });
169
288
  }
170
289
  });
@@ -173,8 +292,11 @@ const createSessionState = ({ aid }) => {
173
292
  }
174
293
  if ((value === null || value === void 0 ? void 0 : value.type) === 'ERROR') {
175
294
  set((state) => {
176
- var _a;
177
- const msg = (_a = state.messages) === null || _a === void 0 ? void 0 : _a.findLast((i) => i.taskId === message.taskId);
295
+ var _a, _b;
296
+ const s = (_a = state.sessionMap) === null || _a === void 0 ? void 0 : _a[sessionId];
297
+ if (!s)
298
+ return;
299
+ const msg = (_b = s.messages) === null || _b === void 0 ? void 0 : _b.findLast((i) => i.taskId === message.taskId);
178
300
  if (msg)
179
301
  msg.error = value.error;
180
302
  else
@@ -193,15 +315,22 @@ const createSessionState = ({ aid }) => {
193
315
  }
194
316
  catch (error) {
195
317
  set((state) => {
196
- state.error = error;
318
+ var _a;
319
+ const s = (_a = state.sessionMap) === null || _a === void 0 ? void 0 : _a[sessionId];
320
+ if (!s)
321
+ return;
322
+ s.error = error;
197
323
  });
198
324
  }
199
325
  finally {
200
326
  set((state) => {
201
- var _a;
202
- state.running = false;
327
+ var _a, _b;
328
+ const s = (_a = state.sessionMap) === null || _a === void 0 ? void 0 : _a[sessionId];
329
+ if (!s)
330
+ return;
331
+ s.running = false;
203
332
  if (message) {
204
- const msg = (_a = state.messages) === null || _a === void 0 ? void 0 : _a.findLast((i) => i.taskId === message.taskId);
333
+ const msg = (_b = s.messages) === null || _b === void 0 ? void 0 : _b.findLast((i) => i.taskId === message.taskId);
205
334
  if (msg)
206
335
  msg.loading = false;
207
336
  }
@@ -211,16 +340,25 @@ const createSessionState = ({ aid }) => {
211
340
  }))));
212
341
  };
213
342
  exports.createSessionState = createSessionState;
214
- function useSessionState({ autoLoad } = {}) {
343
+ function useAutoLoadSessionState() {
215
344
  const { aid } = (0, Runtime_1.useRuntimeContext)();
216
345
  const state = (0, react_1.useMemo)(() => (0, exports.createSessionState)({ aid }), [aid]);
346
+ const currentSessionId = state((s) => s.currentSessionId);
217
347
  (0, react_1.useEffect)(() => {
218
- if (!autoLoad)
219
- return;
220
- const { loading, loaded, load } = state.getState();
221
- if (!loading && !loaded)
222
- load();
223
- }, [state, autoLoad]);
224
- return state;
348
+ state.getState().load();
349
+ }, [state, currentSessionId]);
350
+ }
351
+ exports.useAutoLoadSessionState = useAutoLoadSessionState;
352
+ function useSessionState(selector) {
353
+ const { aid } = (0, Runtime_1.useRuntimeContext)();
354
+ return (0, react_1.useMemo)(() => (0, exports.createSessionState)({ aid }), [aid])(selector);
225
355
  }
226
356
  exports.useSessionState = useSessionState;
357
+ function useCurrentSessionState(selector) {
358
+ return useSessionState((state) => {
359
+ var _a;
360
+ const s = (_a = state.sessionMap) === null || _a === void 0 ? void 0 : _a[state.currentSessionId];
361
+ return selector(s);
362
+ });
363
+ }
364
+ exports.useCurrentSessionState = useCurrentSessionState;
@@ -1,6 +1,48 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useHeaderState = void 0;
3
+ exports.useHeader = exports.useHeaderState = void 0;
4
+ const immer_1 = require("immer");
5
+ const react_1 = require("react");
4
6
  const zustand_1 = require("zustand");
5
- const immer_1 = require("zustand/middleware/immer");
6
- exports.useHeaderState = (0, zustand_1.create)()((0, immer_1.immer)(() => ({})));
7
+ const immer_2 = require("zustand/middleware/immer");
8
+ (0, immer_1.enableMapSet)();
9
+ exports.useHeaderState = (0, zustand_1.create)()((0, immer_2.immer)((set, get) => ({
10
+ stack: new Set(),
11
+ add: (creator) => {
12
+ set((state) => {
13
+ state.stack.add(creator);
14
+ });
15
+ get().refresh();
16
+ },
17
+ delete: (creator) => {
18
+ set((state) => {
19
+ state.stack.delete(creator);
20
+ });
21
+ get().refresh();
22
+ },
23
+ refresh: () => {
24
+ const widgets = [];
25
+ for (const i of get().stack) {
26
+ widgets.push(i());
27
+ }
28
+ const r = widgets.reduce((res, i) => (Object.assign(Object.assign(Object.assign({}, res), i), { addons: (...exists) => {
29
+ var _a, _b, _c, _d;
30
+ const a = (_b = (_a = res.addons) === null || _a === void 0 ? void 0 : _a.call(res, ...exists)) !== null && _b !== void 0 ? _b : exists;
31
+ const b = (_d = (_c = i.addons) === null || _c === void 0 ? void 0 : _c.call(i, ...a)) !== null && _d !== void 0 ? _d : a;
32
+ return b;
33
+ } })), {});
34
+ set((state) => {
35
+ state.logo = r.logo;
36
+ state.description = r.description;
37
+ state.brand = r.brand;
38
+ state.addons = r.addons;
39
+ });
40
+ },
41
+ })));
42
+ function useHeader(creator, deps) {
43
+ (0, react_1.useEffect)(() => {
44
+ exports.useHeaderState.getState().add(creator);
45
+ return () => exports.useHeaderState.getState().delete(creator);
46
+ }, deps);
47
+ }
48
+ exports.useHeader = useHeader;