@runeya/runeya 2.0.145 → 2.0.146
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent/index.js +26 -21
- package/agent/index.js.map +1 -1
- package/agent-manager-R7BPQO6D.js +11 -0
- package/{chat-XYCHMTFE.js → chat-LPML22J5.js} +8 -7
- package/{chunk-NCO4OOYT.js → chunk-4LJQIQMN.js} +2 -2
- package/chunk-6IBPK6UE.js +1063 -0
- package/chunk-6IBPK6UE.js.map +1 -0
- package/{chunk-QF56Z6LI.js → chunk-KV4GJKXU.js} +3 -3
- package/{chunk-FE53XX4M.js → chunk-NPMSBYXC.js} +3 -3
- package/{chunk-ONVAH65J.js → chunk-SEPAURTQ.js} +283 -1266
- package/chunk-SEPAURTQ.js.map +1 -0
- package/{chunk-Q4RPY3VW.js → chunk-UD42LACH.js} +25 -11
- package/{chunk-Q4RPY3VW.js.map → chunk-UD42LACH.js.map} +1 -1
- package/{chunk-KS7A5CTW.js → chunk-VPSQJOSN.js} +12 -2
- package/{chunk-KS7A5CTW.js.map → chunk-VPSQJOSN.js.map} +1 -1
- package/{companion-HBYSY2D5.js → companion-W3UMZWGH.js} +5 -5
- package/external-NMKQPROK.js +387 -0
- package/external-NMKQPROK.js.map +1 -0
- package/index.js +15 -6
- package/index.js.map +1 -1
- package/{install-gate-JAEK4BDZ.js → install-gate-PVMGJDWE.js} +2 -2
- package/mcp-server/external.d.ts +44 -0
- package/mcp-server/external.js +2679 -0
- package/mcp-server/external.js.map +1 -0
- package/mcp-server/index.js +135 -39
- package/mcp-server/index.js.map +1 -1
- package/mcp-server/launch.d.ts +19 -1
- package/mcp-server/launch.js +20 -0
- package/mcp-server/launch.js.map +1 -1
- package/package.json +1 -1
- package/settings-manager-XPLBO35P.js +10 -0
- package/{src-IODFUZ7A.js → src-LEDGW5KP.js} +951 -499
- package/src-LEDGW5KP.js.map +1 -0
- package/{vault-resolver-PN3TYCLJ.js → vault-resolver-E7KPKA5C.js} +2 -2
- package/web/assets/{AgentScalarChatInterface.vue-npQgDxeP.js → AgentScalarChatInterface.vue-BYszptaB.js} +1 -1
- package/web/assets/{AgentTerminalPage-BTH3yCS2.js → AgentTerminalPage-C3TJ1NL9.js} +1 -1
- package/web/assets/{AiChatModals-It9jnB26.js → AiChatModals-D3scRE3S.js} +1 -1
- package/web/assets/{AppLayout-BTg2CADo.js → AppLayout-BMQUjPKe.js} +1 -1
- package/web/assets/{AuditPage-2PKKGLZs.js → AuditPage-CKcExBws.js} +1 -1
- package/web/assets/{CloudAccountPage-CHL61gLe.js → CloudAccountPage-B6oPg0BZ.js} +1 -1
- package/web/assets/{CloudMessagingPage-cgKnABPH.js → CloudMessagingPage-C5fwVe-F.js} +1 -1
- package/web/assets/{DashboardPage-CRntTMKY.js → DashboardPage-9RV7sx3e.js} +1 -1
- package/web/assets/{DirectoryPickerDialog-DCyhT3-W.js → DirectoryPickerDialog-C06BXyfJ.js} +1 -1
- package/web/assets/{EnvironmentForm-C96PFWRE.js → EnvironmentForm-CAvDoira.js} +1 -1
- package/web/assets/{EnvironmentFormPage-ChorAd63.js → EnvironmentFormPage-BmAxhN-m.js} +1 -1
- package/web/assets/{EnvironmentListPage-Dw9ziaI8.js → EnvironmentListPage-B8uATPBI.js} +1 -1
- package/web/assets/{KanbanBoardPage-BZHbEj-q.js → KanbanBoardPage-CQsOkRUf.js} +3 -3
- package/web/assets/{KanbanListPage-B0jlfKqs.js → KanbanListPage-CWZqkjD6.js} +1 -1
- package/web/assets/{LaunchProjectPage-BVs1JwbV.js → LaunchProjectPage-saSmC7Pr.js} +1 -1
- package/web/assets/{LaunchServicesPage-PBYJly9N.js → LaunchServicesPage-BkKyLMEz.js} +1 -1
- package/web/assets/{LaunchShell-CGNYr-do.js → LaunchShell-DUrSunB4.js} +1 -1
- package/web/assets/{LogViewer-BDObx29F.js → LogViewer-CZBYkH9J.js} +1 -1
- package/web/assets/{OrgKeyPrompt-BbcwiwGw.js → OrgKeyPrompt-DzQ7pwbs.js} +1 -1
- package/web/assets/{ProcessControls-DY0HTKde.js → ProcessControls-BEeoNlNV.js} +1 -1
- package/web/assets/{ProcessDetailPage-BZ9kIQqn.js → ProcessDetailPage-CQgu5uKm.js} +1 -1
- package/web/assets/{ProjectCreateDialog-C1wVDPcK.js → ProjectCreateDialog-BolrhRD-.js} +1 -1
- package/web/assets/{ProjectLocationGate-bUd_tFpI.js → ProjectLocationGate-DhMVdIjN.js} +1 -1
- package/web/assets/{ProjectPublishDialog-APUS1WEN.js → ProjectPublishDialog-DsZNWrfz.js} +1 -1
- package/web/assets/{RandomJobTestPage-BFNC827R.js → RandomJobTestPage-BUS2Ty6-.js} +1 -1
- package/web/assets/{ScenarioEditorPage-DFVsMVu5.js → ScenarioEditorPage-MIAGh2us.js} +1 -1
- package/web/assets/{SendToChatDialog-QHIkxNio.js → SendToChatDialog-BxWsyv29.js} +1 -1
- package/web/assets/{ServiceControlsBar-_UQXb6g0.js → ServiceControlsBar-DqDPAZt7.js} +1 -1
- package/web/assets/{ServiceDetailPage-DGIXgHwR.js → ServiceDetailPage-hkSAzZ-l.js} +1 -1
- package/web/assets/{ServiceFormPage-RliAfS3_.js → ServiceFormPage-DXqhqXg8.js} +1 -1
- package/web/assets/SettingsPage-4pKUgKPm.css +1 -0
- package/web/assets/SettingsPage-DS2YhMIM.js +2086 -0
- package/web/assets/{UnlockPage-17EgfpJs.js → UnlockPage-s8SgVcKk.js} +1 -1
- package/web/assets/{VaultMigrationPage-DeMxpXXJ.js → VaultMigrationPage-s0b44MDM.js} +1 -1
- package/web/assets/{VersionBadge-DBquJl76.js → VersionBadge-BmArk24p.js} +1 -1
- package/web/assets/{WikiPage-GtwpJPqf.js → WikiPage-DADu8WUA.js} +1 -1
- package/web/assets/{WikiView-BqaqxMxW.js → WikiView-DtGwIt_Q.js} +1 -1
- package/web/assets/{add-scalar-classes-DhSSqZ5l.js → add-scalar-classes-dWEWPlFD.js} +1 -1
- package/web/assets/{agent.store-Co44dMZf.js → agent.store-CKLAkF9a.js} +1 -1
- package/web/assets/{auth-Bk1GP5sB.js → auth-Cg9BWTfK.js} +2 -2
- package/web/assets/{cloud-chat.store-CadB14dZ.js → cloud-chat.store-b-BHGz7I.js} +1 -1
- package/web/assets/{cloud-client-0zD_NI6q.js → cloud-client-D_zCiW0s.js} +2 -2
- package/web/assets/{cloud-session-Cjw54Y--.js → cloud-session-DOaDpZTy.js} +2 -2
- package/web/assets/{editor.store-DmM6ZlTm.js → editor.store-DCAZSeVG.js} +1 -1
- package/web/assets/i18n-D0afQEGs.js +1 -0
- package/web/assets/{index-B9DJf2V0.js → index-D8VRbyoP.js} +36 -36
- package/web/assets/index-DsezNbSM.css +1 -0
- package/web/assets/{modal-UK8xRSnh.js → modal-qYgTMkYb.js} +1 -1
- package/web/assets/{project-launch.store-B5nhdGdh.js → project-launch.store-y7JBMNiE.js} +1 -1
- package/web/assets/{project.store-Bm2JWNbd.js → project.store-DGJr0Qr9.js} +1 -1
- package/web/assets/{scenario.store-88w6P6s2.js → scenario.store-YWHL2_wu.js} +3 -3
- package/web/assets/{service.store-XS50iGKo.js → service.store-5jWsJxPx.js} +1 -1
- package/web/assets/{settings-scope-CKPq86HZ.js → settings-scope-Bv7QGPrt.js} +1 -1
- package/web/assets/{settings.store-BCJ0LJQA.js → settings.store-bEsB7oKb.js} +1 -1
- package/web/assets/{src-DBipSD56.js → src-C-D_y7ou.js} +1 -1
- package/web/assets/{src-Cgix2VOi.js → src-Dnwk6NpV.js} +2 -2
- package/web/assets/{src-BDZKZr9n.css → src-g1DRo8xZ.css} +1 -1
- package/web/assets/{trpc-CfuFkKgp.js → trpc-Drabzwpd.js} +3 -3
- package/web/assets/{useCloudOrg-J8DAnocE.js → useCloudOrg-BAQEtFPl.js} +1 -1
- package/web/assets/{useEnvVarAutocomplete-C6zOXYqi.js → useEnvVarAutocomplete-BqGTODUv.js} +1 -1
- package/web/assets/{useProjectCatalog-BB5IR6o8.js → useProjectCatalog-yocjIKt6.js} +1 -1
- package/web/assets/{useProjectCloudOrg-BnlKts7x.js → useProjectCloudOrg-CEN9-_OA.js} +1 -1
- package/web/assets/{useServiceUrlHost-hKbKtPMu.js → useServiceUrlHost-BuoPEXZX.js} +1 -1
- package/web/assets/{vue-draggable-plus-D5ni4jMk.js → vue-draggable-plus-DX4rTBiu.js} +1 -1
- package/web/index.html +17 -17
- package/agent-manager-THV3LJOF.js +0 -11
- package/chunk-ONVAH65J.js.map +0 -1
- package/settings-manager-QVQRJO6V.js +0 -10
- package/src-IODFUZ7A.js.map +0 -1
- package/web/assets/SettingsPage-BSSHxxjM.js +0 -2086
- package/web/assets/SettingsPage-W8YszhUL.css +0 -1
- package/web/assets/i18n-8FjeJaKW.js +0 -1
- package/web/assets/index-teBqdnuv.css +0 -1
- /package/{agent-manager-THV3LJOF.js.map → agent-manager-R7BPQO6D.js.map} +0 -0
- /package/{chat-XYCHMTFE.js.map → chat-LPML22J5.js.map} +0 -0
- /package/{chunk-NCO4OOYT.js.map → chunk-4LJQIQMN.js.map} +0 -0
- /package/{chunk-QF56Z6LI.js.map → chunk-KV4GJKXU.js.map} +0 -0
- /package/{chunk-FE53XX4M.js.map → chunk-NPMSBYXC.js.map} +0 -0
- /package/{companion-HBYSY2D5.js.map → companion-W3UMZWGH.js.map} +0 -0
- /package/{install-gate-JAEK4BDZ.js.map → install-gate-PVMGJDWE.js.map} +0 -0
- /package/{settings-manager-QVQRJO6V.js.map → settings-manager-XPLBO35P.js.map} +0 -0
- /package/{vault-resolver-PN3TYCLJ.js.map → vault-resolver-E7KPKA5C.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{A as t,C as n,N as r,P as i,_ as a,c as o,f as s,g as c,l,m as u,x as d}from"./reactivity.esm-bundler-BQ9SB2vv.js";import{H as f,Ht as p,J as m,g as h,tt as g}from"./runtime-core.esm-bundler-DujKY9QV.js";import{r as _}from"./trpc-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{A as t,C as n,N as r,P as i,_ as a,c as o,f as s,g as c,l,m as u,x as d}from"./reactivity.esm-bundler-BQ9SB2vv.js";import{H as f,Ht as p,J as m,g as h,tt as g}from"./runtime-core.esm-bundler-DujKY9QV.js";import{r as _}from"./trpc-Drabzwpd.js";var v=typeof window<`u`,y,b=e=>y=e,x=Symbol();function S(e){return e&&typeof e==`object`&&Object.prototype.toString.call(e)===`[object Object]`&&typeof e.toJSON!=`function`}var C=typeof window==`object`&&window.window===window?window:typeof self==`object`&&self.self===self?self:typeof globalThis==`object`&&globalThis.global===globalThis||typeof globalThis==`object`?globalThis:{HTMLElement:null};function w(e,{autoBom:t=!1}={}){return t&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob([``,e],{type:e.type}):e}function T(e,t,n){let r=new XMLHttpRequest;r.open(`GET`,e),r.responseType=`blob`,r.onload=function(){A(r.response,t,n)},r.onerror=function(){console.error(`could not download file`)},r.send()}function E(e){let t=new XMLHttpRequest;t.open(`HEAD`,e,!1);try{t.send()}catch{}return t.status>=200&&t.status<=299}function D(e){try{e.dispatchEvent(new MouseEvent(`click`))}catch{let t=new MouseEvent(`click`,{bubbles:!0,cancelable:!0,view:window,detail:0,screenX:80,screenY:20,clientX:80,clientY:20,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null});e.dispatchEvent(t)}}var O=typeof navigator==`object`?navigator:{userAgent:``},k=/Macintosh/.test(O.userAgent)&&/AppleWebKit/.test(O.userAgent)&&!/Safari/.test(O.userAgent),A=v?typeof HTMLAnchorElement<`u`&&`download`in HTMLAnchorElement.prototype&&!k?ee:`msSaveOrOpenBlob`in O?te:j:()=>{};function ee(e,t=`download`,n){let r=document.createElement(`a`);r.download=t,r.rel=`noopener`,typeof e==`string`?(r.href=e,r.origin===location.origin?D(r):E(r.href)?T(e,t,n):(r.target=`_blank`,D(r))):(r.href=URL.createObjectURL(e),setTimeout(function(){URL.revokeObjectURL(r.href)},4e4),setTimeout(function(){D(r)},0))}function te(e,t=`download`,n){if(typeof e==`string`){if(E(e))T(e,t,n);else{let t=document.createElement(`a`);t.href=e,t.target=`_blank`,setTimeout(function(){D(t)})}}else navigator.msSaveOrOpenBlob(w(e,n),t)}function j(e,t,n,r){if(r||=open(``,`_blank`),r&&(r.document.title=r.document.body.innerText=`downloading...`),typeof e==`string`)return T(e,t,n);let i=e.type===`application/octet-stream`,a=/constructor/i.test(String(C.HTMLElement))||`safari`in C,o=/CriOS\/[\d]+/.test(navigator.userAgent);if((o||i&&a||k)&&typeof FileReader<`u`){let t=new FileReader;t.onloadend=function(){let e=t.result;if(typeof e!=`string`)throw r=null,Error(`Wrong reader.result type`);e=o?e:e.replace(/^data:[^;]*;/,`data:attachment/file;`),r?r.location.href=e:location.assign(e),r=null},t.readAsDataURL(e)}else{let t=URL.createObjectURL(e);r?r.location.assign(t):location.href=t,r=null,setTimeout(function(){URL.revokeObjectURL(t)},4e4)}}var{assign:ne}=Object;function re(){let e=o(!0),t=e.run(()=>n({})),r=[],i=[],a=c({install(e){b(a),a._a=e,e.provide(x,a),e.config.globalProperties.$pinia=a,i.forEach(e=>r.push(e)),i=[]},use(e){return this._a?r.push(e):i.push(e),this},_p:r,_a:null,_e:e,_s:new Map,state:t});return a}var M=()=>{};function N(e,t,n,r=M){e.add(t);let i=()=>{e.delete(t)&&r()};return!n&&l()&&a(i),i}function P(e,...t){e.forEach(e=>{e(...t)})}var F=e=>e(),I=Symbol(),L=Symbol();function R(e,t){e instanceof Map&&t instanceof Map?t.forEach((t,n)=>e.set(n,t)):e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(let n in t){if(!Object.hasOwn(t,n))continue;let r=t[n],i=e[n];e[n]=S(i)&&S(r)&&Object.hasOwn(e,n)&&!u(r)&&!s(r)?R(i,r):r}return e}var ie=Symbol();function ae(e){return!e||typeof e!=`object`||!Object.hasOwn(e,ie)}var{assign:z}=Object;function B(e){return!!(u(e)&&e.effect)}function V(e,t,n,r){let{state:a,actions:o,getters:s}=t,l=n.state.value[e],u;function d(){return l||(n.state.value[e]=a?a():{}),z(i(n.state.value[e]),o,Object.keys(s||{}).reduce((t,r)=>(t[r]=c(h(()=>{b(n);let t=n._s.get(e);return s[r].call(t,t)})),t),{}))}return u=H(e,d,t,n,r,!0),u}function H(e,n,r={},i,a,c){let l,f=z({actions:{}},r),m={deep:!0},h,_,v=new Set,y=new Set,x,S=i.state.value[e];!c&&!S&&(i.state.value[e]={});let C;function w(t){let n;h=_=!1,typeof t==`function`?(t(i.state.value[e]),n={type:`patch function`,storeId:e,events:x}):(R(i.state.value[e],t),n={type:`patch object`,payload:t,storeId:e,events:x});let r=C=Symbol();g().then(()=>{C===r&&(h=!0)}),_=!0,P(v,n,i.state.value[e])}let T=c?function(){let{state:e}=r,t=e?e():{};this.$patch(e=>{z(e,t)})}:M;function E(){l.stop(),v.clear(),y.clear(),i._s.delete(e)}let D=(t,n=``)=>{if(I in t)return t[L]=n,t;let r=function(){b(i);let n=Array.from(arguments),a=new Set,o=new Set;function s(e){a.add(e)}function c(e){o.add(e)}P(y,{args:n,name:r[L],store:k,after:s,onError:c});let l;try{l=t.apply(this&&this.$id===e?this:k,n)}catch(e){throw P(o,e),e}return l instanceof Promise?l.then(e=>(P(a,e),e)).catch(e=>(P(o,e),Promise.reject(e))):(P(a,l),l)};return r[I]=!0,r[L]=n,r},O={_p:i,$id:e,$onAction:N.bind(null,y),$patch:w,$reset:T,$subscribe(t,n={}){if(v.has(t))return M;let r=N(v,t,n.detached,()=>a()),a=l.run(()=>p(()=>i.state.value[e],r=>{(n.flush===`sync`?_:h)&&t({storeId:e,type:`direct`,events:x},r)},z({},m,n)));return r},$dispose:E},k=d(O);i._s.set(e,k);let A=(i._a&&i._a.runWithContext||F)(()=>i._e.run(()=>(l=o()).run(()=>n({action:D}))));for(let t in A){let n=A[t];u(n)&&!B(n)||s(n)?c||(S&&ae(n)&&(u(n)?n.value=S[t]:((n instanceof Set||n instanceof Map)&&n.clear(),R(n,S[t]))),i.state.value[e][t]=n):typeof n==`function`&&(A[t]=D(n,t),f.actions[t]=n)}return z(k,A),z(t(k),A),Object.defineProperty(k,"$state",{get:()=>i.state.value[e],set:e=>{w(t=>{z(t,e)})}}),i._p.forEach(e=>{let t=l.run(()=>e({store:k,app:i._a,pinia:i,options:f}));z(k,t)}),S&&c&&r.hydrate&&r.hydrate(k.$state,S),h=!0,_=!0,k}function U(e,t,n){let r,i=typeof t==`function`;r=i?n:t;function a(n,a){let o=f();return n||=o?m(x,null):null,n&&b(n),n=y,n._s.has(e)||(i?H(e,t,r,n):V(e,r,n)),n._s.get(e)}return a.$id=e,a}function W(e){let n=t(e),i={};for(let t in n){let a=n[t];a?.effect?i[t]=h({get:()=>e[t],set(n){e[t]=n}}):(u(a)||s(a))&&(i[t]=r(e,t))}return i}function G(e,t){return e.id===t.id&&e.orgId===t.orgId}function K(e,t,n=5){return[t,...e.filter(e=>!G(e,t))].slice(0,n)}function q(e){if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>typeof e==`object`&&!!e&&typeof e.id==`string`).map(e=>({id:e.id,orgId:typeof e.orgId==`string`?e.orgId:null})).slice(0,5):[]}catch{return[]}}var J=e({useProjectLaunchStore:()=>$}),Y=`runeya:last-project`,X=`runeya:last-org`,Z=`runeya:launch-selection:`,Q=`runeya:recent-projects`,$=U(`launch`,()=>{let e=localStorage.getItem(Y),t=n(e),r=n(localStorage.getItem(X)),i=n(!!e),a=n(q(localStorage.getItem(Q)));function o(e){return`${Z}${e.orgId??`local`}:${e.id}`}function s(e){try{let t=localStorage.getItem(o(e))??localStorage.getItem(Z+e.id);if(!t)return[];let n=JSON.parse(t);return Array.isArray(n)?n.filter(e=>typeof e==`string`):[]}catch{return[]}}function c(e,t){localStorage.removeItem(Z+e.id),localStorage.setItem(o(e),JSON.stringify(t))}function l(e){_.project.setCurrent.mutate(e?{id:e.id,orgId:e.orgId}:null).catch(()=>void 0)}function u(e,n=null){t.value=e,localStorage.setItem(Y,e),r.value=n,n?localStorage.setItem(X,n):localStorage.removeItem(X),l({id:e,orgId:n}),a.value=K(a.value,{id:e,orgId:n}),localStorage.setItem(Q,JSON.stringify(a.value))}t.value&&l({id:t.value,orgId:r.value});function d(){return localStorage.getItem(Y)}function f(){i.value=!0}function p(){t.value=null,r.value=null,i.value=!1,localStorage.removeItem(Y),localStorage.removeItem(X),l(null)}function m(e,t){let n=s(e);n.includes(t)||(n.push(t),c(e,n))}function h(e,t){c(e,s(e).filter(e=>e!==t))}function g(){return t.value?{id:t.value,orgId:r.value}:null}return{activeProjectId:t,activeOrgId:r,launchCompleted:i,recentProjects:a,getSavedSelection:s,saveSelection:c,setActiveProject:u,getLastProjectId:d,completeLaunch:f,resetLaunch:p,addServiceToSelection:m,removeServiceFromSelection:h,activeRef:g}});export{W as a,U as i,$ as n,re as r,J as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{C as t}from"./reactivity.esm-bundler-BQ9SB2vv.js";import{g as n}from"./runtime-core.esm-bundler-DujKY9QV.js";import{i as r,n as i}from"./project-launch.store-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{C as t}from"./reactivity.esm-bundler-BQ9SB2vv.js";import{g as n}from"./runtime-core.esm-bundler-DujKY9QV.js";import{i as r,n as i}from"./project-launch.store-y7JBMNiE.js";import{r as a}from"./trpc-Drabzwpd.js";import{n as o}from"./error-DpF7X5iu.js";var s=r(`environment`,()=>{let e=t([]),r=t(!1),o=t(null),s=n(()=>t=>e.value.find(e=>e.id===t)),c=n(()=>e.value.filter(e=>e.scope===`global`||!e.scope));async function l(t,n=!1){if(!(!n&&o.value===t&&e.value.length>0)){o.value=t,r.value=!0;try{let n=await a.environment.list.query({projectId:t,orgId:i().activeOrgId});e.value=n.map(e=>({...e}))}finally{r.value=!1}}}async function u(e){await a.environment.create.mutate({...e,orgId:i().activeOrgId}),o.value&&await l(o.value,!0)}async function d(e){await a.environment.update.mutate(e),o.value&&await l(o.value,!0)}async function f(e){await a.environment.delete.mutate({id:e}),o.value&&await l(o.value,!0)}async function p(e){return await a.environment.resolve.query({environmentId:e})}async function m(e,t,n){return await a.environment.keyUsages.query({projectId:e,orgId:i().activeOrgId,key:t,...n?{environmentId:n}:{}})}async function h(e,t){return await a.environment.setOverride.mutate({variableId:e,variable:t})}async function g(e){return await a.environment.removeOverride.mutate({variableId:e})}async function _(e,t,n,r){return await a.environment.fillVariable.mutate({environmentId:e,variableId:t,value:n,reason:r})}async function v(e){return await a.environment.missingVariables.query({environmentId:e})}async function y(){return await a.environment.getOverrides.query()}async function b(e,t,n){await a.environment.upsertVariable.mutate({environmentId:e,variableId:t,variable:n}),o.value&&await l(o.value,!0)}async function x(e,t){await a.environment.removeVariable.mutate({environmentId:e,variableId:t}),o.value&&await l(o.value,!0)}function S(t,n){return e.value.find(e=>e.scope===`service`&&e.reference===t&&e.activateOn===n)??null}function C(t){return e.value.filter(e=>e.scope===`service`&&e.reference===t)}return{environments:e,loading:r,currentProjectId:o,getById:s,globalEnvironments:c,fetchAll:l,create:u,update:d,deleteEnv:f,resolve:p,keyUsages:m,setOverride:h,removeOverride:g,getOverrides:y,missingVariables:v,fillVariable:_,findServiceEnvironment:S,findServiceEnvironments:C,upsertVariable:b,removeVariable:x}}),c=e({useProjectStore:()=>d});function l(e){let{id:t,name:n,description:r,serviceIds:i,environmentIds:a,activeEnvironmentId:o,orgId:s,groupOrder:c}=e;return{id:t,name:n,description:r,serviceIds:i,environmentIds:a,activeEnvironmentId:o,orgId:s,groupOrder:c??[]}}function u(e,t){return e.id===t.id?t.orgId===void 0||(e.orgId??null)===(t.orgId??null):!1}var d=r(`project`,()=>{let e=t([]),r=t(!1),c=t(null),d=n(()=>e.value.length),f=n(()=>t=>{let n=e.value.filter(e=>e.id===t);return n.length===1?n[0]:null}),p=n(()=>t=>e.value.find(e=>u(e,t))??null);function m(t,n){let r=e.value.findIndex(e=>u(e,t)),i=[...e.value];r>=0?i[r]=n:i.push(n),e.value=i}async function h(){r.value=!0,c.value=null;try{let t=await a.project.list.query();e.value=t.map(l)}catch(e){c.value=o(e)??`Failed to fetch projects`}finally{r.value=!1}}async function g(e){c.value=null;try{let t=l(await a.project.get.query({id:e.id,orgId:e.orgId}));return m(e,t),t}catch(e){return c.value=o(e)??`Failed to fetch project`,null}}async function _(t){c.value=null;try{let n=l(await a.project.create.mutate(t));return e.value=[...e.value,n],n}catch(e){return c.value=o(e)??`Failed to create project`,null}}async function v(t){c.value=null;let n=l(await a.project.importLocal.mutate({path:t}));return e.value.some(e=>e.id===n.id&&!e.orgId)||(e.value=[...e.value,n]),n}async function y(e,t){c.value=null;try{let n=l(await a.project.update.mutate({id:e.id,orgId:e.orgId,...t}));return m(e,n),n}catch(e){return c.value=o(e)??`Failed to update project`,null}}async function b(t,n){let r=e.value.findIndex(e=>u(e,t)),i=r>=0?e.value[r].groupOrder:void 0;if(r>=0){let t=[...e.value];t[r]={...t[r],groupOrder:n},e.value=t}try{let e=l(await a.project.update.mutate({id:t.id,orgId:t.orgId,groupOrder:n}));return m(t,e),e}catch(n){if(c.value=o(n)??`Failed to update group order`,r>=0&&i!==void 0){let n=[...e.value],r=n.findIndex(e=>u(e,t));r>=0&&(n[r]={...n[r],groupOrder:i}),e.value=n}return null}}async function x(t){c.value=null;try{return await a.project.delete.mutate({id:t.id,orgId:t.orgId}),e.value=e.value.filter(e=>!u(e,t)),!0}catch(e){return c.value=o(e)??`Failed to delete project`,!1}}async function S(e,t){c.value=null;try{let n=l(await a.project.addService.mutate({projectId:e.id,orgId:e.orgId,serviceId:t}));return m(e,n),await s().fetchAll(e.id,!0),n}catch(e){return c.value=o(e)??`Failed to add service to project`,null}}async function C(e,t){c.value=null;try{let n=l(await a.project.removeService.mutate({projectId:e.id,orgId:e.orgId,serviceId:t}));return m(e,n),n}catch(e){return c.value=o(e)??`Failed to remove service from project`,null}}async function w(e,t){c.value=null;try{let n=l(await a.project.setActiveEnvironment.mutate({projectId:e.id,orgId:e.orgId,environmentId:t}));return m(e,n),n}catch(e){return c.value=o(e)??`Failed to set active environment`,null}}let T=n(()=>{let t=i(),n=t.activeProjectId;if(n){let r=e.value.find(e=>u(e,{id:n,orgId:t.activeOrgId}))??e.value.find(e=>e.id===n);if(r)return r}return e.value[0]??null});return{projects:e,loading:r,error:c,projectCount:d,currentProject:T,currentProjectOrgId:n(()=>T.value?.orgId??null),getById:f,getByRef:p,fetchAll:h,fetchOne:g,create:_,importLocal:v,update:y,remove:x,addService:S,removeService:C,setActiveEnvironment:w,updateGroupOrder:b}});export{d as n,s as r,c as t};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{B as e,C as t,O as n}from"./reactivity.esm-bundler-BQ9SB2vv.js";import{$ as r,Ft as i,Ht as a,ct as o,g as s,k as c,mt as l,v as u,y as d}from"./runtime-core.esm-bundler-DujKY9QV.js";import{P as f,S as p,ft as m,mt as h}from"./src--GO-VSJ0.js";import{i as g,n as _}from"./project-launch.store-B5nhdGdh.js";import{r as v}from"./i18n-8FjeJaKW.js";import{n as y,r as b}from"./trpc-CfuFkKgp.js";import{n as ee}from"./project.store-Bm2JWNbd.js";import{t as x}from"./use-polling-CEkhIY_9.js";import{t as S}from"./useAiChatDrawer-D_ofn8Eo.js";import{t as C}from"./settings-scope-CKPq86HZ.js";import{c as w}from"./dist-N4nrnbnA.js";import{t as T}from"./service.store-XS50iGKo.js";var E={"align-left":`align-left`,"angle-double-down":`chevrons-down`,"angle-double-left":`chevrons-left`,"angle-double-right":`chevrons-right`,"angle-down":`chevron-down`,"angle-left":`chevron-left`,"angle-right":`chevron-right`,"angle-up":`chevron-up`,"arrow-circle-up":`circle-arrow-up`,"arrow-down":`arrow-down`,"arrow-down-left":`arrow-down-left`,"arrow-left":`arrow-left`,"arrow-right":`arrow-right`,"arrow-right-arrow-left":`arrows-exchange`,"arrow-up":`arrow-up`,"arrow-up-right":`arrow-up-right`,"arrows-alt":`arrows-move`,asterisk:`asterisk`,ban:`ban`,bars:`menu-2`,bell:`bell`,"bell-slash":`bell-off`,bolt:`bolt`,book:`book`,bookmark:`bookmark`,box:`box`,building:`building`,calendar:`calendar`,"calendar-plus":`calendar-plus`,"chart-line":`chart-line`,check:`check`,"check-circle":`circle-check`,"check-square":`square-check`,"chevron-down":`chevron-down`,"chevron-left":`chevron-left`,"chevron-right":`chevron-right`,"chevron-up":`chevron-up`,circle:`circle`,"circle-fill":`circle-filled`,clock:`clock`,clone:`copy`,cloud:`cloud`,"cloud-off":`cloud-off`,"cloud-slash":`cloud-off`,"cloud-upload":`cloud-upload`,code:`code`,cog:`settings`,comment:`message`,comments:`messages`,copy:`copy`,crown:`crown`,database:`database`,desktop:`device-desktop`,directions:`directions`,download:`download`,"ellipsis-v":`dots-vertical`,envelope:`mail`,eraser:`eraser`,"exclamation-circle":`alert-circle`,"exclamation-triangle":`alert-triangle`,"external-link":`external-link`,eye:`eye`,"eye-slash":`eye-off`,file:`file`,"file-check":`file-check`,"file-edit":`file-pencil`,"file-plus":`file-plus`,filter:`filter`,"filter-slash":`filter-off`,folder:`folder`,"folder-open":`folder-open`,"folder-plus":`folder-plus`,github:`brand-github`,globe:`world`,hashtag:`hash`,heart:`heart`,"heart-fill":`heart-filled`,history:`history`,home:`home`,hourglass:`hourglass`,image:`photo`,inbox:`inbox`,"info-circle":`info-circle`,key:`key`,language:`language`,link:`link`,list:`list`,"list-check":`list-check`,lock:`lock`,"map-marker":`map-pin`,microchip:`cpu`,"microchip-ai":`brain`,minus:`minus`,moon:`moon`,palette:`palette`,paperclip:`paperclip`,pause:`player-pause`,"pause-circle":`player-pause`,pencil:`pencil`,play:`player-play`,"play-circle":`player-play`,plus:`plus`,"plus-circle":`circle-plus`,"power-off":`power`,"question-circle":`help-circle`,refresh:`refresh`,replay:`rotate`,save:`device-floppy`,search:`search`,send:`send`,server:`server`,shield:`shield`,"sign-in":`login`,"sign-out":`logout`,sitemap:`sitemap`,"sliders-h":`adjustments-horizontal`,"sort-alt":`arrows-sort`,sparkles:`sparkles`,spinner:`loader-2`,star:`star`,"star-fill":`star-filled`,stop:`player-stop`,"stop-circle":`player-stop`,stopwatch:`stopwatch`,sun:`sun`,sync:`refresh`,table:`table`,tag:`tag`,terminal:`terminal-2`,"th-large":`layout-grid`,thumbtack:`pin`,times:`x`,"times-circle":`circle-x`,trash:`trash`,undo:`arrow-back-up`,upload:`upload`,user:`user`,"user-plus":`user-plus`,users:`users`,"volume-off":`volume-off`,"volume-up":`volume`,"wave-pulse":`activity`,"window-maximize":`maximize`,"window-minimize":`minimize`};function D(e,t=`circle`){let n=(e??``).trim().split(/\s+/).pop()??``,r=n.replace(/^(ti|pi)-/,``);return n.startsWith(`pi-`)&&(r=E[r]??t),`ti ti-${r||t}`}var O=`runeya:ai-chat-debug`;function k(){try{return localStorage.getItem(O)===`1`}catch{return!1}}var A=m(c({__name:`AiProviderSelector`,props:r({storageKey:{},hideWhenSingle:{type:Boolean,default:!0},size:{default:`small`},placeholder:{},disabled:{type:Boolean},inputId:{}},{modelValue:{required:!0},modelModifiers:{},model:{default:null},modelModifiers:{}}),emits:r([`loaded`],[`update:modelValue`,`update:model`]),setup(n,{emit:r}){let a=n,c=i(n,`modelValue`),f=i(n,`model`),m=r,{t:g}=h(),_=t([]),v=t(!0),y=s(()=>_.value.reduce((e,t)=>e+t.items.length,0)),ee=s(()=>v.value?!0:a.hideWhenSingle?y.value>1:y.value>0);function x(e,t){return`${e}::${t??``}`}let S=s(()=>c.value?x(c.value,f.value):null);function w(e){let[t,n]=e?e.split(`::`):[null,``];c.value=t||null,f.value=n||null,a.storageKey&&(e?localStorage.setItem(a.storageKey,e):localStorage.removeItem(a.storageKey))}function T(e){return{label:e.model||g(`aiProviderSelector.defaultModel`),value:x(e.id,e.model??null),providerId:e.id,model:e.model??null}}return o(async()=>{let e=[];try{e=await b.settings.listAIProviders.query(C())}catch{e=[]}_.value=e.map(e=>({label:`${e.name} (${e.provider})`,providerId:e.id,items:[T(e)]}));let t=a.storageKey?localStorage.getItem(a.storageKey):null,n=S.value??t,r=(e.find(e=>e.active)??e[0])?.id??null,i=_.value.find(e=>e.providerId===r)?.items[0]?.value??null;w(n??i),m(`loaded`,e.length),await Promise.all(e.map(async e=>{let t=[];try{t=await b.chat.listModels.query({providerId:e.id,...C()})}catch{return}if(t.length===0)return;let n=_.value.find(t=>t.providerId===e.id);n&&(n.items=t.map(t=>({label:t,value:x(e.id,t),providerId:e.id,model:t})))})),S.value&&!_.value.some(e=>e.items.some(e=>e.value===S.value))&&w(_.value.find(e=>e.providerId===c.value)?.items[0]?.value??_.value[0]?.items[0]?.value??null),v.value=!1}),(t,r)=>ee.value?(l(),u(e(p),{key:0,"model-value":S.value,options:_.value,"option-group-label":`label`,"option-group-children":`items`,"option-label":`label`,"option-value":`value`,size:n.size,"input-id":n.inputId,disabled:n.disabled,loading:v.value,filter:y.value>8,placeholder:v.value?e(g)(`aiProviderSelector.loading`):n.placeholder??e(g)(`aiProviderSelector.placeholder`),title:e(g)(`aiProviderSelector.title`),class:`ai-provider-selector`,"onUpdate:modelValue":w},null,8,[`model-value`,`options`,`size`,`input-id`,`disabled`,`loading`,`filter`,`placeholder`,`title`])):d(``,!0)}}),[[`__scopeId`,`data-v-ea66f89f`]]);function j(e,t){let n=new Set(t),r=new Set(e),i=t.filter(e=>!r.has(e)),a=e.filter(e=>!n.has(e)),o=e.length===t.length&&e.every((e,n)=>e===t[n]);return{added:i,removed:a,unchanged:i.length===0&&a.length===0&&o}}function te(e,t){let n=j(e.pinned,t.pinned),r=new Set(t.pinned);for(let e of Object.values(t.sections))for(let t of e)r.add(t);let i=[],a=[],o=new Set([...Object.keys(e.sections),...Object.keys(t.sections)]);for(let n of o){let o=j(e.sections[n]??[],t.sections[n]??[]);o.unchanged||(i.push(n),a.push(...o.removed.filter(e=>!r.has(e))))}let s=n.removed.filter(e=>!r.has(e));return{unchanged:n.unchanged&&i.length===0,pinAdded:n.added,pinnedChanged:!n.unchanged,unpinnedToList:s,changedSections:i,sectionToList:a,removed:[...s,...a]}}function M(e,t,n){let r=new Map(t.pinned.map((e,t)=>[e,t])),i=new Map;for(let[e,n]of Object.entries(t.sections))n.forEach((t,n)=>i.set(t,{sectionId:e,rank:n}));let a=new Set(n);return e.map(e=>{let{pinOrder:t,sectionId:n,sectionOrder:o,...s}=e,c=r.get(e.id);if(c!==void 0)return{...s,pinOrder:c};let l=i.get(e.id);return l?{...s,sectionId:l.sectionId,sectionOrder:l.rank}:a.has(e.id)?s:e})}function ne(e){return e.runner===`claude-code`||e.runner===`codex`||!!e.isCli&&!e.providerId}var N=`runeya:ai-chat-model`,P=`runeya:ai-chat-effort`,F=`runeya:ai-chat-active-id`,I=`runeya:ai-chat-unread`,L=`runeya:ai-chat-provider-id`,R=`runeya:ai-chat-provider-model`,z=()=>new Date().toISOString();function re(e,n,r,i,a,o,s,c,l,u,d,p,m,h,g){let _=f(),y=null;function x(e){y=e}let C=t([]),w=t(!1),E=[`image/png`,`image/jpeg`,`image/webp`,`image/gif`];async function D(e){for(let t of e)await A(t)}async function O(e){await A(e)}async function A(e){let{t}=v.global;if(!E.includes(e.type)){_.add({severity:`error`,summary:t(`imageUpload.errorUnsupportedType`,{name:e.name}),life:5e3});return}if(e.size>0&&e.size>5242880){_.add({severity:`error`,summary:t(`imageUpload.errorTooLarge`,{name:e.name}),life:5e3});return}if(C.value.length>=5){_.add({severity:`error`,summary:t(`imageUpload.errorTooMany`),life:5e3});return}let n=r.value?.id;if(!n){_.add({severity:`error`,summary:t(`imageUpload.errorNetwork`,{name:e.name}),life:5e3});return}let i=URL.createObjectURL(e);w.value=!0;try{let r=new FormData;r.append(`image`,e);let a=await fetch(`/api/images/upload?conversationId=${encodeURIComponent(n)}`,{method:`POST`,body:r});if(!a.ok){URL.revokeObjectURL(i),_.add({severity:`error`,summary:t(`imageUpload.errorNetwork`,{name:e.name}),life:5e3});return}let o=await a.json();C.value.push({imageId:o.imageId,url:o.url,mimeType:o.mimeType,localPreviewUrl:i,fileName:e.name})}catch{URL.revokeObjectURL(i),_.add({severity:`error`,summary:t(`imageUpload.errorNetwork`,{name:e.name}),life:5e3})}finally{w.value=!1}}function j(e){let t=C.value.findIndex(t=>t.imageId===e);t!==-1&&(URL.revokeObjectURL(C.value[t].localPreviewUrl),C.value.splice(t,1))}function te(){for(let e of C.value)URL.revokeObjectURL(e.localPreviewUrl);C.value=[]}function M(){let e=n.value;e&&p(e)&&(a.get(e)?.unsubscribe(),d(e),e&&b.chat.stopSession.mutate({conversationId:e}).catch(()=>{}))}function ne(e){return e.slice(0,50).trim()+(e.length>50?`…`:``)}async function N(t,n){let{pendingContext:o,pendingPopulateContext:f}=S();if(!t.trim()&&C.value.length===0&&!o.value&&!f.value)return;!t.trim()&&o.value&&(t=`Voici le contexte ci-joint, aide-moi à avancer.`),!t.trim()&&f.value&&(t=f.value),r.value||await m();let h=r.value.id;await g(h);let _=e.value.find(e=>e.id===h);if(!_||r.value?.id!==h)return;if(_.messagesOmitted)throw Error(v.global.t(`aiChat.historyLoadFailed`));if(p(_.id))return;let{pendingContext:y,pendingDiffContext:x,pendingPopulateContext:w}=S(),E=y.value?.text??null,D=x.value,O=[D,E].filter(Boolean).join(`
|
|
1
|
+
import{B as e,C as t,O as n}from"./reactivity.esm-bundler-BQ9SB2vv.js";import{$ as r,Ft as i,Ht as a,ct as o,g as s,k as c,mt as l,v as u,y as d}from"./runtime-core.esm-bundler-DujKY9QV.js";import{P as f,S as p,ft as m,mt as h}from"./src--GO-VSJ0.js";import{i as g,n as _}from"./project-launch.store-y7JBMNiE.js";import{r as v}from"./i18n-D0afQEGs.js";import{n as y,r as b}from"./trpc-Drabzwpd.js";import{n as ee}from"./project.store-DGJr0Qr9.js";import{t as x}from"./use-polling-CEkhIY_9.js";import{t as S}from"./useAiChatDrawer-D_ofn8Eo.js";import{t as C}from"./settings-scope-Bv7QGPrt.js";import{c as w}from"./dist-N4nrnbnA.js";import{t as T}from"./service.store-5jWsJxPx.js";var E={"align-left":`align-left`,"angle-double-down":`chevrons-down`,"angle-double-left":`chevrons-left`,"angle-double-right":`chevrons-right`,"angle-down":`chevron-down`,"angle-left":`chevron-left`,"angle-right":`chevron-right`,"angle-up":`chevron-up`,"arrow-circle-up":`circle-arrow-up`,"arrow-down":`arrow-down`,"arrow-down-left":`arrow-down-left`,"arrow-left":`arrow-left`,"arrow-right":`arrow-right`,"arrow-right-arrow-left":`arrows-exchange`,"arrow-up":`arrow-up`,"arrow-up-right":`arrow-up-right`,"arrows-alt":`arrows-move`,asterisk:`asterisk`,ban:`ban`,bars:`menu-2`,bell:`bell`,"bell-slash":`bell-off`,bolt:`bolt`,book:`book`,bookmark:`bookmark`,box:`box`,building:`building`,calendar:`calendar`,"calendar-plus":`calendar-plus`,"chart-line":`chart-line`,check:`check`,"check-circle":`circle-check`,"check-square":`square-check`,"chevron-down":`chevron-down`,"chevron-left":`chevron-left`,"chevron-right":`chevron-right`,"chevron-up":`chevron-up`,circle:`circle`,"circle-fill":`circle-filled`,clock:`clock`,clone:`copy`,cloud:`cloud`,"cloud-off":`cloud-off`,"cloud-slash":`cloud-off`,"cloud-upload":`cloud-upload`,code:`code`,cog:`settings`,comment:`message`,comments:`messages`,copy:`copy`,crown:`crown`,database:`database`,desktop:`device-desktop`,directions:`directions`,download:`download`,"ellipsis-v":`dots-vertical`,envelope:`mail`,eraser:`eraser`,"exclamation-circle":`alert-circle`,"exclamation-triangle":`alert-triangle`,"external-link":`external-link`,eye:`eye`,"eye-slash":`eye-off`,file:`file`,"file-check":`file-check`,"file-edit":`file-pencil`,"file-plus":`file-plus`,filter:`filter`,"filter-slash":`filter-off`,folder:`folder`,"folder-open":`folder-open`,"folder-plus":`folder-plus`,github:`brand-github`,globe:`world`,hashtag:`hash`,heart:`heart`,"heart-fill":`heart-filled`,history:`history`,home:`home`,hourglass:`hourglass`,image:`photo`,inbox:`inbox`,"info-circle":`info-circle`,key:`key`,language:`language`,link:`link`,list:`list`,"list-check":`list-check`,lock:`lock`,"map-marker":`map-pin`,microchip:`cpu`,"microchip-ai":`brain`,minus:`minus`,moon:`moon`,palette:`palette`,paperclip:`paperclip`,pause:`player-pause`,"pause-circle":`player-pause`,pencil:`pencil`,play:`player-play`,"play-circle":`player-play`,plus:`plus`,"plus-circle":`circle-plus`,"power-off":`power`,"question-circle":`help-circle`,refresh:`refresh`,replay:`rotate`,save:`device-floppy`,search:`search`,send:`send`,server:`server`,shield:`shield`,"sign-in":`login`,"sign-out":`logout`,sitemap:`sitemap`,"sliders-h":`adjustments-horizontal`,"sort-alt":`arrows-sort`,sparkles:`sparkles`,spinner:`loader-2`,star:`star`,"star-fill":`star-filled`,stop:`player-stop`,"stop-circle":`player-stop`,stopwatch:`stopwatch`,sun:`sun`,sync:`refresh`,table:`table`,tag:`tag`,terminal:`terminal-2`,"th-large":`layout-grid`,thumbtack:`pin`,times:`x`,"times-circle":`circle-x`,trash:`trash`,undo:`arrow-back-up`,upload:`upload`,user:`user`,"user-plus":`user-plus`,users:`users`,"volume-off":`volume-off`,"volume-up":`volume`,"wave-pulse":`activity`,"window-maximize":`maximize`,"window-minimize":`minimize`};function D(e,t=`circle`){let n=(e??``).trim().split(/\s+/).pop()??``,r=n.replace(/^(ti|pi)-/,``);return n.startsWith(`pi-`)&&(r=E[r]??t),`ti ti-${r||t}`}var O=`runeya:ai-chat-debug`;function k(){try{return localStorage.getItem(O)===`1`}catch{return!1}}var A=m(c({__name:`AiProviderSelector`,props:r({storageKey:{},hideWhenSingle:{type:Boolean,default:!0},size:{default:`small`},placeholder:{},disabled:{type:Boolean},inputId:{}},{modelValue:{required:!0},modelModifiers:{},model:{default:null},modelModifiers:{}}),emits:r([`loaded`],[`update:modelValue`,`update:model`]),setup(n,{emit:r}){let a=n,c=i(n,`modelValue`),f=i(n,`model`),m=r,{t:g}=h(),_=t([]),v=t(!0),y=s(()=>_.value.reduce((e,t)=>e+t.items.length,0)),ee=s(()=>v.value?!0:a.hideWhenSingle?y.value>1:y.value>0);function x(e,t){return`${e}::${t??``}`}let S=s(()=>c.value?x(c.value,f.value):null);function w(e){let[t,n]=e?e.split(`::`):[null,``];c.value=t||null,f.value=n||null,a.storageKey&&(e?localStorage.setItem(a.storageKey,e):localStorage.removeItem(a.storageKey))}function T(e){return{label:e.model||g(`aiProviderSelector.defaultModel`),value:x(e.id,e.model??null),providerId:e.id,model:e.model??null}}return o(async()=>{let e=[];try{e=await b.settings.listAIProviders.query(C())}catch{e=[]}_.value=e.map(e=>({label:`${e.name} (${e.provider})`,providerId:e.id,items:[T(e)]}));let t=a.storageKey?localStorage.getItem(a.storageKey):null,n=S.value??t,r=(e.find(e=>e.active)??e[0])?.id??null,i=_.value.find(e=>e.providerId===r)?.items[0]?.value??null;w(n??i),m(`loaded`,e.length),await Promise.all(e.map(async e=>{let t=[];try{t=await b.chat.listModels.query({providerId:e.id,...C()})}catch{return}if(t.length===0)return;let n=_.value.find(t=>t.providerId===e.id);n&&(n.items=t.map(t=>({label:t,value:x(e.id,t),providerId:e.id,model:t})))})),S.value&&!_.value.some(e=>e.items.some(e=>e.value===S.value))&&w(_.value.find(e=>e.providerId===c.value)?.items[0]?.value??_.value[0]?.items[0]?.value??null),v.value=!1}),(t,r)=>ee.value?(l(),u(e(p),{key:0,"model-value":S.value,options:_.value,"option-group-label":`label`,"option-group-children":`items`,"option-label":`label`,"option-value":`value`,size:n.size,"input-id":n.inputId,disabled:n.disabled,loading:v.value,filter:y.value>8,placeholder:v.value?e(g)(`aiProviderSelector.loading`):n.placeholder??e(g)(`aiProviderSelector.placeholder`),title:e(g)(`aiProviderSelector.title`),class:`ai-provider-selector`,"onUpdate:modelValue":w},null,8,[`model-value`,`options`,`size`,`input-id`,`disabled`,`loading`,`filter`,`placeholder`,`title`])):d(``,!0)}}),[[`__scopeId`,`data-v-ea66f89f`]]);function j(e,t){let n=new Set(t),r=new Set(e),i=t.filter(e=>!r.has(e)),a=e.filter(e=>!n.has(e)),o=e.length===t.length&&e.every((e,n)=>e===t[n]);return{added:i,removed:a,unchanged:i.length===0&&a.length===0&&o}}function te(e,t){let n=j(e.pinned,t.pinned),r=new Set(t.pinned);for(let e of Object.values(t.sections))for(let t of e)r.add(t);let i=[],a=[],o=new Set([...Object.keys(e.sections),...Object.keys(t.sections)]);for(let n of o){let o=j(e.sections[n]??[],t.sections[n]??[]);o.unchanged||(i.push(n),a.push(...o.removed.filter(e=>!r.has(e))))}let s=n.removed.filter(e=>!r.has(e));return{unchanged:n.unchanged&&i.length===0,pinAdded:n.added,pinnedChanged:!n.unchanged,unpinnedToList:s,changedSections:i,sectionToList:a,removed:[...s,...a]}}function M(e,t,n){let r=new Map(t.pinned.map((e,t)=>[e,t])),i=new Map;for(let[e,n]of Object.entries(t.sections))n.forEach((t,n)=>i.set(t,{sectionId:e,rank:n}));let a=new Set(n);return e.map(e=>{let{pinOrder:t,sectionId:n,sectionOrder:o,...s}=e,c=r.get(e.id);if(c!==void 0)return{...s,pinOrder:c};let l=i.get(e.id);return l?{...s,sectionId:l.sectionId,sectionOrder:l.rank}:a.has(e.id)?s:e})}function ne(e){return e.runner===`claude-code`||e.runner===`codex`||!!e.isCli&&!e.providerId}var N=`runeya:ai-chat-model`,P=`runeya:ai-chat-effort`,F=`runeya:ai-chat-active-id`,I=`runeya:ai-chat-active-id-by-project`,L=`runeya:ai-chat-unread`,R=`runeya:ai-chat-provider-id`,re=`runeya:ai-chat-provider-model`,z=()=>new Date().toISOString();function ie(e,n,r,i,a,o,s,c,l,u,d,p,m,h,g){let _=f(),y=null;function x(e){y=e}let C=t([]),w=t(!1),E=[`image/png`,`image/jpeg`,`image/webp`,`image/gif`];async function D(e){for(let t of e)await A(t)}async function O(e){await A(e)}async function A(e){let{t}=v.global;if(!E.includes(e.type)){_.add({severity:`error`,summary:t(`imageUpload.errorUnsupportedType`,{name:e.name}),life:5e3});return}if(e.size>0&&e.size>5242880){_.add({severity:`error`,summary:t(`imageUpload.errorTooLarge`,{name:e.name}),life:5e3});return}if(C.value.length>=5){_.add({severity:`error`,summary:t(`imageUpload.errorTooMany`),life:5e3});return}let n=r.value?.id;if(!n){_.add({severity:`error`,summary:t(`imageUpload.errorNetwork`,{name:e.name}),life:5e3});return}let i=URL.createObjectURL(e);w.value=!0;try{let r=new FormData;r.append(`image`,e);let a=await fetch(`/api/images/upload?conversationId=${encodeURIComponent(n)}`,{method:`POST`,body:r});if(!a.ok){URL.revokeObjectURL(i),_.add({severity:`error`,summary:t(`imageUpload.errorNetwork`,{name:e.name}),life:5e3});return}let o=await a.json();C.value.push({imageId:o.imageId,url:o.url,mimeType:o.mimeType,localPreviewUrl:i,fileName:e.name})}catch{URL.revokeObjectURL(i),_.add({severity:`error`,summary:t(`imageUpload.errorNetwork`,{name:e.name}),life:5e3})}finally{w.value=!1}}function j(e){let t=C.value.findIndex(t=>t.imageId===e);t!==-1&&(URL.revokeObjectURL(C.value[t].localPreviewUrl),C.value.splice(t,1))}function te(){for(let e of C.value)URL.revokeObjectURL(e.localPreviewUrl);C.value=[]}function M(){let e=n.value;e&&p(e)&&(a.get(e)?.unsubscribe(),d(e),e&&b.chat.stopSession.mutate({conversationId:e}).catch(()=>{}))}function ne(e){return e.slice(0,50).trim()+(e.length>50?`…`:``)}async function N(t,n){let{pendingContext:o,pendingPopulateContext:f}=S();if(!t.trim()&&C.value.length===0&&!o.value&&!f.value)return;!t.trim()&&o.value&&(t=`Voici le contexte ci-joint, aide-moi à avancer.`),!t.trim()&&f.value&&(t=f.value),r.value||await m();let h=r.value.id;await g(h);let _=e.value.find(e=>e.id===h);if(!_||r.value?.id!==h)return;if(_.messagesOmitted)throw Error(v.global.t(`aiChat.historyLoadFailed`));if(p(_.id))return;let{pendingContext:y,pendingDiffContext:x,pendingPopulateContext:w}=S(),E=y.value?.text??null,D=x.value,O=[D,E].filter(Boolean).join(`
|
|
2
2
|
|
|
3
3
|
`)||void 0;y.value=null,w.value=null;let k=[...C.value],A=k.map(e=>({type:`image`,imageId:e.imageId,url:e.url,mimeType:e.mimeType,altText:e.fileName})),j=A.length>0?[...t.trim()?[{type:`text`,text:t.trim()}]:[],...A]:void 0,{contextServiceId:M}=S(),N=M.value?T().getById(M.value):null,P=[N?`[Contexte: l'utilisateur consulte actuellement le service "${N.name}" (id: ${N.id})]`:null,O].filter(Boolean).join(`
|
|
4
4
|
|
|
5
|
-
`)||void 0;_.messages.push({role:`user`,content:t.trim(),parts:j,contextNote:P}),te(),_.messages.length===1&&!_.kanbanCardId&&!_.kanbanBoardId&&(_.title=ne(t.trim()),b.chat.conversations.update.mutate({id:_.id,title:_.title}).catch(()=>{})),e.value=[...e.value];let F=new Set(i.value);F.add(_.id),i.value=F;let I={role:`assistant`,content:``};_.messages.push(I),n(!0);let L=!1,R=()=>{let t=e.value.findIndex(e=>e.id===_.id);if(t>=0){let n=[...e.value];n[t]={...n[t],messages:[...n[t].messages]},e.value=n}},
|
|
5
|
+
`)||void 0;_.messages.push({role:`user`,content:t.trim(),parts:j,contextNote:P}),te(),_.messages.length===1&&!_.kanbanCardId&&!_.kanbanBoardId&&(_.title=ne(t.trim()),b.chat.conversations.update.mutate({id:_.id,title:_.title}).catch(()=>{})),e.value=[...e.value];let F=new Set(i.value);F.add(_.id),i.value=F;let I={role:`assistant`,content:``};_.messages.push(I),n(!0);let L=!1,R=()=>{let t=e.value.findIndex(e=>e.id===_.id);if(t>=0){let n=[...e.value];n[t]={...n[t],messages:[...n[t].messages]},e.value=n}},re=e=>{I.parts||=[];let t=I.parts;if(e.type===`thinking`){let r=t[t.length-1];r?.type===`thinking`?r.text+=e.text??``:t.push({type:`thinking`,text:e.text??``}),R(),n()}else if(e.type===`status`)I.status=e.text??``,R(),n();else if(e.type===`delta`){if(e.ts){let t=Date.now()-e.ts;t>100?console.warn(`[perf] delta latency: ${t}ms`):console.debug(`[perf] delta latency: ${t}ms`)}I.status=``,I.content+=e.text??``;let r=t[t.length-1];r?.type===`text`?r.text+=e.text??``:t.push({type:`text`,text:e.text??``}),R(),n()}else if(e.type===`tool_call`){let r=t.find(t=>t.type===`tool`&&t.id===e.id);r?(r.name=e.name,r.input=e.input,r.rawInput=e.rawInput):t.push({type:`tool`,id:e.id,name:e.name,input:e.input,rawInput:e.rawInput,pending:!0}),R(),n()}else if(e.type===`tool_result`){let r=t.find(t=>t.type===`tool`&&t.id===e.id);r&&(r.result=e.result,r.isError=e.isError,r.pending=!1,r.rawInput=void 0),R(),n()}else if(e.type===`context_usage`){if(typeof e.inputTokens==`number`){let t=typeof e.contextWindow==`number`?e.contextWindow:2e5;u(_.id,e.inputTokens,t),b.chat.conversations.update.mutate({id:_.id,contextUsage:{inputTokens:e.inputTokens,contextWindow:t}}).catch(()=>{})}}else e.type===`done`&&(L=!0,d(_.id))},z=t=>{I.content=I.content||v.global.t(`aiChat.errorMessage`,{message:t?.message??v.global.t(`aiChat.unknownError`)}),e.value=[...e.value],d(_.id)},ie=()=>{if(!L){a.get(_.id)?.unsubscribe(),a.delete(_.id);let e=new Set(i.value);e.delete(_.id),i.value=e}};D&&(x.value=null);let{contextServiceId:ae}=S(),B=T(),V=ae.value?B.getById(ae.value):null,H=[];V&&H.push(`[Contexte: l'utilisateur consulte actuellement le service "${V.name}" (id: ${V.id})]`),D&&H.push(`[Contexte: diff du fichier en cours de consultation]\n${D}`),E&&H.push(`[Contexte attaché]\n${E}`);let U=H.length>0?H.join(`
|
|
6
6
|
|
|
7
|
-
`):null,G=_.agentId??H?.effectiveAgentId??void 0,ae=ee().currentProject?.activeEnvironmentId??void 0;try{if(_.runner===`claude-code`||_.runner===`codex`||_.isCli&&!_.providerId){let e=k.map(e=>({type:`image`,imageId:e.imageId,url:e.url,mimeType:e.mimeType,altText:e.fileName}));_.runner===`codex`?a.set(_.id,b.chat.streamViaCodex.subscribe({conversationId:_.id,prompt:t.trim(),contextNote:W??void 0,model:void 0,agentId:G,environmentId:ae,imageParts:e},{onData:z,onError:re,onComplete:ie})):a.set(_.id,b.chat.streamViaClaudeCode.subscribe({conversationId:_.id,prompt:t.trim(),contextNote:W??void 0,model:s.value??void 0,effort:c.value??void 0,agentId:G,environmentId:ae,imageIds:k.map(e=>e.imageId),imageParts:e},{onData:z,onError:re,onComplete:ie}))}else{let e=_.messages.slice(0,-1).map(e=>({role:e.role,content:e.content})),t=W?[{role:`user`,content:W},{role:`assistant`,content:`Compris, je tiendrai compte de ce contexte.`},...e]:e,n=k.map(e=>({type:`image`,imageId:e.imageId,url:e.url,mimeType:e.mimeType,altText:e.fileName}));a.set(_.id,b.chat.send.subscribe({conversationId:_.id,messages:t,model:l.value||void 0,contextNote:O,imageIds:k.map(e=>e.imageId),imageParts:n},{onData:z,onError:re,onComplete:ie}))}}catch(t){I.content=v.global.t(`aiChat.connectionError`,{message:t.message}),e.value=[...e.value],d(_.id)}}function P(t,n){if(p(t.id))return;let r=new Set(i.value);r.add(t.id),i.value=r;let o=t.messages[t.messages.length-1],s;o?.role===`assistant`?s=o:(s={role:`assistant`,content:``},t.messages.push(s)),e.value=[...e.value];let c=!1,l=!1,f=()=>{let n=e.value.findIndex(e=>e.id===t.id);if(n>=0){let t=[...e.value];t[n]={...t[n],messages:[...t[n].messages]},e.value=t}},m=e=>{s.parts||(s.parts=[]);let n=s.parts;if(e.type===`status`)s.status=e.text??``,f(),y?.();else if(e.type===`delta`){if(e.ts){let t=Date.now()-e.ts;t>100?console.warn(`[perf][reconnect] delta latency: ${t}ms`):console.debug(`[perf][reconnect] delta latency: ${t}ms`)}if(s.status=``,!c)c=!0,s.content=e.text??``,s.parts=[{type:`text`,text:e.text??``}];else{s.content+=e.text??``;let t=n[n.length-1];t?.type===`text`?t.text+=e.text??``:n.push({type:`text`,text:e.text??``})}f(),y?.()}else if(e.type===`tool_call`){let t=n.find(t=>t.type===`tool`&&t.id===e.id);t?(t.name=e.name,t.input=e.input,t.rawInput=e.rawInput):n.push({type:`tool`,id:e.id,name:e.name,input:e.input,rawInput:e.rawInput,pending:!0}),f(),y?.()}else if(e.type===`tool_result`){let t=n.find(t=>t.type===`tool`&&t.id===e.id);t&&(t.result=e.result,t.isError=e.isError,t.pending=!1,t.rawInput=void 0),f(),y?.()}else if(e.type===`thinking`){let t=n[n.length-1];t?.type===`thinking`?t.text+=e.text??``:n.push({type:`thinking`,text:e.text??``}),f(),y?.()}else if(e.type===`context_usage`){if(typeof e.inputTokens==`number`){let n=typeof e.contextWindow==`number`?e.contextWindow:2e5;u(t.id,e.inputTokens,n)}}else e.type===`done`&&(l=!0,d(t.id))},h=e=>{s.content=s.content||v.global.t(`aiChat.errorMessage`,{message:e?.message??v.global.t(`aiChat.unknownError`)}),f(),d(t.id)},g=()=>{l||(a.get(t.id)?.unsubscribe(),a.delete(t.id))};n.sessionType===`claude-code`?a.set(t.id,b.chat.streamViaClaudeCode.subscribe({conversationId:t.id,prompt:``,reconnect:!0},{onData:m,onError:h,onComplete:g})):a.set(t.id,b.chat.send.subscribe({conversationId:t.id,messages:[],reconnect:!0},{onData:m,onError:h,onComplete:g}))}async function F(t){if(p(t))return!1;let n=(await b.chat.getStreamingStatus.query()).find(e=>e.conversationId===t&&e.status===`running`);if(!n||(await g(t),p(t)))return!1;let r=e.value.find(e=>e.id===t);return r?(k()&&console.log(`[ai-chat][reconnect]`,z(),`single-conversation`,{id:t.slice(0,8),type:n.sessionType}),P(r,n),!0):!1}let I=new Map;function L(e,t=8){if(p(e)||I.has(e))return;let n=0,r=async()=>{if(p(e)){I.delete(e);return}if(await F(e)||n>=t){I.delete(e);return}n+=1;let i=Math.min(100*2**n,1500),a=setTimeout(()=>{r()},i);I.set(e,a)};r()}async function R(){try{let t=await b.chat.getStreamingStatus.query();if(!t.length)return;let r=t.filter(e=>e.status===`running`),i=r;if(k()&&console.log(`[ai-chat][reconnect]`,z(),`sessions`,{total:t.length,running:r.length,order:i.map(e=>({id:e.conversationId.slice(0,8),status:e.status,type:e.sessionType}))}),!i.length)return;let a=i.find(t=>{let n=e.value.find(e=>e.id===t.conversationId);return!n||!n.isCompanion});!n.value&&!h.value&&a&&(n.value=a.conversationId);for(let t of i){await g(t.conversationId);let n=e.value.find(e=>e.id===t.conversationId);n&&P(n,t)}}catch{}}return{pendingImages:C,isUploadingImage:w,uploadImages:D,addPendingImage:O,removePendingImage:j,clearPendingImages:te,sendMessage:N,stopStreaming:M,reconnectActiveStreams:R,reconnectConversationIfRunning:F,scheduleReconnectConversationIfRunning:L,setScrollCallback:x}}function ie(e,t,n){let r=new Map,i=new Map,a=new Set,o=null;function s(e,t=3e4){return Math.min(1e3*2**e,t)}function c(t){e.value=e.value.map(e=>e.id===t?{...e}:e)}function l(t){t.size!==0&&(e.value=e.value.map(e=>t.has(e.id)?{...e}:e))}async function u(t){let n=e.value.find(e=>e.id===t);if(n?.workflowType===`scenario`)try{let e=await b.scenario.getSnapshot.query({conversationId:t});e&&(n.scenarioSnapshot=e)}catch{}}function d(t,o,l,p,m,h=0){r.get(t)?.unsubscribe(),r.delete(t),a.delete(t);let g=`[scenario:`+t.slice(0,8)+`]`;k()&&console.log(g,`subscribing to run bus`,{retryCount:h});let _=b.scenario.run.subscribe({conversationId:t,scenarioId:o,userRequest:l,...p?.runnerOverride?{runnerOverride:p.runnerOverride}:{},...p?.modelOverride?.trim()?{modelOverride:p.modelOverride.trim()}:{},...p?.agentId?{agentId:p.agentId}:{},...p?.projectId?{projectId:p.projectId}:{},...p?.resume?{resume:!0}:{}},{onData(o){let s=e.value.find(e=>e.id===t);if(s){if(o.type===`node_started`){let e=o.nodeId.endsWith(`:synthesis`),n=e?o.nodeId.replace(`:synthesis`,``):o.nodeId;if(k()&&console.log(g,`node_started`,o.nodeId),(!e||s.scenarioNodeStates?.[n]!==`done`)&&(s.scenarioNodeStates={...s.scenarioNodeStates,[n]:`running`}),s.scenarioWaitingInputs?.[n]){let{[n]:e,...t}=s.scenarioWaitingInputs;s.scenarioWaitingInputs=t}if(e&&(s.scenarioSynthesisRunning=!0),e&&!a.has(t)){let e=s.scenarioSnapshot?.nodes?.find(e=>e.id===n),r=e?e.label||e.id:`Leader`;s.scenarioReadme=`${s.scenarioReadme??``}\n### [Live] ${r} synthesis in progress\n\n`,a.add(t)}let r=s.scenarioSnapshot?.nodes?.some(e=>e.id===n)??!1;n&&!e&&!r&&u(t).then(()=>{c(t)})}else if(o.type===`node_delta`){let e=o.nodeId.replace(`:synthesis`,``),n=o.nodeId.endsWith(`:synthesis`),r=n?`${e}:synthesis`:e;if(s.scenarioNodeOutputs||={},s.scenarioNodeOutputs[r]=(s.scenarioNodeOutputs[r]??``)+o.text,n){if(!a.has(t)){let n=s.scenarioSnapshot?.nodes?.find(t=>t.id===e),r=n?n.label||n.id:`Leader`;s.scenarioReadme=`${s.scenarioReadme??``}\n### [Live] ${r} synthesis in progress\n\n`,a.add(t)}s.scenarioReadme=`${s.scenarioReadme??``}${o.text}`,m?.()}}else if(o.type===`node_status`)s.scenarioNodeStatuses||={},s.scenarioNodeStatuses[o.nodeId]=o.text;else if(o.type===`node_tool_call`){let e=[...s.scenarioNodeToolEvents?.[o.nodeId]??[]],t=e.findIndex(e=>e.id===o.id),n=o.rawInput;t>=0?e[t]={...e[t],input:o.input,rawInput:n}:e.push({id:o.id,name:o.name,input:o.input,rawInput:n,pending:!0}),s.scenarioNodeToolEvents={...s.scenarioNodeToolEvents,[o.nodeId]:e}}else if(o.type===`node_tool_result`){let e=[...s.scenarioNodeToolEvents?.[o.nodeId]??[]],t=e.findIndex(e=>e.id===o.id);t>=0&&(e[t]={...e[t],result:o.result,isError:o.isError,pending:!1,rawInput:void 0},s.scenarioNodeToolEvents={...s.scenarioNodeToolEvents,[o.nodeId]:e})}else if(o.type===`node_thinking`)s.scenarioNodeThinking||={},s.scenarioNodeThinking[o.nodeId]||(s.scenarioNodeThinking[o.nodeId]=[]),s.scenarioNodeThinking[o.nodeId].push(o.text);else if(o.type===`node_duration`)s.scenarioNodeDurations={...s.scenarioNodeDurations,[o.nodeId]:o.durationMs};else if(o.type===`node_prompt`){let e=s.scenarioNodePrompts?.[o.nodeId]??[];s.scenarioNodePrompts={...s.scenarioNodePrompts,[o.nodeId]:[...e,{label:o.label,systemContext:o.systemContext,userMessage:o.userMessage}]}}else if(o.type===`node_command`){let e=s.scenarioNodeCommands?.[o.nodeId]??[];s.scenarioNodeCommands={...s.scenarioNodeCommands,[o.nodeId]:[...e,o.command]}}else if(o.type===`node_done`){let e=o.nodeId.endsWith(`:synthesis`),t=e?o.nodeId.replace(`:synthesis`,``):o.nodeId,n=e?`${t}:synthesis`:t,r=e?`synthesized`:o.state??`done`;if(k()&&console.log(g,`node_done`,o.nodeId,`→`,r),s.scenarioNodeStates={...s.scenarioNodeStates,[t]:r},s.scenarioNodeOutputs={...s.scenarioNodeOutputs,[n]:o.output},s.scenarioWaitingInputs?.[t]){let{[t]:e,...n}=s.scenarioWaitingInputs;s.scenarioWaitingInputs=n}e&&(s.scenarioSynthesisRunning=!1,s.scenarioReadme=`${s.scenarioReadme??``}\n\n`)}else if(o.type===`node_state_change`)k()&&console.log(g,`node_state_change`,o.nodeId,`→`,o.state),s.scenarioNodeStates={...s.scenarioNodeStates,[o.nodeId]:o.state};else if(o.type===`node_waiting_input`)k()&&console.log(g,`node_waiting_input`,o.nodeId,o.question),s.scenarioNodeStates={...s.scenarioNodeStates,[o.nodeId]:`waiting_input`},s.scenarioWaitingInputs={...s.scenarioWaitingInputs,[o.nodeId]:o.question};else if(o.type===`node_error`){if(k()&&console.log(g,`node_error`,o.nodeId,o.error),s.scenarioNodeStates={...s.scenarioNodeStates,[o.nodeId]:`error`},s.scenarioWaitingInputs?.[o.nodeId]){let{[o.nodeId]:e,...t}=s.scenarioWaitingInputs;s.scenarioWaitingInputs=t}}else o.type===`readme_append`?s.scenarioReadme=(s.scenarioReadme??``)+o.text:o.type===`scenario_complete`?(k()&&console.log(g,`scenario_complete`),s.scenarioRunning=!1,s.scenarioSynthesisRunning=!1,r.delete(t),i.delete(t),a.delete(t),n(t,o.summary),u(t).then(()=>{c(t)}),m?.()):o.type===`scenario_error`&&(k()&&console.log(g,`scenario_error`,o.error),s.scenarioRunning=!1,s.scenarioSynthesisRunning=!1,r.delete(t),i.delete(t),a.delete(t),u(t).then(()=>{c(t)}),f().add({severity:`error`,summary:`Scenario run failed`,detail:o.error,life:5e3}));c(t)}},onError(n){k()&&console.warn(g,`subscription error (WS drop?)`,n,{retryCount:h}),r.delete(t);let i=e.value.find(e=>e.id===t);if(!i?.scenarioRunning)return;if(h>=5){k()&&console.warn(g,`max retries reached — marking run as stopped`),i.scenarioRunning=!1,i.scenarioSynthesisRunning=!1,c(t);return}let a=s(h);k()&&console.log(g,`retrying in`,a+`ms`,`(attempt`,h+1+`/5)`),setTimeout(()=>{let n=e.value.find(e=>e.id===t);n?.scenarioRunning&&(n.scenarioReadme=``,c(t),d(t,o,l,void 0,m,h+1))},a)},onComplete(){k()&&console.log(g,`subscription complete`),r.delete(t);let n=e.value.find(e=>e.id===t);n?.scenarioRunning&&(k()&&console.warn(g,`onComplete fired without scenario_complete — marking stopped`),n.scenarioRunning=!1,n.scenarioSynthesisRunning=!1,c(t))}});r.set(t,_)}function p(n,r,a,o,s){let l=e.value.find(e=>e.id===n);if(!l)return;k()&&console.log(`[scenario] startScenarioRun`,n.slice(0,8)),i.set(n,a),l.scenarioRunning=!0,l.scenarioSynthesisRunning=!1;let u={...s,...l.projectId?{projectId:l.projectId}:{}};Object.keys(u).length&&(l.scenarioRunOverrides=u),l.scenarioNodeStates={},l.scenarioNodeOutputs={},l.scenarioNodeStatuses={},l.scenarioNodeThinking={},l.scenarioNodeToolEvents={},l.scenarioNodeDurations={},l.scenarioNodePrompts={},l.scenarioNodeCommands={},l.scenarioWaitingInputs={},l.scenarioReadme=``,c(n),t(n,a),d(n,r,a,u,o,0)}async function m(t,n,r){let i=e.value.find(e=>e.id===t);i&&i.workflowType===`scenario`&&!i.scenarioRunning&&(i.scenarioRunning=!0,i.scenarioSynthesisRunning=!1,c(t),d(t,i.workflowId,``,{resume:!0,...r,...i.projectId?{projectId:i.projectId}:{}},n,0))}async function h(t){await b.scenario.stop.mutate({conversationId:t}),r.get(t)?.unsubscribe(),r.delete(t);let n=e.value.find(e=>e.id===t);n&&(n.scenarioRunning=!1,n.scenarioSynthesisRunning=!1,c(t))}async function g(){let t=e.value.filter(e=>e.workflowType===`scenario`);k()&&console.log(`[scenario] reconnectScenarioRuns — checking`,t.length,`scenario conversations`);let n=new Set,i=[];await Promise.all(t.map(async e=>{try{if(r.has(e.id)){k()&&console.log(`[scenario] conv`,e.id.slice(0,8),`already subscribed — skip reconnect`);return}let{running:t}=await b.scenario.isRunning.query({conversationId:e.id});if(k()&&console.log(`[scenario] conv`,e.id.slice(0,8),`isRunning:`,t),!t){(e.scenarioRunning||e.scenarioSynthesisRunning)&&(e.scenarioRunning=!1,e.scenarioSynthesisRunning=!1,n.add(e.id));return}!e.scenarioRunning||e.scenarioSynthesisRunning||e.scenarioReadme?(e.scenarioRunning=!0,e.scenarioSynthesisRunning=!1,e.scenarioReadme=``,n.add(e.id)):(e.scenarioRunning=!0,e.scenarioSynthesisRunning=!1),i.push({conversationId:e.id,scenarioId:e.workflowId})}catch(t){console.error(`[scenario] reconnect check failed for`,e.id.slice(0,8),t)}})),l(n);for(let e of i)d(e.conversationId,e.scenarioId,``,void 0,void 0,0)}function _(){o||=y(()=>{let t=e.value.filter(e=>e.workflowType===`scenario`&&e.scenarioRunning);k()&&console.log(`[scenario] WS reopened — resubscribing`,t.length,`active runs`);let n=new Set;for(let e of t)e.scenarioReadme&&(e.scenarioReadme=``,n.add(e.id));l(n);for(let e of t){let t=i.get(e.id)??``;d(e.id,e.workflowId,t,void 0,void 0,0)}})}function v(e){r.get(e)?.unsubscribe(),r.delete(e)}return{startScenarioRun:p,resumeScenario:m,stopScenario:h,reconnectScenarioRuns:g,_subscribeToScenarioRun:d,initWsReopenHandler:_,cleanupForConversation:v}}var B=()=>new Date().toISOString(),V=g(`ai-chat`,()=>{let e=f(),r=S(),i=_();async function o(e){let[t,n,r]=await Promise.all([b.scenario.getPersistedRunState.query({conversationId:e}),b.scenario.getReadme.query({conversationId:e}).catch(()=>null),b.scenario.getSnapshot.query({conversationId:e}).catch(()=>null)]);return{persisted:t??null,readme:n,snapshot:r??null}}function c(e,t){if(t.persisted&&(e.scenarioNodeStates=t.persisted.nodeStates,e.scenarioNodeOutputs=t.persisted.nodeOutputs,t.persisted.waitingInputs&&Object.keys(t.persisted.waitingInputs).length>0&&(e.scenarioWaitingInputs=t.persisted.waitingInputs)),typeof t.readme==`string`&&(e.scenarioReadme=t.readme),t.snapshot){let n=w.safeParse(t.snapshot);n.success&&(e.scenarioSnapshot=n.data)}}let l=n([]),u=t(localStorage.getItem(F)),d=t(!1),p=new Map,m=t(new Set),h=t(new Set),g=t({}),ee=s(()=>{let e=u.value;return!!(e&&m.value.has(e))});a(u,e=>{e?localStorage.setItem(F,e):localStorage.removeItem(F)});let T=s(()=>l.value.find(e=>e.id===u.value)??null);function E(e,t){let n=e.updatedAt??e.createdAt??0;return(t.updatedAt??t.createdAt??0)-n}let D=s(()=>l.value.filter(e=>!e.archived&&!e.isCompanion&&e.pinOrder!==void 0).slice().sort((e,t)=>e.pinOrder-t.pinOrder)),O=t([]),A=s(()=>new Set(O.value.map(e=>e.id)));function j(e){return e.sectionId!==void 0&&A.value.has(e.sectionId)}let z=s(()=>{let e={};for(let t of O.value)e[t.id]=[];for(let t of l.value)t.archived||t.isCompanion||t.pinOrder!==void 0||!j(t)||e[t.sectionId].push(t);for(let t of Object.values(e))t.sort((e,t)=>(e.sectionOrder??0)-(t.sectionOrder??0));return e}),V=s(()=>l.value.filter(e=>!e.archived&&!e.isCompanion&&e.pinOrder===void 0&&!j(e)).slice().sort(E)),H=s(()=>l.value.filter(e=>e.archived&&!e.isCompanion).slice().sort(E)),U=s(()=>{let e=u.value;return e&&m.value.has(e)?e:null}),W=(()=>{try{let e=localStorage.getItem(I);return e?new Set(JSON.parse(e)):new Set}catch{return new Set}})(),G=t(W);a(G,e=>{let t=[...e];t.length?localStorage.setItem(I,JSON.stringify(t)):localStorage.removeItem(I)});let ae=t(!1);function oe(e){let t=ae.value||r.isOpen.value;if(!e||e===u.value&&t||G.value.has(e))return;let n=new Set(G.value);n.add(e),G.value=n}function se(e,t=!0){if(m.value.has(e)){let t=new Set(m.value);t.delete(e),m.value=t}p.delete(e),t&&oe(e)}function K(e){return m.value.has(e)}function ce(e){let t=new Set(G.value);t.delete(e),G.value=t}let q=t(!1),le=t(!1),ue=t(localStorage.getItem(`runeya:ai-chat-model`)??`haiku`),de=t(localStorage.getItem(`runeya:ai-chat-effort`)??`low`);a(ue,e=>{e?localStorage.setItem(N,e):localStorage.removeItem(N)}),a(de,e=>{e?localStorage.setItem(P,e):localStorage.removeItem(P)});async function fe(e){try{let t=await b.chat.checkCliAvailability.query(e?{agentId:e}:void 0);q.value=t.available,le.value=t.codexAvailable}catch{q.value=!1,le.value=!1}}let pe=t({"claude-code":[],codex:[]}),me=new Map;function he(e){if(pe.value[e].length>0)return Promise.resolve();let t=me.get(e);if(t)return t;let n=b.chat.listCliModels.query({runner:e}).then(t=>{pe.value={...pe.value,[e]:t.models}}).catch(()=>{}).finally(()=>{me.delete(e)});return me.set(e,n),n}let J=t(new Map),ge=s(()=>{let e=T.value?.id;return e?J.value.get(e)??null:null}),_e=s(()=>{let e=ge.value;return e?Math.min(100,Math.round(e.inputTokens/e.contextWindow*100)):null});function ve(e,t,n){let r=new Map(J.value);r.set(e,{inputTokens:t,contextWindow:n}),J.value=r}let ye=t([]),Y=t(localStorage.getItem(L)),X=t(localStorage.getItem(`runeya:ai-chat-provider-model`)??``),be=t([]),xe=t(!1);a(Y,e=>{e?localStorage.setItem(L,e):localStorage.removeItem(L)}),a(X,e=>{e?localStorage.setItem(R,e):localStorage.removeItem(R)});async function Se(e){xe.value=!0;try{be.value=await b.chat.listModels.query({providerId:e??Y.value??void 0,...C()})}catch{be.value=[]}finally{xe.value=!1}}async function Ce(){let e=await b.settings.listAIProviders.query(C());ye.value=e.map(e=>({id:e.id,label:`${e.name} (${e.provider})`,provider:e.provider,model:e.model??``}));let t=Y.value;if(t&&e.some(e=>e.id===t)){let n=e.find(e=>e.id===t),r=X.value;X.value=r||(n.model??``)}else e.length>0&&(Y.value=e[0].id,X.value=e[0].model??``);setTimeout(()=>Se(),50)}async function we(e){if(!e)return;let t=ye.value.find(t=>t.id===e);t&&(X.value=t.model??``),await Se(e??void 0)}function Te(e){e&&(Y.value=e,we(e))}a(T,e=>{let t=e?.providerId??null;t&&t!==Y.value?(Y.value=t,we(t)):!t&&!e?.runner&&Y.value&&Se()});let Z=null,Ee=null,De=null,Oe=null;function ke(e,t){return!t||!e.messagesOmitted||t.messagesOmitted?e:{...e,messages:t.messages,messagesOmitted:void 0,messageCount:void 0}}function Ae(e,t){if(!t)return e;let n=ke(e,t),r=n===e?e.messages.map((e,n)=>{let r=t.messages[n]?.parts;return r?{...e,parts:r}:e}):n.messages;return{...n,messages:r,scenarioRunning:t.scenarioRunning,scenarioSynthesisRunning:t.scenarioSynthesisRunning,scenarioSnapshot:t.scenarioSnapshot,scenarioNodeStates:t.scenarioNodeStates,scenarioNodeOutputs:t.scenarioNodeOutputs,scenarioReadme:t.scenarioReadme,activeScenarioNodeId:t.activeScenarioNodeId}}function je(e){let t=ae.value||r.isOpen.value;if(K(e.id)){let t=l.value.findIndex(t=>t.id===e.id);if(t<0)return;let n=l.value[t],r=[...l.value];r[t]={...n,companionEnabled:e.companionEnabled,companionRunner:e.companionRunner,companionModel:e.companionModel,companionEffort:e.companionEffort,companionConversationId:e.companionConversationId},l.value=r;return}let n=l.value.findIndex(t=>t.id===e.id);if(n>=0){let r=l.value[n],i=e.messages.length>r.messages.length,a=e.messages[e.messages.length-1],o=r.messages[r.messages.length-1],s=a?.role===`assistant`&&(o?.role!==`assistant`||a.content!==o.content),c=Ae(e,r),u=[...l.value];u[n]=c,l.value=u,(i||s)&&(oe(e.id),t&&$.scheduleReconnectConversationIfRunning(e.id));return}l.value=[e,...l.value],oe(e.id),t&&$.scheduleReconnectConversationIfRunning(e.id)}let Me=new Map;function Ne(e){if(!l.value.find(t=>t.id===e)?.messagesOmitted)return Promise.resolve();let t=Me.get(e);if(t)return t;let n=(async()=>{try{let t=await b.chat.conversations.get.query({id:e}),n=l.value.findIndex(t=>t.id===e),r=l.value[n];if(!r?.messagesOmitted||K(e))return;let i=[...l.value];i[n]={...r,messages:t.messages,messagesOmitted:void 0,messageCount:void 0},l.value=i}catch{}finally{Me.delete(e)}})();return Me.set(e,n),n}a(()=>T.value?.messagesOmitted?T.value.id:null,e=>{e&&Ne(e)},{immediate:!0});function Pe(e){l.value=l.value.filter(t=>t.id!==e),u.value===e&&(u.value=V.value[0]?.id??null),p.get(e)?.unsubscribe(),se(e,!1),Q.cleanupForConversation(e)}function Fe(){Ee||=b.chat.conversations.onCompanionThinking.subscribe(void 0,{onData:e=>{h.value=new Set(e.thinking),g.value=e.skipped??{}}})}function Ie(e){return!!e&&h.value.has(e)}function Le(e){return e&&g.value[e]||null}function Re(){Z||=b.chat.conversations.onChanged.subscribe({projectId:i.activeProjectId??void 0,orgId:i.activeOrgId},{onData:e=>{if(e.type===`initial`){let t=e.conversations,n=new Map(l.value.map(e=>[e.id,e])),r=new Set,i=t.map(e=>{r.add(e.id);let t=n.get(e.id);return t&&K(e.id)?t:Ae(e,t)});for(let e of l.value)!r.has(e.id)&&K(e.id)&&i.push(e);l.value=i;return}if(e.type===`deleted`){Pe(e.id);return}je(e.conversation)},onError:()=>{Z=null,De&&clearTimeout(De),De=setTimeout(()=>{De=null,Re()},1e3)},onComplete:()=>{Z=null}})}async function ze(){let e=await b.chat.conversations.list.query({projectId:i.activeProjectId??void 0,orgId:i.activeOrgId}),t=e;await qe(),await Promise.all(t.map(async e=>{if(e.workflowType===`scenario`)try{c(e,await o(e.id))}catch{}}));let n=new Map(l.value.map(e=>[e.id,e]));l.value=t.map(e=>ke(e,n.get(e.id)));let r=new Map(J.value);for(let t of e){let e=t;e.contextUsage&&r.set(e.id,e.contextUsage)}J.value=r,u.value||=[...D.value,...O.value.flatMap(e=>z.value[e.id]??[]),...V.value.filter(ne),...V.value.filter(e=>!ne(e))][0]?.id??null}async function Be(e){let t=await b.chat.conversations.create.mutate({title:e?.title??v.global.t(`aiChat.newConversation`),runner:e?.runner,providerId:e?.providerId,scenarioId:e?.scenarioId,scenarioInput:e?.scenarioInput,kanbanBoardId:e?.kanbanBoardId,kanbanCardId:e?.kanbanCardId,agentId:e?.agentId,projectId:i.activeProjectId??void 0,orgId:i.activeOrgId}),n=t;return e?.scenarioRunOverrides&&(n.scenarioRunOverrides=e.scenarioRunOverrides),l.value=[n,...l.value.filter(e=>e.id!==n.id)],u.value=t.id,n}function Ve(e){u.value=e,ce(e)}async function He(e){l.value=l.value.filter(t=>t.id!==e),u.value===e&&(u.value=V.value[0]?.id??null),p.get(e)?.unsubscribe(),se(e,!1);try{await b.chat.conversations.delete.mutate({id:e})}catch{}}async function Ue(t,n){let r=l.value.find(e=>e.id===t);if(!r)return;let i=r.archived,a=Date.now();l.value=l.value.map(e=>e.id===t?{...e,archived:n,updatedAt:a}:e),n&&u.value===t&&(u.value=V.value[0]?.id??null);try{await b.chat.conversations.archive.mutate({id:t,archived:n})}catch{l.value=l.value.map(e=>e.id===t?{...e,archived:i}:e),e.add({severity:`error`,summary:v.global.t(`common.error`),detail:v.global.t(`aiChat.archiveError`),life:3e3})}}function We(){let e={pinned:D.value.map(e=>e.id),sections:{}};for(let[t,n]of Object.entries(z.value))e.sections[t]=n.map(e=>e.id);return e}async function Ge(t){let n=te(We(),t);if(n.unchanged)return;let r=l.value;l.value=M(l.value,t,n.removed);let a=i.activeProjectId;try{for(let e of n.pinAdded)await b.chat.conversations.pin.mutate({id:e,pinned:!0});for(let e of n.unpinnedToList)await b.chat.conversations.pin.mutate({id:e,pinned:!1});if(n.pinnedChanged&&t.pinned.length>0&&await b.chat.conversations.reorderPinned.mutate({ids:t.pinned}),a){for(let e of n.changedSections){let n=t.sections[e]??[];n.length>0&&await b.chat.conversations.setSection.mutate({projectId:a,sectionId:e,ids:n})}n.sectionToList.length>0&&await b.chat.conversations.setSection.mutate({projectId:a,sectionId:null,ids:n.sectionToList})}}catch{l.value=r,e.add({severity:`error`,summary:v.global.t(`common.error`),detail:v.global.t(`aiChat.layoutError`),life:3e3})}}async function Ke(e,t){let n=We();for(let[t,r]of Object.entries(n.sections))n.sections[t]=r.filter(t=>t!==e);n.pinned=t?[...n.pinned.filter(t=>t!==e),e]:n.pinned.filter(t=>t!==e),await Ge(n)}async function qe(){let e=i.activeProjectId;try{O.value=e?await b.chat.sections.list.query({projectId:e}):[]}catch{O.value=[]}}function Je(){e.add({severity:`error`,summary:v.global.t(`common.error`),detail:v.global.t(`aiChat.sectionError`),life:3e3})}async function Ye(e){let t=i.activeProjectId;if(!t)return null;try{let n=await b.chat.sections.create.mutate({projectId:t,name:e});return O.value=[...O.value,n],n}catch{return Je(),null}}async function Xe(e,t){let n=i.activeProjectId;if(!n)return;let r=O.value;O.value=O.value.map(n=>n.id===e?{...n,name:t}:n);try{await b.chat.sections.rename.mutate({projectId:n,id:e,name:t})}catch{O.value=r,Je()}}async function Ze(e){let t=i.activeProjectId;if(!t)return;let n={sections:O.value,conversations:l.value},r=(z.value[e]??[]).map(e=>e.id);O.value=O.value.filter(t=>t.id!==e),l.value=M(l.value,{pinned:[],sections:{}},r);try{await b.chat.sections.delete.mutate({projectId:t,id:e})}catch{O.value=n.sections,l.value=n.conversations,Je()}}async function Qe(e){let t=i.activeProjectId;if(!t)return;let n=O.value.map(e=>e.id);if(n.length===e.length&&n.every((t,n)=>t===e[n]))return;let r=O.value,a=new Map(e.map((e,t)=>[e,t]));O.value=O.value.map(e=>({...e,order:a.get(e.id)??e.order})).sort((e,t)=>e.order-t.order);try{await b.chat.sections.reorder.mutate({projectId:t,ids:e})}catch{O.value=r,Je()}}async function $e(t,n,r={}){let{runner:i,model:a,effort:o}=r,s=l.value.find(e=>e.id===t);if(!s)return;let c=s.companionEnabled,u=s.companionRunner,d=s.companionModel,f=s.companionEffort;l.value=l.value.map(e=>e.id===t?{...e,companionEnabled:n,...i?{companionRunner:i}:{},...a===void 0?{}:{companionModel:a||void 0},...o===void 0?{}:{companionEffort:o||void 0}}:e);try{let e=await b.chat.conversations.setCompanion.mutate({id:t,enabled:n,runner:i,model:a,effort:o});l.value=l.value.map(n=>n.id===t?{...n,companionConversationId:e.companionConversationId}:n)}catch(n){l.value=l.value.map(e=>e.id===t?{...e,companionEnabled:c,companionRunner:u,companionModel:d,companionEffort:f}:e),e.add({severity:`error`,summary:v.global.t(`aiChat.companionToggleFailed`),detail:n.message,life:4e3})}}async function et(e,t){let n=t.trim();if(l.value.find(t=>t.id===e)&&n){let t=Date.now();l.value=l.value.map(r=>r.id===e?{...r,title:n,updatedAt:t}:r);try{await b.chat.conversations.update.mutate({id:e,title:n})}catch{}}}function tt(e,t){let n=l.value.find(t=>t.id===e);n&&(n.messages=[...n.messages??[],{role:`user`,content:t}])}function nt(e,t){let n=l.value.find(t=>t.id===e);n&&(n.messages=[...n.messages??[],{role:`assistant`,content:t}])}async function rt(e,t,n){let r=l.value.find(t=>t.id===e);if(r?.scenarioWaitingInputs?.[t]){let{[t]:n,...i}=r.scenarioWaitingInputs;r.scenarioWaitingInputs=i,l.value=l.value.map(t=>t.id===e?{...t}:t)}await b.scenario.sendNodeInput.mutate({conversationId:e,nodeId:t,text:n})}let Q=ie(l,tt,nt),$=re(l,u,T,m,p,q,ue,de,X,ve,se,K,()=>Be(),d,Ne);function it(e){return(e.runner??(e.isCli&&!e.providerId?`claude-code`:null))===`claude-code`}async function at(){let e=l.value.filter(e=>!e.archived&&!e.isCompanion&&it(e));if(e.length===0)return;let t=await Promise.allSettled(e.map(e=>b.chat.pty.activity.query({sessionId:e.id,agentId:e.agentId}).then(t=>({id:e.id,r:t})))),n=new Set(m.value),r=!1;for(let e of t){if(e.status!==`fulfilled`)continue;let{id:t,r:i}=e.value;if(p.has(t))continue;let a=i.running&&i.idleMs!==null&&i.idleMs<1500;a&&!n.has(t)?(n.add(t),r=!0):!a&&n.has(t)&&(n.delete(t),r=!0)}r&&(m.value=n)}let ot=x(at,1e3,`ai-chat:pty-activity`);function st(){ot.start(),ot.trigger()}let ct=!1;async function lt(){k()&&console.log(`[ai-chat][store]`,B(),`init:start`,{initialized:ct,conversations:l.value.length,activeId:u.value,streaming:m.value.size,drawerOpen:r.isOpen.value}),ct||(ct=!0,await ze(),k()&&console.log(`[ai-chat][store]`,B(),`init:after-loadConversations`,{conversations:l.value.length,activeId:u.value}),Re(),Fe(),await fe(),k()&&console.log(`[ai-chat][store]`,B(),`init:after-checkCliAvailability`,{claudeCodeAvailable:q.value,codexAvailable:le.value}),Ce()),m.value.size===0&&(await $.reconnectActiveStreams(),k()&&console.log(`[ai-chat][store]`,B(),`init:after-reconnectActiveStreams`,{streaming:m.value.size})),Q.reconnectScenarioRuns(),Q.initWsReopenHandler(),st(),Oe||=y(()=>{Z||Re(),Ee||Fe(),$.reconnectActiveStreams()}),k()&&console.log(`[ai-chat][store]`,B(),`init:end`,{initialized:ct,conversations:l.value.length,activeId:u.value,streaming:m.value.size})}return a(()=>[i.activeProjectId,i.activeOrgId],()=>{ct&&(Z?.unsubscribe(),Z=null,l.value=[],u.value=null,ze().then(()=>Re()))}),{isCompanionThinkingFor:Ie,ensureConversationLoaded:Ne,companionSkipFor:Le,conversations:l,activeId:u,activeConversation:T,filteredConversations:V,pinnedConversations:D,archivedConversations:H,applyLayout:Ge,sections:O,sectionConversations:z,createSection:Ye,renameSection:Xe,deleteSection:Ze,reorderSections:Qe,pinConversation:Ke,setCompanion:$e,isStreaming:ee,pendingNewConversation:d,streamingConvId:U,streamingConvIds:m,unreadConvIds:G,isChatPageVisible:ae,claudeCodeAvailable:q,codexAvailable:le,claudeCodeModel:ue,claudeCodeEffort:de,contextUsageMap:J,activeContextUsage:ge,contextPercent:_e,providers:ye,selectedProviderId:Y,selectedModel:X,availableModels:be,loadingModels:xe,fetchProviders:Ce,onProviderChange:Te,checkCliAvailability:fe,cliModels:pe,loadCliModels:he,refreshStreamingSessions:$.reconnectActiveStreams,pendingImages:$.pendingImages,isUploadingImage:$.isUploadingImage,uploadImage:$.addPendingImage,removePendingImage:$.removePendingImage,clearPendingImages:$.clearPendingImages,init:lt,loadConversations:ze,createConversation:Be,selectConversation:Ve,deleteConversation:He,archiveConversation:Ue,renameConversation:et,send:$.sendMessage,stopStreaming:$.stopStreaming,isConversationStreaming:K,markRead:ce,setScrollCallback:$.setScrollCallback,appendUserMessage:tt,appendAssistantMessage:nt,startScenarioRun:Q.startScenarioRun,resumeScenario:Q.resumeScenario,stopScenario:Q.stopScenario,reconnectScenarioRuns:Q.reconnectScenarioRuns,sendNodeInput:rt}}),H=g(`scenario`,()=>{let e=t([]),n=t(!1);async function r(){n.value=!0;try{e.value=await b.scenario.list.query(C())}catch{e.value=[]}finally{n.value=!1}}async function i(t){let n=await b.scenario.create.mutate(t);return e.value=[...e.value,n],n}async function a(t){let n=e.value.find(e=>e.id===t);if(!n)throw Error(`Scenario not found`);return i({name:`${n.name} (copie)`,description:n.description,leaderId:n.leaderId,groups:n.groups,nodes:n.nodes,traversalMode:n.traversalMode})}async function o(t,n){let r=await b.scenario.update.mutate({id:t,...n});return e.value=e.value.map(e=>e.id===t?r:e),r}async function s(t){await b.scenario.delete.mutate({id:t}),e.value=e.value.filter(e=>e.id!==t)}return{scenarios:e,loading:n,fetchScenarios:r,createScenario:i,duplicateScenario:a,updateScenario:o,deleteScenario:s}});export{k as a,A as i,V as n,D as o,ne as r,H as t};
|
|
7
|
+
`):null,W=_.agentId??V?.effectiveAgentId??void 0,oe=ee().currentProject?.activeEnvironmentId??void 0;try{if(_.runner===`claude-code`||_.runner===`codex`||_.isCli&&!_.providerId){let e=k.map(e=>({type:`image`,imageId:e.imageId,url:e.url,mimeType:e.mimeType,altText:e.fileName}));_.runner===`codex`?a.set(_.id,b.chat.streamViaCodex.subscribe({conversationId:_.id,prompt:t.trim(),contextNote:U??void 0,model:void 0,agentId:W,environmentId:oe,imageParts:e},{onData:re,onError:z,onComplete:ie})):a.set(_.id,b.chat.streamViaClaudeCode.subscribe({conversationId:_.id,prompt:t.trim(),contextNote:U??void 0,model:s.value??void 0,effort:c.value??void 0,agentId:W,environmentId:oe,imageIds:k.map(e=>e.imageId),imageParts:e},{onData:re,onError:z,onComplete:ie}))}else{let e=_.messages.slice(0,-1).map(e=>({role:e.role,content:e.content})),t=U?[{role:`user`,content:U},{role:`assistant`,content:`Compris, je tiendrai compte de ce contexte.`},...e]:e,n=k.map(e=>({type:`image`,imageId:e.imageId,url:e.url,mimeType:e.mimeType,altText:e.fileName}));a.set(_.id,b.chat.send.subscribe({conversationId:_.id,messages:t,model:l.value||void 0,contextNote:O,imageIds:k.map(e=>e.imageId),imageParts:n},{onData:re,onError:z,onComplete:ie}))}}catch(t){I.content=v.global.t(`aiChat.connectionError`,{message:t.message}),e.value=[...e.value],d(_.id)}}function P(t,n){if(p(t.id))return;let r=new Set(i.value);r.add(t.id),i.value=r;let o=t.messages[t.messages.length-1],s;o?.role===`assistant`?s=o:(s={role:`assistant`,content:``},t.messages.push(s)),e.value=[...e.value];let c=!1,l=!1,f=()=>{let n=e.value.findIndex(e=>e.id===t.id);if(n>=0){let t=[...e.value];t[n]={...t[n],messages:[...t[n].messages]},e.value=t}},m=e=>{s.parts||(s.parts=[]);let n=s.parts;if(e.type===`status`)s.status=e.text??``,f(),y?.();else if(e.type===`delta`){if(e.ts){let t=Date.now()-e.ts;t>100?console.warn(`[perf][reconnect] delta latency: ${t}ms`):console.debug(`[perf][reconnect] delta latency: ${t}ms`)}if(s.status=``,!c)c=!0,s.content=e.text??``,s.parts=[{type:`text`,text:e.text??``}];else{s.content+=e.text??``;let t=n[n.length-1];t?.type===`text`?t.text+=e.text??``:n.push({type:`text`,text:e.text??``})}f(),y?.()}else if(e.type===`tool_call`){let t=n.find(t=>t.type===`tool`&&t.id===e.id);t?(t.name=e.name,t.input=e.input,t.rawInput=e.rawInput):n.push({type:`tool`,id:e.id,name:e.name,input:e.input,rawInput:e.rawInput,pending:!0}),f(),y?.()}else if(e.type===`tool_result`){let t=n.find(t=>t.type===`tool`&&t.id===e.id);t&&(t.result=e.result,t.isError=e.isError,t.pending=!1,t.rawInput=void 0),f(),y?.()}else if(e.type===`thinking`){let t=n[n.length-1];t?.type===`thinking`?t.text+=e.text??``:n.push({type:`thinking`,text:e.text??``}),f(),y?.()}else if(e.type===`context_usage`){if(typeof e.inputTokens==`number`){let n=typeof e.contextWindow==`number`?e.contextWindow:2e5;u(t.id,e.inputTokens,n)}}else e.type===`done`&&(l=!0,d(t.id))},h=e=>{s.content=s.content||v.global.t(`aiChat.errorMessage`,{message:e?.message??v.global.t(`aiChat.unknownError`)}),f(),d(t.id)},g=()=>{l||(a.get(t.id)?.unsubscribe(),a.delete(t.id))};n.sessionType===`claude-code`?a.set(t.id,b.chat.streamViaClaudeCode.subscribe({conversationId:t.id,prompt:``,reconnect:!0},{onData:m,onError:h,onComplete:g})):a.set(t.id,b.chat.send.subscribe({conversationId:t.id,messages:[],reconnect:!0},{onData:m,onError:h,onComplete:g}))}async function F(t){if(p(t))return!1;let n=(await b.chat.getStreamingStatus.query()).find(e=>e.conversationId===t&&e.status===`running`);if(!n||(await g(t),p(t)))return!1;let r=e.value.find(e=>e.id===t);return r?(k()&&console.log(`[ai-chat][reconnect]`,z(),`single-conversation`,{id:t.slice(0,8),type:n.sessionType}),P(r,n),!0):!1}let I=new Map;function L(e,t=8){if(p(e)||I.has(e))return;let n=0,r=async()=>{if(p(e)){I.delete(e);return}if(await F(e)||n>=t){I.delete(e);return}n+=1;let i=Math.min(100*2**n,1500),a=setTimeout(()=>{r()},i);I.set(e,a)};r()}async function R(){try{let t=await b.chat.getStreamingStatus.query();if(!t.length)return;let r=t.filter(e=>e.status===`running`),i=r;if(k()&&console.log(`[ai-chat][reconnect]`,z(),`sessions`,{total:t.length,running:r.length,order:i.map(e=>({id:e.conversationId.slice(0,8),status:e.status,type:e.sessionType}))}),!i.length)return;let a=i.find(t=>{let n=e.value.find(e=>e.id===t.conversationId);return!n||!n.isCompanion});!n.value&&!h.value&&a&&(n.value=a.conversationId);for(let t of i){await g(t.conversationId);let n=e.value.find(e=>e.id===t.conversationId);n&&P(n,t)}}catch{}}return{pendingImages:C,isUploadingImage:w,uploadImages:D,addPendingImage:O,removePendingImage:j,clearPendingImages:te,sendMessage:N,stopStreaming:M,reconnectActiveStreams:R,reconnectConversationIfRunning:F,scheduleReconnectConversationIfRunning:L,setScrollCallback:x}}function ae(e,t,n){let r=new Map,i=new Map,a=new Set,o=null;function s(e,t=3e4){return Math.min(1e3*2**e,t)}function c(t){e.value=e.value.map(e=>e.id===t?{...e}:e)}function l(t){t.size!==0&&(e.value=e.value.map(e=>t.has(e.id)?{...e}:e))}async function u(t){let n=e.value.find(e=>e.id===t);if(n?.workflowType===`scenario`)try{let e=await b.scenario.getSnapshot.query({conversationId:t});e&&(n.scenarioSnapshot=e)}catch{}}function d(t,o,l,p,m,h=0){r.get(t)?.unsubscribe(),r.delete(t),a.delete(t);let g=`[scenario:`+t.slice(0,8)+`]`;k()&&console.log(g,`subscribing to run bus`,{retryCount:h});let _=b.scenario.run.subscribe({conversationId:t,scenarioId:o,userRequest:l,...p?.runnerOverride?{runnerOverride:p.runnerOverride}:{},...p?.modelOverride?.trim()?{modelOverride:p.modelOverride.trim()}:{},...p?.agentId?{agentId:p.agentId}:{},...p?.projectId?{projectId:p.projectId}:{},...p?.resume?{resume:!0}:{}},{onData(o){let s=e.value.find(e=>e.id===t);if(s){if(o.type===`node_started`){let e=o.nodeId.endsWith(`:synthesis`),n=e?o.nodeId.replace(`:synthesis`,``):o.nodeId;if(k()&&console.log(g,`node_started`,o.nodeId),(!e||s.scenarioNodeStates?.[n]!==`done`)&&(s.scenarioNodeStates={...s.scenarioNodeStates,[n]:`running`}),s.scenarioWaitingInputs?.[n]){let{[n]:e,...t}=s.scenarioWaitingInputs;s.scenarioWaitingInputs=t}if(e&&(s.scenarioSynthesisRunning=!0),e&&!a.has(t)){let e=s.scenarioSnapshot?.nodes?.find(e=>e.id===n),r=e?e.label||e.id:`Leader`;s.scenarioReadme=`${s.scenarioReadme??``}\n### [Live] ${r} synthesis in progress\n\n`,a.add(t)}let r=s.scenarioSnapshot?.nodes?.some(e=>e.id===n)??!1;n&&!e&&!r&&u(t).then(()=>{c(t)})}else if(o.type===`node_delta`){let e=o.nodeId.replace(`:synthesis`,``),n=o.nodeId.endsWith(`:synthesis`),r=n?`${e}:synthesis`:e;if(s.scenarioNodeOutputs||={},s.scenarioNodeOutputs[r]=(s.scenarioNodeOutputs[r]??``)+o.text,n){if(!a.has(t)){let n=s.scenarioSnapshot?.nodes?.find(t=>t.id===e),r=n?n.label||n.id:`Leader`;s.scenarioReadme=`${s.scenarioReadme??``}\n### [Live] ${r} synthesis in progress\n\n`,a.add(t)}s.scenarioReadme=`${s.scenarioReadme??``}${o.text}`,m?.()}}else if(o.type===`node_status`)s.scenarioNodeStatuses||={},s.scenarioNodeStatuses[o.nodeId]=o.text;else if(o.type===`node_tool_call`){let e=[...s.scenarioNodeToolEvents?.[o.nodeId]??[]],t=e.findIndex(e=>e.id===o.id),n=o.rawInput;t>=0?e[t]={...e[t],input:o.input,rawInput:n}:e.push({id:o.id,name:o.name,input:o.input,rawInput:n,pending:!0}),s.scenarioNodeToolEvents={...s.scenarioNodeToolEvents,[o.nodeId]:e}}else if(o.type===`node_tool_result`){let e=[...s.scenarioNodeToolEvents?.[o.nodeId]??[]],t=e.findIndex(e=>e.id===o.id);t>=0&&(e[t]={...e[t],result:o.result,isError:o.isError,pending:!1,rawInput:void 0},s.scenarioNodeToolEvents={...s.scenarioNodeToolEvents,[o.nodeId]:e})}else if(o.type===`node_thinking`)s.scenarioNodeThinking||={},s.scenarioNodeThinking[o.nodeId]||(s.scenarioNodeThinking[o.nodeId]=[]),s.scenarioNodeThinking[o.nodeId].push(o.text);else if(o.type===`node_duration`)s.scenarioNodeDurations={...s.scenarioNodeDurations,[o.nodeId]:o.durationMs};else if(o.type===`node_prompt`){let e=s.scenarioNodePrompts?.[o.nodeId]??[];s.scenarioNodePrompts={...s.scenarioNodePrompts,[o.nodeId]:[...e,{label:o.label,systemContext:o.systemContext,userMessage:o.userMessage}]}}else if(o.type===`node_command`){let e=s.scenarioNodeCommands?.[o.nodeId]??[];s.scenarioNodeCommands={...s.scenarioNodeCommands,[o.nodeId]:[...e,o.command]}}else if(o.type===`node_done`){let e=o.nodeId.endsWith(`:synthesis`),t=e?o.nodeId.replace(`:synthesis`,``):o.nodeId,n=e?`${t}:synthesis`:t,r=e?`synthesized`:o.state??`done`;if(k()&&console.log(g,`node_done`,o.nodeId,`→`,r),s.scenarioNodeStates={...s.scenarioNodeStates,[t]:r},s.scenarioNodeOutputs={...s.scenarioNodeOutputs,[n]:o.output},s.scenarioWaitingInputs?.[t]){let{[t]:e,...n}=s.scenarioWaitingInputs;s.scenarioWaitingInputs=n}e&&(s.scenarioSynthesisRunning=!1,s.scenarioReadme=`${s.scenarioReadme??``}\n\n`)}else if(o.type===`node_state_change`)k()&&console.log(g,`node_state_change`,o.nodeId,`→`,o.state),s.scenarioNodeStates={...s.scenarioNodeStates,[o.nodeId]:o.state};else if(o.type===`node_waiting_input`)k()&&console.log(g,`node_waiting_input`,o.nodeId,o.question),s.scenarioNodeStates={...s.scenarioNodeStates,[o.nodeId]:`waiting_input`},s.scenarioWaitingInputs={...s.scenarioWaitingInputs,[o.nodeId]:o.question};else if(o.type===`node_error`){if(k()&&console.log(g,`node_error`,o.nodeId,o.error),s.scenarioNodeStates={...s.scenarioNodeStates,[o.nodeId]:`error`},s.scenarioWaitingInputs?.[o.nodeId]){let{[o.nodeId]:e,...t}=s.scenarioWaitingInputs;s.scenarioWaitingInputs=t}}else o.type===`readme_append`?s.scenarioReadme=(s.scenarioReadme??``)+o.text:o.type===`scenario_complete`?(k()&&console.log(g,`scenario_complete`),s.scenarioRunning=!1,s.scenarioSynthesisRunning=!1,r.delete(t),i.delete(t),a.delete(t),n(t,o.summary),u(t).then(()=>{c(t)}),m?.()):o.type===`scenario_error`&&(k()&&console.log(g,`scenario_error`,o.error),s.scenarioRunning=!1,s.scenarioSynthesisRunning=!1,r.delete(t),i.delete(t),a.delete(t),u(t).then(()=>{c(t)}),f().add({severity:`error`,summary:`Scenario run failed`,detail:o.error,life:5e3}));c(t)}},onError(n){k()&&console.warn(g,`subscription error (WS drop?)`,n,{retryCount:h}),r.delete(t);let i=e.value.find(e=>e.id===t);if(!i?.scenarioRunning)return;if(h>=5){k()&&console.warn(g,`max retries reached — marking run as stopped`),i.scenarioRunning=!1,i.scenarioSynthesisRunning=!1,c(t);return}let a=s(h);k()&&console.log(g,`retrying in`,a+`ms`,`(attempt`,h+1+`/5)`),setTimeout(()=>{let n=e.value.find(e=>e.id===t);n?.scenarioRunning&&(n.scenarioReadme=``,c(t),d(t,o,l,void 0,m,h+1))},a)},onComplete(){k()&&console.log(g,`subscription complete`),r.delete(t);let n=e.value.find(e=>e.id===t);n?.scenarioRunning&&(k()&&console.warn(g,`onComplete fired without scenario_complete — marking stopped`),n.scenarioRunning=!1,n.scenarioSynthesisRunning=!1,c(t))}});r.set(t,_)}function p(n,r,a,o,s){let l=e.value.find(e=>e.id===n);if(!l)return;k()&&console.log(`[scenario] startScenarioRun`,n.slice(0,8)),i.set(n,a),l.scenarioRunning=!0,l.scenarioSynthesisRunning=!1;let u={...s,...l.projectId?{projectId:l.projectId}:{}};Object.keys(u).length&&(l.scenarioRunOverrides=u),l.scenarioNodeStates={},l.scenarioNodeOutputs={},l.scenarioNodeStatuses={},l.scenarioNodeThinking={},l.scenarioNodeToolEvents={},l.scenarioNodeDurations={},l.scenarioNodePrompts={},l.scenarioNodeCommands={},l.scenarioWaitingInputs={},l.scenarioReadme=``,c(n),t(n,a),d(n,r,a,u,o,0)}async function m(t,n,r){let i=e.value.find(e=>e.id===t);i&&i.workflowType===`scenario`&&!i.scenarioRunning&&(i.scenarioRunning=!0,i.scenarioSynthesisRunning=!1,c(t),d(t,i.workflowId,``,{resume:!0,...r,...i.projectId?{projectId:i.projectId}:{}},n,0))}async function h(t){await b.scenario.stop.mutate({conversationId:t}),r.get(t)?.unsubscribe(),r.delete(t);let n=e.value.find(e=>e.id===t);n&&(n.scenarioRunning=!1,n.scenarioSynthesisRunning=!1,c(t))}async function g(){let t=e.value.filter(e=>e.workflowType===`scenario`);k()&&console.log(`[scenario] reconnectScenarioRuns — checking`,t.length,`scenario conversations`);let n=new Set,i=[];await Promise.all(t.map(async e=>{try{if(r.has(e.id)){k()&&console.log(`[scenario] conv`,e.id.slice(0,8),`already subscribed — skip reconnect`);return}let{running:t}=await b.scenario.isRunning.query({conversationId:e.id});if(k()&&console.log(`[scenario] conv`,e.id.slice(0,8),`isRunning:`,t),!t){(e.scenarioRunning||e.scenarioSynthesisRunning)&&(e.scenarioRunning=!1,e.scenarioSynthesisRunning=!1,n.add(e.id));return}!e.scenarioRunning||e.scenarioSynthesisRunning||e.scenarioReadme?(e.scenarioRunning=!0,e.scenarioSynthesisRunning=!1,e.scenarioReadme=``,n.add(e.id)):(e.scenarioRunning=!0,e.scenarioSynthesisRunning=!1),i.push({conversationId:e.id,scenarioId:e.workflowId})}catch(t){console.error(`[scenario] reconnect check failed for`,e.id.slice(0,8),t)}})),l(n);for(let e of i)d(e.conversationId,e.scenarioId,``,void 0,void 0,0)}function _(){o||=y(()=>{let t=e.value.filter(e=>e.workflowType===`scenario`&&e.scenarioRunning);k()&&console.log(`[scenario] WS reopened — resubscribing`,t.length,`active runs`);let n=new Set;for(let e of t)e.scenarioReadme&&(e.scenarioReadme=``,n.add(e.id));l(n);for(let e of t){let t=i.get(e.id)??``;d(e.id,e.workflowId,t,void 0,void 0,0)}})}function v(e){r.get(e)?.unsubscribe(),r.delete(e)}return{startScenarioRun:p,resumeScenario:m,stopScenario:h,reconnectScenarioRuns:g,_subscribeToScenarioRun:d,initWsReopenHandler:_,cleanupForConversation:v}}var B=()=>new Date().toISOString(),V=g(`ai-chat`,()=>{let e=f(),r=S(),i=_();async function o(e){let[t,n,r]=await Promise.all([b.scenario.getPersistedRunState.query({conversationId:e}),b.scenario.getReadme.query({conversationId:e}).catch(()=>null),b.scenario.getSnapshot.query({conversationId:e}).catch(()=>null)]);return{persisted:t??null,readme:n,snapshot:r??null}}function c(e,t){if(t.persisted&&(e.scenarioNodeStates=t.persisted.nodeStates,e.scenarioNodeOutputs=t.persisted.nodeOutputs,t.persisted.waitingInputs&&Object.keys(t.persisted.waitingInputs).length>0&&(e.scenarioWaitingInputs=t.persisted.waitingInputs)),typeof t.readme==`string`&&(e.scenarioReadme=t.readme),t.snapshot){let n=w.safeParse(t.snapshot);n.success&&(e.scenarioSnapshot=n.data)}}let l=n([]),u=t(localStorage.getItem(F)),d=t(!1),p=new Map,m=t(new Set),h=t(new Set),g=t({}),ee=s(()=>{let e=u.value;return!!(e&&m.value.has(e))});function T(){return`${i.activeOrgId??``}/${i.activeProjectId??``}`}function E(){try{let e=JSON.parse(localStorage.getItem(`runeya:ai-chat-active-id-by-project`)??`{}`);return e&&typeof e==`object`?e:{}}catch{return{}}}function D(e){localStorage.setItem(I,JSON.stringify({...E(),[T()]:e}))}a(u,e=>{e?(localStorage.setItem(F,e),D(e)):localStorage.removeItem(F)});let O=s(()=>l.value.find(e=>e.id===u.value)??null);function A(e,t){let n=e.updatedAt??e.createdAt??0;return(t.updatedAt??t.createdAt??0)-n}let j=s(()=>l.value.filter(e=>!e.archived&&!e.isCompanion&&e.pinOrder!==void 0).slice().sort((e,t)=>e.pinOrder-t.pinOrder)),z=t([]),V=s(()=>new Set(z.value.map(e=>e.id)));function H(e){return e.sectionId!==void 0&&V.value.has(e.sectionId)}let U=s(()=>{let e={};for(let t of z.value)e[t.id]=[];for(let t of l.value)t.archived||t.isCompanion||t.pinOrder!==void 0||!H(t)||e[t.sectionId].push(t);for(let t of Object.values(e))t.sort((e,t)=>(e.sectionOrder??0)-(t.sectionOrder??0));return e}),W=s(()=>l.value.filter(e=>!e.archived&&!e.isCompanion&&e.pinOrder===void 0&&!H(e)).slice().sort(A)),oe=s(()=>l.value.filter(e=>e.archived&&!e.isCompanion).slice().sort(A)),se=s(()=>{let e=u.value;return e&&m.value.has(e)?e:null}),ce=(()=>{try{let e=localStorage.getItem(L);return e?new Set(JSON.parse(e)):new Set}catch{return new Set}})(),G=t(ce);a(G,e=>{let t=[...e];t.length?localStorage.setItem(L,JSON.stringify(t)):localStorage.removeItem(L)});let le=t(!1);function ue(e){let t=le.value||r.isOpen.value;if(!e||e===u.value&&t||G.value.has(e))return;let n=new Set(G.value);n.add(e),G.value=n}function de(e,t=!0){if(m.value.has(e)){let t=new Set(m.value);t.delete(e),m.value=t}p.delete(e),t&&ue(e)}function K(e){return m.value.has(e)}function fe(e){let t=new Set(G.value);t.delete(e),G.value=t}let q=t(!1),pe=t(!1),me=t(localStorage.getItem(`runeya:ai-chat-model`)??`haiku`),he=t(localStorage.getItem(`runeya:ai-chat-effort`)??`low`);a(me,e=>{e?localStorage.setItem(N,e):localStorage.removeItem(N)}),a(he,e=>{e?localStorage.setItem(P,e):localStorage.removeItem(P)});async function ge(e){try{let t=await b.chat.checkCliAvailability.query(e?{agentId:e}:void 0);q.value=t.available,pe.value=t.codexAvailable}catch{q.value=!1,pe.value=!1}}let _e=t({"claude-code":[],codex:[]}),ve=new Map;function ye(e){if(_e.value[e].length>0)return Promise.resolve();let t=ve.get(e);if(t)return t;let n=b.chat.listCliModels.query({runner:e}).then(t=>{_e.value={..._e.value,[e]:t.models}}).catch(()=>{}).finally(()=>{ve.delete(e)});return ve.set(e,n),n}let J=t(new Map),be=s(()=>{let e=O.value?.id;return e?J.value.get(e)??null:null}),xe=s(()=>{let e=be.value;return e?Math.min(100,Math.round(e.inputTokens/e.contextWindow*100)):null});function Se(e,t,n){let r=new Map(J.value);r.set(e,{inputTokens:t,contextWindow:n}),J.value=r}let Ce=t([]),Y=t(localStorage.getItem(R)),X=t(localStorage.getItem(`runeya:ai-chat-provider-model`)??``),we=t([]),Te=t(!1);a(Y,e=>{e?localStorage.setItem(R,e):localStorage.removeItem(R)}),a(X,e=>{e?localStorage.setItem(re,e):localStorage.removeItem(re)});async function Ee(e){Te.value=!0;try{we.value=await b.chat.listModels.query({providerId:e??Y.value??void 0,...C()})}catch{we.value=[]}finally{Te.value=!1}}async function De(){let e=await b.settings.listAIProviders.query(C());Ce.value=e.map(e=>({id:e.id,label:`${e.name} (${e.provider})`,provider:e.provider,model:e.model??``}));let t=Y.value;if(t&&e.some(e=>e.id===t)){let n=e.find(e=>e.id===t),r=X.value;X.value=r||(n.model??``)}else e.length>0&&(Y.value=e[0].id,X.value=e[0].model??``);setTimeout(()=>Ee(),50)}async function Oe(e){if(!e)return;let t=Ce.value.find(t=>t.id===e);t&&(X.value=t.model??``),await Ee(e??void 0)}function ke(e){e&&(Y.value=e,Oe(e))}a(O,e=>{let t=e?.providerId??null;t&&t!==Y.value?(Y.value=t,Oe(t)):!t&&!e?.runner&&Y.value&&Ee()});let Z=null,Ae=null,je=null,Me=null;function Ne(e,t){return!t||!e.messagesOmitted||t.messagesOmitted?e:{...e,messages:t.messages,messagesOmitted:void 0,messageCount:void 0}}function Pe(e,t){if(!t)return e;let n=Ne(e,t),r=n===e?e.messages.map((e,n)=>{let r=t.messages[n]?.parts;return r?{...e,parts:r}:e}):n.messages;return{...n,messages:r,scenarioRunning:t.scenarioRunning,scenarioSynthesisRunning:t.scenarioSynthesisRunning,scenarioSnapshot:t.scenarioSnapshot,scenarioNodeStates:t.scenarioNodeStates,scenarioNodeOutputs:t.scenarioNodeOutputs,scenarioReadme:t.scenarioReadme,activeScenarioNodeId:t.activeScenarioNodeId}}function Fe(e){let t=le.value||r.isOpen.value;if(K(e.id)){let t=l.value.findIndex(t=>t.id===e.id);if(t<0)return;let n=l.value[t],r=[...l.value];r[t]={...n,companionEnabled:e.companionEnabled,companionRunner:e.companionRunner,companionModel:e.companionModel,companionEffort:e.companionEffort,companionConversationId:e.companionConversationId},l.value=r;return}let n=l.value.findIndex(t=>t.id===e.id);if(n>=0){let r=l.value[n],i=e.messages.length>r.messages.length,a=e.messages[e.messages.length-1],o=r.messages[r.messages.length-1],s=a?.role===`assistant`&&(o?.role!==`assistant`||a.content!==o.content),c=Pe(e,r),u=[...l.value];u[n]=c,l.value=u,(i||s)&&(ue(e.id),t&&$.scheduleReconnectConversationIfRunning(e.id));return}l.value=[e,...l.value],ue(e.id),t&&$.scheduleReconnectConversationIfRunning(e.id)}let Ie=new Map;function Le(e){if(!l.value.find(t=>t.id===e)?.messagesOmitted)return Promise.resolve();let t=Ie.get(e);if(t)return t;let n=(async()=>{try{let t=await b.chat.conversations.get.query({id:e}),n=l.value.findIndex(t=>t.id===e),r=l.value[n];if(!r?.messagesOmitted||K(e))return;let i=[...l.value];i[n]={...r,messages:t.messages,messagesOmitted:void 0,messageCount:void 0},l.value=i}catch{}finally{Ie.delete(e)}})();return Ie.set(e,n),n}a(()=>O.value?.messagesOmitted?O.value.id:null,e=>{e&&Le(e)},{immediate:!0});function Re(e){l.value=l.value.filter(t=>t.id!==e),u.value===e&&(u.value=W.value[0]?.id??null),p.get(e)?.unsubscribe(),de(e,!1),Q.cleanupForConversation(e)}function ze(){Ae||=b.chat.conversations.onCompanionThinking.subscribe(void 0,{onData:e=>{h.value=new Set(e.thinking),g.value=e.skipped??{}}})}function Be(e){return!!e&&h.value.has(e)}function Ve(e){return e&&g.value[e]||null}function He(){Z||=b.chat.conversations.onChanged.subscribe({projectId:i.activeProjectId??void 0,orgId:i.activeOrgId},{onData:e=>{if(e.type===`initial`){let t=e.conversations,n=new Map(l.value.map(e=>[e.id,e])),r=new Set,i=t.map(e=>{r.add(e.id);let t=n.get(e.id);return t&&K(e.id)?t:Pe(e,t)});for(let e of l.value)!r.has(e.id)&&K(e.id)&&i.push(e);l.value=i;return}if(e.type===`deleted`){Re(e.id);return}Fe(e.conversation)},onError:()=>{Z=null,je&&clearTimeout(je),je=setTimeout(()=>{je=null,He()},1e3)},onComplete:()=>{Z=null}})}let Ue=0,We=0;async function Ge(){let e=++Ue;We++;let t=await b.chat.conversations.list.query({projectId:i.activeProjectId??void 0,orgId:i.activeOrgId}),n=t;if(await $e(),await Promise.all(n.map(async e=>{if(e.workflowType===`scenario`)try{c(e,await o(e.id))}catch{}})),e!==Ue)return;let r=new Map(l.value.map(e=>[e.id,e]));l.value=n.map(e=>Ne(e,r.get(e.id)));let a=new Map(J.value);for(let e of t){let t=e;t.contextUsage&&a.set(t.id,t.contextUsage)}if(J.value=a,u.value&&!n.some(e=>e.id===u.value)&&(u.value=null),!u.value){let e=n.find(e=>e.id===E()[T()]&&!e.archived&&!e.isCompanion);u.value=e?.id??[...j.value,...z.value.flatMap(e=>U.value[e.id]??[]),...W.value.filter(ne),...W.value.filter(e=>!ne(e))][0]?.id??null}u.value&&D(u.value)}async function Ke(e){let t=await b.chat.conversations.create.mutate({title:e?.title??v.global.t(`aiChat.newConversation`),runner:e?.runner,providerId:e?.providerId,scenarioId:e?.scenarioId,scenarioInput:e?.scenarioInput,kanbanBoardId:e?.kanbanBoardId,kanbanCardId:e?.kanbanCardId,agentId:e?.agentId,projectId:i.activeProjectId??void 0,orgId:i.activeOrgId}),n=t;return e?.scenarioRunOverrides&&(n.scenarioRunOverrides=e.scenarioRunOverrides),l.value=[n,...l.value.filter(e=>e.id!==n.id)],u.value=t.id,n}function qe(e){u.value=e,fe(e)}async function Je(e){l.value=l.value.filter(t=>t.id!==e),u.value===e&&(u.value=W.value[0]?.id??null),p.get(e)?.unsubscribe(),de(e,!1);try{await b.chat.conversations.delete.mutate({id:e})}catch{}}async function Ye(t,n){let r=l.value.find(e=>e.id===t);if(!r)return;let i=r.archived,a=Date.now();l.value=l.value.map(e=>e.id===t?{...e,archived:n,updatedAt:a}:e),n&&u.value===t&&(u.value=W.value[0]?.id??null);try{await b.chat.conversations.archive.mutate({id:t,archived:n})}catch{l.value=l.value.map(e=>e.id===t?{...e,archived:i}:e),e.add({severity:`error`,summary:v.global.t(`common.error`),detail:v.global.t(`aiChat.archiveError`),life:3e3})}}function Xe(){let e={pinned:j.value.map(e=>e.id),sections:{}};for(let[t,n]of Object.entries(U.value))e.sections[t]=n.map(e=>e.id);return e}async function Ze(t){let n=te(Xe(),t);if(n.unchanged)return;let r=l.value;l.value=M(l.value,t,n.removed);let a=i.activeProjectId;try{for(let e of n.pinAdded)await b.chat.conversations.pin.mutate({id:e,pinned:!0});for(let e of n.unpinnedToList)await b.chat.conversations.pin.mutate({id:e,pinned:!1});if(n.pinnedChanged&&t.pinned.length>0&&await b.chat.conversations.reorderPinned.mutate({ids:t.pinned}),a){for(let e of n.changedSections){let n=t.sections[e]??[];n.length>0&&await b.chat.conversations.setSection.mutate({projectId:a,sectionId:e,ids:n})}n.sectionToList.length>0&&await b.chat.conversations.setSection.mutate({projectId:a,sectionId:null,ids:n.sectionToList})}}catch{l.value=r,e.add({severity:`error`,summary:v.global.t(`common.error`),detail:v.global.t(`aiChat.layoutError`),life:3e3})}}async function Qe(e,t){let n=Xe();for(let[t,r]of Object.entries(n.sections))n.sections[t]=r.filter(t=>t!==e);n.pinned=t?[...n.pinned.filter(t=>t!==e),e]:n.pinned.filter(t=>t!==e),await Ze(n)}async function $e(){let e=i.activeProjectId,t=++We,n;try{n=e?await b.chat.sections.list.query({projectId:e}):[]}catch{n=[]}t===We&&(z.value=n)}function et(){e.add({severity:`error`,summary:v.global.t(`common.error`),detail:v.global.t(`aiChat.sectionError`),life:3e3})}async function tt(e){let t=i.activeProjectId;if(!t)return null;try{let n=await b.chat.sections.create.mutate({projectId:t,name:e});return z.value=[...z.value,n],n}catch{return et(),null}}async function nt(e,t){let n=i.activeProjectId;if(!n)return;let r=z.value;z.value=z.value.map(n=>n.id===e?{...n,name:t}:n);try{await b.chat.sections.rename.mutate({projectId:n,id:e,name:t})}catch{z.value=r,et()}}async function rt(e){let t=i.activeProjectId;if(!t)return;let n={sections:z.value,conversations:l.value},r=(U.value[e]??[]).map(e=>e.id);z.value=z.value.filter(t=>t.id!==e),l.value=M(l.value,{pinned:[],sections:{}},r);try{await b.chat.sections.delete.mutate({projectId:t,id:e})}catch{z.value=n.sections,l.value=n.conversations,et()}}async function it(e){let t=i.activeProjectId;if(!t)return;let n=z.value.map(e=>e.id);if(n.length===e.length&&n.every((t,n)=>t===e[n]))return;let r=z.value,a=new Map(e.map((e,t)=>[e,t]));z.value=z.value.map(e=>({...e,order:a.get(e.id)??e.order})).sort((e,t)=>e.order-t.order);try{await b.chat.sections.reorder.mutate({projectId:t,ids:e})}catch{z.value=r,et()}}async function at(t,n,r={}){let{runner:i,model:a,effort:o}=r,s=l.value.find(e=>e.id===t);if(!s)return;let c=s.companionEnabled,u=s.companionRunner,d=s.companionModel,f=s.companionEffort;l.value=l.value.map(e=>e.id===t?{...e,companionEnabled:n,...i?{companionRunner:i}:{},...a===void 0?{}:{companionModel:a||void 0},...o===void 0?{}:{companionEffort:o||void 0}}:e);try{let e=await b.chat.conversations.setCompanion.mutate({id:t,enabled:n,runner:i,model:a,effort:o});l.value=l.value.map(n=>n.id===t?{...n,companionConversationId:e.companionConversationId}:n)}catch(n){l.value=l.value.map(e=>e.id===t?{...e,companionEnabled:c,companionRunner:u,companionModel:d,companionEffort:f}:e),e.add({severity:`error`,summary:v.global.t(`aiChat.companionToggleFailed`),detail:n.message,life:4e3})}}async function ot(e,t){let n=t.trim();if(l.value.find(t=>t.id===e)&&n){let t=Date.now();l.value=l.value.map(r=>r.id===e?{...r,title:n,updatedAt:t}:r);try{await b.chat.conversations.update.mutate({id:e,title:n})}catch{}}}function st(e,t){let n=l.value.find(t=>t.id===e);n&&(n.messages=[...n.messages??[],{role:`user`,content:t}])}function ct(e,t){let n=l.value.find(t=>t.id===e);n&&(n.messages=[...n.messages??[],{role:`assistant`,content:t}])}async function lt(e,t,n){let r=l.value.find(t=>t.id===e);if(r?.scenarioWaitingInputs?.[t]){let{[t]:n,...i}=r.scenarioWaitingInputs;r.scenarioWaitingInputs=i,l.value=l.value.map(t=>t.id===e?{...t}:t)}await b.scenario.sendNodeInput.mutate({conversationId:e,nodeId:t,text:n})}let Q=ae(l,st,ct),$=ie(l,u,O,m,p,q,me,he,X,Se,de,K,()=>Ke(),d,Le);function ut(e){return(e.runner??(e.isCli&&!e.providerId?`claude-code`:null))===`claude-code`}async function dt(){let e=l.value.filter(e=>!e.archived&&!e.isCompanion&&ut(e));if(e.length===0)return;let t=await Promise.allSettled(e.map(e=>b.chat.pty.activity.query({sessionId:e.id,agentId:e.agentId}).then(t=>({id:e.id,r:t})))),n=new Set(m.value),r=!1;for(let e of t){if(e.status!==`fulfilled`)continue;let{id:t,r:i}=e.value;if(p.has(t))continue;let a=i.running&&i.idleMs!==null&&i.idleMs<1500;a&&!n.has(t)?(n.add(t),r=!0):!a&&n.has(t)&&(n.delete(t),r=!0)}r&&(m.value=n)}let ft=x(dt,1e3,`ai-chat:pty-activity`);function pt(){ft.start(),ft.trigger()}let mt=!1;async function ht(){k()&&console.log(`[ai-chat][store]`,B(),`init:start`,{initialized:mt,conversations:l.value.length,activeId:u.value,streaming:m.value.size,drawerOpen:r.isOpen.value}),mt||(mt=!0,await Ge(),k()&&console.log(`[ai-chat][store]`,B(),`init:after-loadConversations`,{conversations:l.value.length,activeId:u.value}),He(),ze(),await ge(),k()&&console.log(`[ai-chat][store]`,B(),`init:after-checkCliAvailability`,{claudeCodeAvailable:q.value,codexAvailable:pe.value}),De()),m.value.size===0&&(await $.reconnectActiveStreams(),k()&&console.log(`[ai-chat][store]`,B(),`init:after-reconnectActiveStreams`,{streaming:m.value.size})),Q.reconnectScenarioRuns(),Q.initWsReopenHandler(),pt(),Me||=y(()=>{Z||He(),Ae||ze(),$.reconnectActiveStreams()}),k()&&console.log(`[ai-chat][store]`,B(),`init:end`,{initialized:mt,conversations:l.value.length,activeId:u.value,streaming:m.value.size})}return a(()=>[i.activeProjectId,i.activeOrgId],()=>{mt&&(Z?.unsubscribe(),Z=null,l.value=[],u.value=null,Ge().then(()=>He()))}),{isCompanionThinkingFor:Be,ensureConversationLoaded:Le,companionSkipFor:Ve,conversations:l,activeId:u,activeConversation:O,filteredConversations:W,pinnedConversations:j,archivedConversations:oe,applyLayout:Ze,sections:z,sectionConversations:U,createSection:tt,renameSection:nt,deleteSection:rt,reorderSections:it,pinConversation:Qe,setCompanion:at,isStreaming:ee,pendingNewConversation:d,streamingConvId:se,streamingConvIds:m,unreadConvIds:G,isChatPageVisible:le,claudeCodeAvailable:q,codexAvailable:pe,claudeCodeModel:me,claudeCodeEffort:he,contextUsageMap:J,activeContextUsage:be,contextPercent:xe,providers:Ce,selectedProviderId:Y,selectedModel:X,availableModels:we,loadingModels:Te,fetchProviders:De,onProviderChange:ke,checkCliAvailability:ge,cliModels:_e,loadCliModels:ye,refreshStreamingSessions:$.reconnectActiveStreams,pendingImages:$.pendingImages,isUploadingImage:$.isUploadingImage,uploadImage:$.addPendingImage,removePendingImage:$.removePendingImage,clearPendingImages:$.clearPendingImages,init:ht,loadConversations:Ge,createConversation:Ke,selectConversation:qe,deleteConversation:Je,archiveConversation:Ye,renameConversation:ot,send:$.sendMessage,stopStreaming:$.stopStreaming,isConversationStreaming:K,markRead:fe,setScrollCallback:$.setScrollCallback,appendUserMessage:st,appendAssistantMessage:ct,startScenarioRun:Q.startScenarioRun,resumeScenario:Q.resumeScenario,stopScenario:Q.stopScenario,reconnectScenarioRuns:Q.reconnectScenarioRuns,sendNodeInput:lt}}),H=g(`scenario`,()=>{let e=t([]),n=t(!1);async function r(){n.value=!0;try{e.value=await b.scenario.list.query(C())}catch{e.value=[]}finally{n.value=!1}}async function i(t){let n=await b.scenario.create.mutate(t);return e.value=[...e.value,n],n}async function a(t){let n=e.value.find(e=>e.id===t);if(!n)throw Error(`Scenario not found`);return i({name:`${n.name} (copie)`,description:n.description,leaderId:n.leaderId,groups:n.groups,nodes:n.nodes,traversalMode:n.traversalMode})}async function o(t,n){let r=await b.scenario.update.mutate({id:t,...n});return e.value=e.value.map(e=>e.id===t?r:e),r}async function s(t){await b.scenario.delete.mutate({id:t}),e.value=e.value.filter(e=>e.id!==t)}return{scenarios:e,loading:n,fetchScenarios:r,createScenario:i,duplicateScenario:a,updateScenario:o,deleteScenario:s}});export{k as a,A as i,V as n,D as o,ne as r,H as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as e}from"./reactivity.esm-bundler-BQ9SB2vv.js";import{Ht as t,g as n}from"./runtime-core.esm-bundler-DujKY9QV.js";import{i as r,n as i}from"./project-launch.store-
|
|
1
|
+
import{C as e}from"./reactivity.esm-bundler-BQ9SB2vv.js";import{Ht as t,g as n}from"./runtime-core.esm-bundler-DujKY9QV.js";import{i as r,n as i}from"./project-launch.store-y7JBMNiE.js";import{r as a}from"./trpc-Drabzwpd.js";import{r as o}from"./project.store-DGJr0Qr9.js";import{n as s}from"./error-DpF7X5iu.js";var c=r(`service`,()=>{let r=e([]),c=e(!1),l=e(null),u=n(()=>r.value.length),d=n(()=>e=>r.value.find(t=>t.id===e)??null),f=n(()=>e=>r.value.filter(t=>e.includes(t.id))),p=e(void 0);t(()=>{let e=i();return`${e.activeOrgId??`local`}::${e.activeProjectId??``}`},()=>{p.value!==void 0&&m()});async function m(e){let t=i().activeRef(),n=e??(t?{projectId:t.id,orgId:t.orgId}:null);p.value=n,c.value=!0,l.value=null;try{r.value=await a.service.list.query(n??void 0)}catch(e){l.value=s(e)??`Failed to fetch services`}finally{c.value=!1}}async function h(e){l.value=null;try{let t=await a.service.get.query({id:e}),n=r.value.findIndex(t=>t.id===e);if(n>=0){let e=[...r.value];e[n]=t,r.value=e}return t}catch(e){return l.value=s(e)??`Failed to fetch service`,null}}async function g(e){l.value=null;try{let t=await a.service.create.mutate(e);return r.value=[...r.value,t],t}catch(e){return l.value=s(e)??`Failed to create service`,null}}async function _(e,t){l.value=null;try{let n=r.value.find(t=>t.id===e),i=await a.service.update.mutate({id:e,...t}),s=r.value.findIndex(t=>t.id===e);if(s>=0){let e=[...r.value];e[s]=i,r.value=e}if(t.name&&n&&t.name!==n.name){let e=o();e.currentProjectId&&await e.fetchAll(e.currentProjectId,!0)}return i}catch(e){return l.value=s(e)??`Failed to update service`,null}}async function v(e){l.value=null;try{return await a.service.delete.mutate({id:e}),r.value=r.value.filter(t=>t.id!==e),!0}catch(e){return l.value=s(e)??`Failed to delete service`,!1}}return{services:r,loading:c,error:l,serviceCount:u,getById:d,getByIds:f,fetchAll:m,fetchOne:h,create:g,update:_,remove:v}});export{c as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{n as t}from"./project.store-
|
|
1
|
+
import{n as e}from"./rolldown-runtime-Dd_uD5pT.js";import{n as t}from"./project.store-DGJr0Qr9.js";var n=e({settingsScope:()=>r});function r(){let e=t().currentProject;return e?{projectId:e.id,orgId:e.orgId??null}:{}}export{n,r as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{C as e}from"./reactivity.esm-bundler-BQ9SB2vv.js";import{Ht as t,g as n}from"./runtime-core.esm-bundler-DujKY9QV.js";import{P as r}from"./src--GO-VSJ0.js";import{i}from"./project-launch.store-
|
|
1
|
+
import{C as e}from"./reactivity.esm-bundler-BQ9SB2vv.js";import{Ht as t,g as n}from"./runtime-core.esm-bundler-DujKY9QV.js";import{P as r}from"./src--GO-VSJ0.js";import{i}from"./project-launch.store-y7JBMNiE.js";import{r as a}from"./trpc-Drabzwpd.js";import{n as o}from"./project.store-DGJr0Qr9.js";import{t as s}from"./settings-scope-Bv7QGPrt.js";var c=i(`settings`,()=>{let i=r(),c=e([]),l=e(!1),u=e(!1),d=e(null),f=n(()=>[...c.value].sort((e,t)=>e.name.localeCompare(t.name))),p=n(()=>f.value.filter(e=>!e.builtin)),m=null,h,g=0;function _(){g+=1,v()}function v(){let e=s(),t=e.orgId??void 0;m&&h===t||(b(),h=t,m=a.settings.onParsersChanged.subscribe(e,{onData(e){c.value=e},onError(){m=null}}))}function y(){g=Math.max(0,g-1),g===0&&b()}function b(){m?.unsubscribe(),m=null,h=void 0}t(()=>o().currentProject?.orgId??null,()=>{g!==0&&(x(),v())});async function x(){l.value=!0;try{let e=await a.settings.listParsers.query(s());c.value=e}catch(e){let t=e instanceof Error?e.message:`Failed to fetch parsers`;i.add({severity:`error`,summary:`Error`,detail:t,life:3e3})}finally{l.value=!1}}async function S(e){l.value=!0;try{let t=await a.settings.createParser.mutate({name:e.name,description:e.description,code:e.code,enabled:e.enabled??!0,version:2,...s()});return c.value=[...c.value,t],u.value=!1,i.add({severity:`success`,summary:`Success`,detail:`Parser "${t.name}" created`,life:3e3}),t}catch(e){let t=e instanceof Error?e.message:`Failed to create parser`;throw i.add({severity:`error`,summary:`Error`,detail:t,life:3e3}),e}finally{l.value=!1}}async function C(e){l.value=!0;try{let t=await a.settings.updateParser.mutate({...e,...s()});return c.value=c.value.map(n=>n.id===e.id?t:n),d.value=null,i.add({severity:`success`,summary:`Success`,detail:`Parser "${t.name}" updated`,life:3e3}),t}catch(e){let t=e instanceof Error?e.message:`Failed to update parser`;throw i.add({severity:`error`,summary:`Error`,detail:t,life:3e3}),e}finally{l.value=!1}}async function w(e){l.value=!0;try{await a.settings.deleteParser.mutate({id:e,...s()}),c.value=c.value.filter(t=>t.id!==e),i.add({severity:`success`,summary:`Success`,detail:`Parser deleted`,life:3e3})}catch(e){let t=e instanceof Error?e.message:`Failed to delete parser`;throw i.add({severity:`error`,summary:`Error`,detail:t,life:3e3}),e}finally{l.value=!1}}async function T(e,t){l.value=!0;try{let n=await a.settings.testParser.mutate({code:e,sampleLogs:t});return i.add({severity:`info`,summary:`Validation`,detail:`Validated ${n.results.length} log(s)`,life:3e3}),n}catch(e){let t=e instanceof Error?e.message:`Validation failed`;throw i.add({severity:`error`,summary:`Validation Error`,detail:t,life:3e3}),e}finally{l.value=!1}}function E(){d.value=null,u.value=!0}function D(e){d.value={...e},u.value=!0}function O(){u.value=!1,d.value=null}return{parsers:c,sortedParsers:f,userParsers:p,loading:l,createDialogOpen:u,editingParser:d,fetchParsers:x,subscribeParsers:_,unsubscribeParsers:y,createParser:S,updateParser:C,deleteParser:w,testParser:T,openCreateDialog:E,openEditDialog:D,closeDialog:O}});export{c as t};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{B as e,C as t,N as n,x as r}from"./reactivity.esm-bundler-BQ9SB2vv.js";import{D as i,E as a,Ht as o,_ as s,b as c,bt as l,ct as u,en as d,g as f,k as p,mt as m,nn as h,o as g,qt as _,rn as v,tt as y,v as b,xt as x,y as S}from"./runtime-core.esm-bundler-DujKY9QV.js";import{F as C,I as w}from"./floating-ui.dom-DWhsZyqT.js";import{G as T,J as E,K as D,O as ee,S as te,W as O,Y as k,dt as A,ft as j,q as ne}from"./src--GO-VSJ0.js";import{r as re}from"./composables-DiiOYol8.js";import{F as ie,P as ae}from"./index-B9DJf2V0.js";var M=`runeya.chat.sound`,oe=t(se()??!0);function se(){if(typeof localStorage>`u`)return null;let e=localStorage.getItem(M);return e===null?null:e===`1`}function ce(e){oe.value=e;try{localStorage.setItem(M,e?`1`:`0`)}catch{}}async function le(e){try{let t=(await e.$fetch(`/user/prefs`,{method:`GET`}))?.data?.prefs?.chatSound;typeof t==`boolean`&&ce(t)}catch{}}function ue(e,t){e.$fetch(`/user/prefs`,{method:`POST`,body:{prefs:{chatSound:t}}})}var N=null;function de(){if(oe.value&&typeof window<`u`)try{let e=window.AudioContext??window.webkitAudioContext;if(!e)return;N??=new e,N.state===`suspended`&&N.resume();let t=N.currentTime,n=N.createOscillator(),r=N.createGain();n.type=`sine`,n.frequency.setValueAtTime(660,t),n.frequency.exponentialRampToValueAtTime(880,t+.08),r.gain.setValueAtTime(1e-4,t),r.gain.exponentialRampToValueAtTime(.16,t+.012),r.gain.exponentialRampToValueAtTime(1e-4,t+.25),n.connect(r).connect(N.destination),n.start(t),n.stop(t+.26)}catch{}}var fe={class:`chat`},pe={class:`sidebar`},me={class:`group`},he={class:`group-head`},ge={class:`acts`},_e={class:`list`},ve=[`onClick`],ye={class:`hash`},be={class:`name`},xe={key:0,class:`badge`},Se={class:`group`},Ce={class:`group-head`},we={class:`list`},Te=[`onClick`],Ee={class:`name`},De={key:0,class:`badge`},Oe={class:`main`},ke={class:`retention-banner__text`},Ae={class:`retention-banner__cta`},je={class:`pane-head`},Me={key:0},Ne={class:`head-actions`},Pe={class:`sel-count`},Fe={key:0,class:`loading-older`},Ie={key:1,class:`empty`},Le=[`onClick`],Re={key:0,class:`ti ti-check`},ze=[`src`,`onError`],Be={class:`msg-body`},Ve={class:`msg-head`},He={class:`msg-author`},Ue={class:`msg-time`},We=[`innerHTML`],Ge={key:0,class:`msg-cards`},Ke={key:1,class:`error`},qe={key:2,class:`placeholder`},Je={class:`hash-input`},Ye={class:`toggle-row`},Xe={key:0,class:`dlg-empty`},Ze={key:1,class:`pick-list`},Qe=[`onClick`],$e={class:`pick-name`},et={class:`join`},tt={key:0,class:`dlg-empty`},nt={class:`dlg-hint`},rt={key:0,class:`dlg-empty`},it={key:1,class:`pick-list`},at=[`onClick`],ot={class:`pick-avatar`},st={class:`pick-name`},ct={key:0,class:`ti ti-check picked`},lt={key:0,class:`dlg-empty`},ut={key:0,class:`dlg-empty`},dt={key:1,class:`pick-list`},ft=[`onClick`],pt={class:`pick-avatar`},mt={class:`pick-name`},ht={key:0,class:`ti ti-check picked`},gt=80,_t=120,P=j(p({__name:`ChatPanel`,props:{client:{},orgId:{},cloudApiBaseUrl:{},avatarUrl:{},streamUrl:{type:Function,default:void 0},currentUserId:{default:void 0},members:{},t:{},enableSelectToAi:{type:Boolean,default:!1},notifyOnUnread:{type:Boolean,default:!0},internalOrigins:{default:()=>[]},cardColumn:{type:Function,default:void 0}},emits:[`channel-read`,`ai-context`,`internal-link`,`upgrade`,`card-refs`],setup(p,{emit:te}){let O=p,j=te,M=O.t,se=n(O,`orgId`),N=f(()=>O.client),P=f(()=>O.currentUserId),F=re(N.value,se,{...O.streamUrl?{streamUrl:O.streamUrl}:{baseURL:O.cloudApiBaseUrl},currentUserId:P}),I=f(()=>O.members),L=t(null);function vt(e){return new Date(e).toLocaleDateString(void 0,{year:`numeric`,month:`long`,day:`numeric`})}async function yt(e){if(L.value=null,e)try{let t=await N.value.$fetch(`/chat/retention/status`,{method:`GET`,query:{organizationId:e}});L.value=t.data??null}catch{}}o(se,e=>void yt(e),{immediate:!0});let R=f(()=>{let e=L.value;return e?e.capped&&e.enforcing?{text:M(`retention.enforcing`,{days:e.retentionDays}),enforcing:!0}:e.capped&&e.cutoffAt?{text:M(`retention.grace`,{date:vt(e.cutoffAt),days:e.retentionDays}),enforcing:!1}:e.pending?{text:M(`retention.pending`,{date:vt(e.pending.effectiveAt),days:e.pending.retentionDays}),enforcing:!1}:null:null}),bt=e=>`runeya.chat.lastChannel.${e}`;o(()=>F.activeChannelId.value,e=>{if(e&&O.orgId)try{localStorage.setItem(bt(O.orgId),e)}catch{}});let xt=``;o([()=>O.orgId,F.channels],()=>{let e=O.orgId;if(!e||xt===e||!F.channels.value.length||(xt=e,F.activeChannelId.value))return;let t=null;try{t=localStorage.getItem(bt(e))}catch{}t&&F.channels.value.some(e=>e.id===t)&&F.selectChannel(t)},{immediate:!0});let St=f(()=>F.channels.value.filter(e=>e.kind===`channel`)),Ct=f(()=>F.channels.value.filter(e=>e.kind===`dm`)),z=f(()=>F.channels.value.find(e=>e.id===F.activeChannelId.value)??null),wt=f(()=>I.value.filter(e=>e.userId!==P.value));function Tt(e){return I.value.find(t=>t.userId===e)?.name??M(`someone`)}function Et(e){let t=e.memberIds.filter(e=>e!==P.value);return t.length?t.map(Tt).join(`, `):M(`someone`)}function Dt(e){return e.kind===`dm`?Et(e):e.name}let Ot=f(()=>{let e=z.value;return e?I.value.filter(t=>!e.memberIds.includes(t.userId)):[]}),B=t(null),kt=f({get:()=>B.value===`create`,set:e=>{B.value=e?`create`:null}}),At=f({get:()=>B.value===`browse`,set:e=>{B.value=e?`browse`:null}}),jt=f({get:()=>B.value===`newdm`,set:e=>{B.value=e?`newdm`:null}}),Mt=f({get:()=>B.value===`invite`,set:e=>{B.value=e?`invite`:null}}),V=t(``),H=t(!1),U=t([]),W=t([]),G=t([]),K=t(``);function Nt(e){let t=K.value.trim().toLowerCase();return!t||e.name.toLowerCase().includes(t)||e.email.toLowerCase().includes(t)}let Pt=f(()=>Ot.value.filter(Nt)),Ft=f(()=>wt.value.filter(Nt));function It(){B.value=null}async function Lt(){U.value=await F.browseChannels(),B.value=`browse`}function Rt(){W.value=[],K.value=``,B.value=`invite`}function zt(){G.value=[],K.value=``,B.value=`newdm`}function Bt(e){W.value=W.value.includes(e)?W.value.filter(t=>t!==e):[...W.value,e]}function Vt(e){G.value=G.value.includes(e)?G.value.filter(t=>t!==e):[...G.value,e]}async function Ht(){await F.createChannel(V.value,H.value)&&(V.value=``,H.value=!1,It())}async function Ut(e){await F.joinChannel(e)&&(U.value=U.value.filter(t=>t.id!==e),It())}async function Wt(){if(!G.value.length)return;let e=G.value;It(),await F.openDm(e)}async function Gt(){let e=z.value;if(e&&W.value.length){for(let t of W.value)await F.inviteToChannel(e.id,t);W.value=[],It(),await F.reloadChannels()}}let q=t(``),Kt=t(null);async function qt(){await y();let e=Kt.value?.$el;e instanceof HTMLTextAreaElement?e.focus():e?.querySelector(`textarea`)?.focus()}async function Jt(){await F.send(q.value)&&(q.value=``),await qt()}function Yt(e){e.shiftKey||e.isComposing||(e.preventDefault(),Jt())}o(()=>F.activeChannelId.value,e=>{e&&qt()});let J=oe;u(()=>{le(N.value)});function Xt(){ce(!J.value),ue(N.value,J.value),J.value&&de()}let Zt=0,Qt=!1;o(()=>Object.values(F.unread.value).reduce((e,t)=>e+t,0),e=>{O.notifyOnUnread&&Qt&&e>Zt&&de(),Zt=e,Qt=!0},{immediate:!0});let $t=typeof window<`u`?window.location.origin:``,en={ALLOWED_TAGS:[`p`,`br`,`strong`,`b`,`em`,`i`,`u`,`s`,`del`,`code`,`pre`,`blockquote`,`ul`,`ol`,`li`,`a`,`h1`,`h2`,`h3`,`h4`,`hr`],ALLOWED_ATTR:[`href`,`title`]};function tn(e){let t=ie.parse(e??``,{async:!1,gfm:!0,breaks:!0});return ae.sanitize(t,en)}let nn=/\/app\/[^/\s)]+\/kanban\/([^/\s)]+)\/card\/([^/\s)?#]+)/g;function rn(e){let t=[],n=new Set;for(let r of(e??``).matchAll(nn)){let e=decodeURIComponent(r[1]??``),i=decodeURIComponent(r[2]??``),a=`${e}:${i}`;e&&i&&!n.has(a)&&(n.add(a),t.push({boardId:e,cardId:i}))}return t}function an(e){return O.cardColumn?rn(e).map(e=>({key:`${e.boardId}:${e.cardId}`,column:O.cardColumn?.(e.boardId,e.cardId)??``})).filter(e=>e.column):[]}o(()=>F.messages.value.map(e=>e.content).join(`\0`),()=>{let e=[],t=new Set;for(let n of F.messages.value)for(let r of rn(n.content)){let n=`${r.boardId}:${r.cardId}`;t.has(n)||(t.add(n),e.push(r))}j(`card-refs`,e)},{immediate:!0});function on(e){let t=(e.target?.closest(`a`))?.getAttribute(`href`);if(!t)return;e.preventDefault(),e.stopPropagation();let n=[$t,...O.internalOrigins].filter(Boolean).find(e=>t===e||t.startsWith(`${e}/`));n?j(`internal-link`,t.slice(n.length)||`/`,n):/^https?:\/\//i.test(t)&&window.open(t,`_blank`,`noopener,noreferrer`)}function sn(e){return new Date(e).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})}function cn(e){let t=0;for(let n=0;n<e.length;n+=1)t=(t*31+e.charCodeAt(n))%360;return{background:`linear-gradient(135deg, hsl(${t} 62% 52%), hsl(${(t+40)%360} 62% 46%))`}}let ln=r(new Set);function un(e){return O.avatarUrl?.(e)??`${O.cloudApiBaseUrl}/api/avatar/${e}`}let Y=t(null),X=t(0),Z=0;function dn(){let e=Y.value;return!e||e.scrollHeight-e.scrollTop-e.clientHeight<=gt}function fn(){let e=F.activeChannelId.value;e&&(F.markRead(e),F.unread.value[e]&&(F.unread.value={...F.unread.value,[e]:0}),j(`channel-read`,e))}function pn(e=!1){let t=Y.value;t&&(t.scrollTo({top:t.scrollHeight,behavior:e?`smooth`:`auto`}),X.value=0,fn())}let mn=!1;async function hn(){let e=Y.value;if(!e||!F.hasMore.value||F.loadingOlder.value)return;mn=!0;let t=e.scrollHeight,n=e.scrollTop;await F.loadOlder(),await y(),e.scrollTop=n+(e.scrollHeight-t),mn=!1}function gn(){let e=Y.value;e&&e.scrollTop<_t&&hn(),dn()&&(X.value=0,fn())}o(()=>F.messages.value.length,async e=>{if(mn){Z=e;return}if(e<Z){Z=e,X.value=0;return}let t=e-Z,n=F.messages.value.at(-1)?.userId===P.value,r=Z===0||n||dn();if(Z>0&&t>0&&!n&&de(),Z=e,await y(),r)pn();else if(t>0){X.value+=t;let e=F.activeChannelId.value;e&&(F.unread.value={...F.unread.value,[e]:(F.unread.value[e]??0)+t})}}),o(()=>F.activeChannelId.value,()=>{Z=0,X.value=0});let Q=t(!1),$=r(new Set);function _n(e){$.has(e)?$.delete(e):$.add(e)}function vn(){Q.value=!1,$.clear()}o(()=>F.activeChannelId.value,vn);function yn(){let e=F.messages.value.filter(e=>$.has(e.id));if(!e.length)return;let t=z.value?Dt(z.value):``;j(`ai-context`,{title:t,messages:e}),vn()}return(t,n)=>(m(),c(`div`,fe,[s(`aside`,pe,[x(t.$slots,`sidebar-top`,{},void 0,!0),s(`div`,me,[s(`div`,he,[s(`span`,null,v(e(M)(`channels`)),1),s(`span`,ge,[i(e(A),{icon:`ti ti-search`,variant:`text`,rounded:``,size:`small`,onClick:Lt}),i(e(A),{icon:`ti ti-plus`,variant:`text`,rounded:``,size:`small`,onClick:n[0]||=e=>B.value=`create`})])]),s(`ul`,_e,[(m(!0),c(g,null,l(St.value,t=>(m(),c(`li`,{key:t.id},[s(`button`,{class:d([`chan`,{active:t.id===e(F).activeChannelId.value}]),onClick:n=>e(F).selectChannel(t.id)},[s(`span`,ye,v(t.isPrivate?`🔒`:`#`),1),s(`span`,be,v(t.name),1),e(F).unread.value[t.id]?(m(),c(`span`,xe,v(e(F).unread.value[t.id]),1)):S(``,!0)],10,ve)]))),128))])]),s(`div`,Se,[s(`div`,Ce,[s(`span`,null,v(e(M)(`directMessages`)),1),i(e(A),{icon:`ti ti-plus`,variant:`text`,rounded:``,size:`small`,onClick:zt})]),s(`ul`,we,[(m(!0),c(g,null,l(Ct.value,t=>(m(),c(`li`,{key:t.id},[s(`button`,{class:d([`chan`,{active:t.id===e(F).activeChannelId.value}]),onClick:n=>e(F).selectChannel(t.id)},[s(`span`,Ee,v(Et(t)),1),e(F).unread.value[t.id]?(m(),c(`span`,De,v(e(F).unread.value[t.id]),1)):S(``,!0)],10,Te)]))),128))])])]),s(`div`,Oe,[R.value?(m(),c(`a`,{key:0,class:d([`retention-banner`,{enforcing:R.value.enforcing}]),href:`#`,onClick:n[1]||=w(e=>j(`upgrade`),[`prevent`])},[s(`span`,ke,v(R.value.text),1),s(`span`,Ae,v(e(M)(`retention.cta`)),1)],2)):S(``,!0),z.value?(m(),c(g,{key:1},[s(`header`,je,[s(`h2`,null,[z.value.kind===`channel`?(m(),c(`span`,Me,v(z.value.isPrivate?`🔒`:`#`),1)):S(``,!0),a(v(Dt(z.value)),1)]),s(`span`,Ne,[i(e(A),{icon:e(J)?`ti ti-volume`:`ti ti-volume-off`,variant:`text`,rounded:``,size:`small`,title:e(J)?e(M)(`soundOn`):e(M)(`soundOff`),onClick:Xt},null,8,[`icon`,`title`]),p.enableSelectToAi&&Q.value?(m(),c(g,{key:0},[s(`span`,Pe,v(e(M)(`selectedCount`,{count:$.size})),1),i(e(A),{label:e(M)(`sendToAi`),icon:`ti ti-sparkles`,size:`small`,disabled:!$.size,onClick:yn},null,8,[`label`,`disabled`]),i(e(A),{label:e(M)(`cancel`),size:`small`,variant:`text`,onClick:vn},null,8,[`label`])],64)):(m(),c(g,{key:1},[p.enableSelectToAi?(m(),b(e(A),{key:0,label:e(M)(`select`),icon:`ti ti-square-check`,size:`small`,variant:`text`,onClick:n[2]||=e=>Q.value=!0},null,8,[`label`])):S(``,!0),z.value.kind===`channel`?(m(),b(e(A),{key:1,label:e(M)(`invite`),size:`small`,variant:`outlined`,onClick:Rt},null,8,[`label`])):S(``,!0)],64))])]),s(`div`,{ref_key:`listEl`,ref:Y,class:`thread`,onScroll:gn},[e(F).loadingOlder.value?(m(),c(`div`,Fe,[...n[14]||=[s(`i`,{class:`ti ti-spin ti-loader-2`},null,-1)]])):S(``,!0),!e(F).messages.value.length&&!e(F).loading.value?(m(),c(`p`,Ie,v(e(M)(`empty`)),1)):S(``,!0),(m(!0),c(g,null,l(e(F).messages.value,t=>(m(),c(`div`,{key:t.id,class:d([`msg`,{selectable:p.enableSelectToAi&&Q.value,selected:$.has(t.id)}]),onClick:e=>p.enableSelectToAi&&Q.value&&_n(t.id)},[p.enableSelectToAi&&Q.value?(m(),c(`span`,{key:0,class:d([`msg-check`,{on:$.has(t.id)}])},[$.has(t.id)?(m(),c(`i`,Re)):S(``,!0)],2)):S(``,!0),s(`div`,{class:`msg-avatar`,style:h(cn(t.userId))},[ln.has(t.userId)?(m(),c(g,{key:1},[a(v(t.userName.charAt(0).toUpperCase()),1)],64)):(m(),c(`img`,{key:0,src:un(t.userId),alt:``,onError:e=>ln.add(t.userId)},null,40,ze))],4),s(`div`,Be,[s(`div`,Ve,[s(`span`,He,v(t.userName),1),s(`span`,Ue,v(sn(t.createdAt)),1)]),s(`div`,{class:`msg-content`,innerHTML:tn(t.content),onClick:n[3]||=e=>on(e)},null,8,We),an(t.content).length?(m(),c(`div`,Ge,[(m(!0),c(g,null,l(an(t.content),t=>(m(),c(`span`,{key:t.key,class:`card-col`},[n[15]||=s(`i`,{class:`ti ti-list`},null,-1),a(v(e(M)(`cardColumn`,{column:t.column})),1)]))),128))])):S(``,!0)])],10,Le))),128))],544),X.value>0?(m(),c(`button`,{key:0,class:`new-msgs`,onClick:n[4]||=e=>pn(!0)},[n[16]||=s(`i`,{class:`ti ti-arrow-down`},null,-1),a(` `+v(X.value)+` `+v(e(M)(`newMessages`)),1)])):S(``,!0),s(`form`,{class:`composer`,onSubmit:w(Jt,[`prevent`])},[i(e(ne),{ref_key:`composerInput`,ref:Kt,modelValue:q.value,"onUpdate:modelValue":n[5]||=e=>q.value=e,placeholder:e(M)(`placeholder`),disabled:e(F).sending.value,rows:`1`,"auto-resize":``,onKeydown:C(Yt,[`enter`])},null,8,[`modelValue`,`placeholder`,`disabled`]),i(e(A),{type:`submit`,label:e(M)(`send`),disabled:e(F).sending.value||!q.value.trim()},null,8,[`label`,`disabled`])],32),e(F).error.value?(m(),c(`p`,Ke,v(e(F).error.value),1)):S(``,!0)],64)):(m(),c(`div`,qe,v(e(M)(`pickChannel`)),1))]),i(e(k),{visible:kt.value,"onUpdate:visible":n[8]||=e=>kt.value=e,header:e(M)(`createChannel`),modal:``,style:{width:`26rem`}},{default:_(()=>[s(`form`,{class:`dlg-form`,onSubmit:w(Ht,[`prevent`])},[s(`div`,Je,[n[17]||=s(`span`,null,`#`,-1),i(e(E),{modelValue:V.value,"onUpdate:modelValue":n[6]||=e=>V.value=e,placeholder:e(M)(`channelName`)},null,8,[`modelValue`,`placeholder`])]),s(`label`,Ye,[i(e(ee),{modelValue:H.value,"onUpdate:modelValue":n[7]||=e=>H.value=e,binary:``},null,8,[`modelValue`]),s(`span`,null,[s(`strong`,null,v(e(M)(`private`)),1),a(` · `+v(e(M)(`privateHint`)),1)])]),i(e(A),{type:`submit`,label:e(M)(`create`),disabled:!V.value.trim()},null,8,[`label`,`disabled`])],32)]),_:1},8,[`visible`,`header`]),i(e(k),{visible:At.value,"onUpdate:visible":n[9]||=e=>At.value=e,header:e(M)(`browse`),modal:``,style:{width:`26rem`}},{default:_(()=>[U.value.length?(m(),c(`ul`,Ze,[(m(!0),c(g,null,l(U.value,t=>(m(),c(`li`,{key:t.id},[s(`button`,{class:`pick-item`,onClick:e=>Ut(t.id)},[s(`span`,$e,`# `+v(t.name),1),s(`span`,et,v(e(M)(`join`)),1)],8,Qe)]))),128))])):(m(),c(`p`,Xe,v(e(M)(`noBrowse`)),1))]),_:1},8,[`visible`,`header`]),i(e(k),{visible:jt.value,"onUpdate:visible":n[11]||=e=>jt.value=e,header:e(M)(`newDm`),modal:``,style:{width:`26rem`}},{default:_(()=>[wt.value.length?(m(),c(g,{key:1},[s(`p`,nt,v(e(M)(`dmHint`)),1),i(e(D),{class:`search-field`},{default:_(()=>[i(e(T),{class:`ti ti-search`}),i(e(E),{modelValue:K.value,"onUpdate:modelValue":n[10]||=e=>K.value=e,placeholder:e(M)(`searchPeople`)},null,8,[`modelValue`,`placeholder`])]),_:1}),Ft.value.length?(m(),c(`ul`,it,[(m(!0),c(g,null,l(Ft.value,e=>(m(),c(`li`,{key:e.userId},[s(`button`,{class:d([`pick-item`,{selected:G.value.includes(e.userId)}]),onClick:t=>Vt(e.userId)},[s(`span`,ot,v(e.name.charAt(0).toUpperCase()),1),s(`span`,st,v(e.name),1),G.value.includes(e.userId)?(m(),c(`i`,ct)):S(``,!0)],10,at)]))),128))])):(m(),c(`p`,rt,v(e(M)(`noMatch`)),1)),i(e(A),{class:`dlg-cta`,label:G.value.length>1?e(M)(`startGroup`,{count:G.value.length}):e(M)(`startDm`),disabled:!G.value.length,onClick:Wt},null,8,[`label`,`disabled`])],64)):(m(),c(`p`,tt,v(e(M)(`noMembers`)),1))]),_:1},8,[`visible`,`header`]),i(e(k),{visible:Mt.value,"onUpdate:visible":n[13]||=e=>Mt.value=e,header:e(M)(`invite`),modal:``,style:{width:`26rem`}},{default:_(()=>[Ot.value.length?(m(),c(g,{key:1},[i(e(D),{class:`search-field`},{default:_(()=>[i(e(T),{class:`ti ti-search`}),i(e(E),{modelValue:K.value,"onUpdate:modelValue":n[12]||=e=>K.value=e,placeholder:e(M)(`searchPeople`)},null,8,[`modelValue`,`placeholder`])]),_:1}),Pt.value.length?(m(),c(`ul`,dt,[(m(!0),c(g,null,l(Pt.value,e=>(m(),c(`li`,{key:e.userId},[s(`button`,{class:d([`pick-item`,{selected:W.value.includes(e.userId)}]),onClick:t=>Bt(e.userId)},[s(`span`,pt,v(e.name.charAt(0).toUpperCase()),1),s(`span`,mt,v(e.name),1),W.value.includes(e.userId)?(m(),c(`i`,ht)):S(``,!0)],10,ft)]))),128))])):(m(),c(`p`,ut,v(e(M)(`noMatch`)),1)),i(e(A),{class:`dlg-cta`,label:W.value.length?e(M)(`addSelected`,{count:W.value.length}):e(M)(`addPeople`),disabled:!W.value.length,onClick:Gt},null,8,[`label`,`disabled`])],64)):(m(),c(`p`,lt,v(e(M)(`noInvitable`)),1))]),_:1},8,[`visible`,`header`])]))}}),[[`__scopeId`,`data-v-054a1e52`]]),F={key:0,class:`stc-empty`},I={key:1,class:`stc-form`},L={key:0,class:`stc-field`},vt={class:`stc-field`},yt={class:`stc-preview-label`},R={key:0,class:`stc-trunc`},bt={class:`stc-preview`},xt=j(p({__name:`SendToChatDialog`,props:{client:{},t:{},currentUserId:{default:void 0},organizations:{default:()=>[]},orgId:{default:``},lockOrganization:{type:Boolean,default:!1},maxLength:{default:4e3}},emits:[`sent`],setup(n,{expose:r,emit:l}){let u=n,d=l,p=u.t,h=f(()=>u.client),g=t(!1),y=t(``),x=t(u.orgId),C=t(``),w=t(!1),T=t(null),E=t(!1),D=t([]),ee=t([]),j=f(()=>y.value.length>u.maxLength),ne=f(()=>j.value?`${y.value.slice(0,u.maxLength-20)}\n… (${p(`truncated`)})`:y.value);function re(e){return ee.value.find(t=>t.userId===e)?.name??`?`}function ie(e){let t=e.memberIds.filter(e=>e!==u.currentUserId);return t.length?t.map(re).join(`, `):`?`}let ae=f(()=>{let e=D.value.filter(e=>e.kind===`channel`).map(e=>({id:e.id,label:`${e.isPrivate?`🔒`:`#`} ${e.name}`})),t=D.value.filter(e=>e.kind===`dm`).map(e=>({id:e.id,label:ie(e)})),n=[];return e.length&&n.push({label:p(`channels`),items:e}),t.length&&n.push({label:p(`directMessages`),items:t}),n});async function M(e){if(D.value=[],ee.value=[],C.value=``,e){E.value=!0;try{let[t,n]=await Promise.all([h.value.$fetch(`/chat/channel/list`,{method:`GET`,query:{organizationId:e}}),h.value.organization.getFullOrganization({query:{organizationId:e}})]);if(D.value=t?.data?.channels??[],!n.error&&n.data){let e=n.data;ee.value=(e.members??[]).map(e=>({userId:e.userId,name:e.user?.name||e.user?.email||`?`}))}}finally{E.value=!1}}}o(x,e=>{M(e)}),o(()=>u.orgId,e=>{e&&u.lockOrganization&&(x.value=e)});async function oe(){if(C.value&&ne.value.trim()){w.value=!0,T.value=null;try{if((await h.value.$fetch(`/chat/message/send`,{method:`POST`,body:{channelId:C.value,content:ne.value}}))?.error)throw Error(p(`failed`));d(`sent`,C.value),g.value=!1}catch(e){T.value=e.message||p(`failed`)}finally{w.value=!1}}}function se(e){if(y.value=e,T.value=null,C.value=``,g.value=!0,!u.currentUserId)return;if(u.lockOrganization||x.value){let e=u.lockOrganization?u.orgId:x.value;x.value=e,M(e);return}let t=u.organizations[0];t&&(x.value=t.id)}return r({open:se}),(t,r)=>(m(),b(e(k),{visible:g.value,"onUpdate:visible":r[3]||=e=>g.value=e,header:e(p)(`title`),modal:``,style:{width:`30rem`}},{footer:_(()=>[i(e(A),{label:e(p)(`cancel`),variant:`text`,severity:`secondary`,disabled:w.value,onClick:r[2]||=e=>g.value=!1},null,8,[`label`,`disabled`]),n.currentUserId?(m(),b(e(A),{key:0,label:e(p)(`send`),icon:`ti ti-send`,loading:w.value,disabled:!C.value,onClick:oe},null,8,[`label`,`loading`,`disabled`])):S(``,!0)]),default:_(()=>[n.currentUserId?(m(),c(`div`,I,[n.lockOrganization?S(``,!0):(m(),c(`div`,L,[s(`label`,null,v(e(p)(`org`)),1),i(e(te),{modelValue:x.value,"onUpdate:modelValue":r[0]||=e=>x.value=e,options:n.organizations,"option-label":`name`,"option-value":`id`,placeholder:e(p)(`orgPlaceholder`),class:`stc-select`},null,8,[`modelValue`,`options`,`placeholder`])])),s(`div`,vt,[s(`label`,null,v(e(p)(`target`)),1),i(e(te),{modelValue:C.value,"onUpdate:modelValue":r[1]||=e=>C.value=e,options:ae.value,"option-label":`label`,"option-value":`id`,"option-group-label":`label`,"option-group-children":`items`,placeholder:e(p)(`targetPlaceholder`),disabled:!x.value||E.value,loading:E.value,class:`stc-select`,filter:``},null,8,[`modelValue`,`options`,`placeholder`,`disabled`,`loading`])]),s(`p`,yt,[a(v(e(p)(`preview`))+` `,1),j.value?(m(),c(`span`,R,`· `+v(e(p)(`truncated`)),1)):S(``,!0)]),s(`pre`,bt,v(ne.value),1),T.value?(m(),b(e(O),{key:1,severity:`error`},{default:_(()=>[a(v(T.value),1)]),_:1})):S(``,!0)])):(m(),c(`div`,F,v(e(p)(`notConnected`)),1))]),_:1},8,[`visible`,`header`]))}}),[[`__scopeId`,`data-v-d0a9c435`]]);export{de as i,P as n,le as r,xt as t};
|
|
1
|
+
import{B as e,C as t,N as n,x as r}from"./reactivity.esm-bundler-BQ9SB2vv.js";import{D as i,E as a,Ht as o,_ as s,b as c,bt as l,ct as u,en as d,g as f,k as p,mt as m,nn as h,o as g,qt as _,rn as v,tt as y,v as b,xt as x,y as S}from"./runtime-core.esm-bundler-DujKY9QV.js";import{F as C,I as w}from"./floating-ui.dom-DWhsZyqT.js";import{G as T,J as E,K as D,O as ee,S as te,W as O,Y as k,dt as A,ft as j,q as ne}from"./src--GO-VSJ0.js";import{r as re}from"./composables-DiiOYol8.js";import{F as ie,P as ae}from"./index-D8VRbyoP.js";var M=`runeya.chat.sound`,oe=t(se()??!0);function se(){if(typeof localStorage>`u`)return null;let e=localStorage.getItem(M);return e===null?null:e===`1`}function ce(e){oe.value=e;try{localStorage.setItem(M,e?`1`:`0`)}catch{}}async function le(e){try{let t=(await e.$fetch(`/user/prefs`,{method:`GET`}))?.data?.prefs?.chatSound;typeof t==`boolean`&&ce(t)}catch{}}function ue(e,t){e.$fetch(`/user/prefs`,{method:`POST`,body:{prefs:{chatSound:t}}})}var N=null;function de(){if(oe.value&&typeof window<`u`)try{let e=window.AudioContext??window.webkitAudioContext;if(!e)return;N??=new e,N.state===`suspended`&&N.resume();let t=N.currentTime,n=N.createOscillator(),r=N.createGain();n.type=`sine`,n.frequency.setValueAtTime(660,t),n.frequency.exponentialRampToValueAtTime(880,t+.08),r.gain.setValueAtTime(1e-4,t),r.gain.exponentialRampToValueAtTime(.16,t+.012),r.gain.exponentialRampToValueAtTime(1e-4,t+.25),n.connect(r).connect(N.destination),n.start(t),n.stop(t+.26)}catch{}}var fe={class:`chat`},pe={class:`sidebar`},me={class:`group`},he={class:`group-head`},ge={class:`acts`},_e={class:`list`},ve=[`onClick`],ye={class:`hash`},be={class:`name`},xe={key:0,class:`badge`},Se={class:`group`},Ce={class:`group-head`},we={class:`list`},Te=[`onClick`],Ee={class:`name`},De={key:0,class:`badge`},Oe={class:`main`},ke={class:`retention-banner__text`},Ae={class:`retention-banner__cta`},je={class:`pane-head`},Me={key:0},Ne={class:`head-actions`},Pe={class:`sel-count`},Fe={key:0,class:`loading-older`},Ie={key:1,class:`empty`},Le=[`onClick`],Re={key:0,class:`ti ti-check`},ze=[`src`,`onError`],Be={class:`msg-body`},Ve={class:`msg-head`},He={class:`msg-author`},Ue={class:`msg-time`},We=[`innerHTML`],Ge={key:0,class:`msg-cards`},Ke={key:1,class:`error`},qe={key:2,class:`placeholder`},Je={class:`hash-input`},Ye={class:`toggle-row`},Xe={key:0,class:`dlg-empty`},Ze={key:1,class:`pick-list`},Qe=[`onClick`],$e={class:`pick-name`},et={class:`join`},tt={key:0,class:`dlg-empty`},nt={class:`dlg-hint`},rt={key:0,class:`dlg-empty`},it={key:1,class:`pick-list`},at=[`onClick`],ot={class:`pick-avatar`},st={class:`pick-name`},ct={key:0,class:`ti ti-check picked`},lt={key:0,class:`dlg-empty`},ut={key:0,class:`dlg-empty`},dt={key:1,class:`pick-list`},ft=[`onClick`],pt={class:`pick-avatar`},mt={class:`pick-name`},ht={key:0,class:`ti ti-check picked`},gt=80,_t=120,P=j(p({__name:`ChatPanel`,props:{client:{},orgId:{},cloudApiBaseUrl:{},avatarUrl:{},streamUrl:{type:Function,default:void 0},currentUserId:{default:void 0},members:{},t:{},enableSelectToAi:{type:Boolean,default:!1},notifyOnUnread:{type:Boolean,default:!0},internalOrigins:{default:()=>[]},cardColumn:{type:Function,default:void 0}},emits:[`channel-read`,`ai-context`,`internal-link`,`upgrade`,`card-refs`],setup(p,{emit:te}){let O=p,j=te,M=O.t,se=n(O,`orgId`),N=f(()=>O.client),P=f(()=>O.currentUserId),F=re(N.value,se,{...O.streamUrl?{streamUrl:O.streamUrl}:{baseURL:O.cloudApiBaseUrl},currentUserId:P}),I=f(()=>O.members),L=t(null);function vt(e){return new Date(e).toLocaleDateString(void 0,{year:`numeric`,month:`long`,day:`numeric`})}async function yt(e){if(L.value=null,e)try{let t=await N.value.$fetch(`/chat/retention/status`,{method:`GET`,query:{organizationId:e}});L.value=t.data??null}catch{}}o(se,e=>void yt(e),{immediate:!0});let R=f(()=>{let e=L.value;return e?e.capped&&e.enforcing?{text:M(`retention.enforcing`,{days:e.retentionDays}),enforcing:!0}:e.capped&&e.cutoffAt?{text:M(`retention.grace`,{date:vt(e.cutoffAt),days:e.retentionDays}),enforcing:!1}:e.pending?{text:M(`retention.pending`,{date:vt(e.pending.effectiveAt),days:e.pending.retentionDays}),enforcing:!1}:null:null}),bt=e=>`runeya.chat.lastChannel.${e}`;o(()=>F.activeChannelId.value,e=>{if(e&&O.orgId)try{localStorage.setItem(bt(O.orgId),e)}catch{}});let xt=``;o([()=>O.orgId,F.channels],()=>{let e=O.orgId;if(!e||xt===e||!F.channels.value.length||(xt=e,F.activeChannelId.value))return;let t=null;try{t=localStorage.getItem(bt(e))}catch{}t&&F.channels.value.some(e=>e.id===t)&&F.selectChannel(t)},{immediate:!0});let St=f(()=>F.channels.value.filter(e=>e.kind===`channel`)),Ct=f(()=>F.channels.value.filter(e=>e.kind===`dm`)),z=f(()=>F.channels.value.find(e=>e.id===F.activeChannelId.value)??null),wt=f(()=>I.value.filter(e=>e.userId!==P.value));function Tt(e){return I.value.find(t=>t.userId===e)?.name??M(`someone`)}function Et(e){let t=e.memberIds.filter(e=>e!==P.value);return t.length?t.map(Tt).join(`, `):M(`someone`)}function Dt(e){return e.kind===`dm`?Et(e):e.name}let Ot=f(()=>{let e=z.value;return e?I.value.filter(t=>!e.memberIds.includes(t.userId)):[]}),B=t(null),kt=f({get:()=>B.value===`create`,set:e=>{B.value=e?`create`:null}}),At=f({get:()=>B.value===`browse`,set:e=>{B.value=e?`browse`:null}}),jt=f({get:()=>B.value===`newdm`,set:e=>{B.value=e?`newdm`:null}}),Mt=f({get:()=>B.value===`invite`,set:e=>{B.value=e?`invite`:null}}),V=t(``),H=t(!1),U=t([]),W=t([]),G=t([]),K=t(``);function Nt(e){let t=K.value.trim().toLowerCase();return!t||e.name.toLowerCase().includes(t)||e.email.toLowerCase().includes(t)}let Pt=f(()=>Ot.value.filter(Nt)),Ft=f(()=>wt.value.filter(Nt));function It(){B.value=null}async function Lt(){U.value=await F.browseChannels(),B.value=`browse`}function Rt(){W.value=[],K.value=``,B.value=`invite`}function zt(){G.value=[],K.value=``,B.value=`newdm`}function Bt(e){W.value=W.value.includes(e)?W.value.filter(t=>t!==e):[...W.value,e]}function Vt(e){G.value=G.value.includes(e)?G.value.filter(t=>t!==e):[...G.value,e]}async function Ht(){await F.createChannel(V.value,H.value)&&(V.value=``,H.value=!1,It())}async function Ut(e){await F.joinChannel(e)&&(U.value=U.value.filter(t=>t.id!==e),It())}async function Wt(){if(!G.value.length)return;let e=G.value;It(),await F.openDm(e)}async function Gt(){let e=z.value;if(e&&W.value.length){for(let t of W.value)await F.inviteToChannel(e.id,t);W.value=[],It(),await F.reloadChannels()}}let q=t(``),Kt=t(null);async function qt(){await y();let e=Kt.value?.$el;e instanceof HTMLTextAreaElement?e.focus():e?.querySelector(`textarea`)?.focus()}async function Jt(){await F.send(q.value)&&(q.value=``),await qt()}function Yt(e){e.shiftKey||e.isComposing||(e.preventDefault(),Jt())}o(()=>F.activeChannelId.value,e=>{e&&qt()});let J=oe;u(()=>{le(N.value)});function Xt(){ce(!J.value),ue(N.value,J.value),J.value&&de()}let Zt=0,Qt=!1;o(()=>Object.values(F.unread.value).reduce((e,t)=>e+t,0),e=>{O.notifyOnUnread&&Qt&&e>Zt&&de(),Zt=e,Qt=!0},{immediate:!0});let $t=typeof window<`u`?window.location.origin:``,en={ALLOWED_TAGS:[`p`,`br`,`strong`,`b`,`em`,`i`,`u`,`s`,`del`,`code`,`pre`,`blockquote`,`ul`,`ol`,`li`,`a`,`h1`,`h2`,`h3`,`h4`,`hr`],ALLOWED_ATTR:[`href`,`title`]};function tn(e){let t=ie.parse(e??``,{async:!1,gfm:!0,breaks:!0});return ae.sanitize(t,en)}let nn=/\/app\/[^/\s)]+\/kanban\/([^/\s)]+)\/card\/([^/\s)?#]+)/g;function rn(e){let t=[],n=new Set;for(let r of(e??``).matchAll(nn)){let e=decodeURIComponent(r[1]??``),i=decodeURIComponent(r[2]??``),a=`${e}:${i}`;e&&i&&!n.has(a)&&(n.add(a),t.push({boardId:e,cardId:i}))}return t}function an(e){return O.cardColumn?rn(e).map(e=>({key:`${e.boardId}:${e.cardId}`,column:O.cardColumn?.(e.boardId,e.cardId)??``})).filter(e=>e.column):[]}o(()=>F.messages.value.map(e=>e.content).join(`\0`),()=>{let e=[],t=new Set;for(let n of F.messages.value)for(let r of rn(n.content)){let n=`${r.boardId}:${r.cardId}`;t.has(n)||(t.add(n),e.push(r))}j(`card-refs`,e)},{immediate:!0});function on(e){let t=(e.target?.closest(`a`))?.getAttribute(`href`);if(!t)return;e.preventDefault(),e.stopPropagation();let n=[$t,...O.internalOrigins].filter(Boolean).find(e=>t===e||t.startsWith(`${e}/`));n?j(`internal-link`,t.slice(n.length)||`/`,n):/^https?:\/\//i.test(t)&&window.open(t,`_blank`,`noopener,noreferrer`)}function sn(e){return new Date(e).toLocaleTimeString([],{hour:`2-digit`,minute:`2-digit`})}function cn(e){let t=0;for(let n=0;n<e.length;n+=1)t=(t*31+e.charCodeAt(n))%360;return{background:`linear-gradient(135deg, hsl(${t} 62% 52%), hsl(${(t+40)%360} 62% 46%))`}}let ln=r(new Set);function un(e){return O.avatarUrl?.(e)??`${O.cloudApiBaseUrl}/api/avatar/${e}`}let Y=t(null),X=t(0),Z=0;function dn(){let e=Y.value;return!e||e.scrollHeight-e.scrollTop-e.clientHeight<=gt}function fn(){let e=F.activeChannelId.value;e&&(F.markRead(e),F.unread.value[e]&&(F.unread.value={...F.unread.value,[e]:0}),j(`channel-read`,e))}function pn(e=!1){let t=Y.value;t&&(t.scrollTo({top:t.scrollHeight,behavior:e?`smooth`:`auto`}),X.value=0,fn())}let mn=!1;async function hn(){let e=Y.value;if(!e||!F.hasMore.value||F.loadingOlder.value)return;mn=!0;let t=e.scrollHeight,n=e.scrollTop;await F.loadOlder(),await y(),e.scrollTop=n+(e.scrollHeight-t),mn=!1}function gn(){let e=Y.value;e&&e.scrollTop<_t&&hn(),dn()&&(X.value=0,fn())}o(()=>F.messages.value.length,async e=>{if(mn){Z=e;return}if(e<Z){Z=e,X.value=0;return}let t=e-Z,n=F.messages.value.at(-1)?.userId===P.value,r=Z===0||n||dn();if(Z>0&&t>0&&!n&&de(),Z=e,await y(),r)pn();else if(t>0){X.value+=t;let e=F.activeChannelId.value;e&&(F.unread.value={...F.unread.value,[e]:(F.unread.value[e]??0)+t})}}),o(()=>F.activeChannelId.value,()=>{Z=0,X.value=0});let Q=t(!1),$=r(new Set);function _n(e){$.has(e)?$.delete(e):$.add(e)}function vn(){Q.value=!1,$.clear()}o(()=>F.activeChannelId.value,vn);function yn(){let e=F.messages.value.filter(e=>$.has(e.id));if(!e.length)return;let t=z.value?Dt(z.value):``;j(`ai-context`,{title:t,messages:e}),vn()}return(t,n)=>(m(),c(`div`,fe,[s(`aside`,pe,[x(t.$slots,`sidebar-top`,{},void 0,!0),s(`div`,me,[s(`div`,he,[s(`span`,null,v(e(M)(`channels`)),1),s(`span`,ge,[i(e(A),{icon:`ti ti-search`,variant:`text`,rounded:``,size:`small`,onClick:Lt}),i(e(A),{icon:`ti ti-plus`,variant:`text`,rounded:``,size:`small`,onClick:n[0]||=e=>B.value=`create`})])]),s(`ul`,_e,[(m(!0),c(g,null,l(St.value,t=>(m(),c(`li`,{key:t.id},[s(`button`,{class:d([`chan`,{active:t.id===e(F).activeChannelId.value}]),onClick:n=>e(F).selectChannel(t.id)},[s(`span`,ye,v(t.isPrivate?`🔒`:`#`),1),s(`span`,be,v(t.name),1),e(F).unread.value[t.id]?(m(),c(`span`,xe,v(e(F).unread.value[t.id]),1)):S(``,!0)],10,ve)]))),128))])]),s(`div`,Se,[s(`div`,Ce,[s(`span`,null,v(e(M)(`directMessages`)),1),i(e(A),{icon:`ti ti-plus`,variant:`text`,rounded:``,size:`small`,onClick:zt})]),s(`ul`,we,[(m(!0),c(g,null,l(Ct.value,t=>(m(),c(`li`,{key:t.id},[s(`button`,{class:d([`chan`,{active:t.id===e(F).activeChannelId.value}]),onClick:n=>e(F).selectChannel(t.id)},[s(`span`,Ee,v(Et(t)),1),e(F).unread.value[t.id]?(m(),c(`span`,De,v(e(F).unread.value[t.id]),1)):S(``,!0)],10,Te)]))),128))])])]),s(`div`,Oe,[R.value?(m(),c(`a`,{key:0,class:d([`retention-banner`,{enforcing:R.value.enforcing}]),href:`#`,onClick:n[1]||=w(e=>j(`upgrade`),[`prevent`])},[s(`span`,ke,v(R.value.text),1),s(`span`,Ae,v(e(M)(`retention.cta`)),1)],2)):S(``,!0),z.value?(m(),c(g,{key:1},[s(`header`,je,[s(`h2`,null,[z.value.kind===`channel`?(m(),c(`span`,Me,v(z.value.isPrivate?`🔒`:`#`),1)):S(``,!0),a(v(Dt(z.value)),1)]),s(`span`,Ne,[i(e(A),{icon:e(J)?`ti ti-volume`:`ti ti-volume-off`,variant:`text`,rounded:``,size:`small`,title:e(J)?e(M)(`soundOn`):e(M)(`soundOff`),onClick:Xt},null,8,[`icon`,`title`]),p.enableSelectToAi&&Q.value?(m(),c(g,{key:0},[s(`span`,Pe,v(e(M)(`selectedCount`,{count:$.size})),1),i(e(A),{label:e(M)(`sendToAi`),icon:`ti ti-sparkles`,size:`small`,disabled:!$.size,onClick:yn},null,8,[`label`,`disabled`]),i(e(A),{label:e(M)(`cancel`),size:`small`,variant:`text`,onClick:vn},null,8,[`label`])],64)):(m(),c(g,{key:1},[p.enableSelectToAi?(m(),b(e(A),{key:0,label:e(M)(`select`),icon:`ti ti-square-check`,size:`small`,variant:`text`,onClick:n[2]||=e=>Q.value=!0},null,8,[`label`])):S(``,!0),z.value.kind===`channel`?(m(),b(e(A),{key:1,label:e(M)(`invite`),size:`small`,variant:`outlined`,onClick:Rt},null,8,[`label`])):S(``,!0)],64))])]),s(`div`,{ref_key:`listEl`,ref:Y,class:`thread`,onScroll:gn},[e(F).loadingOlder.value?(m(),c(`div`,Fe,[...n[14]||=[s(`i`,{class:`ti ti-spin ti-loader-2`},null,-1)]])):S(``,!0),!e(F).messages.value.length&&!e(F).loading.value?(m(),c(`p`,Ie,v(e(M)(`empty`)),1)):S(``,!0),(m(!0),c(g,null,l(e(F).messages.value,t=>(m(),c(`div`,{key:t.id,class:d([`msg`,{selectable:p.enableSelectToAi&&Q.value,selected:$.has(t.id)}]),onClick:e=>p.enableSelectToAi&&Q.value&&_n(t.id)},[p.enableSelectToAi&&Q.value?(m(),c(`span`,{key:0,class:d([`msg-check`,{on:$.has(t.id)}])},[$.has(t.id)?(m(),c(`i`,Re)):S(``,!0)],2)):S(``,!0),s(`div`,{class:`msg-avatar`,style:h(cn(t.userId))},[ln.has(t.userId)?(m(),c(g,{key:1},[a(v(t.userName.charAt(0).toUpperCase()),1)],64)):(m(),c(`img`,{key:0,src:un(t.userId),alt:``,onError:e=>ln.add(t.userId)},null,40,ze))],4),s(`div`,Be,[s(`div`,Ve,[s(`span`,He,v(t.userName),1),s(`span`,Ue,v(sn(t.createdAt)),1)]),s(`div`,{class:`msg-content`,innerHTML:tn(t.content),onClick:n[3]||=e=>on(e)},null,8,We),an(t.content).length?(m(),c(`div`,Ge,[(m(!0),c(g,null,l(an(t.content),t=>(m(),c(`span`,{key:t.key,class:`card-col`},[n[15]||=s(`i`,{class:`ti ti-list`},null,-1),a(v(e(M)(`cardColumn`,{column:t.column})),1)]))),128))])):S(``,!0)])],10,Le))),128))],544),X.value>0?(m(),c(`button`,{key:0,class:`new-msgs`,onClick:n[4]||=e=>pn(!0)},[n[16]||=s(`i`,{class:`ti ti-arrow-down`},null,-1),a(` `+v(X.value)+` `+v(e(M)(`newMessages`)),1)])):S(``,!0),s(`form`,{class:`composer`,onSubmit:w(Jt,[`prevent`])},[i(e(ne),{ref_key:`composerInput`,ref:Kt,modelValue:q.value,"onUpdate:modelValue":n[5]||=e=>q.value=e,placeholder:e(M)(`placeholder`),disabled:e(F).sending.value,rows:`1`,"auto-resize":``,onKeydown:C(Yt,[`enter`])},null,8,[`modelValue`,`placeholder`,`disabled`]),i(e(A),{type:`submit`,label:e(M)(`send`),disabled:e(F).sending.value||!q.value.trim()},null,8,[`label`,`disabled`])],32),e(F).error.value?(m(),c(`p`,Ke,v(e(F).error.value),1)):S(``,!0)],64)):(m(),c(`div`,qe,v(e(M)(`pickChannel`)),1))]),i(e(k),{visible:kt.value,"onUpdate:visible":n[8]||=e=>kt.value=e,header:e(M)(`createChannel`),modal:``,style:{width:`26rem`}},{default:_(()=>[s(`form`,{class:`dlg-form`,onSubmit:w(Ht,[`prevent`])},[s(`div`,Je,[n[17]||=s(`span`,null,`#`,-1),i(e(E),{modelValue:V.value,"onUpdate:modelValue":n[6]||=e=>V.value=e,placeholder:e(M)(`channelName`)},null,8,[`modelValue`,`placeholder`])]),s(`label`,Ye,[i(e(ee),{modelValue:H.value,"onUpdate:modelValue":n[7]||=e=>H.value=e,binary:``},null,8,[`modelValue`]),s(`span`,null,[s(`strong`,null,v(e(M)(`private`)),1),a(` · `+v(e(M)(`privateHint`)),1)])]),i(e(A),{type:`submit`,label:e(M)(`create`),disabled:!V.value.trim()},null,8,[`label`,`disabled`])],32)]),_:1},8,[`visible`,`header`]),i(e(k),{visible:At.value,"onUpdate:visible":n[9]||=e=>At.value=e,header:e(M)(`browse`),modal:``,style:{width:`26rem`}},{default:_(()=>[U.value.length?(m(),c(`ul`,Ze,[(m(!0),c(g,null,l(U.value,t=>(m(),c(`li`,{key:t.id},[s(`button`,{class:`pick-item`,onClick:e=>Ut(t.id)},[s(`span`,$e,`# `+v(t.name),1),s(`span`,et,v(e(M)(`join`)),1)],8,Qe)]))),128))])):(m(),c(`p`,Xe,v(e(M)(`noBrowse`)),1))]),_:1},8,[`visible`,`header`]),i(e(k),{visible:jt.value,"onUpdate:visible":n[11]||=e=>jt.value=e,header:e(M)(`newDm`),modal:``,style:{width:`26rem`}},{default:_(()=>[wt.value.length?(m(),c(g,{key:1},[s(`p`,nt,v(e(M)(`dmHint`)),1),i(e(D),{class:`search-field`},{default:_(()=>[i(e(T),{class:`ti ti-search`}),i(e(E),{modelValue:K.value,"onUpdate:modelValue":n[10]||=e=>K.value=e,placeholder:e(M)(`searchPeople`)},null,8,[`modelValue`,`placeholder`])]),_:1}),Ft.value.length?(m(),c(`ul`,it,[(m(!0),c(g,null,l(Ft.value,e=>(m(),c(`li`,{key:e.userId},[s(`button`,{class:d([`pick-item`,{selected:G.value.includes(e.userId)}]),onClick:t=>Vt(e.userId)},[s(`span`,ot,v(e.name.charAt(0).toUpperCase()),1),s(`span`,st,v(e.name),1),G.value.includes(e.userId)?(m(),c(`i`,ct)):S(``,!0)],10,at)]))),128))])):(m(),c(`p`,rt,v(e(M)(`noMatch`)),1)),i(e(A),{class:`dlg-cta`,label:G.value.length>1?e(M)(`startGroup`,{count:G.value.length}):e(M)(`startDm`),disabled:!G.value.length,onClick:Wt},null,8,[`label`,`disabled`])],64)):(m(),c(`p`,tt,v(e(M)(`noMembers`)),1))]),_:1},8,[`visible`,`header`]),i(e(k),{visible:Mt.value,"onUpdate:visible":n[13]||=e=>Mt.value=e,header:e(M)(`invite`),modal:``,style:{width:`26rem`}},{default:_(()=>[Ot.value.length?(m(),c(g,{key:1},[i(e(D),{class:`search-field`},{default:_(()=>[i(e(T),{class:`ti ti-search`}),i(e(E),{modelValue:K.value,"onUpdate:modelValue":n[12]||=e=>K.value=e,placeholder:e(M)(`searchPeople`)},null,8,[`modelValue`,`placeholder`])]),_:1}),Pt.value.length?(m(),c(`ul`,dt,[(m(!0),c(g,null,l(Pt.value,e=>(m(),c(`li`,{key:e.userId},[s(`button`,{class:d([`pick-item`,{selected:W.value.includes(e.userId)}]),onClick:t=>Bt(e.userId)},[s(`span`,pt,v(e.name.charAt(0).toUpperCase()),1),s(`span`,mt,v(e.name),1),W.value.includes(e.userId)?(m(),c(`i`,ht)):S(``,!0)],10,ft)]))),128))])):(m(),c(`p`,ut,v(e(M)(`noMatch`)),1)),i(e(A),{class:`dlg-cta`,label:W.value.length?e(M)(`addSelected`,{count:W.value.length}):e(M)(`addPeople`),disabled:!W.value.length,onClick:Gt},null,8,[`label`,`disabled`])],64)):(m(),c(`p`,lt,v(e(M)(`noInvitable`)),1))]),_:1},8,[`visible`,`header`])]))}}),[[`__scopeId`,`data-v-054a1e52`]]),F={key:0,class:`stc-empty`},I={key:1,class:`stc-form`},L={key:0,class:`stc-field`},vt={class:`stc-field`},yt={class:`stc-preview-label`},R={key:0,class:`stc-trunc`},bt={class:`stc-preview`},xt=j(p({__name:`SendToChatDialog`,props:{client:{},t:{},currentUserId:{default:void 0},organizations:{default:()=>[]},orgId:{default:``},lockOrganization:{type:Boolean,default:!1},maxLength:{default:4e3}},emits:[`sent`],setup(n,{expose:r,emit:l}){let u=n,d=l,p=u.t,h=f(()=>u.client),g=t(!1),y=t(``),x=t(u.orgId),C=t(``),w=t(!1),T=t(null),E=t(!1),D=t([]),ee=t([]),j=f(()=>y.value.length>u.maxLength),ne=f(()=>j.value?`${y.value.slice(0,u.maxLength-20)}\n… (${p(`truncated`)})`:y.value);function re(e){return ee.value.find(t=>t.userId===e)?.name??`?`}function ie(e){let t=e.memberIds.filter(e=>e!==u.currentUserId);return t.length?t.map(re).join(`, `):`?`}let ae=f(()=>{let e=D.value.filter(e=>e.kind===`channel`).map(e=>({id:e.id,label:`${e.isPrivate?`🔒`:`#`} ${e.name}`})),t=D.value.filter(e=>e.kind===`dm`).map(e=>({id:e.id,label:ie(e)})),n=[];return e.length&&n.push({label:p(`channels`),items:e}),t.length&&n.push({label:p(`directMessages`),items:t}),n});async function M(e){if(D.value=[],ee.value=[],C.value=``,e){E.value=!0;try{let[t,n]=await Promise.all([h.value.$fetch(`/chat/channel/list`,{method:`GET`,query:{organizationId:e}}),h.value.organization.getFullOrganization({query:{organizationId:e}})]);if(D.value=t?.data?.channels??[],!n.error&&n.data){let e=n.data;ee.value=(e.members??[]).map(e=>({userId:e.userId,name:e.user?.name||e.user?.email||`?`}))}}finally{E.value=!1}}}o(x,e=>{M(e)}),o(()=>u.orgId,e=>{e&&u.lockOrganization&&(x.value=e)});async function oe(){if(C.value&&ne.value.trim()){w.value=!0,T.value=null;try{if((await h.value.$fetch(`/chat/message/send`,{method:`POST`,body:{channelId:C.value,content:ne.value}}))?.error)throw Error(p(`failed`));d(`sent`,C.value),g.value=!1}catch(e){T.value=e.message||p(`failed`)}finally{w.value=!1}}}function se(e){if(y.value=e,T.value=null,C.value=``,g.value=!0,!u.currentUserId)return;if(u.lockOrganization||x.value){let e=u.lockOrganization?u.orgId:x.value;x.value=e,M(e);return}let t=u.organizations[0];t&&(x.value=t.id)}return r({open:se}),(t,r)=>(m(),b(e(k),{visible:g.value,"onUpdate:visible":r[3]||=e=>g.value=e,header:e(p)(`title`),modal:``,style:{width:`30rem`}},{footer:_(()=>[i(e(A),{label:e(p)(`cancel`),variant:`text`,severity:`secondary`,disabled:w.value,onClick:r[2]||=e=>g.value=!1},null,8,[`label`,`disabled`]),n.currentUserId?(m(),b(e(A),{key:0,label:e(p)(`send`),icon:`ti ti-send`,loading:w.value,disabled:!C.value,onClick:oe},null,8,[`label`,`loading`,`disabled`])):S(``,!0)]),default:_(()=>[n.currentUserId?(m(),c(`div`,I,[n.lockOrganization?S(``,!0):(m(),c(`div`,L,[s(`label`,null,v(e(p)(`org`)),1),i(e(te),{modelValue:x.value,"onUpdate:modelValue":r[0]||=e=>x.value=e,options:n.organizations,"option-label":`name`,"option-value":`id`,placeholder:e(p)(`orgPlaceholder`),class:`stc-select`},null,8,[`modelValue`,`options`,`placeholder`])])),s(`div`,vt,[s(`label`,null,v(e(p)(`target`)),1),i(e(te),{modelValue:C.value,"onUpdate:modelValue":r[1]||=e=>C.value=e,options:ae.value,"option-label":`label`,"option-value":`id`,"option-group-label":`label`,"option-group-children":`items`,placeholder:e(p)(`targetPlaceholder`),disabled:!x.value||E.value,loading:E.value,class:`stc-select`,filter:``},null,8,[`modelValue`,`options`,`placeholder`,`disabled`,`loading`])]),s(`p`,yt,[a(v(e(p)(`preview`))+` `,1),j.value?(m(),c(`span`,R,`· `+v(e(p)(`truncated`)),1)):S(``,!0)]),s(`pre`,bt,v(ne.value),1),T.value?(m(),b(e(O),{key:1,severity:`error`},{default:_(()=>[a(v(T.value),1)]),_:1})):S(``,!0)])):(m(),c(`div`,F,v(e(p)(`notConnected`)),1))]),_:1},8,[`visible`,`header`]))}}),[[`__scopeId`,`data-v-d0a9c435`]]);export{de as i,P as n,le as r,xt as t};
|