@openchambery/web 1.17.1-beta.8 → 1.17.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{AssistantView-ZlXc0xFT.js → AssistantView-CbnxMZU0.js} +1 -1
- package/dist/assets/{ChatContainer-BXFy3Uu2.js → ChatContainer-DEDGosbz.js} +36 -36
- package/dist/assets/{DiagramView-CgotrQyK.js → DiagramView-Byxhaduz.js} +1 -1
- package/dist/assets/{MarkdownRendererImpl-Cj4y0P0S.js → MarkdownRendererImpl-Cv8V-Q5l.js} +1 -1
- package/dist/assets/{MobileDetailNavigation-5tAL5d_M.js → MobileDetailNavigation-lVtCe-5P.js} +1 -1
- package/dist/assets/{MobileShareBridge-BL7Ehxhd.js → MobileShareBridge-DAlvgjo1.js} +1 -1
- package/dist/assets/MobileSurface-Bde8yLWo.js +2 -0
- package/dist/assets/{MultiRunWindow-Che7L3TX.js → MultiRunWindow-1kkKTh4h.js} +1 -1
- package/dist/assets/{OverlayScrollbar-C2pEDFq-.js → OverlayScrollbar-Dqk1zGJB.js} +1 -1
- package/dist/assets/{SettingsView-D0p-e8Px.js → SettingsView-D0dhTIur.js} +1 -1
- package/dist/assets/{SettingsWindow-KYhsFUrb.js → SettingsWindow-DMQMRgc3.js} +1 -1
- package/dist/assets/{TerminalView-Da5aLqHR.js → TerminalView-jYq0JQPc.js} +1 -1
- package/dist/assets/{ToolOutputDialog-DZI4uxx3.js → ToolOutputDialog-DJefd2N6.js} +1 -1
- package/dist/assets/appThemeRegistry-BXeIggYO.js +2 -0
- package/dist/assets/{context-menu-BXH0AcOc.js → context-menu-BbRpMBQh.js} +1 -1
- package/dist/assets/{gitApi-BW5AFgD1.js → gitApi-Bs_2iBAm.js} +1 -1
- package/dist/assets/{insertionBoundaries-D4KbXFFj.js → insertionBoundaries-BAFtAotq.js} +1 -1
- package/dist/assets/{main-CcyyPAib.js → main-CT0DuuLm.js} +2 -2
- package/dist/assets/{main-DzxdsF_k.js → main-G8tKFcTV.js} +3 -3
- package/dist/assets/{miniChat-BsNf9y48.js → miniChat-BP3OHqNF.js} +2 -2
- package/dist/assets/{mobile-CsJg2IAq.js → mobile-BtwuDs-C.js} +2 -2
- package/dist/assets/{multirun-qs5hZkwM.js → multirun-B-L3JH60.js} +1 -1
- package/dist/assets/{projectMeta-1SSTNg8w.js → projectMeta-Cp74cItv.js} +1 -1
- package/dist/assets/{radio-DBJG9Dd1.js → radio-Bs4mdPv5.js} +1 -1
- package/dist/assets/{renderElectronMiniChatApp-DOWE0jSA.js → renderElectronMiniChatApp-dgirEOtR.js} +2 -2
- package/dist/assets/{renderMobileApp-bklJJSZi.js → renderMobileApp-DK9qzy0P.js} +3 -3
- package/dist/assets/{runtimeEndpointReset-ix1NxqYw.js → runtimeEndpointReset-C0eCWIE6.js} +1 -1
- package/dist/assets/{sortable-tabs-strip-DncWjNx4.js → sortable-tabs-strip-oKJ700WG.js} +1 -1
- package/dist/assets/src-8zziWB78.css +2 -0
- package/dist/assets/{useAppFontEffects-B1EhZNex.js → useAppFontEffects-BhLcUfRB.js} +2 -2
- package/dist/assets/{useDesktopWindowControlsLayout-Dc69l-pm.js → useDesktopWindowControlsLayout-Cq5a2gcJ.js} +1 -1
- package/dist/assets/{useEffectiveDirectory-dCGvvYRh.js → useEffectiveDirectory-DG6uPzBG.js} +1 -1
- package/dist/assets/useMobileNavigationStore-1xHjnAsg.js +475 -0
- package/dist/assets/{useSessionAutoCleanup-D-r9oDye.js → useSessionAutoCleanup-BFletAeV.js} +1 -1
- package/dist/assets/{useWorkerHighlightedLines-05dLFgTI.js → useWorkerHighlightedLines-ADgu9578.js} +1 -1
- package/dist/index.html +2 -2
- package/dist/mini-chat.html +2 -2
- package/dist/mobile.html +2 -2
- package/package.json +1 -1
- package/dist/assets/MobileSurface-ByMnQ5rD.js +0 -2
- package/dist/assets/appThemeRegistry-DAgBeFsZ.js +0 -2
- package/dist/assets/src-B8mzksNL.css +0 -2
- package/dist/assets/useMobileNavigationStore-DhkIZBJw.js +0 -475
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{E as t,t as n}from"./useUIStore-D6BTB4va.js";import{nt as r,rt as i}from"./vendor-base-ui-CnHfUmDN.js";import{l as a}from"./vendor-tanstack-react-query-D7pys_c9.js";import{r as o}from"./vendor-sonner-DVzioF3d.js";import{n as s}from"./clipboard-CXWbHCAk.js";import{n as c}from"./Icon-BPJ_quEe.js";import{n as l}from"./useRuntimeAPIs-DSLXJybW.js";import{n as u}from"./useEffectiveDirectory-
|
|
1
|
+
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{E as t,t as n}from"./useUIStore-D6BTB4va.js";import{nt as r,rt as i}from"./vendor-base-ui-CnHfUmDN.js";import{l as a}from"./vendor-tanstack-react-query-D7pys_c9.js";import{r as o}from"./vendor-sonner-DVzioF3d.js";import{n as s}from"./clipboard-CXWbHCAk.js";import{n as c}from"./Icon-BPJ_quEe.js";import{n as l}from"./useRuntimeAPIs-DSLXJybW.js";import{n as u}from"./useEffectiveDirectory-DG6uPzBG.js";import{n as d,r as f,t as p}from"./fileQueries-i4oziMnC.js";import{t as m}from"./diagram-YN0GZ1Q0.js";var h=e(i(),1),g=r();function _(){let{t:e}=s(),{files:r}=l(),i=a(),_=u()??null,v=t(),[y,b]=h.useState(null),[x,S]=h.useState(``),C=h.useRef(null),w=h.useRef(!1),T=h.useRef(null),E=h.useRef(0),D=h.useRef(Promise.resolve()),O=n(e=>e.pendingDiagramFile),k=f({scopeDirectory:_,path:y},{enabled:!!y});if(y&&(T.current?.path!==y||T.current.transport!==v||T.current.scopeDirectory!==_)){let e=E.current+1;E.current=e,T.current={path:y,generation:e,transport:v,scopeDirectory:_}}h.useEffect(()=>(w.current=!0,()=>{w.current=!1,E.current+=1}),[]),h.useEffect(()=>{if(!O)return;let e=n.getState().consumePendingDiagramFile();if(e){let t=E.current+1;E.current=t,T.current={path:e,generation:t,transport:v,scopeDirectory:_},b(e)}},[_,O,v]),h.useEffect(()=>{let e=T.current;if(!(!e||e.path!==y||e.transport!==v||e.scopeDirectory!==_)){if(k.data!==void 0){S(k.data);return}k.isError&&S(``)}},[_,y,k.data,k.isError,v]);let A=h.useCallback(async()=>{let t=C.current?.getXml(),n=T.current,a=r?.writeFile;if(!y||!a||!t||t===x||n?.path!==y)return;let{path:s,generation:c,scopeDirectory:l,transport:u}=n,f=D.current.then(async()=>{try{if(!(await a(s,t))?.success)throw Error(e(`filesView.toast.writeFileFailed`));let n={scopeDirectory:l,path:s};await i.cancelQueries({queryKey:p(n,u),exact:!0}),d(i,n,u,t);let r=T.current;w.current&&r?.path===s&&r.generation===c&&r.transport===u&&r.scopeDirectory===l&&S(t)}catch(t){o.error(t instanceof Error?t.message:e(`filesView.toast.saveFailed`))}});D.current=f.catch(()=>void 0),await f},[y,r,i,e,x]),j=y?y.split(`/`).pop()||y:``;return y?k.isPending?(0,g.jsx)(`div`,{className:`flex h-full items-center justify-center p-3`,children:(0,g.jsx)(c,{name:`loader-4`,className:`size-4 animate-spin`})}):(0,g.jsxs)(`div`,{className:`flex h-full flex-col`,children:[(0,g.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border/30 px-3 py-1.5`,children:[(0,g.jsx)(c,{name:`file`,className:`size-4 shrink-0 text-muted-foreground`}),(0,g.jsx)(`span`,{className:`typography-ui text-muted-foreground truncate flex-1`,children:j}),(0,g.jsx)(`button`,{type:`button`,onClick:()=>void A(),className:`size-6 flex items-center justify-center rounded-md text-foreground hover:bg-interactive-hover/50 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary`,title:e(`filesView.diagram.saveDiagram`),children:(0,g.jsx)(c,{name:`save-3`,className:`size-4`})}),(0,g.jsx)(`button`,{type:`button`,onClick:()=>n.getState().setActiveMainTab(`chat`),className:`size-6 flex items-center justify-center rounded-md text-muted-foreground hover:bg-interactive-hover/50 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary`,title:e(`filesView.diagram.closeDiagramView`),children:(0,g.jsx)(c,{name:`close`,className:`size-4`})})]}),(0,g.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,g.jsx)(m,{ref:C,xml:x,className:`h-full`})})]}):(0,g.jsx)(`div`,{className:`flex h-full items-center justify-center p-3`,children:(0,g.jsx)(`div`,{className:`typography-ui text-muted-foreground`,children:e(`filesView.editor.pickFileFromTree`)})})}export{_ as DiagramView};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{E as t,t as n}from"./useUIStore-D6BTB4va.js";import{$t as r,Jt as i,Xt as a,Yt as o,in as s,kn as c}from"./persistence-C_KCiMcY.js";import{nt as l,rt as u}from"./vendor-base-ui-CnHfUmDN.js";import{n as d}from"./vendor-react-DLPElpoQ.js";import{n as f,r as p,u as m}from"./vendor-reactuses-core-DDoDDyM9.js";import{n as h,t as g}from"./clipboard-CXWbHCAk.js";import{So as _,xi as v}from"./useMobileNavigationStore-
|
|
1
|
+
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{E as t,t as n}from"./useUIStore-D6BTB4va.js";import{$t as r,Jt as i,Xt as a,Yt as o,in as s,kn as c}from"./persistence-C_KCiMcY.js";import{nt as l,rt as u}from"./vendor-base-ui-CnHfUmDN.js";import{n as d}from"./vendor-react-DLPElpoQ.js";import{n as f,r as p,u as m}from"./vendor-reactuses-core-DDoDDyM9.js";import{n as h,t as g}from"./clipboard-CXWbHCAk.js";import{So as _,xi as v}from"./useMobileNavigationStore-1xHjnAsg.js";import{t as y}from"./utils-DyUyiLje.js";import{t as b}from"./useThemeSystem-DMzWVJaW.js";import{c as x,d as S,g as C,h as w,m as T,n as ee,o as E,p as D,r as O,s as k,t as te,v as A,x as ne}from"./markdownTheme-CCnvI6L0.js";import{n as re}from"./useRuntimeAPIs-DSLXJybW.js";import{a as j,i as M,n as N,r as P}from"./url-CGHw6D-E.js";import{c as ie,h as F,i as ae,o as I,s as L,t as R}from"./markdown-worker-Cq3Twp1A.js";import{n as oe}from"./useEffectiveDirectory-DG6uPzBG.js";import{a as z,c as B,d as V,f as se,i as ce,n as le,r as ue,u as de}from"./FadeInOnReveal-CvNA_aGD.js";import{t as fe}from"./vendor-morphdom-BbKiNDAu.js";import{n as pe,t as me}from"./vendor-beautiful-mermaid-DykqIK5D.js";import{t as H}from"./vendor-marked-WVekxjAN.js";import{t as U}from"./vendor-remend-C3cXc-tf.js";import{t as he}from"./vendor-katex-CNGgSigB.js";import{t as W}from"./vendor-dompurify-CeJNOzik.js";var G=e(u(),1),ge=d(),K=`text`,_e=/^(\d+):(\d+):(.+)$/,ve={ts:`typescript`,mts:`typescript`,cts:`typescript`,tsx:`tsx`,js:`javascript`,mjs:`javascript`,cjs:`javascript`,jsx:`jsx`,vue:`vue`,svelte:`svelte`,astro:`astro`,json:`json`,jsonc:`jsonc`,json5:`json5`,jsonl:`json`,ndjson:`json`,geojson:`json`,yaml:`yaml`,yml:`yaml`,toml:`toml`,ini:`ini`,cfg:`ini`,conf:`ini`,properties:`properties`,env:`dotenv`,css:`css`,scss:`scss`,sass:`sass`,less:`less`,styl:`stylus`,html:`html`,htm:`html`,xml:`xml`,svg:`xml`,md:`markdown`,markdown:`markdown`,mdown:`markdown`,mkd:`markdown`,mdx:`mdx`,py:`python`,pyw:`python`,pyi:`python`,rb:`ruby`,go:`go`,rs:`rust`,java:`java`,kt:`kotlin`,kts:`kotlin`,swift:`swift`,scala:`scala`,c:`c`,h:`c`,cc:`cpp`,cpp:`cpp`,cxx:`cpp`,hpp:`cpp`,hh:`cpp`,m:`objective-c`,mm:`objective-cpp`,cs:`csharp`,fs:`fsharp`,fsx:`fsharp`,vb:`vb`,php:`php`,pl:`perl`,pm:`perl`,lua:`lua`,r:`r`,dart:`dart`,ex:`elixir`,exs:`elixir`,erl:`erlang`,hrl:`erlang`,hs:`haskell`,clj:`clojure`,cljs:`clojure`,cljc:`clojure`,groovy:`groovy`,jl:`julia`,ml:`ocaml`,mli:`ocaml`,zig:`zig`,nix:`nix`,sol:`solidity`,prisma:`prisma`,proto:`proto`,graphql:`graphql`,gql:`graphql`,sql:`sql`,sh:`shellscript`,bash:`shellscript`,zsh:`shellscript`,fish:`shellscript`,ps1:`powershell`,psm1:`powershell`,bat:`bat`,cmd:`bat`,tf:`terraform`,tfvars:`terraform`,hcl:`hcl`,diff:`diff`,patch:`diff`,csv:`csv`,tex:`latex`,vim:`viml`,wgsl:`wgsl`,glsl:`glsl`,wat:`wasm`,mermaid:`mermaid`,mmd:`mermaid`},ye={dockerfile:`docker`,containerfile:`docker`,makefile:`make`,gnumakefile:`make`,"cmakelists.txt":`cmake`,gemfile:`ruby`,rakefile:`ruby`,podfile:`ruby`,".env":`dotenv`,".bashrc":`shellscript`,".zshrc":`shellscript`,".profile":`shellscript`},be=e=>{let t=e.split(/[\\/]/).pop()?.toLowerCase()??``;if(!t)return K;let n=ye[t];if(n)return n;let r=t.lastIndexOf(`.`);return r<=0?K:ve[t.slice(r+1)]??K},xe=e=>{let t=e?.trim()??``;if(!t)return{lang:K,label:K,reference:!1};let n=_e.exec(t);if(!n){let e=t.toLowerCase();return{lang:e,label:e,reference:!1}}let[,r=``,i=``,a=``]=n,o=r===i?r:`${r}-${i}`;return{lang:be(a),label:`${a}:${o}`,reference:!0}},Se=e=>e===` `||e===` `||e===`
|
|
2
2
|
`||e===`\r`,Ce=e=>e!==void 0&&e>=`0`&&e<=`9`,we=e=>e===`\\`||e===`^`||e===`_`||e===`{`||e===`}`||e===`=`||e===`+`||e===`*`||e===`/`||e===`-`,Te=e=>{for(let t=0;t<e.length;t+=1){let n=e[t];if(n!==void 0&&we(n))return!0}return!1},Ee=e=>{for(let t=0;t<e.length;t+=1){let n=e[t];if(n===`"`||n===`'`||Se(n))return!0}return!1},De=e=>{let t=0;for(;t<e.length;){let n=e.indexOf(`$`,t);if(n<0)return;let r=e[n+1];if(r===`$`||r!==void 0&&!Se(r))return n;t=n+1}},Oe=e=>{if(e[0]===`$`){if(e[1]===`$`){let t=e.indexOf(`$$`,2);return t<0?void 0:{raw:e.slice(0,t+2),text:e.slice(2,t),display:!0}}if(!(e.length<3||Se(e[1])))for(let t=1;t<e.length;t+=1){let n=e[t];if(n===`\\`){t+=1;continue}if(n!==`$`)continue;if(e[t+1]===`$`||Se(e[t-1]))return;if(Ce(e[t+1]))continue;if(t===1)return;let r=e.slice(1,t);return Ce(e[1])&&!Te(r)&&Ee(r)?void 0:{raw:e.slice(0,t+1),text:r,display:!1}}}},q=e=>e.replace(/&/g,`&`).replace(/"/g,`"`).replace(/</g,`<`).replace(/>/g,`>`),ke=e=>/^\[[^\]]+\]:\s+\S+/m.test(e)||/^\[\^[^\]]+\]:\s+/m.test(e),Ae=e=>{let t=e.match(/^[ \t]{0,3}(`{3,}|~{3,})/);if(!t)return!1;let n=t[1];if(!n)return!1;let r=n[0],i=n.length,a=e.trimEnd().split(`
|
|
3
3
|
`).at(-1)?.trim()??``;return!RegExp(`^[\\t ]{0,3}${r}{${i},}[\\t ]*$`).test(a)},je=e=>{try{return U(e,{linkMode:`text-only`})}catch{return e}},Me=(e,t)=>{let n=t?`live`:`full`;if(ke(e))return[{raw:e,src:je(e),mode:n,highlight:!0}];let r;try{r=H.lexer(e)}catch{return[{raw:e,src:je(e),mode:n,highlight:!0}]}let i=-1;for(let e=r.length-1;e>=0;--e)if(r[e]?.type!==`space`){i=e;break}if(i<0)return[{raw:e,src:je(e),mode:n,highlight:!0}];let a=[];for(let e=0;e<r.length;e+=1){let t=r[e];if(!t||t.type===`space`)continue;let o=t.raw??``,s=e===i,c=t.type===`code`&&Ae(o);a.push({raw:o,src:c?o:je(o),mode:s?n:`full`,highlight:!c})}return a.length===0?[{raw:e,src:je(e),mode:n,highlight:!0}]:a},Ne=16,Pe=new Map,Fe=(e,t)=>{let n=`${+!!t}:${e}`,r=Pe.get(n);if(r)return Pe.delete(n),Pe.set(n,r),r;let i=Me(e,t);for(;Pe.size>=Ne;){let e=Pe.keys().next().value;if(typeof e!=`string`)break;Pe.delete(e)}return Pe.set(n,i),i},Ie=(e,t,n)=>{try{return he.renderToString(e,{displayMode:n,throwOnError:!1})}catch{return t}},Le=H.use({gfm:!0,breaks:!1,extensions:[{name:`inlineMath`,level:`inline`,start(e){let t=e.indexOf(`\\(`);return t<0?void 0:t},tokenizer(e){let t=/^\\\(([\s\S]+?)\\\)/.exec(e);if(t)return{type:`inlineMath`,raw:t[0],text:t[1]??``}},renderer(e){let t=e;return Ie(t.text,t.raw,!1)}},{name:`blockMath`,level:`block`,start(e){let t=e.indexOf(`\\[`);return t<0?void 0:t},tokenizer(e){let t=/^\\\[([\s\S]+?)\\\]/.exec(e);if(t)return{type:`blockMath`,raw:t[0],text:t[1]??``}},renderer(e){let t=e;return Ie(t.text,t.raw,!0)}},{name:`dollarMath`,level:`inline`,start(e){return De(e)},tokenizer(e){let t=Oe(e);if(t)return{type:`dollarMath`,raw:t.raw,text:t.text,display:t.display}},renderer(e){let t=e;return Ie(t.text,t.raw,t.display)}}],renderer:{link({href:e,title:t,text:n}){let r=e??``,i=de(r);if(i)return`<a href="${q(B(i))}" data-openchamber-agent-mention="true" class="text-primary hover:underline" target="_blank" rel="noopener noreferrer">${n}</a>`;let a=V(r);if(a)return`<a href="${q(r)}" data-skill-name="${q(a)}" class="text-primary hover:underline">${n}</a>`;let o=t?` title="${q(t)}"`:``;return`<a href="${q(r)}"${o} class="external-link" target="_blank" rel="noopener noreferrer">${n}</a>`}}}),Re=e=>e.replace(/\$\$([\s\S]*?)\$\$/g,(e,t)=>{try{return he.renderToString(t,{displayMode:!0,throwOnError:!1})}catch{return`$$${t}$$`}}),ze=e=>e.indexOf(`$`)===-1?e:e.split(/(<(?:pre|code|kbd)[^>]*>[\s\S]*?<\/(?:pre|code|kbd)>)/gi).map((e,t)=>t%2==1?e:Re(e)).join(``),Be=/<pre><code(?:\s+class="language-([^"]*)")?>([\s\S]*?)<\/code><\/pre>/g,Ve=1200,He=200,Ue=(e,t)=>{let n=1;for(let r=0;r<e.length;r+=1)if(e.charCodeAt(r)===10&&++n>t)return!0;return!1},We=e=>e.replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/&/g,`&`),Ge=e=>e.reference?`data-md-lang="${q(e.lang)}" data-md-label="${q(e.label)}"`:`data-md-lang="${q(e.lang)}"`,Ke=async(e,t,n)=>{if(t?.aborted)return null;let i=[...e.matchAll(Be)];if(i.length===0)return e;let a=r()?He:Ve,o=e;for(let e of i){if(t?.aborted)return null;let[r,i,s]=e,c=xe(i);if(c.lang===`mermaid`&&!c.reference)continue;let l=We(s??``);if(Ue(l,a)){o=o.replace(r,()=>r.replace(`<pre`,`<pre ${Ge(c)}`));continue}let u=await R(l,c.lang,{signal:t,priority:n});if(t?.aborted)return null;if(u){let e=u.replace(/^<pre/,`<pre ${Ge(c)}`);o=o.replace(r,()=>e)}}return o},qe={USE_PROFILES:{html:!0,mathMl:!0,svg:!0},ADD_TAGS:[`svg`,`path`,`g`,`rect`,`line`,`polygon`,`polyline`,`circle`,`ellipse`,`text`,`tspan`,`defs`,`marker`],ADD_ATTR:[`d`,`viewBox`,`preserveAspectRatio`,`xmlns`,`target`,`fill`,`stroke`,`stroke-width`,`transform`,`points`,`x`,`y`,`x1`,`y1`,`x2`,`y2`,`cx`,`cy`,`r`,`rx`,`ry`,`style`],FORBID_TAGS:[`script`],FORBID_CONTENTS:[`script`]},Je=!1,Ye=()=>{Je||typeof window>`u`||!W.isSupported||(Je=!0,W.addHook(`uponSanitizeAttribute`,(e,t)=>{if(!(e instanceof HTMLImageElement)||t.attrName!==`src`)return;let n=typeof t.attrValue==`string`?t.attrValue:``;/^file:/i.test(n)&&(e.setAttribute(`data-md-image-source`,n),t.keepAttr=!1)}),W.addHook(`afterSanitizeAttributes`,e=>{e instanceof HTMLAnchorElement&&e.target===`_blank`&&e.setAttribute(`rel`,`noopener noreferrer`)}))},Xe=e=>W.isSupported?(Ye(),W.sanitize(e,qe)):``,Ze=`data-md-sanitize-block`,Qe=e=>{if(e.length===0)return[];if(e.length===1)return[Xe(e[0])];if(!W.isSupported||typeof document>`u`)return e.map(e=>Xe(e));let t=e.map((e,t)=>`<div ${Ze}="${t}">${e}</div>`).join(``),n=document.createElement(`div`);n.innerHTML=Xe(t);let r=e.map(()=>``);return n.querySelectorAll(`[${Ze}]`).forEach(e=>{let t=Number(e.getAttribute(Ze));Number.isInteger(t)&&t>=0&&t<r.length&&(r[t]=e.innerHTML)}),r},$e=240,et=16777216,tt=160,nt=8388608,rt=new L({maxEntries:$e,maxBytes:et}),it=new L({maxEntries:tt,maxBytes:nt}),at=e=>{let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return(t>>>0).toString(36)},ot=e=>e.length*2,st=(e,t)=>{rt.set(e,t,ot(e)+ot(t.hash)+ot(t.html))},ct=async(e,t,n)=>{if(t?.aborted)return null;let r=await Promise.resolve(Le.parse(e.src));if(t?.aborted)return null;let i=ze(r);if(t?.aborted)return null;let a=e.highlight?await Ke(i,t,n):i;if(a===null||t?.aborted)return null;let o=Xe(a);return t?.aborted?null:o},lt=e=>`${at(e)}:${e.length}`,ut=e=>{let t=it.get(lt(e));return t?.source===e?t.html:void 0},dt=(e,t)=>{let n=lt(e);it.set(n,{source:e,html:t},ot(n)+ot(e)+ot(t))},ft=e=>ze(Le.parse(e)),pt=e=>{if(!e)return[];let t=Fe(e,!1).map(e=>e.src),n=Array(t.length).fill(``),r=[],i=[];t.forEach((e,t)=>{let a=ut(e);if(a!==void 0){n[t]=a;return}r.push(t),i.push(ft(e))});let a=Qe(i);return r.forEach((e,r)=>{let i=a[r]??``;n[e]=i,dt(t[e],i)}),n},mt=8,ht=()=>typeof performance<`u`?performance.now():Date.now(),gt=e=>e?.aborted?Promise.resolve(!1):new Promise(t=>{let n=!1,r=r=>{n||(n=!0,e?.removeEventListener(`abort`,a),t(r))},i=ce(()=>{r(!e?.aborted)},{priority:`visible`}),a=()=>{i(),r(!1)};e?.addEventListener(`abort`,a,{once:!0})}),_t=async(e,t,n,r)=>{if(!e)return[];let i=Fe(e,t),a=t?`visible`:`background`,o=async(e,t)=>{if(r?.aborted)return null;let i=at(e.raw),o=`${i}:${e.mode}:${+!!e.highlight}`,s=`${n}:${t}:${e.mode}`,c=rt.get(s);if(c&&c.hash===i)return{id:o,html:c.html};let l=await ct(e,r,a);return l===null||r?.aborted?null:(st(s,{hash:i,html:l}),{id:o,html:l})};if(t)return(await Promise.all(i.map(o))).filter(e=>e!==null);let s=[],c=0;for(let e=0;e<i.length&&!r?.aborted;e+=1){let t=i[e];if(!t)continue;if(ht()>=c){if(!await gt(r))break;c=ht()+mt}let n=await o(t,e);n&&s.push(n)}return s},J=e=>Number.isFinite(e)&&e>0,vt=e=>{if(typeof e==`number`)return J(e)?e:null;if(typeof e!=`string`)return null;let t=e.trim().match(/^([+-]?(?:(?:\d+\.?\d*)|(?:\.\d+))(?:[eE][+-]?\d+)?)(?:px)?$/);if(!t)return null;let n=Number(t[1]);return J(n)?n:null},yt=(e,t,n)=>Math.min(n,Math.max(t,e)),bt=6,xt=1.25,St=1.0015,Ct=16,wt=1e3,Tt=.5,Et=12,Dt=400,Ot=`[data-markdown="mermaid-block"]`,kt=e=>e.querySelector(Ot)!==null,At=e=>[e.x,e.y,e.width,e.height].map(e=>{let t=Number(e.toFixed(bt));return Object.is(t,-0)?`0`:String(t)}).join(` `),jt=e=>{let t=e.viewBox?.trim().split(/[\s,]+/).map(e=>Number.parseFloat(e));if(t?.length===4){let[e,n,r,i]=t;if(Number.isFinite(e)&&Number.isFinite(n)&&J(r)&&J(i))return{x:e,y:n,width:r,height:i}}let n=vt(e.width),r=vt(e.height);return n===null||r===null?null:{x:0,y:0,width:n,height:r}},Mt=e=>{let t=2166136261;for(let n=0;n<e.length;n+=1)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return(t>>>0).toString(36)},Nt=e=>{let t=e.renderMode||`unknown`,n=e.svgMarkup??``;if(!n){let n=[e.viewBox??``,e.width??``,e.height??``];return n.some(e=>e!==``)?`${t}:bounds:${n.join(`:`)}`:`${t}:no-svg`}return[t,Mt(n)].join(`:`)},Pt=(e,t)=>{if(!J(t.width)||!J(t.height))return e;let n=e.width/e.height,r=t.width/t.height;if(n>r){let t=e.width/r;return{x:e.x,y:e.y-(t-e.height)/2,width:e.width,height:t}}let i=e.height*r;return{x:e.x-(i-e.width)/2,y:e.y,width:i,height:e.height}},Ft=({currentBox:e,viewport:t,delta:n})=>!J(t.width)||!J(t.height)||!J(e.width)||!J(e.height)?e:{x:e.x-n.x/t.width*e.width,y:e.y-n.y/t.height*e.height,width:e.width,height:e.height},It=(e,t,n)=>{let r=e*(t===1?Ct:t===2?J(n)?n:0:1);return Number.isFinite(r)?yt(r,-1e3,wt):0},Lt=e=>{let t=null;for(let n of e){if(!t){t=n;continue}return{center:{x:(t.x+n.x)/2,y:(t.y+n.y)/2},distance:Math.hypot(n.x-t.x,n.y-t.y)}}return null},Rt=(e,t)=>{let n=t.x-e.x,r=t.y-e.y;return n*n+r*r>9},zt=({currentBox:e,contentBox:t,viewport:n,pointer:r,zoomFactor:i,minScale:a,maxScale:o})=>{if(!J(n.width)||!J(n.height)||!J(i)||!J(e.width)||!J(e.height)||!J(t.width)||!J(t.height)||!J(a)||!J(o))return e;let s=Math.min(a,o),c=Math.max(a,o),l=Pt(t,n),u=yt(l.width/e.width*i,s,c),d=l.width/u,f=d/(e.width/e.height),p=yt(r.x/n.width,0,1),m=yt(r.y/n.height,0,1),h=e.x+p*e.width,g=e.y+m*e.height;return{x:h-p*d,y:g-m*f,width:d,height:f}},Bt=({currentBox:e,contentBox:t,viewport:n,previousGesture:r,gesture:i,minScale:a,maxScale:o})=>!J(r.distance)||!J(i.distance)?e:zt({currentBox:Ft({currentBox:e,viewport:n,delta:{x:i.center.x-r.center.x,y:i.center.y-r.center.y}}),contentBox:t,viewport:n,pointer:i.center,zoomFactor:i.distance/r.distance,minScale:a,maxScale:o}),Vt=new WeakMap,Ht=e=>e instanceof HTMLElement?Vt.get(e)??null:null,Ut=e=>e.querySelector(`[data-markdown="mermaid-viewport"]`)??e.querySelector(`[data-markdown="mermaid"]`),Wt=e=>{let t=e.querySelector(`[data-markdown="mermaid"] svg`),n=e.querySelector(`[data-markdown="mermaid"]`);return Nt({renderMode:e.getAttribute(`data-mermaid-render`),svgMarkup:n?.getAttribute(`data-md-original-svg`)??t?.outerHTML??null,viewBox:t?.getAttribute(`viewBox`),width:t?.getAttribute(`width`),height:t?.getAttribute(`height`)})},Gt=e=>{let t=e.getBoundingClientRect();return{width:t.width,height:t.height}},Kt=(e,t)=>({x:e.clientX-t.left,y:e.clientY-t.top}),qt=(e,t)=>Kt(e,t.getBoundingClientRect()),Jt=e=>e instanceof Element&&!!e.closest(`button, a, [role="button"]`),Yt=e=>{let t=Ut(e),n=e.querySelector(`[data-markdown="mermaid"] svg`);if(!t||!n)return null;let r=jt({viewBox:n.getAttribute(`viewBox`),width:n.getAttribute(`width`),height:n.getAttribute(`height`)});if(!r)return null;let i=r,a=null,o=null,s=null,c=new Map,l=new Set,u=null,d=null,f=e=>{i=e,n.setAttribute(`viewBox`,At(e)),n.removeAttribute(`width`),n.removeAttribute(`height`)},p=()=>{f(Pt(r,Gt(t)))},m=(e,n)=>{f(zt({currentBox:i,contentBox:r,viewport:Gt(t),pointer:e,zoomFactor:n,minScale:Tt,maxScale:Et}))},h=()=>{let e=Gt(t);m({x:e.width/2,y:e.height/2},xt)},g=()=>{let e=Gt(t);m({x:e.width/2,y:e.height/2},1/xt)},_=e=>{e.preventDefault(),e.stopPropagation();let n=It(e.deltaY,e.deltaMode,Gt(t).height);m(qt(e,t),St**+-n)},v=e=>{try{t.setPointerCapture(e),l.add(e)}catch{}},y=e=>{if(l.delete(e))try{t.hasPointerCapture(e)&&t.releasePointerCapture(e)}catch{}},b=()=>{a=null,o=null,s=null,c.clear(),u=null},x=()=>{b(),e.removeAttribute(`data-mermaid-panning`),e.hasAttribute(`data-mermaid-suppress-click`)&&(d=window.setTimeout(()=>{e.removeAttribute(`data-mermaid-suppress-click`),d=null},Dt))},S=n=>{if(n.pointerType!==`touch`&&n.button!==0||Jt(n.target))return;d!==null&&(window.clearTimeout(d),d=null),e.removeAttribute(`data-mermaid-suppress-click`);let r=qt(n,t);v(n.pointerId),e.setAttribute(`data-mermaid-panning`,`true`),n.pointerType===`touch`?(c.set(n.pointerId,r),c.size>=2?(a=null,o=null,s=null,u=Lt(c.values()),e.setAttribute(`data-mermaid-suppress-click`,`true`)):(a=n.pointerId,o=r,s=r)):(a=n.pointerId,o=r,s=r),n.preventDefault()},C=n=>{if(n.pointerType===`touch`){if(!c.has(n.pointerId))return;let a=qt(n,t);if(c.set(n.pointerId,a),c.size>=2){let a=Lt(c.values());u&&a&&f(Bt({currentBox:i,contentBox:r,viewport:Gt(t),previousGesture:u,gesture:a,minScale:Tt,maxScale:Et})),u=a,e.setAttribute(`data-mermaid-suppress-click`,`true`),n.preventDefault();return}}if(a!==n.pointerId||!s)return;let l=qt(n,t);f(Ft({currentBox:i,viewport:Gt(t),delta:{x:l.x-s.x,y:l.y-s.y}})),s=l,o&&Rt(o,l)&&e.setAttribute(`data-mermaid-suppress-click`,`true`),n.preventDefault()},w=e=>{if(e.pointerType===`touch`||c.has(e.pointerId)){if(!c.has(e.pointerId))return;if(c.delete(e.pointerId),u=Lt(c.values()),c.size>0){for(let[e,t]of c){a=e,o=t,s=t;break}c.size>=2&&(a=null,o=null,s=null),y(e.pointerId);return}x(),y(e.pointerId);return}a===e.pointerId&&(x(),y(e.pointerId))},T=()=>{p()};t.addEventListener(`wheel`,_,{passive:!1}),t.addEventListener(`pointerdown`,S),t.addEventListener(`pointermove`,C),t.addEventListener(`pointerup`,w),t.addEventListener(`pointercancel`,w),t.addEventListener(`lostpointercapture`,w),window.addEventListener(`resize`,T);let ee=typeof ResizeObserver>`u`?null:new ResizeObserver(T);return ee?.observe(t),p(),{zoomIn:h,zoomOut:g,fit:p,cleanup:()=>{t.removeEventListener(`wheel`,_),t.removeEventListener(`pointerdown`,S),t.removeEventListener(`pointermove`,C),t.removeEventListener(`pointerup`,w),t.removeEventListener(`pointercancel`,w),t.removeEventListener(`lostpointercapture`,w),window.removeEventListener(`resize`,T),ee?.disconnect(),d!==null&&window.clearTimeout(d);for(let e of Array.from(l))y(e);b(),e.removeAttribute(`data-mermaid-panning`),e.removeAttribute(`data-mermaid-suppress-click`),Vt.delete(e)}}},Xt=e=>{let t=new Map,n=new Map,r=()=>{for(let[r,i]of Array.from(t.entries())){let a=Wt(r);(!e.contains(r)||a!==n.get(r))&&(i.cleanup(),t.delete(r),n.delete(r))}for(let r of Array.from(e.querySelectorAll(Ot))){if(t.has(r)||r.querySelector(`[data-markdown="mermaid"] svg`)===null)continue;let e=Yt(r);e&&(t.set(r,e),n.set(r,Wt(r)),Vt.set(r,e))}};return r(),{refresh:r,cleanup:()=>{for(let e of t.values())e.cleanup();t.clear(),n.clear()}}},Y=(e,t=`size-3.5`)=>`<svg class="oc-icon ${t}" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><use href="#oc-${e}"></use></svg>`,Zt={copy:Y(`file-copy`),check:Y(`check`),download:Y(`download`),zoomIn:Y(`add`),zoomOut:Y(`subtract`),fit:Y(`refresh`),textWrap:Y(`text-wrap`),image:Y(`file-image`,`size-10`),imageDownload:Y(`download`,`size-3`),imageLoading:Y(`loader-4`,`size-3.5 animate-spin motion-reduce:animate-none`)},Qt=`p-1 rounded hover:bg-interactive-hover/60 text-muted-foreground hover:text-foreground transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--interactive-focus-ring)]`,$t=(e,t)=>{e.innerHTML=t},X=(e,t,n)=>{let r=document.createElement(`button`);return r.type=`button`,r.className=Qt,r.setAttribute(`data-md-action`,n),r.setAttribute(`title`,t),r.setAttribute(`aria-label`,t),$t(r,Zt[e]),r},en=(e,t,n)=>{let r=e.querySelector(`[data-md-code-body]`),i=e.querySelector(`pre`),a=e.querySelector(`pre code`),o=e.querySelector(`[data-md-action="toggle-code-wrap"]`);if(e.setAttribute(`data-code-wrap`,t?`true`:`false`),r?.classList.toggle(`overflow-x-auto`,!t),r?.classList.toggle(`overflow-x-hidden`,t),i?.classList.toggle(`whitespace-pre-wrap`,t),i?.classList.toggle(`break-words`,t),a?.classList.toggle(`whitespace-pre-wrap`,t),a?.classList.toggle(`break-words`,t),i&&(i.style.whiteSpace=t?`pre-wrap`:`pre`,i.style.overflowWrap=t?`anywhere`:`normal`),a&&(a.style.whiteSpace=t?`pre-wrap`:`pre`,a.style.overflowWrap=t?`anywhere`:`normal`),o){let e=t?n.disableCodeWrap:n.enableCodeWrap;o.setAttribute(`title`,e),o.setAttribute(`aria-label`,e),o.classList.toggle(`text-foreground`,t),o.classList.toggle(`opacity-100`,t),o.classList.toggle(`text-muted-foreground`,!t),o.classList.toggle(`opacity-65`,!t),o.setAttribute(`aria-pressed`,t?`true`:`false`)}},tn=e=>{let t=document.createElement(`div`);t.setAttribute(`data-md-code-line-numbers`,``),t.setAttribute(`aria-hidden`,`true`),t.className=`min-w-8 shrink-0 select-none border-r border-border/50 pr-3 text-right font-mono text-[13px] text-muted-foreground/45`;let n=e.textContent??``,r=Math.max(1,n.endsWith(`
|
|
4
4
|
`)?n.split(`
|
package/dist/assets/{MobileDetailNavigation-5tAL5d_M.js → MobileDetailNavigation-lVtCe-5P.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{E as t,w as n}from"./useUIStore-D6BTB4va.js";import{kn as r,u as i}from"./persistence-C_KCiMcY.js";import{nt as a,rt as o}from"./vendor-base-ui-CnHfUmDN.js";import{n as s}from"./vendor-react-DLPElpoQ.js";import{s as c,t as l}from"./vendor-tanstack-react-query-D7pys_c9.js";import{bo as u,xo as d}from"./useMobileNavigationStore-DhkIZBJw.js";import{t as f}from"./utils-DyUyiLje.js";import{n as p}from"./Icon-BPJ_quEe.js";import{t as m}from"./button-BmNJBT13.js";var h=e(o(),1),g=s(),_=class extends Error{code;status;resource;constructor(e,t,n){super(e),this.code=e,this.status=t,this.resource=n}},v=class extends _{operation;constructor(e,t,n){super(e,t,`share_operation`),this.operation=n}},y=(e,t=200)=>{throw new _(`invalid_${e}_response`,t,e)},b=(e,t)=>e&&typeof e==`object`&&!Array.isArray(e)?e:y(t),x=(e,t)=>typeof e==`string`?e:y(t),S=(e,t)=>e===null||typeof e==`string`?e:y(t),C=(e,t)=>typeof e==`number`&&Number.isFinite(e)?e:y(t),w=(e,t)=>e===null?null:C(e,t),T=(e,t)=>typeof e==`boolean`?e:y(t),E=(e,t,n)=>t.includes(e)?e:y(n),D=e=>{let t=b(e,`capability`);return{supported:T(t.supported,`capability`),enabled:T(t.enabled,`capability`),revision:C(t.revision,`capability`),serverInstanceID:S(t.serverInstanceID,`capability`)}},O=e=>{let t=b(e,`assistant`),n=Array.isArray(t.historySessionIDs)?t.historySessionIDs.map(e=>x(e,`assistant`)):[],r=t.historySessionCount===void 0?n.length:C(t.historySessionCount,`assistant`);return!Number.isSafeInteger(r)||r<n.length?y(`assistant`):{id:x(t.id,`assistant`),revision:C(t.revision,`assistant`),enabled:T(t.enabled,`assistant`),name:x(t.name,`assistant`),defaultPrompt:x(t.defaultPrompt,`assistant`),workspacePath:S(t.workspacePath,`assistant`),effectiveWorkspacePath:x(t.effectiveWorkspacePath,`assistant`),managedWorkspacePath:S(t.managedWorkspacePath??null,`assistant`),providerID:x(t.providerID,`assistant`),modelID:x(t.modelID,`assistant`),agent:S(t.agent,`assistant`),variant:S(t.variant??null,`assistant`),mode:E(t.mode,[`continuous`,`stateless`],`assistant`),sessionID:S(t.sessionID,`assistant`),sessionGeneration:C(t.sessionGeneration,`assistant`),historySessionIDs:n,historySessionCount:r,createdAt:w(t.createdAt,`assistant`),updatedAt:C(t.updatedAt,`assistant`),tombstoneAt:w(t.tombstoneAt,`assistant`)}},k=e=>{let t=b(e,`snapshot`);return{revision:C(t.revision,`snapshot`),enabled:T(t.enabled,`snapshot`),assistants:Array.isArray(t.assistants)?t.assistants.map(O):y(`snapshot`)}},A=e=>{let t=b(e,`binding`);return{sessionID:S(t.sessionID,`binding`),directory:x(t.directory,`binding`),sessionGeneration:C(t.sessionGeneration,`binding`)}},j=e=>{let t=b(e,`compact`);return t.summarized===!0?{binding:A(t.binding),summarized:!0}:y(`compact`)},M=e=>{let t=b(e,`message_admission`);return t.admitted===!0?{binding:A(t.binding),messageID:x(t.messageID,`message_admission`),admitted:!0}:y(`message_admission`)},N=e=>{let t=b(e,`share_operation`);return{operationID:x(t.operationID,`share_operation`),assistantID:x(t.assistantID,`share_operation`),sessionID:S(t.sessionID,`share_operation`),messageID:S(t.messageID,`share_operation`),state:E(t.state,[`submitting`,`running`,`completed`,`failed`,`unresolved`],`share_operation`),phase:x(t.phase,`share_operation`),attempt:C(t.attempt,`share_operation`),leaseExpiresAt:w(t.leaseExpiresAt,`share_operation`),errorCode:S(t.errorCode,`share_operation`)}},P=e=>{let t=b(e,`assistant_history`),n=S(t.nextCursor,`assistant_history`),r=T(t.complete,`assistant_history`);return!r&&!n||r&&n||!Array.isArray(t.entries)?y(`assistant_history`):{entries:t.entries.map(e=>{let t=b(e,`assistant_history_entry`),n=x(t.sessionID,`assistant_history_entry`),r=b(t.info,`assistant_history_info`),i=b(r.time,`assistant_history_info`);if(x(r.id,`assistant_history_info`),x(r.sessionID,`assistant_history_info`)!==n||(E(r.role,[`user`,`assistant`,`system`,`tool`],`assistant_history_info`),C(i.created,`assistant_history_info`),!Array.isArray(t.parts)))return y(`assistant_history_entry`);let a=t.parts.map(e=>{let t=b(e,`assistant_history_part`);return x(t.id,`assistant_history_part`),x(t.sessionID,`assistant_history_part`)!==n||x(t.messageID,`assistant_history_part`)!==r.id?y(`assistant_history_part`):(x(t.type,`assistant_history_part`),t)});return{sessionID:n,directory:S(t.directory,`assistant_history_entry`),info:r,parts:a}}),nextCursor:n,complete:r}},F=30,I={snapshot:(e=t())=>[e,`assistants`,`snapshot`],capability:(e=t())=>[e,`assistants`,`capability`],history:(e,r,i,a=t(),o=n())=>[a,o,`assistants`,`history`,e,r,i]},L=(e,t,n)=>{if(!e||!t)return;let r=t.queryKey;if(r[0]===n.transport&&r[1]===n.runtimeGeneration&&r[2]===`assistants`&&r[3]===`history`&&r[4]===n.assistantID)return e},R=async(e,t={})=>{let n=await r(e,t),i=await n.json().catch(()=>null);if(!n.ok)throw new _(i&&typeof i==`object`&&`error`in i&&typeof i.error==`string`?i.error:`request_failed`,n.status);return i},z=(e,t)=>({method:e,headers:{"Content-Type":`application/json`},body:t===void 0?void 0:JSON.stringify(t)}),B=(e,r)=>{if(t()!==e||n()!==r)throw new _(`runtime_stale`,409)},V=(e,t,r)=>{i.setQueryData(I.snapshot(r),n=>n&&{...n,assistants:n.assistants.map(n=>n.id!==e||n.sessionGeneration>t.sessionGeneration?n:{...n,sessionID:t.sessionID,sessionGeneration:t.sessionGeneration,effectiveWorkspacePath:t.directory})}),i.invalidateQueries({queryKey:I.snapshot(r)}),i.invalidateQueries({queryKey:[r,n(),`assistants`,`history`,e]})},H=(e,t)=>{i.setQueryData(I.snapshot(t),t=>t&&{...t,assistants:t.assistants.some(t=>t.id===e.id)?t.assistants.map(t=>t.id===e.id?e:t):[...t.assistants,e]}),i.invalidateQueries({queryKey:I.snapshot(t)})},U=(e=t())=>({queryKey:I.snapshot(e),queryFn:async({signal:e})=>k(await R(`/api/openchamber/assistants/snapshot`,{signal:e})),retry:2}),W=()=>{let e=(0,g.c)(5),n,r,a;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=t(),n=c,r=U(a),e[0]=n,e[1]=r,e[2]=a):(n=e[0],r=e[1],a=e[2]);let o=n(r),s,l;return e[3]===Symbol.for(`react.memo_cache_sentinel`)?(s=()=>d(e=>{if(t()!==a)return;if(e.type===`event-stream-ready`){i.invalidateQueries({queryKey:I.snapshot(a),exact:!0});return}if(e.type!==`assistants-changed`)return;let n=i.getQueryData(I.snapshot(a));(!n||e.revision>n.revision)&&i.invalidateQueries({queryKey:I.snapshot(a),exact:!0})}),l=[a],e[3]=s,e[4]=l):(s=e[3],l=e[4]),h.useEffect(s,l),o},G=(e,r,i,a=t(),o=n())=>({queryKey:I.history(e,r,i,a,o),queryFn:async({signal:t,pageParam:n})=>{B(a,o),await u(),B(a,o);let r=new URLSearchParams({limit:String(F)});n&&r.set(`before`,n);let i=P(await R(`/api/openchamber/assistants/${encodeURIComponent(e)}/messages?${r}`,{signal:t}));return B(a,o),i},initialPageParam:null,getNextPageParam:K,placeholderData:(t,n)=>L(t,n,{assistantID:e,transport:a,runtimeGeneration:o}),retry:2}),K=e=>e.complete?void 0:e.nextCursor??void 0,q=(e,t,n)=>{let r=(0,g.c)(7),i=n===void 0||n,a=t.sessionID??``,o;r[0]!==e||r[1]!==t.sessionGeneration||r[2]!==a?(o=G(e,a,t.sessionGeneration),r[0]=e,r[1]=t.sessionGeneration,r[2]=a,r[3]=o):o=r[3];let s=i&&!!(e&&t.sessionID),c;return r[4]!==o||r[5]!==s?(c={...o,enabled:s},r[4]=o,r[5]=s,r[6]=c):c=r[6],l(c)},J=async e=>k(await R(`/api/openchamber/assistants/snapshot`,{signal:e})),Y=(e=t())=>({queryKey:I.capability(e),queryFn:()=>Q(),retry:!1}),X=()=>{let e=(0,g.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=Y(),e[0]=t):t=e[0],c(t)},Z=(e=i,n=t())=>e.getQueryData(I.snapshot(n)),ee=(e=i,n=t())=>e.fetchQuery(U(n)),te=async(e=i)=>{let r=t(),a=n();await e.invalidateQueries({queryKey:I.snapshot(r),exact:!0}),B(r,a);let o=await e.fetchQuery(U(r));return B(r,a),o},ne=async e=>{let r=t(),i=n();await u(),B(r,i);let a=A(await R(`/api/openchamber/assistants/${encodeURIComponent(e)}/session/ensure`,z(`POST`)));return B(r,i),V(e,a,r),a},re=async e=>{let r=t(),i=n(),a=A(await R(`/api/openchamber/assistants/${encodeURIComponent(e)}/session/new`,z(`POST`)));return B(r,i),V(e,a,r),a},ie=async(e,r)=>{let i=t(),a=n(),o=j(await R(`/api/openchamber/assistants/${encodeURIComponent(e)}/session/compact`,z(`POST`,{sessionID:r.sessionID,sessionGeneration:r.sessionGeneration})));return B(i,a),V(e,o.binding,i),o},ae=async(e,r)=>{let i=t(),a=n();await R(`/api/openchamber/assistants/${encodeURIComponent(e)}/session/abort`,z(`POST`,{sessionID:r.sessionID,sessionGeneration:r.sessionGeneration})),B(i,a)},oe=async(e,r,i,a,o=`composer`)=>{let s=t(),c=n(),l=M(await R(`/api/openchamber/assistants/${encodeURIComponent(e)}/messages`,z(`POST`,{sessionID:r.sessionID,sessionGeneration:r.sessionGeneration,messageID:i,parts:a,source:o})));return B(s,c),V(e,l.binding,s),l},se=async(e,r,i,a,o)=>{let s=t(),c=n(),l=N(await R(`/api/openchamber/assistants/${encodeURIComponent(e)}/share`,z(`POST`,{operationID:r,payload:{messageID:i,parts:a,source:o}})));return B(s,c),l},ce=async(e,r=t(),i=n())=>{B(r,i);let a=N(await R(`/api/openchamber/assistants/share-operations/${encodeURIComponent(e)}`));return B(r,i),a},le=async(e,r=t(),i=n())=>{let a=e;for(let e=0;e<60&&(a.state===`running`||a.state===`submitting`);e+=1)B(r,i),await new Promise(e=>setTimeout(e,750)),a=await ce(a.operationID,r,i);if(B(r,i),a.state===`completed`)return a;throw a.state===`failed`?new v(a.errorCode??`share_failed`,400,a):new v(`share_unresolved`,408,a)},ue=async(e,n)=>{await R(`/api/openchamber/assistants/settings`,z(`PUT`,{enabled:e,expectedRevision:n}));let r=t();await Promise.all([i.invalidateQueries({queryKey:I.snapshot(r),exact:!0}),i.invalidateQueries({queryKey:I.capability(r),exact:!0})])},de=async e=>{let n=t(),r=O(await R(`/api/openchamber/assistants`,z(`POST`,e)));return H(r,n),r},fe=async(e,r)=>{let i=t(),a=n(),o=O(await R(`/api/openchamber/assistants/${encodeURIComponent(e.id)}`,z(`PATCH`,{...r,expectedRevision:e.revision})));return B(i,a),H(o,i),o},pe=async e=>{await R(`/api/openchamber/assistants/${encodeURIComponent(e.id)}`,z(`DELETE`,{expectedRevision:e.revision})),await i.invalidateQueries({queryKey:I.snapshot(t())})},Q=async()=>D(await R(`/api/openchamber/assistants/capability`)),$=a();function me(e){let t=(0,g.c)(32),{title:n,subtitle:r,backAriaLabel:i,onBack:a,backDisabled:o,actions:s,trailing:c,sticky:l,overlay:u,elevated:d}=e,h=o!==void 0&&o,_;t[0]===s?_=t[1]:(_=s===void 0?[]:s,t[0]=s,t[1]=_);let v=_,y=l!==void 0&&l,b=u!==void 0&&u,x=d!==void 0&&d,S=!!c||v.length>0,C=x||v.some(ge),w=y&&`oc-mobile-detail-navigation-sticky`,T=b&&`absolute inset-x-0 top-0`,E=C?`z-[60]`:b?`z-30`:void 0,D;t[2]!==w||t[3]!==T||t[4]!==E?(D=f(`oc-mobile-detail-navigation relative shrink-0 pt-[max(0.25rem,var(--oc-safe-area-top,0px))]`,w,T,E),t[2]=w,t[3]=T,t[4]=E,t[5]=D):D=t[5];let O=S&&v.length+ +!!c>1?`grid-cols-[2.75rem_minmax(0,1fr)_auto]`:`grid-cols-[2.75rem_minmax(0,1fr)_2.75rem]`,k;t[6]===O?k=t[7]:(k=f(`oc-mobile-detail-navigation-content grid items-center gap-1 px-4`,O),t[6]=O,t[7]=k);let A;t[8]!==i||t[9]!==h||t[10]!==a?(A=a?(0,$.jsx)(m,{type:`button`,variant:`mobileGlass`,size:`mobileIcon`,className:`justify-self-start`,onClick:a,disabled:h,"aria-label":i,children:(0,$.jsx)(p,{name:`arrow-left-s`,className:`size-5`})}):(0,$.jsx)(`span`,{"aria-hidden":`true`}),t[8]=i,t[9]=h,t[10]=a,t[11]=A):A=t[11];let j;t[12]===n?j=t[13]:(j=(0,$.jsx)(`div`,{className:`oc-mobile-detail-title w-full truncate typography-ui-label font-medium text-foreground`,children:n}),t[12]=n,t[13]=j);let M;t[14]===r?M=t[15]:(M=r?(0,$.jsx)(`div`,{className:`oc-mobile-detail-subtitle w-full truncate text-muted-foreground`,"aria-live":`polite`,children:r}):null,t[14]=r,t[15]=M);let N;t[16]!==j||t[17]!==M?(N=(0,$.jsxs)(`div`,{className:`flex w-full max-w-72 min-w-0 flex-col items-center justify-center justify-self-center px-1`,children:[j,M]}),t[16]=j,t[17]=M,t[18]=N):N=t[18];let P;t[19]===v?P=t[20]:(P=v.map(he),t[19]=v,t[20]=P);let F;t[21]!==P||t[22]!==c?(F=(0,$.jsxs)(`div`,{className:`flex min-w-0 items-center justify-end gap-2`,children:[c,P]}),t[21]=P,t[22]=c,t[23]=F):F=t[23];let I;t[24]!==k||t[25]!==A||t[26]!==N||t[27]!==F?(I=(0,$.jsxs)(`div`,{className:k,children:[A,N,F]}),t[24]=k,t[25]=A,t[26]=N,t[27]=F,t[28]=I):I=t[28];let L;return t[29]!==D||t[30]!==I?(L=(0,$.jsx)(`header`,{className:D,children:I}),t[29]=D,t[30]=I,t[31]=L):L=t[31],L}function he(e,t){return(0,$.jsx)(m,{type:`button`,variant:`mobileGlass`,size:`mobileIcon`,className:f(e.elevated&&`relative z-[60]`),onClick:e.onClick,disabled:e.disabled,"aria-label":e.ariaLabel,"aria-expanded":e.pressed,title:e.title,children:(0,$.jsx)(p,{name:e.icon,className:`size-5`})},`${e.icon}:${t}`)}function ge(e){return e.elevated}export{v as S,X as _,pe as a,le as b,Q as c,re as d,Z as f,fe as g,ue as h,de as i,J as l,se as m,ae as n,ne as o,oe as p,ie as r,ee as s,me as t,te as u,q as v,_ as x,W as y};
|
|
1
|
+
import{o as e}from"./rolldown-runtime-C0FnF6B9.js";import{E as t,w as n}from"./useUIStore-D6BTB4va.js";import{kn as r,u as i}from"./persistence-C_KCiMcY.js";import{nt as a,rt as o}from"./vendor-base-ui-CnHfUmDN.js";import{n as s}from"./vendor-react-DLPElpoQ.js";import{s as c,t as l}from"./vendor-tanstack-react-query-D7pys_c9.js";import{bo as u,xo as d}from"./useMobileNavigationStore-1xHjnAsg.js";import{t as f}from"./utils-DyUyiLje.js";import{n as p}from"./Icon-BPJ_quEe.js";import{t as m}from"./button-BmNJBT13.js";var h=e(o(),1),g=s(),_=class extends Error{code;status;resource;constructor(e,t,n){super(e),this.code=e,this.status=t,this.resource=n}},v=class extends _{operation;constructor(e,t,n){super(e,t,`share_operation`),this.operation=n}},y=(e,t=200)=>{throw new _(`invalid_${e}_response`,t,e)},b=(e,t)=>e&&typeof e==`object`&&!Array.isArray(e)?e:y(t),x=(e,t)=>typeof e==`string`?e:y(t),S=(e,t)=>e===null||typeof e==`string`?e:y(t),C=(e,t)=>typeof e==`number`&&Number.isFinite(e)?e:y(t),w=(e,t)=>e===null?null:C(e,t),T=(e,t)=>typeof e==`boolean`?e:y(t),E=(e,t,n)=>t.includes(e)?e:y(n),D=e=>{let t=b(e,`capability`);return{supported:T(t.supported,`capability`),enabled:T(t.enabled,`capability`),revision:C(t.revision,`capability`),serverInstanceID:S(t.serverInstanceID,`capability`)}},O=e=>{let t=b(e,`assistant`),n=Array.isArray(t.historySessionIDs)?t.historySessionIDs.map(e=>x(e,`assistant`)):[],r=t.historySessionCount===void 0?n.length:C(t.historySessionCount,`assistant`);return!Number.isSafeInteger(r)||r<n.length?y(`assistant`):{id:x(t.id,`assistant`),revision:C(t.revision,`assistant`),enabled:T(t.enabled,`assistant`),name:x(t.name,`assistant`),defaultPrompt:x(t.defaultPrompt,`assistant`),workspacePath:S(t.workspacePath,`assistant`),effectiveWorkspacePath:x(t.effectiveWorkspacePath,`assistant`),managedWorkspacePath:S(t.managedWorkspacePath??null,`assistant`),providerID:x(t.providerID,`assistant`),modelID:x(t.modelID,`assistant`),agent:S(t.agent,`assistant`),variant:S(t.variant??null,`assistant`),mode:E(t.mode,[`continuous`,`stateless`],`assistant`),sessionID:S(t.sessionID,`assistant`),sessionGeneration:C(t.sessionGeneration,`assistant`),historySessionIDs:n,historySessionCount:r,createdAt:w(t.createdAt,`assistant`),updatedAt:C(t.updatedAt,`assistant`),tombstoneAt:w(t.tombstoneAt,`assistant`)}},k=e=>{let t=b(e,`snapshot`);return{revision:C(t.revision,`snapshot`),enabled:T(t.enabled,`snapshot`),assistants:Array.isArray(t.assistants)?t.assistants.map(O):y(`snapshot`)}},A=e=>{let t=b(e,`binding`);return{sessionID:S(t.sessionID,`binding`),directory:x(t.directory,`binding`),sessionGeneration:C(t.sessionGeneration,`binding`)}},j=e=>{let t=b(e,`compact`);return t.summarized===!0?{binding:A(t.binding),summarized:!0}:y(`compact`)},M=e=>{let t=b(e,`message_admission`);return t.admitted===!0?{binding:A(t.binding),messageID:x(t.messageID,`message_admission`),admitted:!0}:y(`message_admission`)},N=e=>{let t=b(e,`share_operation`);return{operationID:x(t.operationID,`share_operation`),assistantID:x(t.assistantID,`share_operation`),sessionID:S(t.sessionID,`share_operation`),messageID:S(t.messageID,`share_operation`),state:E(t.state,[`submitting`,`running`,`completed`,`failed`,`unresolved`],`share_operation`),phase:x(t.phase,`share_operation`),attempt:C(t.attempt,`share_operation`),leaseExpiresAt:w(t.leaseExpiresAt,`share_operation`),errorCode:S(t.errorCode,`share_operation`)}},P=e=>{let t=b(e,`assistant_history`),n=S(t.nextCursor,`assistant_history`),r=T(t.complete,`assistant_history`);return!r&&!n||r&&n||!Array.isArray(t.entries)?y(`assistant_history`):{entries:t.entries.map(e=>{let t=b(e,`assistant_history_entry`),n=x(t.sessionID,`assistant_history_entry`),r=b(t.info,`assistant_history_info`),i=b(r.time,`assistant_history_info`);if(x(r.id,`assistant_history_info`),x(r.sessionID,`assistant_history_info`)!==n||(E(r.role,[`user`,`assistant`,`system`,`tool`],`assistant_history_info`),C(i.created,`assistant_history_info`),!Array.isArray(t.parts)))return y(`assistant_history_entry`);let a=t.parts.map(e=>{let t=b(e,`assistant_history_part`);return x(t.id,`assistant_history_part`),x(t.sessionID,`assistant_history_part`)!==n||x(t.messageID,`assistant_history_part`)!==r.id?y(`assistant_history_part`):(x(t.type,`assistant_history_part`),t)});return{sessionID:n,directory:S(t.directory,`assistant_history_entry`),info:r,parts:a}}),nextCursor:n,complete:r}},F=30,I={snapshot:(e=t())=>[e,`assistants`,`snapshot`],capability:(e=t())=>[e,`assistants`,`capability`],history:(e,r,i,a=t(),o=n())=>[a,o,`assistants`,`history`,e,r,i]},L=(e,t,n)=>{if(!e||!t)return;let r=t.queryKey;if(r[0]===n.transport&&r[1]===n.runtimeGeneration&&r[2]===`assistants`&&r[3]===`history`&&r[4]===n.assistantID)return e},R=async(e,t={})=>{let n=await r(e,t),i=await n.json().catch(()=>null);if(!n.ok)throw new _(i&&typeof i==`object`&&`error`in i&&typeof i.error==`string`?i.error:`request_failed`,n.status);return i},z=(e,t)=>({method:e,headers:{"Content-Type":`application/json`},body:t===void 0?void 0:JSON.stringify(t)}),B=(e,r)=>{if(t()!==e||n()!==r)throw new _(`runtime_stale`,409)},V=(e,t,r)=>{i.setQueryData(I.snapshot(r),n=>n&&{...n,assistants:n.assistants.map(n=>n.id!==e||n.sessionGeneration>t.sessionGeneration?n:{...n,sessionID:t.sessionID,sessionGeneration:t.sessionGeneration,effectiveWorkspacePath:t.directory})}),i.invalidateQueries({queryKey:I.snapshot(r)}),i.invalidateQueries({queryKey:[r,n(),`assistants`,`history`,e]})},H=(e,t)=>{i.setQueryData(I.snapshot(t),t=>t&&{...t,assistants:t.assistants.some(t=>t.id===e.id)?t.assistants.map(t=>t.id===e.id?e:t):[...t.assistants,e]}),i.invalidateQueries({queryKey:I.snapshot(t)})},U=(e=t())=>({queryKey:I.snapshot(e),queryFn:async({signal:e})=>k(await R(`/api/openchamber/assistants/snapshot`,{signal:e})),retry:2}),W=()=>{let e=(0,g.c)(5),n,r,a;e[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=t(),n=c,r=U(a),e[0]=n,e[1]=r,e[2]=a):(n=e[0],r=e[1],a=e[2]);let o=n(r),s,l;return e[3]===Symbol.for(`react.memo_cache_sentinel`)?(s=()=>d(e=>{if(t()!==a)return;if(e.type===`event-stream-ready`){i.invalidateQueries({queryKey:I.snapshot(a),exact:!0});return}if(e.type!==`assistants-changed`)return;let n=i.getQueryData(I.snapshot(a));(!n||e.revision>n.revision)&&i.invalidateQueries({queryKey:I.snapshot(a),exact:!0})}),l=[a],e[3]=s,e[4]=l):(s=e[3],l=e[4]),h.useEffect(s,l),o},G=(e,r,i,a=t(),o=n())=>({queryKey:I.history(e,r,i,a,o),queryFn:async({signal:t,pageParam:n})=>{B(a,o),await u(),B(a,o);let r=new URLSearchParams({limit:String(F)});n&&r.set(`before`,n);let i=P(await R(`/api/openchamber/assistants/${encodeURIComponent(e)}/messages?${r}`,{signal:t}));return B(a,o),i},initialPageParam:null,getNextPageParam:K,placeholderData:(t,n)=>L(t,n,{assistantID:e,transport:a,runtimeGeneration:o}),retry:2}),K=e=>e.complete?void 0:e.nextCursor??void 0,q=(e,t,n)=>{let r=(0,g.c)(7),i=n===void 0||n,a=t.sessionID??``,o;r[0]!==e||r[1]!==t.sessionGeneration||r[2]!==a?(o=G(e,a,t.sessionGeneration),r[0]=e,r[1]=t.sessionGeneration,r[2]=a,r[3]=o):o=r[3];let s=i&&!!(e&&t.sessionID),c;return r[4]!==o||r[5]!==s?(c={...o,enabled:s},r[4]=o,r[5]=s,r[6]=c):c=r[6],l(c)},J=async e=>k(await R(`/api/openchamber/assistants/snapshot`,{signal:e})),Y=(e=t())=>({queryKey:I.capability(e),queryFn:()=>Q(),retry:!1}),X=()=>{let e=(0,g.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=Y(),e[0]=t):t=e[0],c(t)},Z=(e=i,n=t())=>e.getQueryData(I.snapshot(n)),ee=(e=i,n=t())=>e.fetchQuery(U(n)),te=async(e=i)=>{let r=t(),a=n();await e.invalidateQueries({queryKey:I.snapshot(r),exact:!0}),B(r,a);let o=await e.fetchQuery(U(r));return B(r,a),o},ne=async e=>{let r=t(),i=n();await u(),B(r,i);let a=A(await R(`/api/openchamber/assistants/${encodeURIComponent(e)}/session/ensure`,z(`POST`)));return B(r,i),V(e,a,r),a},re=async e=>{let r=t(),i=n(),a=A(await R(`/api/openchamber/assistants/${encodeURIComponent(e)}/session/new`,z(`POST`)));return B(r,i),V(e,a,r),a},ie=async(e,r)=>{let i=t(),a=n(),o=j(await R(`/api/openchamber/assistants/${encodeURIComponent(e)}/session/compact`,z(`POST`,{sessionID:r.sessionID,sessionGeneration:r.sessionGeneration})));return B(i,a),V(e,o.binding,i),o},ae=async(e,r)=>{let i=t(),a=n();await R(`/api/openchamber/assistants/${encodeURIComponent(e)}/session/abort`,z(`POST`,{sessionID:r.sessionID,sessionGeneration:r.sessionGeneration})),B(i,a)},oe=async(e,r,i,a,o=`composer`)=>{let s=t(),c=n(),l=M(await R(`/api/openchamber/assistants/${encodeURIComponent(e)}/messages`,z(`POST`,{sessionID:r.sessionID,sessionGeneration:r.sessionGeneration,messageID:i,parts:a,source:o})));return B(s,c),V(e,l.binding,s),l},se=async(e,r,i,a,o)=>{let s=t(),c=n(),l=N(await R(`/api/openchamber/assistants/${encodeURIComponent(e)}/share`,z(`POST`,{operationID:r,payload:{messageID:i,parts:a,source:o}})));return B(s,c),l},ce=async(e,r=t(),i=n())=>{B(r,i);let a=N(await R(`/api/openchamber/assistants/share-operations/${encodeURIComponent(e)}`));return B(r,i),a},le=async(e,r=t(),i=n())=>{let a=e;for(let e=0;e<60&&(a.state===`running`||a.state===`submitting`);e+=1)B(r,i),await new Promise(e=>setTimeout(e,750)),a=await ce(a.operationID,r,i);if(B(r,i),a.state===`completed`)return a;throw a.state===`failed`?new v(a.errorCode??`share_failed`,400,a):new v(`share_unresolved`,408,a)},ue=async(e,n)=>{await R(`/api/openchamber/assistants/settings`,z(`PUT`,{enabled:e,expectedRevision:n}));let r=t();await Promise.all([i.invalidateQueries({queryKey:I.snapshot(r),exact:!0}),i.invalidateQueries({queryKey:I.capability(r),exact:!0})])},de=async e=>{let n=t(),r=O(await R(`/api/openchamber/assistants`,z(`POST`,e)));return H(r,n),r},fe=async(e,r)=>{let i=t(),a=n(),o=O(await R(`/api/openchamber/assistants/${encodeURIComponent(e.id)}`,z(`PATCH`,{...r,expectedRevision:e.revision})));return B(i,a),H(o,i),o},pe=async e=>{await R(`/api/openchamber/assistants/${encodeURIComponent(e.id)}`,z(`DELETE`,{expectedRevision:e.revision})),await i.invalidateQueries({queryKey:I.snapshot(t())})},Q=async()=>D(await R(`/api/openchamber/assistants/capability`)),$=a();function me(e){let t=(0,g.c)(32),{title:n,subtitle:r,backAriaLabel:i,onBack:a,backDisabled:o,actions:s,trailing:c,sticky:l,overlay:u,elevated:d}=e,h=o!==void 0&&o,_;t[0]===s?_=t[1]:(_=s===void 0?[]:s,t[0]=s,t[1]=_);let v=_,y=l!==void 0&&l,b=u!==void 0&&u,x=d!==void 0&&d,S=!!c||v.length>0,C=x||v.some(ge),w=y&&`oc-mobile-detail-navigation-sticky`,T=b&&`absolute inset-x-0 top-0`,E=C?`z-[60]`:b?`z-30`:void 0,D;t[2]!==w||t[3]!==T||t[4]!==E?(D=f(`oc-mobile-detail-navigation relative shrink-0 pt-[max(0.25rem,var(--oc-safe-area-top,0px))]`,w,T,E),t[2]=w,t[3]=T,t[4]=E,t[5]=D):D=t[5];let O=S&&v.length+ +!!c>1?`grid-cols-[2.75rem_minmax(0,1fr)_auto]`:`grid-cols-[2.75rem_minmax(0,1fr)_2.75rem]`,k;t[6]===O?k=t[7]:(k=f(`oc-mobile-detail-navigation-content grid items-center gap-1 px-4`,O),t[6]=O,t[7]=k);let A;t[8]!==i||t[9]!==h||t[10]!==a?(A=a?(0,$.jsx)(m,{type:`button`,variant:`mobileGlass`,size:`mobileIcon`,className:`justify-self-start`,onClick:a,disabled:h,"aria-label":i,children:(0,$.jsx)(p,{name:`arrow-left-s`,className:`size-5`})}):(0,$.jsx)(`span`,{"aria-hidden":`true`}),t[8]=i,t[9]=h,t[10]=a,t[11]=A):A=t[11];let j;t[12]===n?j=t[13]:(j=(0,$.jsx)(`div`,{className:`oc-mobile-detail-title w-full truncate typography-ui-label font-medium text-foreground`,children:n}),t[12]=n,t[13]=j);let M;t[14]===r?M=t[15]:(M=r?(0,$.jsx)(`div`,{className:`oc-mobile-detail-subtitle w-full truncate text-muted-foreground`,"aria-live":`polite`,children:r}):null,t[14]=r,t[15]=M);let N;t[16]!==j||t[17]!==M?(N=(0,$.jsxs)(`div`,{className:`flex w-full max-w-72 min-w-0 flex-col items-center justify-center justify-self-center px-1`,children:[j,M]}),t[16]=j,t[17]=M,t[18]=N):N=t[18];let P;t[19]===v?P=t[20]:(P=v.map(he),t[19]=v,t[20]=P);let F;t[21]!==P||t[22]!==c?(F=(0,$.jsxs)(`div`,{className:`flex min-w-0 items-center justify-end gap-2`,children:[c,P]}),t[21]=P,t[22]=c,t[23]=F):F=t[23];let I;t[24]!==k||t[25]!==A||t[26]!==N||t[27]!==F?(I=(0,$.jsxs)(`div`,{className:k,children:[A,N,F]}),t[24]=k,t[25]=A,t[26]=N,t[27]=F,t[28]=I):I=t[28];let L;return t[29]!==D||t[30]!==I?(L=(0,$.jsx)(`header`,{className:D,children:I}),t[29]=D,t[30]=I,t[31]=L):L=t[31],L}function he(e,t){return(0,$.jsx)(m,{type:`button`,variant:`mobileGlass`,size:`mobileIcon`,className:f(e.elevated&&`relative z-[60]`),onClick:e.onClick,disabled:e.disabled,"aria-label":e.ariaLabel,"aria-expanded":e.pressed,title:e.title,children:(0,$.jsx)(p,{name:e.icon,className:`size-5`})},`${e.icon}:${t}`)}function ge(e){return e.elevated}export{v as S,X as _,pe as a,le as b,Q as c,re as d,Z as f,fe as g,ue as h,de as i,J as l,se as m,ae as n,ne as o,oe as p,ie as r,ee as s,me as t,te as u,q as v,_ as x,W as y};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js","assets/rolldown-runtime-C0FnF6B9.js","assets/useAssistantUIStore-ESTV1mEY.js","assets/useUIStore-D6BTB4va.js","assets/vendor-zustand-B4dlGEM2.js","assets/vendor-base-ui-CnHfUmDN.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{o as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{A as n,C as r,E as i,T as a,Y as o,Z as s,j as c,q as l,w as u}from"./useUIStore-D6BTB4va.js";import{Ot as d,bt as f,et as p,kn as m,nt as h,yt as g}from"./persistence-C_KCiMcY.js";import{nt as _,rt as v}from"./vendor-base-ui-CnHfUmDN.js";import{a as y,n as b,o as ee,t as te}from"./vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js";import{n as ne}from"./vendor-react-DLPElpoQ.js";import{n as x}from"./vendor-reactuses-core-DDoDDyM9.js";import{n as re}from"./clipboard-CXWbHCAk.js";import{Co as S,_o as C,r as ie,wo as ae}from"./useMobileNavigationStore-DhkIZBJw.js";import{S as oe,b as se,c as w,m as ce,s as le,t as ue,u as de}from"./MobileDetailNavigation-5tAL5d_M.js";import{i as T,n as fe}from"./useAssistantUIStore-ESTV1mEY.js";import{t as pe}from"./AgentAvatar-C6Hxu5_o.js";import{n as me}from"./Icon-BPJ_quEe.js";import{n as he,t as ge}from"./dialog-BV1ENlLf.js";var _e=ne(),E=e(v(),1),ve=`openchamber.mobile.connections.v1`,ye=`openchamber.mobile.`,be=`openchamber.mobile.deviceId`,xe=()=>{try{let e=window.localStorage.getItem(be);if(e&&e.trim())return e.trim();let t=p();return window.localStorage.setItem(be,t),t}catch{return p()}},Se=()=>`mobile:${xe()}`,Ce=()=>{try{let e=b.getPlatform();return e===`ios`||e===`android`?e:void 0}catch{return}},we=12,Te=8e3,Ee=2500,De=3e3,Oe=2500,D=e=>{let t=e.trim();if(!t)return``;let n=/^https?:\/\//i.test(t)?t:`http://${t}`,r=new URL(n);return r.hash=``,r.search=``,r.pathname=r.pathname.replace(/\/+$/,``),r.toString().replace(/\/+$/,``)},ke=e=>{try{return new URL(e).host}catch{return e}},O=e=>{try{return D(e)}catch{return e.trim().replace(/\/+$/g,``)}},Ae=(e,t)=>O(e)===O(t),je=e=>`relay:${e.serverId}@${e.relayUrl.trim()}`,Me=e=>`relay://${e.serverId}`,k=e=>e.candidates.filter(e=>e.kind===`direct`),A=e=>{let t=e.candidates.find(e=>e.kind===`relay`);return t&&t.kind===`relay`?t.relay:null},j=e=>{let t=k(e)[0];if(t)return t.url;let n=A(e);return n?Me(n):``},M=e=>{let t=A(e);if(t)return je(t);let n=k(e)[0];return n?O(n.url):``},Ne=M,N=(e,t)=>{let n=e.find(e=>e.kind===`relay`),r=n&&n.kind===`relay`?n.relay.serverId:null,i=n&&n.kind===`relay`?n.relay.relayUrl.trim():null,a=new Set(e.filter(e=>e.kind===`direct`).map(e=>O(e.url)));return t.some(e=>e.kind===`relay`?r!==null&&e.relay.serverId===r&&e.relay.relayUrl.trim()===i:a.has(O(e.url)))},Pe=e=>{let t=(()=>{try{return D(e)}catch{return``}})();return t?[{kind:`direct`,url:t}]:[]},Fe=e=>{if(e.candidates&&e.candidates.length>0)return e.candidates;let t=[];return typeof e.url==`string`&&e.url.trim()&&!/^relay:\/\//i.test(e.url.trim())&&t.push(...Pe(e.url)),e.relay&&t.push({kind:`relay`,relay:e.relay}),t},Ie=e=>{if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e;if(typeof t.relayUrl!=`string`||!t.relayUrl.trim()||typeof t.serverId!=`string`||!t.serverId.trim())return null;let n=t.hostEncPubJwk;if(!n||typeof n!=`object`||Array.isArray(n))return null;let r=n;return r.kty!==`EC`||r.crv!==`P-256`||typeof r.x!=`string`||!r.x||typeof r.y!=`string`||!r.y?null:{relayUrl:t.relayUrl,serverId:t.serverId,hostEncPubJwk:{kty:`EC`,crv:`P-256`,x:r.x,y:r.y}}},Le=e=>{try{return JSON.stringify(e)}catch{return String(e)}},P=(e,t={})=>{Le(t)},F=(e,t={})=>{Le(t)},Re=e=>{if(typeof e!=`string`)return e;try{return JSON.parse(e)}catch{return e}},ze=e=>{if(typeof e!=`string`)return e??void 0;try{return JSON.parse(e)}catch{return e}},Be=async(e,t)=>{if(!S())return null;try{let{CapacitorHttp:n}=await ee(async()=>{let{CapacitorHttp:e}=await import(`./vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js`).then(e=>e.i);return{CapacitorHttp:e}},__vite__mapDeps([0,1])),r=Object.fromEntries(new Headers(t?.headers).entries()),i=await n.request({url:e,method:t?.method||`GET`,headers:r,data:ze(t?.body)});return{ok:i.status>=200&&i.status<300,status:i.status,source:`native-http`,json:async()=>Re(i.data)}}catch(t){return console.warn(`[mobile-connect]`,`native-http failed`,Le({url:e,error:t instanceof Error?t.message:String(t)})),null}},Ve=async(e,t)=>{let n=await fetch(e,t).catch(t=>(console.warn(`[mobile-connect]`,`browser-fetch failed`,Le({url:e,error:t instanceof Error?t.message:String(t)})),null));return n?{ok:n.ok,status:n.status,source:`browser-fetch`,json:()=>n.json()}:null},I=async(e,t,n)=>{let r,i=new Promise(t=>{r=window.setTimeout(()=>{n?.(),t(null)},e)});try{return await Promise.race([t,i])}catch{return null}finally{r!==void 0&&window.clearTimeout(r)}},L=async(e,t,n)=>{let r=n?.totalTimeoutMs??Te,i=Date.now(),a=await I(Math.min(Ee,r),Be(e,t));if(a)return a;let o=new AbortController;return I(Math.max(500,r-(Date.now()-i)),Ve(e,{...t,signal:o.signal}),()=>o.abort())},He=async e=>{if(!e)return null;let t=await e.json().catch(()=>null);if(!t||typeof t!=`object`)return null;let n=t;return{authenticated:typeof n.authenticated==`boolean`?n.authenticated:void 0,disabled:typeof n.disabled==`boolean`?n.disabled:void 0,scope:typeof n.scope==`string`?n.scope:void 0}},R=15e3,Ue=async(e,t,n,r=R,i)=>{let a=s({relayUrl:e.relayUrl,serverId:e.serverId,hostEncPubJwk:e.hostEncPubJwk,...n?{grant:n}:{}}),o=e=>e===`ok`&&i?.keepTunnel?{outcome:e,tunnel:a}:(a.close(),{outcome:e});try{let e=t?{Authorization:`Bearer ${t}`}:void 0,n=await I(r,a.fetch(`/auth/session`,{headers:e}).catch(()=>null));if(P(`relay:session`,{ok:n?.ok===!0,status:n?.status??null,hasToken:!!t}),!n)return o(`unreachable`);if(n.status===401)return o(t?`auth-failed`:`needs-login`);if(!n.ok&&n.status!==404)return o(`auth-failed`);let i=await He(n);return i&&i.disabled!==!0&&i.authenticated===!1?o(t?`auth-failed`:`needs-login`):o(`ok`)}catch(e){throw a.close(),e}},We=(e,t,n,r,i)=>{let a=typeof window<`u`?window.location.origin:``,o={relayUrl:e.relayUrl,serverId:e.serverId,hostEncPubJwk:e.hostEncPubJwk,...n?{grant:n}:{}};i&&l(o,i),c({apiBaseUrl:a,clientToken:t,runtimeKey:r??je(e),relay:o})},Ge=e=>{if(!e||typeof e!=`object`)return null;let t=e;if(t.kind===`direct`)return typeof t.url==`string`&&t.url.trim()?{kind:`direct`,url:t.url}:null;if(t.kind===`relay`){let e=Ie(t.relay);return e?{kind:`relay`,relay:e}:null}return null},Ke=e=>{if(e.mode===`relay`){let t=Ie(e.relay);return t?[{kind:`relay`,relay:t}]:[]}return typeof e.url==`string`?Pe(e.url):[]},z=()=>{if(typeof window>`u`)return[];let e;try{e=JSON.parse(window.localStorage.getItem(ve)||`[]`)}catch{return[]}if(!Array.isArray(e))return[];let t=S();return e.flatMap(e=>{if(!e||typeof e!=`object`)return[];let n=e;if(typeof n.id!=`string`)return[];let r=Array.isArray(n.candidates)?n.candidates.map(Ge).filter(e=>!!e):Ke(n);if(r.length===0)return[];let i=typeof n.clientToken==`string`&&n.clientToken.trim()?n.clientToken:void 0,a=typeof n.label==`string`&&n.label.trim()?n.label:ke(j({candidates:r})),o={id:n.id,label:a,candidates:r,lastUsedAt:typeof n.lastUsedAt==`number`?n.lastUsedAt:0};return t?[{...o,hasToken:!!n.hasToken||!!i}]:[{...o,clientToken:i,hasToken:!!i}]}).sort((e,t)=>t.lastUsedAt-e.lastUsedAt)},qe=e=>e.kind===`relay`?{kind:`relay`,relay:{relayUrl:e.relay.relayUrl,serverId:e.relay.serverId,hostEncPubJwk:e.relay.hostEncPubJwk}}:{kind:`direct`,url:e.url},Je=e=>{if(typeof window>`u`)return;let t=S(),n=e.slice(0,we).map(e=>{let n={id:e.id,label:e.label,candidates:e.candidates.map(qe),lastUsedAt:e.lastUsedAt};return t?{...n,hasToken:!!(e.hasToken||e.clientToken)}:{...n,clientToken:e.clientToken}});try{window.localStorage.setItem(ve,JSON.stringify(n))}catch(e){console.warn(`[mobile-storage] failed to persist connection metadata`,e)}},Ye=(e,t)=>{let n=e.find(e=>t.id&&e.id===t.id||N(e.candidates,t.candidates)),r=S(),i={id:t.id||n?.id||p(),label:t.label,candidates:t.candidates,lastUsedAt:Date.now(),...r?{hasToken:t.hasToken??(!!t.clientToken||n?.hasToken||!1)}:{clientToken:t.clientToken??n?.clientToken,hasToken:!!(t.clientToken??n?.clientToken)}};return[i,...e.filter(e=>e.id!==i.id&&!N(e.candidates,t.candidates))].slice(0,we)},Xe=te,Ze=0,Qe=e=>`${ye}token.${encodeURIComponent(e)}`,$e=async(e,t)=>{let n,r=new Promise(e=>{n=window.setTimeout(()=>e(t),De)});try{return await Promise.race([e.catch(()=>t),r])}finally{n!==void 0&&window.clearTimeout(n)}},et=async(e,t,n)=>S()?$e(t().catch(t=>(console.warn(`[mobile-storage] ${e} failed`,t),n)),n):n,B=async e=>{F(`secure:read-start`,{key:e});let t=await et(`secure:read`,async()=>(await Xe.internalGetItem({prefixedKey:Qe(e),sync:!1})).data,null),n=typeof t==`string`&&t.trim()?t:void 0;return F(`secure:read`,{key:e,hasToken:!!n}),n},V=async(e,t)=>{F(`secure:write-start`,{key:e});let n=await et(`secure:write`,async()=>(await Xe.internalSetItem({prefixedKey:Qe(e),data:t,sync:!1,access:Ze}),!0),!1);return F(`secure:write`,{key:e,ok:n}),n},tt=async e=>{await et(`secure:delete`,async()=>(await Xe.internalRemoveItem({prefixedKey:Qe(e),sync:!1}),!0),!1)},nt=async()=>{if(typeof window>`u`||!S())return;let e;try{e=JSON.parse(window.localStorage.getItem(ve)||`[]`)}catch{return}if(!Array.isArray(e))return;let t=e.filter(e=>!!e&&typeof e==`object`&&typeof e.url==`string`&&typeof e.clientToken==`string`&&!!e.clientToken.trim());if(t.length!==0){F(`secure:migrate-start`,{count:t.length});for(let{url:e,clientToken:n}of t)await V(O(e),n);Je(z()),F(`secure:migrate-done`,{count:t.length})}},rt=async()=>(await nt(),z()),it=async e=>{let t=Ye(z(),e);return Je(t),S()&&e.clientToken&&await V(M({candidates:e.candidates}),e.clientToken),t},at=async e=>{let t=z(),n=t.find(t=>t.id===e)??null,r=t.filter(t=>t.id!==e);if(Je(r),n&&S()&&await tt(M(n)),n){let e=M(n),{useAssistantUIStore:t}=await ee(async()=>{let{useAssistantUIStore:e}=await import(`./useAssistantUIStore-ESTV1mEY.js`).then(e=>e.a);return{useAssistantUIStore:e}},__vite__mapDeps([2,1,3,4,5]));t.getState().removeCatalogPartition(e);let{publishNativeAssistantCatalog:r}=await ee(async()=>{let{publishNativeAssistantCatalog:e}=await Promise.resolve().then(()=>$t);return{publishNativeAssistantCatalog:e}},void 0);await r().catch(()=>void 0)}return r},ot=1500,H=async(e,t,n)=>{let r=n?.fast?{totalTimeoutMs:Oe}:void 0,i=A({candidates:e})?.serverId??null,a=e.find(e=>e.kind===`relay`)??null,o=e.filter(e=>e.kind===`direct`),s=async()=>{for(let e of o){let n=D(e.url)||e.url,a=t?{Authorization:`Bearer ${t}`}:void 0,o=await L(`${n}/health`,{method:`GET`},r);if(!o?.ok)continue;if(i){let e=await o.json().catch(()=>null),t=e&&typeof e==`object`?e.serverId:null;if(typeof t==`string`&&t&&t!==i){P(`probe:server-id-mismatch`,{url:n});continue}}let s=await L(`${n}/auth/session`,{method:`GET`,credentials:`include`,headers:a},r);if(s?.status===401)return{status:`needs-login`};if(!s||!s.ok&&s.status!==404)continue;let c=await He(s);if(c&&c.disabled!==!0&&c.authenticated===!1)return{status:`needs-login`};let l=c?.disabled===!0;return!t&&S()&&!l&&c?.scope!==`client`?{status:`needs-login`}:{status:`ok`,transport:{kind:`direct`,url:n}}}return{status:`unreachable`}},c=async()=>{if(!a)return{status:`unreachable`};let{outcome:e,tunnel:r}=await Ue(a.relay,t,void 0,n?.fast?Oe:void 0,{keepTunnel:!0});return e===`ok`?{status:`ok`,transport:{kind:`relay`,relay:a.relay,tunnel:r}}:e===`needs-login`||e===`auth-failed`?{status:`needs-login`}:{status:`unreachable`}};return a?o.length===0?c():new Promise(e=>{let t=!1,n=!1,r,i=null,a=null,o=e=>{e?.status===`ok`&&e.transport.kind===`relay`&&e.transport.tunnel?.close()},l=n=>{t||(t=!0,e(n))},u=()=>{n||t||(r!==void 0&&(window.clearTimeout(r),r=void 0),c().then(e=>{if(a=e,t||n){o(e);return}if(e.status===`ok`||e.status===`needs-login`){l(e);return}i&&l(i)}))};s().then(e=>{if(i=e,!t){if(e.status===`ok`||e.status===`needs-login`){n=!0,r!==void 0&&window.clearTimeout(r),o(a),l(e);return}if(a){l(a);return}u()}}),r=window.setTimeout(u,ot)}):s()},U=(e,t,n)=>{e.kind===`relay`?We(e.relay,t,n?.grant,n?.runtimeKey,e.tunnel):c({apiBaseUrl:e.url,clientToken:t,runtimeKey:n?.runtimeKey}),xt()},st=()=>{let e=z()[0];return e?.label?.trim()?e.label:null},ct=async()=>{await nt();let e=z()[0];if(!e)return!1;let t;if(S()){if(!e.hasToken||(t=await B(M(e)),!t))return!1}else if(t=e.clientToken,!t)return!1;let n=await H(e.candidates,t);return n.status===`ok`&&(await it({id:e.id,label:e.label,candidates:e.candidates}),U(n.transport,t,{runtimeKey:M(e)}),!0)},lt=async(e,t)=>{let n=(await rt()).find(t=>M(t)===e);if(!n)return`missing`;let r=S()?n.hasToken?await B(e):void 0:n.clientToken;if(!r)return`auth-required`;let i=t?.transportPreference===`relay`?n.candidates.filter(e=>e.kind===`relay`):n.candidates;if(i.length===0)return`offline`;let a=await H(i,r,{fast:!0});return a.status===`needs-login`?`auth-required`:a.status===`ok`?(U(a.transport,r,{runtimeKey:e}),`connected`):`offline`},ut=async(e,t)=>{let n=``;try{n=D(e.url)}catch{return!1}if(!n)return!1;let r=e.clientToken?.trim()||void 0,i=r?{Authorization:`Bearer ${r}`}:void 0,a=t?.fast?{totalTimeoutMs:Oe}:void 0;if(!(await L(`${n}/health`,{method:`GET`,headers:i},a))?.ok)return!1;let o=await L(`${n}/auth/session`,{method:`GET`,credentials:`include`,headers:i},a);if(!o||!o.ok&&o.status!==404)return!1;let s=await He(o);return!(s&&s.disabled!==!0&&s.authenticated===!1)},dt=e=>[...e].sort((e,t)=>{let n=(e.priority??100)-(t.priority??100);if(n!==0)return n;let r=e=>e.type===`relay`?2:+!e.url.startsWith(`https://`);return r(e)-r(t)}).flatMap(e=>{if(e.type===`relay`){let t=Ie({relayUrl:e.relayUrl,serverId:e.serverId,hostEncPubJwk:e.hostEncPubJwk});return t?[{kind:`relay`,relay:t}]:[]}return Pe(e.url)}),ft=async e=>{let t=A({candidates:e})?.serverId??null;for(let n of e){if(n.kind===`relay`){let e=s(n.relay),t=await I(R,e.fetch(`/health`).catch(()=>null));if(P(`establish:relay:health`,{ok:t?.ok===!0,status:t?.status??null}),t?.ok)return{kind:`relay`,relay:n.relay,tunnel:e};e.close();continue}let e=D(n.url)||n.url,r=await L(`${e}/health`,{method:`GET`});if(P(`establish:direct:health`,{ok:r?.ok===!0,status:r?.status??null}),r?.ok){if(t){let n=await r.json().catch(()=>null),i=n&&typeof n==`object`?n.serverId:null;if(typeof i==`string`&&i&&i!==t){P(`establish:server-id-mismatch`,{url:e});continue}}return{kind:`direct`,url:e}}}return null},pt=async(e,t)=>{if(!o())return ut(e,t);let n=await I(t?.fast?Oe:R,m(`/auth/session`).then(e=>e).catch(()=>null));if(!n)return!0;if(n.status===401)return!1;if(!n.ok&&n.status!==404)return!0;let r=await He(n);return!(r&&r.disabled!==!0&&r.authenticated===!1)},mt=e=>e.kind===`relay`?o():!o()&&Ae(e.url,r()),ht=()=>{let e=a();return e?z().find(t=>M(t)===e)??null:null},gt=e=>{let t=a();return!!t&&M(e)===t},_t=async()=>{let e=ht();if(!e)return`no-connection`;let t;if(t=S()?e.hasToken?await B(M(e)):void 0:e.clientToken,!t)return`unreachable`;let n=e.candidates.findIndex(e=>mt(e.kind===`relay`?{kind:`relay`,relay:e.relay}:{kind:`direct`,url:e.url})),i=await H(n>=0?e.candidates.slice(0,n):e.candidates,t,{fast:!0});if(i.status===`ok`)return await it({id:e.id,label:e.label,candidates:e.candidates}),U(i.transport,t,{runtimeKey:M(e)}),`switched`;if(i.status===`needs-login`)return`unreachable`;if(n>=0&&await pt({url:r(),clientToken:t},{fast:!0}))return xt(),`unchanged`;let a=await H(n>=0?e.candidates.slice(n+1):[],t,{fast:!0});return a.status===`ok`?(await it({id:e.id,label:e.label,candidates:e.candidates}),U(a.transport,t,{runtimeKey:M(e)}),`switched`):`unreachable`},vt=5e3,yt=!1,bt=async()=>{if(yt)return`skipped`;let e=ht();if(!e)return P(`candidates:refresh-skip`,{reason:`no-active-connection`}),`skipped`;let t=A(e);if(!t)return P(`candidates:refresh-skip`,{reason:`no-relay-candidate`}),`skipped`;yt=!0;try{let n=await I(R,m(`/api/client-auth/connection/candidates`).then(e=>e).catch(()=>null));if(!n?.ok)return P(`candidates:refresh-skip`,{reason:`fetch-failed`,status:n?.status??null}),`skipped`;let r=await n.json().catch(()=>null);if(!r||r.serverId!==t.serverId)return P(`candidates:refresh-skip`,{reason:`server-id-mismatch`}),`skipped`;let i=Array.isArray(r.candidates)?r.candidates:[],a=[];for(let e of i){if(!e||typeof e!=`object`)continue;let t=e;if(t.type===`lan`&&typeof t.url==`string`)try{let e=D(t.url);e&&!a.includes(e)&&a.push(e)}catch{}}if(a.length===0)return P(`candidates:refresh-skip`,{reason:`no-lan-reported`}),`skipped`;let o=k(e).filter(e=>e.url.startsWith(`https://`)),s=[...a.map(e=>({kind:`direct`,url:e})),...o,{kind:`relay`,relay:t}];return JSON.stringify(e.candidates.map(qe))===JSON.stringify(s.map(qe))?`unchanged`:(P(`candidates:refreshed`,{lanCount:a.length}),await it({id:e.id,label:e.label,candidates:s}),`updated`)}finally{yt=!1}},xt=()=>{typeof window>`u`||window.setTimeout(()=>{(async()=>{let e=await bt().catch(()=>`skipped`);P(`candidates:refresh-result`,{result:e}),e===`updated`&&o()&&await _t().catch(()=>null)})()},vt)},St=e=>{let{t}=re(),[n,r]=E.useState(()=>z()),[i,a]=E.useState(null),[o,s]=E.useState(null),[c,l]=E.useState(null),u=E.useRef(n),d=E.useRef(null),f=E.useRef(new Set),m=x(()=>{e(),f.current.forEach(e=>e())}),h=x(e=>(f.current.add(e),()=>f.current.delete(e))),g=x(e=>{u.current=e,r(e)}),_=x(e=>{d.current=e,a(e)}),v=x(e=>{d.current===e&&(d.current=null,a(null))});E.useEffect(()=>{let e=!1;return rt().then(t=>{e||g(t)}),()=>{e=!0}},[g]);let y=x(e=>{let t=Ye(u.current,e);return g(t),Je(t),t}),b=x(async e=>{s(null),_(`connect`);try{let n=Fe(e);if(n.length===0){s(t(`mobile.connect.error.urlRequired`));return}let r=e.id?u.current.find(t=>t.id===e.id):u.current.find(e=>N(e.candidates,n)),i=e.label?.trim()||r?.label||ke(j({candidates:n})),a=e.relayGrant,o=e.clientToken?.trim()||void 0,c=!!o;o||(S()?r?.hasToken&&(o=await B(M({candidates:n}))):o=r?.clientToken),P(`connect:start`,{candidates:n.map(e=>e.kind),hasToken:!!o});let d=await H(n,o);if(P(`connect:probe`,{status:d.status}),d.status===`unreachable`){s(t(`mobile.connect.error.unreachable`));return}if(d.status===`needs-login`){y({id:r?.id,label:i,candidates:n}),l({id:r?.id??p(),label:i,candidates:n,relay:A({candidates:n})??void 0,relayGrant:a});return}o&&c&&S()&&await V(M({candidates:n}),o),y({id:r?.id,label:i,candidates:n,clientToken:o}),U(d.transport,o??null,{runtimeKey:M({candidates:n}),grant:a}),m()}catch(e){console.warn(`[mobile-connect] connect threw`,e),s(t(`mobile.connect.error.invalidUrl`))}finally{v(`connect`)}}),ee=x(async e=>{if(d.current===`pairing`)return;s(null),_(`pairing`);let n=dt(e.candidates),r=null,i=!1;try{if(r=await ft(n),!r){s(t(`mobile.connect.error.unreachable`));return}let a={method:`POST`,headers:{"Content-Type":`application/json`,Accept:`application/json`},body:JSON.stringify({pairingId:e.pairingId,secret:e.secret,clientLabel:`OpenChamber Mobile`,clientKind:`mobile`,deviceName:`OpenChamber Mobile`,devicePlatform:Ce(),dedupeKey:Se()})},o=r.kind===`relay`?await I(R,r.tunnel.fetch(`/api/client-auth/pairing/redeem`,a).catch(()=>null)):await L(`${r.url}/api/client-auth/pairing/redeem`,a);if(!o?.ok){s(t(`mobile.connect.error.authRequired`));return}let c=await o.json().catch(()=>null),l=typeof c?.clientToken==`string`?c.clientToken.trim():``;if(!l){s(t(`mobile.connect.error.authRequired`));return}let u=typeof c?.server?.label==`string`?c.server.label:``,d=e.label||u||ke(j({candidates:n}));if(S()&&!await V(M({candidates:n}),l)){s(t(`mobile.connect.error.authRequired`));return}y({label:d,candidates:n,clientToken:l}),U(r.kind===`relay`?{kind:`relay`,relay:r.relay,tunnel:r.tunnel}:{kind:`direct`,url:r.url},l,{runtimeKey:M({candidates:n})}),i=r.kind===`relay`,m()}catch(e){console.warn(`[mobile-connect] pairing threw`,e),s(t(`mobile.connect.error.authRequired`))}finally{!i&&r?.kind===`relay`&&r.tunnel.close(),v(`pairing`)}}),te=x(async e=>{if(!c||!e.trim()||d.current===`password`)return;s(null),_(`password`);let{id:n,label:r,candidates:i}=c,a=null,o=!1;try{if(a=await ft(i),!a){s(t(`mobile.connect.error.unreachable`));return}let c={method:`POST`,credentials:`include`,headers:{"Content-Type":`application/json`,Accept:`application/json`},body:JSON.stringify({password:e,trustDevice:!0,issueClientToken:!0,clientLabel:`OpenChamber Mobile`,clientKind:`mobile`,devicePlatform:Ce(),dedupeKey:Se()})};P(`password:start`,{transport:a.kind});let u=a.kind===`relay`?await I(R,a.tunnel.fetch(`/auth/session`,c).catch(()=>null)):await L(`${a.url}/auth/session`,c);if(P(`password:done`,{ok:u?.ok===!0,status:u?.status??null}),!u?.ok){s(t(`mobile.connect.error.passwordFailed`));return}let d=await u.json().catch(()=>null),f=typeof d?.clientToken==`string`?d.clientToken.trim():``;if(P(`password:token`,{issued:!!f}),!f){if(a.kind===`direct`&&!S()){y({id:n,label:r,candidates:i}),l(null),U({kind:`direct`,url:a.url},null,{runtimeKey:M({candidates:i})}),m();return}s(t(`mobile.connect.error.authRequired`));return}S()&&await V(M({candidates:i}),f),y({id:n,label:r,candidates:i,clientToken:f}),l(null),U(a.kind===`relay`?{kind:`relay`,relay:a.relay,tunnel:a.tunnel}:{kind:`direct`,url:a.url},f,{runtimeKey:M({candidates:i})}),o=a.kind===`relay`,m()}catch(e){console.warn(`[mobile-connect] password threw`,e),s(t(`mobile.connect.error.passwordFailed`))}finally{!o&&a?.kind===`relay`&&a.tunnel.close(),v(`password`)}}),ne=x(()=>{l(null),s(null)}),C=x(async e=>{s(null);let n=Fe(e),r=e.id?u.current.find(t=>t.id===e.id)??null:null;if(r){let e=n.filter(e=>e.kind===`direct`),t=k(r).filter(t=>t.url.startsWith(`https://`)&&!e.some(e=>Ae(e.url,t.url))),i=A(r);n=[...e,...t,...i?[{kind:`relay`,relay:i}]:[]]}if(n.length===0)return s(t(`mobile.connect.error.urlRequired`)),null;let i=e.clientToken?.trim()||void 0,a=e.label?.trim()||ke(j({candidates:n}));if(S()){let e=M({candidates:n});if(i)await V(e,i);else if(r?.hasToken){let t=M(r);if(t&&e&&t!==e){let n=await B(t);n&&await V(e,n)}}}return y({id:e.id,label:a,candidates:n,clientToken:i}).find(e=>N(e.candidates,n))??null}),ie=x(async e=>{let t=u.current.find(t=>t.id===e)??null,n=await at(e);return g(n),t});return{connections:n,isBusy:i!==null,isPasswordBusy:i===`password`,error:o,pendingConnection:c,connect:b,redeemPairingConnection:ee,submitPassword:te,cancelPassword:ne,saveConnection:C,removeConnection:ie,subscribeConnected:h,setError:s}},Ct=async(e,t=3)=>{let n;for(let r=0;r<t;r+=1)try{await e();return}catch(e){n=e}throw n},wt=async(e,t,n=2)=>{let r=[...new Map(e.map(e=>[e.operationID,e])).values()],i=0;await Promise.all(Array.from({length:Math.min(Math.max(1,n),r.length)},async()=>{for(;i<r.length;){let e=r[i++];try{e.cleanupPhase&&e.cleanupPhase!==`files-released`?await t.cleanup(e.operationID):await t.deliver(e.operationID)}catch{}}}))},Tt=e=>!!(e.serverInstanceID&&e.assistantID&&e.name&&e.avatarSeed&&e.serverLabel&&e.connectionKey),Et=`openchamber.mobile-share.draft-handoff.v1`,Dt=`mobile-share-handoff:`,Ot=20971520,kt=20971520,At=e=>`${Dt}${e}`,jt=e=>typeof e.partID==`string`&&e.partID.startsWith(`mobile-share-handoff:`),Mt=e=>e??(typeof window>`u`?null:window.localStorage),W=e=>{if(!e)return{};try{let t=JSON.parse(e.getItem(`openchamber.mobile-share.draft-handoff.v1`)||`{}`);return Object.fromEntries(Object.entries(t).flatMap(([e,t])=>{let n=typeof t.assistantID==`string`?t.assistantID:zt(t),r=typeof t.transportIdentity==`string`?t.transportIdentity:t.targetDraftKey?.transportIdentity;if(!n||typeof t.serverInstanceID!=`string`||typeof t.connectionKey!=`string`||!r)return[];let i=t.phase===`cancelled`?`cancelled`:t.phase===`materialized`?`materialized`:`materializing`;return[[e,{...t,draftID:e,assistantID:n,transportIdentity:r,phase:i}]]}))}catch{return{}}},Nt=(e,t)=>{if(!e)return!1;try{return e.setItem(Et,JSON.stringify(t)),!0}catch{return!1}},Pt=(e,t)=>{let n=W(e);if(delete n[t],e)try{e.setItem(Et,JSON.stringify(n))}catch{return}},G=(e,t)=>Nt(e,{...W(e),[t.draftID]:t}),Ft=(e,t)=>`native-share:${e}:${t}`,It=(e,t)=>t?e?`${e}\n\n${t}`:t:e,Lt=e=>e.mime.startsWith(`image/`)&&e.byteSize>0&&e.byteSize<=Ot,Rt=(e,t)=>!!t?.syntheticParts.some(t=>t.partID===At(e.draftID)&&t.text===``&&t.attachments.length===0&&t.synthetic===!0),zt=e=>{let t=e.targetDraftKey?.owner;return t?.kind!==`surface`||typeof t.ownerID!=`string`||!t.ownerID.startsWith(`assistant:`)?null:t.ownerID.slice(10)||null},Bt=e=>({draftID:e.draftID,serverInstanceID:e.serverInstanceID,connectionKey:e.connectionKey,assistantID:e.assistantID,transportIdentity:e.transportIdentity}),Vt=async(e,t)=>{let n=Mt(t),r=[];for(let t of Object.values(W(n))){if(t.phase===`cancelled`){r.push(Bt(t));continue}if(t.phase===`materialized`)try{await e(t.draftID);let i={...t,phase:`cancelled`};if(!G(n,i))continue;r.push(Bt(i))}catch{continue}}return r},Ht=(e,t)=>{let n=Mt(t),r=W(n)[e.draftID];return!r||r.phase!==`cancelled`||r.serverInstanceID!==e.serverInstanceID||r.connectionKey!==e.connectionKey||r.assistantID!==e.assistantID||r.transportIdentity!==e.transportIdentity?!1:(Pt(n,e.draftID),!W(n)[e.draftID])},Ut=async(e,t)=>{let n=d({transportIdentity:e.transportIdentity},`assistant:${e.assistantID}`),r=t.captureDraftRuntime();if(r.transportIdentity!==e.transportIdentity)return!1;let i=t.getDraft(n),a=At(e.draftID);try{if(!i||!i.syntheticParts.some(e=>e.partID===a)){await t.flushDraftPersistence();let n=t.captureDraftRuntime();return n.transportIdentity===e.transportIdentity&&n.generation===r.generation}let o=await t.commitDraftSnapshot({key:n,expectedRevision:i.revision,runtime:r,values:new Map,snapshot:{text:i.text,attachments:i.attachments,syntheticParts:i.syntheticParts.filter(e=>e.partID!==a),mentions:i.mentions,...i.composerReferences===void 0?{}:{composerReferences:i.composerReferences}}});if(!o.current||!o.durable)return!1;await t.flushDraftPersistence();let s=t.captureDraftRuntime();return s.transportIdentity===e.transportIdentity&&s.generation===r.generation}catch{return!1}},Wt=async(e,t)=>{if(e.attachments.length>10||!e.attachments.every(Lt)||e.attachments.reduce((e,t)=>e+t.byteSize,0)>kt)throw Error(`invalid_share_attachment`);let n=Mt(t.storage),r=d({transportIdentity:t.transportIdentity},`assistant:${e.assistantID}`),i=W(n)[e.draftID],a=!1;if(!i||g(i.targetDraftKey)!==g(r)){let a=t.input.getDraft(r);if(i={draftID:e.draftID,serverInstanceID:e.serverInstanceID,connectionKey:e.connectionKey,assistantID:e.assistantID,transportIdentity:t.transportIdentity,targetDraftKey:r,baseRevision:a?.revision??`absent`,resultText:It(a?.text??``,e.text),attachmentIDs:e.attachments.map((t,n)=>Ft(e.draftID,n)),phase:`materializing`},!G(n,i))throw Error(`handoff_journal_unavailable`)}if(i.phase===`cancelled`)return{durable:!0,cancelled:!0};(i.phase===`materialized`||Rt(i,t.input.getDraft(r)))&&(a=!0);for(let o=0;!a&&o<3;o++){let o=t.input.getDraft(r),s={...i,baseRevision:o?.revision??`absent`,resultText:It(o?.text??``,e.text),phase:`materializing`};if(!G(n,s))throw Error(`handoff_journal_unavailable`);i=s;let c=new Map,l=[];for(let n=0;n<e.attachments.length;n++){let r=e.attachments[n],a=i.attachmentIDs[n],o=f(a),s=await t.readAttachment(r);if(s.size!==r.byteSize)throw Error(`staged_file_unavailable`);c.set(o,s.type===r.mime?s:new Blob([s],{type:r.mime})),l.push({attachmentID:a,attachmentRefID:o,filename:r.originalName,mimeType:r.mime,size:r.byteSize,locator:{kind:`blob`,blobID:a},source:`local`})}let u={partID:At(e.draftID),text:``,attachments:[],synthetic:!0},d=o?.syntheticParts??[],p=await t.input.commitDraftSnapshot({key:r,expectedRevision:o?.revision??`absent`,runtime:t.input.captureDraftRuntime(),snapshot:{text:i.resultText,attachments:[...o?.attachments??[],...l],syntheticParts:d.some(e=>e.partID===u.partID)?d:[...d,u],mentions:o?.mentions??[],...o?.composerReferences===void 0?{}:{composerReferences:o.composerReferences}},values:c});if(p.durable&&p.current)a=!0;else if(p.status!==`conflict`)throw Error(`draft_handoff_${p.status}`)}if(!a)throw Error(`draft_handoff_conflict`);if(i.phase!==`materialized`&&(i={...i,phase:`materialized`},!G(n,i)))throw Error(`handoff_journal_unavailable`);try{await t.cancelDraft(e.draftID)}catch{return{durable:!0,cancelled:!1}}if(i={...i,phase:`cancelled`},!G(n,i))throw Error(`handoff_journal_unavailable`);return{durable:!0,cancelled:!0}},K=y(`OpenChamberShare`),Gt=null,Kt=(e,t)=>a()===e&&u()===t,qt=e=>{if(ae()){fe(e);return}let t=ie.getState();t.setActiveTab(`assistant`),t.openAssistant(e)},Jt=async()=>{let e=(await K.pendingAssistantOpen().catch(()=>null))?.request;if(!e)return!1;let t=await lt(e.connectionKey);if(t===`missing`)return await K.ackAssistantOpen({requestID:e.requestID}).catch(()=>void 0),!0;if(t!==`connected`)return!0;let n=u();if(!Kt(e.connectionKey,n))return!0;try{let[t,r]=await Promise.all([w(),de()]);if(!Kt(e.connectionKey,n))return!0;let i=r.assistants.some(t=>t.id===e.assistantID&&t.enabled);if(!t.supported||!t.enabled||t.serverInstanceID!==e.serverInstanceID||!i)return await K.ackAssistantOpen({requestID:e.requestID}),!0;qt(e.assistantID),await K.ackAssistantOpen({requestID:e.requestID})}catch{}return!0},q=async()=>b.getPlatform()===`android`?Gt||(Gt=Jt().finally(()=>{Gt=null}),Gt):!1,Yt=new Intl.Segmenter(void 0,{granularity:`grapheme`}),Xt=/(?:\p{Extended_Pictographic}|\p{Regional_Indicator}|\u20e3)/u,Zt=e=>{let t=Yt.segment(e)[Symbol.iterator]().next().value?.segment;return!t||!Xt.test(t)?{displayName:e}:{avatarEmoji:t,displayName:e.slice(t.length).trimStart()}},J=_();function Qt(e){let t=(0,_e.c)(30),{draft:n,entries:r,busy:i,onSelect:a,onCancel:o}=e,{t:s}=re(),c;t[0]!==i||t[1]!==n||t[2]!==o?(c=()=>{n&&!i&&o(n)},t[0]=i,t[1]=n,t[2]=o,t[3]=c):c=t[3];let l=x(c),u;t[4]===l?u=t[5]:(u=e=>{e||l()},t[4]=l,t[5]=u);let d=x(u),f;t[6]!==n||t[7]!==a?(f=e=>{n&&a(n,e)},t[6]=n,t[7]=a,t[8]=f):f=t[8];let p=x(f),m=!!n,h;t[9]===s?h=t[10]:(h=s(`assistants.shareWelcome.example.note.title`),t[9]=s,t[10]=h);let g;t[11]===s?g=t[12]:(g=s(`settings.common.actions.cancel`),t[11]=s,t[12]=g);let _;t[13]!==i||t[14]!==l||t[15]!==h||t[16]!==g?(_=(0,J.jsx)(ue,{title:h,backAriaLabel:g,onBack:l,backDisabled:i,overlay:!0}),t[13]=i,t[14]=l,t[15]=h,t[16]=g,t[17]=_):_=t[17];let v;t[18]!==i||t[19]!==r||t[20]!==p||t[21]!==s?(v=r.length?(0,J.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-3 pb-[max(0.75rem,env(safe-area-inset-bottom))] pt-[calc(max(0.25rem,var(--oc-safe-area-top,0px))+var(--oc-mobile-detail-navigation-height,3.5rem)+0.75rem)]`,role:`listbox`,"aria-label":s(`assistants.listAria`),children:r.map(e=>{let t=Zt(e.name),n=t.displayName||e.name;return(0,J.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":`false`,disabled:i,className:`flex w-full items-center gap-3 border-b border-border/60 px-3 py-4 text-left text-foreground transition-colors last:border-b-0 hover:bg-interactive-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-60`,onClick:()=>p(e),children:[(0,J.jsx)(pe,{name:e.avatarSeed,emoji:t.avatarEmoji,size:36,label:n}),(0,J.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,J.jsx)(`span`,{className:`block truncate font-semibold`,children:n}),(0,J.jsx)(`span`,{className:`block truncate typography-small text-muted-foreground`,children:e.serverLabel})]}),(0,J.jsx)(me,{name:`arrow-right-s`,className:`size-4 shrink-0 text-muted-foreground`})]},`${e.connectionKey}:${e.assistantID}`)})}):(0,J.jsx)(`p`,{className:`px-5 pb-[max(1.25rem,env(safe-area-inset-bottom))] pt-[calc(max(0.25rem,var(--oc-safe-area-top,0px))+var(--oc-mobile-detail-navigation-height,3.5rem)+0.75rem)] typography-ui text-muted-foreground`,children:s(`assistants.state.unavailable`)}),t[18]=i,t[19]=r,t[20]=p,t[21]=s,t[22]=v):v=t[22];let y;t[23]!==_||t[24]!==v?(y=(0,J.jsxs)(he,{className:`h-[100dvh] max-h-none w-screen max-w-none gap-0 overflow-hidden rounded-none border-0 bg-background p-0`,containerClassName:`items-stretch p-0`,overlayClassName:`bg-background`,showCloseButton:!1,children:[_,v]}),t[23]=_,t[24]=v,t[25]=y):y=t[25];let b;return t[26]!==d||t[27]!==m||t[28]!==y?(b=(0,J.jsx)(ge,{open:m,onOpenChange:d,children:y}),t[26]=d,t[27]=m,t[28]=y,t[29]=b):b=t[29],b}var $t=t({MobileShareBridge:()=>Nn,donateNativeAssistantInteraction:()=>Sn,publishNativeAssistantCatalog:()=>xn,refreshNativeAssistantCatalog:()=>Q}),Y=y(`OpenChamberShare`),en=`openchamber.mobile-share.outbox.v1`,tn=()=>b.isNativePlatform(),nn=()=>{try{return JSON.parse(window.localStorage.getItem(en)||`{}`)}catch{return{}}},rn=e=>{try{window.localStorage.setItem(en,JSON.stringify(e))}catch{}},X=e=>{let t=nn(),n=t[e.envelope.operationID];n&&n.updatedAt>e.updatedAt||(t[e.envelope.operationID]=e,rn(t))},Z=(e,t)=>a()===e&&u()===t,an=new Map,on=null,sn=null,cn=!1,ln=[],un=0,dn=new Set,fn=new Map,pn=1,mn=e=>{e.map(e=>e.draftID).join(`
|
|
2
|
+
import{o as e,r as t}from"./rolldown-runtime-C0FnF6B9.js";import{A as n,C as r,E as i,T as a,Y as o,Z as s,j as c,q as l,w as u}from"./useUIStore-D6BTB4va.js";import{Ot as d,bt as f,et as p,kn as m,nt as h,yt as g}from"./persistence-C_KCiMcY.js";import{nt as _,rt as v}from"./vendor-base-ui-CnHfUmDN.js";import{a as y,n as b,o as ee,t as te}from"./vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js";import{n as ne}from"./vendor-react-DLPElpoQ.js";import{n as x}from"./vendor-reactuses-core-DDoDDyM9.js";import{n as re}from"./clipboard-CXWbHCAk.js";import{Co as S,_o as C,r as ie,wo as ae}from"./useMobileNavigationStore-1xHjnAsg.js";import{S as oe,b as se,c as w,m as ce,s as le,t as ue,u as de}from"./MobileDetailNavigation-lVtCe-5P.js";import{i as T,n as fe}from"./useAssistantUIStore-ESTV1mEY.js";import{t as pe}from"./AgentAvatar-C6Hxu5_o.js";import{n as me}from"./Icon-BPJ_quEe.js";import{n as he,t as ge}from"./dialog-BV1ENlLf.js";var _e=ne(),E=e(v(),1),ve=`openchamber.mobile.connections.v1`,ye=`openchamber.mobile.`,be=`openchamber.mobile.deviceId`,xe=()=>{try{let e=window.localStorage.getItem(be);if(e&&e.trim())return e.trim();let t=p();return window.localStorage.setItem(be,t),t}catch{return p()}},Se=()=>`mobile:${xe()}`,Ce=()=>{try{let e=b.getPlatform();return e===`ios`||e===`android`?e:void 0}catch{return}},we=12,Te=8e3,Ee=2500,De=3e3,Oe=2500,D=e=>{let t=e.trim();if(!t)return``;let n=/^https?:\/\//i.test(t)?t:`http://${t}`,r=new URL(n);return r.hash=``,r.search=``,r.pathname=r.pathname.replace(/\/+$/,``),r.toString().replace(/\/+$/,``)},ke=e=>{try{return new URL(e).host}catch{return e}},O=e=>{try{return D(e)}catch{return e.trim().replace(/\/+$/g,``)}},Ae=(e,t)=>O(e)===O(t),je=e=>`relay:${e.serverId}@${e.relayUrl.trim()}`,Me=e=>`relay://${e.serverId}`,k=e=>e.candidates.filter(e=>e.kind===`direct`),A=e=>{let t=e.candidates.find(e=>e.kind===`relay`);return t&&t.kind===`relay`?t.relay:null},j=e=>{let t=k(e)[0];if(t)return t.url;let n=A(e);return n?Me(n):``},M=e=>{let t=A(e);if(t)return je(t);let n=k(e)[0];return n?O(n.url):``},Ne=M,N=(e,t)=>{let n=e.find(e=>e.kind===`relay`),r=n&&n.kind===`relay`?n.relay.serverId:null,i=n&&n.kind===`relay`?n.relay.relayUrl.trim():null,a=new Set(e.filter(e=>e.kind===`direct`).map(e=>O(e.url)));return t.some(e=>e.kind===`relay`?r!==null&&e.relay.serverId===r&&e.relay.relayUrl.trim()===i:a.has(O(e.url)))},Pe=e=>{let t=(()=>{try{return D(e)}catch{return``}})();return t?[{kind:`direct`,url:t}]:[]},Fe=e=>{if(e.candidates&&e.candidates.length>0)return e.candidates;let t=[];return typeof e.url==`string`&&e.url.trim()&&!/^relay:\/\//i.test(e.url.trim())&&t.push(...Pe(e.url)),e.relay&&t.push({kind:`relay`,relay:e.relay}),t},Ie=e=>{if(!e||typeof e!=`object`||Array.isArray(e))return null;let t=e;if(typeof t.relayUrl!=`string`||!t.relayUrl.trim()||typeof t.serverId!=`string`||!t.serverId.trim())return null;let n=t.hostEncPubJwk;if(!n||typeof n!=`object`||Array.isArray(n))return null;let r=n;return r.kty!==`EC`||r.crv!==`P-256`||typeof r.x!=`string`||!r.x||typeof r.y!=`string`||!r.y?null:{relayUrl:t.relayUrl,serverId:t.serverId,hostEncPubJwk:{kty:`EC`,crv:`P-256`,x:r.x,y:r.y}}},Le=e=>{try{return JSON.stringify(e)}catch{return String(e)}},P=(e,t={})=>{Le(t)},F=(e,t={})=>{Le(t)},Re=e=>{if(typeof e!=`string`)return e;try{return JSON.parse(e)}catch{return e}},ze=e=>{if(typeof e!=`string`)return e??void 0;try{return JSON.parse(e)}catch{return e}},Be=async(e,t)=>{if(!S())return null;try{let{CapacitorHttp:n}=await ee(async()=>{let{CapacitorHttp:e}=await import(`./vendor-aparajita-capacitor-secure-storage-CjQdwfjS.js`).then(e=>e.i);return{CapacitorHttp:e}},__vite__mapDeps([0,1])),r=Object.fromEntries(new Headers(t?.headers).entries()),i=await n.request({url:e,method:t?.method||`GET`,headers:r,data:ze(t?.body)});return{ok:i.status>=200&&i.status<300,status:i.status,source:`native-http`,json:async()=>Re(i.data)}}catch(t){return console.warn(`[mobile-connect]`,`native-http failed`,Le({url:e,error:t instanceof Error?t.message:String(t)})),null}},Ve=async(e,t)=>{let n=await fetch(e,t).catch(t=>(console.warn(`[mobile-connect]`,`browser-fetch failed`,Le({url:e,error:t instanceof Error?t.message:String(t)})),null));return n?{ok:n.ok,status:n.status,source:`browser-fetch`,json:()=>n.json()}:null},I=async(e,t,n)=>{let r,i=new Promise(t=>{r=window.setTimeout(()=>{n?.(),t(null)},e)});try{return await Promise.race([t,i])}catch{return null}finally{r!==void 0&&window.clearTimeout(r)}},L=async(e,t,n)=>{let r=n?.totalTimeoutMs??Te,i=Date.now(),a=await I(Math.min(Ee,r),Be(e,t));if(a)return a;let o=new AbortController;return I(Math.max(500,r-(Date.now()-i)),Ve(e,{...t,signal:o.signal}),()=>o.abort())},He=async e=>{if(!e)return null;let t=await e.json().catch(()=>null);if(!t||typeof t!=`object`)return null;let n=t;return{authenticated:typeof n.authenticated==`boolean`?n.authenticated:void 0,disabled:typeof n.disabled==`boolean`?n.disabled:void 0,scope:typeof n.scope==`string`?n.scope:void 0}},R=15e3,Ue=async(e,t,n,r=R,i)=>{let a=s({relayUrl:e.relayUrl,serverId:e.serverId,hostEncPubJwk:e.hostEncPubJwk,...n?{grant:n}:{}}),o=e=>e===`ok`&&i?.keepTunnel?{outcome:e,tunnel:a}:(a.close(),{outcome:e});try{let e=t?{Authorization:`Bearer ${t}`}:void 0,n=await I(r,a.fetch(`/auth/session`,{headers:e}).catch(()=>null));if(P(`relay:session`,{ok:n?.ok===!0,status:n?.status??null,hasToken:!!t}),!n)return o(`unreachable`);if(n.status===401)return o(t?`auth-failed`:`needs-login`);if(!n.ok&&n.status!==404)return o(`auth-failed`);let i=await He(n);return i&&i.disabled!==!0&&i.authenticated===!1?o(t?`auth-failed`:`needs-login`):o(`ok`)}catch(e){throw a.close(),e}},We=(e,t,n,r,i)=>{let a=typeof window<`u`?window.location.origin:``,o={relayUrl:e.relayUrl,serverId:e.serverId,hostEncPubJwk:e.hostEncPubJwk,...n?{grant:n}:{}};i&&l(o,i),c({apiBaseUrl:a,clientToken:t,runtimeKey:r??je(e),relay:o})},Ge=e=>{if(!e||typeof e!=`object`)return null;let t=e;if(t.kind===`direct`)return typeof t.url==`string`&&t.url.trim()?{kind:`direct`,url:t.url}:null;if(t.kind===`relay`){let e=Ie(t.relay);return e?{kind:`relay`,relay:e}:null}return null},Ke=e=>{if(e.mode===`relay`){let t=Ie(e.relay);return t?[{kind:`relay`,relay:t}]:[]}return typeof e.url==`string`?Pe(e.url):[]},z=()=>{if(typeof window>`u`)return[];let e;try{e=JSON.parse(window.localStorage.getItem(ve)||`[]`)}catch{return[]}if(!Array.isArray(e))return[];let t=S();return e.flatMap(e=>{if(!e||typeof e!=`object`)return[];let n=e;if(typeof n.id!=`string`)return[];let r=Array.isArray(n.candidates)?n.candidates.map(Ge).filter(e=>!!e):Ke(n);if(r.length===0)return[];let i=typeof n.clientToken==`string`&&n.clientToken.trim()?n.clientToken:void 0,a=typeof n.label==`string`&&n.label.trim()?n.label:ke(j({candidates:r})),o={id:n.id,label:a,candidates:r,lastUsedAt:typeof n.lastUsedAt==`number`?n.lastUsedAt:0};return t?[{...o,hasToken:!!n.hasToken||!!i}]:[{...o,clientToken:i,hasToken:!!i}]}).sort((e,t)=>t.lastUsedAt-e.lastUsedAt)},qe=e=>e.kind===`relay`?{kind:`relay`,relay:{relayUrl:e.relay.relayUrl,serverId:e.relay.serverId,hostEncPubJwk:e.relay.hostEncPubJwk}}:{kind:`direct`,url:e.url},Je=e=>{if(typeof window>`u`)return;let t=S(),n=e.slice(0,we).map(e=>{let n={id:e.id,label:e.label,candidates:e.candidates.map(qe),lastUsedAt:e.lastUsedAt};return t?{...n,hasToken:!!(e.hasToken||e.clientToken)}:{...n,clientToken:e.clientToken}});try{window.localStorage.setItem(ve,JSON.stringify(n))}catch(e){console.warn(`[mobile-storage] failed to persist connection metadata`,e)}},Ye=(e,t)=>{let n=e.find(e=>t.id&&e.id===t.id||N(e.candidates,t.candidates)),r=S(),i={id:t.id||n?.id||p(),label:t.label,candidates:t.candidates,lastUsedAt:Date.now(),...r?{hasToken:t.hasToken??(!!t.clientToken||n?.hasToken||!1)}:{clientToken:t.clientToken??n?.clientToken,hasToken:!!(t.clientToken??n?.clientToken)}};return[i,...e.filter(e=>e.id!==i.id&&!N(e.candidates,t.candidates))].slice(0,we)},Xe=te,Ze=0,Qe=e=>`${ye}token.${encodeURIComponent(e)}`,$e=async(e,t)=>{let n,r=new Promise(e=>{n=window.setTimeout(()=>e(t),De)});try{return await Promise.race([e.catch(()=>t),r])}finally{n!==void 0&&window.clearTimeout(n)}},et=async(e,t,n)=>S()?$e(t().catch(t=>(console.warn(`[mobile-storage] ${e} failed`,t),n)),n):n,B=async e=>{F(`secure:read-start`,{key:e});let t=await et(`secure:read`,async()=>(await Xe.internalGetItem({prefixedKey:Qe(e),sync:!1})).data,null),n=typeof t==`string`&&t.trim()?t:void 0;return F(`secure:read`,{key:e,hasToken:!!n}),n},V=async(e,t)=>{F(`secure:write-start`,{key:e});let n=await et(`secure:write`,async()=>(await Xe.internalSetItem({prefixedKey:Qe(e),data:t,sync:!1,access:Ze}),!0),!1);return F(`secure:write`,{key:e,ok:n}),n},tt=async e=>{await et(`secure:delete`,async()=>(await Xe.internalRemoveItem({prefixedKey:Qe(e),sync:!1}),!0),!1)},nt=async()=>{if(typeof window>`u`||!S())return;let e;try{e=JSON.parse(window.localStorage.getItem(ve)||`[]`)}catch{return}if(!Array.isArray(e))return;let t=e.filter(e=>!!e&&typeof e==`object`&&typeof e.url==`string`&&typeof e.clientToken==`string`&&!!e.clientToken.trim());if(t.length!==0){F(`secure:migrate-start`,{count:t.length});for(let{url:e,clientToken:n}of t)await V(O(e),n);Je(z()),F(`secure:migrate-done`,{count:t.length})}},rt=async()=>(await nt(),z()),it=async e=>{let t=Ye(z(),e);return Je(t),S()&&e.clientToken&&await V(M({candidates:e.candidates}),e.clientToken),t},at=async e=>{let t=z(),n=t.find(t=>t.id===e)??null,r=t.filter(t=>t.id!==e);if(Je(r),n&&S()&&await tt(M(n)),n){let e=M(n),{useAssistantUIStore:t}=await ee(async()=>{let{useAssistantUIStore:e}=await import(`./useAssistantUIStore-ESTV1mEY.js`).then(e=>e.a);return{useAssistantUIStore:e}},__vite__mapDeps([2,1,3,4,5]));t.getState().removeCatalogPartition(e);let{publishNativeAssistantCatalog:r}=await ee(async()=>{let{publishNativeAssistantCatalog:e}=await Promise.resolve().then(()=>$t);return{publishNativeAssistantCatalog:e}},void 0);await r().catch(()=>void 0)}return r},ot=1500,H=async(e,t,n)=>{let r=n?.fast?{totalTimeoutMs:Oe}:void 0,i=A({candidates:e})?.serverId??null,a=e.find(e=>e.kind===`relay`)??null,o=e.filter(e=>e.kind===`direct`),s=async()=>{for(let e of o){let n=D(e.url)||e.url,a=t?{Authorization:`Bearer ${t}`}:void 0,o=await L(`${n}/health`,{method:`GET`},r);if(!o?.ok)continue;if(i){let e=await o.json().catch(()=>null),t=e&&typeof e==`object`?e.serverId:null;if(typeof t==`string`&&t&&t!==i){P(`probe:server-id-mismatch`,{url:n});continue}}let s=await L(`${n}/auth/session`,{method:`GET`,credentials:`include`,headers:a},r);if(s?.status===401)return{status:`needs-login`};if(!s||!s.ok&&s.status!==404)continue;let c=await He(s);if(c&&c.disabled!==!0&&c.authenticated===!1)return{status:`needs-login`};let l=c?.disabled===!0;return!t&&S()&&!l&&c?.scope!==`client`?{status:`needs-login`}:{status:`ok`,transport:{kind:`direct`,url:n}}}return{status:`unreachable`}},c=async()=>{if(!a)return{status:`unreachable`};let{outcome:e,tunnel:r}=await Ue(a.relay,t,void 0,n?.fast?Oe:void 0,{keepTunnel:!0});return e===`ok`?{status:`ok`,transport:{kind:`relay`,relay:a.relay,tunnel:r}}:e===`needs-login`||e===`auth-failed`?{status:`needs-login`}:{status:`unreachable`}};return a?o.length===0?c():new Promise(e=>{let t=!1,n=!1,r,i=null,a=null,o=e=>{e?.status===`ok`&&e.transport.kind===`relay`&&e.transport.tunnel?.close()},l=n=>{t||(t=!0,e(n))},u=()=>{n||t||(r!==void 0&&(window.clearTimeout(r),r=void 0),c().then(e=>{if(a=e,t||n){o(e);return}if(e.status===`ok`||e.status===`needs-login`){l(e);return}i&&l(i)}))};s().then(e=>{if(i=e,!t){if(e.status===`ok`||e.status===`needs-login`){n=!0,r!==void 0&&window.clearTimeout(r),o(a),l(e);return}if(a){l(a);return}u()}}),r=window.setTimeout(u,ot)}):s()},U=(e,t,n)=>{e.kind===`relay`?We(e.relay,t,n?.grant,n?.runtimeKey,e.tunnel):c({apiBaseUrl:e.url,clientToken:t,runtimeKey:n?.runtimeKey}),xt()},st=()=>{let e=z()[0];return e?.label?.trim()?e.label:null},ct=async()=>{await nt();let e=z()[0];if(!e)return!1;let t;if(S()){if(!e.hasToken||(t=await B(M(e)),!t))return!1}else if(t=e.clientToken,!t)return!1;let n=await H(e.candidates,t);return n.status===`ok`&&(await it({id:e.id,label:e.label,candidates:e.candidates}),U(n.transport,t,{runtimeKey:M(e)}),!0)},lt=async(e,t)=>{let n=(await rt()).find(t=>M(t)===e);if(!n)return`missing`;let r=S()?n.hasToken?await B(e):void 0:n.clientToken;if(!r)return`auth-required`;let i=t?.transportPreference===`relay`?n.candidates.filter(e=>e.kind===`relay`):n.candidates;if(i.length===0)return`offline`;let a=await H(i,r,{fast:!0});return a.status===`needs-login`?`auth-required`:a.status===`ok`?(U(a.transport,r,{runtimeKey:e}),`connected`):`offline`},ut=async(e,t)=>{let n=``;try{n=D(e.url)}catch{return!1}if(!n)return!1;let r=e.clientToken?.trim()||void 0,i=r?{Authorization:`Bearer ${r}`}:void 0,a=t?.fast?{totalTimeoutMs:Oe}:void 0;if(!(await L(`${n}/health`,{method:`GET`,headers:i},a))?.ok)return!1;let o=await L(`${n}/auth/session`,{method:`GET`,credentials:`include`,headers:i},a);if(!o||!o.ok&&o.status!==404)return!1;let s=await He(o);return!(s&&s.disabled!==!0&&s.authenticated===!1)},dt=e=>[...e].sort((e,t)=>{let n=(e.priority??100)-(t.priority??100);if(n!==0)return n;let r=e=>e.type===`relay`?2:+!e.url.startsWith(`https://`);return r(e)-r(t)}).flatMap(e=>{if(e.type===`relay`){let t=Ie({relayUrl:e.relayUrl,serverId:e.serverId,hostEncPubJwk:e.hostEncPubJwk});return t?[{kind:`relay`,relay:t}]:[]}return Pe(e.url)}),ft=async e=>{let t=A({candidates:e})?.serverId??null;for(let n of e){if(n.kind===`relay`){let e=s(n.relay),t=await I(R,e.fetch(`/health`).catch(()=>null));if(P(`establish:relay:health`,{ok:t?.ok===!0,status:t?.status??null}),t?.ok)return{kind:`relay`,relay:n.relay,tunnel:e};e.close();continue}let e=D(n.url)||n.url,r=await L(`${e}/health`,{method:`GET`});if(P(`establish:direct:health`,{ok:r?.ok===!0,status:r?.status??null}),r?.ok){if(t){let n=await r.json().catch(()=>null),i=n&&typeof n==`object`?n.serverId:null;if(typeof i==`string`&&i&&i!==t){P(`establish:server-id-mismatch`,{url:e});continue}}return{kind:`direct`,url:e}}}return null},pt=async(e,t)=>{if(!o())return ut(e,t);let n=await I(t?.fast?Oe:R,m(`/auth/session`).then(e=>e).catch(()=>null));if(!n)return!0;if(n.status===401)return!1;if(!n.ok&&n.status!==404)return!0;let r=await He(n);return!(r&&r.disabled!==!0&&r.authenticated===!1)},mt=e=>e.kind===`relay`?o():!o()&&Ae(e.url,r()),ht=()=>{let e=a();return e?z().find(t=>M(t)===e)??null:null},gt=e=>{let t=a();return!!t&&M(e)===t},_t=async()=>{let e=ht();if(!e)return`no-connection`;let t;if(t=S()?e.hasToken?await B(M(e)):void 0:e.clientToken,!t)return`unreachable`;let n=e.candidates.findIndex(e=>mt(e.kind===`relay`?{kind:`relay`,relay:e.relay}:{kind:`direct`,url:e.url})),i=await H(n>=0?e.candidates.slice(0,n):e.candidates,t,{fast:!0});if(i.status===`ok`)return await it({id:e.id,label:e.label,candidates:e.candidates}),U(i.transport,t,{runtimeKey:M(e)}),`switched`;if(i.status===`needs-login`)return`unreachable`;if(n>=0&&await pt({url:r(),clientToken:t},{fast:!0}))return xt(),`unchanged`;let a=await H(n>=0?e.candidates.slice(n+1):[],t,{fast:!0});return a.status===`ok`?(await it({id:e.id,label:e.label,candidates:e.candidates}),U(a.transport,t,{runtimeKey:M(e)}),`switched`):`unreachable`},vt=5e3,yt=!1,bt=async()=>{if(yt)return`skipped`;let e=ht();if(!e)return P(`candidates:refresh-skip`,{reason:`no-active-connection`}),`skipped`;let t=A(e);if(!t)return P(`candidates:refresh-skip`,{reason:`no-relay-candidate`}),`skipped`;yt=!0;try{let n=await I(R,m(`/api/client-auth/connection/candidates`).then(e=>e).catch(()=>null));if(!n?.ok)return P(`candidates:refresh-skip`,{reason:`fetch-failed`,status:n?.status??null}),`skipped`;let r=await n.json().catch(()=>null);if(!r||r.serverId!==t.serverId)return P(`candidates:refresh-skip`,{reason:`server-id-mismatch`}),`skipped`;let i=Array.isArray(r.candidates)?r.candidates:[],a=[];for(let e of i){if(!e||typeof e!=`object`)continue;let t=e;if(t.type===`lan`&&typeof t.url==`string`)try{let e=D(t.url);e&&!a.includes(e)&&a.push(e)}catch{}}if(a.length===0)return P(`candidates:refresh-skip`,{reason:`no-lan-reported`}),`skipped`;let o=k(e).filter(e=>e.url.startsWith(`https://`)),s=[...a.map(e=>({kind:`direct`,url:e})),...o,{kind:`relay`,relay:t}];return JSON.stringify(e.candidates.map(qe))===JSON.stringify(s.map(qe))?`unchanged`:(P(`candidates:refreshed`,{lanCount:a.length}),await it({id:e.id,label:e.label,candidates:s}),`updated`)}finally{yt=!1}},xt=()=>{typeof window>`u`||window.setTimeout(()=>{(async()=>{let e=await bt().catch(()=>`skipped`);P(`candidates:refresh-result`,{result:e}),e===`updated`&&o()&&await _t().catch(()=>null)})()},vt)},St=e=>{let{t}=re(),[n,r]=E.useState(()=>z()),[i,a]=E.useState(null),[o,s]=E.useState(null),[c,l]=E.useState(null),u=E.useRef(n),d=E.useRef(null),f=E.useRef(new Set),m=x(()=>{e(),f.current.forEach(e=>e())}),h=x(e=>(f.current.add(e),()=>f.current.delete(e))),g=x(e=>{u.current=e,r(e)}),_=x(e=>{d.current=e,a(e)}),v=x(e=>{d.current===e&&(d.current=null,a(null))});E.useEffect(()=>{let e=!1;return rt().then(t=>{e||g(t)}),()=>{e=!0}},[g]);let y=x(e=>{let t=Ye(u.current,e);return g(t),Je(t),t}),b=x(async e=>{s(null),_(`connect`);try{let n=Fe(e);if(n.length===0){s(t(`mobile.connect.error.urlRequired`));return}let r=e.id?u.current.find(t=>t.id===e.id):u.current.find(e=>N(e.candidates,n)),i=e.label?.trim()||r?.label||ke(j({candidates:n})),a=e.relayGrant,o=e.clientToken?.trim()||void 0,c=!!o;o||(S()?r?.hasToken&&(o=await B(M({candidates:n}))):o=r?.clientToken),P(`connect:start`,{candidates:n.map(e=>e.kind),hasToken:!!o});let d=await H(n,o);if(P(`connect:probe`,{status:d.status}),d.status===`unreachable`){s(t(`mobile.connect.error.unreachable`));return}if(d.status===`needs-login`){y({id:r?.id,label:i,candidates:n}),l({id:r?.id??p(),label:i,candidates:n,relay:A({candidates:n})??void 0,relayGrant:a});return}o&&c&&S()&&await V(M({candidates:n}),o),y({id:r?.id,label:i,candidates:n,clientToken:o}),U(d.transport,o??null,{runtimeKey:M({candidates:n}),grant:a}),m()}catch(e){console.warn(`[mobile-connect] connect threw`,e),s(t(`mobile.connect.error.invalidUrl`))}finally{v(`connect`)}}),ee=x(async e=>{if(d.current===`pairing`)return;s(null),_(`pairing`);let n=dt(e.candidates),r=null,i=!1;try{if(r=await ft(n),!r){s(t(`mobile.connect.error.unreachable`));return}let a={method:`POST`,headers:{"Content-Type":`application/json`,Accept:`application/json`},body:JSON.stringify({pairingId:e.pairingId,secret:e.secret,clientLabel:`OpenChamber Mobile`,clientKind:`mobile`,deviceName:`OpenChamber Mobile`,devicePlatform:Ce(),dedupeKey:Se()})},o=r.kind===`relay`?await I(R,r.tunnel.fetch(`/api/client-auth/pairing/redeem`,a).catch(()=>null)):await L(`${r.url}/api/client-auth/pairing/redeem`,a);if(!o?.ok){s(t(`mobile.connect.error.authRequired`));return}let c=await o.json().catch(()=>null),l=typeof c?.clientToken==`string`?c.clientToken.trim():``;if(!l){s(t(`mobile.connect.error.authRequired`));return}let u=typeof c?.server?.label==`string`?c.server.label:``,d=e.label||u||ke(j({candidates:n}));if(S()&&!await V(M({candidates:n}),l)){s(t(`mobile.connect.error.authRequired`));return}y({label:d,candidates:n,clientToken:l}),U(r.kind===`relay`?{kind:`relay`,relay:r.relay,tunnel:r.tunnel}:{kind:`direct`,url:r.url},l,{runtimeKey:M({candidates:n})}),i=r.kind===`relay`,m()}catch(e){console.warn(`[mobile-connect] pairing threw`,e),s(t(`mobile.connect.error.authRequired`))}finally{!i&&r?.kind===`relay`&&r.tunnel.close(),v(`pairing`)}}),te=x(async e=>{if(!c||!e.trim()||d.current===`password`)return;s(null),_(`password`);let{id:n,label:r,candidates:i}=c,a=null,o=!1;try{if(a=await ft(i),!a){s(t(`mobile.connect.error.unreachable`));return}let c={method:`POST`,credentials:`include`,headers:{"Content-Type":`application/json`,Accept:`application/json`},body:JSON.stringify({password:e,trustDevice:!0,issueClientToken:!0,clientLabel:`OpenChamber Mobile`,clientKind:`mobile`,devicePlatform:Ce(),dedupeKey:Se()})};P(`password:start`,{transport:a.kind});let u=a.kind===`relay`?await I(R,a.tunnel.fetch(`/auth/session`,c).catch(()=>null)):await L(`${a.url}/auth/session`,c);if(P(`password:done`,{ok:u?.ok===!0,status:u?.status??null}),!u?.ok){s(t(`mobile.connect.error.passwordFailed`));return}let d=await u.json().catch(()=>null),f=typeof d?.clientToken==`string`?d.clientToken.trim():``;if(P(`password:token`,{issued:!!f}),!f){if(a.kind===`direct`&&!S()){y({id:n,label:r,candidates:i}),l(null),U({kind:`direct`,url:a.url},null,{runtimeKey:M({candidates:i})}),m();return}s(t(`mobile.connect.error.authRequired`));return}S()&&await V(M({candidates:i}),f),y({id:n,label:r,candidates:i,clientToken:f}),l(null),U(a.kind===`relay`?{kind:`relay`,relay:a.relay,tunnel:a.tunnel}:{kind:`direct`,url:a.url},f,{runtimeKey:M({candidates:i})}),o=a.kind===`relay`,m()}catch(e){console.warn(`[mobile-connect] password threw`,e),s(t(`mobile.connect.error.passwordFailed`))}finally{!o&&a?.kind===`relay`&&a.tunnel.close(),v(`password`)}}),ne=x(()=>{l(null),s(null)}),C=x(async e=>{s(null);let n=Fe(e),r=e.id?u.current.find(t=>t.id===e.id)??null:null;if(r){let e=n.filter(e=>e.kind===`direct`),t=k(r).filter(t=>t.url.startsWith(`https://`)&&!e.some(e=>Ae(e.url,t.url))),i=A(r);n=[...e,...t,...i?[{kind:`relay`,relay:i}]:[]]}if(n.length===0)return s(t(`mobile.connect.error.urlRequired`)),null;let i=e.clientToken?.trim()||void 0,a=e.label?.trim()||ke(j({candidates:n}));if(S()){let e=M({candidates:n});if(i)await V(e,i);else if(r?.hasToken){let t=M(r);if(t&&e&&t!==e){let n=await B(t);n&&await V(e,n)}}}return y({id:e.id,label:a,candidates:n,clientToken:i}).find(e=>N(e.candidates,n))??null}),ie=x(async e=>{let t=u.current.find(t=>t.id===e)??null,n=await at(e);return g(n),t});return{connections:n,isBusy:i!==null,isPasswordBusy:i===`password`,error:o,pendingConnection:c,connect:b,redeemPairingConnection:ee,submitPassword:te,cancelPassword:ne,saveConnection:C,removeConnection:ie,subscribeConnected:h,setError:s}},Ct=async(e,t=3)=>{let n;for(let r=0;r<t;r+=1)try{await e();return}catch(e){n=e}throw n},wt=async(e,t,n=2)=>{let r=[...new Map(e.map(e=>[e.operationID,e])).values()],i=0;await Promise.all(Array.from({length:Math.min(Math.max(1,n),r.length)},async()=>{for(;i<r.length;){let e=r[i++];try{e.cleanupPhase&&e.cleanupPhase!==`files-released`?await t.cleanup(e.operationID):await t.deliver(e.operationID)}catch{}}}))},Tt=e=>!!(e.serverInstanceID&&e.assistantID&&e.name&&e.avatarSeed&&e.serverLabel&&e.connectionKey),Et=`openchamber.mobile-share.draft-handoff.v1`,Dt=`mobile-share-handoff:`,Ot=20971520,kt=20971520,At=e=>`${Dt}${e}`,jt=e=>typeof e.partID==`string`&&e.partID.startsWith(`mobile-share-handoff:`),Mt=e=>e??(typeof window>`u`?null:window.localStorage),W=e=>{if(!e)return{};try{let t=JSON.parse(e.getItem(`openchamber.mobile-share.draft-handoff.v1`)||`{}`);return Object.fromEntries(Object.entries(t).flatMap(([e,t])=>{let n=typeof t.assistantID==`string`?t.assistantID:zt(t),r=typeof t.transportIdentity==`string`?t.transportIdentity:t.targetDraftKey?.transportIdentity;if(!n||typeof t.serverInstanceID!=`string`||typeof t.connectionKey!=`string`||!r)return[];let i=t.phase===`cancelled`?`cancelled`:t.phase===`materialized`?`materialized`:`materializing`;return[[e,{...t,draftID:e,assistantID:n,transportIdentity:r,phase:i}]]}))}catch{return{}}},Nt=(e,t)=>{if(!e)return!1;try{return e.setItem(Et,JSON.stringify(t)),!0}catch{return!1}},Pt=(e,t)=>{let n=W(e);if(delete n[t],e)try{e.setItem(Et,JSON.stringify(n))}catch{return}},G=(e,t)=>Nt(e,{...W(e),[t.draftID]:t}),Ft=(e,t)=>`native-share:${e}:${t}`,It=(e,t)=>t?e?`${e}\n\n${t}`:t:e,Lt=e=>e.mime.startsWith(`image/`)&&e.byteSize>0&&e.byteSize<=Ot,Rt=(e,t)=>!!t?.syntheticParts.some(t=>t.partID===At(e.draftID)&&t.text===``&&t.attachments.length===0&&t.synthetic===!0),zt=e=>{let t=e.targetDraftKey?.owner;return t?.kind!==`surface`||typeof t.ownerID!=`string`||!t.ownerID.startsWith(`assistant:`)?null:t.ownerID.slice(10)||null},Bt=e=>({draftID:e.draftID,serverInstanceID:e.serverInstanceID,connectionKey:e.connectionKey,assistantID:e.assistantID,transportIdentity:e.transportIdentity}),Vt=async(e,t)=>{let n=Mt(t),r=[];for(let t of Object.values(W(n))){if(t.phase===`cancelled`){r.push(Bt(t));continue}if(t.phase===`materialized`)try{await e(t.draftID);let i={...t,phase:`cancelled`};if(!G(n,i))continue;r.push(Bt(i))}catch{continue}}return r},Ht=(e,t)=>{let n=Mt(t),r=W(n)[e.draftID];return!r||r.phase!==`cancelled`||r.serverInstanceID!==e.serverInstanceID||r.connectionKey!==e.connectionKey||r.assistantID!==e.assistantID||r.transportIdentity!==e.transportIdentity?!1:(Pt(n,e.draftID),!W(n)[e.draftID])},Ut=async(e,t)=>{let n=d({transportIdentity:e.transportIdentity},`assistant:${e.assistantID}`),r=t.captureDraftRuntime();if(r.transportIdentity!==e.transportIdentity)return!1;let i=t.getDraft(n),a=At(e.draftID);try{if(!i||!i.syntheticParts.some(e=>e.partID===a)){await t.flushDraftPersistence();let n=t.captureDraftRuntime();return n.transportIdentity===e.transportIdentity&&n.generation===r.generation}let o=await t.commitDraftSnapshot({key:n,expectedRevision:i.revision,runtime:r,values:new Map,snapshot:{text:i.text,attachments:i.attachments,syntheticParts:i.syntheticParts.filter(e=>e.partID!==a),mentions:i.mentions,...i.composerReferences===void 0?{}:{composerReferences:i.composerReferences}}});if(!o.current||!o.durable)return!1;await t.flushDraftPersistence();let s=t.captureDraftRuntime();return s.transportIdentity===e.transportIdentity&&s.generation===r.generation}catch{return!1}},Wt=async(e,t)=>{if(e.attachments.length>10||!e.attachments.every(Lt)||e.attachments.reduce((e,t)=>e+t.byteSize,0)>kt)throw Error(`invalid_share_attachment`);let n=Mt(t.storage),r=d({transportIdentity:t.transportIdentity},`assistant:${e.assistantID}`),i=W(n)[e.draftID],a=!1;if(!i||g(i.targetDraftKey)!==g(r)){let a=t.input.getDraft(r);if(i={draftID:e.draftID,serverInstanceID:e.serverInstanceID,connectionKey:e.connectionKey,assistantID:e.assistantID,transportIdentity:t.transportIdentity,targetDraftKey:r,baseRevision:a?.revision??`absent`,resultText:It(a?.text??``,e.text),attachmentIDs:e.attachments.map((t,n)=>Ft(e.draftID,n)),phase:`materializing`},!G(n,i))throw Error(`handoff_journal_unavailable`)}if(i.phase===`cancelled`)return{durable:!0,cancelled:!0};(i.phase===`materialized`||Rt(i,t.input.getDraft(r)))&&(a=!0);for(let o=0;!a&&o<3;o++){let o=t.input.getDraft(r),s={...i,baseRevision:o?.revision??`absent`,resultText:It(o?.text??``,e.text),phase:`materializing`};if(!G(n,s))throw Error(`handoff_journal_unavailable`);i=s;let c=new Map,l=[];for(let n=0;n<e.attachments.length;n++){let r=e.attachments[n],a=i.attachmentIDs[n],o=f(a),s=await t.readAttachment(r);if(s.size!==r.byteSize)throw Error(`staged_file_unavailable`);c.set(o,s.type===r.mime?s:new Blob([s],{type:r.mime})),l.push({attachmentID:a,attachmentRefID:o,filename:r.originalName,mimeType:r.mime,size:r.byteSize,locator:{kind:`blob`,blobID:a},source:`local`})}let u={partID:At(e.draftID),text:``,attachments:[],synthetic:!0},d=o?.syntheticParts??[],p=await t.input.commitDraftSnapshot({key:r,expectedRevision:o?.revision??`absent`,runtime:t.input.captureDraftRuntime(),snapshot:{text:i.resultText,attachments:[...o?.attachments??[],...l],syntheticParts:d.some(e=>e.partID===u.partID)?d:[...d,u],mentions:o?.mentions??[],...o?.composerReferences===void 0?{}:{composerReferences:o.composerReferences}},values:c});if(p.durable&&p.current)a=!0;else if(p.status!==`conflict`)throw Error(`draft_handoff_${p.status}`)}if(!a)throw Error(`draft_handoff_conflict`);if(i.phase!==`materialized`&&(i={...i,phase:`materialized`},!G(n,i)))throw Error(`handoff_journal_unavailable`);try{await t.cancelDraft(e.draftID)}catch{return{durable:!0,cancelled:!1}}if(i={...i,phase:`cancelled`},!G(n,i))throw Error(`handoff_journal_unavailable`);return{durable:!0,cancelled:!0}},K=y(`OpenChamberShare`),Gt=null,Kt=(e,t)=>a()===e&&u()===t,qt=e=>{if(ae()){fe(e);return}let t=ie.getState();t.setActiveTab(`assistant`),t.openAssistant(e)},Jt=async()=>{let e=(await K.pendingAssistantOpen().catch(()=>null))?.request;if(!e)return!1;let t=await lt(e.connectionKey);if(t===`missing`)return await K.ackAssistantOpen({requestID:e.requestID}).catch(()=>void 0),!0;if(t!==`connected`)return!0;let n=u();if(!Kt(e.connectionKey,n))return!0;try{let[t,r]=await Promise.all([w(),de()]);if(!Kt(e.connectionKey,n))return!0;let i=r.assistants.some(t=>t.id===e.assistantID&&t.enabled);if(!t.supported||!t.enabled||t.serverInstanceID!==e.serverInstanceID||!i)return await K.ackAssistantOpen({requestID:e.requestID}),!0;qt(e.assistantID),await K.ackAssistantOpen({requestID:e.requestID})}catch{}return!0},q=async()=>b.getPlatform()===`android`?Gt||(Gt=Jt().finally(()=>{Gt=null}),Gt):!1,Yt=new Intl.Segmenter(void 0,{granularity:`grapheme`}),Xt=/(?:\p{Extended_Pictographic}|\p{Regional_Indicator}|\u20e3)/u,Zt=e=>{let t=Yt.segment(e)[Symbol.iterator]().next().value?.segment;return!t||!Xt.test(t)?{displayName:e}:{avatarEmoji:t,displayName:e.slice(t.length).trimStart()}},J=_();function Qt(e){let t=(0,_e.c)(30),{draft:n,entries:r,busy:i,onSelect:a,onCancel:o}=e,{t:s}=re(),c;t[0]!==i||t[1]!==n||t[2]!==o?(c=()=>{n&&!i&&o(n)},t[0]=i,t[1]=n,t[2]=o,t[3]=c):c=t[3];let l=x(c),u;t[4]===l?u=t[5]:(u=e=>{e||l()},t[4]=l,t[5]=u);let d=x(u),f;t[6]!==n||t[7]!==a?(f=e=>{n&&a(n,e)},t[6]=n,t[7]=a,t[8]=f):f=t[8];let p=x(f),m=!!n,h;t[9]===s?h=t[10]:(h=s(`assistants.shareWelcome.example.note.title`),t[9]=s,t[10]=h);let g;t[11]===s?g=t[12]:(g=s(`settings.common.actions.cancel`),t[11]=s,t[12]=g);let _;t[13]!==i||t[14]!==l||t[15]!==h||t[16]!==g?(_=(0,J.jsx)(ue,{title:h,backAriaLabel:g,onBack:l,backDisabled:i,overlay:!0}),t[13]=i,t[14]=l,t[15]=h,t[16]=g,t[17]=_):_=t[17];let v;t[18]!==i||t[19]!==r||t[20]!==p||t[21]!==s?(v=r.length?(0,J.jsx)(`div`,{className:`min-h-0 flex-1 overflow-y-auto px-3 pb-[max(0.75rem,env(safe-area-inset-bottom))] pt-[calc(max(0.25rem,var(--oc-safe-area-top,0px))+var(--oc-mobile-detail-navigation-height,3.5rem)+0.75rem)]`,role:`listbox`,"aria-label":s(`assistants.listAria`),children:r.map(e=>{let t=Zt(e.name),n=t.displayName||e.name;return(0,J.jsxs)(`button`,{type:`button`,role:`option`,"aria-selected":`false`,disabled:i,className:`flex w-full items-center gap-3 border-b border-border/60 px-3 py-4 text-left text-foreground transition-colors last:border-b-0 hover:bg-interactive-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-60`,onClick:()=>p(e),children:[(0,J.jsx)(pe,{name:e.avatarSeed,emoji:t.avatarEmoji,size:36,label:n}),(0,J.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,J.jsx)(`span`,{className:`block truncate font-semibold`,children:n}),(0,J.jsx)(`span`,{className:`block truncate typography-small text-muted-foreground`,children:e.serverLabel})]}),(0,J.jsx)(me,{name:`arrow-right-s`,className:`size-4 shrink-0 text-muted-foreground`})]},`${e.connectionKey}:${e.assistantID}`)})}):(0,J.jsx)(`p`,{className:`px-5 pb-[max(1.25rem,env(safe-area-inset-bottom))] pt-[calc(max(0.25rem,var(--oc-safe-area-top,0px))+var(--oc-mobile-detail-navigation-height,3.5rem)+0.75rem)] typography-ui text-muted-foreground`,children:s(`assistants.state.unavailable`)}),t[18]=i,t[19]=r,t[20]=p,t[21]=s,t[22]=v):v=t[22];let y;t[23]!==_||t[24]!==v?(y=(0,J.jsxs)(he,{className:`h-[100dvh] max-h-none w-screen max-w-none gap-0 overflow-hidden rounded-none border-0 bg-background p-0`,containerClassName:`items-stretch p-0`,overlayClassName:`bg-background`,showCloseButton:!1,children:[_,v]}),t[23]=_,t[24]=v,t[25]=y):y=t[25];let b;return t[26]!==d||t[27]!==m||t[28]!==y?(b=(0,J.jsx)(ge,{open:m,onOpenChange:d,children:y}),t[26]=d,t[27]=m,t[28]=y,t[29]=b):b=t[29],b}var $t=t({MobileShareBridge:()=>Nn,donateNativeAssistantInteraction:()=>Sn,publishNativeAssistantCatalog:()=>xn,refreshNativeAssistantCatalog:()=>Q}),Y=y(`OpenChamberShare`),en=`openchamber.mobile-share.outbox.v1`,tn=()=>b.isNativePlatform(),nn=()=>{try{return JSON.parse(window.localStorage.getItem(en)||`{}`)}catch{return{}}},rn=e=>{try{window.localStorage.setItem(en,JSON.stringify(e))}catch{}},X=e=>{let t=nn(),n=t[e.envelope.operationID];n&&n.updatedAt>e.updatedAt||(t[e.envelope.operationID]=e,rn(t))},Z=(e,t)=>a()===e&&u()===t,an=new Map,on=null,sn=null,cn=!1,ln=[],un=0,dn=new Set,fn=new Map,pn=1,mn=e=>{e.map(e=>e.draftID).join(`
|
|
3
3
|
`)!==ln.map(e=>e.draftID).join(`
|
|
4
4
|
`)&&(ln=e,un+=1,dn.forEach(e=>e()))},hn=e=>mn(ln.filter(t=>t.draftID!==e)),gn=e=>(dn.add(e),()=>dn.delete(e)),_n=()=>un,vn=async e=>{if(!e.mime.startsWith(`image/`))throw Error(`unsupported_share_attachment`);let t=e.stagedPath.trim();if(!t)throw Error(`staged_file_unavailable`);let n=/^(?:data:|https?:|content:|file:)/i.test(t)?t:`file://${t}`,r=/^(?:data:|https?:)/i.test(n)?n:b.convertFileSrc(n);return await fetch(r).then(e=>{if(!e.ok)throw Error(`staged_file_unavailable`);return e.blob()})},yn=async e=>{let t=await vn(e);return await new Promise((e,n)=>{let r=new FileReader;r.onerror=()=>n(Error(`staged_file_unavailable`)),r.onload=()=>typeof r.result==`string`?e(r.result):n(Error(`staged_file_unavailable`)),r.readAsDataURL(t)})},bn=async e=>{let t=[];if(e.text?.trim()&&t.push({type:`text`,text:e.text}),e.attachments.length>10)throw Error(`too_many_share_attachments`);for(let n of e.attachments){if(n.byteSize<=0||n.byteSize>20971520)throw Error(`invalid_share_attachment`);t.push({type:`file`,mime:n.mime,url:await yn(n)})}if(t.length===0)throw Error(`empty_share`);return t},Q=async()=>{if(!tn())return;let e=a(),t=(await rt()).find(t=>Ne(t)===e);if(!t)return;let n=u();try{let[r,i]=await Promise.all([w(),le()]);if(!Z(e,n)||!r.supported||!r.serverInstanceID)return;let a=r.serverInstanceID,o=i.assistants.map(n=>({serverInstanceID:a,assistantID:n.id,name:n.name,avatarSeed:n.id,serverLabel:t.label,connectionKey:e,enabled:r.enabled&&n.enabled,isDefaultShareTarget:!1}));T.getState().replaceCatalogPartition({serverInstanceID:a,connectionKey:e,revision:i.revision,lastLoadedAt:Date.now(),entries:o}),await xn()}catch{}},xn=async()=>{if(!tn())return;let e=Object.values(T.getState().assistantCatalogByConnection).flatMap(e=>e.entries).map(e=>{let t=Zt(e.name);return{...e,name:t.displayName||e.name,...t.avatarEmoji?{avatarEmoji:t.avatarEmoji}:{}}});await Y.updateCatalog({entries:e})},Sn=async e=>{b.getPlatform()===`ios`&&await Y.donateAssistantInteraction(e)},Cn=e=>{let t=an.get(e.operationID);if(t)return t;let n=Tn(e);return an.set(e.operationID,n),n.finally(()=>{an.get(e.operationID)===n&&an.delete(e.operationID)}).catch(()=>void 0),n},wn=async e=>{e.cleanupPhase!==`files-released`&&(e.cleanupPhase===`server-completed`&&(await Ct(()=>Y.ack({operationID:e.envelope.operationID})),e={...e,state:`delivered`,cleanupPhase:`native-acked`,updatedAt:Date.now()},X(e)),e.cleanupPhase===`native-acked`&&(await Ct(()=>Y.releaseFiles({operationID:e.envelope.operationID})),X({...e,state:`delivered`,cleanupPhase:`files-released`,updatedAt:Date.now()})))},Tn=async e=>{let t=nn()[e.operationID];if(t?.cleanupPhase){await wn(t);return}let n=t?.messageID?t:{envelope:e,messageID:h(`msg`),state:t?.state??`pending`,cleanupPhase:t?.cleanupPhase,updatedAt:Date.now(),error:t?.error};X(n),n={...n,state:`resolving-instance`,updatedAt:Date.now()},X(n);let r=Object.values(T.getState().assistantCatalogByConnection).find(t=>t.serverInstanceID===e.serverInstanceID&&t.entries.some(t=>t.assistantID===e.assistantID));if(!r){X({...n,state:`target-stale`,updatedAt:Date.now()});return}n={...n,state:`connecting`,updatedAt:Date.now()},X(n);let a=await lt(r.connectionKey);if(a===`auth-required`){X({...n,state:`auth-required`,updatedAt:Date.now()});return}if(a!==`connected`){X({...n,state:`offline`,updatedAt:Date.now()});return}let o=u(),s=null;if(Z(r.connectionKey,o)){try{if(await m(`/api/config/settings`).catch(()=>void 0),!Z(r.connectionKey,o))return;let[t,a]=await Promise.all([w(),le()]);if(!Z(r.connectionKey,o)||!t.supported||t.serverInstanceID!==e.serverInstanceID){X({...n,state:`target-stale`,updatedAt:Date.now()});return}let c=a.assistants.find(t=>t.id===e.assistantID&&t.enabled);if(!t.enabled||!c){X({...n,state:`target-stale`,updatedAt:Date.now()});return}n={...n,state:`dispatching`,updatedAt:Date.now()},X(n);let l=await bn(e);if(!Z(r.connectionKey,o))return;n={...n,state:`reconciling`,updatedAt:Date.now()},X(n);let u=await ce(c.id,e.operationID,n.messageID,l,e.source),d=await se(u,i(),o),f=await de().catch(e=>(X({...n,state:`reconciling`,updatedAt:Date.now(),error:e instanceof Error?e.message:`snapshot_refresh_failed`}),null));if(!f)return;if(!Z(r.connectionKey,o)){X({...n,state:`reconciling`,updatedAt:Date.now(),error:`runtime_stale`});return}let p=f.assistants.find(e=>e.id===c.id);if(!p||p.sessionID!==d.sessionID){X({...n,state:`reconciling`,updatedAt:Date.now(),error:`assistant_binding_mismatch`});return}s=p.id}catch(e){if(e instanceof oe&&e.code===`share_unresolved`||e instanceof Error&&e.message===`runtime_stale`){X({...n,state:`reconciling`,updatedAt:Date.now(),error:e instanceof Error?e.message:`share_unresolved`});return}X({...n,state:`failed`,updatedAt:Date.now(),error:e instanceof Error?e.message:`dispatch_failed`});return}n={...n,state:`delivered`,cleanupPhase:`server-completed`,updatedAt:Date.now()},X(n),qt(s),await wn(n)}},En=async()=>on||(on=Dn().finally(()=>{on=null}),on),Dn=async()=>{if(!tn())return;let e=await Y.listPending().catch(()=>null),t=new Map((e?.envelopes??[]).map(e=>[e.operationID,e])),n=nn();await wt([...[...t.values()].map(e=>({operationID:e.operationID,cleanupPhase:n[e.operationID]?.cleanupPhase})),...Object.values(n).filter(e=>!t.has(e.envelope.operationID)&&(!!(e.cleanupPhase&&e.cleanupPhase!==`files-released`)||e.state!==`delivered`&&e.state!==`auth-required`&&e.state!==`target-stale`)).map(e=>({operationID:e.envelope.operationID,cleanupPhase:e.cleanupPhase}))],{deliver:async e=>{let r=t.get(e)??n[e]?.envelope;r&&await Cn(r)},cleanup:async e=>{let t=nn()[e];t&&await wn(t)}},pn)},$=async()=>(cn=!0,sn||(sn=(async()=>{do cn=!1,await Mn();while(cn)})().finally(()=>{sn=null,cn&&$()}),sn)),On=async e=>{if(a()!==e.connectionKey&&await lt(e.connectionKey)!==`connected`)return!1;let t=u();if(!Z(e.connectionKey,t)||i()!==e.transportIdentity||(await m(`/api/config/settings`).catch(()=>void 0),!Z(e.connectionKey,t)||i()!==e.transportIdentity)||!await C.getState().hydrateDraftMetadata(e.transportIdentity)||!Z(e.connectionKey,t)||i()!==e.transportIdentity)return!1;let[n,r]=await Promise.all([w(),de()]);return!Z(e.connectionKey,t)||i()!==e.transportIdentity||!n.supported||!n.enabled||n.serverInstanceID!==e.serverInstanceID||!r.assistants.some(t=>t.id===e.assistantID&&t.enabled)?!1:(qt(e.assistantID),!0)},kn=async e=>{let t=a(),n=u();if(await m(`/api/config/settings`).catch(()=>void 0),!Z(t,n))return null;try{let[r,a]=await Promise.all([w(),de()]);return!Z(t,n)||!r.supported||!r.enabled||r.serverInstanceID!==e.serverInstanceID||!a.assistants.some(t=>t.id===e.assistantID&&t.enabled)?null:{runtimeKey:t,generation:n,transportIdentity:i()}}catch{return null}},An=async e=>{let t=Object.values(T.getState().assistantCatalogByConnection).find(t=>t.serverInstanceID===e.serverInstanceID&&t.connectionKey===e.connectionKey&&t.entries.some(t=>t.assistantID===e.assistantID));if(!t)return!1;let n=await kn(e);if(!n&&(await lt(t.connectionKey,{transportPreference:`relay`})!==`connected`||(n=await kn(e),!n)))return!1;let{runtimeKey:r,generation:a,transportIdentity:o}=n;if(!await C.getState().hydrateDraftMetadata(o)||!Z(r,a)||i()!==o)return!1;let s=await Wt(e,{input:C.getState(),transportIdentity:o,cancelDraft:e=>Y.cancelDraft({draftID:e}),readAttachment:vn});if(!s.durable||!s.cancelled||!Z(r,a)||i()!==o)return!1;let c={draftID:e.draftID,serverInstanceID:e.serverInstanceID,connectionKey:e.connectionKey,assistantID:e.assistantID,transportIdentity:o};return qt(e.assistantID),await Ut(c,C.getState())&&Ht(c),!0},jn=e=>{let t=fn.get(e.draftID);if(t)return t;let n=An(e).catch(()=>!1).finally(()=>{fn.get(e.draftID)===n&&fn.delete(e.draftID)});return fn.set(e.draftID,n),n},Mn=async()=>{if(b.getPlatform()!==`android`)return;let e=await Vt(e=>Y.cancelDraft({draftID:e}));for(let t of e)try{await On(t)&&await Ut(t,C.getState())&&Ht(t)}catch{}let t=await Y.listDrafts().catch(()=>null);if(!t)return;let n=[...t?.drafts??[]].sort((e,t)=>e.createdAt-t.createdAt);mn(n.filter(e=>!Tt(e)));for(let e of n)Tt(e)&&await jn(e)},Nn=()=>{let e=(0,_e.c)(11);E.useSyncExternalStore(gn,_n,_n);let t=T(Pn),[n,r]=E.useState(null),i=E.useRef(null),a;e[0]===t?a=e[1]:(a=Object.values(t).flatMap(Fn).filter(In).sort(Ln),e[0]=t,e[1]=a);let o=a,s=ln[0]??null,c;e[2]===Symbol.for(`react.memo_cache_sentinel`)?(c=(e,t)=>{i.current||(i.current=e.draftID,r(e.draftID),jn({...e,serverInstanceID:t.serverInstanceID,assistantID:t.assistantID,name:t.name,avatarSeed:t.avatarSeed,serverLabel:t.serverLabel,connectionKey:t.connectionKey}).then(t=>{t&&hn(e.draftID)}).finally(()=>{i.current===e.draftID&&(i.current=null),r(t=>t===e.draftID?null:t)}))},e[2]=c):c=e[2];let l=x(c),u;e[3]===n?u=e[4]:(u=e=>{n!==e.draftID&&(hn(e.draftID),Y.cancelDraft({draftID:e.draftID}).catch(Rn))},e[3]=n,e[4]=u);let d=x(u),f;e[5]===Symbol.for(`react.memo_cache_sentinel`)?(f=[],e[5]=f):f=e[5],E.useEffect(qn,f);let p=n===s?.draftID,m;return e[6]!==d||e[7]!==o||e[8]!==l||e[9]!==p?(m=(0,J.jsx)(Qt,{draft:s,entries:o,busy:p,onSelect:l,onCancel:d}),e[6]=d,e[7]=o,e[8]=l,e[9]=p,e[10]=m):m=e[10],m};function Pn(e){return e.assistantCatalogByConnection}function Fn(e){return e.entries}function In(e){return e.enabled}function Ln(e,t){return Number(t.isDefaultShareTarget)-Number(e.isDefaultShareTarget)||e.serverLabel.localeCompare(t.serverLabel)||e.name.localeCompare(t.name)}function Rn(){$()}function zn(){Q(),$(),q()}function Bn(){Q(),En(),$(),q()}function Vn(){En()}function Hn(){}function Un(){$()}function Wn(){}function Gn(){q()}function Kn(){}function qn(){if(!tn())return;Q(),En(),$(),q();let e=n(zn),t=Bn;window.addEventListener(`openchamber:system-resume`,t);let r=!1,i=null,a=null,o=null;return Y.addListener(`shareReceived`,Vn).then(e=>{r?e.remove():i=e}).catch(Hn),Y.addListener(`shareDraftReceived`,Un).then(e=>{r?e.remove():a=e}).catch(Wn),Y.addListener(`assistantOpenRequested`,Gn).then(e=>{r?e.remove():o=e}).catch(Kn),()=>{r=!0,e(),window.removeEventListener(`openchamber:system-resume`,t),i&&i.remove(),a&&a.remove(),o&&o.remove()}}export{Zt as a,ct as c,gt as d,_t as f,Q as i,j as l,Sn as n,q as o,St as p,xn as r,jt as s,Nn as t,st as u};
|