@logan-jun/cd1-rag-chat 0.3.1 → 0.3.2
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.
|
@@ -59,7 +59,7 @@ ${t}</tr>
|
|
|
59
59
|
`+this.renderer.text(a);n?r+=this.renderer.paragraph({type:"paragraph",raw:l,text:l,tokens:[{type:"text",raw:l,text:l}]}):r+=l;continue}default:{const a='Token with "'+o.type+'" type was not found.';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return r}parseInline(t,n){n=n||this.renderer;let r="";for(let i=0;i<t.length;i++){const s=t[i];if(this.options.extensions&&this.options.extensions.renderers&&this.options.extensions.renderers[s.type]){const a=this.options.extensions.renderers[s.type].call({parser:this},s);if(a!==!1||!["escape","html","link","image","strong","em","codespan","br","del","text"].includes(s.type)){r+=a||"";continue}}const o=s;switch(o.type){case"escape":{r+=n.text(o);break}case"html":{r+=n.html(o);break}case"link":{r+=n.link(o);break}case"image":{r+=n.image(o);break}case"strong":{r+=n.strong(o);break}case"em":{r+=n.em(o);break}case"codespan":{r+=n.codespan(o);break}case"br":{r+=n.br(o);break}case"del":{r+=n.del(o);break}case"text":{r+=n.text(o);break}default:{const a='Token with "'+o.type+'" type was not found.';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return r}}class nn{constructor(t){G(this,"options");G(this,"block");this.options=t||wt}preprocess(t){return t}postprocess(t){return t}processAllTokens(t){return t}provideLexer(){return this.block?Te.lex:Te.lexInline}provideParser(){return this.block?Ce.parse:Ce.parseInline}}G(nn,"passThroughHooks",new Set(["preprocess","postprocess","processAllTokens"]));class Xf{constructor(...t){G(this,"defaults",Ai());G(this,"options",this.setOptions);G(this,"parse",this.parseMarkdown(!0));G(this,"parseInline",this.parseMarkdown(!1));G(this,"Parser",Ce);G(this,"Renderer",Vn);G(this,"TextRenderer",Ri);G(this,"Lexer",Te);G(this,"Tokenizer",Jn);G(this,"Hooks",nn);this.use(...t)}walkTokens(t,n){var i,s;let r=[];for(const o of t)switch(r=r.concat(n.call(this,o)),o.type){case"table":{const a=o;for(const l of a.header)r=r.concat(this.walkTokens(l.tokens,n));for(const l of a.rows)for(const u of l)r=r.concat(this.walkTokens(u.tokens,n));break}case"list":{const a=o;r=r.concat(this.walkTokens(a.items,n));break}default:{const a=o;(s=(i=this.defaults.extensions)==null?void 0:i.childTokens)!=null&&s[a.type]?this.defaults.extensions.childTokens[a.type].forEach(l=>{const u=a[l].flat(1/0);r=r.concat(this.walkTokens(u,n))}):a.tokens&&(r=r.concat(this.walkTokens(a.tokens,n)))}}return r}use(...t){const n=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(r=>{const i={...r};if(i.async=this.defaults.async||i.async||!1,r.extensions&&(r.extensions.forEach(s=>{if(!s.name)throw new Error("extension name required");if("renderer"in s){const o=n.renderers[s.name];o?n.renderers[s.name]=function(...a){let l=s.renderer.apply(this,a);return l===!1&&(l=o.apply(this,a)),l}:n.renderers[s.name]=s.renderer}if("tokenizer"in s){if(!s.level||s.level!=="block"&&s.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");const o=n[s.level];o?o.unshift(s.tokenizer):n[s.level]=[s.tokenizer],s.start&&(s.level==="block"?n.startBlock?n.startBlock.push(s.start):n.startBlock=[s.start]:s.level==="inline"&&(n.startInline?n.startInline.push(s.start):n.startInline=[s.start]))}"childTokens"in s&&s.childTokens&&(n.childTokens[s.name]=s.childTokens)}),i.extensions=n),r.renderer){const s=this.defaults.renderer||new Vn(this.defaults);for(const o in r.renderer){if(!(o in s))throw new Error(`renderer '${o}' does not exist`);if(["options","parser"].includes(o))continue;const a=o,l=r.renderer[a],u=s[a];s[a]=(...f)=>{let v=l.apply(s,f);return v===!1&&(v=u.apply(s,f)),v||""}}i.renderer=s}if(r.tokenizer){const s=this.defaults.tokenizer||new Jn(this.defaults);for(const o in r.tokenizer){if(!(o in s))throw new Error(`tokenizer '${o}' does not exist`);if(["options","rules","lexer"].includes(o))continue;const a=o,l=r.tokenizer[a],u=s[a];s[a]=(...f)=>{let v=l.apply(s,f);return v===!1&&(v=u.apply(s,f)),v}}i.tokenizer=s}if(r.hooks){const s=this.defaults.hooks||new nn;for(const o in r.hooks){if(!(o in s))throw new Error(`hook '${o}' does not exist`);if(["options","block"].includes(o))continue;const a=o,l=r.hooks[a],u=s[a];nn.passThroughHooks.has(o)?s[a]=f=>{if(this.defaults.async)return Promise.resolve(l.call(s,f)).then(y=>u.call(s,y));const v=l.call(s,f);return u.call(s,v)}:s[a]=(...f)=>{let v=l.apply(s,f);return v===!1&&(v=u.apply(s,f)),v}}i.hooks=s}if(r.walkTokens){const s=this.defaults.walkTokens,o=r.walkTokens;i.walkTokens=function(a){let l=[];return l.push(o.call(this,a)),s&&(l=l.concat(s.call(this,a))),l}}this.defaults={...this.defaults,...i}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,n){return Te.lex(t,n!=null?n:this.defaults)}parser(t,n){return Ce.parse(t,n!=null?n:this.defaults)}parseMarkdown(t){return(r,i)=>{const s={...i},o={...this.defaults,...s},a=this.onError(!!o.silent,!!o.async);if(this.defaults.async===!0&&s.async===!1)return a(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof r=="undefined"||r===null)return a(new Error("marked(): input parameter is undefined or null"));if(typeof r!="string")return a(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(r)+", string expected"));o.hooks&&(o.hooks.options=o,o.hooks.block=t);const l=o.hooks?o.hooks.provideLexer():t?Te.lex:Te.lexInline,u=o.hooks?o.hooks.provideParser():t?Ce.parse:Ce.parseInline;if(o.async)return Promise.resolve(o.hooks?o.hooks.preprocess(r):r).then(f=>l(f,o)).then(f=>o.hooks?o.hooks.processAllTokens(f):f).then(f=>o.walkTokens?Promise.all(this.walkTokens(f,o.walkTokens)).then(()=>f):f).then(f=>u(f,o)).then(f=>o.hooks?o.hooks.postprocess(f):f).catch(a);try{o.hooks&&(r=o.hooks.preprocess(r));let f=l(r,o);o.hooks&&(f=o.hooks.processAllTokens(f)),o.walkTokens&&this.walkTokens(f,o.walkTokens);let v=u(f,o);return o.hooks&&(v=o.hooks.postprocess(v)),v}catch(f){return a(f)}}}onError(t,n){return r=>{if(r.message+=`
|
|
60
60
|
Please report this to https://github.com/markedjs/marked.`,t){const i="<p>An error occurred:</p><pre>"+_e(r.message+"",!0)+"</pre>";return n?Promise.resolve(i):i}if(n)return Promise.reject(r);throw r}}}const yt=new Xf;function H(e,t){return yt.parse(e,t)}H.options=H.setOptions=function(e){return yt.setOptions(e),H.defaults=yt.defaults,wa(H.defaults),H};H.getDefaults=Ai;H.defaults=wt;H.use=function(...e){return yt.use(...e),H.defaults=yt.defaults,wa(H.defaults),H};H.walkTokens=function(e,t){return yt.walkTokens(e,t)};H.parseInline=yt.parseInline;H.Parser=Ce;H.parser=Ce.parse;H.Renderer=Vn;H.TextRenderer=Ri;H.Lexer=Te;H.lexer=Te.lex;H.Tokenizer=Jn;H.Hooks=nn;H.parse=H;H.options;H.setOptions;H.use;H.walkTokens;H.parseInline;Ce.parse;Te.lex;/*! @license DOMPurify 3.4.5 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/3.4.5/LICENSE */function ro(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function Kf(e){if(Array.isArray(e))return e}function Jf(e,t){var n=e==null?null:typeof Symbol!="undefined"&&e[Symbol.iterator]||e["@@iterator"];if(n!=null){var r,i,s,o,a=[],l=!0,u=!1;try{if(s=(n=n.call(e)).next,t!==0)for(;!(l=(r=s.call(n)).done)&&(a.push(r.value),a.length!==t);l=!0);}catch(f){u=!0,i=f}finally{try{if(!l&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(u)throw i}}return a}}function Qf(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
61
61
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Vf(e,t){return Kf(e)||Jf(e,t)||ep(e,t)||Qf()}function ep(e,t){if(e){if(typeof e=="string")return ro(e,t);var n={}.toString.call(e).slice(8,-1);return n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set"?Array.from(e):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ro(e,t):void 0}}const Ia=Object.entries,io=Object.setPrototypeOf,tp=Object.isFrozen,np=Object.getPrototypeOf,rp=Object.getOwnPropertyDescriptor;let he=Object.freeze,Ee=Object.seal,It=Object.create,Ra=typeof Reflect!="undefined"&&Reflect,ii=Ra.apply,si=Ra.construct;he||(he=function(t){return t});Ee||(Ee=function(t){return t});ii||(ii=function(t,n){for(var r=arguments.length,i=new Array(r>2?r-2:0),s=2;s<r;s++)i[s-2]=arguments[s];return t.apply(n,i)});si||(si=function(t){for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];return new t(...r)});const At=ie(Array.prototype.forEach),ip=ie(Array.prototype.lastIndexOf),so=ie(Array.prototype.pop),St=ie(Array.prototype.push),sp=ie(Array.prototype.splice),fe=Array.isArray,Vt=ie(String.prototype.toLowerCase),Sr=ie(String.prototype.toString),oo=ie(String.prototype.match),Et=ie(String.prototype.replace),ao=ie(String.prototype.indexOf),op=ie(String.prototype.trim),ap=ie(Number.prototype.toString),lp=ie(Boolean.prototype.toString),lo=typeof BigInt=="undefined"?null:ie(BigInt.prototype.toString),co=typeof Symbol=="undefined"?null:ie(Symbol.prototype.toString),V=ie(Object.prototype.hasOwnProperty),Kt=ie(Object.prototype.toString),ae=ie(RegExp.prototype.test),Rn=cp(TypeError);function ie(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);for(var n=arguments.length,r=new Array(n>1?n-1:0),i=1;i<n;i++)r[i-1]=arguments[i];return ii(e,t,r)}}function cp(e){return function(){for(var t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return si(e,n)}}function I(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Vt;if(io&&io(e,null),!fe(t))return e;let r=t.length;for(;r--;){let i=t[r];if(typeof i=="string"){const s=n(i);s!==i&&(tp(t)||(t[r]=s),i=s)}e[i]=!0}return e}function up(e){for(let t=0;t<e.length;t++)V(e,t)||(e[t]=null);return e}function me(e){const t=It(null);for(const r of Ia(e)){var n=Vf(r,2);const i=n[0],s=n[1];V(e,i)&&(fe(s)?t[i]=up(s):s&&typeof s=="object"&&s.constructor===Object?t[i]=me(s):t[i]=s)}return t}function fp(e){switch(typeof e){case"string":return e;case"number":return ap(e);case"boolean":return lp(e);case"bigint":return lo?lo(e):"0";case"symbol":return co?co(e):"Symbol()";case"undefined":return Kt(e);case"function":case"object":{if(e===null)return Kt(e);const t=e,n=ft(t,"toString");if(typeof n=="function"){const r=n(t);return typeof r=="string"?r:Kt(r)}return Kt(e)}default:return Kt(e)}}function ft(e,t){for(;e!==null;){const r=rp(e,t);if(r){if(r.get)return ie(r.get);if(typeof r.value=="function")return ie(r.value)}e=np(e)}function n(){return null}return n}function pp(e){try{return ae(e,""),!0}catch{return!1}}const uo=he(["a","abbr","acronym","address","area","article","aside","audio","b","bdi","bdo","big","blink","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","content","data","datalist","dd","decorator","del","details","dfn","dialog","dir","div","dl","dt","element","em","fieldset","figcaption","figure","font","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","img","input","ins","kbd","label","legend","li","main","map","mark","marquee","menu","menuitem","meter","nav","nobr","ol","optgroup","option","output","p","picture","pre","progress","q","rp","rt","ruby","s","samp","search","section","select","shadow","slot","small","source","spacer","span","strike","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","tr","track","tt","u","ul","var","video","wbr"]),Er=he(["svg","a","altglyph","altglyphdef","altglyphitem","animatecolor","animatemotion","animatetransform","circle","clippath","defs","desc","ellipse","enterkeyhint","exportparts","filter","font","g","glyph","glyphref","hkern","image","inputmode","line","lineargradient","marker","mask","metadata","mpath","part","path","pattern","polygon","polyline","radialgradient","rect","stop","style","switch","symbol","text","textpath","title","tref","tspan","view","vkern"]),Or=he(["feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence"]),hp=he(["animate","color-profile","cursor","discard","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","foreignobject","hatch","hatchpath","mesh","meshgradient","meshpatch","meshrow","missing-glyph","script","set","solidcolor","unknown","use"]),$r=he(["math","menclose","merror","mfenced","mfrac","mglyph","mi","mlabeledtr","mmultiscripts","mn","mo","mover","mpadded","mphantom","mroot","mrow","ms","mspace","msqrt","mstyle","msub","msup","msubsup","mtable","mtd","mtext","mtr","munder","munderover","mprescripts"]),dp=he(["maction","maligngroup","malignmark","mlongdiv","mscarries","mscarry","msgroup","mstack","msline","msrow","semantics","annotation","annotation-xml","mprescripts","none"]),fo=he(["#text"]),po=he(["accept","action","align","alt","autocapitalize","autocomplete","autopictureinpicture","autoplay","background","bgcolor","border","capture","cellpadding","cellspacing","checked","cite","class","clear","color","cols","colspan","command","commandfor","controls","controlslist","coords","crossorigin","datetime","decoding","default","dir","disabled","disablepictureinpicture","disableremoteplayback","download","draggable","enctype","enterkeyhint","exportparts","face","for","headers","height","hidden","high","href","hreflang","id","inert","inputmode","integrity","ismap","kind","label","lang","list","loading","loop","low","max","maxlength","media","method","min","minlength","multiple","muted","name","nonce","noshade","novalidate","nowrap","open","optimum","part","pattern","placeholder","playsinline","popover","popovertarget","popovertargetaction","poster","preload","pubdate","radiogroup","readonly","rel","required","rev","reversed","role","rows","rowspan","spellcheck","scope","selected","shape","size","sizes","slot","span","srclang","start","src","srcset","step","style","summary","tabindex","title","translate","type","usemap","valign","value","width","wrap","xmlns"]),Ir=he(["accent-height","accumulate","additive","alignment-baseline","amplitude","ascent","attributename","attributetype","azimuth","basefrequency","baseline-shift","begin","bias","by","class","clip","clippathunits","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","cx","cy","d","dx","dy","diffuseconstant","direction","display","divisor","dur","edgemode","elevation","end","exponent","fill","fill-opacity","fill-rule","filter","filterunits","flood-color","flood-opacity","font-family","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","fx","fy","g1","g2","glyph-name","glyphref","gradientunits","gradienttransform","height","href","id","image-rendering","in","in2","intercept","k","k1","k2","k3","k4","kerning","keypoints","keysplines","keytimes","lang","lengthadjust","letter-spacing","kernelmatrix","kernelunitlength","lighting-color","local","marker-end","marker-mid","marker-start","markerheight","markerunits","markerwidth","maskcontentunits","maskunits","max","mask","mask-type","media","method","mode","min","name","numoctaves","offset","operator","opacity","order","orient","orientation","origin","overflow","paint-order","path","pathlength","patterncontentunits","patterntransform","patternunits","points","preservealpha","preserveaspectratio","primitiveunits","r","rx","ry","radius","refx","refy","repeatcount","repeatdur","restart","result","rotate","scale","seed","shape-rendering","slope","specularconstant","specularexponent","spreadmethod","startoffset","stddeviation","stitchtiles","stop-color","stop-opacity","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke","stroke-width","style","surfacescale","systemlanguage","tabindex","tablevalues","targetx","targety","transform","transform-origin","text-anchor","text-decoration","text-rendering","textlength","type","u1","u2","unicode","values","viewbox","visibility","version","vert-adv-y","vert-origin-x","vert-origin-y","width","word-spacing","wrap","writing-mode","xchannelselector","ychannelselector","x","x1","x2","xmlns","y","y1","y2","z","zoomandpan"]),ho=he(["accent","accentunder","align","bevelled","close","columnalign","columnlines","columnspacing","columnspan","denomalign","depth","dir","display","displaystyle","encoding","fence","frame","height","href","id","largeop","length","linethickness","lquote","lspace","mathbackground","mathcolor","mathsize","mathvariant","maxsize","minsize","movablelimits","notation","numalign","open","rowalign","rowlines","rowspacing","rowspan","rspace","rquote","scriptlevel","scriptminsize","scriptsizemultiplier","selection","separator","separators","stretchy","subscriptshift","supscriptshift","symmetric","voffset","width","xmlns"]),Dn=he(["xlink:href","xml:id","xlink:title","xml:space","xmlns:xlink"]),mp=Ee(/{{[\w\W]*|^[\w\W]*}}/g),gp=Ee(/<%[\w\W]*|^[\w\W]*%>/g),vp=Ee(/\${[\w\W]*/g),_p=Ee(/^data-[\-\w.\u00B7-\uFFFF]+$/),yp=Ee(/^aria-[\-\w]+$/),mo=Ee(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),bp=Ee(/^(?:\w+script|data):/i),wp=Ee(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),xp=Ee(/^html$/i),kp=Ee(/^[a-z][.\w]*(-[.\w]+)+$/i),Ot={element:1,text:3,progressingInstruction:7,comment:8,document:9},Tp=function(){return typeof window=="undefined"?null:window},Cp=function(t,n){if(typeof t!="object"||typeof t.createPolicy!="function")return null;let r=null;const i="data-tt-policy-suffix";n&&n.hasAttribute(i)&&(r=n.getAttribute(i));const s="dompurify"+(r?"#"+r:"");try{return t.createPolicy(s,{createHTML(o){return o},createScriptURL(o){return o}})}catch{return console.warn("TrustedTypes policy "+s+" could not be created."),null}},go=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}};function Da(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Tp();const t=k=>Da(k);if(t.version="3.4.5",t.removed=[],!e||!e.document||e.document.nodeType!==Ot.document||!e.Element)return t.isSupported=!1,t;let n=e.document;const r=n,i=r.currentScript,s=e.DocumentFragment,o=e.HTMLTemplateElement,a=e.Node,l=e.Element,u=e.NodeFilter,f=e.NamedNodeMap,v=f===void 0?e.NamedNodeMap||e.MozNamedAttrMap:f,y=e.HTMLFormElement,_=e.DOMParser,b=e.trustedTypes,A=l.prototype,C=ft(A,"cloneNode"),D=ft(A,"remove"),S=ft(A,"nextSibling"),z=ft(A,"childNodes"),te=ft(A,"parentNode"),ce=a&&a.prototype?ft(a.prototype,"nodeType"):null;if(typeof o=="function"){const k=n.createElement("template");k.content&&k.content.ownerDocument&&(n=k.content.ownerDocument)}let W,J="";const ue=n,Be=ue.implementation,at=ue.createNodeIterator,Xe=ue.createDocumentFragment,h=ue.getElementsByTagName,p=r.importNode;let m=go();t.isSupported=typeof Ia=="function"&&typeof te=="function"&&Be&&Be.createHTMLDocument!==void 0;const x=mp,T=gp,R=vp,E=_p,$=yp,P=bp,M=wp,F=kp;let Q=mo,B=null;const Le=I({},[...uo,...Er,...Or,...$r,...fo]);let Y=null;const Ne=I({},[...po,...Ir,...ho,...Dn]);let U=Object.seal(It(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),He=null,gn=null;const Ke=Object.seal(It(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}}));let Li=!0,sr=!0,Ni=!1,Pi=!0,Je=!1,Ut=!0,lt=!1,or=!1,ar=!1,xt=!1,vn=!1,_n=!1,Mi=!0,Fi=!1;const zi="user-content-";let lr=!0,jt=!1,kt={},Pe=null;const cr=I({},["annotation-xml","audio","colgroup","desc","foreignobject","head","iframe","math","mi","mn","mo","ms","mtext","noembed","noframes","noscript","plaintext","script","style","svg","template","thead","title","video","xmp"]);let Bi=null;const Hi=I({},["audio","video","img","source","image","track"]);let ur=null;const Ui=I({},["alt","class","for","id","label","name","pattern","placeholder","role","summary","title","value","style","xmlns"]),yn="http://www.w3.org/1998/Math/MathML",bn="http://www.w3.org/2000/svg",Me="http://www.w3.org/1999/xhtml";let Tt=Me,fr=!1,pr=null;const Pa=I({},[yn,bn,Me],Sr);let hr=I({},["mi","mo","mn","ms","mtext"]),dr=I({},["annotation-xml"]);const Ma=I({},["title","style","font","a","script"]);let Wt=null;const Fa=["application/xhtml+xml","text/html"],za="text/html";let se=null,Ct=null;const Ba=n.createElement("form"),ji=function(c){return c instanceof RegExp||c instanceof Function},mr=function(){let c=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(Ct&&Ct===c)return;(!c||typeof c!="object")&&(c={}),c=me(c),Wt=Fa.indexOf(c.PARSER_MEDIA_TYPE)===-1?za:c.PARSER_MEDIA_TYPE,se=Wt==="application/xhtml+xml"?Sr:Vt,B=V(c,"ALLOWED_TAGS")&&fe(c.ALLOWED_TAGS)?I({},c.ALLOWED_TAGS,se):Le,Y=V(c,"ALLOWED_ATTR")&&fe(c.ALLOWED_ATTR)?I({},c.ALLOWED_ATTR,se):Ne,pr=V(c,"ALLOWED_NAMESPACES")&&fe(c.ALLOWED_NAMESPACES)?I({},c.ALLOWED_NAMESPACES,Sr):Pa,ur=V(c,"ADD_URI_SAFE_ATTR")&&fe(c.ADD_URI_SAFE_ATTR)?I(me(Ui),c.ADD_URI_SAFE_ATTR,se):Ui,Bi=V(c,"ADD_DATA_URI_TAGS")&&fe(c.ADD_DATA_URI_TAGS)?I(me(Hi),c.ADD_DATA_URI_TAGS,se):Hi,Pe=V(c,"FORBID_CONTENTS")&&fe(c.FORBID_CONTENTS)?I({},c.FORBID_CONTENTS,se):cr,He=V(c,"FORBID_TAGS")&&fe(c.FORBID_TAGS)?I({},c.FORBID_TAGS,se):me({}),gn=V(c,"FORBID_ATTR")&&fe(c.FORBID_ATTR)?I({},c.FORBID_ATTR,se):me({}),kt=V(c,"USE_PROFILES")?c.USE_PROFILES&&typeof c.USE_PROFILES=="object"?me(c.USE_PROFILES):c.USE_PROFILES:!1,Li=c.ALLOW_ARIA_ATTR!==!1,sr=c.ALLOW_DATA_ATTR!==!1,Ni=c.ALLOW_UNKNOWN_PROTOCOLS||!1,Pi=c.ALLOW_SELF_CLOSE_IN_ATTR!==!1,Je=c.SAFE_FOR_TEMPLATES||!1,Ut=c.SAFE_FOR_XML!==!1,lt=c.WHOLE_DOCUMENT||!1,xt=c.RETURN_DOM||!1,vn=c.RETURN_DOM_FRAGMENT||!1,_n=c.RETURN_TRUSTED_TYPE||!1,ar=c.FORCE_BODY||!1,Mi=c.SANITIZE_DOM!==!1,Fi=c.SANITIZE_NAMED_PROPS||!1,lr=c.KEEP_CONTENT!==!1,jt=c.IN_PLACE||!1,Q=pp(c.ALLOWED_URI_REGEXP)?c.ALLOWED_URI_REGEXP:mo,Tt=typeof c.NAMESPACE=="string"?c.NAMESPACE:Me,hr=V(c,"MATHML_TEXT_INTEGRATION_POINTS")&&c.MATHML_TEXT_INTEGRATION_POINTS&&typeof c.MATHML_TEXT_INTEGRATION_POINTS=="object"?me(c.MATHML_TEXT_INTEGRATION_POINTS):I({},["mi","mo","mn","ms","mtext"]),dr=V(c,"HTML_INTEGRATION_POINTS")&&c.HTML_INTEGRATION_POINTS&&typeof c.HTML_INTEGRATION_POINTS=="object"?me(c.HTML_INTEGRATION_POINTS):I({},["annotation-xml"]);const g=V(c,"CUSTOM_ELEMENT_HANDLING")&&c.CUSTOM_ELEMENT_HANDLING&&typeof c.CUSTOM_ELEMENT_HANDLING=="object"?me(c.CUSTOM_ELEMENT_HANDLING):It(null);if(U=It(null),V(g,"tagNameCheck")&&ji(g.tagNameCheck)&&(U.tagNameCheck=g.tagNameCheck),V(g,"attributeNameCheck")&&ji(g.attributeNameCheck)&&(U.attributeNameCheck=g.attributeNameCheck),V(g,"allowCustomizedBuiltInElements")&&typeof g.allowCustomizedBuiltInElements=="boolean"&&(U.allowCustomizedBuiltInElements=g.allowCustomizedBuiltInElements),Je&&(sr=!1),vn&&(xt=!0),kt&&(B=I({},fo),Y=It(null),kt.html===!0&&(I(B,uo),I(Y,po)),kt.svg===!0&&(I(B,Er),I(Y,Ir),I(Y,Dn)),kt.svgFilters===!0&&(I(B,Or),I(Y,Ir),I(Y,Dn)),kt.mathMl===!0&&(I(B,$r),I(Y,ho),I(Y,Dn))),Ke.tagCheck=null,Ke.attributeCheck=null,V(c,"ADD_TAGS")&&(typeof c.ADD_TAGS=="function"?Ke.tagCheck=c.ADD_TAGS:fe(c.ADD_TAGS)&&(B===Le&&(B=me(B)),I(B,c.ADD_TAGS,se))),V(c,"ADD_ATTR")&&(typeof c.ADD_ATTR=="function"?Ke.attributeCheck=c.ADD_ATTR:fe(c.ADD_ATTR)&&(Y===Ne&&(Y=me(Y)),I(Y,c.ADD_ATTR,se))),V(c,"ADD_URI_SAFE_ATTR")&&fe(c.ADD_URI_SAFE_ATTR)&&I(ur,c.ADD_URI_SAFE_ATTR,se),V(c,"FORBID_CONTENTS")&&fe(c.FORBID_CONTENTS)&&(Pe===cr&&(Pe=me(Pe)),I(Pe,c.FORBID_CONTENTS,se)),V(c,"ADD_FORBID_CONTENTS")&&fe(c.ADD_FORBID_CONTENTS)&&(Pe===cr&&(Pe=me(Pe)),I(Pe,c.ADD_FORBID_CONTENTS,se)),lr&&(B["#text"]=!0),lt&&I(B,["html","head","body"]),B.table&&(I(B,["tbody"]),delete He.tbody),c.TRUSTED_TYPES_POLICY){if(typeof c.TRUSTED_TYPES_POLICY.createHTML!="function")throw Rn('TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.');if(typeof c.TRUSTED_TYPES_POLICY.createScriptURL!="function")throw Rn('TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.');W=c.TRUSTED_TYPES_POLICY,J=W.createHTML("")}else W===void 0&&(W=Cp(b,i)),W!==null&&typeof J=="string"&&(J=W.createHTML(""));he&&he(c),Ct=c},Wi=I({},[...Er,...Or,...hp]),Gi=I({},[...$r,...dp]),Ha=function(c){let g=te(c);(!g||!g.tagName)&&(g={namespaceURI:Tt,tagName:"template"});const w=Vt(c.tagName),N=Vt(g.tagName);return pr[c.namespaceURI]?c.namespaceURI===bn?g.namespaceURI===Me?w==="svg":g.namespaceURI===yn?w==="svg"&&(N==="annotation-xml"||hr[N]):!!Wi[w]:c.namespaceURI===yn?g.namespaceURI===Me?w==="math":g.namespaceURI===bn?w==="math"&&dr[N]:!!Gi[w]:c.namespaceURI===Me?g.namespaceURI===bn&&!dr[N]||g.namespaceURI===yn&&!hr[N]?!1:!Gi[w]&&(Ma[w]||!Wi[w]):!!(Wt==="application/xhtml+xml"&&pr[c.namespaceURI]):!1},Oe=function(c){St(t.removed,{element:c});try{te(c).removeChild(c)}catch{D(c)}},ct=function(c,g){try{St(t.removed,{attribute:g.getAttributeNode(c),from:g})}catch{St(t.removed,{attribute:null,from:g})}if(g.removeAttribute(c),c==="is")if(xt||vn)try{Oe(g)}catch{}else try{g.setAttribute(c,"")}catch{}},qi=function(c){let g=null,w=null;if(ar)c="<remove></remove>"+c;else{const re=oo(c,/^[\r\n\t ]+/);w=re&&re[0]}Wt==="application/xhtml+xml"&&Tt===Me&&(c='<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>'+c+"</body></html>");const N=W?W.createHTML(c):c;if(Tt===Me)try{g=new _().parseFromString(N,Wt)}catch{}if(!g||!g.documentElement){g=Be.createDocument(Tt,"template",null);try{g.documentElement.innerHTML=fr?J:N}catch{}}const ne=g.body||g.documentElement;return c&&w&&ne.insertBefore(n.createTextNode(w),ne.childNodes[0]||null),Tt===Me?h.call(g,lt?"html":"body")[0]:lt?g.documentElement:ne},Zi=function(c){return at.call(c.ownerDocument||c,c,u.SHOW_ELEMENT|u.SHOW_COMMENT|u.SHOW_TEXT|u.SHOW_PROCESSING_INSTRUCTION|u.SHOW_CDATA_SECTION,null)},Yi=function(c){c.normalize();const g=at.call(c.ownerDocument||c,c,u.SHOW_TEXT|u.SHOW_COMMENT|u.SHOW_CDATA_SECTION|u.SHOW_PROCESSING_INSTRUCTION,null);let w=g.nextNode();for(;w;){let N=w.data;At([x,T,R],ne=>{N=Et(N,ne," ")}),w.data=N,w=g.nextNode()}},gr=function(c){return c instanceof y&&(typeof c.nodeName!="string"||typeof c.textContent!="string"||typeof c.removeChild!="function"||!(c.attributes instanceof v)||typeof c.removeAttribute!="function"||typeof c.setAttribute!="function"||typeof c.namespaceURI!="string"||typeof c.insertBefore!="function"||typeof c.hasChildNodes!="function")},wn=function(c){if(!ce||typeof c!="object"||c===null)return!1;try{return typeof ce(c)=="number"}catch{return!1}};function Ue(k,c,g){At(k,w=>{w.call(t,c,g,Ct)})}const Xi=function(c){let g=null;if(Ue(m.beforeSanitizeElements,c,null),gr(c))return Oe(c),!0;const w=se(c.nodeName);if(Ue(m.uponSanitizeElement,c,{tagName:w,allowedTags:B}),Ut&&c.hasChildNodes()&&!wn(c.firstElementChild)&&ae(/<[/\w!]/g,c.innerHTML)&&ae(/<[/\w!]/g,c.textContent)||Ut&&c.namespaceURI===Me&&w==="style"&&wn(c.firstElementChild)||c.nodeType===Ot.progressingInstruction||Ut&&c.nodeType===Ot.comment&&ae(/<[/\w]/g,c.data))return Oe(c),!0;if(He[w]||!(Ke.tagCheck instanceof Function&&Ke.tagCheck(w))&&!B[w]){if(!He[w]&&Ji(w)&&(U.tagNameCheck instanceof RegExp&&ae(U.tagNameCheck,w)||U.tagNameCheck instanceof Function&&U.tagNameCheck(w)))return!1;if(lr&&!Pe[w]){const N=te(c)||c.parentNode,ne=z(c)||c.childNodes;if(ne&&N){const re=ne.length;for(let de=re-1;de>=0;--de){const Qe=C(ne[de],!0);N.insertBefore(Qe,S(c))}}}return Oe(c),!0}return c instanceof l&&!Ha(c)||(w==="noscript"||w==="noembed"||w==="noframes")&&ae(/<\/no(script|embed|frames)/i,c.innerHTML)?(Oe(c),!0):(Je&&c.nodeType===Ot.text&&(g=c.textContent,At([x,T,R],N=>{g=Et(g,N," ")}),c.textContent!==g&&(St(t.removed,{element:c.cloneNode()}),c.textContent=g)),Ue(m.afterSanitizeElements,c,null),!1)},Ki=function(c,g,w){if(gn[g]||Mi&&(g==="id"||g==="name")&&(w in n||w in Ba))return!1;const N=Y[g]||Ke.attributeCheck instanceof Function&&Ke.attributeCheck(g,c);if(!(sr&&!gn[g]&&ae(E,g))){if(!(Li&&ae($,g))){if(!N||gn[g]){if(!(Ji(c)&&(U.tagNameCheck instanceof RegExp&&ae(U.tagNameCheck,c)||U.tagNameCheck instanceof Function&&U.tagNameCheck(c))&&(U.attributeNameCheck instanceof RegExp&&ae(U.attributeNameCheck,g)||U.attributeNameCheck instanceof Function&&U.attributeNameCheck(g,c))||g==="is"&&U.allowCustomizedBuiltInElements&&(U.tagNameCheck instanceof RegExp&&ae(U.tagNameCheck,w)||U.tagNameCheck instanceof Function&&U.tagNameCheck(w))))return!1}else if(!ur[g]){if(!ae(Q,Et(w,M,""))){if(!((g==="src"||g==="xlink:href"||g==="href")&&c!=="script"&&ao(w,"data:")===0&&Bi[c])){if(!(Ni&&!ae(P,Et(w,M,"")))){if(w)return!1}}}}}}return!0},Ua=I({},["annotation-xml","color-profile","font-face","font-face-format","font-face-name","font-face-src","font-face-uri","missing-glyph"]),Ji=function(c){return!Ua[Vt(c)]&&ae(F,c)},Qi=function(c){Ue(m.beforeSanitizeAttributes,c,null);const g=c.attributes;if(!g||gr(c))return;const w={attrName:"",attrValue:"",keepAttr:!0,allowedAttributes:Y,forceKeepAttr:void 0};let N=g.length;for(;N--;){const ne=g[N],re=ne.name,de=ne.namespaceURI,Qe=ne.value,je=se(re),_r=Qe;let oe=re==="value"?_r:op(_r);if(w.attrName=je,w.attrValue=oe,w.keepAttr=!0,w.forceKeepAttr=void 0,Ue(m.uponSanitizeAttribute,c,w),oe=w.attrValue,Fi&&(je==="id"||je==="name")&&ao(oe,zi)!==0&&(ct(re,c),oe=zi+oe),Ut&&ae(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,oe)){ct(re,c);continue}if(je==="attributename"&&oo(oe,"href")){ct(re,c);continue}if(w.forceKeepAttr)continue;if(!w.keepAttr){ct(re,c);continue}if(!Pi&&ae(/\/>/i,oe)){ct(re,c);continue}Je&&At([x,T,R],es=>{oe=Et(oe,es," ")});const Vi=se(c.nodeName);if(!Ki(Vi,je,oe)){ct(re,c);continue}if(W&&typeof b=="object"&&typeof b.getAttributeType=="function"&&!de)switch(b.getAttributeType(Vi,je)){case"TrustedHTML":{oe=W.createHTML(oe);break}case"TrustedScriptURL":{oe=W.createScriptURL(oe);break}}if(oe!==_r)try{de?c.setAttributeNS(de,re,oe):c.setAttribute(re,oe),gr(c)?Oe(c):so(t.removed)}catch{ct(re,c)}}Ue(m.afterSanitizeAttributes,c,null)},vr=function(c){let g=null;const w=Zi(c);for(Ue(m.beforeSanitizeShadowDOM,c,null);g=w.nextNode();)Ue(m.uponSanitizeShadowNode,g,null),Xi(g),Qi(g),g.content instanceof s&&vr(g.content);Ue(m.afterSanitizeShadowDOM,c,null)},xn=function(c){if(c.nodeType===Ot.element&&c.shadowRoot instanceof s){const N=c.shadowRoot;xn(N),vr(N)}const g=c.childNodes;if(!g)return;const w=[];At(g,N=>{St(w,N)});for(const N of w)xn(N)};return t.sanitize=function(k){let c=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},g=null,w=null,N=null,ne=null;if(fr=!k,fr&&(k="<!-->"),typeof k!="string"&&!wn(k)&&(k=fp(k),typeof k!="string"))throw Rn("dirty is not a string, aborting");if(!t.isSupported)return k;if(or||mr(c),t.removed=[],typeof k=="string"&&(jt=!1),jt){const Qe=k.nodeName;if(typeof Qe=="string"){const je=se(Qe);if(!B[je]||He[je])throw Rn("root node is forbidden and cannot be sanitized in-place")}xn(k)}else if(wn(k))g=qi("<!---->"),w=g.ownerDocument.importNode(k,!0),w.nodeType===Ot.element&&w.nodeName==="BODY"||w.nodeName==="HTML"?g=w:g.appendChild(w),xn(w);else{if(!xt&&!Je&&!lt&&k.indexOf("<")===-1)return W&&_n?W.createHTML(k):k;if(g=qi(k),!g)return xt?null:_n?J:""}g&&ar&&Oe(g.firstChild);const re=Zi(jt?k:g);for(;N=re.nextNode();)Xi(N),Qi(N),N.content instanceof s&&vr(N.content);if(jt)return Je&&Yi(k),k;if(xt){if(Je&&Yi(g),vn)for(ne=Xe.call(g.ownerDocument);g.firstChild;)ne.appendChild(g.firstChild);else ne=g;return(Y.shadowroot||Y.shadowrootmode)&&(ne=p.call(r,ne,!0)),ne}let de=lt?g.outerHTML:g.innerHTML;return lt&&B["!doctype"]&&g.ownerDocument&&g.ownerDocument.doctype&&g.ownerDocument.doctype.name&&ae(xp,g.ownerDocument.doctype.name)&&(de="<!DOCTYPE "+g.ownerDocument.doctype.name+`>
|
|
62
|
-
`+de),Je&&At([x,T,R],Qe=>{de=Et(de,Qe," ")}),W&&_n?W.createHTML(de):de},t.setConfig=function(){let k=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};mr(k),or=!0},t.clearConfig=function(){Ct=null,or=!1},t.isValidAttribute=function(k,c,g){Ct||mr({});const w=se(k),N=se(c);return Ki(w,N,g)},t.addHook=function(k,c){typeof c=="function"&&St(m[k],c)},t.removeHook=function(k,c){if(c!==void 0){const g=ip(m[k],c);return g===-1?void 0:sp(m[k],g,1)[0]}return so(m[k])},t.removeHooks=function(k){m[k]=[]},t.removeAllHooks=function(){m=go()},t}var Ap=Da();function Sp(e){return btoa(unescape(encodeURIComponent(e)))}function Rr(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}H.use({gfm:!0,breaks:!0,renderer:{code(e){var o,a;const t=(o=e.text)!=null?o:"",r=((a=e.lang)!=null?a:"").trim()||"text",i=Rr(t),s=Sp(t);return`<div class="code-card"><div class="code-head"><span class="code-lang">${Rr(r)}</span><button type="button" class="code-copy" data-code="${s}" aria-label="코드 복사"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="11" height="11" rx="2"/><path d="M5 15V5a2 2 0 0 1 2-2h10"/></svg><span class="code-copy-label">복사</span></button></div><pre class="code-body"><code class="language-${Rr(r)}">${i}</code></pre></div>`}}});function Ep(e){return{hasUnclosedCodeBlock:(e.match(/```/g)||[]).length%2===1,hasUnclosedInlineCode:(e.replace(/```[\s\S]*?```/g,"").match(/`/g)||[]).length%2===1}}function Op(e,t=!1){let n=e;if(t){const i=Ep(e);i.hasUnclosedCodeBlock&&(n+="\n```"),i.hasUnclosedInlineCode&&(n+="`")}const r=H.parse(n);return Ap.sanitize(r,{ADD_ATTR:["target","rel","data-code"]})}async function $p(e){const t=e.closest(".code-copy");if(!t)return!1;const n=t.getAttribute("data-code")||"";if(!n)return!1;let r="";try{r=decodeURIComponent(escape(atob(n)))}catch{r=atob(n)}try{return await navigator.clipboard.writeText(r),vo(t),!0}catch{const i=document.createElement("textarea");i.value=r,document.body.appendChild(i),i.select();try{document.execCommand("copy")}catch{}return i.remove(),vo(t),!0}}function vo(e){const t=e.querySelector(".code-copy-label"),n=t==null?void 0:t.textContent;t&&(t.textContent="복사됨"),e.classList.add("is-copied"),setTimeout(()=>{t&&n&&(t.textContent=n),e.classList.remove("is-copied")},1400)}const Ip={name:"StreamingMarkdown",props:{content:{type:String,required:!0},isStreaming:{type:Boolean,default:!1}},setup(e){const t=$e(null),n=dl(()=>Op(e.content,e.isStreaming));function r(i){const s=i.target;s&&$p(s)}return{root:t,rendered:n,onClick:r}}};function Ht(e,t,n,r,i,s,o,a){var l=typeof e=="function"?e.options:e;return t&&(l.render=t,l.staticRenderFns=n,l._compiled=!0),s&&(l._scopeId="data-v-"+s),{exports:e,options:l}}var Rp=function(){var t=this,n=t._self._c;return t._self._setupProxy,n("div",{ref:"root",staticClass:"sm-root",domProps:{innerHTML:t._s(t.rendered)},on:{click:t.onClick}})},Dp=[],Lp=Ht(Ip,Rp,Dp,!1,null,null);const Np=Lp.exports,Pp={name:"CitationList",props:{items:{type:Array,required:!0}},setup(){return{open:$e(!1)}}};var Mp=function(){var t=this,n=t._self._c;return t._self._setupProxy,t.items&&t.items.length?n("div",{staticClass:"cl-root"},[n("button",{staticClass:"cl-toggle",attrs:{type:"button","aria-expanded":t.open},on:{click:function(r){t.open=!t.open}}},[n("span",{staticClass:"cl-chev",class:{"cl-chev-open":t.open}},[t._v("▸")]),n("span",{staticClass:"cl-toggle-label"},[t._v("출처 "+t._s(t.items.length)+"건")]),n("span",{staticClass:"cl-toggle-hint"},[t._v(t._s(t.open?"접기":"펼치기"))])]),n("transition",{attrs:{name:"cl-fade"}},[t.open?n("div",{staticClass:"cl-list"},t._l(t.items,function(r){return n("div",{key:r.index,staticClass:"cl-card"},[n("div",{staticClass:"cl-card-head"},[n("span",{staticClass:"cl-idx"},[t._v("["+t._s(r.index)+"]")]),n("span",{staticClass:"cl-title"},[t._v(t._s(r.title))]),n("span",{staticClass:"cl-score"},[t._v(t._s(r.score.toFixed(2)))])]),n("div",{staticClass:"cl-meta"},[t._v(t._s(r.collection)),r.source?n("span",[t._v(" · "+t._s(r.source))]):t._e()]),n("div",{staticClass:"cl-preview"},[t._v(t._s(r.preview))])])}),0):t._e()])],1):t._e()},Fp=[],zp=Ht(Pp,Mp,Fp,!1,null,"4145e81e");const Bp=zp.exports,Hp={name:"MessageItem",components:{StreamingMarkdown:Np,CitationList:Bp},props:{message:{type:Object,required:!0}}};var Up=function(){var t=this,n=t._self._c;return t._self._setupProxy,n("div",{class:["mi-row","mi-"+t.message.role]},[t.message.role==="assistant"?[n("div",{staticClass:"mi-avatar mi-avatar-assistant",attrs:{"aria-hidden":"true"}},[n("svg",{attrs:{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[n("path",{attrs:{d:"M12 2 L14.2 9.8 L22 12 L14.2 14.2 L12 22 L9.8 14.2 L2 12 L9.8 9.8 Z",fill:"currentColor"}}),n("circle",{attrs:{cx:"19",cy:"5",r:"1.6",fill:"currentColor",opacity:"0.85"}}),n("circle",{attrs:{cx:"5",cy:"19",r:"1.1",fill:"currentColor",opacity:"0.7"}})])]),n("div",{staticClass:"mi-body"},[n("div",{staticClass:"mi-role"},[t._v("BDP Agent")]),t.message.status?n("div",{staticClass:"mi-status"},[n("span",{staticClass:"mi-dot"}),t._v(t._s(t.message.status)+" ")]):t._e(),t.message.content?n("StreamingMarkdown",{attrs:{content:t.message.content,"is-streaming":!!t.message.isStreaming}}):t.message.isStreaming?n("div",{staticClass:"mi-typing"},[n("span"),n("span"),n("span")]):t._e(),t.message.error?n("div",{staticClass:"mi-error"},[t._v("⚠️ "+t._s(t.message.error))]):t._e(),t.message.citations&&t.message.citations.length?n("CitationList",{attrs:{items:t.message.citations}}):t._e()],1)]:[n("div",{staticClass:"mi-body mi-body-user"},[n("div",{staticClass:"mi-bubble-user"},[t._v(t._s(t.message.content))])])]],2)},jp=[],Wp=Ht(Hp,Up,jp,!1,null,"d7ac471d");const Gp=Wp.exports,qp={name:"ChatInput",props:{busy:{type:Boolean,default:!1},placeholder:{type:String,default:"질문을 입력하세요..."}},emits:["submit"],setup(e,{emit:t}){const n=$e("");function r(){const s=n.value.trim();s&&(t("submit",s),n.value="")}function i(){}return{text:n,submit:r,onShiftEnter:i}}};var Zp=function(){var t=this,n=t._self._c;return t._self._setupProxy,n("div",{staticClass:"ci-root"},[n("div",{staticClass:"ci-box"},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:t.text,expression:"text"}],ref:"ta",attrs:{placeholder:t.placeholder,disabled:t.busy,rows:"2"},domProps:{value:t.text},on:{keydown:[function(r){return!r.type.indexOf("key")&&t._k(r.keyCode,"enter",13,r.key,"Enter")||r.ctrlKey||r.shiftKey||r.altKey||r.metaKey?null:(r.preventDefault(),t.submit.apply(null,arguments))},function(r){return!r.type.indexOf("key")&&t._k(r.keyCode,"enter",13,r.key,"Enter")||!r.shiftKey||r.ctrlKey||r.altKey||r.metaKey?null:t.onShiftEnter.apply(null,arguments)}],input:function(r){r.target.composing||(t.text=r.target.value)}}}),t._v(" "),n("button",{staticClass:"ci-send",attrs:{disabled:t.busy||!t.text.trim(),type:"button"},on:{click:t.submit}},[t.busy?n("span",[t._v("...")]):n("span",[t._v("전송")])])]),n("div",{staticClass:"ci-hint"},[t._v("Enter 로 전송 · Shift+Enter 줄바꿈")])])},Yp=[],Xp=Ht(qp,Zp,Yp,!1,null,"37c22e85");const Kp=Xp.exports,Jp={name:"HistoryPanel",props:{items:{type:Array,required:!0},activeId:{type:String,default:null}},emits:["select","delete","new","clear"],setup(e,{emit:t}){function n(o){const a=new Date(o),l=new Date;return a.getFullYear()===l.getFullYear()&&a.getMonth()===l.getMonth()&&a.getDate()===l.getDate()?`${r(a.getHours())}:${r(a.getMinutes())}`:`${a.getMonth()+1}/${a.getDate()}`}function r(o){return o<10?"0"+o:""+o}function i(o){return`${o.messages.filter(l=>l.role==="user").length}개 질문`}function s(){confirm("모든 대화 이력을 삭제할까요?")&&t("clear")}return{formatTime:n,messageCount:i,onClearAll:s}}};var Qp=function(){var t=this,n=t._self._c;return t._self._setupProxy,n("aside",{staticClass:"hp-root"},[n("div",{staticClass:"hp-head"},[n("span",{staticClass:"hp-title"},[t._v("대화 이력")]),t.items.length?n("button",{staticClass:"hp-clear",attrs:{type:"button"},on:{click:t.onClearAll}},[t._v("전체 삭제")]):t._e()]),n("button",{staticClass:"hp-new",attrs:{type:"button"},on:{click:function(r){return t.$emit("new")}}},[n("span",{staticClass:"hp-plus"},[t._v("+")]),t._v(" 새 대화 ")]),t.items.length?n("ul",{staticClass:"hp-list"},t._l(t.items,function(r){return n("li",{key:r.id,class:["hp-item",r.id===t.activeId&&"hp-item-active"],on:{click:function(i){return t.$emit("select",r.id)}}},[n("div",{staticClass:"hp-item-title"},[t._v(t._s(r.title))]),n("div",{staticClass:"hp-item-meta"},[n("span",[t._v(t._s(t.formatTime(r.updatedAt)))]),n("span",[t._v("·")]),n("span",[t._v(t._s(t.messageCount(r)))])]),n("button",{staticClass:"hp-del",attrs:{type:"button","aria-label":"대화 삭제"},on:{click:function(i){return i.stopPropagation(),t.$emit("delete",r.id)}}},[t._v("×")])])}),0):n("div",{staticClass:"hp-empty"},[t._v(" 아직 대화가 없습니다. ")])])},Vp=[],eh=Ht(Jp,Qp,Vp,!1,null,"23993444");const th=eh.exports,nh="*",Fe=pl({token:null,baseUrl:null,user:null,hostRoute:null});function oi(e){window.parent&&window.parent!==window&&window.parent.postMessage(e,nh)}function rh(){window.addEventListener("message",t=>{var r,i,s,o,a;const n=t.data;if(!(!n||typeof n!="object"))switch(n.type){case"init":Fe.token=(r=n.token)!=null?r:null,Fe.baseUrl=(i=n.baseUrl)!=null?i:null,Fe.user=(s=n.user)!=null?s:null;break;case"token":Fe.token=(o=n.token)!=null?o:null;break;case"route":Fe.hostRoute=(a=n.path)!=null?a:null;break}}),new ResizeObserver(()=>{const t=document.documentElement.scrollHeight;oi({type:"height",value:t})}).observe(document.documentElement),oi({type:"ready"})}function ih(){oi({type:"request-token"})}Po(()=>({...Fe}),e=>console.debug("[sample-feature] session updated",e),{deep:!0});const Dr={},sh=(Dr==null?void 0:Dr.VITE_USE_MOCK)!=="false";async function oh(e,t,n){if(sh||!Fe.baseUrl)return lh(e,t,n);const r=(Fe.baseUrl||"")+"/agents/hdsp_rag/chat/stream",i={"Content-Type":"application/json",Accept:"text/event-stream"};Fe.token&&(i.Authorization=`Bearer ${Fe.token}`);const s=await fetch(r,{method:"POST",headers:i,body:JSON.stringify(e),signal:n});if(s.status===401)throw ih(),new Error("401 unauthorized — 토큰 갱신 요청");if(!s.ok){const u=await s.text();throw new Error(`backend ${s.status}: ${u.slice(0,300)}`)}if(!s.body)throw new Error("no response body");const o=s.body.getReader(),a=new TextDecoder;let l="";for(;;){const{value:u,done:f}=await o.read();if(f)break;l+=a.decode(u,{stream:!0});let v;for(;(v=l.indexOf(`
|
|
62
|
+
`+de),Je&&At([x,T,R],Qe=>{de=Et(de,Qe," ")}),W&&_n?W.createHTML(de):de},t.setConfig=function(){let k=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};mr(k),or=!0},t.clearConfig=function(){Ct=null,or=!1},t.isValidAttribute=function(k,c,g){Ct||mr({});const w=se(k),N=se(c);return Ki(w,N,g)},t.addHook=function(k,c){typeof c=="function"&&St(m[k],c)},t.removeHook=function(k,c){if(c!==void 0){const g=ip(m[k],c);return g===-1?void 0:sp(m[k],g,1)[0]}return so(m[k])},t.removeHooks=function(k){m[k]=[]},t.removeAllHooks=function(){m=go()},t}var Ap=Da();function Sp(e){return btoa(unescape(encodeURIComponent(e)))}function Rr(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}H.use({gfm:!0,breaks:!0,renderer:{code(e){var o,a;const t=(o=e.text)!=null?o:"",r=((a=e.lang)!=null?a:"").trim()||"text",i=Rr(t),s=Sp(t);return`<div class="code-card"><div class="code-head"><span class="code-lang">${Rr(r)}</span><button type="button" class="code-copy" data-code="${s}" aria-label="코드 복사"><svg viewBox="0 0 24 24" width="14" height="14" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="9" y="9" width="11" height="11" rx="2"/><path d="M5 15V5a2 2 0 0 1 2-2h10"/></svg><span class="code-copy-label">복사</span></button></div><pre class="code-body"><code class="language-${Rr(r)}">${i}</code></pre></div>`}}});function Ep(e){return{hasUnclosedCodeBlock:(e.match(/```/g)||[]).length%2===1,hasUnclosedInlineCode:(e.replace(/```[\s\S]*?```/g,"").match(/`/g)||[]).length%2===1}}function Op(e,t=!1){let n=e;if(t){const i=Ep(e);i.hasUnclosedCodeBlock&&(n+="\n```"),i.hasUnclosedInlineCode&&(n+="`")}const r=H.parse(n);return Ap.sanitize(r,{ADD_ATTR:["target","rel","data-code"]})}async function $p(e){const t=e.closest(".code-copy");if(!t)return!1;const n=t.getAttribute("data-code")||"";if(!n)return!1;let r="";try{r=decodeURIComponent(escape(atob(n)))}catch{r=atob(n)}try{return await navigator.clipboard.writeText(r),vo(t),!0}catch{const i=document.createElement("textarea");i.value=r,document.body.appendChild(i),i.select();try{document.execCommand("copy")}catch{}return i.remove(),vo(t),!0}}function vo(e){const t=e.querySelector(".code-copy-label"),n=t==null?void 0:t.textContent;t&&(t.textContent="복사됨"),e.classList.add("is-copied"),setTimeout(()=>{t&&n&&(t.textContent=n),e.classList.remove("is-copied")},1400)}const Ip={name:"StreamingMarkdown",props:{content:{type:String,required:!0},isStreaming:{type:Boolean,default:!1}},setup(e){const t=$e(null),n=dl(()=>Op(e.content,e.isStreaming));function r(i){const s=i.target;s&&$p(s)}return{root:t,rendered:n,onClick:r}}};function Ht(e,t,n,r,i,s,o,a){var l=typeof e=="function"?e.options:e;return t&&(l.render=t,l.staticRenderFns=n,l._compiled=!0),s&&(l._scopeId="data-v-"+s),{exports:e,options:l}}var Rp=function(){var t=this,n=t._self._c;return t._self._setupProxy,n("div",{ref:"root",staticClass:"sm-root",domProps:{innerHTML:t._s(t.rendered)},on:{click:t.onClick}})},Dp=[],Lp=Ht(Ip,Rp,Dp,!1,null,null);const Np=Lp.exports,Pp={name:"CitationList",props:{items:{type:Array,required:!0}},setup(){return{open:$e(!1)}}};var Mp=function(){var t=this,n=t._self._c;return t._self._setupProxy,t.items&&t.items.length?n("div",{staticClass:"cl-root"},[n("button",{staticClass:"cl-toggle",attrs:{type:"button","aria-expanded":t.open},on:{click:function(r){t.open=!t.open}}},[n("span",{staticClass:"cl-chev",class:{"cl-chev-open":t.open}},[t._v("▸")]),n("span",{staticClass:"cl-toggle-label"},[t._v("출처 "+t._s(t.items.length)+"건")]),n("span",{staticClass:"cl-toggle-hint"},[t._v(t._s(t.open?"접기":"펼치기"))])]),n("transition",{attrs:{name:"cl-fade"}},[t.open?n("div",{staticClass:"cl-list"},t._l(t.items,function(r){return n("div",{key:r.index,staticClass:"cl-card"},[n("div",{staticClass:"cl-card-head"},[n("span",{staticClass:"cl-idx"},[t._v("["+t._s(r.index)+"]")]),n("span",{staticClass:"cl-title"},[t._v(t._s(r.title))]),n("span",{staticClass:"cl-score"},[t._v(t._s(r.score.toFixed(2)))])]),n("div",{staticClass:"cl-meta"},[t._v(t._s(r.collection)),r.source?n("span",[t._v(" · "+t._s(r.source))]):t._e()]),n("div",{staticClass:"cl-preview"},[t._v(t._s(r.preview))])])}),0):t._e()])],1):t._e()},Fp=[],zp=Ht(Pp,Mp,Fp,!1,null,"4145e81e");const Bp=zp.exports,Hp={name:"MessageItem",components:{StreamingMarkdown:Np,CitationList:Bp},props:{message:{type:Object,required:!0}}};var Up=function(){var t=this,n=t._self._c;return t._self._setupProxy,n("div",{class:["mi-row","mi-"+t.message.role]},[t.message.role==="assistant"?[n("div",{staticClass:"mi-avatar mi-avatar-assistant",attrs:{"aria-hidden":"true"}},[n("svg",{attrs:{viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg"}},[n("path",{attrs:{d:"M12 2 L14.2 9.8 L22 12 L14.2 14.2 L12 22 L9.8 14.2 L2 12 L9.8 9.8 Z",fill:"currentColor"}}),n("circle",{attrs:{cx:"19",cy:"5",r:"1.6",fill:"currentColor",opacity:"0.85"}}),n("circle",{attrs:{cx:"5",cy:"19",r:"1.1",fill:"currentColor",opacity:"0.7"}})])]),n("div",{staticClass:"mi-body"},[n("div",{staticClass:"mi-role"},[t._v("BDP Agent")]),t.message.status?n("div",{staticClass:"mi-status"},[n("span",{staticClass:"mi-dot"}),t._v(t._s(t.message.status)+" ")]):t._e(),t.message.content?n("StreamingMarkdown",{attrs:{content:t.message.content,"is-streaming":!!t.message.isStreaming}}):t.message.isStreaming?n("div",{staticClass:"mi-typing"},[n("span"),n("span"),n("span")]):t._e(),t.message.error?n("div",{staticClass:"mi-error"},[t._v("⚠️ "+t._s(t.message.error))]):t._e(),t.message.citations&&t.message.citations.length?n("CitationList",{attrs:{items:t.message.citations}}):t._e()],1)]:[n("div",{staticClass:"mi-body mi-body-user"},[n("div",{staticClass:"mi-bubble-user"},[t._v(t._s(t.message.content))])])]],2)},jp=[],Wp=Ht(Hp,Up,jp,!1,null,"d7ac471d");const Gp=Wp.exports,qp={name:"ChatInput",props:{busy:{type:Boolean,default:!1},placeholder:{type:String,default:"질문을 입력하세요..."}},emits:["submit"],setup(e,{emit:t}){const n=$e("");function r(){const s=n.value.trim();s&&(t("submit",s),n.value="")}function i(s){s.key==="Enter"&&(s.isComposing||s.keyCode===229||s.shiftKey||(s.preventDefault(),r()))}return{text:n,submit:r,onKeyDown:i}}};var Zp=function(){var t=this,n=t._self._c;return t._self._setupProxy,n("div",{staticClass:"ci-root"},[n("div",{staticClass:"ci-box"},[n("textarea",{directives:[{name:"model",rawName:"v-model",value:t.text,expression:"text"}],ref:"ta",attrs:{placeholder:t.placeholder,disabled:t.busy,rows:"2"},domProps:{value:t.text},on:{keydown:t.onKeyDown,input:function(r){r.target.composing||(t.text=r.target.value)}}}),t._v(" "),n("button",{staticClass:"ci-send",attrs:{disabled:t.busy||!t.text.trim(),type:"button"},on:{click:t.submit}},[t.busy?n("span",[t._v("...")]):n("span",[t._v("전송")])])])])},Yp=[],Xp=Ht(qp,Zp,Yp,!1,null,"1e9a4d7b");const Kp=Xp.exports,Jp={name:"HistoryPanel",props:{items:{type:Array,required:!0},activeId:{type:String,default:null}},emits:["select","delete","clear"],setup(e,{emit:t}){function n(o){const a=new Date(o),l=new Date;return a.getFullYear()===l.getFullYear()&&a.getMonth()===l.getMonth()&&a.getDate()===l.getDate()?`${r(a.getHours())}:${r(a.getMinutes())}`:`${a.getMonth()+1}/${a.getDate()}`}function r(o){return o<10?"0"+o:""+o}function i(o){return`${o.messages.filter(l=>l.role==="user").length}개 질문`}function s(){confirm("모든 대화 이력을 삭제할까요?")&&t("clear")}return{formatTime:n,messageCount:i,onClearAll:s}}};var Qp=function(){var t=this,n=t._self._c;return t._self._setupProxy,n("aside",{staticClass:"hp-root"},[n("div",{staticClass:"hp-head"},[n("span",{staticClass:"hp-title"},[t._v("대화 이력")]),t.items.length?n("button",{staticClass:"hp-clear",attrs:{type:"button"},on:{click:t.onClearAll}},[t._v("전체 삭제")]):t._e()]),t.items.length?n("ul",{staticClass:"hp-list"},t._l(t.items,function(r){return n("li",{key:r.id,class:["hp-item",r.id===t.activeId&&"hp-item-active"],on:{click:function(i){return t.$emit("select",r.id)}}},[n("div",{staticClass:"hp-item-title"},[t._v(t._s(r.title))]),n("div",{staticClass:"hp-item-meta"},[n("span",[t._v(t._s(t.formatTime(r.updatedAt)))]),n("span",[t._v("·")]),n("span",[t._v(t._s(t.messageCount(r)))])]),n("button",{staticClass:"hp-del",attrs:{type:"button","aria-label":"대화 삭제"},on:{click:function(i){return i.stopPropagation(),t.$emit("delete",r.id)}}},[t._v("×")])])}),0):n("div",{staticClass:"hp-empty"},[t._v(" 아직 대화가 없습니다. ")])])},Vp=[],eh=Ht(Jp,Qp,Vp,!1,null,"3db415ee");const th=eh.exports,nh="*",Fe=pl({token:null,baseUrl:null,user:null,hostRoute:null});function oi(e){window.parent&&window.parent!==window&&window.parent.postMessage(e,nh)}function rh(){window.addEventListener("message",t=>{var r,i,s,o,a;const n=t.data;if(!(!n||typeof n!="object"))switch(n.type){case"init":Fe.token=(r=n.token)!=null?r:null,Fe.baseUrl=(i=n.baseUrl)!=null?i:null,Fe.user=(s=n.user)!=null?s:null;break;case"token":Fe.token=(o=n.token)!=null?o:null;break;case"route":Fe.hostRoute=(a=n.path)!=null?a:null;break}}),new ResizeObserver(()=>{const t=document.documentElement.scrollHeight;oi({type:"height",value:t})}).observe(document.documentElement),oi({type:"ready"})}function ih(){oi({type:"request-token"})}Po(()=>({...Fe}),e=>console.debug("[sample-feature] session updated",e),{deep:!0});const Dr={},sh=(Dr==null?void 0:Dr.VITE_USE_MOCK)!=="false";async function oh(e,t,n){if(sh||!Fe.baseUrl)return lh(e,t,n);const r=(Fe.baseUrl||"")+"/agents/hdsp_rag/chat/stream",i={"Content-Type":"application/json",Accept:"text/event-stream"};Fe.token&&(i.Authorization=`Bearer ${Fe.token}`);const s=await fetch(r,{method:"POST",headers:i,body:JSON.stringify(e),signal:n});if(s.status===401)throw ih(),new Error("401 unauthorized — 토큰 갱신 요청");if(!s.ok){const u=await s.text();throw new Error(`backend ${s.status}: ${u.slice(0,300)}`)}if(!s.body)throw new Error("no response body");const o=s.body.getReader(),a=new TextDecoder;let l="";for(;;){const{value:u,done:f}=await o.read();if(f)break;l+=a.decode(u,{stream:!0});let v;for(;(v=l.indexOf(`
|
|
63
63
|
|
|
64
64
|
`))!==-1;){const y=l.slice(0,v);l=l.slice(v+2);const _=ah(y);_&&t(_)}}}function ah(e){let t="message";const n=[];for(const i of e.split(`
|
|
65
65
|
`))i.startsWith("event:")?t=i.slice(6).trim():i.startsWith("data:")&&n.push(i.slice(5).trim());if(!n.length)return null;const r=n.join(`
|
|
@@ -86,4 +86,4 @@ spark-submit \\
|
|
|
86
86
|
|
|
87
87
|
executor 메모리는 노드 메모리의 80% 이내로 두는 것을 권장합니다 [3]. 모니터링 메트릭은 \`service_resource_metrics\` 테이블에서 \`driver_mem_gb\` 컬럼으로 추적할 수 있습니다 [2].
|
|
88
88
|
|
|
89
|
-
출처: [1] 27_emr_serverless_guide.md, [2] service_resource_metrics, [3] 12_spark_tuning.md`}function Jt(e,t){return new Promise((n,r)=>{if(t!=null&&t.aborted)return r(new Error("aborted"));const i=setTimeout(n,e);t==null||t.addEventListener("abort",()=>{clearTimeout(i),r(new Error("aborted"))})})}const Di="bdp-agent-conversations-v1",La=50;function _o(){try{const e=localStorage.getItem(Di);if(!e)return[];const t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}function Lr(e){try{localStorage.setItem(Di,JSON.stringify(e.slice(0,La)))}catch{}}function Na(e){const t=e.trim().replace(/\s+/g," ");return t.length>36?t.slice(0,36)+"…":t}function uh(){const e=$e(_o());function t(){e.value=_o()}function n(o){const a=e.value.filter(l=>l.id!==o.id);a.unshift(o),e.value=a.slice(0,La),Lr(e.value)}function r(o){e.value=e.value.filter(a=>a.id!==o),Lr(e.value)}function i(){e.value=[],Lr([])}function s(o){return e.value.find(a=>a.id===o)}return typeof window!="undefined"&&window.addEventListener("storage",o=>{o.key===Di&&t()}),{items:e,refresh:t,upsert:n,remove:r,clearAll:i,get:s,shortTitle:Na}}let fh=0;function yo(){return`m-${Date.now()}-${++fh}`}function ph(){const e=$e([]),t=$e("knowledge"),n=$e(!1),r=$e(null),i=$e(null);let s=null,o=0;const a=uh();function l(){if(!r.value||e.value.length===0)return;const b=e.value.find(D=>D.role==="user"),A=b?Na(b.content):"(빈 대화)",C={id:r.value,title:A,messages:[...e.value],createdAt:o||Date.now(),updatedAt:Date.now()};a.upsert(C)}async function u(b){if(n.value)return;i.value=null,o||(o=Date.now());const A={id:yo(),role:"user",content:b};e.value.push(A);const C={id:yo(),role:"assistant",content:"",isStreaming:!0,status:"시작 중...",citations:[]};e.value.push(C),n.value=!0,s=new AbortController;try{await oh({message:b,conversation_id:r.value,mode:t.value},D=>{const S=e.value.length-1,z=e.value[S];switch(D.event){case"ready":r.value=D.data.conversationId;break;case"status":z.status=D.data.text;break;case"citations":{z.citations=D.data.items||[],z.status=`${z.citations.length}건의 출처 검색됨`;break}case"token":z.content+=D.data.text||"",z.status&&!z.status.startsWith("답변 생성")&&(z.status=null);break;case"done":z.status=null,z.isStreaming=!1;break;case"error":z.error=D.data.message,z.isStreaming=!1;break}},s.signal)}catch(D){const S=e.value.length-1;e.value[S].error=D instanceof Error?D.message:String(D),e.value[S].isStreaming=!1,e.value[S].status=null,i.value=e.value[S].error||null}finally{n.value=!1,s=null;const D=e.value.length-1;D>=0&&(e.value[D].isStreaming=!1),l()}await rr()}function f(){e.value=[],r.value=null,i.value=null,o=0}function v(b){const A=a.get(b);A&&(e.value=A.messages.map(C=>({...C,isStreaming:!1,status:null})),r.value=A.id,o=A.createdAt,i.value=null)}function y(b){a.remove(b),r.value===b&&f()}function _(){s==null||s.abort()}return{messages:e,mode:t,busy:n,convId:r,error:i,send:u,reset:f,stop:_,historyItems:a.items,clearHistory:a.clearAll,loadConversation:v,deleteConversation:y}}const hh={name:"App",components:{MessageItem:Gp,ChatInput:Kp,HistoryPanel:th},setup(){const e=ph(),t=$e(null),n=$e(!1),r=["EMR Serverless 메모리 설정 방법","Airflow DAG 실패 원인 분석","BDP 테이블 스키마 조회 예시","Spark executor 튜닝 가이드"];function i(){const s=t.value;s&&(s.scrollTop=s.scrollHeight)}return Kl(i),Jl(i),Po(e.messages,()=>i(),{deep:!0}),{...e,scrollEl:t,suggestions:r,historyOpen:n}}};var dh=function(){var t=this,n=t._self._c;return t._self._setupProxy,n("div",{staticClass:"cp-root"},[n("div",{staticClass:"cp-body"},[n("section",{staticClass:"cp-chat"},[n("button",{staticClass:"cp-
|
|
89
|
+
출처: [1] 27_emr_serverless_guide.md, [2] service_resource_metrics, [3] 12_spark_tuning.md`}function Jt(e,t){return new Promise((n,r)=>{if(t!=null&&t.aborted)return r(new Error("aborted"));const i=setTimeout(n,e);t==null||t.addEventListener("abort",()=>{clearTimeout(i),r(new Error("aborted"))})})}const Di="bdp-agent-conversations-v1",La=50;function _o(){try{const e=localStorage.getItem(Di);if(!e)return[];const t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}function Lr(e){try{localStorage.setItem(Di,JSON.stringify(e.slice(0,La)))}catch{}}function Na(e){const t=e.trim().replace(/\s+/g," ");return t.length>36?t.slice(0,36)+"…":t}function uh(){const e=$e(_o());function t(){e.value=_o()}function n(o){const a=e.value.filter(l=>l.id!==o.id);a.unshift(o),e.value=a.slice(0,La),Lr(e.value)}function r(o){e.value=e.value.filter(a=>a.id!==o),Lr(e.value)}function i(){e.value=[],Lr([])}function s(o){return e.value.find(a=>a.id===o)}return typeof window!="undefined"&&window.addEventListener("storage",o=>{o.key===Di&&t()}),{items:e,refresh:t,upsert:n,remove:r,clearAll:i,get:s,shortTitle:Na}}let fh=0;function yo(){return`m-${Date.now()}-${++fh}`}function ph(){const e=$e([]),t=$e("knowledge"),n=$e(!1),r=$e(null),i=$e(null);let s=null,o=0;const a=uh();function l(){if(!r.value||e.value.length===0)return;const b=e.value.find(D=>D.role==="user"),A=b?Na(b.content):"(빈 대화)",C={id:r.value,title:A,messages:[...e.value],createdAt:o||Date.now(),updatedAt:Date.now()};a.upsert(C)}async function u(b){if(n.value)return;i.value=null,o||(o=Date.now());const A={id:yo(),role:"user",content:b};e.value.push(A);const C={id:yo(),role:"assistant",content:"",isStreaming:!0,status:"시작 중...",citations:[]};e.value.push(C),n.value=!0,s=new AbortController;try{await oh({message:b,conversation_id:r.value,mode:t.value},D=>{const S=e.value.length-1,z=e.value[S];switch(D.event){case"ready":r.value=D.data.conversationId;break;case"status":z.status=D.data.text;break;case"citations":{z.citations=D.data.items||[],z.status=`${z.citations.length}건의 출처 검색됨`;break}case"token":z.content+=D.data.text||"",z.status&&!z.status.startsWith("답변 생성")&&(z.status=null);break;case"done":z.status=null,z.isStreaming=!1;break;case"error":z.error=D.data.message,z.isStreaming=!1;break}},s.signal)}catch(D){const S=e.value.length-1;e.value[S].error=D instanceof Error?D.message:String(D),e.value[S].isStreaming=!1,e.value[S].status=null,i.value=e.value[S].error||null}finally{n.value=!1,s=null;const D=e.value.length-1;D>=0&&(e.value[D].isStreaming=!1),l()}await rr()}function f(){e.value=[],r.value=null,i.value=null,o=0}function v(b){const A=a.get(b);A&&(e.value=A.messages.map(C=>({...C,isStreaming:!1,status:null})),r.value=A.id,o=A.createdAt,i.value=null)}function y(b){a.remove(b),r.value===b&&f()}function _(){s==null||s.abort()}return{messages:e,mode:t,busy:n,convId:r,error:i,send:u,reset:f,stop:_,historyItems:a.items,clearHistory:a.clearAll,loadConversation:v,deleteConversation:y}}const hh={name:"App",components:{MessageItem:Gp,ChatInput:Kp,HistoryPanel:th},setup(){const e=ph(),t=$e(null),n=$e(!1),r=["EMR Serverless 메모리 설정 방법","Airflow DAG 실패 원인 분석","BDP 테이블 스키마 조회 예시","Spark executor 튜닝 가이드"];function i(){const s=t.value;s&&(s.scrollTop=s.scrollHeight)}return Kl(i),Jl(i),Po(e.messages,()=>i(),{deep:!0}),{...e,scrollEl:t,suggestions:r,historyOpen:n}}};var dh=function(){var t=this,n=t._self._c;return t._self._setupProxy,n("div",{staticClass:"cp-root"},[n("div",{staticClass:"cp-body"},[n("section",{staticClass:"cp-chat"},[n("div",{staticClass:"cp-actions"},[n("button",{staticClass:"cp-icon-btn",attrs:{type:"button","aria-label":"새 대화",title:"새 대화"},on:{click:t.reset}},[n("svg",{attrs:{viewBox:"0 0 24 24",width:"18",height:"18",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}},[n("path",{attrs:{d:"M12 20h9"}}),n("path",{attrs:{d:"M16.5 3.5a2.121 2.121 0 1 1 3 3L7 19l-4 1 1-4 12.5-12.5z"}})])]),n("button",{staticClass:"cp-icon-btn",attrs:{type:"button","aria-pressed":t.historyOpen,"aria-label":t.historyOpen?"이력 닫기":"이력 열기",title:t.historyOpen?"이력 닫기":"이력 열기"},on:{click:function(r){t.historyOpen=!t.historyOpen}}},[n("svg",{attrs:{viewBox:"0 0 24 24",width:"18",height:"18",fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"}},[n("path",{attrs:{d:"M3 12a9 9 0 1 0 3-6.7L3 8"}}),n("path",{attrs:{d:"M3 3v5h5"}}),n("path",{attrs:{d:"M12 7v5l3 2"}})])])]),n("main",{ref:"scrollEl",staticClass:"cp-main"},[t.messages.length?n("div",{staticClass:"cp-list"},t._l(t.messages,function(r){return n("MessageItem",{key:r.id,attrs:{message:r}})}),1):n("div",{staticClass:"cp-empty"},[n("div",{staticClass:"cp-empty-title"},[t._v("무엇을 도와드릴까요?")]),n("p",{staticClass:"cp-empty-sub"},[t._v("사내 가이드·테이블 메타데이터를 검색해서 답해드립니다.")]),n("div",{staticClass:"cp-suggestions"},t._l(t.suggestions,function(r){return n("button",{key:r,staticClass:"cp-sug",attrs:{disabled:t.busy,type:"button"},on:{click:function(i){return t.send(r)}}},[t._v(t._s(r))])}),0)])]),n("ChatInput",{attrs:{busy:t.busy},on:{submit:t.send}})],1),t.historyOpen?n("HistoryPanel",{staticClass:"cp-history",attrs:{items:t.historyItems,"active-id":t.convId},on:{select:t.loadConversation,delete:t.deleteConversation,clear:t.clearHistory}}):t._e()],1)])},mh=[],gh=Ht(hh,dh,mh,!1,null,null);const vh=gh.exports;ee.config.productionTip=!1;new ee({render:e=>e(vh)}).$mount("#app");rh();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.sm-root{font-size:14px;line-height:1.65;color:#1a1a1a;word-wrap:break-word}.sm-root p{margin:0 0 10px}.sm-root p:last-child{margin-bottom:0}.sm-root h1,.sm-root h2,.sm-root h3,.sm-root h4{margin:16px 0 8px;font-weight:700;line-height:1.3}.sm-root h1{font-size:18px}.sm-root h2{font-size:16px}.sm-root h3{font-size:15px}.sm-root ul,.sm-root ol{padding-left:22px;margin:6px 0 10px}.sm-root li{margin-bottom:3px}.sm-root strong{font-weight:700}.sm-root em{font-style:italic}.sm-root :not(pre)>code{background:#f3f4f6;padding:1px 6px;border-radius:4px;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace;font-size:12.5px;color:#d63b30}.sm-root .code-card{margin:12px 0;border:1px solid #e5e5e5;border-radius:8px;overflow:hidden;background:#fff}.sm-root .code-head{display:flex;align-items:center;justify-content:space-between;padding:6px 12px;background:#f7f7f7;border-bottom:1px solid #e5e5e5}.sm-root .code-lang{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:600;letter-spacing:.4px;text-transform:uppercase;color:#ff7461}.sm-root .code-copy{display:inline-flex;align-items:center;gap:5px;background:transparent;border:1px solid transparent;color:#666;font:inherit;font-size:11px;padding:3px 8px;border-radius:4px;cursor:pointer;transition:all .15s}.sm-root .code-copy:hover{background:#fff;color:#1a1a1a;border-color:#d0d0d0}.sm-root .code-copy.is-copied{color:#16a34a;border-color:transparent}.sm-root .code-copy svg{display:block}.sm-root .code-body{background:#fafafa;color:#1a1a1a;padding:12px 14px;margin:0;overflow-x:auto;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace;font-size:12.5px;line-height:1.55;white-space:pre}.sm-root .code-body code{background:transparent;color:inherit;padding:0;font:inherit}.sm-root .code-body::-webkit-scrollbar{height:6px}.sm-root .code-body::-webkit-scrollbar-track{background:#f0f0f0}.sm-root .code-body::-webkit-scrollbar-thumb{background:#ccc;border-radius:3px}.sm-root .code-body::-webkit-scrollbar-thumb:hover{background:#ff7461}.sm-root table{border-collapse:collapse;margin:12px 0;font-size:13px;width:100%;background:#fff}.sm-root thead th{text-align:left;font-weight:700;font-size:12px;color:#1a1a1a;padding:10px 14px;background:#fff;border-bottom:2px solid #ff7461}.sm-root tbody td{padding:9px 14px;color:#1a1a1a;background:#fff;border-bottom:1px solid #f0f0f0}.sm-root tbody tr:last-child td{border-bottom:0}.sm-root blockquote{border-left:3px solid #ff7461;padding:0 0 0 12px;margin:10px 0;color:#555}.sm-root a{color:#ff7461;text-decoration:none}.sm-root a:hover{text-decoration:underline}.sm-root hr{border:0;border-top:1px solid #e5e5e5;margin:16px 0}.cl-root[data-v-4145e81e]{margin-top:12px;border-top:1px dashed #e5e5e5;padding-top:10px}.cl-toggle[data-v-4145e81e]{display:inline-flex;align-items:center;gap:8px;background:transparent;border:0;padding:4px 0;cursor:pointer;font:inherit;font-size:12px;color:#1a1a1a}.cl-toggle[data-v-4145e81e]:hover{color:#ff7461}.cl-chev[data-v-4145e81e]{display:inline-block;font-size:10px;color:#ff7461;transition:transform .18s;transform-origin:center}.cl-chev-open[data-v-4145e81e]{transform:rotate(90deg)}.cl-toggle-label[data-v-4145e81e]{font-weight:600}.cl-toggle-hint[data-v-4145e81e]{color:#999;font-size:11px}.cl-list[data-v-4145e81e]{display:grid;gap:8px;margin-top:10px}.cl-card[data-v-4145e81e]{background:#fafafa;border:1px solid #e5e5e5;border-left:3px solid #ff7461;border-radius:6px;padding:10px 12px}.cl-card-head[data-v-4145e81e]{display:flex;align-items:center;gap:6px;font-size:13px}.cl-idx[data-v-4145e81e]{color:#ff7461;font-weight:700}.cl-title[data-v-4145e81e]{flex:1;color:#1a1a1a;font-weight:600}.cl-score[data-v-4145e81e]{color:#999;font-size:11px;font-family:ui-monospace,monospace}.cl-meta[data-v-4145e81e]{margin-top:2px;font-size:11px;color:#999}.cl-preview[data-v-4145e81e]{margin-top:6px;font-size:12px;color:#555;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.cl-fade-enter-active[data-v-4145e81e],.cl-fade-leave-active[data-v-4145e81e]{transition:opacity .15s,transform .15s}.cl-fade-enter-from[data-v-4145e81e],.cl-fade-leave-to[data-v-4145e81e]{opacity:0;transform:translateY(-4px)}.mi-row[data-v-d7ac471d]{display:flex;gap:12px;padding:14px 0}.mi-user[data-v-d7ac471d]{justify-content:flex-end}.mi-avatar[data-v-d7ac471d]{width:32px;height:32px;border-radius:8px;flex-shrink:0;display:flex;align-items:center;justify-content:center;color:#fff;background:linear-gradient(135deg,#ff7461,#ff9686);box-shadow:0 2px 8px #ff746159}.mi-avatar svg[data-v-d7ac471d]{width:20px;height:20px;display:block}.mi-body[data-v-d7ac471d]{flex:1;min-width:0}.mi-body-user[data-v-d7ac471d]{flex:0 1 auto;max-width:75%;display:flex;justify-content:flex-end}.mi-role[data-v-d7ac471d]{font-size:11px;font-weight:700;color:#999;text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}.mi-bubble-user[data-v-d7ac471d]{background:#fff;color:#1a1a1a;border:2px solid #ff7461;padding:10px 14px;border-radius:16px 16px 4px;font-size:14px;line-height:1.55;white-space:pre-wrap;word-wrap:break-word}.mi-status[data-v-d7ac471d]{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:#999;margin-bottom:8px}.mi-dot[data-v-d7ac471d]{width:6px;height:6px;border-radius:50%;background:#ff7461;animation:mi-pulse-d7ac471d 1.2s infinite ease-in-out}@keyframes mi-pulse-d7ac471d{0%,to{opacity:.35;transform:scale(.8)}50%{opacity:1;transform:scale(1.2)}}.mi-typing[data-v-d7ac471d]{display:inline-flex;gap:4px;padding:4px 0}.mi-typing span[data-v-d7ac471d]{width:6px;height:6px;border-radius:50%;background:#ff7461;animation:mi-bounce-d7ac471d 1.4s infinite ease-in-out both}.mi-typing span[data-v-d7ac471d]:nth-child(2){animation-delay:.16s}.mi-typing span[data-v-d7ac471d]:nth-child(3){animation-delay:.32s}@keyframes mi-bounce-d7ac471d{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}.mi-error[data-v-d7ac471d]{margin-top:8px;padding:8px 10px;background:#fef2f2;color:#dc2626;border-left:3px solid #dc2626;border-radius:4px;font-size:12px}.ci-root[data-v-37c22e85]{border-top:1px solid #e5e5e5;padding:12px 20px 16px;background:#fff}.ci-box[data-v-37c22e85]{position:relative;display:flex;gap:8px;align-items:flex-end;border:1px solid #e5e5e5;border-radius:10px;padding:10px 10px 10px 14px;background:#fafafa;transition:border-color .15s}.ci-box[data-v-37c22e85]:focus-within{border-color:#ff7461;background:#fff}.ci-box textarea[data-v-37c22e85]{flex:1;border:0;background:transparent;resize:none;font:inherit;font-size:14px;color:#1a1a1a;outline:none;line-height:1.5;max-height:200px}.ci-send[data-v-37c22e85]{border:0;background:#ff7461;color:#fff;font-weight:600;font-size:13px;padding:8px 16px;border-radius:8px;cursor:pointer;font-family:inherit}.ci-send[data-v-37c22e85]:hover:not(:disabled){background:#e85d4a}.ci-send[data-v-37c22e85]:disabled{background:#ccc;cursor:not-allowed}.ci-hint[data-v-37c22e85]{margin-top:6px;font-size:11px;color:#999}.hp-root[data-v-23993444]{display:flex;flex-direction:column;background:#fafafa;border-left:1px solid #e5e5e5;height:100%;overflow:hidden}.hp-head[data-v-23993444]{display:flex;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid #e5e5e5;flex-shrink:0}.hp-title[data-v-23993444]{font-size:13px;font-weight:700;color:#1a1a1a;letter-spacing:.3px}.hp-clear[data-v-23993444]{border:0;background:transparent;color:#999;font:inherit;font-size:11px;cursor:pointer;padding:2px 4px}.hp-clear[data-v-23993444]:hover{color:#ff7461}.hp-new[data-v-23993444]{margin:12px 12px 0;padding:9px 12px;border:1px solid #ff7461;background:#fff;color:#1a1a1a;font:inherit;font-size:13px;font-weight:600;border-radius:8px;cursor:pointer;display:flex;align-items:center;gap:8px;flex-shrink:0;transition:background .15s}.hp-new[data-v-23993444]:hover{background:#fff5f3}.hp-plus[data-v-23993444]{display:inline-flex;width:16px;height:16px;border-radius:50%;background:#ff7461;color:#fff;align-items:center;justify-content:center;font-weight:700;font-size:12px;line-height:1}.hp-empty[data-v-23993444]{padding:28px 16px;text-align:center;color:#999;font-size:12px}.hp-list[data-v-23993444]{list-style:none;padding:8px;margin:0;overflow-y:auto;flex:1}.hp-item[data-v-23993444]{position:relative;padding:9px 32px 9px 12px;border-radius:8px;cursor:pointer;margin-bottom:2px;transition:background .15s}.hp-item[data-v-23993444]:hover{background:#fff}.hp-item-active[data-v-23993444]{background:#fff;box-shadow:inset 3px 0 #ff7461}.hp-item-title[data-v-23993444]{font-size:13px;color:#1a1a1a;line-height:1.35;font-weight:500;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.hp-item-meta[data-v-23993444]{display:flex;align-items:center;gap:5px;margin-top:3px;font-size:11px;color:#999}.hp-del[data-v-23993444]{position:absolute;top:6px;right:6px;width:20px;height:20px;border:0;background:transparent;color:#ccc;font-size:16px;line-height:1;cursor:pointer;border-radius:4px;opacity:0;transition:opacity .15s,color .15s}.hp-item:hover .hp-del[data-v-23993444]{opacity:1}.hp-del[data-v-23993444]:hover{color:#ff7461;background:#fff5f3}@font-face{font-family:Pretendard;font-weight:400;font-style:normal;font-display:swap;src:url(./fonts/Pretendard-Regular.woff2) format("woff2")}@font-face{font-family:Pretendard;font-weight:700;font-style:normal;font-display:swap;src:url(./fonts/Pretendard-Bold.woff2) format("woff2")}:root{font-family:Pretendard,SFProDisplay,AppleSDGothicNeo,SF Pro Text,Spoqa Han Sans Neo,Noto Sans,Helvetica Neue,Helvetica,Arial,sans-serif;color-scheme:light}*{box-sizing:border-box}html,body,#app{height:100%;width:100%;margin:0;padding:0}body{background:#fff;color:#1a1a1a}.cp-root{display:flex;flex-direction:column;height:100vh;width:100vw;background:#fff;overflow:hidden}.cp-toggle-floating{position:absolute;top:12px;right:12px;z-index:5;width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;border:1px solid #e5e5e5;background:#fff;color:#1a1a1a;border-radius:8px;cursor:pointer;transition:all .15s;box-shadow:0 1px 3px #0000000a}.cp-toggle-floating:hover{border-color:#ff7461;color:#ff7461}.cp-toggle-floating[aria-pressed=true]{background:#fff5f3;border-color:#ff7461;color:#ff7461}.cp-body{flex:1;display:grid;grid-template-columns:1fr auto;min-height:0;overflow:hidden}.cp-chat{display:flex;flex-direction:column;min-width:0;overflow:hidden;position:relative}.cp-history{width:400px;min-width:400px}.cp-main{flex:1;overflow-y:auto;padding:0 20px;background:#fff}.cp-empty{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:40px 20px}.cp-empty-title{font-size:22px;font-weight:700;color:#1a1a1a;margin-bottom:6px}.cp-empty-sub{color:#666;font-size:14px;margin:0 0 24px}.cp-suggestions{display:grid;grid-template-columns:1fr 1fr;gap:8px;max-width:520px;width:100%}.cp-sug{border:1px solid #e5e5e5;background:#fafafa;color:#1a1a1a;padding:10px 14px;border-radius:10px;font-size:13px;text-align:left;cursor:pointer;font-family:inherit;transition:all .15s}.cp-sug:hover:not(:disabled){border-color:#ff7461;background:#ffe6e1}.cp-sug:disabled{opacity:.5;cursor:not-allowed}.cp-list{padding:8px 0;max-width:880px;margin:0 auto}@media (max-width: 900px){.cp-history{width:320px;min-width:320px}}@media (max-width: 640px){.cp-body{grid-template-columns:1fr}.cp-history{position:absolute;right:0;top:0;bottom:0;width:85vw;max-width:400px;z-index:10;box-shadow:-4px 0 12px #00000014}}
|
|
1
|
+
.sm-root{font-size:14px;line-height:1.65;color:#1a1a1a;word-wrap:break-word}.sm-root p{margin:0 0 10px}.sm-root p:last-child{margin-bottom:0}.sm-root h1,.sm-root h2,.sm-root h3,.sm-root h4{margin:16px 0 8px;font-weight:700;line-height:1.3}.sm-root h1{font-size:18px}.sm-root h2{font-size:16px}.sm-root h3{font-size:15px}.sm-root ul,.sm-root ol{padding-left:22px;margin:6px 0 10px}.sm-root li{margin-bottom:3px}.sm-root strong{font-weight:700}.sm-root em{font-style:italic}.sm-root :not(pre)>code{background:#f3f4f6;padding:1px 6px;border-radius:4px;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace;font-size:12.5px;color:#d63b30}.sm-root .code-card{margin:12px 0;border:1px solid #e5e5e5;border-radius:8px;overflow:hidden;background:#fff}.sm-root .code-head{display:flex;align-items:center;justify-content:space-between;padding:6px 12px;background:#f7f7f7;border-bottom:1px solid #e5e5e5}.sm-root .code-lang{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;font-weight:600;letter-spacing:.4px;text-transform:uppercase;color:#ff7461}.sm-root .code-copy{display:inline-flex;align-items:center;gap:5px;background:transparent;border:1px solid transparent;color:#666;font:inherit;font-size:11px;padding:3px 8px;border-radius:4px;cursor:pointer;transition:all .15s}.sm-root .code-copy:hover{background:#fff;color:#1a1a1a;border-color:#d0d0d0}.sm-root .code-copy.is-copied{color:#16a34a;border-color:transparent}.sm-root .code-copy svg{display:block}.sm-root .code-body{background:#fafafa;color:#1a1a1a;padding:12px 14px;margin:0;overflow-x:auto;font-family:ui-monospace,SFMono-Regular,SF Mono,Menlo,monospace;font-size:12.5px;line-height:1.55;white-space:pre}.sm-root .code-body code{background:transparent;color:inherit;padding:0;font:inherit}.sm-root .code-body::-webkit-scrollbar{height:6px}.sm-root .code-body::-webkit-scrollbar-track{background:#f0f0f0}.sm-root .code-body::-webkit-scrollbar-thumb{background:#ccc;border-radius:3px}.sm-root .code-body::-webkit-scrollbar-thumb:hover{background:#ff7461}.sm-root table{border-collapse:collapse;margin:12px 0;font-size:13px;width:100%;background:#fff}.sm-root thead th{text-align:left;font-weight:700;font-size:12px;color:#1a1a1a;padding:10px 14px;background:#fff;border-bottom:2px solid #ff7461}.sm-root tbody td{padding:9px 14px;color:#1a1a1a;background:#fff;border-bottom:1px solid #f0f0f0}.sm-root tbody tr:last-child td{border-bottom:0}.sm-root blockquote{border-left:3px solid #ff7461;padding:0 0 0 12px;margin:10px 0;color:#555}.sm-root a{color:#ff7461;text-decoration:none}.sm-root a:hover{text-decoration:underline}.sm-root hr{border:0;border-top:1px solid #e5e5e5;margin:16px 0}.cl-root[data-v-4145e81e]{margin-top:12px;border-top:1px dashed #e5e5e5;padding-top:10px}.cl-toggle[data-v-4145e81e]{display:inline-flex;align-items:center;gap:8px;background:transparent;border:0;padding:4px 0;cursor:pointer;font:inherit;font-size:12px;color:#1a1a1a}.cl-toggle[data-v-4145e81e]:hover{color:#ff7461}.cl-chev[data-v-4145e81e]{display:inline-block;font-size:10px;color:#ff7461;transition:transform .18s;transform-origin:center}.cl-chev-open[data-v-4145e81e]{transform:rotate(90deg)}.cl-toggle-label[data-v-4145e81e]{font-weight:600}.cl-toggle-hint[data-v-4145e81e]{color:#999;font-size:11px}.cl-list[data-v-4145e81e]{display:grid;gap:8px;margin-top:10px}.cl-card[data-v-4145e81e]{background:#fafafa;border:1px solid #e5e5e5;border-left:3px solid #ff7461;border-radius:6px;padding:10px 12px}.cl-card-head[data-v-4145e81e]{display:flex;align-items:center;gap:6px;font-size:13px}.cl-idx[data-v-4145e81e]{color:#ff7461;font-weight:700}.cl-title[data-v-4145e81e]{flex:1;color:#1a1a1a;font-weight:600}.cl-score[data-v-4145e81e]{color:#999;font-size:11px;font-family:ui-monospace,monospace}.cl-meta[data-v-4145e81e]{margin-top:2px;font-size:11px;color:#999}.cl-preview[data-v-4145e81e]{margin-top:6px;font-size:12px;color:#555;line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.cl-fade-enter-active[data-v-4145e81e],.cl-fade-leave-active[data-v-4145e81e]{transition:opacity .15s,transform .15s}.cl-fade-enter-from[data-v-4145e81e],.cl-fade-leave-to[data-v-4145e81e]{opacity:0;transform:translateY(-4px)}.mi-row[data-v-d7ac471d]{display:flex;gap:12px;padding:14px 0}.mi-user[data-v-d7ac471d]{justify-content:flex-end}.mi-avatar[data-v-d7ac471d]{width:32px;height:32px;border-radius:8px;flex-shrink:0;display:flex;align-items:center;justify-content:center;color:#fff;background:linear-gradient(135deg,#ff7461,#ff9686);box-shadow:0 2px 8px #ff746159}.mi-avatar svg[data-v-d7ac471d]{width:20px;height:20px;display:block}.mi-body[data-v-d7ac471d]{flex:1;min-width:0}.mi-body-user[data-v-d7ac471d]{flex:0 1 auto;max-width:75%;display:flex;justify-content:flex-end}.mi-role[data-v-d7ac471d]{font-size:11px;font-weight:700;color:#999;text-transform:uppercase;letter-spacing:.5px;margin-bottom:6px}.mi-bubble-user[data-v-d7ac471d]{background:#fff;color:#1a1a1a;border:2px solid #ff7461;padding:10px 14px;border-radius:16px 16px 4px;font-size:14px;line-height:1.55;white-space:pre-wrap;word-wrap:break-word}.mi-status[data-v-d7ac471d]{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:#999;margin-bottom:8px}.mi-dot[data-v-d7ac471d]{width:6px;height:6px;border-radius:50%;background:#ff7461;animation:mi-pulse-d7ac471d 1.2s infinite ease-in-out}@keyframes mi-pulse-d7ac471d{0%,to{opacity:.35;transform:scale(.8)}50%{opacity:1;transform:scale(1.2)}}.mi-typing[data-v-d7ac471d]{display:inline-flex;gap:4px;padding:4px 0}.mi-typing span[data-v-d7ac471d]{width:6px;height:6px;border-radius:50%;background:#ff7461;animation:mi-bounce-d7ac471d 1.4s infinite ease-in-out both}.mi-typing span[data-v-d7ac471d]:nth-child(2){animation-delay:.16s}.mi-typing span[data-v-d7ac471d]:nth-child(3){animation-delay:.32s}@keyframes mi-bounce-d7ac471d{0%,80%,to{transform:scale(0)}40%{transform:scale(1)}}.mi-error[data-v-d7ac471d]{margin-top:8px;padding:8px 10px;background:#fef2f2;color:#dc2626;border-left:3px solid #dc2626;border-radius:4px;font-size:12px}.ci-root[data-v-1e9a4d7b]{padding:12px 20px 16px;background:#fff}.ci-box[data-v-1e9a4d7b]{position:relative;display:flex;gap:8px;align-items:center;border:1px solid #e5e5e5;border-radius:10px;padding:10px 10px 10px 14px;background:#fafafa;transition:border-color .15s}.ci-box[data-v-1e9a4d7b]:focus-within{border-color:#ff7461;background:#fff}.ci-box textarea[data-v-1e9a4d7b]{flex:1;border:0;background:transparent;resize:none;font:inherit;font-size:14px;color:#1a1a1a;outline:none;line-height:1.5;max-height:200px}.ci-send[data-v-1e9a4d7b]{border:0;background:#ff7461;color:#fff;font-weight:600;font-size:13px;padding:8px 16px;border-radius:8px;cursor:pointer;font-family:inherit}.ci-send[data-v-1e9a4d7b]:hover:not(:disabled){background:#e85d4a}.ci-send[data-v-1e9a4d7b]:disabled{background:#ccc;cursor:not-allowed}.hp-root[data-v-3db415ee]{display:flex;flex-direction:column;background:#fff;border:1px solid #ececec;border-radius:12px;box-shadow:0 1px 2px #00000008,0 6px 16px #0000000d;height:100%;overflow:hidden}.hp-head[data-v-3db415ee]{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-bottom:1px solid #f0f0f0;flex-shrink:0}.hp-title[data-v-3db415ee]{font-size:13px;font-weight:700;color:#1a1a1a;letter-spacing:.3px}.hp-clear[data-v-3db415ee]{border:0;background:transparent;color:#999;font:inherit;font-size:11px;cursor:pointer;padding:2px 4px}.hp-clear[data-v-3db415ee]:hover{color:#ff7461}.hp-empty[data-v-3db415ee]{padding:28px 16px;text-align:center;color:#999;font-size:12px}.hp-list[data-v-3db415ee]{list-style:none;padding:8px;margin:0;overflow-y:auto;flex:1}.hp-item[data-v-3db415ee]{position:relative;padding:10px 34px 10px 12px;border-radius:8px;cursor:pointer;margin-bottom:2px;transition:background .15s}.hp-item[data-v-3db415ee]:hover{background:#fafafa}.hp-item-active[data-v-3db415ee]{background:#fff5f3;box-shadow:inset 3px 0 #ff7461}.hp-item-title[data-v-3db415ee]{font-size:13px;color:#1a1a1a;line-height:1.35;font-weight:500;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.hp-item-meta[data-v-3db415ee]{display:flex;align-items:center;gap:5px;margin-top:3px;font-size:11px;color:#999}.hp-del[data-v-3db415ee]{position:absolute;top:6px;right:6px;width:20px;height:20px;border:0;background:transparent;color:#ccc;font-size:16px;line-height:1;cursor:pointer;border-radius:4px;opacity:0;transition:opacity .15s,color .15s}.hp-item:hover .hp-del[data-v-3db415ee]{opacity:1}.hp-del[data-v-3db415ee]:hover{color:#ff7461;background:#fff5f3}@font-face{font-family:Pretendard;font-weight:400;font-style:normal;font-display:swap;src:url(./fonts/Pretendard-Regular.woff2) format("woff2")}@font-face{font-family:Pretendard;font-weight:700;font-style:normal;font-display:swap;src:url(./fonts/Pretendard-Bold.woff2) format("woff2")}:root{font-family:Pretendard,SFProDisplay,AppleSDGothicNeo,SF Pro Text,Spoqa Han Sans Neo,Noto Sans,Helvetica Neue,Helvetica,Arial,sans-serif;color-scheme:light}*{box-sizing:border-box}html,body,#app{height:100%;width:100%;margin:0;padding:0}body{background:#fff;color:#1a1a1a}.cp-root{display:flex;flex-direction:column;height:100vh;width:100vw;padding:20px;background:#fff;overflow:hidden}.cp-actions{position:absolute;top:1px;right:14px;z-index:5;display:flex;flex-direction:column;gap:6px}.cp-icon-btn{width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;border:1px solid #e5e5e5;background:#fff;color:#1a1a1a;border-radius:8px;cursor:pointer;transition:all .15s;box-shadow:0 1px 3px #0000000a;padding:0}.cp-icon-btn:hover{border-color:#ff7461;color:#ff7461}.cp-icon-btn[aria-pressed=true]{background:#fff5f3;border-color:#ff7461;color:#ff7461}.cp-body{flex:1;display:grid;grid-template-columns:1fr auto;min-height:0;overflow:hidden}.cp-chat{display:flex;flex-direction:column;min-width:0;min-height:0;overflow:hidden;position:relative}.cp-history{width:400px;min-width:400px}.cp-main{flex:1;min-height:0;overflow-y:auto;padding:0 20px;background:#fff}.cp-empty{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:40px 20px}.cp-empty-title{font-size:22px;font-weight:700;color:#1a1a1a;margin-bottom:6px}.cp-empty-sub{color:#666;font-size:14px;margin:0 0 24px}.cp-suggestions{display:grid;grid-template-columns:1fr 1fr;gap:8px;max-width:520px;width:100%}.cp-sug{border:1px solid #e5e5e5;background:#fafafa;color:#1a1a1a;padding:10px 14px;border-radius:10px;font-size:13px;text-align:left;cursor:pointer;font-family:inherit;transition:all .15s}.cp-sug:hover:not(:disabled){border-color:#ff7461;background:#ffe6e1}.cp-sug:disabled{opacity:.5;cursor:not-allowed}.cp-list{padding:8px 0;max-width:90%;margin:0 auto}@media (max-width: 900px){.cp-history{width:320px;min-width:320px}}@media (max-width: 640px){.cp-body{grid-template-columns:1fr}.cp-history{position:absolute;right:0;top:0;bottom:0;width:85vw;max-width:400px;z-index:10;box-shadow:-4px 0 12px #00000014}}
|
package/dist/index.html
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>Sample Feature</title>
|
|
7
|
-
<script type="module" crossorigin src="./assets/index-
|
|
8
|
-
<link rel="stylesheet" crossorigin href="./assets/index-
|
|
7
|
+
<script type="module" crossorigin src="./assets/index-Bp_ymGdi.js"></script>
|
|
8
|
+
<link rel="stylesheet" crossorigin href="./assets/index-D4hGefa4.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|
|
11
11
|
<div id="app"></div>
|