1import{a as U}from"./chunk-GPHX75X3.js";import{gb as w}from"./chunk-N6RRKPMH.js";import{c as j}from"./chunk-UXZT3DCY.js";import{o as b,q as n,r as D,u}from"./chunk-ECXCM7JU.js";import{F as A,X as v,Y as T,ba as M,e as L,fa as k,i as m,l as E}from"./chunk-IQ6SK2BU.js";import{d as r}from"./chunk-OXDKANHF.js";import{a as I,b as F}from"./chunk-XUHYVR5R.js";var d="[Support]",_=(()=>{class a{static{this.type=`${d} Set Category`}constructor(e){this.category=e}}return a})(),$=(()=>{class a{static{this.type=`${d} Send Message`}constructor(e){this.message=e}}return a})(),N=(()=>{class a{static{this.type=`${d} Set Draft`}constructor(e){this.message=e}}return a})(),B=(()=>{class a{static{this.type=`${d} Mark Resolved`}}return a})(),H=(()=>{class a{static{this.type=`${d} Escalate To Human`}}return a})(),J=(()=>{class a{static{this.type=`${d} Reset Session`}}return a})(),O=(()=>{class a{static{this.type=`${d} Assist Success`}constructor(e,s,l,p,S,h){this.conversationId=e,this.modelTurn=s,this.turnLimitReached=l,this.categoryGuess=p,this.priorityGuess=S,this.resolvedOutcome=h}}return a})(),R=(()=>{class a{static{this.type=`${d} Assist Failure`}constructor(e,s){this.error=e,this.draftToRestore=s}}return a})(),C=(()=>{class a{static{this.type=`${d} Escalate Success`}constructor(e,s){this.ticketId=e,this.subject=s}}return a})(),G=(()=>{class a{static{this.type=`${d} Escalate Failure`}constructor(e){this.error=e}}return a})();function x(a){let t=a.replace(/\s+/g," ").trim();if(t.length<=180)return t;let e=t.slice(0,179);/[\uD800-\uDBFF]$/.test(e)&&(e=e.slice(0,-1));let s=e.lastIndexOf(" ");return`${(s>=139?e.slice(0,s):e).trimEnd()}\u2026`}var X={draft:"",categorySelection:null,conversationId:null,turns:[],isAsking:!1,isEscalating:!1,lastError:null,turnLimitReached:!1,categoryGuess:null,priorityGuess:null,resolvedOutcome:null,createdTicket:null},o=class f{constructor(t,e){this.supportApi=t,this.store=e,this.sessionEpoch=0,this.sessionCancelled=new L}resetForAccount(t,e){let s=e.payload?.id??null;s!==this.accountId&&(this.accountId=s,this.reset(t))}captureAccount(){this.accountId??=this.store.selectSnapshot(w.currentUser)?.id??null}static draft(t){return t.draft}static categorySelection(t){return t.categorySelection}static turns(t){return t.turns}static isAsking(t){return t.isAsking}static isEscalating(t){return t.isEscalating}static lastError(t){return t.lastError}static turnLimitReached(t){return t.turnLimitReached}static resolvedOutcome(t){return t.resolvedOutcome}static createdTicket(t){return t.createdTicket}static priorityGuess(t){return t.priorityGuess}static categoryGuess(t){return t.categoryGuess}setDraft(t,e){this.captureAccount(),t.patchState({draft:e.message})}setCategory(t,e){t.patchState({categorySelection:e.category,lastError:null})}sendMessage(t,e){let s=t.getState();if(s.isAsking||s.isEscalating||s.turnLimitReached||s.resolvedOutcome==="escalated")return m;this.captureAccount();let l=this.sessionEpoch,p=s.draft.trim()===e.message.trim()?s.draft:e.message,S={role:"user",content:e.message,timestamp:new Date};t.patchState({draft:"",turns:[...s.turns,S],isAsking:!0,lastError:null});let h=s.turns.map(i=>({role:i.role,content:i.content}));return this.supportApi.ask({conversationId:s.conversationId??void 0,message:e.message,history:h.length>0?h:void 0}).pipe(T(i=>{if(l!==this.sessionEpoch)return;t.getState().draft===p&&t.patchState({draft:""});let g={role:"model",content:i.reply,timestamp:new Date},y=this.toCategory(i.categoryGuess),c=this.toPriority(i.priorityGuess);t.dispatch(new O(i.conversationId,g,i.turnLimitReached,y,c,i.resolvedOutcome??null)),i.createdTicket&&t.patchState({createdTicket:{id:i.createdTicket.id,subject:i.createdTicket.subject},resolvedOutcome:"escalated"})}),A(i=>{if(l!==this.sessionEpoch)return m;let g=i?.error?.message??i?.message??"Unknown error";return t.dispatch(new R(g,p)),E(()=>i)}),v(this.sessionCancelled))}assistSuccess(t,e){let s=t.getState();t.patchState({conversationId:e.conversationId,turns:[...s.turns,e.modelTurn],isAsking:!1,turnLimitReached:e.turnLimitReached,categoryGuess:e.categoryGuess??s.categoryGuess,priorityGuess:e.priorityGuess??s.priorityGuess,resolvedOutcome:e.resolvedOutcome})}assistFailure(t,e){let s=t.getState(),l=[...s.turns],p=l.map(h=>h.role).lastIndexOf("user");p>=0&&l.splice(p,1);let S=s.draft===""?e.draftToRestore:s.draft;t.patchState({turns:l,isAsking:!1,lastError:e.error,draft:S})}markResolved(t){t.patchState({resolvedOutcome:"resolved"})}escalateToHuman(t){let e=t.getState();if(e.isAsking||e.isEscalating||e.createdTicket)return m;let s=e.draft.trim(),l=e.turns.find(c=>c.role==="user")?.content??s,p=s||[...e.turns].reverse().find(c=>c.role==="user")?.content||"";if(!p.trim())return m;this.captureAccount();let S=this.sessionEpoch;t.patchState({isEscalating:!0,lastError:null});let h=x(l),i=s?[...e.turns,{role:"user",content:s,timestamp:new Date}]:e.turns,g=e.categorySelection??e.categoryGuess??"Other",y=e.priorityGuess??"Normal";return this.supportApi.createTicket({category:g,priority:y,subject:h,body:p,aiConversationLog:JSON.stringify(i.map(c=>({role:c.role,content:c.content,timestamp:c.timestamp.toISOString()})))}).pipe(T(c=>{S===this.sessionEpoch&&(t.getState().draft===e.draft&&t.patchState({draft:""}),t.dispatch(new C(c.id,c.subject)))}),A(c=>{if(S!==this.sessionEpoch)return m;let P=c?.error?.message??c?.message??"Escalation failed";return t.dispatch(new G(P)),E(()=>c)}),v(this.sessionCancelled))}escalateSuccess(t,e){t.patchState({isEscalating:!1,resolvedOutcome:"escalated",createdTicket:{id:e.ticketId,subject:e.subject}})}escalateFailure(t,e){t.patchState({isEscalating:!1,lastError:e.error})}reset(t){this.sessionEpoch++,this.sessionCancelled.next(),t.setState(F(I({},X),{turns:[]}))}toCategory(t){return["Billing","Bug","HowTo","Feature","Other"].includes(t)?t:null}toPriority(t){return["Low","Normal","High"].includes(t)?t:null}static{this.\u0275fac=function(e){return new(e||f)(k(U),k(b))}}static{this.\u0275prov=M({token:f,factory:f.\u0275fac})}};r([n(j)],o.prototype,"resetForAccount",null);r([n(N)],o.prototype,"setDraft",null);r([n(_)],o.prototype,"setCategory",null);r([n($)],o.prototype,"sendMessage",null);r([n(O)],o.prototype,"assistSuccess",null);r([n(R)],o.prototype,"assistFailure",null);r([n(B)],o.prototype,"markResolved",null);r([n(H)],o.prototype,"escalateToHuman",null);r([n(C)],o.prototype,"escalateSuccess",null);r([n(G)],o.prototype,"escalateFailure",null);r([n(J)],o.prototype,"reset",null);r([u()],o,"draft",null);r([u()],o,"categorySelection",null);r([u()],o,"turns",null);r([u()],o,"isAsking",null);r([u()],o,"isEscalating",null);r([u()],o,"lastError",null);r([u()],o,"turnLimitReached",null);r([u()],o,"resolvedOutcome",null);r([u()],o,"createdTicket",null);r([u()],o,"priorityGuess",null);r([u()],o,"categoryGuess",null);o=r([D({name:"support",defaults:X})],o);export{_ as a,$ as b,N as c,B as d,H as e,J as f,o as g};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.