@mujian/js-sdk 0.0.6-beta.8 → 0.0.6-beta.80

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 (42) hide show
  1. package/dist/events/index.d.ts +34 -2
  2. package/dist/index.d.ts +17 -39
  3. package/dist/index.js +369 -30
  4. package/dist/lite.d.ts +74 -0
  5. package/dist/lite.js +120 -0
  6. package/dist/modules/ai/chat/chat.d.ts +46 -4
  7. package/dist/modules/ai/chat/index.d.ts +1 -1
  8. package/dist/modules/ai/chat/message/index.d.ts +4 -0
  9. package/dist/modules/ai/index.d.ts +3 -2
  10. package/dist/modules/ai/openai/chat.d.ts +25 -0
  11. package/dist/modules/ai/openai/completions.d.ts +19 -0
  12. package/dist/modules/ai/openai/images.d.ts +19 -0
  13. package/dist/modules/ai/openai/index.d.ts +4 -0
  14. package/dist/modules/ai/openai/responses.d.ts +20 -0
  15. package/dist/modules/ai/text/index.d.ts +9 -2
  16. package/dist/modules/config.d.ts +18 -0
  17. package/dist/modules/utils/clipboard.d.ts +5 -0
  18. package/dist/modules/utils/index.d.ts +4 -0
  19. package/dist/react/chat/useChat/index.d.ts +34 -8
  20. package/dist/react/chat/useChat/inner/chatStreaming.d.ts +5 -2
  21. package/dist/react/chat/useChat/message.d.ts +31 -13
  22. package/dist/react/components/MdRenderer/index.d.ts +6 -4
  23. package/dist/react/components/MdRenderer/utils/height.d.ts +0 -0
  24. package/dist/react/components/MdRenderer/utils/iframe.d.ts +9 -0
  25. package/dist/react/components/MdRenderer/utils/scripts.d.ts +4 -0
  26. package/dist/react/components/MujianSpinner/index.d.ts +7 -0
  27. package/dist/react/components/index.d.ts +1 -0
  28. package/dist/react/index.d.ts +1 -0
  29. package/dist/react/mjEngine/index.d.ts +48 -0
  30. package/dist/react.css +65 -4
  31. package/dist/react.js +828 -199
  32. package/dist/types/index.d.ts +38 -0
  33. package/dist/umd/index.js +2 -0
  34. package/dist/umd/index.js.LICENSE.txt +7 -0
  35. package/dist/umd/lite.js +2 -0
  36. package/dist/umd/lite.js.LICENSE.txt +7 -0
  37. package/dist/umd/react.css +1 -0
  38. package/dist/umd/react.js +138 -0
  39. package/dist/umd/react.js.LICENSE.txt +31 -0
  40. package/dist/utils/log.d.ts +4 -0
  41. package/package.json +16 -6
  42. /package/dist/react/components/MdRenderer/{utils.d.ts → utils/md.d.ts} +0 -0
