@storvia/sdk 0.9.7 → 0.9.9

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.umd.js CHANGED
@@ -1,5 +1,5 @@
1
- "use strict";var StorviaSDK=(()=>{var he=Object.defineProperty;var Ye=Object.getOwnPropertyDescriptor;var qe=Object.getOwnPropertyNames;var ze=Object.prototype.hasOwnProperty;var Qe=(o,e)=>{for(var t in e)he(o,t,{get:e[t],enumerable:!0})},Ze=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of qe(e))!ze.call(o,r)&&r!==t&&he(o,r,{get:()=>e[r],enumerable:!(n=Ye(e,r))||n.enumerable});return o};var Xe=o=>Ze(he({},"__esModule",{value:!0}),o);var vt={};Qe(vt,{PROTOCOL_VERSION:()=>G,StorviaBus:()=>x,StorviaError:()=>m,StorviaSDK:()=>ne,createStorviaSDK:()=>je,envelope:()=>y,extractFieldValue:()=>Ke,isProtocolEnvelope:()=>J,isRichFieldValue:()=>Ie,setToastEnabled:()=>Ue,showToast:()=>pe});var m=class extends Error{constructor(e,t,n){super(t),this.name="StorviaError",this.code=e,n?.length&&(this.matchedWords=n)}};var G=1;function J(o){if(!o||typeof o!="object")return!1;let e=o;return typeof e.protocol=="number"&&typeof e.type=="string"&&"payload"in e}function y(o,e,t){return{protocol:1,type:o,payload:e,...t?.id?{id:t.id}:{},...t?.ackId?{ackId:t.ackId}:{}}}var x=class{constructor(e){this.handlers=new Map;this.pendingAcks=new Map;this.listener=null;this.incoming=e.incoming,this.getOutgoing=e.outgoing,this.verifySource=e.verifySource??(()=>!0),this.validate=e.validate,this.debug=!!e.debug,this.getTransferables=e.transfer??(()=>{}),this.customSend=e.customSend,this.attach()}attach(){this.listener=e=>{if((this.incoming instanceof Window||this.incoming===window)&&!this.verifySource(e))return;let t=e.data;if(!J(t))return;if(t.protocol!==1){this.debug&&console.warn("[StorviaBus] protocol mismatch",{expected:1,got:t.protocol,type:t.type});return}if(this.validate&&!this.validate(t)){this.debug&&console.warn("[StorviaBus] validation failed",t);return}if(t.ackId){let r=this.pendingAcks.get(t.ackId);if(r){this.pendingAcks.delete(t.ackId),r(t);return}}let n=this.handlers.get(t.type);if(!n||n.size===0){this.debug&&console.debug("[StorviaBus] no handler for",t.type);return}n.forEach(r=>{try{r(t)}catch(i){console.error(`[StorviaBus] handler '${t.type}' threw:`,i)}})},this.incoming.addEventListener("message",this.listener),this.incoming instanceof MessagePort&&this.incoming.start()}on(e,t){let n=this.handlers.get(e);n||(n=new Set,this.handlers.set(e,n));let r=t;return n.add(r),()=>n.delete(r)}send(e){let t=e.protocol?e:y(e.type,e.payload,{id:e.id,ackId:e.ackId});if(this.customSend){try{this.customSend(t)}catch(i){console.error("[StorviaBus] customSend failed:",i,{type:e.type})}return}let n=this.getOutgoing();if(!n){this.debug&&console.warn("[StorviaBus] outgoing target unavailable, drop:",e.type);return}let r=this.getTransferables(t);try{n instanceof MessagePort?n.postMessage(t,r??[]):n.postMessage(t,"*",r??[])}catch(i){console.error("[StorviaBus] postMessage failed:",i,{type:e.type})}}request(e,t=1e4){return new Promise((n,r)=>{let i=e.id??Je(),s=y(e.type,e.payload,{id:i}),c=setTimeout(()=>{this.pendingAcks.delete(i),r(new Error(`[StorviaBus] request '${e.type}' timed out after ${t}ms`))},t);this.pendingAcks.set(i,d=>{clearTimeout(c),n(d)}),this.send(s)})}destroy(){if(this.listener&&(this.incoming.removeEventListener("message",this.listener),this.listener=null),this.incoming instanceof MessagePort)try{this.incoming.close()}catch{}this.handlers.clear(),this.pendingAcks.clear()}};function Je(){return`bus-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}var et=["zh","zh-Hant","en","ja","ko"];var tt={common:{unknownError:"\u64CD\u4F5C\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",violationWords:"\u5185\u5BB9\u5305\u542B\u4E0D\u7B26\u5408\u793E\u533A\u89C4\u8303\u7684\u7528\u8BCD{words}\uFF0C\u8BF7\u4FEE\u6539\u540E\u91CD\u8BD5",close:"\u5173\u95ED"},errors:{UNAUTHORIZED:"\u767B\u5F55\u5DF2\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55",INSUFFICIENT_CREDITS:"\u82B1\u56ED\u5E01\u4E0D\u8DB3\uFF0C\u8BF7\u5145\u503C\u540E\u518D\u7EE7\u7EED\u6E38\u620F",VIOLATION_WORD_DETECTED:"\u5185\u5BB9\u542B\u6709\u8FDD\u7981\u8BCD\uFF0C\u8BF7\u4FEE\u6539\u540E\u91CD\u8BD5",CONTENT_FILTERED:"\u5185\u5BB9\u88AB\u5B89\u5168\u7B56\u7565\u62E6\u622A\uFF0C\u8BF7\u8C03\u6574\u540E\u91CD\u8BD5",MODEL_REFUSAL:"\u6A21\u578B\u62D2\u7EDD\u54CD\u5E94\uFF0C\u6362\u4E2A\u8BF4\u6CD5\u8BD5\u8BD5",STREAM_INTERRUPTED:"\u56DE\u590D\u5DF2\u4E2D\u65AD\uFF0C\u8BF7\u91CD\u8BD5",RATE_LIMITED:"\u64CD\u4F5C\u8FC7\u4E8E\u9891\u7E41\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5",GENERATING_IN_PROGRESS:"\u5F53\u524D\u5267\u60C5\u6B63\u5728\u751F\u6210\u4E2D\uFF0C\u8BF7\u7A0D\u5019",CONCURRENT_GENERATION_LIMIT:"\u540C\u65F6\u8FDB\u884C\u7684\u5267\u60C5\u592A\u591A\uFF0C\u8BF7\u7A0D\u5019\u518D\u8BD5",INVENTORY_LIMIT:"\u7269\u54C1\u680F\u5DF2\u6EE1\uFF0C\u8BF7\u5148\u6E05\u7406\u518D\u6DFB\u52A0",CUSTOM_FIELDS_LIMIT:"\u6269\u5C55\u5C5E\u6027\u5B57\u6BB5\u5DF2\u6EE1\uFF0C\u8BF7\u5148\u5220\u9664\u518D\u6DFB\u52A0",MODEL_NOT_FOUND:"\u6240\u9009\u6A21\u578B\u4E0D\u53EF\u7528\uFF0C\u8BF7\u5207\u6362\u5176\u4ED6\u6A21\u578B",GAME_NOT_FOUND:"\u672A\u627E\u5230\u5BF9\u5E94\u6E38\u620F",INVALID_REQUEST:"\u8BF7\u6C42\u65E0\u6548\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",INVALID_EXTRACT_RULE:"\u56DE\u590D\u63D0\u53D6\u914D\u7F6E\u65E0\u6548\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",INTERNAL_ERROR:"\u670D\u52A1\u51FA\u4E86\u70B9\u5C0F\u95EE\u9898\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",NOT_INITIALIZED:"SDK \u5C1A\u672A\u521D\u59CB\u5316",NOT_SUPPORTED_IN_PREVIEW:"\u5F53\u524D\u63A5\u53E3\u5728\u9884\u89C8\u6A21\u5F0F\u4E0B\u4E0D\u53EF\u7528",NETWORK_ERROR:"\u7F51\u7EDC\u5F02\u5E38\uFF0C\u8BF7\u68C0\u67E5\u8FDE\u63A5",REQUEST_TIMEOUT:"\u8BF7\u6C42\u8D85\u65F6\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",MODEL_LOADING_TIMEOUT:"\u6A21\u578B\u54CD\u5E94\u8D85\u65F6\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",STREAM_INACTIVITY:"\u8FDE\u63A5\u5DF2\u4E2D\u65AD\uFF0C\u8BF7\u91CD\u8BD5",DAISY_CARD_REQUIRED:"\u56DE\u6EAF\u6D88\u606F\u9700\u8981\u6709\u6548\u7684\u96CF\u83CA\u5361\u8BA2\u9605",MESSAGE_NOT_FOUND:"\u6D88\u606F\u4E0D\u5B58\u5728\u6216\u65E0\u6743\u64CD\u4F5C",MESSAGE_TOO_OLD:"\u4EC5\u53EF\u56DE\u6EAF 30 \u5929\u5185\u7684\u6D88\u606F",NO_MESSAGES_TO_DELETE:"\u8BE5\u6D88\u606F\u4E4B\u540E\u6CA1\u6709\u53EF\u56DE\u6EAF\u7684\u6D88\u606F",GENERATION_TIMEOUT:"\u751F\u6210\u8D85\u65F6\uFF0C\u8BF7\u91CD\u8BD5",GENERATION_LOST:"\u751F\u6210\u8FDE\u63A5\u4E2D\u65AD\uFF0C\u8BF7\u91CD\u8BD5\uFF1B\u82E5\u5185\u5BB9\u5DF2\u751F\u6210\uFF0C\u5237\u65B0\u540E\u53EF\u89C1",REPETITION_LOOP:"\u56DE\u590D\u51FA\u73B0\u91CD\u590D\uFF0C\u8BF7\u91CD\u8BD5\u6216\u6362\u4E2A\u8BF4\u6CD5",SAVE_FAILED:"\u6D88\u606F\u4FDD\u5B58\u5931\u8D25\uFF0C\u672C\u6B21\u4E0D\u6263\u8D39\uFF0C\u8BF7\u91CD\u8BD5",FINALIZE_FAILED:"\u56DE\u590D\u5904\u7406\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",CONVERSATION_NOT_FOUND:"\u672A\u627E\u5230\u5BF9\u5E94\u4F1A\u8BDD",EMPTY_MESSAGE:"\u6D88\u606F\u5185\u5BB9\u4E0D\u80FD\u4E3A\u7A7A",CONTINUE_MODEL_NOT_AVAILABLE:"\u7EED\u5199\u6A21\u578B\u5F53\u524D\u4E0D\u53EF\u7528",CONTINUE_PROMPT_MISSING:"\u7EED\u5199\u914D\u7F6E\u7F3A\u5931",GENERATION_ABORTED:"\u751F\u6210\u5DF2\u505C\u6B62"}},nt={common:{unknownError:"\u64CD\u4F5C\u5931\u6557\uFF0C\u8ACB\u7A0D\u5F8C\u91CD\u8A66",violationWords:"\u5167\u5BB9\u5305\u542B\u4E0D\u7B26\u5408\u793E\u7FA4\u898F\u7BC4\u7684\u7528\u8A5E{words}\uFF0C\u8ACB\u4FEE\u6539\u5F8C\u91CD\u8A66",close:"\u95DC\u9589"},errors:{UNAUTHORIZED:"\u767B\u5165\u5DF2\u5931\u6548\uFF0C\u8ACB\u91CD\u65B0\u767B\u5165",INSUFFICIENT_CREDITS:"\u82B1\u5712\u5E63\u4E0D\u8DB3\uFF0C\u8ACB\u5132\u503C\u5F8C\u518D\u7E7C\u7E8C\u904A\u6232",VIOLATION_WORD_DETECTED:"\u5167\u5BB9\u542B\u6709\u9055\u7981\u8A5E\uFF0C\u8ACB\u4FEE\u6539\u5F8C\u91CD\u8A66",CONTENT_FILTERED:"\u5167\u5BB9\u88AB\u5B89\u5168\u7B56\u7565\u6514\u622A\uFF0C\u8ACB\u8ABF\u6574\u5F8C\u91CD\u8A66",MODEL_REFUSAL:"\u6A21\u578B\u62D2\u7D55\u56DE\u61C9\uFF0C\u63DB\u500B\u8AAA\u6CD5\u8A66\u8A66",STREAM_INTERRUPTED:"\u56DE\u8986\u5DF2\u4E2D\u65B7\uFF0C\u8ACB\u91CD\u8A66",RATE_LIMITED:"\u64CD\u4F5C\u904E\u65BC\u983B\u7E41\uFF0C\u8ACB\u7A0D\u5F8C\u518D\u8A66",GENERATING_IN_PROGRESS:"\u76EE\u524D\u5287\u60C5\u6B63\u5728\u751F\u6210\u4E2D\uFF0C\u8ACB\u7A0D\u5019",CONCURRENT_GENERATION_LIMIT:"\u540C\u6642\u9032\u884C\u7684\u5287\u60C5\u592A\u591A\uFF0C\u8ACB\u7A0D\u5019\u518D\u8A66",INVENTORY_LIMIT:"\u9053\u5177\u6B04\u5DF2\u6EFF\uFF0C\u8ACB\u5148\u6E05\u7406\u518D\u65B0\u589E",CUSTOM_FIELDS_LIMIT:"\u64F4\u5145\u5C6C\u6027\u6B04\u4F4D\u5DF2\u6EFF\uFF0C\u8ACB\u5148\u522A\u9664\u518D\u65B0\u589E",MODEL_NOT_FOUND:"\u6240\u9078\u6A21\u578B\u4E0D\u53EF\u7528\uFF0C\u8ACB\u5207\u63DB\u5176\u4ED6\u6A21\u578B",GAME_NOT_FOUND:"\u627E\u4E0D\u5230\u5C0D\u61C9\u904A\u6232",INVALID_REQUEST:"\u8ACB\u6C42\u7121\u6548\uFF0C\u8ACB\u7A0D\u5F8C\u91CD\u8A66",INVALID_EXTRACT_RULE:"\u56DE\u8986\u64F7\u53D6\u8A2D\u5B9A\u7121\u6548\uFF0C\u8ACB\u7A0D\u5F8C\u91CD\u8A66",INTERNAL_ERROR:"\u670D\u52D9\u51FA\u4E86\u9EDE\u5C0F\u554F\u984C\uFF0C\u8ACB\u7A0D\u5F8C\u91CD\u8A66",NOT_INITIALIZED:"SDK \u5C1A\u672A\u521D\u59CB\u5316",NOT_SUPPORTED_IN_PREVIEW:"\u76EE\u524D\u4ECB\u9762\u5728\u9810\u89BD\u6A21\u5F0F\u4E0B\u4E0D\u53EF\u7528",NETWORK_ERROR:"\u7DB2\u8DEF\u7570\u5E38\uFF0C\u8ACB\u6AA2\u67E5\u9023\u7DDA",REQUEST_TIMEOUT:"\u8ACB\u6C42\u903E\u6642\uFF0C\u8ACB\u7A0D\u5F8C\u91CD\u8A66",MODEL_LOADING_TIMEOUT:"\u6A21\u578B\u56DE\u61C9\u903E\u6642\uFF0C\u8ACB\u7A0D\u5F8C\u91CD\u8A66",STREAM_INACTIVITY:"\u9023\u7DDA\u5DF2\u4E2D\u65B7\uFF0C\u8ACB\u91CD\u8A66",DAISY_CARD_REQUIRED:"\u56DE\u6EAF\u8A0A\u606F\u9700\u8981\u6709\u6548\u7684\u96DB\u83CA\u5361\u8A02\u95B1",MESSAGE_NOT_FOUND:"\u8A0A\u606F\u4E0D\u5B58\u5728\u6216\u7121\u6B0A\u64CD\u4F5C",MESSAGE_TOO_OLD:"\u50C5\u53EF\u56DE\u6EAF 30 \u5929\u5167\u7684\u8A0A\u606F",NO_MESSAGES_TO_DELETE:"\u8A72\u8A0A\u606F\u4E4B\u5F8C\u6C92\u6709\u53EF\u56DE\u6EAF\u7684\u8A0A\u606F",GENERATION_TIMEOUT:"\u751F\u6210\u903E\u6642\uFF0C\u8ACB\u91CD\u8A66",GENERATION_LOST:"\u751F\u6210\u9023\u7DDA\u4E2D\u65B7\uFF0C\u8ACB\u91CD\u8A66\uFF1B\u82E5\u5167\u5BB9\u5DF2\u751F\u6210\uFF0C\u91CD\u65B0\u6574\u7406\u5F8C\u53EF\u898B",REPETITION_LOOP:"\u56DE\u8986\u51FA\u73FE\u91CD\u8907\uFF0C\u8ACB\u91CD\u8A66\u6216\u63DB\u500B\u8AAA\u6CD5",SAVE_FAILED:"\u8A0A\u606F\u5132\u5B58\u5931\u6557\uFF0C\u672C\u6B21\u4E0D\u6263\u8CBB\uFF0C\u8ACB\u91CD\u8A66",FINALIZE_FAILED:"\u56DE\u8986\u8655\u7406\u5931\u6557\uFF0C\u8ACB\u91CD\u8A66",CONVERSATION_NOT_FOUND:"\u627E\u4E0D\u5230\u5C0D\u61C9\u5C0D\u8A71",EMPTY_MESSAGE:"\u8A0A\u606F\u5167\u5BB9\u4E0D\u80FD\u70BA\u7A7A",CONTINUE_MODEL_NOT_AVAILABLE:"\u7E8C\u5BEB\u6A21\u578B\u76EE\u524D\u4E0D\u53EF\u7528",CONTINUE_PROMPT_MISSING:"\u7E8C\u5BEB\u8A2D\u5B9A\u7F3A\u5931",GENERATION_ABORTED:"\u751F\u6210\u5DF2\u505C\u6B62"}},rt={common:{unknownError:"Something went wrong. Please try again.",violationWords:"Your content contains words that violate our community guidelines{words}. Please revise and try again.",close:"Close"},errors:{UNAUTHORIZED:"Your session has expired. Please sign in again.",INSUFFICIENT_CREDITS:"Not enough Garden Coins. Please top up to continue.",VIOLATION_WORD_DETECTED:"Your content contains prohibited words. Please revise and try again.",CONTENT_FILTERED:"Content was blocked by the safety filter. Please adjust and try again.",MODEL_REFUSAL:"The model declined to respond. Try rephrasing.",STREAM_INTERRUPTED:"The reply was interrupted. Please try again.",RATE_LIMITED:"Too many requests. Please wait a moment.",GENERATING_IN_PROGRESS:"A reply is already being generated. Please wait.",CONCURRENT_GENERATION_LIMIT:"Too many replies generating at once. Please wait.",INVENTORY_LIMIT:"Inventory is full. Remove some items first.",CUSTOM_FIELDS_LIMIT:"Custom field limit reached. Delete some fields first.",MODEL_NOT_FOUND:"That model is unavailable. Please pick another one.",GAME_NOT_FOUND:"Game not found.",INVALID_REQUEST:"Invalid request. Please try again.",INVALID_EXTRACT_RULE:"Invalid reply-extraction rule. Please try again.",INTERNAL_ERROR:"Something went wrong on our end. Please try again.",NOT_INITIALIZED:"The SDK is not initialized yet.",NOT_SUPPORTED_IN_PREVIEW:"This action is unavailable in preview mode.",NETWORK_ERROR:"Network error. Please check your connection.",REQUEST_TIMEOUT:"Request timed out. Please try again.",MODEL_LOADING_TIMEOUT:"The model took too long to respond. Please try again.",STREAM_INACTIVITY:"The connection dropped. Please try again.",DAISY_CARD_REQUIRED:"Rolling back messages requires an active Daisy Card subscription.",MESSAGE_NOT_FOUND:"Message not found, or you do not have access to it.",MESSAGE_TOO_OLD:"You can only roll back messages from the last 30 days.",NO_MESSAGES_TO_DELETE:"There are no messages after this one to roll back.",GENERATION_TIMEOUT:"Generation timed out. Please try again.",GENERATION_LOST:"Lost connection while generating. Try again \u2014 if it finished, refresh to see it.",REPETITION_LOOP:"The reply started repeating itself. Try again or rephrase.",SAVE_FAILED:"Failed to save the message. You were not charged. Please try again.",FINALIZE_FAILED:"Failed to finish processing the reply. Please try again.",CONVERSATION_NOT_FOUND:"Conversation not found.",EMPTY_MESSAGE:"Message cannot be empty.",CONTINUE_MODEL_NOT_AVAILABLE:"The continuation model is currently unavailable.",CONTINUE_PROMPT_MISSING:"Continuation settings are missing.",GENERATION_ABORTED:"Generation stopped."}},ot={common:{unknownError:"\u64CD\u4F5C\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",violationWords:"\u30B3\u30DF\u30E5\u30CB\u30C6\u30A3\u30AC\u30A4\u30C9\u30E9\u30A4\u30F3\u306B\u53CD\u3059\u308B\u8A9E\u53E5{words}\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059\u3002\u4FEE\u6B63\u3057\u3066\u304B\u3089\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",close:"\u9589\u3058\u308B"},errors:{UNAUTHORIZED:"\u30ED\u30B0\u30A4\u30F3\u306E\u6709\u52B9\u671F\u9650\u304C\u5207\u308C\u307E\u3057\u305F\u3002\u518D\u5EA6\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u304F\u3060\u3055\u3044\u3002",INSUFFICIENT_CREDITS:"\u30AC\u30FC\u30C7\u30F3\u30B3\u30A4\u30F3\u304C\u4E0D\u8DB3\u3057\u3066\u3044\u307E\u3059\u3002\u30C1\u30E3\u30FC\u30B8\u3057\u3066\u304B\u3089\u7D9A\u3051\u3066\u304F\u3060\u3055\u3044\u3002",VIOLATION_WORD_DETECTED:"\u7981\u6B62\u8A9E\u53E5\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059\u3002\u4FEE\u6B63\u3057\u3066\u304B\u3089\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",CONTENT_FILTERED:"\u5B89\u5168\u30DD\u30EA\u30B7\u30FC\u306B\u3088\u308A\u30D6\u30ED\u30C3\u30AF\u3055\u308C\u307E\u3057\u305F\u3002\u5185\u5BB9\u3092\u8ABF\u6574\u3057\u3066\u304F\u3060\u3055\u3044\u3002",MODEL_REFUSAL:"\u30E2\u30C7\u30EB\u304C\u5FDC\u7B54\u3092\u62D2\u5426\u3057\u307E\u3057\u305F\u3002\u8868\u73FE\u3092\u5909\u3048\u3066\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",STREAM_INTERRUPTED:"\u8FD4\u4FE1\u304C\u4E2D\u65AD\u3055\u308C\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",RATE_LIMITED:"\u64CD\u4F5C\u304C\u983B\u7E41\u3059\u304E\u307E\u3059\u3002\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",GENERATING_IN_PROGRESS:"\u73FE\u5728\u30B9\u30C8\u30FC\u30EA\u30FC\u3092\u751F\u6210\u4E2D\u3067\u3059\u3002\u304A\u5F85\u3061\u304F\u3060\u3055\u3044\u3002",CONCURRENT_GENERATION_LIMIT:"\u540C\u6642\u306B\u751F\u6210\u4E2D\u306E\u30B9\u30C8\u30FC\u30EA\u30FC\u304C\u591A\u3059\u304E\u307E\u3059\u3002\u304A\u5F85\u3061\u304F\u3060\u3055\u3044\u3002",INVENTORY_LIMIT:"\u6301\u3061\u7269\u304C\u3044\u3063\u3071\u3044\u3067\u3059\u3002\u6574\u7406\u3057\u3066\u304B\u3089\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044\u3002",CUSTOM_FIELDS_LIMIT:"\u62E1\u5F35\u5C5E\u6027\u306E\u9805\u76EE\u304C\u4E0A\u9650\u306B\u9054\u3057\u307E\u3057\u305F\u3002\u524A\u9664\u3057\u3066\u304B\u3089\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044\u3002",MODEL_NOT_FOUND:"\u9078\u629E\u3057\u305F\u30E2\u30C7\u30EB\u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002\u5225\u306E\u30E2\u30C7\u30EB\u3092\u304A\u9078\u3073\u304F\u3060\u3055\u3044\u3002",GAME_NOT_FOUND:"\u5BFE\u8C61\u306E\u30B2\u30FC\u30E0\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002",INVALID_REQUEST:"\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u7121\u52B9\u3067\u3059\u3002\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",INVALID_EXTRACT_RULE:"\u8FD4\u4FE1\u62BD\u51FA\u306E\u8A2D\u5B9A\u304C\u7121\u52B9\u3067\u3059\u3002\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",INTERNAL_ERROR:"\u30B5\u30FC\u30D0\u30FC\u5074\u3067\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",NOT_INITIALIZED:"SDK \u304C\u307E\u3060\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002",NOT_SUPPORTED_IN_PREVIEW:"\u3053\u306E\u6A5F\u80FD\u306F\u30D7\u30EC\u30D3\u30E5\u30FC\u30E2\u30FC\u30C9\u3067\u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002",NETWORK_ERROR:"\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u30A8\u30E9\u30FC\u3067\u3059\u3002\u63A5\u7D9A\u3092\u3054\u78BA\u8A8D\u304F\u3060\u3055\u3044\u3002",REQUEST_TIMEOUT:"\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",MODEL_LOADING_TIMEOUT:"\u30E2\u30C7\u30EB\u306E\u5FDC\u7B54\u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",STREAM_INACTIVITY:"\u63A5\u7D9A\u304C\u5207\u65AD\u3055\u308C\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",DAISY_CARD_REQUIRED:"\u30E1\u30C3\u30BB\u30FC\u30B8\u306E\u30ED\u30FC\u30EB\u30D0\u30C3\u30AF\u306B\u306F\u30C7\u30A4\u30B8\u30FC\u30AB\u30FC\u30C9\u306E\u6709\u52B9\u306A\u30B5\u30D6\u30B9\u30AF\u30EA\u30D7\u30B7\u30E7\u30F3\u304C\u5FC5\u8981\u3067\u3059\u3002",MESSAGE_NOT_FOUND:"\u30E1\u30C3\u30BB\u30FC\u30B8\u304C\u5B58\u5728\u3057\u306A\u3044\u304B\u3001\u64CD\u4F5C\u3059\u308B\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002",MESSAGE_TOO_OLD:"\u30ED\u30FC\u30EB\u30D0\u30C3\u30AF\u3067\u304D\u308B\u306E\u306F 30 \u65E5\u4EE5\u5185\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u306E\u307F\u3067\u3059\u3002",NO_MESSAGES_TO_DELETE:"\u3053\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u3088\u308A\u5F8C\u306B\u30ED\u30FC\u30EB\u30D0\u30C3\u30AF\u3067\u304D\u308B\u30E1\u30C3\u30BB\u30FC\u30B8\u306F\u3042\u308A\u307E\u305B\u3093\u3002",GENERATION_TIMEOUT:"\u751F\u6210\u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",GENERATION_LOST:"\u751F\u6210\u4E2D\u306B\u63A5\u7D9A\u304C\u5207\u308C\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002\u751F\u6210\u6E08\u307F\u306E\u5834\u5408\u306F\u518D\u8AAD\u307F\u8FBC\u307F\u3067\u8868\u793A\u3055\u308C\u307E\u3059\u3002",REPETITION_LOOP:"\u8FD4\u4FE1\u304C\u7E70\u308A\u8FD4\u3057\u306B\u306A\u308A\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u3044\u305F\u3060\u304F\u304B\u3001\u8868\u73FE\u3092\u5909\u3048\u3066\u304F\u3060\u3055\u3044\u3002",SAVE_FAILED:"\u30E1\u30C3\u30BB\u30FC\u30B8\u306E\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u4ECA\u56DE\u306F\u8AB2\u91D1\u3055\u308C\u307E\u305B\u3093\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",FINALIZE_FAILED:"\u8FD4\u4FE1\u306E\u51E6\u7406\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",CONVERSATION_NOT_FOUND:"\u5BFE\u8C61\u306E\u4F1A\u8A71\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002",EMPTY_MESSAGE:"\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",CONTINUE_MODEL_NOT_AVAILABLE:"\u7D9A\u304D\u3092\u66F8\u304F\u30E2\u30C7\u30EB\u304C\u73FE\u5728\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002",CONTINUE_PROMPT_MISSING:"\u7D9A\u304D\u3092\u66F8\u304F\u8A2D\u5B9A\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002",GENERATION_ABORTED:"\u751F\u6210\u3092\u505C\u6B62\u3057\u307E\u3057\u305F\u3002"}},it={common:{unknownError:"\uC791\uC5C5\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",violationWords:"\uCEE4\uBBA4\uB2C8\uD2F0 \uADDC\uC815\uC5D0 \uC5B4\uAE0B\uB098\uB294 \uB2E8\uC5B4{words}\uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. \uC218\uC815 \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",close:"\uB2EB\uAE30"},errors:{UNAUTHORIZED:"\uB85C\uADF8\uC778\uC774 \uB9CC\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uB85C\uADF8\uC778\uD574 \uC8FC\uC138\uC694.",INSUFFICIENT_CREDITS:"\uAC00\uB4E0 \uCF54\uC778\uC774 \uBD80\uC871\uD569\uB2C8\uB2E4. \uCDA9\uC804 \uD6C4 \uACC4\uC18D\uD574 \uC8FC\uC138\uC694.",VIOLATION_WORD_DETECTED:"\uAE08\uC9C0\uB41C \uB2E8\uC5B4\uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. \uC218\uC815 \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",CONTENT_FILTERED:"\uC548\uC804 \uC815\uCC45\uC5D0 \uC758\uD574 \uCC28\uB2E8\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB0B4\uC6A9\uC744 \uC218\uC815\uD574 \uC8FC\uC138\uC694.",MODEL_REFUSAL:"\uBAA8\uB378\uC774 \uC751\uB2F5\uC744 \uAC70\uBD80\uD588\uC2B5\uB2C8\uB2E4. \uB2E4\uB974\uAC8C \uD45C\uD604\uD574 \uBCF4\uC138\uC694.",STREAM_INTERRUPTED:"\uC751\uB2F5\uC774 \uC911\uB2E8\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",RATE_LIMITED:"\uC694\uCCAD\uC774 \uB108\uBB34 \uC7A6\uC2B5\uB2C8\uB2E4. \uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",GENERATING_IN_PROGRESS:"\uD604\uC7AC \uC2A4\uD1A0\uB9AC\uB97C \uC0DD\uC131 \uC911\uC785\uB2C8\uB2E4. \uC7A0\uC2DC\uB9CC \uAE30\uB2E4\uB824 \uC8FC\uC138\uC694.",CONCURRENT_GENERATION_LIMIT:"\uB3D9\uC2DC\uC5D0 \uC0DD\uC131 \uC911\uC778 \uC2A4\uD1A0\uB9AC\uAC00 \uB108\uBB34 \uB9CE\uC2B5\uB2C8\uB2E4. \uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",INVENTORY_LIMIT:"\uC18C\uC9C0\uD488\uC774 \uAC00\uB4DD \uCC3C\uC2B5\uB2C8\uB2E4. \uC815\uB9AC \uD6C4 \uCD94\uAC00\uD574 \uC8FC\uC138\uC694.",CUSTOM_FIELDS_LIMIT:"\uD655\uC7A5 \uC18D\uC131 \uD56D\uBAA9\uC774 \uAC00\uB4DD \uCC3C\uC2B5\uB2C8\uB2E4. \uC0AD\uC81C \uD6C4 \uCD94\uAC00\uD574 \uC8FC\uC138\uC694.",MODEL_NOT_FOUND:"\uC120\uD0DD\uD55C \uBAA8\uB378\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uB2E4\uB978 \uBAA8\uB378\uC744 \uC120\uD0DD\uD574 \uC8FC\uC138\uC694.",GAME_NOT_FOUND:"\uD574\uB2F9 \uAC8C\uC784\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.",INVALID_REQUEST:"\uC798\uBABB\uB41C \uC694\uCCAD\uC785\uB2C8\uB2E4. \uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",INVALID_EXTRACT_RULE:"\uC751\uB2F5 \uCD94\uCD9C \uC124\uC815\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",INTERNAL_ERROR:"\uC11C\uBC84\uC5D0 \uBB38\uC81C\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. \uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",NOT_INITIALIZED:"SDK\uAC00 \uC544\uC9C1 \uCD08\uAE30\uD654\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.",NOT_SUPPORTED_IN_PREVIEW:"\uC774 \uAE30\uB2A5\uC740 \uBBF8\uB9AC\uBCF4\uAE30 \uBAA8\uB4DC\uC5D0\uC11C \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.",NETWORK_ERROR:"\uB124\uD2B8\uC6CC\uD06C \uC624\uB958\uC785\uB2C8\uB2E4. \uC5F0\uACB0\uC744 \uD655\uC778\uD574 \uC8FC\uC138\uC694.",REQUEST_TIMEOUT:"\uC694\uCCAD \uC2DC\uAC04\uC774 \uCD08\uACFC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",MODEL_LOADING_TIMEOUT:"\uBAA8\uB378 \uC751\uB2F5 \uC2DC\uAC04\uC774 \uCD08\uACFC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",STREAM_INACTIVITY:"\uC5F0\uACB0\uC774 \uB04A\uC5B4\uC84C\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",DAISY_CARD_REQUIRED:"\uBA54\uC2DC\uC9C0 \uB418\uB3CC\uB9AC\uAE30\uB294 \uB370\uC774\uC9C0 \uCE74\uB4DC \uAD6C\uB3C5\uC774 \uD544\uC694\uD569\uB2C8\uB2E4.",MESSAGE_NOT_FOUND:"\uBA54\uC2DC\uC9C0\uAC00 \uC5C6\uAC70\uB098 \uAD8C\uD55C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",MESSAGE_TOO_OLD:"30\uC77C \uC774\uB0B4\uC758 \uBA54\uC2DC\uC9C0\uB9CC \uB418\uB3CC\uB9B4 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",NO_MESSAGES_TO_DELETE:"\uC774 \uBA54\uC2DC\uC9C0 \uC774\uD6C4\uC5D0 \uB418\uB3CC\uB9B4 \uBA54\uC2DC\uC9C0\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",GENERATION_TIMEOUT:"\uC0DD\uC131 \uC2DC\uAC04\uC774 \uCD08\uACFC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",GENERATION_LOST:"\uC0DD\uC131 \uC911 \uC5F0\uACB0\uC774 \uB04A\uACBC\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694. \uC774\uBBF8 \uC0DD\uC131\uB418\uC5C8\uB2E4\uBA74 \uC0C8\uB85C\uACE0\uCE68\uD558\uBA74 \uBCF4\uC785\uB2C8\uB2E4.",REPETITION_LOOP:"\uC751\uB2F5\uC774 \uBC18\uBCF5\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uAC70\uB098 \uB2E4\uB974\uAC8C \uD45C\uD604\uD574 \uC8FC\uC138\uC694.",SAVE_FAILED:"\uBA54\uC2DC\uC9C0 \uC800\uC7A5\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uC774\uBC88\uC5D0\uB294 \uCC28\uAC10\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",FINALIZE_FAILED:"\uC751\uB2F5 \uCC98\uB9AC\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",CONVERSATION_NOT_FOUND:"\uD574\uB2F9 \uB300\uD654\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.",EMPTY_MESSAGE:"\uBA54\uC2DC\uC9C0\uB97C \uC785\uB825\uD574 \uC8FC\uC138\uC694.",CONTINUE_MODEL_NOT_AVAILABLE:"\uC774\uC5B4\uC4F0\uAE30 \uBAA8\uB378\uC744 \uD604\uC7AC \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.",CONTINUE_PROMPT_MISSING:"\uC774\uC5B4\uC4F0\uAE30 \uC124\uC815\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",GENERATION_ABORTED:"\uC0DD\uC131\uC744 \uC911\uC9C0\uD588\uC2B5\uB2C8\uB2E4."}},_e={zh:tt,"zh-Hant":nt,en:rt,ja:ot,ko:it},se="zh";function Oe(o){if(!o)return null;let e=o.trim();if(!e)return null;if(et.includes(e))return e;let t=e.toLowerCase();return t.startsWith("zh")?/hant|tw|hk|mo/.test(t)?"zh-Hant":"zh":t.startsWith("ja")?"ja":t.startsWith("ko")?"ko":t.startsWith("en")?"en":null}function Pe(o){let e=Oe(o);e&&(se=e)}function Ae(){if(typeof navigator>"u")return;let o=Oe(navigator.language);o&&(se=o)}function Ne(o){return _e[se].errors[o]}function ae(o){return _e[se].common[o]}var ue=null;function Me(o){ue=o}var be="storvia-sdk-toast-style",de="storvia-sdk-toast-stack",st=`
2
- #${de} {
1
+ "use strict";var StorviaSDK=(()=>{var he=Object.defineProperty;var Qe=Object.getOwnPropertyDescriptor;var Ze=Object.getOwnPropertyNames;var Xe=Object.prototype.hasOwnProperty;var Je=(o,e)=>{for(var t in e)he(o,t,{get:e[t],enumerable:!0})},et=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of Ze(e))!Xe.call(o,r)&&r!==t&&he(o,r,{get:()=>e[r],enumerable:!(n=Qe(e,r))||n.enumerable});return o};var tt=o=>et(he({},"__esModule",{value:!0}),o);var yt={};Je(yt,{HOST_NOTIFY_MAX_LENGTH:()=>Ie,HOST_NOTIFY_MIN_INTERVAL_MS:()=>Ee,HOST_PANEL_SCOPES:()=>ue,HOST_REFRESH_MIN_INTERVAL_MS:()=>Te,HostModule:()=>k,PROTOCOL_VERSION:()=>G,StorviaBus:()=>U,StorviaError:()=>m,StorviaSDK:()=>re,createStorviaSDK:()=>ze,envelope:()=>w,extractFieldValue:()=>Ye,isProtocolEnvelope:()=>J,isRichFieldValue:()=>ye,setToastEnabled:()=>Ge,showToast:()=>ee});var m=class extends Error{constructor(e,t,n){super(t),this.name="StorviaError",this.code=e,n?.length&&(this.matchedWords=n)}};var G=1,ue=["player","characters","inventory","relations","world"];function J(o){if(!o||typeof o!="object")return!1;let e=o;return typeof e.protocol=="number"&&typeof e.type=="string"&&"payload"in e}function w(o,e,t){return{protocol:1,type:o,payload:e,...t?.id?{id:t.id}:{},...t?.ackId?{ackId:t.ackId}:{}}}var U=class{constructor(e){this.handlers=new Map;this.pendingAcks=new Map;this.listener=null;this.incoming=e.incoming,this.getOutgoing=e.outgoing,this.verifySource=e.verifySource??(()=>!0),this.validate=e.validate,this.debug=!!e.debug,this.getTransferables=e.transfer??(()=>{}),this.customSend=e.customSend,this.attach()}attach(){this.listener=e=>{if((this.incoming instanceof Window||this.incoming===window)&&!this.verifySource(e))return;let t=e.data;if(!J(t))return;if(t.protocol!==1){this.debug&&console.warn("[StorviaBus] protocol mismatch",{expected:1,got:t.protocol,type:t.type});return}if(this.validate&&!this.validate(t)){this.debug&&console.warn("[StorviaBus] validation failed",t);return}if(t.ackId){let r=this.pendingAcks.get(t.ackId);if(r){this.pendingAcks.delete(t.ackId),r(t);return}}let n=this.handlers.get(t.type);if(!n||n.size===0){this.debug&&console.debug("[StorviaBus] no handler for",t.type);return}n.forEach(r=>{try{r(t)}catch(i){console.error(`[StorviaBus] handler '${t.type}' threw:`,i)}})},this.incoming.addEventListener("message",this.listener),this.incoming instanceof MessagePort&&this.incoming.start()}on(e,t){let n=this.handlers.get(e);n||(n=new Set,this.handlers.set(e,n));let r=t;return n.add(r),()=>n.delete(r)}send(e){let t=e.protocol?e:w(e.type,e.payload,{id:e.id,ackId:e.ackId});if(this.customSend){try{this.customSend(t)}catch(i){console.error("[StorviaBus] customSend failed:",i,{type:e.type})}return}let n=this.getOutgoing();if(!n){this.debug&&console.warn("[StorviaBus] outgoing target unavailable, drop:",e.type);return}let r=this.getTransferables(t);try{n instanceof MessagePort?n.postMessage(t,r??[]):n.postMessage(t,"*",r??[])}catch(i){console.error("[StorviaBus] postMessage failed:",i,{type:e.type})}}request(e,t=1e4){return new Promise((n,r)=>{let i=e.id??nt(),s=w(e.type,e.payload,{id:i}),c=setTimeout(()=>{this.pendingAcks.delete(i),r(new Error(`[StorviaBus] request '${e.type}' timed out after ${t}ms`))},t);this.pendingAcks.set(i,d=>{clearTimeout(c),n(d)}),this.send(s)})}destroy(){if(this.listener&&(this.incoming.removeEventListener("message",this.listener),this.listener=null),this.incoming instanceof MessagePort)try{this.incoming.close()}catch{}this.handlers.clear(),this.pendingAcks.clear()}};function nt(){return`bus-${Date.now()}-${Math.random().toString(36).slice(2,8)}`}var rt=["zh","zh-Hant","en","ja","ko"];var ot={common:{unknownError:"\u64CD\u4F5C\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",violationWords:"\u5185\u5BB9\u5305\u542B\u4E0D\u7B26\u5408\u793E\u533A\u89C4\u8303\u7684\u7528\u8BCD{words}\uFF0C\u8BF7\u4FEE\u6539\u540E\u91CD\u8BD5",close:"\u5173\u95ED"},errors:{UNAUTHORIZED:"\u767B\u5F55\u5DF2\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55",INSUFFICIENT_CREDITS:"\u82B1\u56ED\u5E01\u4E0D\u8DB3\uFF0C\u8BF7\u5145\u503C\u540E\u518D\u7EE7\u7EED\u6E38\u620F",VIOLATION_WORD_DETECTED:"\u5185\u5BB9\u542B\u6709\u8FDD\u7981\u8BCD\uFF0C\u8BF7\u4FEE\u6539\u540E\u91CD\u8BD5",CONTENT_FILTERED:"\u5185\u5BB9\u88AB\u5B89\u5168\u7B56\u7565\u62E6\u622A\uFF0C\u8BF7\u8C03\u6574\u540E\u91CD\u8BD5",MODEL_REFUSAL:"\u6A21\u578B\u62D2\u7EDD\u54CD\u5E94\uFF0C\u6362\u4E2A\u8BF4\u6CD5\u8BD5\u8BD5",STREAM_INTERRUPTED:"\u56DE\u590D\u5DF2\u4E2D\u65AD\uFF0C\u8BF7\u91CD\u8BD5",RATE_LIMITED:"\u64CD\u4F5C\u8FC7\u4E8E\u9891\u7E41\uFF0C\u8BF7\u7A0D\u540E\u518D\u8BD5",GENERATING_IN_PROGRESS:"\u5F53\u524D\u5267\u60C5\u6B63\u5728\u751F\u6210\u4E2D\uFF0C\u8BF7\u7A0D\u5019",CONCURRENT_GENERATION_LIMIT:"\u540C\u65F6\u8FDB\u884C\u7684\u5267\u60C5\u592A\u591A\uFF0C\u8BF7\u7A0D\u5019\u518D\u8BD5",INVENTORY_LIMIT:"\u7269\u54C1\u680F\u5DF2\u6EE1\uFF0C\u8BF7\u5148\u6E05\u7406\u518D\u6DFB\u52A0",CUSTOM_FIELDS_LIMIT:"\u6269\u5C55\u5C5E\u6027\u5B57\u6BB5\u5DF2\u6EE1\uFF0C\u8BF7\u5148\u5220\u9664\u518D\u6DFB\u52A0",MODEL_NOT_FOUND:"\u6240\u9009\u6A21\u578B\u4E0D\u53EF\u7528\uFF0C\u8BF7\u5207\u6362\u5176\u4ED6\u6A21\u578B",GAME_NOT_FOUND:"\u672A\u627E\u5230\u5BF9\u5E94\u6E38\u620F",INVALID_REQUEST:"\u8BF7\u6C42\u65E0\u6548\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",INVALID_EXTRACT_RULE:"\u56DE\u590D\u63D0\u53D6\u914D\u7F6E\u65E0\u6548\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",INTERNAL_ERROR:"\u670D\u52A1\u51FA\u4E86\u70B9\u5C0F\u95EE\u9898\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",NOT_INITIALIZED:"SDK \u5C1A\u672A\u521D\u59CB\u5316",NOT_SUPPORTED_IN_PREVIEW:"\u5F53\u524D\u63A5\u53E3\u5728\u9884\u89C8\u6A21\u5F0F\u4E0B\u4E0D\u53EF\u7528",NETWORK_ERROR:"\u7F51\u7EDC\u5F02\u5E38\uFF0C\u8BF7\u68C0\u67E5\u8FDE\u63A5",REQUEST_TIMEOUT:"\u8BF7\u6C42\u8D85\u65F6\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",MODEL_LOADING_TIMEOUT:"\u6A21\u578B\u54CD\u5E94\u8D85\u65F6\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5",DAISY_CARD_REQUIRED:"\u56DE\u6EAF\u6D88\u606F\u9700\u8981\u6709\u6548\u7684\u96CF\u83CA\u5361\u8BA2\u9605",MESSAGE_NOT_FOUND:"\u6D88\u606F\u4E0D\u5B58\u5728\u6216\u65E0\u6743\u64CD\u4F5C",MESSAGE_TOO_OLD:"\u4EC5\u53EF\u56DE\u6EAF 30 \u5929\u5185\u7684\u6D88\u606F",NO_MESSAGES_TO_DELETE:"\u8BE5\u6D88\u606F\u4E4B\u540E\u6CA1\u6709\u53EF\u56DE\u6EAF\u7684\u6D88\u606F",GENERATION_TIMEOUT:"\u751F\u6210\u8D85\u65F6\uFF0C\u8BF7\u91CD\u8BD5",GENERATION_LOST:"\u751F\u6210\u8FDE\u63A5\u4E2D\u65AD\uFF0C\u8BF7\u91CD\u8BD5\uFF1B\u82E5\u5185\u5BB9\u5DF2\u751F\u6210\uFF0C\u5237\u65B0\u540E\u53EF\u89C1",REPETITION_LOOP:"\u56DE\u590D\u51FA\u73B0\u91CD\u590D\uFF0C\u8BF7\u91CD\u8BD5\u6216\u6362\u4E2A\u8BF4\u6CD5",SAVE_FAILED:"\u6D88\u606F\u4FDD\u5B58\u5931\u8D25\uFF0C\u672C\u6B21\u4E0D\u6263\u8D39\uFF0C\u8BF7\u91CD\u8BD5",FINALIZE_FAILED:"\u56DE\u590D\u5904\u7406\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5",CONVERSATION_NOT_FOUND:"\u672A\u627E\u5230\u5BF9\u5E94\u4F1A\u8BDD",EMPTY_MESSAGE:"\u6D88\u606F\u5185\u5BB9\u4E0D\u80FD\u4E3A\u7A7A",CONTINUE_MODEL_NOT_AVAILABLE:"\u7EED\u5199\u6A21\u578B\u5F53\u524D\u4E0D\u53EF\u7528",CONTINUE_PROMPT_MISSING:"\u7EED\u5199\u914D\u7F6E\u7F3A\u5931",GENERATION_ABORTED:"\u751F\u6210\u5DF2\u505C\u6B62"}},it={common:{unknownError:"\u64CD\u4F5C\u5931\u6557\uFF0C\u8ACB\u7A0D\u5F8C\u91CD\u8A66",violationWords:"\u5167\u5BB9\u5305\u542B\u4E0D\u7B26\u5408\u793E\u7FA4\u898F\u7BC4\u7684\u7528\u8A5E{words}\uFF0C\u8ACB\u4FEE\u6539\u5F8C\u91CD\u8A66",close:"\u95DC\u9589"},errors:{UNAUTHORIZED:"\u767B\u5165\u5DF2\u5931\u6548\uFF0C\u8ACB\u91CD\u65B0\u767B\u5165",INSUFFICIENT_CREDITS:"\u82B1\u5712\u5E63\u4E0D\u8DB3\uFF0C\u8ACB\u5132\u503C\u5F8C\u518D\u7E7C\u7E8C\u904A\u6232",VIOLATION_WORD_DETECTED:"\u5167\u5BB9\u542B\u6709\u9055\u7981\u8A5E\uFF0C\u8ACB\u4FEE\u6539\u5F8C\u91CD\u8A66",CONTENT_FILTERED:"\u5167\u5BB9\u88AB\u5B89\u5168\u7B56\u7565\u6514\u622A\uFF0C\u8ACB\u8ABF\u6574\u5F8C\u91CD\u8A66",MODEL_REFUSAL:"\u6A21\u578B\u62D2\u7D55\u56DE\u61C9\uFF0C\u63DB\u500B\u8AAA\u6CD5\u8A66\u8A66",STREAM_INTERRUPTED:"\u56DE\u8986\u5DF2\u4E2D\u65B7\uFF0C\u8ACB\u91CD\u8A66",RATE_LIMITED:"\u64CD\u4F5C\u904E\u65BC\u983B\u7E41\uFF0C\u8ACB\u7A0D\u5F8C\u518D\u8A66",GENERATING_IN_PROGRESS:"\u76EE\u524D\u5287\u60C5\u6B63\u5728\u751F\u6210\u4E2D\uFF0C\u8ACB\u7A0D\u5019",CONCURRENT_GENERATION_LIMIT:"\u540C\u6642\u9032\u884C\u7684\u5287\u60C5\u592A\u591A\uFF0C\u8ACB\u7A0D\u5019\u518D\u8A66",INVENTORY_LIMIT:"\u9053\u5177\u6B04\u5DF2\u6EFF\uFF0C\u8ACB\u5148\u6E05\u7406\u518D\u65B0\u589E",CUSTOM_FIELDS_LIMIT:"\u64F4\u5145\u5C6C\u6027\u6B04\u4F4D\u5DF2\u6EFF\uFF0C\u8ACB\u5148\u522A\u9664\u518D\u65B0\u589E",MODEL_NOT_FOUND:"\u6240\u9078\u6A21\u578B\u4E0D\u53EF\u7528\uFF0C\u8ACB\u5207\u63DB\u5176\u4ED6\u6A21\u578B",GAME_NOT_FOUND:"\u627E\u4E0D\u5230\u5C0D\u61C9\u904A\u6232",INVALID_REQUEST:"\u8ACB\u6C42\u7121\u6548\uFF0C\u8ACB\u7A0D\u5F8C\u91CD\u8A66",INVALID_EXTRACT_RULE:"\u56DE\u8986\u64F7\u53D6\u8A2D\u5B9A\u7121\u6548\uFF0C\u8ACB\u7A0D\u5F8C\u91CD\u8A66",INTERNAL_ERROR:"\u670D\u52D9\u51FA\u4E86\u9EDE\u5C0F\u554F\u984C\uFF0C\u8ACB\u7A0D\u5F8C\u91CD\u8A66",NOT_INITIALIZED:"SDK \u5C1A\u672A\u521D\u59CB\u5316",NOT_SUPPORTED_IN_PREVIEW:"\u76EE\u524D\u4ECB\u9762\u5728\u9810\u89BD\u6A21\u5F0F\u4E0B\u4E0D\u53EF\u7528",NETWORK_ERROR:"\u7DB2\u8DEF\u7570\u5E38\uFF0C\u8ACB\u6AA2\u67E5\u9023\u7DDA",REQUEST_TIMEOUT:"\u8ACB\u6C42\u903E\u6642\uFF0C\u8ACB\u7A0D\u5F8C\u91CD\u8A66",MODEL_LOADING_TIMEOUT:"\u6A21\u578B\u56DE\u61C9\u903E\u6642\uFF0C\u8ACB\u7A0D\u5F8C\u91CD\u8A66",DAISY_CARD_REQUIRED:"\u56DE\u6EAF\u8A0A\u606F\u9700\u8981\u6709\u6548\u7684\u96DB\u83CA\u5361\u8A02\u95B1",MESSAGE_NOT_FOUND:"\u8A0A\u606F\u4E0D\u5B58\u5728\u6216\u7121\u6B0A\u64CD\u4F5C",MESSAGE_TOO_OLD:"\u50C5\u53EF\u56DE\u6EAF 30 \u5929\u5167\u7684\u8A0A\u606F",NO_MESSAGES_TO_DELETE:"\u8A72\u8A0A\u606F\u4E4B\u5F8C\u6C92\u6709\u53EF\u56DE\u6EAF\u7684\u8A0A\u606F",GENERATION_TIMEOUT:"\u751F\u6210\u903E\u6642\uFF0C\u8ACB\u91CD\u8A66",GENERATION_LOST:"\u751F\u6210\u9023\u7DDA\u4E2D\u65B7\uFF0C\u8ACB\u91CD\u8A66\uFF1B\u82E5\u5167\u5BB9\u5DF2\u751F\u6210\uFF0C\u91CD\u65B0\u6574\u7406\u5F8C\u53EF\u898B",REPETITION_LOOP:"\u56DE\u8986\u51FA\u73FE\u91CD\u8907\uFF0C\u8ACB\u91CD\u8A66\u6216\u63DB\u500B\u8AAA\u6CD5",SAVE_FAILED:"\u8A0A\u606F\u5132\u5B58\u5931\u6557\uFF0C\u672C\u6B21\u4E0D\u6263\u8CBB\uFF0C\u8ACB\u91CD\u8A66",FINALIZE_FAILED:"\u56DE\u8986\u8655\u7406\u5931\u6557\uFF0C\u8ACB\u91CD\u8A66",CONVERSATION_NOT_FOUND:"\u627E\u4E0D\u5230\u5C0D\u61C9\u5C0D\u8A71",EMPTY_MESSAGE:"\u8A0A\u606F\u5167\u5BB9\u4E0D\u80FD\u70BA\u7A7A",CONTINUE_MODEL_NOT_AVAILABLE:"\u7E8C\u5BEB\u6A21\u578B\u76EE\u524D\u4E0D\u53EF\u7528",CONTINUE_PROMPT_MISSING:"\u7E8C\u5BEB\u8A2D\u5B9A\u7F3A\u5931",GENERATION_ABORTED:"\u751F\u6210\u5DF2\u505C\u6B62"}},st={common:{unknownError:"Something went wrong. Please try again.",violationWords:"Your content contains words that violate our community guidelines{words}. Please revise and try again.",close:"Close"},errors:{UNAUTHORIZED:"Your session has expired. Please sign in again.",INSUFFICIENT_CREDITS:"Not enough Garden Coins. Please top up to continue.",VIOLATION_WORD_DETECTED:"Your content contains prohibited words. Please revise and try again.",CONTENT_FILTERED:"Content was blocked by the safety filter. Please adjust and try again.",MODEL_REFUSAL:"The model declined to respond. Try rephrasing.",STREAM_INTERRUPTED:"The reply was interrupted. Please try again.",RATE_LIMITED:"Too many requests. Please wait a moment.",GENERATING_IN_PROGRESS:"A reply is already being generated. Please wait.",CONCURRENT_GENERATION_LIMIT:"Too many replies generating at once. Please wait.",INVENTORY_LIMIT:"Inventory is full. Remove some items first.",CUSTOM_FIELDS_LIMIT:"Custom field limit reached. Delete some fields first.",MODEL_NOT_FOUND:"That model is unavailable. Please pick another one.",GAME_NOT_FOUND:"Game not found.",INVALID_REQUEST:"Invalid request. Please try again.",INVALID_EXTRACT_RULE:"Invalid reply-extraction rule. Please try again.",INTERNAL_ERROR:"Something went wrong on our end. Please try again.",NOT_INITIALIZED:"The SDK is not initialized yet.",NOT_SUPPORTED_IN_PREVIEW:"This action is unavailable in preview mode.",NETWORK_ERROR:"Network error. Please check your connection.",REQUEST_TIMEOUT:"Request timed out. Please try again.",MODEL_LOADING_TIMEOUT:"The model took too long to respond. Please try again.",DAISY_CARD_REQUIRED:"Rolling back messages requires an active Daisy Card subscription.",MESSAGE_NOT_FOUND:"Message not found, or you do not have access to it.",MESSAGE_TOO_OLD:"You can only roll back messages from the last 30 days.",NO_MESSAGES_TO_DELETE:"There are no messages after this one to roll back.",GENERATION_TIMEOUT:"Generation timed out. Please try again.",GENERATION_LOST:"Lost connection while generating. Try again \u2014 if it finished, refresh to see it.",REPETITION_LOOP:"The reply started repeating itself. Try again or rephrase.",SAVE_FAILED:"Failed to save the message. You were not charged. Please try again.",FINALIZE_FAILED:"Failed to finish processing the reply. Please try again.",CONVERSATION_NOT_FOUND:"Conversation not found.",EMPTY_MESSAGE:"Message cannot be empty.",CONTINUE_MODEL_NOT_AVAILABLE:"The continuation model is currently unavailable.",CONTINUE_PROMPT_MISSING:"Continuation settings are missing.",GENERATION_ABORTED:"Generation stopped."}},at={common:{unknownError:"\u64CD\u4F5C\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",violationWords:"\u30B3\u30DF\u30E5\u30CB\u30C6\u30A3\u30AC\u30A4\u30C9\u30E9\u30A4\u30F3\u306B\u53CD\u3059\u308B\u8A9E\u53E5{words}\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059\u3002\u4FEE\u6B63\u3057\u3066\u304B\u3089\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",close:"\u9589\u3058\u308B"},errors:{UNAUTHORIZED:"\u30ED\u30B0\u30A4\u30F3\u306E\u6709\u52B9\u671F\u9650\u304C\u5207\u308C\u307E\u3057\u305F\u3002\u518D\u5EA6\u30ED\u30B0\u30A4\u30F3\u3057\u3066\u304F\u3060\u3055\u3044\u3002",INSUFFICIENT_CREDITS:"\u30AC\u30FC\u30C7\u30F3\u30B3\u30A4\u30F3\u304C\u4E0D\u8DB3\u3057\u3066\u3044\u307E\u3059\u3002\u30C1\u30E3\u30FC\u30B8\u3057\u3066\u304B\u3089\u7D9A\u3051\u3066\u304F\u3060\u3055\u3044\u3002",VIOLATION_WORD_DETECTED:"\u7981\u6B62\u8A9E\u53E5\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059\u3002\u4FEE\u6B63\u3057\u3066\u304B\u3089\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",CONTENT_FILTERED:"\u5B89\u5168\u30DD\u30EA\u30B7\u30FC\u306B\u3088\u308A\u30D6\u30ED\u30C3\u30AF\u3055\u308C\u307E\u3057\u305F\u3002\u5185\u5BB9\u3092\u8ABF\u6574\u3057\u3066\u304F\u3060\u3055\u3044\u3002",MODEL_REFUSAL:"\u30E2\u30C7\u30EB\u304C\u5FDC\u7B54\u3092\u62D2\u5426\u3057\u307E\u3057\u305F\u3002\u8868\u73FE\u3092\u5909\u3048\u3066\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",STREAM_INTERRUPTED:"\u8FD4\u4FE1\u304C\u4E2D\u65AD\u3055\u308C\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",RATE_LIMITED:"\u64CD\u4F5C\u304C\u983B\u7E41\u3059\u304E\u307E\u3059\u3002\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",GENERATING_IN_PROGRESS:"\u73FE\u5728\u30B9\u30C8\u30FC\u30EA\u30FC\u3092\u751F\u6210\u4E2D\u3067\u3059\u3002\u304A\u5F85\u3061\u304F\u3060\u3055\u3044\u3002",CONCURRENT_GENERATION_LIMIT:"\u540C\u6642\u306B\u751F\u6210\u4E2D\u306E\u30B9\u30C8\u30FC\u30EA\u30FC\u304C\u591A\u3059\u304E\u307E\u3059\u3002\u304A\u5F85\u3061\u304F\u3060\u3055\u3044\u3002",INVENTORY_LIMIT:"\u6301\u3061\u7269\u304C\u3044\u3063\u3071\u3044\u3067\u3059\u3002\u6574\u7406\u3057\u3066\u304B\u3089\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044\u3002",CUSTOM_FIELDS_LIMIT:"\u62E1\u5F35\u5C5E\u6027\u306E\u9805\u76EE\u304C\u4E0A\u9650\u306B\u9054\u3057\u307E\u3057\u305F\u3002\u524A\u9664\u3057\u3066\u304B\u3089\u8FFD\u52A0\u3057\u3066\u304F\u3060\u3055\u3044\u3002",MODEL_NOT_FOUND:"\u9078\u629E\u3057\u305F\u30E2\u30C7\u30EB\u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002\u5225\u306E\u30E2\u30C7\u30EB\u3092\u304A\u9078\u3073\u304F\u3060\u3055\u3044\u3002",GAME_NOT_FOUND:"\u5BFE\u8C61\u306E\u30B2\u30FC\u30E0\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002",INVALID_REQUEST:"\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u7121\u52B9\u3067\u3059\u3002\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",INVALID_EXTRACT_RULE:"\u8FD4\u4FE1\u62BD\u51FA\u306E\u8A2D\u5B9A\u304C\u7121\u52B9\u3067\u3059\u3002\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",INTERNAL_ERROR:"\u30B5\u30FC\u30D0\u30FC\u5074\u3067\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u3057\u3070\u3089\u304F\u3057\u3066\u304B\u3089\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",NOT_INITIALIZED:"SDK \u304C\u307E\u3060\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002",NOT_SUPPORTED_IN_PREVIEW:"\u3053\u306E\u6A5F\u80FD\u306F\u30D7\u30EC\u30D3\u30E5\u30FC\u30E2\u30FC\u30C9\u3067\u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002",NETWORK_ERROR:"\u30CD\u30C3\u30C8\u30EF\u30FC\u30AF\u30A8\u30E9\u30FC\u3067\u3059\u3002\u63A5\u7D9A\u3092\u3054\u78BA\u8A8D\u304F\u3060\u3055\u3044\u3002",REQUEST_TIMEOUT:"\u30EA\u30AF\u30A8\u30B9\u30C8\u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",MODEL_LOADING_TIMEOUT:"\u30E2\u30C7\u30EB\u306E\u5FDC\u7B54\u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",DAISY_CARD_REQUIRED:"\u30E1\u30C3\u30BB\u30FC\u30B8\u306E\u30ED\u30FC\u30EB\u30D0\u30C3\u30AF\u306B\u306F\u30C7\u30A4\u30B8\u30FC\u30AB\u30FC\u30C9\u306E\u6709\u52B9\u306A\u30B5\u30D6\u30B9\u30AF\u30EA\u30D7\u30B7\u30E7\u30F3\u304C\u5FC5\u8981\u3067\u3059\u3002",MESSAGE_NOT_FOUND:"\u30E1\u30C3\u30BB\u30FC\u30B8\u304C\u5B58\u5728\u3057\u306A\u3044\u304B\u3001\u64CD\u4F5C\u3059\u308B\u6A29\u9650\u304C\u3042\u308A\u307E\u305B\u3093\u3002",MESSAGE_TOO_OLD:"\u30ED\u30FC\u30EB\u30D0\u30C3\u30AF\u3067\u304D\u308B\u306E\u306F 30 \u65E5\u4EE5\u5185\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u306E\u307F\u3067\u3059\u3002",NO_MESSAGES_TO_DELETE:"\u3053\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u3088\u308A\u5F8C\u306B\u30ED\u30FC\u30EB\u30D0\u30C3\u30AF\u3067\u304D\u308B\u30E1\u30C3\u30BB\u30FC\u30B8\u306F\u3042\u308A\u307E\u305B\u3093\u3002",GENERATION_TIMEOUT:"\u751F\u6210\u304C\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u3057\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",GENERATION_LOST:"\u751F\u6210\u4E2D\u306B\u63A5\u7D9A\u304C\u5207\u308C\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002\u751F\u6210\u6E08\u307F\u306E\u5834\u5408\u306F\u518D\u8AAD\u307F\u8FBC\u307F\u3067\u8868\u793A\u3055\u308C\u307E\u3059\u3002",REPETITION_LOOP:"\u8FD4\u4FE1\u304C\u7E70\u308A\u8FD4\u3057\u306B\u306A\u308A\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u3044\u305F\u3060\u304F\u304B\u3001\u8868\u73FE\u3092\u5909\u3048\u3066\u304F\u3060\u3055\u3044\u3002",SAVE_FAILED:"\u30E1\u30C3\u30BB\u30FC\u30B8\u306E\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u4ECA\u56DE\u306F\u8AB2\u91D1\u3055\u308C\u307E\u305B\u3093\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",FINALIZE_FAILED:"\u8FD4\u4FE1\u306E\u51E6\u7406\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002\u3082\u3046\u4E00\u5EA6\u304A\u8A66\u3057\u304F\u3060\u3055\u3044\u3002",CONVERSATION_NOT_FOUND:"\u5BFE\u8C61\u306E\u4F1A\u8A71\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002",EMPTY_MESSAGE:"\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002",CONTINUE_MODEL_NOT_AVAILABLE:"\u7D9A\u304D\u3092\u66F8\u304F\u30E2\u30C7\u30EB\u304C\u73FE\u5728\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002",CONTINUE_PROMPT_MISSING:"\u7D9A\u304D\u3092\u66F8\u304F\u8A2D\u5B9A\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002",GENERATION_ABORTED:"\u751F\u6210\u3092\u505C\u6B62\u3057\u307E\u3057\u305F\u3002"}},dt={common:{unknownError:"\uC791\uC5C5\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",violationWords:"\uCEE4\uBBA4\uB2C8\uD2F0 \uADDC\uC815\uC5D0 \uC5B4\uAE0B\uB098\uB294 \uB2E8\uC5B4{words}\uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. \uC218\uC815 \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",close:"\uB2EB\uAE30"},errors:{UNAUTHORIZED:"\uB85C\uADF8\uC778\uC774 \uB9CC\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uB85C\uADF8\uC778\uD574 \uC8FC\uC138\uC694.",INSUFFICIENT_CREDITS:"\uAC00\uB4E0 \uCF54\uC778\uC774 \uBD80\uC871\uD569\uB2C8\uB2E4. \uCDA9\uC804 \uD6C4 \uACC4\uC18D\uD574 \uC8FC\uC138\uC694.",VIOLATION_WORD_DETECTED:"\uAE08\uC9C0\uB41C \uB2E8\uC5B4\uAC00 \uD3EC\uD568\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. \uC218\uC815 \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",CONTENT_FILTERED:"\uC548\uC804 \uC815\uCC45\uC5D0 \uC758\uD574 \uCC28\uB2E8\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB0B4\uC6A9\uC744 \uC218\uC815\uD574 \uC8FC\uC138\uC694.",MODEL_REFUSAL:"\uBAA8\uB378\uC774 \uC751\uB2F5\uC744 \uAC70\uBD80\uD588\uC2B5\uB2C8\uB2E4. \uB2E4\uB974\uAC8C \uD45C\uD604\uD574 \uBCF4\uC138\uC694.",STREAM_INTERRUPTED:"\uC751\uB2F5\uC774 \uC911\uB2E8\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",RATE_LIMITED:"\uC694\uCCAD\uC774 \uB108\uBB34 \uC7A6\uC2B5\uB2C8\uB2E4. \uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",GENERATING_IN_PROGRESS:"\uD604\uC7AC \uC2A4\uD1A0\uB9AC\uB97C \uC0DD\uC131 \uC911\uC785\uB2C8\uB2E4. \uC7A0\uC2DC\uB9CC \uAE30\uB2E4\uB824 \uC8FC\uC138\uC694.",CONCURRENT_GENERATION_LIMIT:"\uB3D9\uC2DC\uC5D0 \uC0DD\uC131 \uC911\uC778 \uC2A4\uD1A0\uB9AC\uAC00 \uB108\uBB34 \uB9CE\uC2B5\uB2C8\uB2E4. \uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",INVENTORY_LIMIT:"\uC18C\uC9C0\uD488\uC774 \uAC00\uB4DD \uCC3C\uC2B5\uB2C8\uB2E4. \uC815\uB9AC \uD6C4 \uCD94\uAC00\uD574 \uC8FC\uC138\uC694.",CUSTOM_FIELDS_LIMIT:"\uD655\uC7A5 \uC18D\uC131 \uD56D\uBAA9\uC774 \uAC00\uB4DD \uCC3C\uC2B5\uB2C8\uB2E4. \uC0AD\uC81C \uD6C4 \uCD94\uAC00\uD574 \uC8FC\uC138\uC694.",MODEL_NOT_FOUND:"\uC120\uD0DD\uD55C \uBAA8\uB378\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uB2E4\uB978 \uBAA8\uB378\uC744 \uC120\uD0DD\uD574 \uC8FC\uC138\uC694.",GAME_NOT_FOUND:"\uD574\uB2F9 \uAC8C\uC784\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.",INVALID_REQUEST:"\uC798\uBABB\uB41C \uC694\uCCAD\uC785\uB2C8\uB2E4. \uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",INVALID_EXTRACT_RULE:"\uC751\uB2F5 \uCD94\uCD9C \uC124\uC815\uC774 \uC62C\uBC14\uB974\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",INTERNAL_ERROR:"\uC11C\uBC84\uC5D0 \uBB38\uC81C\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. \uC7A0\uC2DC \uD6C4 \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",NOT_INITIALIZED:"SDK\uAC00 \uC544\uC9C1 \uCD08\uAE30\uD654\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4.",NOT_SUPPORTED_IN_PREVIEW:"\uC774 \uAE30\uB2A5\uC740 \uBBF8\uB9AC\uBCF4\uAE30 \uBAA8\uB4DC\uC5D0\uC11C \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.",NETWORK_ERROR:"\uB124\uD2B8\uC6CC\uD06C \uC624\uB958\uC785\uB2C8\uB2E4. \uC5F0\uACB0\uC744 \uD655\uC778\uD574 \uC8FC\uC138\uC694.",REQUEST_TIMEOUT:"\uC694\uCCAD \uC2DC\uAC04\uC774 \uCD08\uACFC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",MODEL_LOADING_TIMEOUT:"\uBAA8\uB378 \uC751\uB2F5 \uC2DC\uAC04\uC774 \uCD08\uACFC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",DAISY_CARD_REQUIRED:"\uBA54\uC2DC\uC9C0 \uB418\uB3CC\uB9AC\uAE30\uB294 \uB370\uC774\uC9C0 \uCE74\uB4DC \uAD6C\uB3C5\uC774 \uD544\uC694\uD569\uB2C8\uB2E4.",MESSAGE_NOT_FOUND:"\uBA54\uC2DC\uC9C0\uAC00 \uC5C6\uAC70\uB098 \uAD8C\uD55C\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",MESSAGE_TOO_OLD:"30\uC77C \uC774\uB0B4\uC758 \uBA54\uC2DC\uC9C0\uB9CC \uB418\uB3CC\uB9B4 \uC218 \uC788\uC2B5\uB2C8\uB2E4.",NO_MESSAGES_TO_DELETE:"\uC774 \uBA54\uC2DC\uC9C0 \uC774\uD6C4\uC5D0 \uB418\uB3CC\uB9B4 \uBA54\uC2DC\uC9C0\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4.",GENERATION_TIMEOUT:"\uC0DD\uC131 \uC2DC\uAC04\uC774 \uCD08\uACFC\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",GENERATION_LOST:"\uC0DD\uC131 \uC911 \uC5F0\uACB0\uC774 \uB04A\uACBC\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694. \uC774\uBBF8 \uC0DD\uC131\uB418\uC5C8\uB2E4\uBA74 \uC0C8\uB85C\uACE0\uCE68\uD558\uBA74 \uBCF4\uC785\uB2C8\uB2E4.",REPETITION_LOOP:"\uC751\uB2F5\uC774 \uBC18\uBCF5\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD558\uAC70\uB098 \uB2E4\uB974\uAC8C \uD45C\uD604\uD574 \uC8FC\uC138\uC694.",SAVE_FAILED:"\uBA54\uC2DC\uC9C0 \uC800\uC7A5\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uC774\uBC88\uC5D0\uB294 \uCC28\uAC10\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",FINALIZE_FAILED:"\uC751\uB2F5 \uCC98\uB9AC\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4. \uB2E4\uC2DC \uC2DC\uB3C4\uD574 \uC8FC\uC138\uC694.",CONVERSATION_NOT_FOUND:"\uD574\uB2F9 \uB300\uD654\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.",EMPTY_MESSAGE:"\uBA54\uC2DC\uC9C0\uB97C \uC785\uB825\uD574 \uC8FC\uC138\uC694.",CONTINUE_MODEL_NOT_AVAILABLE:"\uC774\uC5B4\uC4F0\uAE30 \uBAA8\uB378\uC744 \uD604\uC7AC \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.",CONTINUE_PROMPT_MISSING:"\uC774\uC5B4\uC4F0\uAE30 \uC124\uC815\uC774 \uC5C6\uC2B5\uB2C8\uB2E4.",GENERATION_ABORTED:"\uC0DD\uC131\uC744 \uC911\uC9C0\uD588\uC2B5\uB2C8\uB2E4."}},Ne={zh:ot,"zh-Hant":it,en:st,ja:at,ko:dt},ae="zh";function be(o){if(!o)return null;let e=o.trim();if(!e)return null;if(rt.includes(e))return e;let t=e.toLowerCase();return t.startsWith("zh")?/hant|tw|hk|mo/.test(t)?"zh-Hant":"zh":t.startsWith("ja")?"ja":t.startsWith("ko")?"ko":t.startsWith("en")?"en":null}function Ae(o){let e=be(o);e&&(ae=e)}function ke(){if(typeof navigator>"u")return;let o=be(navigator.language);o&&(ae=o)}function De(o){return Ne[ae].errors[o]}function de(o){return Ne[ae].common[o]}var pe=null;function Le(o){pe=o}var Me="storvia-sdk-toast-style",ce="storvia-sdk-toast-stack",ct=`
2
+ #${ce} {
3
3
  position: fixed;
4
4
  top: max(20px, env(safe-area-inset-top, 0px) + 20px);
5
5
  right: max(20px, env(safe-area-inset-right, 0px) + 20px);
@@ -12,7 +12,7 @@
12
12
  }
13
13
 
14
14
  @media (max-width: 768px) {
15
- #${de} {
15
+ #${ce} {
16
16
  top: max(10px, env(safe-area-inset-top, 0px) + 10px);
17
17
  left: 10px;
18
18
  right: 10px;
@@ -114,10 +114,10 @@
114
114
  @media (max-width: 768px) {
115
115
  .storvia-toast { max-width: none; }
116
116
  }
117
- `,at={success:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>',error:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg>',warning:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>',info:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/></svg>'},xe=!0;function Ue(o){xe=o}function dt(){if(typeof document>"u")return null;let o=document.getElementById(de);if(!o){if(!document.getElementById(be)){let e=document.createElement("style");e.id=be,e.textContent=st,document.head.appendChild(e)}o=document.createElement("div"),o.id=de,document.body.appendChild(o)}return o}function pe(o,e="info",t=3500,n){if(!xe)return;let r=dt();if(!r)return;let i=t<=0,s=document.createElement("div");s.className=`storvia-toast ${e}`,s.innerHTML=`
118
- <span class="storvia-toast-icon">${at[e]}</span>
117
+ `,lt={success:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>',error:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="8" x2="12" y2="12"/><line x1="12" y1="16" x2="12.01" y2="16"/></svg>',warning:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><path d="M10.29 3.86 1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/><line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/></svg>',info:'<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><line x1="12" y1="16" x2="12" y2="12"/><line x1="12" y1="8" x2="12.01" y2="8"/></svg>'},$e=!0;function Ge(o){$e=o}function ht(){if(typeof document>"u")return null;let o=document.getElementById(ce);if(!o){if(!document.getElementById(Me)){let e=document.createElement("style");e.id=Me,e.textContent=ct,document.head.appendChild(e)}o=document.createElement("div"),o.id=ce,document.body.appendChild(o)}return o}function ee(o,e="info",t=3500,n){if(!$e)return;let r=ht();if(!r)return;let i=t<=0,s=document.createElement("div");s.className=`storvia-toast ${e}`,s.innerHTML=`
118
+ <span class="storvia-toast-icon">${lt[e]}</span>
119
119
  <span class="storvia-toast-msg"></span>
120
- `;let c=s.querySelector(".storvia-toast-msg");c&&(c.textContent=o);let d=()=>{s.isConnected&&(s.classList.add("leaving"),s.classList.remove("show"),setTimeout(()=>s.remove(),320))};if(n){let a=document.createElement("button");a.type="button",a.className="storvia-toast-action",a.textContent=n.label,a.addEventListener("click",()=>{try{n.onClick()}catch(l){console.error("[Storvia toast] action error:",l)}d()}),s.appendChild(a)}if(i){let a=document.createElement("button");a.type="button",a.className="storvia-toast-close",a.setAttribute("aria-label",ae("close")),a.innerHTML='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>',a.addEventListener("click",d),s.appendChild(a)}r.appendChild(s),requestAnimationFrame(()=>s.classList.add("show")),i||setTimeout(d,t)}function ct(o){let e=o.filter(t=>t).map(t=>`\u300C${t}\u300D`).join("");return ae("violationWords").replace("{words}",e)}var lt=3e3,ke={};function De(o){let e=Date.now();if(!(e-(ke[o]??0)<lt)){if(ke[o]=e,!ue){console.warn(`[Storvia] navigate \u2192 wallet(${o})\uFF1A\u5F53\u524D\u672A\u68C0\u6D4B\u5230\u5BBF\u4E3B\uFF08dev \u6A21\u5F0F\uFF09\uFF0C\u751F\u4EA7\u73AF\u5883\u7531\u5BBF\u4E3B\u5F39\u5145\u503C\u5F15\u5BFC / \u8DF3\u94B1\u5305\u9875\u3002`);return}try{ue(y("navigate",{target:"wallet",reason:o}))}catch(t){console.error("[Storvia] navigate \u2192 wallet \u901A\u8FC7 bus \u53D1\u9001\u5931\u8D25:",t)}}}function S(o,e,t){if(o==="GENERATION_ABORTED")return;if(o==="INSUFFICIENT_CREDITS")return De("insufficient_credits");if(o==="DAISY_CARD_REQUIRED")return De("daisy_card_required");let n=o==="VIOLATION_WORD_DETECTED"&&t?.length?ct(t):Ne(o)||e||ae("unknownError");pe(n,o==="RATE_LIMITED"?"warning":"error")}function ht(o,e){let t=e?.tickMs??100,n=e?.baseLagMs??1e3,r=e?.maxLagMs??2500,i=e?.minCharsPerTick??2,s="",c=null,d=0,a=0,l=()=>Math.min(r,Math.max(n,d*1.35)),p=()=>{let R=Math.max(i,Math.ceil(s.length*t/l()));if(R>=s.length)R=s.length;else{let w=s.charCodeAt(R-1);w>=55296&&w<=56319&&R++}let T=s.slice(0,R);s=s.slice(R),T&&o(T)},u=()=>{c=null,p(),s&&(c=setTimeout(u,t))};return{push:R=>{let T=Date.now();if(a>0){let w=Math.min(T-a,r);d=d>0?d*.7+w*.3:w}a=T,s+=R,c===null&&u()},flush:()=>{c!==null&&(clearTimeout(c),c=null),s&&(o(s),s="")},cancel:()=>{c!==null&&(clearTimeout(c),c=null),s=""}}}function ge(o){let e=ht(o.onChunk);return{cbs:{onChunk:n=>e.push(n),onDone:(n,r)=>{e.flush(),o.onDone(n,r)},onAborted:o.onAborted?n=>{e.flush(),o.onAborted(n)}:void 0,onState:o.onState?(n,r)=>{e.flush(),o.onState(n,r)}:void 0,onThinking:o.onThinking?n=>{e.flush(),o.onThinking(n)}:void 0,onCreatedCharacters:o.onCreatedCharacters?n=>{e.flush(),o.onCreatedCharacters(n)}:void 0,onReconnect:o.onReconnect},flush:()=>e.flush()}}function F(o,e){if(e.aborted){if(o.onAborted){o.onAborted(e.aborted);return}o.onDone(e.aborted.id,{truncated:!1});return}o.onDone(e.messageId,e.truncated===void 0?void 0:{truncated:e.truncated})}var C=class C{constructor(e,t,n=!1,r=""){this.baseUrl=e,this.token=t,this.debug=n,this.devApiKey=r}setToken(e){this.token=e}setDebug(e){this.debug=e}maybeShowNetworkToast(e){e instanceof m||S("NETWORK_ERROR")}wrapAbortError(e){if(e instanceof DOMException&&e.name==="AbortError"){let t=new m("REQUEST_TIMEOUT","Request timed out");return S("REQUEST_TIMEOUT"),t}return e}createTimeoutController(){let e=new AbortController,t=setTimeout(()=>e.abort(),C.REQUEST_TIMEOUT);return{controller:e,clear:()=>clearTimeout(t)}}buildHeaders(){let e={"Content-Type":"application/json"};return this.token&&(e.Authorization=`Bearer ${this.token}`),this.devApiKey&&(e["x-api-key"]=this.devApiKey),e}log(e){if(!this.debug)return;let{method:t,path:n,body:r,status:i,rawResponse:s,parsedData:c,error:d,durationMs:a,modelName:l}=e,p="%c[Storvia SDK]",u="color: #6366f1; font-weight: bold",f=a!==void 0?` (${a}ms)`:"",h=i!==void 0?` [${i}]`:"",v=l?` [model: ${l}]`:"";d?(console.groupCollapsed(`${p} %c${t} ${n}${h}${v}${f} %c\u2717`,u,"color: #e0e0e0","color: #ef4444"),r!==void 0&&console.log("Request:",r),s!==void 0&&console.log("Response (raw):",s),console.error("Error:",d),console.groupEnd()):(console.groupCollapsed(`${p} %c${t} ${n}${h}${v}${f} %c\u2713`,u,"color: #e0e0e0","color: #22c55e"),r!==void 0&&console.log("Request:",r),s!==void 0&&console.log("Response (raw):",s),c!==void 0&&c!==s&&console.log("Response (data):",c),console.groupEnd())}async get(e,t){let n=new URL(`${this.baseUrl}${e}`);t&&Object.entries(t).forEach(([a,l])=>n.searchParams.set(a,l));let r=Date.now(),i,s,{controller:c,clear:d}=this.createTimeoutController();try{let a=await fetch(n.toString(),{method:"GET",headers:this.buildHeaders(),signal:c.signal});d(),i=a.status;let{raw:l,data:p}=await this.handleResponseWithRaw(a);return s=l,this.log({method:"GET",path:e,body:t,status:i,rawResponse:s,parsedData:p,durationMs:Date.now()-r}),p}catch(a){d();let l=this.wrapAbortError(a);throw this.log({method:"GET",path:e,body:t,status:i,rawResponse:s,error:l,durationMs:Date.now()-r}),l===a&&this.maybeShowNetworkToast(a),l}}async post(e,t,n){let r=Date.now(),i,s,{controller:c,clear:d}=this.createTimeoutController();try{let a=await fetch(`${this.baseUrl}${e}`,{method:"POST",headers:this.buildHeaders(),body:t?JSON.stringify(t):void 0,signal:c.signal});d(),i=a.status;let{raw:l,data:p}=await this.handleResponseWithRaw(a);return s=l,this.log({method:"POST",path:e,body:t,status:i,rawResponse:s,parsedData:p,durationMs:Date.now()-r,modelName:n?.modelName}),p}catch(a){d();let l=this.wrapAbortError(a);throw this.log({method:"POST",path:e,body:t,status:i,rawResponse:s,error:l,durationMs:Date.now()-r,modelName:n?.modelName}),l===a&&this.maybeShowNetworkToast(a),l}}async patch(e,t){let n=Date.now(),r,i,{controller:s,clear:c}=this.createTimeoutController();try{let d=await fetch(`${this.baseUrl}${e}`,{method:"PATCH",headers:this.buildHeaders(),body:t?JSON.stringify(t):void 0,signal:s.signal});c(),r=d.status;let{raw:a,data:l}=await this.handleResponseWithRaw(d);return i=a,this.log({method:"PATCH",path:e,body:t,status:r,rawResponse:i,parsedData:l,durationMs:Date.now()-n}),l}catch(d){c();let a=this.wrapAbortError(d);throw this.log({method:"PATCH",path:e,body:t,status:r,rawResponse:i,error:a,durationMs:Date.now()-n}),a===d&&this.maybeShowNetworkToast(d),a}}async put(e,t){let n=Date.now(),r,i,{controller:s,clear:c}=this.createTimeoutController();try{let d=await fetch(`${this.baseUrl}${e}`,{method:"PUT",headers:this.buildHeaders(),body:t?JSON.stringify(t):void 0,signal:s.signal});c(),r=d.status;let{raw:a,data:l}=await this.handleResponseWithRaw(d);return i=a,this.log({method:"PUT",path:e,body:t,status:r,rawResponse:i,parsedData:l,durationMs:Date.now()-n}),l}catch(d){c();let a=this.wrapAbortError(d);throw this.log({method:"PUT",path:e,body:t,status:r,rawResponse:i,error:a,durationMs:Date.now()-n}),a===d&&this.maybeShowNetworkToast(d),a}}async delete(e){let t=Date.now(),n,r,{controller:i,clear:s}=this.createTimeoutController();try{let c=await fetch(`${this.baseUrl}${e}`,{method:"DELETE",headers:this.buildHeaders(),signal:i.signal});s(),n=c.status;let{raw:d,data:a}=await this.handleResponseWithRaw(c);return r=d,this.log({method:"DELETE",path:e,status:n,rawResponse:r,parsedData:a,durationMs:Date.now()-t}),a}catch(c){s();let d=this.wrapAbortError(c);throw this.log({method:"DELETE",path:e,status:n,rawResponse:r,error:d,durationMs:Date.now()-t}),d===c&&this.maybeShowNetworkToast(c),d}}async stream(e,t,n,r,i,s,c,d,a,l,p,u){let f=Date.now(),h=i?.modelName?` [model: ${i.modelName}]`:"",v=[],R=E=>{this.debug&&v.push({t:Date.now()-f,event:E})},{cbs:T,flush:w}=ge({onChunk:n,onDone:r,onState:s,onThinking:c,onCreatedCharacters:d,onReconnect:l,onAborted:p,onBase:u}),U=new AbortController,N=null,b=null,k=null,_=null,D=()=>{N!==null&&(clearTimeout(N),N=null),b!==null&&(clearTimeout(b),b=null),k!==null&&(clearTimeout(k),k=null)},re=E=>{_=E,D(),U.abort()};N=setTimeout(()=>re("REQUEST_TIMEOUT"),C.REQUEST_TIMEOUT);let O;try{O=await fetch(`${this.baseUrl}${e}`,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t),signal:U.signal})}catch(E){if(D(),_){let I=new m(_,"Request timed out");throw S(_),this.log({method:"STREAM",path:e,body:t,error:I,durationMs:Date.now()-f,modelName:i?.modelName}),I}throw this.maybeShowNetworkToast(E),E}if(N!==null&&(clearTimeout(N),N=null),!O.ok){D();let E=await O.text().catch(()=>""),I={};try{I=JSON.parse(E)}catch{}let A=I.code||"INTERNAL_ERROR",g=I.message||I.error||I.details,ye=Array.isArray(I.matched_words)?I.matched_words:void 0,Se=new m(A,g||`HTTP ${O.status}`,ye);throw S(A,g,ye),this.log({method:"STREAM",path:e,body:t,status:O.status,rawResponse:E,error:Se,durationMs:Date.now()-f,modelName:i?.modelName}),Se}let Ee=O.body?.getReader();if(!Ee)throw D(),new m("INTERNAL_ERROR","No response body for stream");b=setTimeout(()=>re("MODEL_LOADING_TIMEOUT"),C.MODEL_LOADING_TIMEOUT);let Te=new TextDecoder,X="",ce,oe,M="",Ce=!1,le,ie,L="",$=!1,P=null,Re=E=>{if($)return;let I=E.endsWith("\r")?E.slice(0,-1):E;if(I.startsWith("id: ")){ie=I.slice(4);return}if(!I.startsWith("data: "))return;let A=I.slice(6);if(A==="[DONE]"){R("[DONE]"),$=!0;return}try{let g=JSON.parse(A);R(g),g.type==="done"&&g.id?(X=g.id,ce=g.truncated===!0):g.type==="aborted"?(oe={id:typeof g.id=="string"?g.id:"",persisted:g.persisted===!0},$=!0):g.type==="error"?(P=new m(g.code||"INTERNAL_ERROR",g.message||"Generation failed",Array.isArray(g.matched_words)?g.matched_words:void 0),$=!0):g.type==="state"?(T.onState?.(g.delta,g.full??null),Array.isArray(g.createdNames)&&g.createdNames.length&&T.onCreatedCharacters?.(g.createdNames)):g.type==="start"?typeof g.base_content=="string"&&u?.(g.base_content):g.type==="thinking"?(g.status==="start"||g.status==="end")&&T.onThinking?.(g.status):g.content&&(Ce?(k!==null&&clearTimeout(k),k=setTimeout(()=>re("STREAM_INACTIVITY"),C.STREAM_INACTIVITY_TIMEOUT)):(Ce=!0,b!==null&&(clearTimeout(b),b=null),k=setTimeout(()=>re("STREAM_INACTIVITY"),C.STREAM_INACTIVITY_TIMEOUT)),M+=g.content,T.onChunk(g.content))}catch{R({raw:A})}ie!==void 0&&(le=ie,ie=void 0)},we=()=>{if(D(),P)throw w(),S(P.code,P.message,P.matchedWords),this.log({method:"STREAM",path:e,body:t,error:P,durationMs:Date.now()-f,modelName:i?.modelName}),P;this.debug&&(console.groupCollapsed(`%c[Storvia SDK] %cSTREAM ${e} [${O.status}]${h} (${Date.now()-f}ms) %c\u2713`,"color: #6366f1; font-weight: bold","color: #e0e0e0","color: #22c55e"),console.log("Request:",t),console.log(`Accumulated content (${M.length} chars):`,M),console.log("Message ID:",X),oe&&console.log("Aborted:",oe),console.log(`SSE events (${v.length}):`,v),console.groupEnd()),F(T,{messageId:X,truncated:ce,aborted:oe})};try{for(;;){let{done:E,value:I}=await Ee.read();if(E)break;L+=Te.decode(I,{stream:!0});let A=L.split(`
121
- `);L=A.pop()??"";for(let g of A)Re(g);if($){we();return}}if(L+=Te.decode(),L&&Re(L),$){we();return}}catch(E){if(D(),P)throw P;if(_){let I=new m(_,_==="MODEL_LOADING_TIMEOUT"?"Model loading timed out":"Stream inactivity timed out");throw S(_),this.debug&&(console.groupCollapsed(`%c[Storvia SDK] %cSTREAM ${e} [${O.status}]${h} (${Date.now()-f}ms) %c\u2717 ${_}`,"color: #6366f1; font-weight: bold","color: #e0e0e0","color: #ef4444"),console.log("Request:",t),console.log(`Accumulated content (${M.length} chars):`,M),console.log(`SSE events (${v.length}):`,v),console.error("Timeout:",I),console.groupEnd()),w(),I}if(this.debug&&(console.groupCollapsed(`%c[Storvia SDK] %cSTREAM ${e} [${O.status}]${h} (${Date.now()-f}ms) %c\u2717`,"color: #6366f1; font-weight: bold","color: #e0e0e0","color: #ef4444"),console.log("Request:",t),console.log(`Accumulated content (${M.length} chars):`,M),console.log(`SSE events (${v.length}):`,v),console.error("Stream error:",E),console.groupEnd()),a){await this.resumeLoop(a,le,T,{finalize:!0});return}throw w(),E}if(D(),X){F(T,{messageId:X,truncated:ce});return}if(a){await this.resumeLoop(a,le,T,{finalize:!0});return}w()}async resumeLoop(e,t,n,r){let i=t;for(let c=1;c<=C.RECONNECT_MAX_ATTEMPTS;c++){let d=Math.min(C.RECONNECT_BACKOFF_CAP,1e3*2**(c-1));await new Promise(p=>setTimeout(p,d)),n.onReconnect?.({attempt:c});let a={messageId:"",lastId:i},l;try{l=await this.pumpGetStream(e.conversationId,e.topic,i,a,n)}catch{continue}if(i=a.lastId??i,l==="done"){if(a.errorCode)throw this.terminalError(a);F(n,a);return}if(l==="inactive"){(a.messageId||r?.finalize)&&F(n,a);return}}let s=new m("STREAM_INTERRUPTED","Stream reconnection failed after maximum attempts");throw S("STREAM_INTERRUPTED"),s}async resumeStream(e,t,n){let{cbs:r}=ge(n),i={messageId:""},s;try{s=await this.pumpGetStream(e,t,void 0,i,r)}catch{await this.resumeLoop({conversationId:e,topic:t},i.lastId,r);return}if(s==="done"){if(i.errorCode)throw this.terminalError(i);F(r,i);return}if(s==="inactive"){i.messageId&&F(r,i);return}await this.resumeLoop({conversationId:e,topic:t},i.lastId,r)}terminalError(e){let t=new m(e.errorCode??"INTERNAL_ERROR",e.errorMessage||"Generation failed",e.errorMatchedWords);return S(t.code,t.message,t.matchedWords),t}async pumpGetStream(e,t,n,r,i){let s=new URL(`${this.baseUrl}/conversations/${encodeURIComponent(e)}/stream`);n&&s.searchParams.set("from",n),t&&s.searchParams.set("topic",t);let c=new AbortController,d=setTimeout(()=>c.abort(),C.REQUEST_TIMEOUT),a;try{a=await fetch(s.toString(),{method:"GET",headers:this.buildHeaders(),signal:c.signal})}finally{clearTimeout(d)}if(!a.ok)throw new m("STREAM_INTERRUPTED",`Resume HTTP ${a.status}`);if(!(a.headers.get("content-type")||"").includes("text/event-stream"))return"inactive";let p=a.body?.getReader();return p?await this.pumpReader(p,r,i):"inactive"}async pumpReader(e,t,n){let r=new TextDecoder,i,s=null,c=()=>{s&&clearTimeout(s),s=setTimeout(()=>{e.cancel().catch(()=>{})},C.STREAM_INACTIVITY_TIMEOUT)};c();let d="",a=!1,l=p=>{if(a)return;let u=p.endsWith("\r")?p.slice(0,-1):p;if(u.startsWith("id: ")){i=u.slice(4);return}if(!u.startsWith("data: "))return;let f=u.slice(6);if(f==="[DONE]"){a=!0;return}try{let h=JSON.parse(f);h.type==="done"&&h.id?(t.messageId=h.id,t.truncated=h.truncated===!0):h.type==="aborted"?(t.aborted={id:typeof h.id=="string"?h.id:"",persisted:h.persisted===!0},a=!0):h.type==="error"?(t.errorCode=h.code||"INTERNAL_ERROR",t.errorMessage=h.message||"Generation failed",Array.isArray(h.matched_words)&&(t.errorMatchedWords=h.matched_words),a=!0):h.type==="state"?(n.onState?.(h.delta,h.full??null),Array.isArray(h.createdNames)&&h.createdNames.length&&n.onCreatedCharacters?.(h.createdNames)):h.type==="start"?typeof h.base_content=="string"&&n.onBase?.(h.base_content):h.type==="thinking"?(h.status==="start"||h.status==="end")&&n.onThinking?.(h.status):h.content&&n.onChunk(h.content)}catch{}i!==void 0&&(t.lastId=i,i=void 0)};try{for(;;){let{done:p,value:u}=await e.read();if(p)break;c(),d+=r.decode(u,{stream:!0});let f=d.split(`
122
- `);d=f.pop()??"";for(let h of f)l(h);if(a)return s&&clearTimeout(s),"done"}if(d+=r.decode(),d&&l(d),a)return s&&clearTimeout(s),"done"}catch{}finally{s&&clearTimeout(s)}return"eof"}async handleResponseWithRaw(e){let t=await e.text(),n;try{n=t?JSON.parse(t):null}catch{n=t}if(!e.ok){let r=n&&typeof n=="object"?n:{},i={401:"UNAUTHORIZED",402:"INSUFFICIENT_CREDITS",429:"RATE_LIMITED"},s=r.code||i[e.status]||"INTERNAL_ERROR",c=Array.isArray(r.matched_words)?r.matched_words:void 0,d=new m(s,r.message||`HTTP ${e.status}`,c);throw S(s,r.message,c),d}return n&&typeof n=="object"&&"data"in n?{raw:n,data:n.data}:{raw:n,data:n}}};C.REQUEST_TIMEOUT=6e4,C.MODEL_LOADING_TIMEOUT=18e4,C.STREAM_INACTIVITY_TIMEOUT=6e4,C.RECONNECT_MAX_ATTEMPTS=10,C.RECONNECT_BACKOFF_CAP=15e3;var ee=C;function ut(){if(typeof crypto<"u"&&typeof crypto.randomUUID=="function")return crypto.randomUUID();let o=new Uint8Array(16);crypto.getRandomValues(o),o[6]=o[6]&15|64,o[8]=o[8]&63|128;let e=Array.from(o,t=>t.toString(16).padStart(2,"0")).join("");return`${e.slice(0,8)}-${e.slice(8,12)}-${e.slice(12,16)}-${e.slice(16,20)}-${e.slice(20)}`}var Le=20,$e=40,W=class{constructor(e,t,n,r,i=!1,s,c,d){this.http=e;this.getGameId=t;this.getConversationId=n;this.getModelId=r;this.isPreview=i;this.previewHistory=[];this.previewConfig=s,this.getModelName=c,this.getPreset=d}reqMeta(){let e=this.getModelName?.();return e?{modelName:e}:void 0}updatePreviewConfig(e){this.previewConfig=e}async send(e){if(this.isPreview)return this.sendPreview(e);let t={game_id:this.getGameId(),conversation_id:this.getConversationId(),model_id:this.getModelId(),message:e.message,topic:e.topic,scene_key:e.sceneKey,extract:e.extract,stream:e.stream??!1,preset:this.getPreset?.(),client_message_uuid:ut()};if(e.stream){await this.http.stream("/chat",t,e.onChunk??(()=>{}),e.onDone??(()=>{}),this.reqMeta(),V(e.onState),e.onThinking,e.onCreatedCharacters,{conversationId:this.getConversationId(),topic:e.topic},e.onReconnecting,e.onAborted);return}return this.http.post("/chat",t,this.reqMeta())}async save(e){return this.isPreview?{id:`preview-${Date.now()}`}:this.http.post("/messages/save",{conversation_id:this.getConversationId(),role:e.role,content:e.content,topic:e.topic})}async generate(e){if(this.isPreview)return this.sendPreview({message:"",topic:e.topic,sceneKey:e.sceneKey,stream:e.stream,onChunk:e.onChunk,onDone:e.onDone,onState:e.onState,onThinking:e.onThinking,onCreatedCharacters:e.onCreatedCharacters});let t={conversation_id:this.getConversationId(),model_id:this.getModelId(),topic:e.topic,scene_key:e.sceneKey,extract:e.extract,stream:e.stream??!1,preset:this.getPreset?.()};if(e.stream){await this.http.stream("/generate",t,e.onChunk??(()=>{}),e.onDone??(()=>{}),this.reqMeta(),V(e.onState),e.onThinking,e.onCreatedCharacters,{conversationId:this.getConversationId(),topic:e.topic},e.onReconnecting,e.onAborted);return}return this.http.post("/generate",t,this.reqMeta())}async retry(e={}){if(this.isPreview)throw new m("NOT_SUPPORTED_IN_PREVIEW","storvia.chat.retry() is not available in preview mode. Publish the game and test on the Storvia platform.");let t={conversation_id:this.getConversationId(),model_id:this.getModelId(),topic:e.topic,scene_key:e.sceneKey,extract:e.extract,stream:e.stream??!1,preset:this.getPreset?.()};if(e.stream){await this.http.stream("/retry",t,e.onChunk??(()=>{}),e.onDone??(()=>{}),this.reqMeta(),V(e.onState),e.onThinking,e.onCreatedCharacters,{conversationId:this.getConversationId(),topic:e.topic},e.onReconnecting,e.onAborted);return}return this.http.post("/retry",t,this.reqMeta())}async continue(e={}){if(this.isPreview)return;let t={conversation_id:this.getConversationId(),topic:e.topic??null,game_id:this.getGameId(),preset:this.getPreset?.(),scene_key:e.sceneKey,extract:e.extract};await this.http.stream("/continue",t,e.onChunk??(()=>{}),e.onDone??(()=>{}),this.reqMeta(),V(e.onState),e.onThinking,e.onCreatedCharacters,{conversationId:this.getConversationId(),topic:e.topic},e.onReconnecting,e.onAborted,e.onBase)}async cancel(e={}){if(this.isPreview)return{active:!1};let t=await this.http.post(`/conversations/${encodeURIComponent(this.getConversationId())}/cancel`,{topic:e.topic});return{active:t.active===!0,generationId:t.generation_id}}async messages(e){if(this.isPreview)return{data:[],hasMore:!1,nextCursor:null};let t={conversation_id:this.getConversationId(),order:e.order,limit:String(e.limit??20)};e.topic&&(t.topic=e.topic),e.cursor&&(t.cursor_uuid=e.cursor.uuid,t.cursor_created_at=e.cursor.createdAt);let n=await this.http.get("/messages",t);return{data:n.messages.map(r=>({uuid:r.uuid,role:r.role,content:r.content,topic:r.topic,status:r.status,model:r.model,createdAt:r.created_at,truncated:r.truncated===!0})),hasMore:n.has_more,nextCursor:n.next_cursor?{uuid:n.next_cursor.cursor_uuid,createdAt:n.next_cursor.cursor_created_at}:null}}async edit(e){if(this.isPreview)throw new m("NOT_SUPPORTED_IN_PREVIEW","storvia.chat.edit() is not available in preview mode. Publish the game and test on the Storvia platform.");let t=await this.http.patch(`/messages/${encodeURIComponent(e.uuid)}`,{content:e.content});return{uuid:t.uuid,role:t.role,content:t.content,updatedAt:t.updated_at}}async delete(e){if(this.isPreview)throw new m("NOT_SUPPORTED_IN_PREVIEW","storvia.chat.delete() is not available in preview mode. Publish the game and test on the Storvia platform.");return{uuid:(await this.http.delete(`/messages/${encodeURIComponent(e.uuid)}`)).uuid}}async rollback(e){if(this.isPreview)throw new m("NOT_SUPPORTED_IN_PREVIEW","storvia.chat.rollback() is not available in preview mode. Publish the game and test on the Storvia platform.");let t=await this.http.post(`/messages/${encodeURIComponent(e.uuid)}/rollback`,{});return{deletedCount:t.deleted_count,deletedUuids:t.deleted_uuids,restoredGameState:t.restored_game_state}}async resume(e={}){this.isPreview||await this.http.resumeStream(this.getConversationId(),e.topic,{onChunk:e.onChunk??(()=>{}),onDone:e.onDone??(()=>{}),onState:V(e.onState),onThinking:e.onThinking,onCreatedCharacters:e.onCreatedCharacters,onReconnect:e.onReconnecting,onAborted:e.onAborted})}async sendPreview(e){let t=e.message.trim().length>0,n=this.previewHistory.slice(t?-(Le-1):-Le);t&&this.pushPreviewHistory({role:"user",content:e.message});let r={model_id:this.getModelId(),message:e.message,topic:e.topic,scene_key:e.sceneKey,history_messages:n,preset:this.getPreset?.()};this.previewConfig?r.prompt_config=this.previewConfig:r.game_id=this.getGameId();let i=this.previewConfig;if(i?.reply_length&&(r.reply_length=i.reply_length),i?.reply_language&&(r.reply_language=i.reply_language),e.stream){let p="";await this.http.stream("/preview",r,u=>{p+=u,e.onChunk?.(u)},(u,f)=>{p&&this.pushPreviewHistory({role:"assistant",content:p}),e.onDone?.(u,f)},this.reqMeta(),V(e.onState),e.onThinking,e.onCreatedCharacters);return}let s="",c=null,d=null,a=[];await this.http.stream("/preview",r,p=>{s+=p},()=>{},this.reqMeta(),(p,u)=>{c=p,d=u,e.onState&&e.onState(c,d)},void 0,p=>{a=p,e.onCreatedCharacters&&e.onCreatedCharacters(p)}),s&&this.pushPreviewHistory({role:"assistant",content:s});let l={id:"",content:s,truncated:!1};return c&&(l.delta=c,d&&(l.full=d)),a.length&&(l.createdNames=a),l}pushPreviewHistory(e){this.previewHistory.push(e),this.previewHistory.length>$e&&this.previewHistory.splice(0,this.previewHistory.length-$e)}};function V(o){if(o)return(e,t)=>o(e,t)}var me=class{constructor(e,t,n=!1,r){this.http=e;this.getConversationId=t;this.isPreview=n;this.mem={};r&&(this.mem={...r})}setInitial(e){this.mem=e?{...e}:{}}async get(e,t){if(this.isPreview){let r=this.mem[e]||{};return t?{...r[t]||{}}:{...r}}let n=t?{group:t}:void 0;return this.http.get(`/conversations/${this.getConversationId()}/characters/${encodeURIComponent(e)}/state`,n)}async update(e,t,n){if(this.isPreview){let r=this.mem[e]||(this.mem[e]={});r[t]={...r[t]||{},...n};return}await this.http.patch(`/conversations/${this.getConversationId()}/characters/${encodeURIComponent(e)}/state`,{group:t,values:n})}},H=class{constructor(e,t,n=!1,r,i){this.http=e;this.getConversationId=t;this.isPreview=n;this.mem=[];r&&(this.mem=r.map(Ge)),this.state=new me(e,t,n,i)}setInitial(e,t){this.mem=e?e.map(Ge):[],this.state.setInitial(t)}async list(){return this.isPreview?this.mem.map(Fe):this.http.get(`/conversations/${this.getConversationId()}/characters`)}async get(e){if(this.isPreview){let t=this.mem.find(n=>n.name===e);return t?Fe(t):{name:e}}return this.http.get(`/conversations/${this.getConversationId()}/characters/${encodeURIComponent(e)}`)}async add(e){if(this.isPreview){this.mem.push({...e,isPreset:!1});return}await this.http.post(`/conversations/${this.getConversationId()}/characters`,e)}async update(e,t){if(this.isPreview){let n=this.mem.find(r=>r.name===e);n&&Object.assign(n,t);return}await this.http.patch(`/conversations/${this.getConversationId()}/characters/${encodeURIComponent(e)}`,t)}async remove(e){if(this.isPreview){this.mem=this.mem.filter(t=>t.name!==e);return}await this.http.delete(`/conversations/${this.getConversationId()}/characters/${encodeURIComponent(e)}`)}async merge(e,t){if(this.isPreview){if(this.mem.find(r=>r.name===e)?.isPreset)throw new m("INVALID_REQUEST","\u9884\u8BBE\u89D2\u8272\u4E0D\u53EF\u88AB\u5408\u5E76");if(e===t||!this.mem.some(r=>r.name===t))throw new m("INVALID_REQUEST","\u76EE\u6807\u89D2\u8272\u4E0D\u5B58\u5728\u6216\u4E0E\u6765\u6E90\u76F8\u540C");this.mem=this.mem.filter(r=>r.name!==e);return}await this.http.post(`/conversations/${this.getConversationId()}/characters/${encodeURIComponent(e)}/merge`,{target:t})}async detail(e){if(this.isPreview){let t=this.mem.find(n=>n.name===e);return{name:e,avatar:t?.avatar,description:t?.description,...t?.introduction!==void 0?{introduction:t.introduction}:{},...t?.visibleAtStart!==void 0?{visibleAtStart:t.visibleAtStart}:{},userDescription:t?.userDescription,...t?.gender?{gender:t.gender}:{},...t?.isPreset!==void 0?{isPreset:t.isPreset}:{},state:await this.state.get(e)}}return this.http.get(`/conversations/${this.getConversationId()}/characters/${encodeURIComponent(e)}/detail`)}async setPriority(e,t){let n=Math.max(0,Math.min(100,Math.round(t)));this.isPreview||await this.http.patch(`/conversations/${this.getConversationId()}/characters/${encodeURIComponent(e)}/state`,{priority:n})}};function Ge(o){return{name:o.name,description:o.description,avatar:o.avatar,...o.introduction!==void 0?{introduction:o.introduction}:{},...o.visibleAtStart!==void 0?{visibleAtStart:o.visibleAtStart}:{},...o.gender?{gender:o.gender}:{},...o.userDescription!==void 0?{userDescription:o.userDescription}:{},...o.isPreset!==void 0?{isPreset:o.isPreset}:{}}}function Fe(o){return{name:o.name,avatar:o.avatar,description:o.description,...o.introduction!==void 0?{introduction:o.introduction}:{},...o.visibleAtStart!==void 0?{visibleAtStart:o.visibleAtStart}:{},...o.userDescription!==void 0?{userDescription:o.userDescription}:{},...o.gender?{gender:o.gender}:{},...o.isPreset!==void 0?{isPreset:o.isPreset}:{}}}var B=class{constructor(e,t,n=!1,r){this.http=e;this.getConversationId=t;this.isPreview=n;this.mem=[];r&&(this.mem=r.map(i=>({...i})))}setInitial(e){this.mem=e?e.map(t=>({...t})):[]}async list(){return this.isPreview?[...this.mem]:this.http.get(`/conversations/${this.getConversationId()}/relationships`)}async get(e,t){if(this.isPreview){let n=this.mem.find(r=>r.from===e&&r.to===t);if(n)return{...n};throw new Error("Relationship not found")}return this.http.get(`/conversations/${this.getConversationId()}/relationships/${encodeURIComponent(e)}/${encodeURIComponent(t)}`)}async add(e){if(this.isPreview){this.mem.push({...e});return}await this.http.post(`/conversations/${this.getConversationId()}/relationships`,e)}async update(e,t,n){if(this.isPreview){let r=this.mem.find(i=>i.from===e&&i.to===t);r?Object.assign(r,n):this.mem.push({from:e,to:t,...n});return}await this.http.patch(`/conversations/${this.getConversationId()}/relationships/${encodeURIComponent(e)}/${encodeURIComponent(t)}`,n)}async remove(e,t){if(this.isPreview){this.mem=this.mem.filter(n=>!(n.from===e&&n.to===t));return}await this.http.delete(`/conversations/${this.getConversationId()}/relationships/${encodeURIComponent(e)}/${encodeURIComponent(t)}`)}};function Ve(o){let e={count:o.count};return o.desc!==void 0&&(e.desc=o.desc),o.icon_url!==void 0&&(e.iconUrl=o.icon_url),e}function fe(o){let e={};if(!o)return e;for(let[t,n]of Object.entries(o)){let r={};for(let[i,s]of Object.entries(n))r[i]=Ve(s);e[t]=r}return e}function pt(o){let e={};if(!o)return e;for(let[t,n]of Object.entries(o))e[t]=Ve(n);return e}var j=class{constructor(e,t,n=!1,r){this.http=e;this.getConversationId=t;this.isPreview=n;this.mem={};r&&(this.mem=fe(r))}setInitial(e){this.mem=e?fe(e):{}}async list(e){if(this.isPreview){if(e!==void 0)return{...this.mem[e]||{}};let n={};for(let[r,i]of Object.entries(this.mem))n[r]={...i};return n}if(e!==void 0){let n=await this.http.get(`/conversations/${this.getConversationId()}/inventory/${encodeURIComponent(e)}`);return pt(n)}let t=await this.http.get(`/conversations/${this.getConversationId()}/inventory`);return fe(t)}async add(e){let{group:t,name:n,count:r=1,desc:i,iconUrl:s}=e;if(this.isPreview){if(!this.mem[t])throw new Error(`Group "${t}" does not exist`);if(n in this.mem[t])throw new Error(`Item "${n}" already exists in group "${t}"`);let d={count:r};i!==void 0&&(d.desc=i),s!==void 0&&(d.iconUrl=s),this.mem[t][n]=d;return}let c={group:t,name:n,count:r};i!==void 0&&(c.desc=i),s!==void 0&&(c.icon_url=s),await this.http.post(`/conversations/${this.getConversationId()}/inventory`,c)}async update(e){let{group:t,name:n,count:r,desc:i,iconUrl:s}=e;if(this.isPreview){let d=this.mem[t];if(!d||!(n in d))throw new Error(`Item "${t}/${n}" not found`);let a=d[n];r!==void 0&&(a.count=r),i!==void 0&&(a.desc=i),s!==void 0&&(a.iconUrl=s);return}let c={};r!==void 0&&(c.count=r),i!==void 0&&(c.desc=i),s!==void 0&&(c.icon_url=s),await this.http.patch(`/conversations/${this.getConversationId()}/inventory/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,c)}async remove(e){let{group:t,name:n}=e;if(this.isPreview){this.mem[t]&&delete this.mem[t][n];return}await this.http.delete(`/conversations/${this.getConversationId()}/inventory/${encodeURIComponent(t)}/${encodeURIComponent(n)}`)}async removeBatch(e){if(this.isPreview){for(let{group:t,name:n}of e)this.mem[t]&&delete this.mem[t][n];return}e.length!==0&&await this.http.post(`/conversations/${this.getConversationId()}/inventory/batch-delete`,{items:e})}async move(e){let{fromGroup:t,toGroup:n,name:r,newName:i}=e;if(this.isPreview){let s=this.mem[t];if(!s||!(r in s))throw new Error(`Source item "${t}/${r}" not found`);if(!this.mem[n])throw new Error(`Target group "${n}" does not exist`);let c=i||r;if(t===n&&c===r)return;if(c in this.mem[n])throw new Error(`Item "${c}" already exists in target group`);this.mem[n][c]=s[r],delete s[r];return}await this.http.post(`/conversations/${this.getConversationId()}/inventory/move`,{fromGroup:t,toGroup:n,name:r,newName:i})}async ensureGroup(e){if(this.isPreview){this.mem[e]||(this.mem[e]={});return}await this.http.post(`/conversations/${this.getConversationId()}/inventory/groups/${encodeURIComponent(e)}`,{})}async removeGroup(e,t){let n=t?.cascade??!1;if(this.isPreview){let i=this.mem[e];if(i&&Object.keys(i).length>0&&!n)throw new Error(`Group "${e}" is not empty, pass cascade: true to force delete`);delete this.mem[e];return}let r=n?"?cascade=true":"";await this.http.delete(`/conversations/${this.getConversationId()}/inventory/groups/${encodeURIComponent(e)}${r}`)}};var K=class{constructor(e,t,n=!1,r){this.http=e;this.getConversationId=t;this.isPreview=n;this.mem={};r&&(this.mem={...r})}setInitial(e){this.mem=e?{...e}:{}}async get(){return this.isPreview?{...this.mem}:this.http.get(`/conversations/${this.getConversationId()}/world`)}async update(e){if(this.isPreview){Object.assign(this.mem,e);return}await this.http.patch(`/conversations/${this.getConversationId()}/world`,e)}};var ve=class{constructor(e,t,n=!1,r){this.http=e;this.getConversationId=t;this.isPreview=n;this.mem={};r&&(this.mem={...r})}setInitial(e){this.mem=e?{...e}:{}}async get(e){if(this.isPreview)return e?{...this.mem[e]||{}}:{...this.mem};let t=e?{group:e}:void 0;return this.http.get(`/conversations/${this.getConversationId()}/player/state`,t)}async update(e,t){if(this.isPreview){this.mem[e]={...this.mem[e]||{},...t};return}await this.http.patch(`/conversations/${this.getConversationId()}/player/state`,{group:e,values:t})}},Y=class{constructor(e,t,n=!1,r,i){this.http=e;this.getConversationId=t;this.isPreview=n;this.memPersona={name:""};r&&(this.memPersona={...r}),this.state=new ve(e,t,n,i)}setInitial(e,t){this.memPersona=e?{...e}:{name:""},this.state.setInitial(t)}async get(){return this.isPreview?{...this.memPersona}:this.http.get(`/conversations/${this.getConversationId()}/player`)}async update(e){if(this.isPreview){Object.assign(this.memPersona,e);return}await this.http.patch(`/conversations/${this.getConversationId()}/player`,e)}};function q(o,e){if(!e)return o;let t=o.includes("?")?"&":"?";return`${o}${t}game_id=${encodeURIComponent(e)}`}var z=class{constructor(e,t,n,r=!1,i,s){this.http=e;this.getConversationId=t;this.getGameId=n;this.isPreview=r;this.mem={};this.memInject={};i&&(this.mem=We(i)),s&&(this.memInject={...s})}setInitial(e,t){this.mem=e?We(e):{},this.memInject=t?{...t}:{}}async get(e){if(this.isPreview)return e!==void 0?this.mem[e]:{...this.mem};let t=await this.http.get(q(`/conversations/${this.getConversationId()}/custom`,this.getGameId()));return e!==void 0?t[e]:t}async set(e,t){if(this.isPreview){for(let[r,i]of Object.entries(e))typeof i=="object"&&i!==null&&typeof this.mem[r]=="object"&&this.mem[r]!==null?this.mem[r]={...this.mem[r],...i}:this.mem[r]=i,t?.inject!==void 0&&(this.memInject[r]=t.inject);return}let n=t?.inject!==void 0?{data:e,inject:t.inject}:e;await this.http.patch(q(`/conversations/${this.getConversationId()}/custom`,this.getGameId()),n)}async setInject(e,t){if(this.isPreview){this.memInject[e]=t;return}await this.http.patch(q(`/conversations/${this.getConversationId()}/custom/inject/${encodeURIComponent(e)}`,this.getGameId()),{inject:t})}getInject(){return{...this.memInject}}async delete(e){if(this.isPreview){delete this.mem[e],delete this.memInject[e];return}await this.http.delete(q(`/conversations/${this.getConversationId()}/custom/${encodeURIComponent(e)}`,this.getGameId()))}async setGroupField(e,t,n){if(this.isPreview){(!this.mem[e]||typeof this.mem[e]!="object")&&(this.mem[e]={}),this.mem[e][t]=n;return}await this.http.patch(q(`/conversations/${this.getConversationId()}/custom/${encodeURIComponent(e)}/${encodeURIComponent(t)}`,this.getGameId()),{value:n})}async deleteGroupField(e,t){if(this.isPreview){if(typeof this.mem[e]=="object"&&this.mem[e]!==null){let n=this.mem[e];delete n[t]}return}await this.http.delete(q(`/conversations/${this.getConversationId()}/custom/${encodeURIComponent(e)}/${encodeURIComponent(t)}`,this.getGameId()))}};function We(o){let e={};for(let[t,n]of Object.entries(o))typeof n=="object"&&n!==null&&!Array.isArray(n)?e[t]={...n}:e[t]=n;return e}function He(o,e){if(!e)return o;let t=o.includes("?")?"&":"?";return`${o}${t}game_id=${encodeURIComponent(e)}`}var Q=class{constructor(e,t,n,r=!1,i){this.http=e;this.getConversationId=t;this.getGameId=n;this.isPreview=r;this.mem={};i&&(this.mem={...i})}setInitial(e){this.mem=e?{...e}:{}}async get(){return this.isPreview?{...this.mem}:await this.http.get(He(`/conversations/${this.getConversationId()}/save`,this.getGameId()))}async set(e){if(this.isPreview){this.mem={...e};return}await this.http.put(He(`/conversations/${this.getConversationId()}/save`,this.getGameId()),e)}};var te=class{constructor(e,t,n=!1){this.http=e;this.getConversationId=t;this.isPreview=n}async get(){if(this.isPreview)throw new m("NOT_SUPPORTED_IN_PREVIEW","storvia.state.get() is not available in preview mode. Publish the game and test on the Storvia platform. (Use per-module get() like storvia.world.get() if you need to inspect state during preview.)");return this.http.get(`/conversations/${this.getConversationId()}/state`)}};var Z=class{constructor(e,t,n=!1){this.http=e;this.getConversationId=t;this.isPreview=n;this.mem=null}async get(){return this.isPreview?this.mem?{...this.mem}:null:(await this.http.get(`/conversations/${this.getConversationId()}/summary`)).ai_summary}async update(e){let t=(e??"").trim();if(this.isPreview){let r={content:t,updated_at:new Date().toISOString()};return this.mem=r,{...r}}return(await this.http.patch(`/conversations/${this.getConversationId()}/summary`,{content:t})).ai_summary}};var Be="/functions/v1/world-engine/v1",gt="https://api.storvia.ai";function mt(){return window.__STORVIA__||{}}function ft(o,e=3e4){let t=mt();return t.apiBase?Promise.resolve(t):new Promise((n,r)=>{let i=setTimeout(()=>{s(),c(),r(new m("NOT_INITIALIZED","Timed out waiting for __STORVIA__ config from parent frame."))},e),s=o.on("init",a=>{a.payload?.apiBase&&d({apiBase:a.payload.apiBase,gameId:a.payload.gameId,conversationId:a.payload.conversationId,accessToken:a.payload.accessToken,selectedModelId:a.payload.selectedModelId,lang:a.payload.lang,debug:a.payload.debug})}),c=o.on("preview-init",a=>{a.payload?.apiBase&&d(a.payload)});function d(a){clearTimeout(i),s(),c();let l=window;l.__STORVIA__=a,n(a)}o.send(y("ready",{}))})}var ne=class{constructor(){this.baseUrl="";this.gameId="";this.conversationId="";this.modelId="";this.models=[];this.presetId="";this.accessToken="";this.initialized=!1;this.isPreview=!1;this.previewConfig=void 0}async init(){if(this.initialized)return;let e=window.flutter_inappwebview,t=typeof e?.callHandler=="function";this.bus=new x({incoming:window,outgoing:()=>t?null:window.parent,verifySource:t?u=>u.source===null||u.source===window:u=>u.source===window.parent,customSend:t?u=>e.callHandler("storviaBus",u):void 0}),Me(u=>this.bus.send(u));let n=await ft(this.bus),r=n.apiBase;if(!r)throw new m("NOT_INITIALIZED","window.__STORVIA__.apiBase is not set. The platform must inject it before SDK init.");if(this.baseUrl=`${r}${Be}`,this.isPreview=!!n.preview,this.previewConfig=n.previewConfig,!n.gameId)throw new m("GAME_NOT_FOUND","window.__STORVIA__.gameId is not set. The platform must inject it before SDK init.");if(this.gameId=n.gameId,!n.accessToken)throw new m("UNAUTHORIZED","window.__STORVIA__.accessToken is not set. The platform must inject the user token before SDK init.");if(this.accessToken=n.accessToken,Pe(n.lang),this.http=new ee(this.baseUrl,this.accessToken,!!n.debug),this.isPreview){this.conversationId="00000000-0000-0000-0000-000000000000";let[u,f]=await Promise.all([this.fetchModels(),this.fetchPreviewSnapshot()]);this.models=u,this.modelId=(n.selectedModelId&&u.some(U=>U.id===n.selectedModelId)?n.selectedModelId:"")||u[0]?.id||"",this.presetId=n.presetId||"";let h=()=>this.gameId,v=()=>this.conversationId,R=()=>this.modelId,T=()=>this.models.find(U=>U.id===this.modelId)?.name,w=()=>this.presetId||void 0;this.chat=new W(this.http,h,v,R,!0,this.previewConfig,T,w),this.characters=new H(this.http,v,!0,f?.characters,f?.characterStates),this.relationships=new B(this.http,v,!0,f?.relationships),this.inventory=new j(this.http,v,!0,f?.inventory),this.world=new K(this.http,v,!0,f?.world),this.player=new Y(this.http,v,!0,f?.player,f?.playerState),this.custom=new z(this.http,v,h,!0,f?.custom,f?.custom_inject),this.save=new Q(this.http,v,h,!0,f?.save_data),this.state=new te(this.http,v,!0),this.memory=new Z(this.http,v,!0),this.initialized=!0,this.listenForPreviewMessages(),this.listenForTokenUpdate();return}this.conversationId=n.conversationId??"";let[i,s]=await Promise.all([this.authenticate(),this.fetchModels()]);this.conversationId=i.conversationId,this.models=s,this.modelId=(n.selectedModelId&&s.some(u=>u.id===n.selectedModelId)?n.selectedModelId:"")||s[0]?.id||"",this.presetId=n.presetId||"";let c=()=>this.gameId,d=()=>this.conversationId,a=()=>this.modelId,l=()=>this.models.find(u=>u.id===this.modelId)?.name,p=()=>this.presetId||void 0;this.chat=new W(this.http,c,d,a,!1,void 0,l,p),this.characters=new H(this.http,d),this.relationships=new B(this.http,d),this.inventory=new j(this.http,d),this.world=new K(this.http,d),this.player=new Y(this.http,d),this.custom=new z(this.http,d,c),this.save=new Q(this.http,d,c),this.state=new te(this.http,d),this.memory=new Z(this.http,d),this.listenForTokenUpdate(),this.listenForModelChange(),this.initialized=!0}listenForModelChange(){this.bus.on("set-model",e=>{let t=e.payload?.modelId||"";t&&(this.modelId=t)}),this.bus.on("set-preset",e=>{this.presetId=e.payload?.presetId||""})}listenForTokenUpdate(){this.bus.on("token-update",e=>{let t=e.payload?.accessToken;typeof t!="string"||!t||(this.accessToken=t,this.http?.setToken(t))})}listenForPreviewMessages(){this.bus.on("set-model",e=>{this.modelId=e.payload.modelId||""}),this.bus.on("set-preset",e=>{this.presetId=e.payload?.presetId||""}),this.bus.on("config-update",e=>{this.previewConfig=e.payload.previewConfig,this.chat&&this.chat.updatePreviewConfig(this.previewConfig),this.refreshPreviewSnapshot().catch(t=>{console.warn("[Storvia SDK] refreshPreviewSnapshot failed:",t)})})}async fetchPreviewSnapshot(){try{let e={game_id:this.gameId};return this.previewConfig&&("game_config"in this.previewConfig&&(e.game_config=this.previewConfig.game_config),"game_state"in this.previewConfig&&(e.game_state_override=this.previewConfig.game_state)),await this.http.post("/preview/initial-snapshot",e)}catch(e){return console.warn("[Storvia SDK] fetchPreviewSnapshot failed:",e),null}}async refreshPreviewSnapshot(){let e=await this.fetchPreviewSnapshot();e&&(this.characters?.setInitial(e.characters,e.characterStates),this.player?.setInitial(e.player,e.playerState),this.inventory?.setInitial(e.inventory),this.relationships?.setInitial(e.relationships),this.world?.setInitial(e.world),this.custom?.setInitial(e.custom,e.custom_inject),this.save?.setInitial(e.save_data))}async fetchModels(){try{return await this.http.get("/models")}catch{}return[]}async authenticate(){let e={game_id:this.gameId};this.conversationId&&(e.conversation_id=this.conversationId);let t=await fetch(`${this.baseUrl}/auth`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.accessToken}`},body:JSON.stringify(e)});if(!t.ok)throw t.status===401?new m("UNAUTHORIZED","User not authenticated"):t.status===404?new m("GAME_NOT_FOUND","Game not found or not published"):new m("INTERNAL_ERROR",`Auth failed: HTTP ${t.status}`);let n=await t.json();return n.data??n}async initDev(e){if(this.initialized)return;this.baseUrl=`${gt}${Be}`,this.gameId=e.gameId,this.isPreview=!0,this.http=new ee(this.baseUrl,"",!1,e.apiKey);let[t,n]=await Promise.all([this.fetchModels(),this.fetchPreviewSnapshot()]);this.models=t;let r=e.model?t.find(a=>a.name===e.model)?.id??"":"";this.modelId=r||t[0]?.id||"",this.conversationId="00000000-0000-0000-0000-000000000000";let i=()=>this.gameId,s=()=>this.conversationId,c=()=>this.modelId,d=()=>this.models.find(a=>a.id===this.modelId)?.name;this.chat=new W(this.http,i,s,c,!0,void 0,d),this.characters=new H(this.http,s,!0,n?.characters,n?.characterStates),this.relationships=new B(this.http,s,!0,n?.relationships),this.inventory=new j(this.http,s,!0,n?.inventory),this.world=new K(this.http,s,!0,n?.world),this.player=new Y(this.http,s,!0,n?.player,n?.playerState),this.custom=new z(this.http,s,i,!0,n?.custom),this.save=new Q(this.http,s,i,!0,n?.save_data),this.memory=new Z(this.http,s,!0),this.initialized=!0}async getAssets(e,t){let n={asset_type:e};return t&&(n.category=t),(await this.http.get("/assets",n)).map(i=>({id:i.id,name:i.name,url:i.url,assetType:i.asset_type,category:i.category}))}};async function je(o){Ae();let e=new ne;return o?.dev?await e.initDev(o.dev):await e.init(),e}function Ie(o){return typeof o=="object"&&o!==null&&"value"in o&&"type"in o&&(o.type==="number"||o.type==="text")}function Ke(o){return Ie(o)?o.value:o}return Xe(vt);})();
120
+ `;let c=s.querySelector(".storvia-toast-msg");c&&(c.textContent=o);let d=()=>{s.isConnected&&(s.classList.add("leaving"),s.classList.remove("show"),setTimeout(()=>s.remove(),320))};if(n){let a=document.createElement("button");a.type="button",a.className="storvia-toast-action",a.textContent=n.label,a.addEventListener("click",()=>{try{n.onClick()}catch(l){console.error("[Storvia toast] action error:",l)}d()}),s.appendChild(a)}if(i){let a=document.createElement("button");a.type="button",a.className="storvia-toast-close",a.setAttribute("aria-label",de("close")),a.innerHTML='<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="18" y1="6" x2="6" y2="18"/><line x1="6" y1="6" x2="18" y2="18"/></svg>',a.addEventListener("click",d),s.appendChild(a)}r.appendChild(s),requestAnimationFrame(()=>s.classList.add("show")),i||setTimeout(d,t)}function ut(o){let e=o.filter(t=>t).map(t=>`\u300C${t}\u300D`).join("");return de("violationWords").replace("{words}",e)}var pt=3e3,xe={};function Ue(o){let e=Date.now();if(!(e-(xe[o]??0)<pt)){if(xe[o]=e,!pe){console.warn(`[Storvia] navigate \u2192 wallet(${o})\uFF1A\u5F53\u524D\u672A\u68C0\u6D4B\u5230\u5BBF\u4E3B\uFF08dev \u6A21\u5F0F\uFF09\uFF0C\u751F\u4EA7\u73AF\u5883\u7531\u5BBF\u4E3B\u5F39\u5145\u503C\u5F15\u5BFC / \u8DF3\u94B1\u5305\u9875\u3002`);return}try{pe(w("navigate",{target:"wallet",reason:o}))}catch(t){console.error("[Storvia] navigate \u2192 wallet \u901A\u8FC7 bus \u53D1\u9001\u5931\u8D25:",t)}}}function _(o,e,t){if(o==="GENERATION_ABORTED")return;if(o==="INSUFFICIENT_CREDITS")return Ue("insufficient_credits");if(o==="DAISY_CARD_REQUIRED")return Ue("daisy_card_required");let n=o==="VIOLATION_WORD_DETECTED"&&t?.length?ut(t):De(o)||e||de("unknownError");ee(n,o==="RATE_LIMITED"?"warning":"error")}function gt(o,e){let t=e?.tickMs??100,n=e?.baseLagMs??1e3,r=e?.maxLagMs??2500,i=e?.minCharsPerTick??2,s="",c=null,d=0,a=0,l=()=>Math.min(r,Math.max(n,d*1.35)),p=()=>{let y=Math.max(i,Math.ceil(s.length*t/l()));if(y>=s.length)y=s.length;else{let R=s.charCodeAt(y-1);R>=55296&&R<=56319&&y++}let T=s.slice(0,y);s=s.slice(y),T&&o(T)},u=()=>{c=null,p(),s&&(c=setTimeout(u,t))};return{push:y=>{let T=Date.now();if(a>0){let R=Math.min(T-a,r);d=d>0?d*.7+R*.3:R}a=T,s+=y,c===null&&u()},flush:()=>{c!==null&&(clearTimeout(c),c=null),s&&(o(s),s="")},cancel:()=>{c!==null&&(clearTimeout(c),c=null),s=""}}}function ge(o){let e=gt(o.onChunk);return{cbs:{onChunk:n=>e.push(n),onDone:(n,r)=>{e.flush(),o.onDone(n,r)},onAborted:o.onAborted?n=>{e.flush(),o.onAborted(n)}:void 0,onState:o.onState?(n,r)=>{e.flush(),o.onState(n,r)}:void 0,onThinking:o.onThinking?n=>{e.flush(),o.onThinking(n)}:void 0,onCreatedCharacters:o.onCreatedCharacters?n=>{e.flush(),o.onCreatedCharacters(n)}:void 0,onReconnect:o.onReconnect},flush:()=>e.flush()}}function F(o,e){if(e.aborted){if(o.onAborted){o.onAborted(e.aborted);return}o.onDone(e.aborted.id,{truncated:!1});return}o.onDone(e.messageId,e.truncated===void 0?void 0:{truncated:e.truncated})}var C=class C{constructor(e,t,n=!1,r=""){this.baseUrl=e,this.token=t,this.debug=n,this.devApiKey=r}setToken(e){this.token=e}setDebug(e){this.debug=e}maybeShowNetworkToast(e){e instanceof m||_("NETWORK_ERROR")}wrapAbortError(e){if(e instanceof DOMException&&e.name==="AbortError"){let t=new m("REQUEST_TIMEOUT","Request timed out");return _("REQUEST_TIMEOUT"),t}return e}createTimeoutController(){let e=new AbortController,t=setTimeout(()=>e.abort(),C.REQUEST_TIMEOUT);return{controller:e,clear:()=>clearTimeout(t)}}buildHeaders(){let e={"Content-Type":"application/json"};return this.token&&(e.Authorization=`Bearer ${this.token}`),this.devApiKey&&(e["x-api-key"]=this.devApiKey),e}log(e){if(!this.debug)return;let{method:t,path:n,body:r,status:i,rawResponse:s,parsedData:c,error:d,durationMs:a,modelName:l}=e,p="%c[Storvia SDK]",u="color: #6366f1; font-weight: bold",f=a!==void 0?` (${a}ms)`:"",h=i!==void 0?` [${i}]`:"",v=l?` [model: ${l}]`:"";d?(console.groupCollapsed(`${p} %c${t} ${n}${h}${v}${f} %c\u2717`,u,"color: #e0e0e0","color: #ef4444"),r!==void 0&&console.log("Request:",r),s!==void 0&&console.log("Response (raw):",s),console.error("Error:",d),console.groupEnd()):(console.groupCollapsed(`${p} %c${t} ${n}${h}${v}${f} %c\u2713`,u,"color: #e0e0e0","color: #22c55e"),r!==void 0&&console.log("Request:",r),s!==void 0&&console.log("Response (raw):",s),c!==void 0&&c!==s&&console.log("Response (data):",c),console.groupEnd())}async get(e,t){let n=new URL(`${this.baseUrl}${e}`);t&&Object.entries(t).forEach(([a,l])=>n.searchParams.set(a,l));let r=Date.now(),i,s,{controller:c,clear:d}=this.createTimeoutController();try{let a=await fetch(n.toString(),{method:"GET",headers:this.buildHeaders(),signal:c.signal});d(),i=a.status;let{raw:l,data:p}=await this.handleResponseWithRaw(a);return s=l,this.log({method:"GET",path:e,body:t,status:i,rawResponse:s,parsedData:p,durationMs:Date.now()-r}),p}catch(a){d();let l=this.wrapAbortError(a);throw this.log({method:"GET",path:e,body:t,status:i,rawResponse:s,error:l,durationMs:Date.now()-r}),l===a&&this.maybeShowNetworkToast(a),l}}async post(e,t,n){let r=Date.now(),i,s,{controller:c,clear:d}=this.createTimeoutController();try{let a=await fetch(`${this.baseUrl}${e}`,{method:"POST",headers:this.buildHeaders(),body:t?JSON.stringify(t):void 0,signal:c.signal});d(),i=a.status;let{raw:l,data:p}=await this.handleResponseWithRaw(a);return s=l,this.log({method:"POST",path:e,body:t,status:i,rawResponse:s,parsedData:p,durationMs:Date.now()-r,modelName:n?.modelName}),p}catch(a){d();let l=this.wrapAbortError(a);throw this.log({method:"POST",path:e,body:t,status:i,rawResponse:s,error:l,durationMs:Date.now()-r,modelName:n?.modelName}),l===a&&this.maybeShowNetworkToast(a),l}}async patch(e,t){let n=Date.now(),r,i,{controller:s,clear:c}=this.createTimeoutController();try{let d=await fetch(`${this.baseUrl}${e}`,{method:"PATCH",headers:this.buildHeaders(),body:t?JSON.stringify(t):void 0,signal:s.signal});c(),r=d.status;let{raw:a,data:l}=await this.handleResponseWithRaw(d);return i=a,this.log({method:"PATCH",path:e,body:t,status:r,rawResponse:i,parsedData:l,durationMs:Date.now()-n}),l}catch(d){c();let a=this.wrapAbortError(d);throw this.log({method:"PATCH",path:e,body:t,status:r,rawResponse:i,error:a,durationMs:Date.now()-n}),a===d&&this.maybeShowNetworkToast(d),a}}async put(e,t){let n=Date.now(),r,i,{controller:s,clear:c}=this.createTimeoutController();try{let d=await fetch(`${this.baseUrl}${e}`,{method:"PUT",headers:this.buildHeaders(),body:t?JSON.stringify(t):void 0,signal:s.signal});c(),r=d.status;let{raw:a,data:l}=await this.handleResponseWithRaw(d);return i=a,this.log({method:"PUT",path:e,body:t,status:r,rawResponse:i,parsedData:l,durationMs:Date.now()-n}),l}catch(d){c();let a=this.wrapAbortError(d);throw this.log({method:"PUT",path:e,body:t,status:r,rawResponse:i,error:a,durationMs:Date.now()-n}),a===d&&this.maybeShowNetworkToast(d),a}}async delete(e){let t=Date.now(),n,r,{controller:i,clear:s}=this.createTimeoutController();try{let c=await fetch(`${this.baseUrl}${e}`,{method:"DELETE",headers:this.buildHeaders(),signal:i.signal});s(),n=c.status;let{raw:d,data:a}=await this.handleResponseWithRaw(c);return r=d,this.log({method:"DELETE",path:e,status:n,rawResponse:r,parsedData:a,durationMs:Date.now()-t}),a}catch(c){s();let d=this.wrapAbortError(c);throw this.log({method:"DELETE",path:e,status:n,rawResponse:r,error:d,durationMs:Date.now()-t}),d===c&&this.maybeShowNetworkToast(c),d}}async stream(e,t,n,r,i,s,c,d,a,l,p,u){let f=Date.now(),h=i?.modelName?` [model: ${i.modelName}]`:"",v=[],y=E=>{this.debug&&v.push({t:Date.now()-f,event:E})},{cbs:T,flush:R}=ge({onChunk:n,onDone:r,onState:s,onThinking:c,onCreatedCharacters:d,onReconnect:l,onAborted:p,onBase:u}),b=new AbortController,D=null,S=null,A=null,M=()=>{D!==null&&(clearTimeout(D),D=null),S!==null&&(clearTimeout(S),S=null)},Ce=E=>{A=E,M(),b.abort()};D=setTimeout(()=>Ce("REQUEST_TIMEOUT"),C.REQUEST_TIMEOUT);let O;try{O=await fetch(`${this.baseUrl}${e}`,{method:"POST",headers:this.buildHeaders(),body:JSON.stringify(t),signal:b.signal})}catch(E){if(M(),A){let I=new m(A,"Request timed out");throw _(A),this.log({method:"STREAM",path:e,body:t,error:I,durationMs:Date.now()-f,modelName:i?.modelName}),I}throw this.maybeShowNetworkToast(E),E}if(D!==null&&(clearTimeout(D),D=null),!O.ok){M();let E=await O.text().catch(()=>""),I={};try{I=JSON.parse(E)}catch{}let N=I.code||"INTERNAL_ERROR",g=I.message||I.error||I.details,Oe=Array.isArray(I.matched_words)?I.matched_words:void 0,Pe=new m(N,g||`HTTP ${O.status}`,Oe);throw _(N,g,Oe),this.log({method:"STREAM",path:e,body:t,status:O.status,rawResponse:E,error:Pe,durationMs:Date.now()-f,modelName:i?.modelName}),Pe}let we=O.body?.getReader();if(!we)throw M(),new m("INTERNAL_ERROR","No response body for stream");S=setTimeout(()=>Ce("MODEL_LOADING_TIMEOUT"),C.INITIAL_TIMEOUT);let Re=new TextDecoder,X="",le,oe,x="",ie,se,L="",$=!1,P=null,Se=E=>{if($)return;let I=E.endsWith("\r")?E.slice(0,-1):E;if(I.startsWith("id: ")){se=I.slice(4);return}if(!I.startsWith("data: "))return;let N=I.slice(6);if(N==="[DONE]"){y("[DONE]"),$=!0;return}try{let g=JSON.parse(N);y(g),g.type==="done"&&g.id?(X=g.id,le=g.truncated===!0):g.type==="aborted"?(oe={id:typeof g.id=="string"?g.id:"",persisted:g.persisted===!0},$=!0):g.type==="error"?(P=new m(g.code||"INTERNAL_ERROR",g.message||"Generation failed",Array.isArray(g.matched_words)?g.matched_words:void 0),$=!0):g.type==="state"?(T.onState?.(g.delta,g.full??null),Array.isArray(g.createdNames)&&g.createdNames.length&&T.onCreatedCharacters?.(g.createdNames)):g.type==="start"?(S!==null&&(clearTimeout(S),S=null),typeof g.base_content=="string"&&u?.(g.base_content)):g.type==="thinking"?(g.status==="start"||g.status==="end")&&T.onThinking?.(g.status):g.content&&(S!==null&&(clearTimeout(S),S=null),x+=g.content,T.onChunk(g.content))}catch{y({raw:N})}se!==void 0&&(ie=se,se=void 0)},_e=()=>{if(M(),P)throw R(),_(P.code,P.message,P.matchedWords),this.log({method:"STREAM",path:e,body:t,error:P,durationMs:Date.now()-f,modelName:i?.modelName}),P;this.debug&&(console.groupCollapsed(`%c[Storvia SDK] %cSTREAM ${e} [${O.status}]${h} (${Date.now()-f}ms) %c\u2713`,"color: #6366f1; font-weight: bold","color: #e0e0e0","color: #22c55e"),console.log("Request:",t),console.log(`Accumulated content (${x.length} chars):`,x),console.log("Message ID:",X),oe&&console.log("Aborted:",oe),console.log(`SSE events (${v.length}):`,v),console.groupEnd()),F(T,{messageId:X,truncated:le,aborted:oe})};try{for(;;){let{done:E,value:I}=await we.read();if(E)break;L+=Re.decode(I,{stream:!0});let N=L.split(`
121
+ `);L=N.pop()??"";for(let g of N)Se(g);if($){_e();return}}if(L+=Re.decode(),L&&Se(L),$){_e();return}}catch(E){if(M(),P)throw P;if(A){let I=new m(A,"Stream did not start in time");if(this.debug&&(console.groupCollapsed(`%c[Storvia SDK] %cSTREAM ${e} [${O.status}]${h} (${Date.now()-f}ms) %c\u2717 ${A}`,"color: #6366f1; font-weight: bold","color: #e0e0e0","color: #ef4444"),console.log("Request:",t),console.log(`Accumulated content (${x.length} chars):`,x),console.log(`SSE events (${v.length}):`,v),console.error("Timeout:",I),console.groupEnd()),a){await this.resumeLoop(a,ie,T,{finalize:!0});return}throw _(A),R(),I}if(this.debug&&(console.groupCollapsed(`%c[Storvia SDK] %cSTREAM ${e} [${O.status}]${h} (${Date.now()-f}ms) %c\u2717`,"color: #6366f1; font-weight: bold","color: #e0e0e0","color: #ef4444"),console.log("Request:",t),console.log(`Accumulated content (${x.length} chars):`,x),console.log(`SSE events (${v.length}):`,v),console.error("Stream error:",E),console.groupEnd()),a){await this.resumeLoop(a,ie,T,{finalize:!0});return}throw R(),E}if(M(),X){F(T,{messageId:X,truncated:le});return}if(a){await this.resumeLoop(a,ie,T,{finalize:!0});return}R()}async resumeLoop(e,t,n,r){let i=t;for(let c=1;c<=C.RECONNECT_MAX_ATTEMPTS;c++){let d=Math.min(C.RECONNECT_BACKOFF_CAP,1e3*2**(c-1));await new Promise(p=>setTimeout(p,d)),n.onReconnect?.({attempt:c});let a={messageId:"",lastId:i},l;try{l=await this.pumpGetStream(e.conversationId,e.topic,i,a,n)}catch{continue}if(i=a.lastId??i,l==="done"){if(a.errorCode)throw this.terminalError(a);F(n,a);return}if(l==="inactive"){(a.messageId||r?.finalize)&&F(n,a);return}}let s=new m("STREAM_INTERRUPTED","Stream reconnection failed after maximum attempts");throw _("STREAM_INTERRUPTED"),s}async resumeStream(e,t,n){let{cbs:r}=ge(n),i={messageId:""},s;try{s=await this.pumpGetStream(e,t,void 0,i,r)}catch{await this.resumeLoop({conversationId:e,topic:t},i.lastId,r);return}if(s==="done"){if(i.errorCode)throw this.terminalError(i);F(r,i);return}if(s==="inactive"){i.messageId&&F(r,i);return}await this.resumeLoop({conversationId:e,topic:t},i.lastId,r)}terminalError(e){let t=new m(e.errorCode??"INTERNAL_ERROR",e.errorMessage||"Generation failed",e.errorMatchedWords);return _(t.code,t.message,t.matchedWords),t}async pumpGetStream(e,t,n,r,i){let s=new URL(`${this.baseUrl}/conversations/${encodeURIComponent(e)}/stream`);n&&s.searchParams.set("from",n),t&&s.searchParams.set("topic",t);let c=new AbortController,d=setTimeout(()=>c.abort(),C.REQUEST_TIMEOUT),a;try{a=await fetch(s.toString(),{method:"GET",headers:this.buildHeaders(),signal:c.signal})}finally{clearTimeout(d)}if(!a.ok)throw new m("STREAM_INTERRUPTED",`Resume HTTP ${a.status}`);if(!(a.headers.get("content-type")||"").includes("text/event-stream"))return"inactive";let p=a.body?.getReader();return p?await this.pumpReader(p,r,i):"inactive"}async pumpReader(e,t,n){let r=new TextDecoder,i,s=null,c=()=>{s&&clearTimeout(s),s=setTimeout(()=>{e.cancel().catch(()=>{})},C.RESUME_STALL_TIMEOUT)};c();let d="",a=!1,l=p=>{if(a)return;let u=p.endsWith("\r")?p.slice(0,-1):p;if(u.startsWith("id: ")){i=u.slice(4);return}if(!u.startsWith("data: "))return;let f=u.slice(6);if(f==="[DONE]"){a=!0;return}try{let h=JSON.parse(f);h.type==="done"&&h.id?(t.messageId=h.id,t.truncated=h.truncated===!0):h.type==="aborted"?(t.aborted={id:typeof h.id=="string"?h.id:"",persisted:h.persisted===!0},a=!0):h.type==="error"?(t.errorCode=h.code||"INTERNAL_ERROR",t.errorMessage=h.message||"Generation failed",Array.isArray(h.matched_words)&&(t.errorMatchedWords=h.matched_words),a=!0):h.type==="state"?(n.onState?.(h.delta,h.full??null),Array.isArray(h.createdNames)&&h.createdNames.length&&n.onCreatedCharacters?.(h.createdNames)):h.type==="start"?typeof h.base_content=="string"&&n.onBase?.(h.base_content):h.type==="thinking"?(h.status==="start"||h.status==="end")&&n.onThinking?.(h.status):h.content&&n.onChunk(h.content)}catch{}i!==void 0&&(t.lastId=i,i=void 0)};try{for(;;){let{done:p,value:u}=await e.read();if(p)break;c(),d+=r.decode(u,{stream:!0});let f=d.split(`
122
+ `);d=f.pop()??"";for(let h of f)l(h);if(a)return s&&clearTimeout(s),"done"}if(d+=r.decode(),d&&l(d),a)return s&&clearTimeout(s),"done"}catch{}finally{s&&clearTimeout(s)}return"eof"}async handleResponseWithRaw(e){let t=await e.text(),n;try{n=t?JSON.parse(t):null}catch{n=t}if(!e.ok){let r=n&&typeof n=="object"?n:{},i={401:"UNAUTHORIZED",402:"INSUFFICIENT_CREDITS",429:"RATE_LIMITED"},s=r.code||i[e.status]||"INTERNAL_ERROR",c=Array.isArray(r.matched_words)?r.matched_words:void 0,d=new m(s,r.message||`HTTP ${e.status}`,c);throw _(s,r.message,c),d}return n&&typeof n=="object"&&"data"in n?{raw:n,data:n.data}:{raw:n,data:n}}};C.REQUEST_TIMEOUT=6e4,C.INITIAL_TIMEOUT=3e4,C.RESUME_STALL_TIMEOUT=6e4,C.RECONNECT_MAX_ATTEMPTS=10,C.RECONNECT_BACKOFF_CAP=15e3;var te=C;function mt(){if(typeof crypto<"u"&&typeof crypto.randomUUID=="function")return crypto.randomUUID();let o=new Uint8Array(16);crypto.getRandomValues(o),o[6]=o[6]&15|64,o[8]=o[8]&63|128;let e=Array.from(o,t=>t.toString(16).padStart(2,"0")).join("");return`${e.slice(0,8)}-${e.slice(8,12)}-${e.slice(12,16)}-${e.slice(16,20)}-${e.slice(20)}`}var Fe=20,Ve=40,H=class{constructor(e,t,n,r,i=!1,s,c,d){this.http=e;this.getGameId=t;this.getConversationId=n;this.getModelId=r;this.isPreview=i;this.previewHistory=[];this.previewConfig=s,this.getModelName=c,this.getPreset=d}reqMeta(){let e=this.getModelName?.();return e?{modelName:e}:void 0}updatePreviewConfig(e){this.previewConfig=e}async send(e){if(this.isPreview)return this.sendPreview(e);let t={game_id:this.getGameId(),conversation_id:this.getConversationId(),model_id:this.getModelId(),message:e.message,topic:e.topic,scene_key:e.sceneKey,extract:e.extract,stream:e.stream??!1,preset:this.getPreset?.(),client_message_uuid:mt()};if(e.stream){await this.http.stream("/chat",t,e.onChunk??(()=>{}),e.onDone??(()=>{}),this.reqMeta(),V(e.onState),e.onThinking,e.onCreatedCharacters,{conversationId:this.getConversationId(),topic:e.topic},e.onReconnecting,e.onAborted);return}return this.http.post("/chat",t,this.reqMeta())}async save(e){return this.isPreview?{id:`preview-${Date.now()}`}:this.http.post("/messages/save",{conversation_id:this.getConversationId(),role:e.role,content:e.content,topic:e.topic})}async generate(e){if(this.isPreview)return this.sendPreview({message:"",topic:e.topic,sceneKey:e.sceneKey,stream:e.stream,onChunk:e.onChunk,onDone:e.onDone,onState:e.onState,onThinking:e.onThinking,onCreatedCharacters:e.onCreatedCharacters});let t={conversation_id:this.getConversationId(),model_id:this.getModelId(),topic:e.topic,scene_key:e.sceneKey,extract:e.extract,stream:e.stream??!1,preset:this.getPreset?.()};if(e.stream){await this.http.stream("/generate",t,e.onChunk??(()=>{}),e.onDone??(()=>{}),this.reqMeta(),V(e.onState),e.onThinking,e.onCreatedCharacters,{conversationId:this.getConversationId(),topic:e.topic},e.onReconnecting,e.onAborted);return}return this.http.post("/generate",t,this.reqMeta())}async retry(e={}){if(this.isPreview)throw new m("NOT_SUPPORTED_IN_PREVIEW","storvia.chat.retry() is not available in preview mode. Publish the game and test on the Storvia platform.");let t={conversation_id:this.getConversationId(),model_id:this.getModelId(),topic:e.topic,scene_key:e.sceneKey,extract:e.extract,stream:e.stream??!1,preset:this.getPreset?.()};if(e.stream){await this.http.stream("/retry",t,e.onChunk??(()=>{}),e.onDone??(()=>{}),this.reqMeta(),V(e.onState),e.onThinking,e.onCreatedCharacters,{conversationId:this.getConversationId(),topic:e.topic},e.onReconnecting,e.onAborted);return}return this.http.post("/retry",t,this.reqMeta())}async continue(e={}){if(this.isPreview)return;let t={conversation_id:this.getConversationId(),topic:e.topic??null,game_id:this.getGameId(),preset:this.getPreset?.(),scene_key:e.sceneKey,extract:e.extract};await this.http.stream("/continue",t,e.onChunk??(()=>{}),e.onDone??(()=>{}),this.reqMeta(),V(e.onState),e.onThinking,e.onCreatedCharacters,{conversationId:this.getConversationId(),topic:e.topic},e.onReconnecting,e.onAborted,e.onBase)}async cancel(e={}){if(this.isPreview)return{active:!1};let t=await this.http.post(`/conversations/${encodeURIComponent(this.getConversationId())}/cancel`,{topic:e.topic});return{active:t.active===!0,generationId:t.generation_id}}async messages(e){if(this.isPreview)return{data:[],hasMore:!1,nextCursor:null};let t={conversation_id:this.getConversationId(),order:e.order,limit:String(e.limit??20)};e.topic&&(t.topic=e.topic),e.cursor&&(t.cursor_uuid=e.cursor.uuid,t.cursor_created_at=e.cursor.createdAt);let n=await this.http.get("/messages",t);return{data:n.messages.map(r=>({uuid:r.uuid,role:r.role,content:r.content,topic:r.topic,status:r.status,model:r.model,createdAt:r.created_at,truncated:r.truncated===!0})),hasMore:n.has_more,nextCursor:n.next_cursor?{uuid:n.next_cursor.cursor_uuid,createdAt:n.next_cursor.cursor_created_at}:null}}async edit(e){if(this.isPreview)throw new m("NOT_SUPPORTED_IN_PREVIEW","storvia.chat.edit() is not available in preview mode. Publish the game and test on the Storvia platform.");let t=await this.http.patch(`/messages/${encodeURIComponent(e.uuid)}`,{content:e.content});return{uuid:t.uuid,role:t.role,content:t.content,updatedAt:t.updated_at}}async delete(e){if(this.isPreview)throw new m("NOT_SUPPORTED_IN_PREVIEW","storvia.chat.delete() is not available in preview mode. Publish the game and test on the Storvia platform.");return{uuid:(await this.http.delete(`/messages/${encodeURIComponent(e.uuid)}`)).uuid}}async rollback(e){if(this.isPreview)throw new m("NOT_SUPPORTED_IN_PREVIEW","storvia.chat.rollback() is not available in preview mode. Publish the game and test on the Storvia platform.");let t=await this.http.post(`/messages/${encodeURIComponent(e.uuid)}/rollback`,{});return{deletedCount:t.deleted_count,deletedUuids:t.deleted_uuids,restoredGameState:t.restored_game_state}}async resume(e={}){this.isPreview||await this.http.resumeStream(this.getConversationId(),e.topic,{onChunk:e.onChunk??(()=>{}),onDone:e.onDone??(()=>{}),onState:V(e.onState),onThinking:e.onThinking,onCreatedCharacters:e.onCreatedCharacters,onReconnect:e.onReconnecting,onAborted:e.onAborted})}async sendPreview(e){let t=e.message.trim().length>0,n=this.previewHistory.slice(t?-(Fe-1):-Fe);t&&this.pushPreviewHistory({role:"user",content:e.message});let r={model_id:this.getModelId(),message:e.message,topic:e.topic,scene_key:e.sceneKey,history_messages:n,preset:this.getPreset?.()};this.previewConfig?r.prompt_config=this.previewConfig:r.game_id=this.getGameId();let i=this.previewConfig;if(i?.reply_length&&(r.reply_length=i.reply_length),i?.reply_language&&(r.reply_language=i.reply_language),e.stream){let p="";await this.http.stream("/preview",r,u=>{p+=u,e.onChunk?.(u)},(u,f)=>{p&&this.pushPreviewHistory({role:"assistant",content:p}),e.onDone?.(u,f)},this.reqMeta(),V(e.onState),e.onThinking,e.onCreatedCharacters);return}let s="",c=null,d=null,a=[];await this.http.stream("/preview",r,p=>{s+=p},()=>{},this.reqMeta(),(p,u)=>{c=p,d=u,e.onState&&e.onState(c,d)},void 0,p=>{a=p,e.onCreatedCharacters&&e.onCreatedCharacters(p)}),s&&this.pushPreviewHistory({role:"assistant",content:s});let l={id:"",content:s,truncated:!1};return c&&(l.delta=c,d&&(l.full=d)),a.length&&(l.createdNames=a),l}pushPreviewHistory(e){this.previewHistory.push(e),this.previewHistory.length>Ve&&this.previewHistory.splice(0,this.previewHistory.length-Ve)}};function V(o){if(o)return(e,t)=>o(e,t)}var me=class{constructor(e,t,n=!1,r){this.http=e;this.getConversationId=t;this.isPreview=n;this.mem={};r&&(this.mem={...r})}setInitial(e){this.mem=e?{...e}:{}}async get(e,t){if(this.isPreview){let r=this.mem[e]||{};return t?{...r[t]||{}}:{...r}}let n=t?{group:t}:void 0;return this.http.get(`/conversations/${this.getConversationId()}/characters/${encodeURIComponent(e)}/state`,n)}async update(e,t,n){if(this.isPreview){let r=this.mem[e]||(this.mem[e]={});r[t]={...r[t]||{},...n};return}await this.http.patch(`/conversations/${this.getConversationId()}/characters/${encodeURIComponent(e)}/state`,{group:t,values:n})}async remove(e,t,n){if(n.length){if(this.isPreview){let r=this.mem[e]?.[t];if(r)for(let i of n)delete r[i];return}await this.http.patch(`/conversations/${this.getConversationId()}/characters/${encodeURIComponent(e)}/state`,{group:t,removeKeys:n})}}async removeGroup(e,t){if(this.isPreview){let n=this.mem[e];n&&delete n[t];return}await this.http.patch(`/conversations/${this.getConversationId()}/characters/${encodeURIComponent(e)}/state`,{group:t,removeGroup:!0})}},W=class{constructor(e,t,n=!1,r,i){this.http=e;this.getConversationId=t;this.isPreview=n;this.mem=[];r&&(this.mem=r.map(He)),this.state=new me(e,t,n,i)}setInitial(e,t){this.mem=e?e.map(He):[],this.state.setInitial(t)}async list(){return this.isPreview?this.mem.map(We):this.http.get(`/conversations/${this.getConversationId()}/characters`)}async get(e){if(this.isPreview){let t=this.mem.find(n=>n.name===e);return t?We(t):{name:e}}return this.http.get(`/conversations/${this.getConversationId()}/characters/${encodeURIComponent(e)}`)}async add(e){if(this.isPreview){this.mem.push({...e,isPreset:!1});return}await this.http.post(`/conversations/${this.getConversationId()}/characters`,e)}async update(e,t){if(this.isPreview){let n=this.mem.find(r=>r.name===e);n&&Object.assign(n,t);return}await this.http.patch(`/conversations/${this.getConversationId()}/characters/${encodeURIComponent(e)}`,t)}async remove(e){if(this.isPreview){this.mem=this.mem.filter(t=>t.name!==e);return}await this.http.delete(`/conversations/${this.getConversationId()}/characters/${encodeURIComponent(e)}`)}async merge(e,t){if(this.isPreview){if(this.mem.find(r=>r.name===e)?.isPreset)throw new m("INVALID_REQUEST","\u9884\u8BBE\u89D2\u8272\u4E0D\u53EF\u88AB\u5408\u5E76");if(e===t||!this.mem.some(r=>r.name===t))throw new m("INVALID_REQUEST","\u76EE\u6807\u89D2\u8272\u4E0D\u5B58\u5728\u6216\u4E0E\u6765\u6E90\u76F8\u540C");this.mem=this.mem.filter(r=>r.name!==e);return}await this.http.post(`/conversations/${this.getConversationId()}/characters/${encodeURIComponent(e)}/merge`,{target:t})}async detail(e){if(this.isPreview){let t=this.mem.find(n=>n.name===e);return{name:e,avatar:t?.avatar,description:t?.description,...t?.introduction!==void 0?{introduction:t.introduction}:{},...t?.visibleAtStart!==void 0?{visibleAtStart:t.visibleAtStart}:{},userDescription:t?.userDescription,...t?.gender?{gender:t.gender}:{},...t?.isPreset!==void 0?{isPreset:t.isPreset}:{},state:await this.state.get(e)}}return this.http.get(`/conversations/${this.getConversationId()}/characters/${encodeURIComponent(e)}/detail`)}async setPriority(e,t){let n=Math.max(0,Math.min(100,Math.round(t)));this.isPreview||await this.http.patch(`/conversations/${this.getConversationId()}/characters/${encodeURIComponent(e)}/state`,{priority:n})}};function He(o){return{name:o.name,description:o.description,avatar:o.avatar,...o.introduction!==void 0?{introduction:o.introduction}:{},...o.visibleAtStart!==void 0?{visibleAtStart:o.visibleAtStart}:{},...o.gender?{gender:o.gender}:{},...o.userDescription!==void 0?{userDescription:o.userDescription}:{},...o.isPreset!==void 0?{isPreset:o.isPreset}:{}}}function We(o){return{name:o.name,avatar:o.avatar,description:o.description,...o.introduction!==void 0?{introduction:o.introduction}:{},...o.visibleAtStart!==void 0?{visibleAtStart:o.visibleAtStart}:{},...o.userDescription!==void 0?{userDescription:o.userDescription}:{},...o.gender?{gender:o.gender}:{},...o.isPreset!==void 0?{isPreset:o.isPreset}:{}}}var B=class{constructor(e,t,n=!1,r){this.http=e;this.getConversationId=t;this.isPreview=n;this.mem=[];r&&(this.mem=r.map(i=>({...i})))}setInitial(e){this.mem=e?e.map(t=>({...t})):[]}async list(){return this.isPreview?[...this.mem]:this.http.get(`/conversations/${this.getConversationId()}/relationships`)}async get(e,t){if(this.isPreview){let n=this.mem.find(r=>r.from===e&&r.to===t);if(n)return{...n};throw new Error("Relationship not found")}return this.http.get(`/conversations/${this.getConversationId()}/relationships/${encodeURIComponent(e)}/${encodeURIComponent(t)}`)}async add(e){if(this.isPreview){this.mem.push({...e});return}await this.http.post(`/conversations/${this.getConversationId()}/relationships`,e)}async update(e,t,n){if(this.isPreview){let r=this.mem.find(i=>i.from===e&&i.to===t);r?Object.assign(r,n):this.mem.push({from:e,to:t,...n});return}await this.http.patch(`/conversations/${this.getConversationId()}/relationships/${encodeURIComponent(e)}/${encodeURIComponent(t)}`,n)}async remove(e,t){if(this.isPreview){this.mem=this.mem.filter(n=>!(n.from===e&&n.to===t));return}await this.http.delete(`/conversations/${this.getConversationId()}/relationships/${encodeURIComponent(e)}/${encodeURIComponent(t)}`)}};function Be(o){let e={count:o.count};return o.desc!==void 0&&(e.desc=o.desc),o.icon_url!==void 0&&(e.iconUrl=o.icon_url),e}function fe(o){let e={};if(!o)return e;for(let[t,n]of Object.entries(o)){let r={};for(let[i,s]of Object.entries(n))r[i]=Be(s);e[t]=r}return e}function ft(o){let e={};if(!o)return e;for(let[t,n]of Object.entries(o))e[t]=Be(n);return e}var j=class{constructor(e,t,n=!1,r){this.http=e;this.getConversationId=t;this.isPreview=n;this.mem={};r&&(this.mem=fe(r))}setInitial(e){this.mem=e?fe(e):{}}async list(e){if(this.isPreview){if(e!==void 0)return{...this.mem[e]||{}};let n={};for(let[r,i]of Object.entries(this.mem))n[r]={...i};return n}if(e!==void 0){let n=await this.http.get(`/conversations/${this.getConversationId()}/inventory/${encodeURIComponent(e)}`);return ft(n)}let t=await this.http.get(`/conversations/${this.getConversationId()}/inventory`);return fe(t)}async add(e){let{group:t,name:n,count:r=1,desc:i,iconUrl:s}=e;if(this.isPreview){if(!this.mem[t])throw new Error(`Group "${t}" does not exist`);if(n in this.mem[t])throw new Error(`Item "${n}" already exists in group "${t}"`);let d={count:r};i!==void 0&&(d.desc=i),s!==void 0&&(d.iconUrl=s),this.mem[t][n]=d;return}let c={group:t,name:n,count:r};i!==void 0&&(c.desc=i),s!==void 0&&(c.icon_url=s),await this.http.post(`/conversations/${this.getConversationId()}/inventory`,c)}async update(e){let{group:t,name:n,count:r,desc:i,iconUrl:s}=e;if(this.isPreview){let d=this.mem[t];if(!d||!(n in d))throw new Error(`Item "${t}/${n}" not found`);let a=d[n];r!==void 0&&(a.count=r),i!==void 0&&(a.desc=i),s!==void 0&&(a.iconUrl=s);return}let c={};r!==void 0&&(c.count=r),i!==void 0&&(c.desc=i),s!==void 0&&(c.icon_url=s),await this.http.patch(`/conversations/${this.getConversationId()}/inventory/${encodeURIComponent(t)}/${encodeURIComponent(n)}`,c)}async remove(e){let{group:t,name:n}=e;if(this.isPreview){this.mem[t]&&delete this.mem[t][n];return}await this.http.delete(`/conversations/${this.getConversationId()}/inventory/${encodeURIComponent(t)}/${encodeURIComponent(n)}`)}async removeBatch(e){if(this.isPreview){for(let{group:t,name:n}of e)this.mem[t]&&delete this.mem[t][n];return}e.length!==0&&await this.http.post(`/conversations/${this.getConversationId()}/inventory/batch-delete`,{items:e})}async move(e){let{fromGroup:t,toGroup:n,name:r,newName:i}=e;if(this.isPreview){let s=this.mem[t];if(!s||!(r in s))throw new Error(`Source item "${t}/${r}" not found`);if(!this.mem[n])throw new Error(`Target group "${n}" does not exist`);let c=i||r;if(t===n&&c===r)return;if(c in this.mem[n])throw new Error(`Item "${c}" already exists in target group`);this.mem[n][c]=s[r],delete s[r];return}await this.http.post(`/conversations/${this.getConversationId()}/inventory/move`,{fromGroup:t,toGroup:n,name:r,newName:i})}async ensureGroup(e){if(this.isPreview){this.mem[e]||(this.mem[e]={});return}await this.http.post(`/conversations/${this.getConversationId()}/inventory/groups/${encodeURIComponent(e)}`,{})}async removeGroup(e,t){let n=t?.cascade??!1;if(this.isPreview){let i=this.mem[e];if(i&&Object.keys(i).length>0&&!n)throw new Error(`Group "${e}" is not empty, pass cascade: true to force delete`);delete this.mem[e];return}let r=n?"?cascade=true":"";await this.http.delete(`/conversations/${this.getConversationId()}/inventory/groups/${encodeURIComponent(e)}${r}`)}};var K=class{constructor(e,t,n=!1,r){this.http=e;this.getConversationId=t;this.isPreview=n;this.mem={};r&&(this.mem={...r})}setInitial(e){this.mem=e?{...e}:{}}async get(){return this.isPreview?{...this.mem}:this.http.get(`/conversations/${this.getConversationId()}/world`)}async update(e){if(this.isPreview){Object.assign(this.mem,e);return}await this.http.patch(`/conversations/${this.getConversationId()}/world`,e)}};var ve=class{constructor(e,t,n=!1,r){this.http=e;this.getConversationId=t;this.isPreview=n;this.mem={};r&&(this.mem={...r})}setInitial(e){this.mem=e?{...e}:{}}async get(e){if(this.isPreview)return e?{...this.mem[e]||{}}:{...this.mem};let t=e?{group:e}:void 0;return this.http.get(`/conversations/${this.getConversationId()}/player/state`,t)}async update(e,t){if(this.isPreview){this.mem[e]={...this.mem[e]||{},...t};return}await this.http.patch(`/conversations/${this.getConversationId()}/player/state`,{group:e,values:t})}async remove(e,t){if(t.length){if(this.isPreview){let n=this.mem[e];if(n)for(let r of t)delete n[r];return}await this.http.patch(`/conversations/${this.getConversationId()}/player/state`,{group:e,removeKeys:t})}}async removeGroup(e){if(this.isPreview){delete this.mem[e];return}await this.http.patch(`/conversations/${this.getConversationId()}/player/state`,{group:e,removeGroup:!0})}},q=class{constructor(e,t,n=!1,r,i){this.http=e;this.getConversationId=t;this.isPreview=n;this.memPersona={name:""};r&&(this.memPersona={...r}),this.state=new ve(e,t,n,i)}setInitial(e,t){this.memPersona=e?{...e}:{name:""},this.state.setInitial(t)}async get(){return this.isPreview?{...this.memPersona}:this.http.get(`/conversations/${this.getConversationId()}/player`)}async update(e){if(this.isPreview){Object.assign(this.memPersona,e);return}await this.http.patch(`/conversations/${this.getConversationId()}/player`,e)}};function z(o,e){if(!e)return o;let t=o.includes("?")?"&":"?";return`${o}${t}game_id=${encodeURIComponent(e)}`}var Y=class{constructor(e,t,n,r=!1,i,s){this.http=e;this.getConversationId=t;this.getGameId=n;this.isPreview=r;this.mem={};this.memInject={};i&&(this.mem=je(i)),s&&(this.memInject={...s})}setInitial(e,t){this.mem=e?je(e):{},this.memInject=t?{...t}:{}}async get(e){if(this.isPreview)return e!==void 0?this.mem[e]:{...this.mem};let t=await this.http.get(z(`/conversations/${this.getConversationId()}/custom`,this.getGameId()));return e!==void 0?t[e]:t}async set(e,t){if(this.isPreview){for(let[r,i]of Object.entries(e))typeof i=="object"&&i!==null&&typeof this.mem[r]=="object"&&this.mem[r]!==null?this.mem[r]={...this.mem[r],...i}:this.mem[r]=i,t?.inject!==void 0&&(this.memInject[r]=t.inject);return}let n=t?.inject!==void 0?{data:e,inject:t.inject}:e;await this.http.patch(z(`/conversations/${this.getConversationId()}/custom`,this.getGameId()),n)}async setInject(e,t){if(this.isPreview){this.memInject[e]=t;return}await this.http.patch(z(`/conversations/${this.getConversationId()}/custom/inject/${encodeURIComponent(e)}`,this.getGameId()),{inject:t})}getInject(){return{...this.memInject}}async delete(e){if(this.isPreview){delete this.mem[e],delete this.memInject[e];return}await this.http.delete(z(`/conversations/${this.getConversationId()}/custom/${encodeURIComponent(e)}`,this.getGameId()))}async setGroupField(e,t,n){if(this.isPreview){(!this.mem[e]||typeof this.mem[e]!="object")&&(this.mem[e]={}),this.mem[e][t]=n;return}await this.http.patch(z(`/conversations/${this.getConversationId()}/custom/${encodeURIComponent(e)}/${encodeURIComponent(t)}`,this.getGameId()),{value:n})}async deleteGroupField(e,t){if(this.isPreview){if(typeof this.mem[e]=="object"&&this.mem[e]!==null){let n=this.mem[e];delete n[t]}return}await this.http.delete(z(`/conversations/${this.getConversationId()}/custom/${encodeURIComponent(e)}/${encodeURIComponent(t)}`,this.getGameId()))}};function je(o){let e={};for(let[t,n]of Object.entries(o))typeof n=="object"&&n!==null&&!Array.isArray(n)?e[t]={...n}:e[t]=n;return e}function Ke(o,e){if(!e)return o;let t=o.includes("?")?"&":"?";return`${o}${t}game_id=${encodeURIComponent(e)}`}var Q=class{constructor(e,t,n,r=!1,i){this.http=e;this.getConversationId=t;this.getGameId=n;this.isPreview=r;this.mem={};i&&(this.mem={...i})}setInitial(e){this.mem=e?{...e}:{}}async get(){return this.isPreview?{...this.mem}:await this.http.get(Ke(`/conversations/${this.getConversationId()}/save`,this.getGameId()))}async set(e){if(this.isPreview){this.mem={...e};return}await this.http.put(Ke(`/conversations/${this.getConversationId()}/save`,this.getGameId()),e)}};var ne=class{constructor(e,t,n=!1){this.http=e;this.getConversationId=t;this.isPreview=n}async get(){if(this.isPreview)throw new m("NOT_SUPPORTED_IN_PREVIEW","storvia.state.get() is not available in preview mode. Publish the game and test on the Storvia platform. (Use per-module get() like storvia.world.get() if you need to inspect state during preview.)");return this.http.get(`/conversations/${this.getConversationId()}/state`)}};var Z=class{constructor(e,t,n=!1){this.http=e;this.getConversationId=t;this.isPreview=n;this.mem=null}async get(){return this.isPreview?this.mem?{...this.mem}:null:(await this.http.get(`/conversations/${this.getConversationId()}/summary`)).ai_summary}async update(e){let t=(e??"").trim();if(this.isPreview){let r={content:t,updated_at:new Date().toISOString()};return this.mem=r,{...r}}return(await this.http.patch(`/conversations/${this.getConversationId()}/summary`,{content:t})).ai_summary}};var Ie=60,Ee=1e3,Te=1e4,k=class{constructor(e,t=!1,n=()=>Date.now()){this.send=e;this.isPreview=t;this.now=n;this.lastNotifyAt=0;this.lastRefreshAt=0}notify(e){let t=vt(e);if(!t)return!1;let n=this.now();return n-this.lastNotifyAt<Ee?!1:(this.lastNotifyAt=n,this.isPreview?(ee(t,"info"),!0):(this.send(w("host-notify",{text:t})),!0))}refreshPanel(e){if(this.isPreview)return!1;let t=this.now();return t-this.lastRefreshAt<Te?!1:(this.lastRefreshAt=t,this.send(w("host-state-changed",e?.length?{scope:e}:{})),!0)}};function vt(o){return typeof o!="string"?"":o.replace(/\s+/g," ").trim().slice(0,Ie)}var qe="/functions/v1/world-engine/v1",It="https://api.storvia.ai";function Et(){return window.__STORVIA__||{}}function Tt(o,e=3e4){let t=Et();return t.apiBase?Promise.resolve(t):new Promise((n,r)=>{let i=setTimeout(()=>{s(),c(),r(new m("NOT_INITIALIZED","Timed out waiting for __STORVIA__ config from parent frame."))},e),s=o.on("init",a=>{a.payload?.apiBase&&d({apiBase:a.payload.apiBase,gameId:a.payload.gameId,conversationId:a.payload.conversationId,accessToken:a.payload.accessToken,selectedModelId:a.payload.selectedModelId,lang:a.payload.lang,debug:a.payload.debug})}),c=o.on("preview-init",a=>{a.payload?.apiBase&&d(a.payload)});function d(a){clearTimeout(i),s(),c();let l=window;l.__STORVIA__=a,n(a)}o.send(w("ready",{}))})}var re=class{constructor(){this.baseUrl="";this.gameId="";this.conversationId="";this.modelId="";this.models=[];this.presetId="";this.accessToken="";this.initialized=!1;this.isPreview=!1;this.previewConfig=void 0}async init(){if(this.initialized)return;let e=window.flutter_inappwebview,t=typeof e?.callHandler=="function";this.bus=new U({incoming:window,outgoing:()=>t?null:window.parent,verifySource:t?u=>u.source===null||u.source===window:u=>u.source===window.parent,customSend:t?u=>e.callHandler("storviaBus",u):void 0}),Le(u=>this.bus.send(u));let n=await Tt(this.bus),r=n.apiBase;if(!r)throw new m("NOT_INITIALIZED","window.__STORVIA__.apiBase is not set. The platform must inject it before SDK init.");if(this.baseUrl=`${r}${qe}`,this.isPreview=!!n.preview,this.previewConfig=n.previewConfig,!n.gameId)throw new m("GAME_NOT_FOUND","window.__STORVIA__.gameId is not set. The platform must inject it before SDK init.");if(this.gameId=n.gameId,!n.accessToken)throw new m("UNAUTHORIZED","window.__STORVIA__.accessToken is not set. The platform must inject the user token before SDK init.");if(this.accessToken=n.accessToken,Ae(n.lang),this.http=new te(this.baseUrl,this.accessToken,!!n.debug),this.isPreview){this.conversationId="00000000-0000-0000-0000-000000000000";let[u,f]=await Promise.all([this.fetchModels(),this.fetchPreviewSnapshot()]);this.models=u,this.modelId=(n.selectedModelId&&u.some(b=>b.id===n.selectedModelId)?n.selectedModelId:"")||u[0]?.id||"",this.presetId=n.presetId||"";let h=()=>this.gameId,v=()=>this.conversationId,y=()=>this.modelId,T=()=>this.models.find(b=>b.id===this.modelId)?.name,R=()=>this.presetId||void 0;this.chat=new H(this.http,h,v,y,!0,this.previewConfig,T,R),this.characters=new W(this.http,v,!0,f?.characters,f?.characterStates),this.relationships=new B(this.http,v,!0,f?.relationships),this.inventory=new j(this.http,v,!0,f?.inventory),this.world=new K(this.http,v,!0,f?.world),this.player=new q(this.http,v,!0,f?.player,f?.playerState),this.custom=new Y(this.http,v,h,!0,f?.custom,f?.custom_inject),this.save=new Q(this.http,v,h,!0,f?.save_data),this.state=new ne(this.http,v,!0),this.memory=new Z(this.http,v,!0),this.host=new k(b=>this.bus.send(b),!0),this.initialized=!0,this.listenForPreviewMessages(),this.listenForTokenUpdate();return}this.conversationId=n.conversationId??"";let[i,s]=await Promise.all([this.authenticate(),this.fetchModels()]);this.conversationId=i.conversationId,this.models=s,this.modelId=(n.selectedModelId&&s.some(u=>u.id===n.selectedModelId)?n.selectedModelId:"")||s[0]?.id||"",this.presetId=n.presetId||"";let c=()=>this.gameId,d=()=>this.conversationId,a=()=>this.modelId,l=()=>this.models.find(u=>u.id===this.modelId)?.name,p=()=>this.presetId||void 0;this.chat=new H(this.http,c,d,a,!1,void 0,l,p),this.characters=new W(this.http,d),this.relationships=new B(this.http,d),this.inventory=new j(this.http,d),this.world=new K(this.http,d),this.player=new q(this.http,d),this.custom=new Y(this.http,d,c),this.save=new Q(this.http,d,c),this.state=new ne(this.http,d),this.memory=new Z(this.http,d),this.host=new k(u=>this.bus.send(u),!1),this.listenForTokenUpdate(),this.listenForModelChange(),this.initialized=!0}listenForModelChange(){this.bus.on("set-model",e=>{let t=e.payload?.modelId||"";t&&(this.modelId=t)}),this.bus.on("set-preset",e=>{this.presetId=e.payload?.presetId||""})}listenForTokenUpdate(){this.bus.on("token-update",e=>{let t=e.payload?.accessToken;typeof t!="string"||!t||(this.accessToken=t,this.http?.setToken(t))})}listenForPreviewMessages(){this.bus.on("set-model",e=>{this.modelId=e.payload.modelId||""}),this.bus.on("set-preset",e=>{this.presetId=e.payload?.presetId||""}),this.bus.on("config-update",e=>{this.previewConfig=e.payload.previewConfig,this.chat&&this.chat.updatePreviewConfig(this.previewConfig),this.refreshPreviewSnapshot().catch(t=>{console.warn("[Storvia SDK] refreshPreviewSnapshot failed:",t)})})}async fetchPreviewSnapshot(){try{let e={game_id:this.gameId};return this.previewConfig&&("game_config"in this.previewConfig&&(e.game_config=this.previewConfig.game_config),"game_state"in this.previewConfig&&(e.game_state_override=this.previewConfig.game_state)),await this.http.post("/preview/initial-snapshot",e)}catch(e){return console.warn("[Storvia SDK] fetchPreviewSnapshot failed:",e),null}}async refreshPreviewSnapshot(){let e=await this.fetchPreviewSnapshot();e&&(this.characters?.setInitial(e.characters,e.characterStates),this.player?.setInitial(e.player,e.playerState),this.inventory?.setInitial(e.inventory),this.relationships?.setInitial(e.relationships),this.world?.setInitial(e.world),this.custom?.setInitial(e.custom,e.custom_inject),this.save?.setInitial(e.save_data))}async fetchModels(){try{return await this.http.get("/models")}catch{}return[]}async authenticate(){let e={game_id:this.gameId};this.conversationId&&(e.conversation_id=this.conversationId);let t=await fetch(`${this.baseUrl}/auth`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.accessToken}`},body:JSON.stringify(e)});if(!t.ok)throw t.status===401?new m("UNAUTHORIZED","User not authenticated"):t.status===404?new m("GAME_NOT_FOUND","Game not found or not published"):new m("INTERNAL_ERROR",`Auth failed: HTTP ${t.status}`);let n=await t.json();return n.data??n}async initDev(e){if(this.initialized)return;this.baseUrl=`${It}${qe}`,this.gameId=e.gameId,this.isPreview=!0,this.http=new te(this.baseUrl,"",!1,e.apiKey);let[t,n]=await Promise.all([this.fetchModels(),this.fetchPreviewSnapshot()]);this.models=t;let r=e.model?t.find(a=>a.name===e.model)?.id??"":"";this.modelId=r||t[0]?.id||"",this.conversationId="00000000-0000-0000-0000-000000000000";let i=()=>this.gameId,s=()=>this.conversationId,c=()=>this.modelId,d=()=>this.models.find(a=>a.id===this.modelId)?.name;this.chat=new H(this.http,i,s,c,!0,void 0,d),this.characters=new W(this.http,s,!0,n?.characters,n?.characterStates),this.relationships=new B(this.http,s,!0,n?.relationships),this.inventory=new j(this.http,s,!0,n?.inventory),this.world=new K(this.http,s,!0,n?.world),this.player=new q(this.http,s,!0,n?.player,n?.playerState),this.custom=new Y(this.http,s,i,!0,n?.custom),this.save=new Q(this.http,s,i,!0,n?.save_data),this.memory=new Z(this.http,s,!0),this.host=new k(()=>{},!0),this.initialized=!0}async getAssets(e,t){let n={asset_type:e};return t&&(n.category=t),(await this.http.get("/assets",n)).map(i=>({id:i.id,name:i.name,url:i.url,assetType:i.asset_type,category:i.category}))}};async function ze(o){ke();let e=new re;return o?.dev?await e.initDev(o.dev):await e.init(),e}function ye(o){return typeof o=="object"&&o!==null&&"value"in o&&"type"in o&&(o.type==="number"||o.type==="text")}function Ye(o){return ye(o)?o.value:o}return tt(yt);})();
123
123
  if(typeof window!=="undefined"){window.createStorviaSDK=StorviaSDK.createStorviaSDK;}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storvia/sdk",
3
- "version": "0.9.7",
3
+ "version": "0.9.9",
4
4
  "description": "Storvia World SDK - Build interactive text games on the Storvia platform",
5
5
  "main": "dist/index.cjs.js",
6
6
  "module": "dist/index.esm.js",