PageSourceSearch

https://vifu.ai/_next/static/chunks/app/layout-374bc83ba67f6087.js

js vifu.ai collected 2026-10-05 13:14:52 UTC 59,491 bytes, 1 lines download raw bytes

1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7177],{1394:(e,t,a)=>{"use strict";a.d(t,{Cz:()=>u,Mf:()=>l,aZ:()=>h,h4:()=>m,oE:()=>p,yr:()=>g});var n=a(31115),s=a(17321);let i=(0,n.sr)({gatewayPathPrefix:"/api/web/billing/",restoreSession:s.Kb});function r(e){return"string"==typeof e&&e.trim()?e.trim():null}async function o(e,t){return Error(function(e){let t=e.error;if("string"==typeof t&&t.trim())return t.trim();if(t&&"object"==typeof t){let e=r(t.message);if(e)return e}return r(e.message)}(await e.json().catch(()=>({})))??t)}async function l(e,t="/subscription",a="pro"){return c(a,e,t)}async function c(e,t,a="/subscription"){return d(await i("/api/web/billing/checkout/session",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({billingCycle:t,returnTo:a,purchase:{type:"plan",planId:e,billingCycle:t}})}))}async function d(e){if(!e.ok)throw await o(e,"Unable to open checkout.");let t=await e.json().catch(()=>({})),a=t.session&&"object"==typeof t.session?t.session:{},n=r(a.url)??r(t.url);if(!n)throw Error("Checkout URL is missing.");return{url:n,sessionId:r(a.id),idempotencyKey:r(t.idempotencyKey)}}async function u(){let e=await fetch("/api/web/billing/products",{method:"GET",headers:{Accept:"application/json"}});if(!e.ok)throw await o(e,"Unable to load billing products.");return await e.json()}async function m(){let e=await i("/api/web/billing/account",{method:"GET",headers:{Accept:"application/json"}});if(!e.ok)throw await o(e,"Unable to load billing account.");return await e.json()}async function p(e="/subscription"){let t=await i("/api/web/billing/portal/session",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({returnTo:e})});if(!t.ok)throw await o(t,"Unable to open billing portal.");let a=r((await t.json().catch(()=>({}))).url);if(!a)throw Error("Billing portal URL is missing.");return{url:a}}async function g(e,t){let a=await i("/api/web/billing/subscription/change",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({planId:e,billingCycle:t})});if(!a.ok)throw await o(a,"Unable to update subscription.");return await a.json()}async function h(){let e=await i("/api/web/billing/subscription/cancel-downgrade",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({})});if(!e.ok)throw await o(e,"Unable to cancel scheduled downgrade.");return await e.json()}},5813:(e,t,a)=>{"use strict";a.d(t,{AppShell:()=>eP});var n=a(95155),s=a(12115),i=a(73321),r=a(98500),o=a.n(r),l=a(59129),c=a(91867),d=a(60040),u=a(6327),m=a(60557),p=a(46856),g=a(6518),h=a(45293),f=a(5937),y=a(13343),b=a(74856),v=a(50424),w=a(15475),C=a(39210),x=a(54593);function j(e){return"string"==typeof e&&e.trim()?e.trim():null}function k(e){let t="number"==typeof e?e:"string"==typeof e?Number(e):NaN;return Number.isFinite(t)?t:null}function S(e){let t=k(e);return null===t?null:t>0&&t<1e12?1e3*t:t}function _(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:null}function A(e){var t;let a,n=_(e);if(!n)return null;let s=j(n.session_id)??j(n.sessionId),i=(t=n.provider,"minds"===(a=j(t)?.toLowerCase())?null:"normal"===a||"vifu-ai"===a?"vifu-ai":"vifu"),r=j(n.companion_id)??j(n.companionId)??j(n.character_id)??j(n.characterId);if(!s||!i||!r)return null;let o=j(n.context)??"web-chat";return{sessionId:s,provider:i,companionId:r,companionName:j(n.companion_name)??j(n.companionName),context:o,gameId:o.startsWith("game:")?j(o.slice(5)):null,playSessionId:j(n.play_session_id)??j(n.playSessionId),gameTitle:null,startedAt:S(n.started_at??n.startedAt)??0,endedAt:S(n.ended_at??n.endedAt),messageCount:Math.max(0,Math.trunc(k(n.message_count??n.messageCount)??0)),summary:j(n.summary)}}function P(e,t){return`${e}:${t}`}async function I(){let e=(0,v.r)(),[t,a]=await Promise.all([e.companion.sessions(),e.claw.companions().catch(()=>[])]),n=(t.sessions??[]).map(A).filter(e=>null!==e).sort((e,t)=>t.startedAt-e.startedAt),s=(0,w.s1)(a),i=s.length>0?s:[w.t6],r=new Map,o=(0,C.Df)();for(let e of(r.set(P("vifu-ai",o.id),{provider:"vifu-ai",companionId:o.id,companionName:o.name,avatarSrc:o.avatarSrc}),i)){let t=(0,C.B6)(e.characterId,e.displayName,e.avatarSrc);r.set(P("vifu",e.characterId),{provider:"vifu",companionId:e.characterId,companionName:e.displayName,avatarSrc:t.avatarSrc})}for(let e of n){let t=P(e.provider,e.companionId);if(r.has(t))continue;let a="vifu-ai"===e.provider?(0,C.Df)():(0,C.B6)(e.companionId);r.set(t,{provider:e.provider,companionId:e.companionId,companionName:e.companionName??a.name,avatarSrc:a.avatarSrc})}return Array.from(r.values(),e=>{let t=P(e.provider,e.companionId),a=n.filter(t=>t.provider===e.provider&&t.companionId===e.companionId),s=(0,x.a)(a);return{conversationId:t,provider:e.provider,companionId:e.companionId,companionName:e.companionName,avatarSrc:e.avatarSrc,sessions:a,currentSession:s,lastActivityAt:s?s.endedAt??s.startedAt:null}}).sort((e,t)=>
1(t.lastActivityAt??0)-(e.lastActivityAt??0)||e.companionName.localeCompare(t.companionName))}function N(e){let t=_(e);if(!t)return null;let a=j(t.role);if("user"!==a&&"assistant"!==a)return null;let n=function e(t){if("string"==typeof t){let a=t.trim();if(!a)return"";try{let n=JSON.parse(a);if(n!==t)return e(n)}catch{}return a}if(Array.isArray(t))return t.map(e).filter(Boolean).join("\n");let a=_(t);return a?e(a.text??a.content??a.message??a.blocks):""}(t.content??t.content_json??t.text);return n?{id:j(t.id)??`${a}-${S(t.created_at??t.createdAt)??0}`,role:a,text:n,createdAt:S(t.created_at??t.createdAt)??0}:null}async function U(e){let t=await (0,v.r)().companion.session(e),a=A(t.session);if(!a||a.sessionId!==e)throw Error("Companion session was not found");return{session:a,messages:(t.messages??[]).map(N).filter(e=>null!==e)}}var O=a(38290),M=a(87964),E=a(81450);let T=(0,E.s)({loadConversations:I}),L=T.useMessageCenterStore,$=T.hydrateMessageCenterStore;var R=a(91762);function D({enabled:e=!0}={}){let t=(0,u.CU)(e=>e.hasHydrated),a=(0,u.CU)(e=>e.isAuthenticated),n=L(e=>e.conversations),i=L(e=>e.status),r=L(e=>e.readMessageCounts),o=L(e=>e.hasHydrated),l=L(e=>e.refresh),c=L(e=>e.clearRemoteData),d=L(e=>e.markSessionRead);(0,s.useEffect)(()=>{$()},[]),(0,s.useEffect)(()=>{!t||(a?e&&l():c())},[t,c,e,a,l]),(0,s.useEffect)(()=>{if(!e||!a)return;let t=()=>{"visible"===document.visibilityState&&l(!0)};return window.addEventListener("focus",t),document.addEventListener("visibilitychange",t),()=>{window.removeEventListener("focus",t),document.removeEventListener("visibilitychange",t)}},[e,a,l]);let m=(0,s.useMemo)(()=>Object.fromEntries(n.map(e=>[e.conversationId,(0,E.g)(e,r)])),[n,r]),p=Object.values(m).reduce((e,t)=>e+t,0);return{conversations:n,status:i,unreadByCompanion:m,unreadCount:p,isReady:t&&o&&(!a||"ready"===i||"error"===i),refresh:l,markSessionRead:d}}var F=a(77095);function W({surface:e,layout:t="drilldown",companionId:a,sessionId:s,onBack:i,onSelectCompanion:r,onSelectSession:o}){let l=(0,R.O)(),c=(0,n.jsx)(H,{surface:e,onBack:i,onSelectCompanion:r,selectedCompanionId:a,splitPane:"split"===t}),d=a?(0,n.jsx)(z,{surface:e,companionId:a,sessionId:s,onBack:i,onSelectSession:o,showBack:"split"!==t}):null;return(0,n.jsx)(h.WT,{layout:t,label:(0,M.t)(l,"messages.title"),selected:!!a,list:c,chat:d,placeholder:(0,n.jsxs)("div",{className:"messages-game-chat-placeholder",children:[(0,n.jsx)("span",{"aria-hidden":"true",children:(0,n.jsx)(m.O,{name:"comment",size:"xl"})}),(0,n.jsx)("strong",{children:(0,M.t)(l,"messages.companionMessages")}),(0,n.jsx)("p",{children:(0,M.t)(l,"messages.noCompanionMessagesDescription")})]})})}function H({surface:e,onBack:t,onSelectCompanion:a,selectedCompanionId:i=null,splitPane:r=!1}){let o=(0,R.O)(),l=(0,u.CU)(e=>e.currentGameContext),c=(0,u.CU)(e=>e.isAuthenticated),d=(0,u.CU)(e=>e.openLoginModal),{conversations:p,status:g,unreadByCompanion:y,unreadCount:b,isReady:v}=D(),w=(0,F.u)(),[C,x]=(0,s.useState)(null),j=async e=>{if("ready"===e.state){x(null);try{await w.selectCard(e.card.id),a((0,f.A7)(e.card.id))}catch(e){x(e instanceof Error?e.message:"Unable to select this companion")}}},k=(0,f.Tv)(w.cards,i,w.loading),S=(0,f.jp)({conversations:p,unreadByCompanion:y,selectedCompanionId:i,currentGameContext:l,labels:{locale:o,directChat:(0,M.t)(o,"ui.directChat"),noMessagesYet:(0,M.t)(o,"messages.noMessagesYet"),messageCount:e=>(0,M.t)(o,"messages.messageCount",{count:e})}});return(0,n.jsxs)("section",{className:`messages-center messages-center-${e}${r?" messages-game-list-pane":""}`,"aria-labelledby":`${e}-messages-title`,children:[(0,n.jsxs)("header",{className:"sidebar-workspace-header",children:[(0,n.jsx)("button",{type:"button",className:"sidebar-workspace-back",onClick:t,"aria-label":(0,M.t)(o,"ui.back"),children:(0,n.jsx)(m.O,{name:"chevron-left",size:"lg"})}),(0,n.jsxs)("div",{className:"sidebar-workspace-title-copy",children:[(0,n.jsx)("h1",{id:`${e}-messages-title`,children:(0,M.t)(o,"messages.title")}),(0,n.jsx)("span",{children:(0,M.t)(o,"messages.unreadCount",{count:b})})]}),(0,n.jsx)("span",{className:"sidebar-workspace-count","aria-label":(0,M.t)(o,"messages.unreadCount",{count:b}),children:b})]}),c||0!==w.cards.length||w.loading?null:(0,n.jsxs)("div",{className:"sidebar-workspace-empty messages-auth-empty",children:[(0,n.jsx)("span",{className:"sidebar-workspace-empty-icon","aria-hidden":"true",children:(0,n.jsx)(m.O,{name:"comment",size:"xl"})}),(0,n.jsx)("strong",{children:(0,M.t)(o,"messages.companionMessages")}),(0,n.jsx)("p",{children:(0,M.t)(o,"messages.messagesSignUpDescription")}),(0,n.jsx)("button",{type:"button",className:"sidebar-workspace-primary-action",onClick:()=>d(B(),null,"signup"),children:(0,M.t)(o,"ui.signUp")})]}),c&&!v?(0,n.jsx)("p",{className:"sidebar-workspace-status",children:(0,M.t)(o,"ui.loadingEllipsis")}):null,!c&&w.loading?(0,n.jsx)("p",{className:"sidebar-workspace-status",children:(0,M.t)(o,"ui.loadingEllipsis")}):null,c&&"error"===g?(0,n.jsxs)("div",{className:"sidebar-workspace-empty",children:[(0,n.jsx)("span",{className:"sidebar-workspace-empty-icon","aria-hidden":"true",children:(0,n.jsx)(m.O,{name:"comment",size:"xl"})}),(0,n.jsx)("strong",{children:(0,M.t)(o,"messages.messagesUnavailable")}),(0,n.jsx)("p",{children:(0,M.t)(o,"messages.messagesUnavailableDescription")})]}):null,c&&"ready"===g&&0===p.length&&0===w.cards.length&&!w.loading?(0,n.jsxs)("div",{className:"sidebar-workspace-empty",children:[(0,n.jsx)("span",{className:"sidebar-workspace-empty-icon","aria-hidden":"true",children:(0,n.jsx)(m.O,{name:"comment",size:"xl"})}),(0,n.jsx)("strong",{children:(0,M.t)(o,"messages.noCompanionMessages")}),(0,n.jsx)("p",{children:(0,M.t)(o,"messages.noCompanionMessagesDescription")})]}):null,C?(0,n.jsx)("p",{className:"sidebar-workspace-status",role:"status",children:C}):null,(c||w.cards.length>0)&&(p.length>0||w.cards.length>0)?(0,n.jsx)(h.LA,{rows:[...k,...S],onSelect:e=>{let t=(0,f.p_)(e),n=t?w.cards.find(e=>e.card.id===t):null;return n?j(n):a(e)}}):null]})}function G({surface:e,companionCardId:t,onBack:a,showBack:s=!0}){let i=(0,R.O)(),r=(0,u.CU)(e=>e.isAuthenticated),o=(0,u.CU)(e=>e.openLoginModal),l=(0,u.CU)(e=>e.selectedProviderCompanion),c=(0,u.CU)(e=>e.normalAiTarget),d=(0,F.u)(),p=(0,b.u)(),g=d.cards.find(e=>e.card.id===t)??null,v="provider-companion"===c&&l?.id===t,w=g?.state==="ready"&&v,C=g?.card.name??l?.name??"Companion",x=g?(0,f.pf)(g):"/brand/vifu-icon-512.png",j=g?.card.target.kind==="provider-instance",k=!r&&!d.loading&&!j,S=g?"ready"!==g.state?g.reason??"Finish this companion's setup in Settings before chatting.":v?void 0:"Choose this companion again from Messages.":"This companion is no longer available.";return(0,n.jsxs)("section",{className:`messages-center messages-center-${e} messages-chat-view${s?"":" messages-chat-view-split"}`,"aria-labelledby":`${e}-chat-title`,children:[(0,n.jsxs)("header",{className:"sidebar-workspace-header messages-chat-header",children:[s?(0,n.jsx)("button",{type:"button",className:"sidebar-workspace-back",onClick:a,"aria-label":(0,M.t)(i,"messages.backToMessages"),children:(0,n.jsx)(m.O,{name:"chevron-left",size:"lg"})}
1):null,(0,n.jsx)("img",{src:x,alt:"",width:34,height:34,className:"messages-chat-avatar"}),(0,n.jsxs)("div",{className:"sidebar-workspace-title-copy",children:[(0,n.jsx)("h1",{id:`${e}-chat-title`,children:C}),(0,n.jsx)("span",{children:g?.providerName??"Provider companion"})]})]}),k?(0,n.jsxs)("div",{className:"sidebar-workspace-empty messages-auth-empty",children:[(0,n.jsx)("span",{className:"sidebar-workspace-empty-icon","aria-hidden":"true",children:(0,n.jsx)(m.O,{name:"lock",size:"xl"})}),(0,n.jsx)("strong",{children:(0,M.t)(i,"messages.companionMessages")}),(0,n.jsx)("p",{children:(0,M.t)(i,"messages.messagesSignUpDescription")}),(0,n.jsx)("button",{type:"button",className:"sidebar-workspace-primary-action",onClick:()=>o(B(),null,"signup"),children:(0,M.t)(i,"ui.signUp")})]}):null,k?null:(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"messages-context-summary","aria-label":(0,M.t)(i,"messages.currentGameContext"),children:[(0,n.jsx)("span",{className:"messages-context-icon","aria-hidden":"true",children:(0,n.jsx)(m.O,{name:"spark",size:"md"})}),(0,n.jsxs)("span",{className:"messages-context-copy",children:[(0,n.jsx)("strong",{children:g?.instanceLabel??(0,M.t)(i,"ui.directChat")}),(0,n.jsx)("span",{children:g?.card.modelId||(0,M.t)(i,"ui.directChat")})]})]}),d.loading?(0,n.jsx)("p",{className:"sidebar-workspace-status",children:(0,M.t)(i,"ui.loadingEllipsis")}):null,d.error?(0,n.jsx)("p",{className:"messages-thread-error",children:d.error}):null,d.loading?null:(0,n.jsxs)("div",{className:"messages-thread-shell",children:[(0,n.jsx)(y.j,{messages:p.messages,isThinking:p.isThinking,companionName:C,emptyText:(0,M.t)(i,"messages.startAConversationWithCompanion",{companion:C}),disabled:!0,className:"messages-thread-chat"}),(0,n.jsx)(h.tV,{companionName:C,disabled:!w||p.isThinking,disabledReason:S,messageLabel:e=>(0,M.t)(i,"messages.messageCompanion",{companion:e}),sendLabel:(0,M.t)(i,"messages.sendMessage"),sendIcon:(0,n.jsx)(m.O,{name:"upload",size:"md"}),onSend:p.sendMessage})]})]})]})}function z({surface:e,companionId:t,sessionId:a,onBack:i,onSelectSession:r,showBack:o=!0}){let l=(0,f.p_)(t);if(l)return(0,n.jsx)(G,{surface:e,companionCardId:l,onBack:i,showBack:o});let c=(0,R.O)(),d=(0,u.CU)(e=>e.currentGameContext),p=(0,u.CU)(e=>e.isAuthenticated),g=(0,u.CU)(e=>e.openLoginModal),b=function({companionId:e,requestedSessionId:t,currentGameId:a,currentPlaySessionId:n}){let i=(0,R.O)(),{conversations:r,status:o,refresh:l,markSessionRead:c}=D(),d=r.find(t=>t.conversationId===e)??null,u=d?.companionId??e,m=(0,s.useMemo)(()=>d?t?d.sessions.find(e=>e.sessionId===t)??null:(0,x.a)(d.sessions,a,n):null,[d,a,n,t]),[p,g]=(0,s.useState)([]),[h,f]=(0,s.useState)(!1),[y,b]=(0,s.useState)(!1),[v,w]=(0,s.useState)(!1),[C,j]=(0,s.useState)(m?.sessionId??null),k=(0,s.useRef)(0);(0,s.useEffect)(()=>{if(j(m?.sessionId??null),!m){g([]),f(!1),w(!1);return}let e=k.current+1;k.current=e,f(!0),w(!1),U(m.sessionId).then(t=>{k.current===e&&t.session.companionId===u&&(g(t.messages),c(t.session.sessionId,t.session.messageCount))}).catch(()=>{k.current===e&&w(!0)}).finally(()=>{k.current===e&&f(!1)})},[c,u,m]);let S=(0,s.useCallback)(async e=>{let s=e.trim();if(!s||y||t||a&&!n)return;let r=Date.now();g(e=>[...e,{id:`local-user-${r}`,role:"user",text:s,createdAt:r}]),b(!0);try{let e=m?.context??(a?`game:${a}`:"web-chat"),t=d?.provider??"vifu",r=await (0,O.FF)({message:s,characterId:"vifu-ai"===t?"wolfchan":u,companionProvider:"vifu-ai"===t?"normal":"vifu",companionId:u,companionName:d?.companionName,context:e,gameId:a,playSessionId:n,sessionId:C,newSession:!C});j(r.session_id),g(e=>[...e,{id:`local-assistant-${Date.now()}`,role:"assistant",text:r.text||(0,M.t)(i,"messages.noReplyReturned"),createdAt:Date.now()}]),await l(!0);let o=function(e){for(let t of L.getState().conversations){let a=t.sessions.find(t=>t.sessionId===e);if(a)return a.messageCount}return null}(r.session_id);null!==o&&c(r.session_id,o)}catch{g(e=>[...e,{id:`local-error-${Date.now()}`,role:"assistant",text:(0,M.t)(i,"messages.messageCouldNotBeSent"),createdAt:Date.now()}])}finally{b(!1)}},[d?.companionName,d?.provider,a,n,y,C,i,c,u,l,t,m?.context]);return{conversation:d,selectedSession:m,messages:p,status:o,isLoading:h,isThinking:y,loadError:v,isHistorical:!!t,sendMessage:S}
1}({companionId:t,requestedSessionId:a,currentGameId:d?.gameId,currentPlaySessionId:d?.playSessionId}),[v,w]=(0,s.useState)(!1);(0,s.useEffect)(()=>w(!1),[t,a]);let C=b.conversation?.companionName??t,j=b.conversation?.avatarSrc??"/brand/vifu-icon-512.png",k=b.selectedSession,S=(0,x.a)(b.conversation?.sessions??[],d?.gameId,d?.playSessionId),_=k?.gameTitle??k?.gameId??d?.gameTitle??d?.gameId??(0,M.t)(c,"ui.directChat");return(0,n.jsxs)("section",{className:`messages-center messages-center-${e} messages-chat-view${o?"":" messages-chat-view-split"}`,"aria-labelledby":`${e}-chat-title`,children:[(0,n.jsxs)("header",{className:"sidebar-workspace-header messages-chat-header",children:[o?(0,n.jsx)("button",{type:"button",className:"sidebar-workspace-back",onClick:i,"aria-label":(0,M.t)(c,"messages.backToMessages"),children:(0,n.jsx)(m.O,{name:"chevron-left",size:"lg"})}):null,(0,n.jsx)("img",{src:j,alt:"",width:34,height:34,className:"messages-chat-avatar"}),(0,n.jsxs)("div",{className:"sidebar-workspace-title-copy",children:[(0,n.jsx)("h1",{id:`${e}-chat-title`,children:C}),(0,n.jsx)("span",{children:_})]}),(0,n.jsx)("button",{type:"button",className:v?"messages-history-trigger messages-history-trigger-active":"messages-history-trigger",onClick:()=>w(e=>!e),"aria-label":(0,M.t)(c,"messages.chatHistory"),"aria-expanded":v,children:(0,n.jsx)(m.O,{name:"clock",size:"md"})})]}),p?null:(0,n.jsxs)("div",{className:"sidebar-workspace-empty messages-auth-empty",children:[(0,n.jsx)("span",{className:"sidebar-workspace-empty-icon","aria-hidden":"true",children:(0,n.jsx)(m.O,{name:"lock",size:"xl"})}),(0,n.jsx)("strong",{children:(0,M.t)(c,"messages.companionMessages")}),(0,n.jsx)("p",{children:(0,M.t)(c,"messages.messagesSignUpDescription")}),(0,n.jsx)("button",{type:"button",className:"sidebar-workspace-primary-action",onClick:()=>g(B(),null,"signup"),children:(0,M.t)(c,"ui.signUp")})]}),p&&v?(0,n.jsx)(h.gb,{currentSessionId:S?.sessionId??null,selectedSessionId:k?.sessionId??null,sessions:b.conversation?.sessions??[],labels:{title:(0,M.t)(c,"messages.chatHistory"),sessionCount:e=>(0,M.t)(c,"messages.sessionCount",{count:e}),noPreviousSessions:(0,M.t)(c,"messages.noPreviousSessions"),directChat:(0,M.t)(c,"ui.directChat"),messageCount:e=>(0,M.t)(c,"messages.messageCount",{count:e}),active:(0,M.t)(c,"ui.active"),formatDate:e=>(0,f.C4)(e,c)},onSelectSession:r,onClose:()=>w(!1)}):null,p&&!v?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"messages-context-summary","aria-label":(0,M.t)(c,"messages.currentGameContext"),children:[(0,n.jsx)("span",{className:"messages-context-icon","aria-hidden":"true",children:(0,n.jsx)(m.O,{name:"controller",size:"md"})}),(0,n.jsxs)("span",{className:"messages-context-copy",children:[(0,n.jsx)("strong",{children:_}),(0,n.jsx)("span",{children:k?`${(0,M.t)(c,"ui.session")} ${(0,f.Or)(k.sessionId)} \xb7 ${(0,M.t)(c,"messages.messageCount",{count:k.messageCount})}`:(0,M.t)(c,"messages.newDirectChat")})]}),b.isHistorical?(0,n.jsx)("span",{className:"messages-history-state",children:(0,M.t)(c,"ui.historyOnly")}):null]}),b.isLoading||"loading"===b.status?(0,n.jsx)("p",{className:"sidebar-workspace-status",children:(0,M.t)(c,"ui.loadingEllipsis")}):null,b.loadError?(0,n.jsx)("p",{className:"messages-thread-error",children:(0,M.t)(c,"messages.messagesUnavailableDescription")}):null,b.isLoading?null:(0,n.jsxs)("div",{className:"messages-thread-shell",children:[(0,n.jsx)(y.j,{messages:b.messages,isThinking:b.isThinking,companionName:C,emptyText:(0,M.t)(c,"messages.startAConversationWithCompanion",{companion:C}),disabled:!0,className:"messages-thread-chat"}),(0,n.jsx)(h.tV,{companionName:C,disabled:b.isHistorical||b.isThinking,disabledReason:b.isHistorical?(0,M.t)(c,"messages.historicalSessionsAreReadOnly"):void 0,messageLabel:e=>(0,M.t)(c,"messages.messageCompanion",{companion:e}),sendLabel:(0,M.t)(c,"messages.sendMessage"),sendIcon:(0,n.jsx)(m.O,{name:"upload",size:"md"}),onSend:b.sendMessage})]})]}):null]})}function B(){return`${window.location.pathname}${window.location.search}`}var V=a(76361),J=a(14203),q=a(32993),Y=a(1394);let K={loadPlanLabel:async()=>(await (0,Y.h4)()).subscriptionInfo.subscriptionName??null,loadDisplayName:async()=>(await (0,q.fetchAuthProfile)(null)).display_name||null},X=[{href:"/profile",labelKey:"ui.profile",icon:"player"},{href:"/subscription",labelKey:"ui.subscription",icon:"coin"}];function Q({collapsed:e,menuPlacement:t="right",detailsEnabled:a=!0}){let r=(0,i.usePathname)(),o=(0,i.useRouter)(),l=(0,i.useSearchParams)(),c=(0,u.CU)(e=>e.isAuthenticated),d=(0,R.O)(),p=(0,u.CU)(e=>e.activeUser),g=(0,u.CU)(e=>e.setActiveUser),h=(0,u.CU)(e=>e.clearSession),f=(0,u.CU)(e=>e.setActivePanel),y=(0,u.CU)(e=>e.openLoginModal),b=(0,u.CU)(e=>e.suppressLoginModalForPath),v=(0,s.useCallback)(e=>{g(e)},[g]),w=(0,V.v)({authenticated:c,collapsed:e,detailsEnabled:a,details:K,onDisplayName:v}),C=l.toString(),x=`${r}${C?`?${C}`:""}`,j=(0,M.t)(d,"ui.profile"),k=(0,J.Mc)(p)||j,S=w.planLabel??j,_=X.map(e=>({id:e.href,href:e.href,label:(0,M.t)(d,e.labelKey),icon:e.icon,iconNode:(0,n.jsx)(m.O,{name:e.icon,className:"sidebar-svg"}),active:(0,J.Ms)(r,e.href)})),A=async()=>{b(r||"/"),await (0,q.signOutSession)(null),h(),f(null),o.replace("/")};return(0,n.jsx)(J.sE,{authenticated:c,collapsed:e,displayName:k,planLabel:S,signUpLabel:(0,M.t)(d,"ui.signUp"),signOutLabel:(0,M.t)(d,"ui.signOut"),profileLabel:j,menuItems:_,accountActive:(0,J.Ms)(r,"/profile")||(0,J.Ms)(r,"/subscription"),menuPlacement:t,onSignUp:()=>y((0,J.wC)(x),null,"signup"),onSignOut:A,onMenuOpenChange:w.setMenuOpen,renderRouteLink:Z})}function Z({item:e,className:t,children:a,onClick:s,ariaCurrent:i,ariaLabel:r}){return(0,n.jsx)(o(),{href:e.href,prefetch:!1,role:"menuitem",className:t,"aria-current":i,"aria-label":r,onClick:s,children:a},e.id)}
1function ee(e){let[t,a]=e.split("/").filter(Boolean);return(0,d.lf)(t)&&(0,d.Jx)(a)?(0,d._i)(t,a):"/settings"}function et({buttonClassName:e,manageHref:t,mobile:a,wrapperClassName:s}){let{companionControl:i}=(0,l.T8)();return(0,n.jsx)(g.d,{withFeedActionItem:!1,wrapperClassName:s,buttonClassName:e,manageHref:t,pickerSurface:a?"sheet":"popover",primaryLabel:i?.label,primaryAction:i?.primaryAction,visualState:i?.visualState,onMenuOpenChange:i?.onMenuOpenChange,onInspectOpen:i?.onInspectOpen})}let ea=e=>(0,n.jsx)(et,{...e}),en=({children:e,className:t,current:a,dataItem:s,href:i,label:r,tooltip:l})=>(0,n.jsx)(o(),{href:i,prefetch:!1,className:t,"aria-label":r,"aria-current":a?"page":void 0,"data-game-console-item":s,"data-sidebar-tooltip":l,children:e}),es=({companionId:e,layout:t,onBack:a,onSelectCompanion:s,onSelectSession:i,sessionId:r,surface:o})=>(0,n.jsx)(W,{surface:o,layout:t,companionId:e,sessionId:r,onBack:a,onSelectCompanion:s,onSelectSession:i});function ei(e){return{close:(0,M.t)(e,"ui.close"),companion:(0,M.t)(e,"ui.companion"),console:(0,M.t)(e,"ui.console"),displaySidebar:(0,M.t)(e,"ui.displaySidebar"),home:"Vifu home",messages:(0,M.t)(e,"messages.title"),profile:(0,M.t)(e,"ui.profile"),settings:"Settings",signUp:(0,M.t)(e,"ui.signUp"),toggleSidebar:(0,M.t)(e,"ui.toggleSidebar")}}function er(){let e=(0,i.usePathname)(),t=(0,u.CU)(e=>e.isGameConsoleCollapsed),a=(0,u.CU)(e=>e.gameConsoleDesktopPosition),s=(0,u.CU)(e=>e.isAuthenticated),r=(0,R.O)(),o=(0,u.CU)(e=>e.setGameConsoleCollapsed),l=(0,u.CU)(e=>e.toggleGameConsoleCollapsed),d=(0,u.CU)(e=>e.currentGameContext),p=ee(e),{conversations:g,unreadCount:h}=D();return(0,n.jsx)(c.de,{accountControl:(0,n.jsx)(Q,{collapsed:t,menuPlacement:"right"===a?"left":"right"}),collapsed:t,controllerIcon:(0,n.jsx)(m.O,{name:"controller",className:"sidebar-svg"}),conversations:g.map(e=>({id:e.conversationId,current:!!(d?.gameId&&(0,x.a)(e.sessions,d.gameId,d.playSessionId))})),desktopPosition:a,isAuthenticated:s,labels:ei(r),messagesIcon:(0,n.jsx)(m.O,{name:"comment",className:"sidebar-svg"}),onSetCollapsed:o,onToggleCollapsed:l,renderCompanion:ea,renderLink:en,renderMessages:es,settingsCurrent:e===p,settingsHref:p,settingsIcon:(0,n.jsx)(m.O,{name:"settings",className:"sidebar-svg"}),unreadCount:h})}function eo(){let e=(0,i.usePathname)(),t=(0,u.CU)(e=>e.isAuthenticated),a=(0,u.CU)(e=>e.hasHydrated),s=(0,R.O)(),r=(0,u.CU)(e=>e.openLoginModal),o=ei(s),l=ee(e),{unreadCount:d}=D();return(0,n.jsx)(c.Ry,{closeLabel:o.close,hasHydrated:a,isAuthenticated:t,labels:o,messagesIcon:(0,n.jsx)(m.O,{name:"comment",className:"sidebar-svg"}),onLogin:()=>r(`${window.location.pathname}${window.location.search}`),profileHref:"/profile",profileIcon:(0,n.jsx)(m.O,{name:"player",className:"sidebar-svg"}),renderCompanion:ea,renderLink:en,renderMessages:es,renderSheet:({children:e,closeLabel:t,isOpen:a,label:s,onClose:i})=>(0,n.jsx)(p.L,{isOpen:a,onClose:i,label:s,closeLabel:t,children:e}),settingsCurrent:e===l,settingsHref:l,settingsIcon:(0,n.jsx)(m.O,{name:"settings",className:"sidebar-svg"}),unreadCount:d})}var el=a(21635),ec=a(18984),ed=a(40061),eu=a(34631),em=a(11756),ep=a.n(em),eg=a(27308);let eh={signIn:q.loginWithCredentials,signUp:q.signUpWithCredentials,confirmSignUp:q.confirmSignupCode,requestPasswordReset:q.requestPasswordResetCode,confirmPasswordReset:q.confirmPasswordResetCode,socialRedirect:q.loginWithSocialRedirect};function ef(){let e=(0,i.useRouter)(),t=(0,i.usePathname)(),a=(0,i.useSearchParams)(),r=(0,u.CU)(e=>e.isLoginModalOpen),o=(0,u.CU)(e=>e.isAuthenticated),l=(0,u.CU)(e=>e.loginReturnTo),c=(0,u.CU)(e=>e.loginInitialMode),d=(0,u.CU)(e=>e.loginIntendedPanel),p=(0,u.CU)(e=>e.setSession),g=(0,u.CU)(e=>e.openLoginModal),h=(0,u.CU)(e=>e.closeLoginModal),f=(0,R.O)(),y=(0,eg.qH)(f).auth,b=(0,s.useMemo)(()=>(0,eu.Wp)(a),[a]),v=(0,s.useMemo)(()=>{let e=a.toString();return`${t}${e?`?${e}`:""}`},[t,a]),w=(0,s.useCallback)((e,t)=>{p({displayName:e.displayName,source:e.source}),h(),t!==v&&(0,eu.c)(t)},[h,v,p]),C=(0,s.useMemo)(()=>({verificationCodeSent:(0,M.t)(f,"ui.verificationCodeSentEnterItToActivateYourAccount"),accountConfirmed:(0,M.t)(f,"ui.accountConfirmedYouCanSignInNow"),resetCodeSent:(0,M.t)(f,"ui.resetCodeSentEnterCodeAndNewPassword"),passwordResetComplete:(0,M.t)(f,"ui.passwordResetCompleteSignInWithNewPassword"),unableToLogin:(0,M.t)(f,"ui.unableToLogin"),unableToLoginWithProvider:e=>(0,M.t)(f,"ui.unableToLoginWithProvider",{provider:e})}),[f]),x=(0,ec.b)({isOpen:r,initialMode:c,returnTo:l,intendedPanel:d,canUseHostedUi:(0,q.isCognitoHostedUiConfigured)(),auth:eh,messages:C,onSignedIn:w}),{mode:j,credentialStep:k,email:S,password:_,verificationCode:A,newPassword:P,isSubmitting:I,canUseHostedUi:N,errorMessage:U,successMessage:O,usesCredentialPassword:E,isCredentialEmailStep:T}=x,L="signin"===j,$="signup"===j,D="confirm-signup"===j,F="forgot"===j,W="/login"===t||"/login/"===t||"/signup"===t||"/signup/"===t,H=L?y.welcomeBack:$?y.welcome:D?(0,M.t)(f,"ui.confirmSignUp"):(0,M.t)(f,"ui.resetPassword"),G=T?$?(0,M.t)(f,"ui.createYourAccountToContinue"):(0,M.t)(f,"ui.signInEmailStepDescription"):L?(0,M.t)(f,"ui.signInPasswordStepDescription",{email:S}):$?(0,M.t)(f,"ui.signUpPasswordStepDescription",{email:S}):D?(0,M.t)(f,"ui.enterTheVerificationCodeSentToYourEmail"):F?(0,M.t)(f,"ui.requestAPasswordResetCode"):(0,M.t)(f,"ui.enterYourResetCodeAndNewPassword");(0,s.useEffect)(()=>{W||o||"1"!==a.get("login")||g(b)},[o,W,g,b,a]),(0,s.useEffect)(()=>{o&&"1"===a.get("login")&&e.replace(t)},[o,t,e,a]),(0,s.useEffect)(()=>{o&&r&&h()},[h,o,r]),(0,s.useEffect)(()=>{r&&E&&window.requestAnimationFrame(()=>{document.getElementById("password"===k?"login-password":"login-email")?.focus({preventScroll:!0})})},[k,r,E]);let z=async e=>{e.preventDefault(),await x.submit()};return(0,n.jsx)(el.bL,{open:r,onOpenChange:n=>{n||(h(),"1"===a.get("login")?e.replace("/login"===t||"/login/"===t?"/":t):("/login"===t||"/login/"===t)&&(0,eu.c)(l))},children:(0,n.jsxs)(el.ZL,{children:[(0,n.jsx)(el.hJ,{className:ep().overlay}),(0,n.jsxs)(el.UC,{className:ep().content,onOpenAutoFocus:e=>{e.preventDefault(),window.requestAnimationFrame(()=>{document.getElementById("login-email")?.focus({preventScroll:!0})})},onInteractOutside:e=>e.preventDefault(),onPointerDownOutside:e=>e.preventDefault(),children:[(0,n.jsx)(el.bm,{asChild:!0,children:(0,n.jsx)("button",{type:"button",className:ep().close,"aria-label":(0,M.t)(f,"ui.closeLogin"),children:(0,n.jsx)("span",{"aria-hidden":!0,
1children:(0,n.jsx)(m.O,{name:"x",size:18})})})}),(0,n.jsx)("div",{className:ep().brand,children:(0,n.jsx)(ed.Q,{app:"vifu",className:ep().brandLockup,decorative:!0})}),(0,n.jsx)(el.hE,{className:ep().title,children:H}),(0,n.jsx)(el.VY,{className:ep().description,children:G}),(0,n.jsx)(J.TV,{mode:j,credentialStep:k,email:S,password:_,verificationCode:A,newPassword:P,submitting:I,canUseHostedUi:N,errorMessage:U,successMessage:O,labels:{email:(0,M.t)(f,"ui.email"),password:(0,M.t)(f,"ui.password"),editEmail:(0,M.t)(f,"ui.editEmail"),forgotPassword:(0,M.t)(f,"ui.forgotPassword"),createPassword:(0,M.t)(f,"ui.createPassword"),enterPassword:(0,M.t)(f,"ui.enterPassword"),verificationCode:(0,M.t)(f,"ui.verificationCode"),verificationCodePlaceholder:(0,M.t)(f,"ui.m123456"),newPassword:(0,M.t)(f,"ui.newPassword"),logIn:(0,M.t)(f,"ui.logIn"),continueWithEmail:(0,M.t)(f,"ui.continueWithEmail"),signIn:(0,M.t)(f,"ui.signIn"),signUp:(0,M.t)(f,"ui.signUp"),sendResetCode:(0,M.t)(f,"ui.sendResetCode"),continue:(0,M.t)(f,"ui.continue"),dontHaveAccount:(0,M.t)(f,"ui.dontHaveAnAccount"),alreadyHaveAccount:(0,M.t)(f,"ui.alreadyHaveAnAccount"),backToSignIn:(0,M.t)(f,"ui.backToSignIn"),orContinueWith:(0,M.t)(f,"ui.orContinueWith"),emailPlaceholder:(0,M.t)(f,"ui.youAtExampleCom"),continueWithGoogle:(0,M.t)(f,"ui.continueWithProvider",{provider:"Google"}),continueWithApple:(0,M.t)(f,"ui.continueWithProvider",{provider:"Apple"})},onEmailChange:x.setEmail,onPasswordChange:x.setPassword,onVerificationCodeChange:x.setVerificationCode,onNewPasswordChange:x.setNewPassword,onCredentialStepChange:x.setCredentialStep,onModeChange:x.transitionTo,onSubmit:z,onSocialLogin:x.socialLogin})]})]})})}var ey=a(47087),eb=a(85282),ev=a(39195);function ew(){return(0,n.jsx)(ev.Y,{children:(0,n.jsx)(eb.k,{})})}var eC=a(93076),ex=a(57956),ej=a(31115),ek=a(55874),eS=a(74087),e_=a(38261);let eA=(0,ej.GG)(ek.Ai);function eP(e){let t=(0,i.usePathname)();return"/pair"===t||"/pair/"===t?(0,n.jsx)(n.Fragment,{children:e.children}):(0,n.jsx)(e_.GX,{children:(0,n.jsx)(eI,{...e})})}function eI({children:e,initialAccountSession:t=null}){let a=(0,eC.ow)(),r=(0,i.usePathname)(),{runtimeConsoleAvailable:o}=(0,e_.KR)(),c="/"===r,m="/canvas"===r||r.startsWith("/canvas/"),p=(0,d.f9)(r),g=m&&"runtime"===p,h="/use-cases"===r||"/solutions"===r||r.startsWith("/solutions/")||"/business"===r||"/company"===r||"/contact"===r||"/privacy"===r||"/terms"===r||"/profile"===r||"/profile/"===r||"/library"===r||"/library/"===r||"/subscription"===r||"/subscription/"===r||"/settings"===r||r.startsWith("/settings/")||"/login"===r||"/login/"===r||"/signup"===r||"/signup/"===r,f=c||m&&!g||h,y="/login"===r||"/login/"===r||r.startsWith("/auth/"),b="/login"===r||"/login/"===r||"/signup"===r||"/signup/"===r,v=f?"none":p,w="runtime"===v,C="workspace"===v,x=!m&&C&&2===r.split("/").filter(Boolean).length,j=(w||x)&&!m&&o,k=(!f||"/settings/companions"===r||r.startsWith("/settings/companions/"))&&(!w||o),S=function(){let[e,t]=(0,s.useState)(!1);return(0,s.useLayoutEffect)(()=>{let e=window.matchMedia("(min-width: 1024px)"),a=()=>t(e.matches);return a(),e.addEventListener("change",a),()=>e.removeEventListener("change",a)},[]),e}(),_=(0,u.CU)(e=>e.isGameConsoleDesktopVisible),A=(0,u.CU)(e=>e.isGameConsoleMobileVisible),P=(0,u.CU)(e=>e.gameConsoleDesktopPosition),I=!!(j&&_),N="";I?N=C?"app-shell-main-project-in-app":"app-shell-main-play-in-app":f?N="app-shell-main-home":"none"!==v?N=C?"app-shell-main-project":"app-shell-main-play":y&&(N="app-shell-main-auth");let U=(0,u.CU)(e=>e.isGameConsoleCollapsed),O=(0,u.CU)(e=>e.hasHydrated),M=(0,R.O)(),E=(0,u.CU)(e=>e.setSession),T=(0,u.CU)(e=>e.markAuthSessionUnavailable),L=(0,u.CU)(e=>e.clearSession),$=(0,ey.Mm)(eA,{enabled:!y||b}),D=y?{status:"guest"}:"loading"===$.status?t??{status:"pending"}:"authenticated"===$.status?{status:"authenticated",displayName:$.displayName?.trim()||(t?.status==="authenticated"?t.displayName:"Account")}:"unavailable"===$.status?t?.status==="authenticated"?t:{status:"unavailable"}:{status:"guest"},W=(0,s.useRef)(r),[H,G]=(0,s.useState)(!1),z=f?"div":"main",B=!w||m;return(0,s.useLayoutEffect)(()=>
1{if(!B||f){W.current=r,G(!1);return}if(W.current===r)return;W.current=r,G(!0);let e=window.requestAnimationFrame(()=>G(!1));return()=>window.cancelAnimationFrame(e)},[f,r,B]),(0,s.useEffect)(()=>{document.documentElement.lang=M,document.documentElement.dataset.consengerLocale=M,document.documentElement.dataset.vifuProduct=a,document.documentElement.dataset.vifuRouteSurface=f?"home":"app"},[M,f,a]),(0,s.useEffect)(()=>{if((!y||b)&&O&&"loading"!==$.status){if("authenticated"===$.status){let e=u.CU.getState(),t="api"===$.provider||"cognito"===$.provider?$.provider:null,a=$.displayName??"";e.isAuthenticated&&a===e.activeUser&&t===e.sessionSource||E({displayName:a,source:t});return}if("guest"===$.status)return void L();T()}},[L,O,$,y,b,T,E]),(0,n.jsx)(eS.D,{value:D,children:(0,n.jsx)(l.fr,{children:(0,n.jsxs)("div",{className:"min-h-screen w-full",children:[(0,n.jsx)(ex.ProductTelemetry,{product:a}),(0,n.jsx)(F.V,{enabled:k}),j?(0,n.jsxs)(n.Fragment,{children:[_&&S?(0,n.jsx)(s.Suspense,{fallback:null,children:(0,n.jsx)(er,{})}):null,A&&!S?(0,n.jsx)(s.Suspense,{fallback:null,children:(0,n.jsx)(eo,{})}):null]}):null,(0,n.jsx)(z,{className:`app-shell-main ${j&&U?"app-shell-collapsed":""} ${N} ${I&&"right"===P?"app-shell-console-right":""} ${j&&A?"app-shell-game-console-mobile":""}`,children:B?(0,n.jsx)("div",{className:`app-shell-route-stage${H&&!f?" app-shell-route-stage-entering":""}`,children:e}):e}),(0,n.jsx)(s.Suspense,{fallback:null,children:(0,n.jsx)(ef,{})}),(0,n.jsx)(ew,{})]})})})}},6518:(e,t,a)=>{"use strict";a.d(t,{d:()=>I});var n=a(95155),s=a(12115),i=a(39210),r=a(72843),o=a(8004),l=a(53944),c=a(15475),d=a(50424);let u=null,m=null;async function p(e,{force:t=!1}={}){return!t&&u?u:!t&&m?m:m=(0,c.sM)((0,d.r)()).then(e=>(u=e,e)).catch(()=>null).finally(()=>{m=null})}var g=a(34543),h=a(6327),f=a(87167),y=a(98500),b=a.n(y),v=a(27499),w=a(95321),C=a(77095),x=a(91762),j=a(87964),k=a(25096);function S({isOpen:e,onClose:t,initialData:a=null,isProviderDataLoading:r=!1,manageHref:o="/settings/companions",surface:l="sheet",anchor:c=null,guestAiOnly:d=!1}){let u=(0,x.O)(),m=(0,h.CU)(e=>e.companionProvider),p=(0,h.CU)(e=>e.isAuthenticated),g=(0,h.CU)(e=>e.normalAiTarget),f=(0,h.CU)(e=>e.selectedCompanionId),y=(0,h.CU)(e=>e.selectedProviderCompanion),_=(0,h.CU)(e=>e.setCompanionProvider),A=(0,h.CU)(e=>e.setNormalAiTarget),P=(0,h.CU)(e=>e.setSelectedCompanionId),I=(0,h.CU)(e=>e.setSelectedProviderCompanion),[N,U]=(0,s.useState)(()=>a?.clawCompanions??[]),O=(0,s.useMemo)(()=>v.Sx.map(e=>({characterId:e.id,displayName:e.name,source:"vifu"})),[]),M=N.length>0?N:O,E=(0,C.u)({enabled:e,authenticated:p||!!a,clawCompanions:M,minds:a?.minds}),T=(0,s.useMemo)(()=>E.cards.map(e=>({id:e.card.id,name:e.card.name,providerName:e.providerName,instanceLabel:e.instanceLabel,modelId:e.card.modelId,revision:e.revision,description:e.card.description,greeting:e.card.greeting,ready:"ready"===e.state,reason:e.reason,target:e.card.target,instanceId:e.card.instanceId})),[E.cards]),L=(0,i.Xw)({provider:m,selectedCompanionId:f,selectedMindId:"",selectedProviderCompanion:y});(0,s.useEffect)(()=>{a&&U(a.clawCompanions)},[a]);let $=(0,w.s)({builtinClaw:O,loadedClaw:N,providerCards:T,selectedProvider:m,selectedCompanionId:f,selectedProviderCompanion:y,normalAiTarget:g,onClose:t,port:{deactivateProviderCard:E.deactivate,selectProviderCard:E.selectCard,setProvider:_,setNormalAiTarget:A,setCompanionId:P,setProviderCompanion:I}}),R=(d?$.options.filter(e=>"normal"===e.provider&&(!e.providerCard||function(e){if(!e||"object"!=typeof e||Array.isArray(e))return!1;let t=e.kind;return"provider-instance"===t||"vifu-ai"===t}(e.providerCard.target))):$.options).map(e=>({id:e.optionId,name:e.name,subtitle:`${e.providerLabel} \xb7 ${e.subtitle}`,imageSrc:e.avatarSrc,active:e.active,disabled:e.disabled}));return(0,n.jsx)(k._,{isOpen:e,onClose:t,title:(0,j.t)(u,"ui.companion"),currentLabel:L.name,options:R,onSelect:e=>void $.select(e.id),loading:r||E.loading?"Loading companions...":null,error:$.error??E.error,manageHref:o,manageLabel:(0,j.t)(u,"ui.settings"),closeLabel:(0,j.t)(u,"ui.close"),surface:l,anchor:c,Link:b()})}let _=(0,l.jS)("");function A(){(0,l.OT)("lobby",_)}async function P(){return u??p(null)}function I({withFeedActionItem:e=!0,primaryAction:t,primaryLabel:a,helperActions:l,manageHref:c="/settings/companions",pickerSurface:d="sheet",onMenuOpenChange:m,buttonTestId:p,tutorialTarget:y,...b}){let v=(0,g.z)(e=>e.setCompanionChatOpen),w=(0,g.z)(e=>e.setCompanionExpanded),C=(0,h.CU)(e=>e.hasHydrated),x=(0,h.CU)(e=>e.isAuthenticated),j=(0,h.CU)(e=>e.companionProvider),k=(0,h.CU)(e=>e.selectedCompanionId),_=(0,h.CU)(e=>e.selectedMindId),N=(0,h.CU)(e=>e.selectedProviderCompanion),U=(0,i.Xw)({provider:j,selectedCompanionId:k,selectedMindId:_,selectedProviderCompanion:N}),O=(0,s.useCallback)(()=>v(!0),[v]),M=(0,s.useCallback)(()=>{v(!1),w(!0)},[v,w]),E=(0,r.A)({avatarName:U.name,buttonTestId:p,enabled:C&&x,initialProviderData:u,primaryAction:t,primaryLabel:a,helperActions:l,loadProviderData:P,onOpenChat:O,onOpenRoom:M,onWarmup:A}),T=(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o.d,{...b,buttonTestId:E.resolvedButtonTestId,primaryLabel:`Open ${U.name}`,primaryAction:E.openPicker,helperActions:E.actions,frameSources:b.frameSources??U.frameSources,onWarmup:E.onWarmup,onMenuOpenChange:m}),(0,n.jsx)(S,{isOpen:E.pickerOpen,onClose:E.closePicker,initialData:E.providerData,isProviderDataLoading:E.providerDataLoading,manageHref:c,surface:d,anchor:E.pickerAnchor})]});return e?(0,n.jsx)(f.I,{"data-feed-tutorial-target":y,children:T}):T}},11756:e=>{e.exports={overlay:"login-modal_overlay__1ulMu",content:"login-modal_
1content__GyrFc",close:"login-modal_close__an9l4",brand:"login-modal_brand__MVSLu",brandLockup:"login-modal_brandLockup__Rbdd2",title:"login-modal_title__tMpgO",description:"login-modal_description__KGUL1"}},23422:(e,t,a)=>{"use strict";a.d(t,{CompanionOverlayLoader:()=>l});var n=a(95155),s=a(37206),i=a(73321),r=a(34543);let o=(0,s.default)(()=>Promise.all([a.e(4812),a.e(8892)]).then(a.bind(a,8892)).then(e=>e.CompanionOverlay),{loadableGenerated:{webpack:()=>[8892]},ssr:!1,loading:()=>null});function l(){let e=(0,i.usePathname)(),t=(0,r.z)(e=>e.companionChatOpen),a=(0,r.z)(e=>e.companionExpanded);return"/pair"!==e&&"/pair/"!==e&&(t||a)?(0,n.jsx)(o,{}):null}},27473:(e,t,a)=>{Promise.resolve().then(a.bind(a,5813)),Promise.resolve().then(a.bind(a,37270)),Promise.resolve().then(a.bind(a,23422)),Promise.resolve().then(a.t.bind(a,32406,23)),Promise.resolve().then(a.t.bind(a,19579,23)),Promise.resolve().then(a.t.bind(a,17276,23)),Promise.resolve().then(a.t.bind(a,58032,23)),Promise.resolve().then(a.t.bind(a,58095,23)),Promise.resolve().then(a.t.bind(a,74877,23)),Promise.resolve().then(a.t.bind(a,93628,23)),Promise.resolve().then(a.t.bind(a,3684,23)),Promise.resolve().then(a.t.bind(a,31341,23)),Promise.resolve().then(a.t.bind(a,53413,23)),Promise.resolve().then(a.t.bind(a,41919,23)),Promise.resolve().then(a.t.bind(a,19291,23)),Promise.resolve().then(a.t.bind(a,66872,23)),Promise.resolve().then(a.t.bind(a,50445,23))},27499:(e,t,a)=>{"use strict";a.d(t,{R7:()=>i,Sx:()=>s,_O:()=>n}),a(87964);let n=[{id:"lobby",title:"Midnight Train to Shibuya",summary:"Read social cues, answer naturally, and stay in step with your companion through a late-night station route.",language:"Japanese",format:"Story",category:"Featured Journey",genre:"Urban Adventure",tags:["Conversation","Vocabulary","Story","Travel"],learningGoals:["Speaking","Listening","Everyday Phrases"],difficulty:"Beginner",playMinutes:18,runtimeUrl:"",gameFilePath:"",gameType:"lobby",hero:"from-sky-500 via-cyan-500 to-indigo-700",publisher:"Vifu",companionId:"wolfchan",updatedAt:"2026-03-07",likes:248,shares:79,bookmarks:132,comments:[{id:"c1",author:"Aki",message:"Fast launch and smooth companion prompts. Great first chapter.",createdAt:"2026-03-05"},{id:"c2",author:"Riku",message:"Would love more mini-boss vocabulary rounds.",createdAt:"2026-03-06"}],previewBlurb:"A guided first session that feels like a playable Japanese night out.",statusTag:"Featured"},{id:"swiper",title:"Word Swiper",summary:"Swipe left or right to make choices and practice Japanese vocabulary in a story-driven card game.",language:"Japanese",format:"Cards",category:"Quick Practice",genre:"Card Story",tags:["Vocabulary","Story","Cards","Choices"],learningGoals:["Vocabulary","Reading","Decision Making"],difficulty:"Beginner",playMinutes:10,runtimeUrl:"",gameFilePath:"",gameType:"swiper",hero:"from-emerald-500 via-teal-500 to-cyan-700",publisher:"Vifu",companionId:"wolfchan",updatedAt:"2026-03-13",likes:0,shares:0,bookmarks:0,comments:[],previewBlurb:"A Reigns-style Japanese vocabulary card game.",statusTag:"New",swiperGameData:{schema_version:"3.0",game_id:"demo_swiper_001",story_template_id:"consenger/swiper",display_name:"Word Swiper Demo",stats:{hp:{label:"Health",initial:50,max:100},gold:{label:"Gold",initial:50,max:100},faith:{label:"Faith",initial:50,max:100},army:{label:"Army",initial:50,max:100}},agent:{persona:"wolfchan",interventions_remaining:3},cards:[{card_id:"c1",speaker:"Wolfchan",text_primary:"森の中で不思議な光が見えた。調べる?",text_reading:"もりのなかでふしぎなひかりがみえた。しらべる?",text_translation:"I saw a mysterious light in the forest. Investigate?",card_image:"res://assets/cards/forest.png",mood:"exploration",choices:{left:{label:"逃げる",stats_change:{hp:-5,gold:10}},right:{label:"近づく",stats_change:{hp:5,gold:-10}}}},{card_id:"c2",speaker:"Guard",text_primary:"門番が立ちはだかった。通行料を払うか?",text_reading:"もんばんがたちはだかった。つうこうりょうをはらうか?",text_translation:"A guard blocks the way. Pay the toll?",card_image:"res://assets/cards/combat.png",mood:"combat",choices:{left:{label:"戦う",stats_change:{hp:-15,army:10}},right:{label:"払う",stats_change:{gold:-20,faith:5}}}},{card_id:"c3",speaker:"Merchant",text_primary:"旅の商人が珍しい薬を売っている。",text_reading:"たびのしょうにんがめずらしいくすりをうっている。",text_translation:"A traveling merchant is selling a rare potion.",card_image:"res://assets/cards/market.png",mood:"social",choices:{left:{label:"無視する",stats_change:{faith:-5}},right:{label:"買う",stats_change:{hp:15,gold:-25}}}},{card_id:"c4",speaker:"Wolfchan",text_primary:"村人たちが助けを求めている。手伝う?",text_reading:"むらびとたちがたすけをもとめている。てつだう?",text_translation:"The villagers are asking for help. Will you assist them?",card_image:"res://assets/cards/town.png",mood:"calm",choices:{left:{label:"断る",stats_change:{gold:15,faith:-10}},right:{label:"手伝う",stats_change:{faith:20,army:5}}}},{card_id:"c5",speaker:"Priest",text_primary:"神殿で祈りを捧げますか?",text_reading:"しんでんでいのりをささげますか?",text_translation:"Will you offer a prayer at the temple?",card_image:"res://assets/cards/shrine.png",mood:"mystery",choices:{left:{label:"素通りする",stats_change:{army:5,faith:-10}},right:{label:"祈る",stats_change:{faith:15,gold:-10}}}},{card_id:"c6",speaker:"Bandit",text_primary:"山賊に囲まれた!どうする?",text_reading:"さんぞくにかこまれた!どうする?",text_translation:"Surrounded by bandits! What do you do?",card_image:"res://assets/cards/danger.png",mood:"danger",choices:{left:{label:"降伏する",stats_change:{gold:-30,hp:5}},right:{label:"戦う",stats_change:{hp:-20,army:15}}}},{card_id:"c7",speaker:"Wolfchan",text_primary:"宝の地図を見つけた。探しに行く?",text_reading:"たからのちずをみつけた。さがしにいく?",text_translation:"Found a treasure map. Go searching?",card_image:"res://assets/cards/treasure.png",mood:"exploration",choices:{left:{label:"捨てる",stats_change:{faith:5}},right:{label:"探す",stats_change:{gold:30,hp:-10,army:-5}}}},{card_id:"c8",speaker:"King",text_primary:"王様が軍隊の指揮を任せたいと言っている。",text_reading:"おうさまがぐんたいのしきをまかせたいといっている。",text_translation:"The king wants you to command the army.",card_image:"res://assets/cards/persuade.png",mood:"social",choices:{left:{label:"辞退する",stats_change:{faith:10,army:-10}},right:{label:"引き受ける",stats_change:{army:25,gold:10,faith:-15}}}}]}},{id:"flashcard",title:"Flashcard Drills",summary:"Review Japanese vocabulary with swipeable flashcards. Swipe right if you know it, left if you're still learning.",language:"Japanese",format:"Cards",category:"Qu
1ick Practice",genre:"Study",tags:["Vocabulary","Flashcards","Review","Verbs"],learningGoals:["Vocabulary Recall","Reading","Hiragana"],difficulty:"Beginner",playMinutes:5,runtimeUrl:"",gameFilePath:"",gameType:"flashcard",hero:"from-violet-500 via-purple-500 to-indigo-700",publisher:"Vifu",companionId:"wolfchan",updatedAt:"2026-03-13",likes:0,shares:0,bookmarks:0,comments:[],previewBlurb:"Swipeable vocabulary flashcards with readings and meanings.",statusTag:"New",flashcardDeckData:{deckId:"demo_deck_001",totalCount:10,cards:[{id:"fc1",displayForm:"食べる",reading:"たべる",meaning:"to eat"},{id:"fc2",displayForm:"飲む",reading:"のむ",meaning:"to drink"},{id:"fc3",displayForm:"見る",reading:"みる",meaning:"to see / to look"},{id:"fc4",displayForm:"聞く",reading:"きく",meaning:"to listen / to ask"},{id:"fc5",displayForm:"書く",reading:"かく",meaning:"to write"},{id:"fc6",displayForm:"読む",reading:"よむ",meaning:"to read"},{id:"fc7",displayForm:"話す",reading:"はなす",meaning:"to speak / to talk"},{id:"fc8",displayForm:"走る",reading:"はしる",meaning:"to run"},{id:"fc9",displayForm:"泳ぐ",reading:"およぐ",meaning:"to swim"},{id:"fc10",displayForm:"遊ぶ",reading:"あそぶ",meaning:"to play"}]}}],s=[{id:"wolfchan",name:"Wolfchan",role:"AI Companion",mood:"Playful",status:"Online",tagline:"Your everyday Japanese companion. Always ready for the next session.",specialty:"Conversation & storytelling"}];function i(e){return s.find(t=>t.id===e)??s[0]}},34631:(e,t,a)=>{"use strict";a.d(t,{k5:()=>s.k5,c:()=>l,Wp:()=>o});var n=a(55874),s=a(31615),i=a(31115);function r(e){return Array.isArray(e)?e[0]??null:e??null}function o(e,t=n.Ai){let a={...n.Ai,...t};return function(e,t={}){let{defaultReturnTo:a,...n}=t,s=r(e.returnApp),o=r(e.returnPath),l=r(e.returnTo);return s||o||l||!a?(0,i.Zb)({returnApp:s,returnPath:o,returnTo:l},n):a}({returnApp:e.get("returnApp")??void 0,returnPath:e.get("returnPath")??void 0,returnTo:e.get("returnTo")??void 0},a)}function l(e){window.location.assign(e)}},38261:(e,t,a)=>{"use strict";a.d(t,{GR:()=>l,GX:()=>r,KR:()=>o});var n=a(95155),s=a(12115);let i=(0,s.createContext)(null);function r({children:e}){let t=(0,s.useRef)(null),[a,o]=(0,s.useState)(!1),l=(0,s.useCallback)(e=>{let a={available:e,id:Symbol("runtime-console-availability")};return t.current=a,o(e),()=>{t.current?.id===a.id&&(t.current=null,o(!1))}},[]),c=(0,s.useMemo)(()=>({registerRuntimeConsoleAvailability:l,runtimeConsoleAvailable:a}),[l,a]);return(0,n.jsx)(i.Provider,{value:c,children:e})}function o(){let e=(0,s.useContext)(i);if(!e)throw Error("useRuntimeConsoleAvailability must be used inside RuntimeConsoleAvailabilityProvider");return e}function l(){return(0,s.useContext)(i)}},38290:(e,t,a)=>{"use strict";a.d(t,{FF:()=>i,yO:()=>r});var n=a(58815),s=a(50424);async function i(e){let{message:t,characterId:a="wolfchan",context:i="web-chat",gameId:r,playSessionId:o,sessionId:l,newSession:c,gameCompanion:d,companionProvider:u,companionId:m,companionName:p,authToken:g}=e;try{return await (0,s.r)(g).claw.chat({message:t,character_id:a,context:i,game_id:r??void 0,play_session_id:o??void 0,session_id:l??null,new_session:c??!1,companion_provider:u,companion_id:m,companion_name:p,game_companion:d})}catch(e){throw Error(`Claw chat failed: ${(e instanceof n.O?e.status:null)??"unknown"}`)}}async function r(e){try{return await (0,s.r)(e.authToken).claw.gameObservationJournal({game_id:e.gameId,character_id:e.characterId,limit:e.limit})}catch{return null}}},39195:(e,t,a)=>{"use strict";a.d(t,{E:()=>h,Y:()=>g});var n=a(95155),s=a(98500),i=a.n(s),r=a(12115),o=a(73321),l=a(99806),c=a(4098),d=a(6327),u=a(15475),m=a(50424),p=a(22385);function g({children:e}){let t=(0,o.useRouter)(),a=(0,r.useMemo)(()=>({Link:i(),navigate:(e,a)=>{(a?.replace?t.replace:t.push)(e,{scroll:a?.scroll})}}),[t]);return(0,n.jsx)(c.$c,{host:a,children:e})}function h(){let e=(0,o.usePathname)(),t=(0,d.CU)(e=>e.hasHydrated),a=(0,d.CU)(e=>e.isAuthenticated),n=(0,d.CU)(e=>e.openLoginModal),s=(0,d.CU)(e=>e.beginProviderCompanionSelection),i=(0,d.CU)(e=>e.failProviderCompanionHydration);return(0,r.useMemo)(()=>({settings:l.GI,auth:{hydrated:t,authenticated:a,currentPath:e||"/settings/providers",openLogin:n},listModels:p.OM,minds:{getStatus:()=>(0,m.r)().secrets.provider(u.Gz),list:async()=>(0,u.Rk)(await (0,m.r)().minds.list()),save:(e,t)=>
1(0,m.r)().secrets.saveProvider(u.Gz,{secret:e,metadata:t}),remove:()=>(0,m.r)().secrets.deleteProvider(u.Gz)},confirm:e=>window.confirm(e),errorMessage:u.T4,beginProviderCompanionSelection:s,failProviderCompanionHydration:i}),[s,i,t,a,n,e])}},53944:(e,t,a)=>{"use strict";a.d(t,{OT:()=>l,fQ:()=>c,jS:()=>r,ue:()=>o});var n=a(50424);let s=new Map,i=new Map;function r(e){let t=e.replace(/\/$/,"");if(!t||/\/runtime\/companion$/.test(t))return"";let a=t.replace(/\/runtime\/public\/companion\/latest$/,"/runtime/public/lobby/latest");return a.endsWith("/Project.html")?a:`${a}/Project.html`}function o(e){return s.get(e)??""}function l(e,t){return c(e,t)}async function c(e,t,a){let r=s.get(e);if(r)return r;let o=t||"",l=i.get(e);if(l)return l;let c=(async()=>{try{let t=await (0,n.r)().request("/v1/assets/manifest",{method:"GET",query:{channel:"public"}});t.content_base_url&&t.content_base_url;let a=t.games?.find(t=>t.game_id===e),i=a?.runtime?.entry_html??a?.runtime?.project_html??o;return i&&s.set(e,i),i}catch{return o&&s.set(e,o),o}finally{i.delete(e)}})();return i.set(e,c),c}},57956:(e,t,a)=>{"use strict";a.d(t,{ProductTelemetry:()=>r});var n=a(12115),s=a(31115),i=a(60040);function r({product:e,projectId:t,readmeOpened:a=!1,sourceOpened:o=!1}){let l=(0,n.useMemo)(()=>(0,s.s8)(),[]);return(0,n.useEffect)(()=>(0,i.zj)(l,{product:e,projectId:t,readmeOpened:a,sourceOpened:o}),[l,e,t,a,o]),null}},66872:()=>{},74087:(e,t,a)=>{"use strict";a.d(t,{D:()=>r,Z:()=>o});var n=a(95155),s=a(12115);let i=(0,s.createContext)({status:"pending"});function r({children:e,value:t}){return(0,n.jsx)(i.Provider,{value:t,children:e})}function o(){return(0,s.useContext)(i)}},74856:(e,t,a)=>{"use strict";a.d(t,{u:()=>y});var n=a(12115),s=a(6327),i=a(34543),r=a(17321),o=a(38290),l=a(95357),c=a(50424),d=a(22385),u=a(94702);function m(e){return`provider:${JSON.stringify([e.id,e.target,e.revision??""])}`}function p(e,t,a){if(!e||"object"!=typeof e||Array.isArray(e))return;let n=e.blocks;if(Array.isArray(n))for(let e of n)!(!e||"object"!=typeof e||Array.isArray(e))&&("emotion"===e.type&&"string"==typeof e.emotion?a?.sendAnimationState(e.emotion,"number"==typeof e.intensity?e.intensity:void 0):"tts"===e.type&&"speak"===e.action&&"string"==typeof e.text&&e.text.trim()&&f(e.text,"string"==typeof e.voice_id?e.voice_id:void 0,t,a).catch(()=>{}))}async function g(e){if(!e.ok||!e.body)throw Error(`HelloMinds turn events failed: ${e.status}`);let t=e.body.getReader(),a=new TextDecoder,n="";try{for(;;){let{done:e,value:s}=await t.read();if(e)break;let i=(n+=a.decode(s,{stream:!0})).indexOf("\n\n");for(;i>=0;){let e=n.slice(0,i);n=n.slice(i+2);let t=e.split("\n").find(e=>e.startsWith("data: "));if(t){let e=JSON.parse(t.slice(6));if("turn.completed"===e.type||"completed"===e.status)return e;if("turn.failed"===e.type||"failed"===e.status)throw Error(e.error||"HelloMinds turn failed")}i=n.indexOf("\n\n")}}}finally{t.releaseLock()}throw Error("HelloMinds turn stream ended before completion")}async function h(e,t){let a,n=Date.now()+72e4;for(;Date.now()<n;)try{return await g(await e.minds.turnEvents(t))}catch(t){a=t;let e=t instanceof Error?t.message:String(t);if(/HelloMinds turn failed/i.test(e)||/HelloMinds reply timed out/i.test(e))throw t;await new Promise(e=>setTimeout(e,2e3))}throw Error(a instanceof Error?a.message:"HelloMinds turn did not complete before the wait window ended")}async function f(e,t,a,n){let s=await (0,c.r)().ai.synthesizeTts({text:e,language:"auto",...t?{voice_id:t}:{character_id:a}}),i=await (0,r.k6)((0,u.LX)(s.audioUrl),{credentials:"include"});if(!i.ok)throw Error(`Failed to fetch TTS audio: ${i.status}`);let o=await i.arrayBuffer(),l=window.AudioContext??window.webkitAudioContext;if(!l)return;let d=new l;try{let e=await d.decodeAudioData(o),t=d.createBufferSource();t.buffer=e,t.connect(d.destination),n?.sendSpeakingState(!0),await new Promise(e=>{t.onended=()=>e(),t.start()})}finally{n?.sendSpeakingState(!1),d.close()}}function y(){let e=(0,s.CU)(e=>e.isAuthenticated),t=(0,s.CU)(e=>e.companionProvider),a=(0,s.CU)(e=>e.selectedCompanionId),r=(0,s.CU)(e=>e.selectedMindId),u=(0,s.CU)(e=>e.selectedProviderCompanion),g=(0,s.CU)(e=>e.normalAiTarget),f=(0,s.CU)(e=>e.providerCompanionHydrationStatus),y=(0,i.z)(e=>e.companionSessionId),b=(0,i.z)(e=>e.setCompanionSessionId),v=(0,i.z)(e=>
1e.godotBridgeRef),[w,C]=(0,n.useState)([]),x=(0,n.useRef)([]),[j,k]=(0,n.useState)(!1),S=(0,n.useRef)(!1),_=(0,n.useRef)(!1),A=(0,n.useRef)(null),P=(0,n.useRef)(0),I=(0,n.useRef)(0),N=(0,n.useRef)(null),U=u&&"normal"===t&&"provider-companion"===g?m(u):"minds"===t?`minds:${r||"default"}`:"vifu"===t?`vifu:${a||"wolfchan"}`:"vifu-ai"===g?"normal:vifu-ai":`normal:${f}`,O=(0,n.useCallback)((e,t=!0,a="")=>{if(A.current===e)return;let n=null!==A.current;A.current=e;let s=a.trim()?[{id:`greeting-${e}`,role:"assistant",text:a.trim()}]:[];if(!n){x.current=s,C(s);return}P.current+=1,t&&(I.current+=1,N.current?.controller.abort(),N.current=null,S.current=!1,k(!1)),x.current=s,C(s),_.current=!0,b(null)},[b]);(0,n.useEffect)(()=>{O(U,!0,"normal"===t?u?.greeting??"":"")},[t,U,u?.greeting,O]);let M=(0,n.useCallback)(async n=>{if(!n.trim()||S.current)return;let s=++I.current,i=P.current;S.current=!0,k(!0);let w={id:`u-${Date.now()}`,role:"user",text:n},j=!1,A=i,U=null,M=()=>s===I.current&&A===P.current&&!U?.signal.aborted;try{if("normal"===t&&"ready"!==f)throw Error("Companion provider settings are not ready.");if("normal"===t&&"unset"===g)throw Error("Choose Vifu AI or a Provider Companion before sending a message.");if("normal"===t&&"provider-companion"===g&&!u)throw Error("The selected Provider Companion is unavailable.");let k="normal"===t?await (0,l.Wm)():null;if(s!==I.current||i!==P.current)return;if("normal"===t&&"provider-companion"===g&&((k?.id??null)!==(u?.id??null)||!k||!u||!(0,d.fR)(k.target,u.target)||k?.updatedAt!==u?.revision)||"normal"===t&&"vifu-ai"===g&&k)throw Error("The selected companion changed. Send the message again.");let S=k?m({id:k.id,target:k.target,revision:k.updatedAt}):"minds"===t?`minds:${r||"default"}`:"vifu"===t?`vifu:${a||"wolfchan"}`:"normal:vifu-ai";O(S,!1,k?.greeting??""),A=P.current,U=new AbortController,N.current={attempt:s,controller:U};let E=[...x.current,w];if(x.current=E,C(E),j=!0,!k&&!e)throw Error("Sign in required");let T=a&&"yuna"!==a?a:"wolfchan",L="";if(k){let e=await (0,d.A6)(k,{task:"chat",input:{operation:"generateText",messages:E.slice(-24).map(e=>({role:e.role,content:e.text})),..."vifu-claw"===k.target.kind?{sessionId:_.current?null:y,newSession:_.current||void 0}:{}},modelId:k.modelId,signal:U.signal});if(!M())return;if(e&&"object"==typeof e&&!Array.isArray(e)){let t=e.session_id;"string"==typeof t&&t.trim()&&(_.current=!1,b(t))}"vifu-claw"===k.target.kind&&p(e,k.target.companionId,v),L=function(e){if("string"==typeof e)return e.trim();if(!e||"object"!=typeof e||Array.isArray(e))return"";if("string"==typeof e.text&&e.text.trim())return e.text.trim();if("string"==typeof e.content&&e.content.trim())return e.content.trim();if(Array.isArray(e.choices))for(let t of e.choices){if(!t||"object"!=typeof t||Array.isArray(t))continue;let e=t.message;if(!e||"object"!=typeof e||Array.isArray(e))continue;let a=e.content;if("string"==typeof a&&a.trim())return a.trim()}return Array.isArray(e.content)?e.content.flatMap(e=>{if("string"==typeof e)return e.trim()?[e.trim()]:[];if(!e||"object"!=typeof e||Array.isArray(e))return[];let t=e.text;return"string"==typeof t&&t.trim()?[t.trim()]:[]}).join("\n"):""}(e)}else if("minds"===t){let e=(0,c.r)(),t=await e.minds.createTurn({message:n,character_id:r||T,mind_id:r||void 0,context:"web-chat",session_id:_.current?null:y,new_session:_.current||void 0});if(!M())return;_.current=!1,t.session_id&&b(t.session_id);let a=t.turn_id??t.turnId;if(!a)throw Error("HelloMinds turn id missing");let s=await h(e,a);if(!M())return;L=s.text??s.blocks?.find(e=>"text"===e.type&&e.text)?.text??""}else{if("normal"===t&&"vifu-ai"!==g)throw Error("Choose Vifu AI or a Provider Companion before sending a message.");let e=await (0,o.FF)({message:n,characterId:T,companionProvider:"normal"===t?"normal":"vifu",companionId:"normal"===t?"normal-ai":T,companionName:"normal"===t?"Vifu AI":void 0,context:"web-chat",sessionId:_.current?null:y,newSession:_.current||void 0});if(!M())return;_.current=!1,b(e.session_id),p(e,T,v),L=e.text}if(!M())return;let $={id:`a-${Date.now()}`,role:"assistant",text:L||"No reply was returned."};x.current=[...x.current,$],C(x.current)}catch{if(!M())return;j||(x.current=[...x.current,w]),x.current=[...x.current,{id:`err-${Date.now()}`,role:"assistant",text:"Something went wrong. Please try again."}],C(x.current)}finally{N.current?.attempt===s&&(N.current=null),s===I.current&&(S.current=!1,k(!1))}},[t,v,e,g,f,a,U,r,u,y,b,O]);return{messages:w,sessionId:y,isThinking:j,sendMessage:M,clearHistory:(0,n.useCallback)(()=>{P.current+=1,I.current+=1,N.current?.controller.abort(),N.current=null,S.current=!1,k(!1);let e="normal"===t?u?.greeting?.trim()??"":"",a=e?[{id:`greeting-${U}`,role:"assistant",text:e}]:[];x.current=a,C(a),_.current=!0},[t,U,u?.greeting])}}},93076:(e,t,a)=>{"use strict";a.d(t,{ow:()=>s});var n=a(60040);function s(){return"vifu"}var i="vifu";let r=(0,n.cw)(i);if(!r.canonicalOrigin)throw Error(`Web product ${i} requires a canonical origin`);({...r,canonicalOrigin:r.canonicalOrigin})}},e=>{e.O(0,[2939,1420,5190,8655,9152,7513,4716,2749,8500,1056,5979,7549,2224,2346,6552,8023,2993,7308,4707,8441,3794,7358],()=>e(e.s=27473)),_N_E=e.O()}]);

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.