@@ -21,13 +21,33 @@ export declare enum EVENT {
21
21
  */
22
22
  MUJIAN_AI_CHAT_APPLY_REGEX = "mujian:ai:chat:applyRegex",
23
23
  /**
24
- * 生成文本
24
+ * 对消息应用正则表达式并渲染模板
25
+ */
26
+ MUJIAN_AI_CHAT_RENDER_MESSAGE = "mujian:ai:chat:renderMessage",
27
+ /**
28
+ * 文本补全
25
29
  */
26
30
  MUJIAN_AI_TEXT_GENERATE = "mujian:ai:text:generate",
31
+ /**
32
+ * OpenAI 文本补全
33
+ */
34
+ MUJIAN_AI_OPENAI_COMPLETIONS_CREATE = "mujian:ai:openai:completions:create",
35
+ /**
36
+ * OpenAI 聊天补全
37
+ */
38
+ MUJIAN_AI_OPENAI_CHAT_COMPLETIONS_CREATE = "mujian:ai:openai:chat:completions:create",
39
+ /**
40
+ * OpenAI 响应创建
41
+ */
42
+ MUJIAN_AI_OPENAI_RESPONSES_CREATE = "mujian:ai:openai:responses:create",
27
43
  /**
28
44
  * 获取对话
29
45
  */
30
46
  MUJIAN_AI_CHAT_MESSAGE_GET_ALL = "mujian:ai:chat:message:getAll",
47
+ /**
48
+ * 获取对话分页
49
+ */
50
+ MUJIAN_AI_CHAT_MESSAGE_GET_PAGE = "mujian:ai:chat:message:getPage",
31
51
  /**
32
52
  * 获取项目信息
33
53
  */
@@ -67,5 +87,17 @@ export declare enum EVENT {
67
87
  /**
68
88
  * 获取消息提示词
69
89
  */
70
- MUJIAN_AI_CHAT_MESSAGE_GET_PROMPT = "mujian:ai:chat:message:getPrompt"
90
+ MUJIAN_AI_CHAT_MESSAGE_GET_PROMPT = "mujian:ai:chat:message:getPrompt",
91
+ /**
92
+ * 生成图像
93
+ */
94
+ MUJIAN_AI_OPENAI_IMAGES_GENERATE = "mujian:ai:openai:images:generate",
95
+ /**
96
+ * 写入剪贴版
97
+ */
98
+ MUJIAN_UTILS_CLIPBOARD_WRITE_TEXT = "mujian:utils:clipboard:writeText",
99
+ /**
100
+ * 获取配置
101
+ */
102
+ MUJIAN_GET_CONFIG = "mujian:getConfig"
71
103
  }
package/dist/index.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { EVENT } from './events';
2
+ import { Config } from './modules/config';
2
3
  /** @hidden */
3
4
  export { EVENT } from './events';
4
5
  type Call<T> = {
@@ -14,7 +15,13 @@ declare global {
14
15
  }
15
16
  }
16
17
  declare class MujianSdk {
18
+ /** @hidden */
17
19
  private constructor();
20
+ /**
21
+ * 事件
22
+ * @enum {string}
23
+ */
24
+ static EVENT: typeof EVENT;
18
25
  /** @hidden */
19
26
  static getInstance(): MujianSdk;
20
27
  /** @hidden */
@@ -27,6 +34,9 @@ declare class MujianSdk {
27
34
  get isReady(): boolean;
28
35
  /** @hidden */
29
36
  private pendingRequests;
37
+ private _config?;
38
+ get openapi(): Config['openapi'] | undefined;
39
+ private initPromise;
30
40
  /**
31
41
  * 初始化
32
42
  */
@@ -40,47 +50,15 @@ declare class MujianSdk {
40
50
  /** @hidden */
41
51
  call<Req, Resp>(event: EVENT, data?: Req, controller?: Pick<Call<Resp>, 'onData' | 'onComplete' | 'signal'>): Promise<Resp>;
42
52
  /**
43
- * AI
53
+ * @namespace ai
54
+ * @description AI
44
55
  */
45
- ai: {
46
- chat: {
47
- project: {
48
- getInfo: () => Promise<import("./types").ProjectInfo>;
49
- };
50
- settings: {
51
- model: {
52
- getAll: () => Promise<import("./types").ModelInfo[]>;
53
- getActive: () => Promise<string>;
54
- setActive: (modelId: string) => Promise<string>;
55
- };
56
- persona: {
57
- getActive: () => Promise<import("./types").PersonaInfo>;
58
- setActive: (personaId: string) => Promise<void>;
59
- };
60
- };
61
- complete: (message: string, onData: (data: string) => void, signal?: AbortSignal | undefined) => Promise<string>;
62
- applyRegex: (props: {
63
- message: import("./react").Message;
64
- index: number;
65
- depth: number;
66
- }) => Promise<import("./react").Message>;
67
- continue: (onData: (data: string) => void, signal?: AbortSignal | undefined) => Promise<string>;
68
- regenerate: (onData: (data: string) => void, signal?: AbortSignal | undefined) => Promise<string>;
69
- message: {
70
- getAll: () => Promise<import("./react").Message[]>;
71
- deleteOne: (messageId: string) => Promise<unknown>;
72
- editOne: (messageId: string, content: string) => Promise<unknown>;
73
- swipe: (messageId: string, swipeId: number) => Promise<unknown>;
74
- getPrompt: (messageId: string) => Promise<unknown>;
75
- };
76
- };
77
- text: {
78
- complete: () => Promise<void>;
79
- };
80
- };
56
+ ai: any;
81
57
  ui: {};
82
- util: {
83
- cn: () => void;
58
+ utils: {
59
+ clipboard: {
60
+ writeText: (text: string) => Promise<unknown>;
61
+ };
84
62
  };
85
63
  hybrid: {};
86
64
  player: {};
package/dist/index.js CHANGED
@@ -4,8 +4,13 @@ var events_EVENT = /*#__PURE__*/ function(EVENT) {
4
4
  EVENT["MUJIAN_AI_CHAT_STOP"] = "mujian:ai:chat:stop";
5
5
  EVENT["MUJIAN_AI_CHAT_COMPLETE"] = "mujian:ai:chat:complete";
6
6
  EVENT["MUJIAN_AI_CHAT_APPLY_REGEX"] = "mujian:ai:chat:applyRegex";
7
+ EVENT["MUJIAN_AI_CHAT_RENDER_MESSAGE"] = "mujian:ai:chat:renderMessage";
7
8
  EVENT["MUJIAN_AI_TEXT_GENERATE"] = "mujian:ai:text:generate";
9
+ EVENT["MUJIAN_AI_OPENAI_COMPLETIONS_CREATE"] = "mujian:ai:openai:completions:create";
10
+ EVENT["MUJIAN_AI_OPENAI_CHAT_COMPLETIONS_CREATE"] = "mujian:ai:openai:chat:completions:create";
11
+ EVENT["MUJIAN_AI_OPENAI_RESPONSES_CREATE"] = "mujian:ai:openai:responses:create";
8
12
  EVENT["MUJIAN_AI_CHAT_MESSAGE_GET_ALL"] = "mujian:ai:chat:message:getAll";
13
+ EVENT["MUJIAN_AI_CHAT_MESSAGE_GET_PAGE"] = "mujian:ai:chat:message:getPage";
9
14
  EVENT["MUJIAN_AI_CHAT_PROJECT_GET_INFO"] = "mujian:ai:chat:project:getInfo";
10
15
  EVENT["MUJIAN_AI_SETTINGS_PERSONA_GET_ACTIVE"] = "mujian:ai:settings:persona:getActive";
11
16
  EVENT["MUJIAN_AI_SETTINGS_PERSONA_SET_ACTIVE"] = "mujian:ai:settings:persona:setActive";
@@ -16,19 +21,69 @@ var events_EVENT = /*#__PURE__*/ function(EVENT) {
16
21
  EVENT["MUJIAN_AI_CHAT_MESSAGE_EDIT_ONE"] = "mujian:ai:chat:message:editOne";
17
22
  EVENT["MUJIAN_AI_CHAT_MESSAGE_SWIPE"] = "mujian:ai:chat:message:swipe";
18
23
  EVENT["MUJIAN_AI_CHAT_MESSAGE_GET_PROMPT"] = "mujian:ai:chat:message:getPrompt";
24
+ EVENT["MUJIAN_AI_OPENAI_IMAGES_GENERATE"] = "mujian:ai:openai:images:generate";
25
+ EVENT["MUJIAN_UTILS_CLIPBOARD_WRITE_TEXT"] = "mujian:utils:clipboard:writeText";
26
+ EVENT["MUJIAN_GET_CONFIG"] = "mujian:getConfig";
19
27
  return EVENT;
20
28
  }({});
21
- const chat_complete = async function(message, onData, signal) {
22
- return await this.call(events_EVENT.MUJIAN_AI_CHAT_COMPLETE, {
29
+ function wrapOnData(onData) {
30
+ let fullContent = '';
31
+ let buffer = '';
32
+ let questionId;
33
+ let replyId;
34
+ return function(data) {
35
+ buffer += data;
36
+ const lines = buffer.split('\n');
37
+ buffer = lines.pop() || '';
38
+ for (const line of lines)if (line.startsWith('data: ')) try {
39
+ const parsedData = JSON.parse(line.slice(6));
40
+ if (parsedData.question_id) questionId = parsedData.question_id;
41
+ if (parsedData.reply_id) replyId = parsedData.reply_id;
42
+ if (parsedData.isFinished) return void onData({
43
+ isFinished: true,
44
+ deltaContent: '',
45
+ fullContent,
46
+ questionId,
47
+ replyId
48
+ });
49
+ const deltaContent = parsedData?.choices?.[0]?.delta?.content;
50
+ if (deltaContent?.length > 0) {
51
+ fullContent += deltaContent;
52
+ onData({
53
+ isFinished: false,
54
+ deltaContent: deltaContent,
55
+ fullContent,
56
+ questionId,
57
+ replyId
58
+ });
59
+ }
60
+ } catch (e) {
61
+ onData({
62
+ isFinished: true,
63
+ error: e,
64
+ deltaContent: '',
65
+ fullContent,
66
+ questionId,
67
+ replyId
68
+ });
69
+ return;
70
+ }
71
+ };
72
+ }
73
+ const chat_complete = async function(message, onData, signal, option = {}) {
74
+ await this.call(events_EVENT.MUJIAN_AI_CHAT_COMPLETE, {
23
75
  content: message
24
76
  }, {
25
- onData,
77
+ onData: option.parseContent ? wrapOnData(onData) : onData,
26
78
  signal
27
79
  });
28
80
  };
29
81
  const applyRegex = async function(props) {
30
82
  return await this.call(events_EVENT.MUJIAN_AI_CHAT_APPLY_REGEX, props);
31
83
  };
84
+ const renderMessage = async function(props) {
85
+ return await this.call(events_EVENT.MUJIAN_AI_CHAT_RENDER_MESSAGE, props);
86
+ };
32
87
  const continueComplete = async function(onData, signal) {
33
88
  return await this.call(events_EVENT.MUJIAN_AI_CHAT_COMPLETE, {
34
89
  isContinue: true
@@ -70,6 +125,12 @@ const getPrompt = async function(messageId) {
70
125
  messageId
71
126
  });
72
127
  };
128
+ async function getPage(fromCursor, pageSize) {
129
+ return await this.call(events_EVENT.MUJIAN_AI_CHAT_MESSAGE_GET_PAGE, {
130
+ fromCursor,
131
+ pageSize
132
+ });
133
+ }
73
134
  const getInfo = async function() {
74
135
  return await this.call(events_EVENT.MUJIAN_AI_CHAT_PROJECT_GET_INFO);
75
136
  };
@@ -92,15 +153,25 @@ const model_setActive = async function(modelId) {
92
153
  const model_getAll = async function() {
93
154
  return await this.call(events_EVENT.MUJIAN_AI_SETTINGS_MODEL_GET_ALL);
94
155
  };
95
- const generate = async function() {
96
- return await this.call(events_EVENT.MUJIAN_AI_TEXT_GENERATE, {
97
- content: 'q'
98
- });
99
- };
156
+ async function getConfig() {
157
+ return await this.call(events_EVENT.MUJIAN_GET_CONFIG);
158
+ }
100
159
  const saveGame = async function() {};
101
160
  const loadGame = async function() {};
161
+ async function writeText(text) {
162
+ return await this.call(events_EVENT.MUJIAN_UTILS_CLIPBOARD_WRITE_TEXT, text);
163
+ }
164
+ const Log = {
165
+ i (...msg) {
166
+ console.log('[MujianSDK] ', ...msg);
167
+ },
168
+ e (...msg) {
169
+ console.error('[MujianSDK] ', ...msg);
170
+ }
171
+ };
102
172
  class MujianSdk {
103
173
  constructor(){}
174
+ static EVENT = events_EVENT;
104
175
  static getInstance() {
105
176
  if (!window.$mujian) window.$mujian = new MujianSdk();
106
177
  return window.$mujian;
@@ -111,29 +182,279 @@ class MujianSdk {
111
182
  return this.ready;
112
183
  }
113
184
  pendingRequests = new Map();
185
+ _config;
186
+ get openapi() {
187
+ return this._config?.openapi;
188
+ }
189
+ initPromise = null;
114
190
  async init() {
115
- const handshake = new postmate.Model({
116
- reply: ({ id, complete, data })=>{
117
- const call = this.pendingRequests.get(id);
118
- if (!call) return;
119
- call.onData?.(data);
120
- if (complete) {
121
- call.onComplete?.();
122
- call.resolve(data);
123
- this.pendingRequests.delete(id);
191
+ if (this.initPromise) return this.initPromise;
192
+ this.initPromise = (async ()=>{
193
+ const handshake = new postmate.Model({
194
+ reply: ({ id, complete, data, error })=>{
195
+ const call = this.pendingRequests.get(id);
196
+ if (!call) return;
197
+ if (error) {
198
+ call.reject(error);
199
+ this.pendingRequests.delete(id);
200
+ return;
201
+ }
202
+ call.onData?.(data);
203
+ if (complete) {
204
+ call.onComplete?.();
205
+ call.resolve(data);
206
+ this.pendingRequests.delete(id);
207
+ }
124
208
  }
209
+ });
210
+ try {
211
+ const parent = await handshake;
212
+ this.ready = true;
213
+ this.parent = parent;
214
+ Log.i('mujian sdk client init');
215
+ await this.call(events_EVENT.MUJIAN_INIT);
216
+ const projectInfo = await this.ai.chat.project.getInfo();
217
+ if (projectInfo.config?.customCss) {
218
+ const style = document.createElement('style');
219
+ style.setAttribute('type', 'text/css');
220
+ style.setAttribute('id', 'mujian-custom-css');
221
+ style.textContent = projectInfo.config.customCss;
222
+ document.head.appendChild(style);
223
+ }
224
+ if (projectInfo.config?.customJs) {
225
+ const script = document.createElement("script");
226
+ script.setAttribute('type', "text/javascript");
227
+ script.setAttribute('id', 'mujian-custom-js');
228
+ script.textContent = projectInfo.config.customJs;
229
+ document.head.appendChild(script);
230
+ }
231
+ const config = await getConfig.call(this);
232
+ if (config) this._config = config;
233
+ } catch (error) {
234
+ Log.e('init error', error);
125
235
  }
236
+ })();
237
+ return this.initPromise;
238
+ }
239
+ emit(event, data) {
240
+ if (!this.ready) throw new Error('Mujian is not initialized');
241
+ this.parent?.emit(event, data);
242
+ }
243
+ nextCallId = 0;
244
+ getCallId() {
245
+ const id = this.nextCallId;
246
+ this.nextCallId += 1;
247
+ return id;
248
+ }
249
+ async call(event, data, controller) {
250
+ if (!this.ready) throw new Error('Mujian is not initialized');
251
+ const callId = this.getCallId();
252
+ return new Promise((resolve, reject)=>{
253
+ this.pendingRequests.set(callId, {
254
+ resolve,
255
+ reject,
256
+ ...controller
257
+ });
258
+ this.emit(event, {
259
+ id: callId,
260
+ data
261
+ });
262
+ controller?.signal?.addEventListener('abort', ()=>{
263
+ this.emit(events_EVENT.MUJIAN_AI_CHAT_STOP, {
264
+ id: callId
265
+ });
266
+ });
126
267
  });
127
- try {
128
- const parent = await handshake;
129
- this.ready = true;
130
- this.parent = parent;
131
- console.log('mujian sdk client init');
132
- await this.call(events_EVENT.MUJIAN_INIT);
133
- } catch (error) {
134
- console.log('init error', error);
268
+ }
269
+ ai = {
270
+ chat: {
271
+ project: {
272
+ getInfo: getInfo.bind(this)
273
+ },
274
+ settings: {
275
+ model: {
276
+ getAll: model_getAll.bind(this),
277
+ getActive: model_getActive.bind(this),
278
+ setActive: model_setActive.bind(this)
279
+ },
280
+ persona: {
281
+ getActive: getActive.bind(this),
282
+ setActive: setActive.bind(this)
283
+ }
284
+ },
285
+ complete: chat_complete.bind(this),
286
+ applyRegex: applyRegex.bind(this),
287
+ renderMessage: renderMessage.bind(this),
288
+ continue: continueComplete.bind(this),
289
+ regenerate: regenerate.bind(this),
290
+ message: {
291
+ getAll: getAll.bind(this),
292
+ deleteOne: messageDeleteOne.bind(this),
293
+ editOne: messageEditOne.bind(this),
294
+ swipe: messageSwipe.bind(this),
295
+ getPrompt: getPrompt.bind(this),
296
+ getPage: getPage.bind(this)
297
+ }
298
+ },
299
+ text: {
300
+ complete: generate.bind(this)
301
+ },
302
+ openai: {
303
+ completions: {
304
+ create: completions.create.bind(this)
305
+ },
306
+ chat: {
307
+ completions: {
308
+ create: chat.completions.create.bind(this)
309
+ }
310
+ },
311
+ responses: {
312
+ create: responses.create.bind(this)
313
+ },
314
+ images: {
315
+ generate: images_images.generate.bind(this)
316
+ }
317
+ }
318
+ };
319
+ ui = {};
320
+ utils = {
321
+ clipboard: {
322
+ writeText: writeText.bind(this)
323
+ }
324
+ };
325
+ hybrid = {};
326
+ player = {};
327
+ game = {
328
+ assets: ()=>{
329
+ console.log('assets');
330
+ },
331
+ saves: {
332
+ saveGame: saveGame.bind(this),
333
+ loadGame: loadGame.bind(this)
334
+ },
335
+ ranking: ()=>{
336
+ console.log('ranking');
337
+ }
338
+ };
339
+ }
340
+ const generate = async function(content) {
341
+ return await this.call(MujianSdk.EVENT.MUJIAN_AI_TEXT_GENERATE, {
342
+ content
343
+ });
344
+ };
345
+ const chat = {
346
+ completions: {
347
+ create: async function(params, options, onData, signal) {
348
+ return await this.call(MujianSdk.EVENT.MUJIAN_AI_OPENAI_CHAT_COMPLETIONS_CREATE, {
349
+ params,
350
+ options
351
+ }, {
352
+ onData,
353
+ signal
354
+ });
135
355
  }
136
356
  }
357
+ };
358
+ const completions = {
359
+ create: async function(params, options, onData, signal) {
360
+ return await this.call(MujianSdk.EVENT.MUJIAN_AI_OPENAI_COMPLETIONS_CREATE, {
361
+ params,
362
+ options
363
+ }, {
364
+ onData,
365
+ signal
366
+ });
367
+ }
368
+ };
369
+ const responses = {
370
+ create: async function(params, options, onData, signal) {
371
+ return await this.call(MujianSdk.EVENT.MUJIAN_AI_OPENAI_RESPONSES_CREATE, {
372
+ params,
373
+ options
374
+ }, {
375
+ onData,
376
+ signal
377
+ });
378
+ }
379
+ };
380
+ const images_images = {
381
+ generate: async function(params, options, onData, signal) {
382
+ return await this.call(MujianSdk.EVENT.MUJIAN_AI_OPENAI_IMAGES_GENERATE, {
383
+ params,
384
+ options
385
+ }, {
386
+ onData,
387
+ signal
388
+ });
389
+ }
390
+ };
391
+ class src_MujianSdk {
392
+ constructor(){}
393
+ static EVENT = events_EVENT;
394
+ static getInstance() {
395
+ if (!window.$mujian) window.$mujian = new src_MujianSdk();
396
+ return window.$mujian;
397
+ }
398
+ parent = null;
399
+ ready = false;
400
+ get isReady() {
401
+ return this.ready;
402
+ }
403
+ pendingRequests = new Map();
404
+ _config;
405
+ get openapi() {
406
+ return this._config?.openapi;
407
+ }
408
+ initPromise = null;
409
+ async init() {
410
+ if (this.initPromise) return this.initPromise;
411
+ this.initPromise = (async ()=>{
412
+ const handshake = new postmate.Model({
413
+ reply: ({ id, complete, data, error })=>{
414
+ const call = this.pendingRequests.get(id);
415
+ if (!call) return;
416
+ if (error) {
417
+ call.reject(error);
418
+ this.pendingRequests.delete(id);
419
+ return;
420
+ }
421
+ call.onData?.(data);
422
+ if (complete) {
423
+ call.onComplete?.();
424
+ call.resolve(data);
425
+ this.pendingRequests.delete(id);
426
+ }
427
+ }
428
+ });
429
+ try {
430
+ const parent = await handshake;
431
+ this.ready = true;
432
+ this.parent = parent;
433
+ Log.i('mujian sdk client init');
434
+ await this.call(events_EVENT.MUJIAN_INIT);
435
+ const projectInfo = await this.ai.chat.project.getInfo();
436
+ if (projectInfo.config?.customCss) {
437
+ const style = document.createElement('style');
438
+ style.setAttribute('type', 'text/css');
439
+ style.setAttribute('id', 'mujian-custom-css');
440
+ style.textContent = projectInfo.config.customCss;
441
+ document.head.appendChild(style);
442
+ }
443
+ if (projectInfo.config?.customJs) {
444
+ const script = document.createElement("script");
445
+ script.setAttribute('type', "text/javascript");
446
+ script.setAttribute('id', 'mujian-custom-js');
447
+ script.textContent = projectInfo.config.customJs;
448
+ document.head.appendChild(script);
449
+ }
450
+ const config = await getConfig.call(this);
451
+ if (config) this._config = config;
452
+ } catch (error) {
453
+ Log.e('init error', error);
454
+ }
455
+ })();
456
+ return this.initPromise;
457
+ }
137
458
  emit(event, data) {
138
459
  if (!this.ready) throw new Error('Mujian is not initialized');
139
460
  this.parent?.emit(event, data);
@@ -182,6 +503,7 @@ class MujianSdk {
182
503
  },
183
504
  complete: chat_complete.bind(this),
184
505
  applyRegex: applyRegex.bind(this),
506
+ renderMessage: renderMessage.bind(this),
185
507
  continue: continueComplete.bind(this),
186
508
  regenerate: regenerate.bind(this),
187
509
  message: {
@@ -189,17 +511,34 @@ class MujianSdk {
189
511
  deleteOne: messageDeleteOne.bind(this),
190
512
  editOne: messageEditOne.bind(this),
191
513
  swipe: messageSwipe.bind(this),
192
- getPrompt: getPrompt.bind(this)
514
+ getPrompt: getPrompt.bind(this),
515
+ getPage: getPage.bind(this)
193
516
  }
194
517
  },
195
518
  text: {
196
519
  complete: generate.bind(this)
520
+ },
521
+ openai: {
522
+ completions: {
523
+ create: completions.create.bind(this)
524
+ },
525
+ chat: {
526
+ completions: {
527
+ create: chat.completions.create.bind(this)
528
+ }
529
+ },
530
+ responses: {
531
+ create: responses.create.bind(this)
532
+ },
533
+ images: {
534
+ generate: images_images.generate.bind(this)
535
+ }
197
536
  }
198
537
  };
199
538
  ui = {};
200
- util = {
201
- cn: ()=>{
202
- console.log('cn');
539
+ utils = {
540
+ clipboard: {
541
+ writeText: writeText.bind(this)
203
542
  }
204
543
  };
205
544
  hybrid = {};
@@ -217,4 +556,4 @@ class MujianSdk {
217
556
  }
218
557
  };
219
558
  }
220
- export { events_EVENT as EVENT, MujianSdk };
559
+ export { events_EVENT as EVENT, src_MujianSdk as MujianSdk };
package/dist/lite.d.ts ADDED
@@ -0,0 +1,74 @@
1
+ import { EVENT } from './events';
2
+ import { Config } from './modules/config';
3
+ /** @hidden */
4
+ export { EVENT } from './events';
5
+ type Call<T> = {
6
+ resolve: (value: T) => void;
7
+ reject: (reason?: unknown) => void;
8
+ onData?: (data: T) => void;
9
+ onComplete?: () => void;
10
+ signal?: AbortSignal;
11
+ };
12
+ declare global {
13
+ interface Window {
14
+ $mujian_lite: MujianSdkLite;
15
+ }
16
+ }
17
+ /**
18
+ * @class MujianSdkLite
19
+ * @description 幕间 SDK 的轻量级客户端,用于在浏览器中获取 API 配置。
20
+ * @example
21
+ * ```typescript
22
+ * (window as any).$mujian_lite.init().then(() => {
23
+ * console.log((window as any).$mujian_lite.openapi.baseURL); // API 的 URL
24
+ * console.log((window as any).$mujian_lite.openapi.apiKey); // API 的 KEY (当前用户唯一)
25
+ * });
26
+ * ```
27
+ */
28
+ declare class MujianSdkLite {
29
+ /** @hidden */
30
+ private constructor();
31
+ /**
32
+ * 事件
33
+ * @enum {string}
34
+ */
35
+ /** @hidden */
36
+ static EVENT: typeof EVENT;
37
+ /** @hidden */
38
+ static getInstance(): MujianSdkLite;
39
+ /** @hidden */
40
+ private parent;
41
+ /** @hidden */
42
+ private ready;
43
+ /**
44
+ * 是否初始化
45
+ */
46
+ /** @hidden */
47
+ get isReady(): boolean;
48
+ /** @hidden */
49
+ private pendingRequests;
50
+ /** @hidden */
51
+ private _config?;
52
+ /**
53
+ * 获取 API 配置
54
+ * @returns {{ baseURL: string, apiKey: string }} { baseURL: API 的 URL, apiKey: API 的 KEY }
55
+ */
56
+ get openapi(): Config['openapi'] | undefined;
57
+ /** @hidden */
58
+ private initPromise;
59
+ /**
60
+ * 初始化
61
+ */
62
+ init(): Promise<void>;
63
+ /** @hidden */
64
+ private ensureReady;
65
+ /** @hidden */
66
+ emit<T>(event: EVENT, data?: T): void;
67
+ /** @hidden */
68
+ private nextCallId;
69
+ /** @hidden */
70
+ private getCallId;
71
+ /** @hidden */
72
+ call<Req, Resp>(event: EVENT, data?: Req, controller?: Pick<Call<Resp>, 'onData' | 'onComplete' | 'signal'>): Promise<Resp>;
73
+ }
74
+ export default MujianSdkLite;