@mujian/js-sdk 0.0.6-beta.89 → 0.0.6-beta.90

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.
package/dist/index.d.ts CHANGED
@@ -51,7 +51,6 @@ declare class MujianSdk {
51
51
  call<Req, Resp>(event: EVENT, data?: Req, controller?: Pick<Call<Resp>, 'onData' | 'onComplete' | 'signal'>): Promise<Resp>;
52
52
  /**
53
53
  * @namespace ai
54
- * @description AI
55
54
  */
56
55
  ai: any;
57
56
  ui: {};
package/dist/index.js CHANGED
@@ -131,22 +131,6 @@ const getInfo = async function() {
131
131
  const getActive = async function() {
132
132
  return await this.call(events_EVENT.MUJIAN_AI_SETTINGS_PERSONA_GET_ACTIVE);
133
133
  };
134
- const setActive = async function(personaId) {
135
- return await this.call(events_EVENT.MUJIAN_AI_SETTINGS_PERSONA_SET_ACTIVE, {
136
- personaId
137
- });
138
- };
139
- const model_getActive = async function() {
140
- return await this.call(events_EVENT.MUJIAN_AI_SETTINGS_MODEL_GET_ACTIVE);
141
- };
142
- const model_setActive = async function(modelId) {
143
- return await this.call(events_EVENT.MUJIAN_AI_SETTINGS_MODEL_SET_ACTIVE, {
144
- modelId
145
- });
146
- };
147
- const model_getAll = async function() {
148
- return await this.call(events_EVENT.MUJIAN_AI_SETTINGS_MODEL_GET_ALL);
149
- };
150
134
  async function getConfig() {
151
135
  return await this.call(events_EVENT.MUJIAN_GET_CONFIG);
152
136
  }
@@ -266,14 +250,8 @@ class MujianSdk {
266
250
  getInfo: getInfo.bind(this)
267
251
  },
268
252
  settings: {
269
- model: {
270
- getAll: model_getAll.bind(this),
271
- getActive: model_getActive.bind(this),
272
- setActive: model_setActive.bind(this)
273
- },
274
253
  persona: {
275
- getActive: getActive.bind(this),
276
- setActive: setActive.bind(this)
254
+ getActive: getActive.bind(this)
277
255
  }
278
256
  },
279
257
  complete: chat_complete.bind(this),
@@ -484,14 +462,8 @@ class src_MujianSdk {
484
462
  getInfo: getInfo.bind(this)
485
463
  },
486
464
  settings: {
487
- model: {
488
- getAll: model_getAll.bind(this),
489
- getActive: model_getActive.bind(this),
490
- setActive: model_setActive.bind(this)
491
- },
492
465
  persona: {
493
- getActive: getActive.bind(this),
494
- setActive: setActive.bind(this)
466
+ getActive: getActive.bind(this)
495
467
  }
496
468
  },
497
469
  complete: chat_complete.bind(this),
package/dist/lite.d.ts CHANGED
@@ -16,7 +16,6 @@ declare global {
16
16
  }
17
17
  /**
18
18
  * @class MujianSdkLite
19
- * @description Cheliz SDK 的轻量级客户端,用于在浏览器中获取 API 配置。
20
19
  * @example
21
20
  * ```typescript
22
21
  * (window as any).$mujian_lite.init().then(() => {
@@ -1,3 +1,2 @@
1
1
  import * as persona from './persona';
2
- import * as model from './model';
3
- export { persona, model };
2
+ export { persona };
@@ -7,11 +7,3 @@ import type { PersonaInfo } from '../../../../types';
7
7
  export declare const getActive: (
8
8
  /** @hidden */
9
9
  this: MujianSdk) => Promise<PersonaInfo>;
10
- /**
11
- * 设置当前激活的个人设置
12
- * @param personaId 个人设置ID
13
- * @returns
14
- */
15
- export declare const setActive: (
16
- /** @hidden */
17
- this: MujianSdk, personaId: string) => Promise<void>;
@@ -2,18 +2,15 @@ import { MujianSdk } from '../../../index';
2
2
  import type OpenAI from 'openai';
3
3
  /**
4
4
  * @namespace openai.chat
5
- * @description OpenAI 聊天补全
6
5
  */
7
6
  export declare const chat: {
8
7
  /**
9
8
  * @namespace openai.chat.completions
10
- * @description OpenAI 聊天补全
11
9
  */
12
10
  completions: {
13
11
  /**
14
12
  * OpenAI 聊天补全
15
13
  * @function openai.chat.completions.create
16
- * @async
17
14
  * @param {OpenAI.ChatCompletionCreateParams} params - 聊天补全参数
18
15
  * @param {OpenAI.RequestOptions} options - 聊天补全选项
19
16
  * @param {Function} onData - 数据生成时的回调
@@ -2,13 +2,11 @@ import { MujianSdk } from '../../../index';
2
2
  import type OpenAI from 'openai';
3
3
  /**
4
4
  * @namespace openai.completions
5
- * @description OpenAI 文本补全
6
5
  */
7
6
  export declare const completions: {
8
7
  /**
9
8
  * OpenAI 文本补全
10
9
  * @function openai.completions.create
11
- * @async
12
10
  * @param {OpenAI.CompletionCreateParams} params - 文本补全参数
13
11
  * @param {OpenAI.RequestOptions} options - 文本补全选项
14
12
  * @param {Function} onData - 数据生成时的回调
@@ -2,13 +2,11 @@ import { MujianSdk } from '../../../index';
2
2
  import type OpenAI from 'openai';
3
3
  /**
4
4
  * @namespace openai.images
5
- * @description OpenAI 图像生成
6
5
  */
7
6
  export declare const images: {
8
7
  /**
9
8
  * OpenAI 图像生成
10
9
  * @function openai.images.generate
11
- * @async
12
10
  * @param {OpenAI.ImageGenerateParams} params - 图像生成参数
13
11
  * @param {OpenAI.RequestOptions} options - 图像生成选项
14
12
  * @param {Function} onData - 数据生成时的回调
@@ -3,13 +3,11 @@ import type OpenAI from 'openai';
3
3
  import type { ResponseCreateParams } from 'openai/resources/responses/responses.mjs';
4
4
  /**
5
5
  * @namespace openai.responses
6
- * @description OpenAI 响应创建
7
6
  */
8
7
  export declare const responses: {
9
8
  /**
10
9
  * OpenAI 响应创建
11
10
  * @function openai.responses.create
12
- * @async
13
11
  * @param {ResponseCreateParams} params - 响应创建参数
14
12
  * @param {OpenAI.RequestOptions} options - 响应创建选项
15
13
  * @param {Function} onData - 数据生成时的回调
@@ -1,7 +1,6 @@
1
1
  import { type MujianSdk } from '../index.ts';
2
2
  /**
3
3
  * @interface Config
4
- * @description 配置接口
5
4
  * @property {string} baseURL API 的 URL
6
5
  * @property {string} apiKey API 的 KEY (当前用户唯一)
7
6
  */
@@ -7,15 +7,16 @@ export type MdRendererProps = {
7
7
  content: string;
8
8
  unsafe?: boolean;
9
9
  extra?: Record<string, unknown>;
10
+ lang?: string;
10
11
  };
11
12
  /**
12
13
  * A React component that renders markdown content as HTML
13
14
  */
14
15
  export declare const MdRendererBase: {
15
- ({ content, unsafe, extra, }: MdRendererProps): import("react/jsx-runtime").JSX.Element;
16
+ ({ content, unsafe, extra, lang, }: MdRendererProps): import("react/jsx-runtime").JSX.Element;
16
17
  displayName: string;
17
18
  };
18
19
  export declare const MdRenderer: React.MemoExoticComponent<{
19
- ({ content, unsafe, extra, }: MdRendererProps): import("react/jsx-runtime").JSX.Element;
20
+ ({ content, unsafe, extra, lang, }: MdRendererProps): import("react/jsx-runtime").JSX.Element;
20
21
  displayName: string;
21
22
  }>;
package/dist/react.js CHANGED
@@ -406,7 +406,14 @@ function messageFormatting(mes, sanitizerOverrides = {}) {
406
406
  });
407
407
  return mes;
408
408
  }
409
- const MdRendererBase = ({ content, unsafe = false, extra = {} })=>{
409
+ const loadingTranslates = {
410
+ 'zh-hans': '加载中...',
411
+ 'zh-hant': '載入中...',
412
+ en: 'Loading...',
413
+ ja: '読み込み中...',
414
+ th: 'กำลังโหลด...'
415
+ };
416
+ const MdRendererBase = ({ content, unsafe = false, extra = {}, lang })=>{
410
417
  const containerRef = useRef(null);
411
418
  const [iframeIdList, setIframeIdList] = useState([]);
412
419
  useEffect(()=>{
@@ -423,16 +430,12 @@ const MdRendererBase = ({ content, unsafe = false, extra = {} })=>{
423
430
  id
424
431
  ]);
425
432
  const escapedSrcdoc = escapeHtmlAttribute(srcdoc);
433
+ const loadingText = loadingTranslates[lang ?? 'zh-hans'] || loadingTranslates['zh-hans'];
426
434
  return `
427
435
  <div class="MJ-iframe-container" id="${containerId}" style="display:flex;width:100%;height:100%;position:relative;">
428
436
  <div class="spin-overlay" id="MJ-spin-${id}" style="width:100%;height:100%;position:absolute;top:0;left:0;z-index:1000;background-color:rgba(0,0,0,0.5);display:flex;justify-content:center;align-items:center;">
429
437
  <div class="spin-inner wave-text" style="font-weight:500;font-size:16px;color:white;display:flex;justify-content:center;align-items:center;">
430
- <span>加</span>
431
- <span>载</span>
432
- <span>中</span>
433
- <span>.</span>
434
- <span>.</span>
435
- <span>.</span>
438
+ ${loadingText.split('').map((t)=>`<span>${t}</span>`).join('')}
436
439
  </div>
437
440
  </div>
438
441
  <iframe id="${iframeId}" class="w-full" sandbox="${unsafe ? "allow-scripts" : "allow-scripts allow-same-origin"}" loading="lazy"
@@ -630,22 +633,6 @@ const getInfo = async function() {
630
633
  const getActive = async function() {
631
634
  return await this.call(events_EVENT.MUJIAN_AI_SETTINGS_PERSONA_GET_ACTIVE);
632
635
  };
633
- const setActive = async function(personaId) {
634
- return await this.call(events_EVENT.MUJIAN_AI_SETTINGS_PERSONA_SET_ACTIVE, {
635
- personaId
636
- });
637
- };
638
- const model_getActive = async function() {
639
- return await this.call(events_EVENT.MUJIAN_AI_SETTINGS_MODEL_GET_ACTIVE);
640
- };
641
- const model_setActive = async function(modelId) {
642
- return await this.call(events_EVENT.MUJIAN_AI_SETTINGS_MODEL_SET_ACTIVE, {
643
- modelId
644
- });
645
- };
646
- const model_getAll = async function() {
647
- return await this.call(events_EVENT.MUJIAN_AI_SETTINGS_MODEL_GET_ALL);
648
- };
649
636
  const generate = async function(content) {
650
637
  return await this.call(MujianSdk.EVENT.MUJIAN_AI_TEXT_GENERATE, {
651
638
  content
@@ -808,14 +795,8 @@ class MujianSdk {
808
795
  getInfo: getInfo.bind(this)
809
796
  },
810
797
  settings: {
811
- model: {
812
- getAll: model_getAll.bind(this),
813
- getActive: model_getActive.bind(this),
814
- setActive: model_setActive.bind(this)
815
- },
816
798
  persona: {
817
- getActive: getActive.bind(this),
818
- setActive: setActive.bind(this)
799
+ getActive: getActive.bind(this)
819
800
  }
820
801
  },
821
802
  complete: chat_complete.bind(this),
@@ -1141,7 +1122,6 @@ async function* callSdk(mujian, content, type = 'generate', signal) {
1141
1122
  });
1142
1123
  }
1143
1124
  const NOT_SAVED_MSG_ID_PREFIX = 'not_saved';
1144
- const FALLBACK_MESSAGE = `AI什么也没返回(该条不扣费)`;
1145
1125
  const useChatStreaming = ({ common, setError, setMessages, getMessages, setInput, mujian })=>{
1146
1126
  const { body } = common;
1147
1127
  const [isStreaming, setIsStreaming] = useState(false);
@@ -1268,11 +1248,7 @@ const useChatStreaming = ({ common, setError, setMessages, getMessages, setInput
1268
1248
  }
1269
1249
  setMessages(produce((draft)=>{
1270
1250
  const lastMessage = draft[draft.length - 1];
1271
- if (!lastMessage.swipes[lastMessage.activeSwipeId] && !signal?.aborted && !lastMessage.flags.contentFilter) {
1272
- lastMessage.swipes[lastMessage.activeSwipeId] = FALLBACK_MESSAGE;
1273
- lastMessage.content = FALLBACK_MESSAGE;
1274
- lastMessage.flags.emptyResponse = true;
1275
- }
1251
+ if (!lastMessage.swipes[lastMessage.activeSwipeId] && !signal?.aborted && !lastMessage.flags.contentFilter) lastMessage.flags.emptyResponse = true;
1276
1252
  }));
1277
1253
  } catch (error) {
1278
1254
  Log.e('Stream error', error);
package/dist/umd/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  /*! For license information please see index.js.LICENSE.txt */
2
- !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.MujianUMD=e():t.MujianUMD=e()}(globalThis,()=>(()=>{"use strict";var t,e={};e.d=(t,i)=>{for(var n in i)e.o(i,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:i[n]})},e.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),e.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var i={};e.r(i),e.d(i,{MujianSdk:()=>D,EVENT:()=>u});var n="application/x-postmate-v1+json",a=0,s=function(t){var e=document.createElement("a");e.href=t;var i=e.protocol.length>4?e.protocol:window.location.protocol,n=e.host.length?"80"===e.port||"443"===e.port?e.hostname:e.host:window.location.host;return e.origin||i+"//"+n},r={handshake:1,"handshake-reply":1,call:1,emit:1,reply:1,request:1},o=function(t,e){return("string"!=typeof e||t.origin===e)&&!!t.data&&("object"!=typeof t.data||"postmate"in t.data)&&t.data.type===n&&!!r[t.data.postmate]},c=function(t,e){var i="function"==typeof t[e]?t[e]():t[e];return h.Promise.resolve(i)},l=function(){function t(t){var e=this;this.parent=t.parent,this.frame=t.frame,this.child=t.child,this.childOrigin=t.childOrigin,this.events={},this.listener=function(t){if(!o(t,e.childOrigin))return!1;var i=((t||{}).data||{}).value||{},n=i.data,a=i.name;"emit"===t.data.postmate&&a in e.events&&e.events[a].call(e,n)},this.parent.addEventListener("message",this.listener,!1)}var e=t.prototype;return e.get=function(t){var e=this;return new h.Promise(function(i){var s=++a;e.parent.addEventListener("message",function t(n){n.data.uid===s&&"reply"===n.data.postmate&&(e.parent.removeEventListener("message",t,!1),i(n.data.value))},!1),e.child.postMessage({postmate:"request",type:n,property:t,uid:s},e.childOrigin)})},e.call=function(t,e){this.child.postMessage({postmate:"call",type:n,property:t,data:e},this.childOrigin)},e.on=function(t,e){this.events[t]=e},e.destroy=function(){window.removeEventListener("message",this.listener,!1),this.frame.parentNode.removeChild(this.frame)},t}(),d=function(){function t(t){var e=this;this.model=t.model,this.parent=t.parent,this.parentOrigin=t.parentOrigin,this.child=t.child,this.child.addEventListener("message",function(t){if(o(t,e.parentOrigin)){var i=t.data,a=i.property,s=i.uid,r=i.data;if("call"===t.data.postmate){a in e.model&&"function"==typeof e.model[a]&&e.model[a](r);return}c(e.model,a).then(function(e){return t.source.postMessage({property:a,postmate:"reply",type:n,uid:s,value:e},t.origin)})}})}return t.prototype.emit=function(t,e){this.parent.postMessage({postmate:"emit",type:n,value:{name:t,data:e}},this.parentOrigin)},t}(),h=function(){function t(t){var e=t.container,i=void 0===e?void 0!==i?i:document.body:e,n=t.model,a=t.url,s=t.name,r=t.classListArray;return this.parent=window,this.frame=document.createElement("iframe"),this.frame.name=s||"",this.frame.classList.add.apply(this.frame.classList,void 0===r?[]:r),i.appendChild(this.frame),this.child=this.frame.contentWindow||this.frame.contentDocument.parentWindow,this.model=n||{},this.sendHandshake(a)}return t.prototype.sendHandshake=function(e){var i,a=this,r=s(e),c=0;return new t.Promise(function(t,s){a.parent.addEventListener("message",function e(n){return!!o(n,r)&&("handshake-reply"===n.data.postmate?(clearInterval(i),a.parent.removeEventListener("message",e,!1),a.childOrigin=n.origin,t(new l(a))):s("Failed handshake"))},!1);var d=function(){c++,a.child.postMessage({postmate:"handshake",type:n,model:a.model},r),5===c&&clearInterval(i)},h=function(){d(),i=setInterval(d,500)};a.frame.attachEvent?a.frame.attachEvent("onload",h):a.frame.onload=h,a.frame.src=e})},t}();h.debug=!1,h.Promise=function(){try{return window?window.Promise:Promise}catch(t){return null}}(),h.Model=function(){function t(t){return this.child=window,this.model=t,this.parent=this.child.parent,this.sendHandshakeReply()}return t.prototype.sendHandshakeReply=function(){var t=this;return new h.Promise(function(e,i){t.child.addEventListener("message",function a(s){if(s.data.postmate){if("handshake"===s.data.postmate){t.child.removeEventListener("message",a,!1),s.source.postMessage({postmate:"handshake-reply",type:n},s.origin),t.parentOrigin=s.origin;var r=s.data.model;return r&&Object.keys(r).forEach(function(e){t.model[e]=r[e]}),e(new d(t))}return i("Handshake Reply Failed")}},!1)})},t}();var u=((t={}).MUJIAN_INIT="mujian:init",t.MUJIAN_AI_CHAT_STOP="mujian:ai:chat:stop",t.MUJIAN_AI_CHAT_COMPLETE="mujian:ai:chat:complete",t.MUJIAN_AI_CHAT_APPLY_REGEX="mujian:ai:chat:applyRegex",t.MUJIAN_AI_CHAT_RENDER_MESSAGE="mujian:ai:chat:renderMessage",t.MUJIAN_AI_TEXT_GENERATE="mujian:ai:text:generate",t.MUJIAN_AI_OPENAI_COMPLETIONS_CREATE="mujian:ai:openai:completions:create",t.MUJIAN_AI_OPENAI_CHAT_COMPLETIONS_CREATE="mujian:ai:openai:chat:completions:create",t.MUJIAN_AI_OPENAI_RESPONSES_CREATE="mujian:ai:openai:responses:create",t.MUJIAN_AI_CHAT_MESSAGE_GET_ALL="mujian:ai:chat:message:getAll",t.MUJIAN_AI_CHAT_MESSAGE_GET_PAGE="mujian:ai:chat:message:getPage",t.MUJIAN_AI_CHAT_PROJECT_GET_INFO="mujian:ai:chat:project:getInfo",t.MUJIAN_AI_SETTINGS_PERSONA_GET_ACTIVE="mujian:ai:settings:persona:getActive",t.MUJIAN_AI_SETTINGS_PERSONA_SET_ACTIVE="mujian:ai:settings:persona:setActive",t.MUJIAN_AI_SETTINGS_MODEL_GET_ALL="mujian:ai:settings:model:getAll",t.MUJIAN_AI_SETTINGS_MODEL_SET_ACTIVE="mujian:ai:settings:model:setActive",t.MUJIAN_AI_SETTINGS_MODEL_GET_ACTIVE="mujian:ai:settings:model:getActive",t.MUJIAN_AI_CHAT_MESSAGE_DELETE_ONE="mujian:ai:chat:message:deleteOne",t.MUJIAN_AI_CHAT_MESSAGE_EDIT_ONE="mujian:ai:chat:message:editOne",t.MUJIAN_AI_CHAT_MESSAGE_SWIPE="mujian:ai:chat:message:swipe",t.MUJIAN_AI_OPENAI_IMAGES_GENERATE="mujian:ai:openai:images:generate",t.MUJIAN_UTILS_CLIPBOARD_WRITE_TEXT="mujian:utils:clipboard:writeText",t.MUJIAN_GET_CONFIG="mujian:getConfig",t);let _=async function(t,e,i,n={}){let a,s,r,o;await this.call(u.MUJIAN_AI_CHAT_COMPLETE,{content:t},{onData:n.parseContent?(a="",s="",function(t){let i=(s+=t).split("\n");for(let t of(s=i.pop()||"",i))if(t.startsWith("data: "))try{let i=JSON.parse(t.slice(6));if(i.question_id&&(r=i.question_id),i.reply_id&&(o=i.reply_id),i.isFinished)return void e({isFinished:!0,deltaContent:"",fullContent:a,questionId:r,replyId:o});let n=i?.choices?.[0]?.delta?.content;n?.length>0&&(a+=n,e({isFinished:!1,deltaContent:n,fullContent:a,questionId:r,replyId:o}))}catch(t){e({isFinished:!0,error:t,deltaContent:"",fullContent:a,questionId:r,replyId:o});return}}):e,signal:i})},p=async function(t){return await this.call(u.MUJIAN_AI_CHAT_APPLY_REGEX,t)},m=async function(t){return await this.call(u.MUJIAN_AI_CHAT_RENDER_MESSAGE,t)},A=async function(t,e){return await this.call(u.MUJIAN_AI_CHAT_COMPLETE,{isContinue:!0},{onData:t,signal:e})},E=async function(t,e){return await this.call(u.MUJIAN_AI_CHAT_COMPLETE,{isRegenerate:!0},{onData:t,signal:e})},I=async function(){return await this.call(u.MUJIAN_AI_CHAT_MESSAGE_GET_ALL)},g=async function(t){return await this.call(u.MUJIAN_AI_CHAT_MESSAGE_DELETE_ONE,{messageId:t})},f=async function(t,e){return await this.call(u.MUJIAN_AI_CHAT_MESSAGE_EDIT_ONE,{messageId:t,content:e})},T=async function(t,e){return await this.call(u.MUJIAN_AI_CHAT_MESSAGE_SWIPE,{messageId:t,swipeId:e})};async function y(t,e){return await this.call(u.MUJIAN_AI_CHAT_MESSAGE_GET_PAGE,{fromCursor:t,pageSize:e})}let M=async function(){return await this.call(u.MUJIAN_AI_CHAT_PROJECT_GET_INFO)},N=async function(){return await this.call(u.MUJIAN_AI_SETTINGS_PERSONA_GET_ACTIVE)},C=async function(t){return await this.call(u.MUJIAN_AI_SETTINGS_PERSONA_SET_ACTIVE,{personaId:t})},w=async function(){return await this.call(u.MUJIAN_AI_SETTINGS_MODEL_GET_ACTIVE)},S=async function(t){return await this.call(u.MUJIAN_AI_SETTINGS_MODEL_SET_ACTIVE,{modelId:t})},b=async function(){return await this.call(u.MUJIAN_AI_SETTINGS_MODEL_GET_ALL)};async function v(){return await this.call(u.MUJIAN_GET_CONFIG)}let O=async function(){},j=async function(){};async function P(t){return await this.call(u.MUJIAN_UTILS_CLIPBOARD_WRITE_TEXT,t)}let J={i(...t){console.log("[MujianSDK] ",...t)},e(...t){console.error("[MujianSDK] ",...t)}};class U{constructor(){}static EVENT=u;static getInstance(){return window.$mujian||(window.$mujian=new U),window.$mujian}parent=null;ready=!1;get isReady(){return this.ready}pendingRequests=new Map;_config;get openapi(){return this._config?.openapi}initPromise=null;async init(){return this.initPromise||(this.initPromise=(async()=>{let t=new h.Model({reply:({id:t,complete:e,data:i,error:n})=>{let a=this.pendingRequests.get(t);if(a){if(n){a.reject(n),this.pendingRequests.delete(t);return}a.onData?.(i),e&&(a.onComplete?.(),a.resolve(i),this.pendingRequests.delete(t))}}});try{let e=await t;this.ready=!0,this.parent=e,J.i("mujian sdk client init"),await this.call(u.MUJIAN_INIT);let i=await this.ai.chat.project.getInfo();if(i.config?.customCss){let t=document.createElement("style");t.setAttribute("type","text/css"),t.setAttribute("id","mujian-custom-css"),t.textContent=i.config.customCss,document.head.appendChild(t)}if(i.config?.customJs){let t=document.createElement("script");t.setAttribute("type","text/javascript"),t.setAttribute("id","mujian-custom-js"),t.textContent=i.config.customJs,document.head.appendChild(t)}let n=await v.call(this);n&&(this._config=n)}catch(t){J.e("init error",t)}})()),this.initPromise}emit(t,e){if(!this.ready)throw Error("Mujian is not initialized");this.parent?.emit(t,e)}nextCallId=0;getCallId(){let t=this.nextCallId;return this.nextCallId+=1,t}async call(t,e,i){if(!this.ready)throw Error("Mujian is not initialized");let n=this.getCallId();return new Promise((a,s)=>{this.pendingRequests.set(n,{resolve:a,reject:s,...i}),this.emit(t,{id:n,data:e}),i?.signal?.addEventListener("abort",()=>{this.emit(u.MUJIAN_AI_CHAT_STOP,{id:n})})})}ai={chat:{project:{getInfo:M.bind(this)},settings:{model:{getAll:b.bind(this),getActive:w.bind(this),setActive:S.bind(this)},persona:{getActive:N.bind(this),setActive:C.bind(this)}},complete:_.bind(this),applyRegex:p.bind(this),renderMessage:m.bind(this),continue:A.bind(this),regenerate:E.bind(this),message:{getAll:I.bind(this),deleteOne:g.bind(this),editOne:f.bind(this),swipe:T.bind(this),getPage:y.bind(this)}},text:{complete:G.bind(this)},openai:{completions:{create:L.create.bind(this)},chat:{completions:{create:R.completions.create.bind(this)}},responses:{create:H.create.bind(this)},images:{generate:x.generate.bind(this)}}};ui={};utils={clipboard:{writeText:P.bind(this)}};hybrid={};player={};game={assets:()=>{console.log("assets")},saves:{saveGame:O.bind(this),loadGame:j.bind(this)},ranking:()=>{console.log("ranking")}}}let G=async function(t){return await this.call(U.EVENT.MUJIAN_AI_TEXT_GENERATE,{content:t})},R={completions:{create:async function(t,e,i,n){return await this.call(U.EVENT.MUJIAN_AI_OPENAI_CHAT_COMPLETIONS_CREATE,{params:t,options:e},{onData:i,signal:n})}}},L={create:async function(t,e,i,n){return await this.call(U.EVENT.MUJIAN_AI_OPENAI_COMPLETIONS_CREATE,{params:t,options:e},{onData:i,signal:n})}},H={create:async function(t,e,i,n){return await this.call(U.EVENT.MUJIAN_AI_OPENAI_RESPONSES_CREATE,{params:t,options:e},{onData:i,signal:n})}},x={generate:async function(t,e,i,n){return await this.call(U.EVENT.MUJIAN_AI_OPENAI_IMAGES_GENERATE,{params:t,options:e},{onData:i,signal:n})}};class D{constructor(){}static EVENT=u;static getInstance(){return window.$mujian||(window.$mujian=new D),window.$mujian}parent=null;ready=!1;get isReady(){return this.ready}pendingRequests=new Map;_config;get openapi(){return this._config?.openapi}initPromise=null;async init(){return this.initPromise||(this.initPromise=(async()=>{let t=new h.Model({reply:({id:t,complete:e,data:i,error:n})=>{let a=this.pendingRequests.get(t);if(a){if(n){a.reject(n),this.pendingRequests.delete(t);return}a.onData?.(i),e&&(a.onComplete?.(),a.resolve(i),this.pendingRequests.delete(t))}}});try{let e=await t;this.ready=!0,this.parent=e,J.i("mujian sdk client init"),await this.call(u.MUJIAN_INIT);let i=await this.ai.chat.project.getInfo();if(i.config?.customCss){let t=document.createElement("style");t.setAttribute("type","text/css"),t.setAttribute("id","mujian-custom-css"),t.textContent=i.config.customCss,document.head.appendChild(t)}if(i.config?.customJs){let t=document.createElement("script");t.setAttribute("type","text/javascript"),t.setAttribute("id","mujian-custom-js"),t.textContent=i.config.customJs,document.head.appendChild(t)}let n=await v.call(this);n&&(this._config=n)}catch(t){J.e("init error",t)}})()),this.initPromise}emit(t,e){if(!this.ready)throw Error("Mujian is not initialized");this.parent?.emit(t,e)}nextCallId=0;getCallId(){let t=this.nextCallId;return this.nextCallId+=1,t}async call(t,e,i){if(!this.ready)throw Error("Mujian is not initialized");let n=this.getCallId();return new Promise((a,s)=>{this.pendingRequests.set(n,{resolve:a,reject:s,...i}),this.emit(t,{id:n,data:e}),i?.signal?.addEventListener("abort",()=>{this.emit(u.MUJIAN_AI_CHAT_STOP,{id:n})})})}ai={chat:{project:{getInfo:M.bind(this)},settings:{model:{getAll:b.bind(this),getActive:w.bind(this),setActive:S.bind(this)},persona:{getActive:N.bind(this),setActive:C.bind(this)}},complete:_.bind(this),applyRegex:p.bind(this),renderMessage:m.bind(this),continue:A.bind(this),regenerate:E.bind(this),message:{getAll:I.bind(this),deleteOne:g.bind(this),editOne:f.bind(this),swipe:T.bind(this),getPage:y.bind(this)}},text:{complete:G.bind(this)},openai:{completions:{create:L.create.bind(this)},chat:{completions:{create:R.completions.create.bind(this)}},responses:{create:H.create.bind(this)},images:{generate:x.generate.bind(this)}}};ui={};utils={clipboard:{writeText:P.bind(this)}};hybrid={};player={};game={assets:()=>{console.log("assets")},saves:{saveGame:O.bind(this),loadGame:j.bind(this)},ranking:()=>{console.log("ranking")}}}return i})());
2
+ !function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.MujianUMD=e():t.MujianUMD=e()}(globalThis,()=>(()=>{"use strict";var t,e={};e.d=(t,i)=>{for(var n in i)e.o(i,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:i[n]})},e.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),e.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})};var i={};e.r(i),e.d(i,{MujianSdk:()=>R,EVENT:()=>u});var n="application/x-postmate-v1+json",a=0,s=function(t){var e=document.createElement("a");e.href=t;var i=e.protocol.length>4?e.protocol:window.location.protocol,n=e.host.length?"80"===e.port||"443"===e.port?e.hostname:e.host:window.location.host;return e.origin||i+"//"+n},r={handshake:1,"handshake-reply":1,call:1,emit:1,reply:1,request:1},o=function(t,e){return("string"!=typeof e||t.origin===e)&&!!t.data&&("object"!=typeof t.data||"postmate"in t.data)&&t.data.type===n&&!!r[t.data.postmate]},c=function(t,e){var i="function"==typeof t[e]?t[e]():t[e];return h.Promise.resolve(i)},l=function(){function t(t){var e=this;this.parent=t.parent,this.frame=t.frame,this.child=t.child,this.childOrigin=t.childOrigin,this.events={},this.listener=function(t){if(!o(t,e.childOrigin))return!1;var i=((t||{}).data||{}).value||{},n=i.data,a=i.name;"emit"===t.data.postmate&&a in e.events&&e.events[a].call(e,n)},this.parent.addEventListener("message",this.listener,!1)}var e=t.prototype;return e.get=function(t){var e=this;return new h.Promise(function(i){var s=++a;e.parent.addEventListener("message",function t(n){n.data.uid===s&&"reply"===n.data.postmate&&(e.parent.removeEventListener("message",t,!1),i(n.data.value))},!1),e.child.postMessage({postmate:"request",type:n,property:t,uid:s},e.childOrigin)})},e.call=function(t,e){this.child.postMessage({postmate:"call",type:n,property:t,data:e},this.childOrigin)},e.on=function(t,e){this.events[t]=e},e.destroy=function(){window.removeEventListener("message",this.listener,!1),this.frame.parentNode.removeChild(this.frame)},t}(),d=function(){function t(t){var e=this;this.model=t.model,this.parent=t.parent,this.parentOrigin=t.parentOrigin,this.child=t.child,this.child.addEventListener("message",function(t){if(o(t,e.parentOrigin)){var i=t.data,a=i.property,s=i.uid,r=i.data;if("call"===t.data.postmate){a in e.model&&"function"==typeof e.model[a]&&e.model[a](r);return}c(e.model,a).then(function(e){return t.source.postMessage({property:a,postmate:"reply",type:n,uid:s,value:e},t.origin)})}})}return t.prototype.emit=function(t,e){this.parent.postMessage({postmate:"emit",type:n,value:{name:t,data:e}},this.parentOrigin)},t}(),h=function(){function t(t){var e=t.container,i=void 0===e?void 0!==i?i:document.body:e,n=t.model,a=t.url,s=t.name,r=t.classListArray;return this.parent=window,this.frame=document.createElement("iframe"),this.frame.name=s||"",this.frame.classList.add.apply(this.frame.classList,void 0===r?[]:r),i.appendChild(this.frame),this.child=this.frame.contentWindow||this.frame.contentDocument.parentWindow,this.model=n||{},this.sendHandshake(a)}return t.prototype.sendHandshake=function(e){var i,a=this,r=s(e),c=0;return new t.Promise(function(t,s){a.parent.addEventListener("message",function e(n){return!!o(n,r)&&("handshake-reply"===n.data.postmate?(clearInterval(i),a.parent.removeEventListener("message",e,!1),a.childOrigin=n.origin,t(new l(a))):s("Failed handshake"))},!1);var d=function(){c++,a.child.postMessage({postmate:"handshake",type:n,model:a.model},r),5===c&&clearInterval(i)},h=function(){d(),i=setInterval(d,500)};a.frame.attachEvent?a.frame.attachEvent("onload",h):a.frame.onload=h,a.frame.src=e})},t}();h.debug=!1,h.Promise=function(){try{return window?window.Promise:Promise}catch(t){return null}}(),h.Model=function(){function t(t){return this.child=window,this.model=t,this.parent=this.child.parent,this.sendHandshakeReply()}return t.prototype.sendHandshakeReply=function(){var t=this;return new h.Promise(function(e,i){t.child.addEventListener("message",function a(s){if(s.data.postmate){if("handshake"===s.data.postmate){t.child.removeEventListener("message",a,!1),s.source.postMessage({postmate:"handshake-reply",type:n},s.origin),t.parentOrigin=s.origin;var r=s.data.model;return r&&Object.keys(r).forEach(function(e){t.model[e]=r[e]}),e(new d(t))}return i("Handshake Reply Failed")}},!1)})},t}();var u=((t={}).MUJIAN_INIT="mujian:init",t.MUJIAN_AI_CHAT_STOP="mujian:ai:chat:stop",t.MUJIAN_AI_CHAT_COMPLETE="mujian:ai:chat:complete",t.MUJIAN_AI_CHAT_APPLY_REGEX="mujian:ai:chat:applyRegex",t.MUJIAN_AI_CHAT_RENDER_MESSAGE="mujian:ai:chat:renderMessage",t.MUJIAN_AI_TEXT_GENERATE="mujian:ai:text:generate",t.MUJIAN_AI_OPENAI_COMPLETIONS_CREATE="mujian:ai:openai:completions:create",t.MUJIAN_AI_OPENAI_CHAT_COMPLETIONS_CREATE="mujian:ai:openai:chat:completions:create",t.MUJIAN_AI_OPENAI_RESPONSES_CREATE="mujian:ai:openai:responses:create",t.MUJIAN_AI_CHAT_MESSAGE_GET_ALL="mujian:ai:chat:message:getAll",t.MUJIAN_AI_CHAT_MESSAGE_GET_PAGE="mujian:ai:chat:message:getPage",t.MUJIAN_AI_CHAT_PROJECT_GET_INFO="mujian:ai:chat:project:getInfo",t.MUJIAN_AI_SETTINGS_PERSONA_GET_ACTIVE="mujian:ai:settings:persona:getActive",t.MUJIAN_AI_SETTINGS_PERSONA_SET_ACTIVE="mujian:ai:settings:persona:setActive",t.MUJIAN_AI_SETTINGS_MODEL_GET_ALL="mujian:ai:settings:model:getAll",t.MUJIAN_AI_SETTINGS_MODEL_SET_ACTIVE="mujian:ai:settings:model:setActive",t.MUJIAN_AI_SETTINGS_MODEL_GET_ACTIVE="mujian:ai:settings:model:getActive",t.MUJIAN_AI_CHAT_MESSAGE_DELETE_ONE="mujian:ai:chat:message:deleteOne",t.MUJIAN_AI_CHAT_MESSAGE_EDIT_ONE="mujian:ai:chat:message:editOne",t.MUJIAN_AI_CHAT_MESSAGE_SWIPE="mujian:ai:chat:message:swipe",t.MUJIAN_AI_OPENAI_IMAGES_GENERATE="mujian:ai:openai:images:generate",t.MUJIAN_UTILS_CLIPBOARD_WRITE_TEXT="mujian:utils:clipboard:writeText",t.MUJIAN_GET_CONFIG="mujian:getConfig",t);let p=async function(t,e,i,n={}){let a,s,r,o;await this.call(u.MUJIAN_AI_CHAT_COMPLETE,{content:t},{onData:n.parseContent?(a="",s="",function(t){let i=(s+=t).split("\n");for(let t of(s=i.pop()||"",i))if(t.startsWith("data: "))try{let i=JSON.parse(t.slice(6));if(i.question_id&&(r=i.question_id),i.reply_id&&(o=i.reply_id),i.isFinished)return void e({isFinished:!0,deltaContent:"",fullContent:a,questionId:r,replyId:o});let n=i?.choices?.[0]?.delta?.content;n?.length>0&&(a+=n,e({isFinished:!1,deltaContent:n,fullContent:a,questionId:r,replyId:o}))}catch(t){e({isFinished:!0,error:t,deltaContent:"",fullContent:a,questionId:r,replyId:o});return}}):e,signal:i})},m=async function(t){return await this.call(u.MUJIAN_AI_CHAT_APPLY_REGEX,t)},_=async function(t){return await this.call(u.MUJIAN_AI_CHAT_RENDER_MESSAGE,t)},A=async function(t,e){return await this.call(u.MUJIAN_AI_CHAT_COMPLETE,{isContinue:!0},{onData:t,signal:e})},E=async function(t,e){return await this.call(u.MUJIAN_AI_CHAT_COMPLETE,{isRegenerate:!0},{onData:t,signal:e})},I=async function(){return await this.call(u.MUJIAN_AI_CHAT_MESSAGE_GET_ALL)},g=async function(t){return await this.call(u.MUJIAN_AI_CHAT_MESSAGE_DELETE_ONE,{messageId:t})},f=async function(t,e){return await this.call(u.MUJIAN_AI_CHAT_MESSAGE_EDIT_ONE,{messageId:t,content:e})},T=async function(t,e){return await this.call(u.MUJIAN_AI_CHAT_MESSAGE_SWIPE,{messageId:t,swipeId:e})};async function y(t,e){return await this.call(u.MUJIAN_AI_CHAT_MESSAGE_GET_PAGE,{fromCursor:t,pageSize:e})}let M=async function(){return await this.call(u.MUJIAN_AI_CHAT_PROJECT_GET_INFO)},N=async function(){return await this.call(u.MUJIAN_AI_SETTINGS_PERSONA_GET_ACTIVE)};async function C(){return await this.call(u.MUJIAN_GET_CONFIG)}let w=async function(){},b=async function(){};async function v(t){return await this.call(u.MUJIAN_UTILS_CLIPBOARD_WRITE_TEXT,t)}let S={i(...t){console.log("[MujianSDK] ",...t)},e(...t){console.error("[MujianSDK] ",...t)}};class O{constructor(){}static EVENT=u;static getInstance(){return window.$mujian||(window.$mujian=new O),window.$mujian}parent=null;ready=!1;get isReady(){return this.ready}pendingRequests=new Map;_config;get openapi(){return this._config?.openapi}initPromise=null;async init(){return this.initPromise||(this.initPromise=(async()=>{let t=new h.Model({reply:({id:t,complete:e,data:i,error:n})=>{let a=this.pendingRequests.get(t);if(a){if(n){a.reject(n),this.pendingRequests.delete(t);return}a.onData?.(i),e&&(a.onComplete?.(),a.resolve(i),this.pendingRequests.delete(t))}}});try{let e=await t;this.ready=!0,this.parent=e,S.i("mujian sdk client init"),await this.call(u.MUJIAN_INIT);let i=await this.ai.chat.project.getInfo();if(i.config?.customCss){let t=document.createElement("style");t.setAttribute("type","text/css"),t.setAttribute("id","mujian-custom-css"),t.textContent=i.config.customCss,document.head.appendChild(t)}if(i.config?.customJs){let t=document.createElement("script");t.setAttribute("type","text/javascript"),t.setAttribute("id","mujian-custom-js"),t.textContent=i.config.customJs,document.head.appendChild(t)}let n=await C.call(this);n&&(this._config=n)}catch(t){S.e("init error",t)}})()),this.initPromise}emit(t,e){if(!this.ready)throw Error("Mujian is not initialized");this.parent?.emit(t,e)}nextCallId=0;getCallId(){let t=this.nextCallId;return this.nextCallId+=1,t}async call(t,e,i){if(!this.ready)throw Error("Mujian is not initialized");let n=this.getCallId();return new Promise((a,s)=>{this.pendingRequests.set(n,{resolve:a,reject:s,...i}),this.emit(t,{id:n,data:e}),i?.signal?.addEventListener("abort",()=>{this.emit(u.MUJIAN_AI_CHAT_STOP,{id:n})})})}ai={chat:{project:{getInfo:M.bind(this)},settings:{persona:{getActive:N.bind(this)}},complete:p.bind(this),applyRegex:m.bind(this),renderMessage:_.bind(this),continue:A.bind(this),regenerate:E.bind(this),message:{getAll:I.bind(this),deleteOne:g.bind(this),editOne:f.bind(this),swipe:T.bind(this),getPage:y.bind(this)}},text:{complete:j.bind(this)},openai:{completions:{create:J.create.bind(this)},chat:{completions:{create:P.completions.create.bind(this)}},responses:{create:U.create.bind(this)},images:{generate:G.generate.bind(this)}}};ui={};utils={clipboard:{writeText:v.bind(this)}};hybrid={};player={};game={assets:()=>{console.log("assets")},saves:{saveGame:w.bind(this),loadGame:b.bind(this)},ranking:()=>{console.log("ranking")}}}let j=async function(t){return await this.call(O.EVENT.MUJIAN_AI_TEXT_GENERATE,{content:t})},P={completions:{create:async function(t,e,i,n){return await this.call(O.EVENT.MUJIAN_AI_OPENAI_CHAT_COMPLETIONS_CREATE,{params:t,options:e},{onData:i,signal:n})}}},J={create:async function(t,e,i,n){return await this.call(O.EVENT.MUJIAN_AI_OPENAI_COMPLETIONS_CREATE,{params:t,options:e},{onData:i,signal:n})}},U={create:async function(t,e,i,n){return await this.call(O.EVENT.MUJIAN_AI_OPENAI_RESPONSES_CREATE,{params:t,options:e},{onData:i,signal:n})}},G={generate:async function(t,e,i,n){return await this.call(O.EVENT.MUJIAN_AI_OPENAI_IMAGES_GENERATE,{params:t,options:e},{onData:i,signal:n})}};class R{constructor(){}static EVENT=u;static getInstance(){return window.$mujian||(window.$mujian=new R),window.$mujian}parent=null;ready=!1;get isReady(){return this.ready}pendingRequests=new Map;_config;get openapi(){return this._config?.openapi}initPromise=null;async init(){return this.initPromise||(this.initPromise=(async()=>{let t=new h.Model({reply:({id:t,complete:e,data:i,error:n})=>{let a=this.pendingRequests.get(t);if(a){if(n){a.reject(n),this.pendingRequests.delete(t);return}a.onData?.(i),e&&(a.onComplete?.(),a.resolve(i),this.pendingRequests.delete(t))}}});try{let e=await t;this.ready=!0,this.parent=e,S.i("mujian sdk client init"),await this.call(u.MUJIAN_INIT);let i=await this.ai.chat.project.getInfo();if(i.config?.customCss){let t=document.createElement("style");t.setAttribute("type","text/css"),t.setAttribute("id","mujian-custom-css"),t.textContent=i.config.customCss,document.head.appendChild(t)}if(i.config?.customJs){let t=document.createElement("script");t.setAttribute("type","text/javascript"),t.setAttribute("id","mujian-custom-js"),t.textContent=i.config.customJs,document.head.appendChild(t)}let n=await C.call(this);n&&(this._config=n)}catch(t){S.e("init error",t)}})()),this.initPromise}emit(t,e){if(!this.ready)throw Error("Mujian is not initialized");this.parent?.emit(t,e)}nextCallId=0;getCallId(){let t=this.nextCallId;return this.nextCallId+=1,t}async call(t,e,i){if(!this.ready)throw Error("Mujian is not initialized");let n=this.getCallId();return new Promise((a,s)=>{this.pendingRequests.set(n,{resolve:a,reject:s,...i}),this.emit(t,{id:n,data:e}),i?.signal?.addEventListener("abort",()=>{this.emit(u.MUJIAN_AI_CHAT_STOP,{id:n})})})}ai={chat:{project:{getInfo:M.bind(this)},settings:{persona:{getActive:N.bind(this)}},complete:p.bind(this),applyRegex:m.bind(this),renderMessage:_.bind(this),continue:A.bind(this),regenerate:E.bind(this),message:{getAll:I.bind(this),deleteOne:g.bind(this),editOne:f.bind(this),swipe:T.bind(this),getPage:y.bind(this)}},text:{complete:j.bind(this)},openai:{completions:{create:J.create.bind(this)},chat:{completions:{create:P.completions.create.bind(this)}},responses:{create:U.create.bind(this)},images:{generate:G.generate.bind(this)}}};ui={};utils={clipboard:{writeText:v.bind(this)}};hybrid={};player={};game={assets:()=>{console.log("assets")},saves:{saveGame:w.bind(this),loadGame:b.bind(this)},ranking:()=>{console.log("ranking")}}}return i})());