@rubytech/create-maxy 1.0.880 → 1.0.881
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/package.json +1 -1
- package/payload/platform/plugins/admin/PLUGIN.md +1 -0
- package/payload/platform/plugins/admin/skills/plainly/SKILL.md +105 -0
- package/payload/platform/plugins/admin/skills/plainly/references/worked-examples.md +301 -0
- package/payload/platform/plugins/cloudflare/PLUGIN.md +1 -1
- package/payload/platform/plugins/docs/references/platform.md +5 -1
- package/payload/platform/plugins/docs/references/plugins-guide.md +1 -1
- package/payload/platform/templates/agents/admin/IDENTITY.md +5 -1
- package/payload/platform/templates/agents/public/IDENTITY.md +6 -0
- package/payload/platform/templates/specialists/agents/content-producer.md +6 -0
- package/payload/platform/templates/specialists/agents/database-operator.md +6 -0
- package/payload/platform/templates/specialists/agents/personal-assistant.md +6 -0
- package/payload/platform/templates/specialists/agents/project-manager.md +6 -0
- package/payload/platform/templates/specialists/agents/research-assistant.md +6 -0
- package/payload/server/chunk-KMVUUVHM.js +11438 -0
- package/payload/server/chunk-LVC7NKZ2.js +689 -0
- package/payload/server/cloudflare-task-tracker-CY6QL6CY.js +22 -0
- package/payload/server/maxy-edge.js +2 -1
- package/payload/server/public/assets/{admin-CCEuBnaK.js → admin-BN_z-2Bm.js} +2 -2
- package/payload/server/public/index.html +1 -1
- package/payload/server/server.js +80 -5
|
@@ -340,7 +340,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`<p>An error
|
|
|
340
340
|
border: 1px solid rgba(0,0,0,0.1); }
|
|
341
341
|
td { padding: 6px 10px; border: 1px solid rgba(0,0,0,0.1); }
|
|
342
342
|
`;function jT({data:e,onSubmit:t,submitted:n,isStreaming:r}){let{title:a,columns:o,rows:s,filePath:c,brandName:l,brandLogo:u}=e??{},d=a??`Grid`,[f,p]=(0,H.useState)(o??[`Column 1`]),[m,h]=(0,H.useState)(()=>{let e=s??[[``]];return e.length>0?e:[[``]]}),[g,_]=(0,H.useState)(null),[v,y]=(0,H.useState)(``),b=(0,H.useRef)(null),[x,S]=(0,H.useState)(()=>(o??[`Column 1`]).map(()=>DT)),C=(0,H.useRef)(null),[w,T]=(0,H.useState)(`idle`),D=(0,H.useRef)(null),O=(0,H.useRef)(null),k=(0,H.useRef)(JSON.stringify({columns:o,rows:s}));(0,H.useEffect)(()=>{let e=JSON.stringify({columns:o,rows:s});e!==k.current&&(k.current=e,o&&p(o),s&&(h(s.length>0?s:[[``]]),S(e=>{let t=o?.length??e.length;return t>e.length?[...e,...Array(t-e.length).fill(DT)]:e.slice(0,t)})))},[o,s]);let A=(0,H.useCallback)(()=>{D.current&&clearTimeout(D.current),D.current=setTimeout(()=>{T(`saving`),t(JSON.stringify({action:`save`,columns:f,rows:m,...c?{filePath:c}:{}})),O.current&&clearTimeout(O.current),T(`saved`),O.current=setTimeout(()=>T(`idle`),2e3)},500)},[f,m,c,t]);(0,H.useEffect)(()=>()=>{D.current&&clearTimeout(D.current),O.current&&clearTimeout(O.current)},[]);let j=rT({title:d,isStreaming:r,channelName:`maxy-grid-editor`,renderPopout:(0,H.useCallback)((e,t)=>{let n=e.document;n.open(),n.close(),n.title=t;let r=n.createElement(`style`);r.textContent=AT,n.head.appendChild(r);let i=n.createElement(`div`);i.className=`title`,i.textContent=t,n.body.appendChild(i);let a=n.createElement(`table`),o=n.createElement(`thead`),s=n.createElement(`tr`);for(let e of f){let t=n.createElement(`th`);t.textContent=e,s.appendChild(t)}o.appendChild(s),a.appendChild(o);let c=n.createElement(`tbody`);for(let e of m){let t=n.createElement(`tr`);for(let r of e){let e=n.createElement(`td`);e.textContent=r,t.appendChild(e)}c.appendChild(t)}a.appendChild(c),n.body.appendChild(a)},[f,m])}),M=iT({onSubmit:t}),N=(0,H.useCallback)((e,t)=>{_({row:e,col:t}),y(m[e]?.[t]??``),setTimeout(()=>b.current?.focus(),0)},[m]),P=(0,H.useCallback)(()=>{if(!g)return;let{row:e,col:t}=g;h(n=>{let r=n.map(e=>[...e]);return r[e]&&(r[e][t]=v),r}),_(null),A()},[g,v,A]),ee=(0,H.useCallback)(()=>{_(null)},[]),te=(0,H.useCallback)(e=>{if(g)if(e.key===`Tab`){e.preventDefault(),P();let{row:t,col:n}=g,r=n+1;if(r<f.length)N(t,r);else{let e=t+1;e>=m.length&&h(e=>[...e,Array(f.length).fill(``)]),N(Math.min(e,m.length),0)}}else if(e.key===`Enter`){e.preventDefault(),P();let{row:t,col:n}=g,r=t+1;r>=m.length&&h(e=>[...e,Array(f.length).fill(``)]),N(Math.min(r,m.length),n)}else e.key===`Escape`&&ee()},[g,f.length,m.length,P,N,ee]),F=(0,H.useCallback)(()=>{h(e=>[...e,Array(f.length).fill(``)]),A()},[f.length,A]),I=(0,H.useCallback)(e=>{h(t=>t.length<=1?[Array(f.length).fill(``)]:t.filter((t,n)=>n!==e)),g?.row===e&&_(null),A()},[f.length,g,A]),ne=(0,H.useCallback)(e=>{let t=e.clipboardData.getData(`text/plain`);if(!t||!g)return;let n=t.split(`
|
|
343
|
-
`).filter(e=>e.trim());if(n.length<=1&&!n[0]?.includes(` `)&&!n[0]?.includes(`,`))return;e.preventDefault();let r=n.slice(0,TT).map(OT);n.length>TT&&console.warn(`Grid editor: paste truncated from ${n.length} to ${TT} rows`);let{row:i,col:a}=g;h(e=>{let t=e.map(e=>[...e]);for(let e=0;e<r.length;e++){let n=i+e;for(;n>=t.length;)t.push(Array(f.length).fill(``));for(let i=0;i<r[e].length;i++){let o=a+i;o<f.length&&(t[n][o]=r[e][i])}}return t}),A()},[g,f.length,A]),re=(0,H.useCallback)(()=>{let e=kT(f,m),t=new Blob([e],{type:`text/csv;charset=utf-8;`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`${d.replace(/[^a-zA-Z0-9]/g,`_`)}.csv`,r.click(),URL.revokeObjectURL(n)},[f,m,d]),L=(0,H.useCallback)(()=>{pT({title:d,content:mT(f,m),brandName:l,brandLogo:u})},[d,f,m,l,u]),ie=(0,H.useCallback)((e,t)=>{t.preventDefault(),C.current={colIndex:e,startX:t.clientX,startWidth:x[e]};let n=null,r=e=>{C.current&&(n&&cancelAnimationFrame(n),n=requestAnimationFrame(()=>{if(!C.current)return;let t=e.clientX-C.current.startX,n=Math.max(ET,C.current.startWidth+t);S(e=>{let t=[...e];return t[C.current.colIndex]=n,t})}))},i=()=>{C.current=null,n&&cancelAnimationFrame(n),window.removeEventListener(`mousemove`,r),window.removeEventListener(`mouseup`,i)};window.addEventListener(`mousemove`,r),window.addEventListener(`mouseup`,i)},[x]),R=(0,H.useCallback)(()=>{g&&M.openCommentInput()},[g,M]),ae=(0,H.useCallback)(()=>{if(!g)return;let e=m[g.row]?.[g.col]??``;M.submitComment(e,{row:g.row,column:g.col})},[g,m,M]);if(n)return(0,U.jsxs)(`div`,{className:`editor-base grid-editor grid-editor--submitted`,children:[(0,U.jsxs)(`div`,{className:`editor-base__bar`,children:[(0,U.jsx)(`span`,{className:`editor-base__title`,children:d}),(0,U.jsx)(`div`,{className:`editor-base__actions`,children:(0,U.jsx)(`span`,{className:`editor-base__status`,children:`Submitted`})})]}),(0,U.jsx)(`div`,{className:`grid-editor__body`,children:(0,U.jsx)(`div`,{className:`grid-editor__table-wrap`,children:(0,U.jsxs)(`table`,{className:`grid-editor__table`,role:`grid`,"aria-label":d,children:[(0,U.jsx)(`thead`,{children:(0,U.jsx)(`tr`,{children:f.map((e,t)=>(0,U.jsx)(`th`,{className:`grid-editor__col-header`,style:{width:x[t]},children:e},t))})}),(0,U.jsx)(`tbody`,{children:m.map((e,t)=>(0,U.jsx)(`tr`,{children:e.map((e,t)=>(0,U.jsx)(`td`,{className:`grid-editor__cell`,role:`gridcell`,style:{width:x[t]},children:(0,U.jsx)(`span`,{className:`grid-editor__cell-text`,children:e})},t))},t))})]})})})]});let se=typeof window<`u`&&window.innerWidth<640,ce=typeof BroadcastChannel<`u`,ue=(0,U.jsxs)(`div`,{className:`editor-base__actions`,children:[w===`saving`&&(0,U.jsx)(`span`,{className:`editor-base__status`,children:`Saving...`}),w===`saved`&&(0,U.jsx)(`span`,{className:`editor-base__status`,children:`Saved`}),M.pendingComments.length>0&&(0,U.jsxs)(E,{variant:`ghost`,size:`sm`,onClick:M.sendComments,children:[`Send `,M.pendingComments.length,` comment`,M.pendingComments.length>1?`s`:``]}),g&&(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:at,onClick:R,"aria-label":`Comment on cell`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:de,onClick:re,"aria-label":`Download CSV`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:He,onClick:L,"aria-label":`Export PDF`}),!se&&ce&&!j.poppedOut&&(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:Be,onClick:j.handlePopout,"aria-label":`Pop out`}),!j.fullscreen&&(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:rt,onClick:j.handleFullscreen,"aria-label":`Full screen`}),j.fullscreen&&(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:ct,onClick:j.exitFullscreen,"aria-label":`Exit full screen`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:z,onClick:j.handleMinimise,"aria-label":`Minimise`})]}),fe=(0,U.jsxs)(`div`,{className:`grid-editor__table-wrap`,onPaste:ne,children:[M.showCommentInput?(0,U.jsxs)(`div`,{className:`grid-editor__comment-popover`,children:[(0,U.jsx)(`input`,{ref:M.commentInputRef,type:`text`,value:M.commentText,onChange:e=>M.setCommentText(e.target.value),onKeyDown:e=>{e.key===`Enter`&&ae(),e.key===`Escape`&&M.cancelComment()},placeholder:`Add a comment...`,className:`doc-editor__comment-input`,"aria-label":`Add comment on cell`}),(0,U.jsxs)(`div`,{className:`doc-editor__comment-actions`,children:[(0,U.jsx)(E,{variant:`primary`,size:`sm`,onClick:ae,disabled:!M.commentText.trim(),children:`Add`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:oe,onClick:M.cancelComment,"aria-label":`Cancel`})]})]}):null,(0,U.jsxs)(`table`,{className:`grid-editor__table`,role:`grid`,"aria-label":d,children:[(0,U.jsx)(`thead`,{children:(0,U.jsxs)(`tr`,{children:[(0,U.jsx)(`th`,{className:`grid-editor__row-header`}),f.map((e,t)=>(0,U.jsxs)(`th`,{className:`grid-editor__col-header`,style:{width:x[t]},children:[e,(0,U.jsx)(`div`,{className:`grid-editor__resize-handle`,onMouseDown:e=>ie(t,e),role:`separator`,"aria-orientation":`vertical`})]},t))]})}),(0,U.jsx)(`tbody`,{children:m.map((e,t)=>(0,U.jsxs)(`tr`,{children:[(0,U.jsxs)(`td`,{className:`grid-editor__row-header`,children:[(0,U.jsx)(`span`,{className:`grid-editor__row-num`,children:t+1}),m.length>1&&(0,U.jsx)(`button`,{className:`grid-editor__row-delete`,onClick:()=>I(t),"aria-label":`Delete row ${t+1}`,children:(0,U.jsx)(i,{size:12})})]}),e.map((e,n)=>{let r=g?.row===t&&g?.col===n;return(0,U.jsx)(`td`,{className:`grid-editor__cell ${r?`grid-editor__cell--active`:``}`,onClick:()=>!r&&N(t,n),role:`gridcell`,"aria-selected":r,style:{width:x[n]},children:r?(0,U.jsx)(`input`,{ref:b,type:`text`,className:`grid-editor__cell-input`,value:v,onChange:e=>y(e.target.value),onKeyDown:te,onBlur:P,"aria-label":`${f[n]} row ${t+1}`}):(0,U.jsx)(`span`,{className:`grid-editor__cell-text`,children:e})},n)})]},t))})]}),(0,U.jsxs)(`button`,{className:`grid-editor__add-row`,onClick:F,"aria-label":`Add row`,children:[(0,U.jsx)(je,{size:14}),(0,U.jsx)(`span`,{children:`Add row`})]})]});return j.fullscreen?(0,U.jsxs)(`div`,{className:`editor-base-fullscreen`,children:[(0,U.jsxs)(`div`,{className:`editor-base-fullscreen__bar`,...j.dragBarProps,children:[(0,U.jsx)(`span`,{className:`editor-base-fullscreen__title`,children:d}),ue]}),(0,U.jsx)(`div`,{className:`editor-base-fullscreen__body`,style:{maxWidth:`none`},children:fe})]}):j.poppedOut?(0,U.jsx)(`div`,{className:`editor-base editor-base--popout`,children:(0,U.jsxs)(`div`,{className:`editor-base__bar`,...j.dragBarProps,children:[(0,U.jsx)(`span`,{className:`editor-base__title`,children:d}),(0,U.jsxs)(`div`,{className:`editor-base__actions`,children:[(0,U.jsx)(`span`,{className:`editor-base__status`,children:`Popped out`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:ht,onClick:j.handlePopIn,"aria-label":`Pop back in`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:z,onClick:j.handleMinimise,"aria-label":`Close`})]})]})}):j.minimised?(0,U.jsx)(`div`,{className:`editor-base editor-base--minimised`,onClick:j.handleExpand,role:`button`,tabIndex:0,onKeyDown:e=>e.key===`Enter`&&j.handleExpand(),children:(0,U.jsxs)(`div`,{className:`editor-base__bar`,...j.dragBarProps,children:[(0,U.jsx)(`span`,{className:`editor-base__title`,children:d}),(0,U.jsxs)(`div`,{className:`editor-base__actions`,onClick:e=>e.stopPropagation(),children:[!se&&ce&&(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:Be,onClick:j.handlePopout,"aria-label":`Pop out`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:rt,onClick:j.handleFullscreen,"aria-label":`Full screen`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:le,onClick:j.handleExpand,"aria-label":`Expand`})]})]})}):(0,U.jsxs)(`div`,{className:`editor-base grid-editor`,children:[(0,U.jsxs)(`div`,{className:`editor-base__bar`,...j.dragBarProps,children:[(0,U.jsx)(`span`,{className:`editor-base__title`,children:d}),ue]}),(0,U.jsx)(`div`,{className:`grid-editor__body`,children:fe})]})}var MT=Object.defineProperty,NT=Object.getOwnPropertySymbols,PT=Object.prototype.hasOwnProperty,FT=Object.prototype.propertyIsEnumerable,IT=(e,t,n)=>t in e?MT(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,LT=(e,t)=>{for(var n in t||={})PT.call(t,n)&&IT(e,n,t[n]);if(NT)for(var n of NT(t))FT.call(t,n)&&IT(e,n,t[n]);return e},RT=(e,t)=>{var n={};for(var r in e)PT.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&NT)for(var r of NT(e))t.indexOf(r)<0&&FT.call(e,r)&&(n[r]=e[r]);return n},zT;(e=>{let t=class t{constructor(e,n,r,a){if(this.version=e,this.errorCorrectionLevel=n,this.modules=[],this.isFunction=[],e<t.MIN_VERSION||e>t.MAX_VERSION)throw RangeError(`Version value out of range`);if(a<-1||a>7)throw RangeError(`Mask value out of range`);this.size=e*4+17;let o=[];for(let e=0;e<this.size;e++)o.push(!1);for(let e=0;e<this.size;e++)this.modules.push(o.slice()),this.isFunction.push(o.slice());this.drawFunctionPatterns();let s=this.addEccAndInterleave(r);if(this.drawCodewords(s),a==-1){let e=1e9;for(let t=0;t<8;t++){this.applyMask(t),this.drawFormatBits(t);let n=this.getPenaltyScore();n<e&&(a=t,e=n),this.applyMask(t)}}i(0<=a&&a<=7),this.mask=a,this.applyMask(a),this.drawFormatBits(a),this.isFunction=[]}static encodeText(n,r){let i=e.QrSegment.makeSegments(n);return t.encodeSegments(i,r)}static encodeBinary(n,r){let i=e.QrSegment.makeBytes(n);return t.encodeSegments([i],r)}static encodeSegments(e,r,a=1,s=40,c=-1,l=!0){if(!(t.MIN_VERSION<=a&&a<=s&&s<=t.MAX_VERSION)||c<-1||c>7)throw RangeError(`Invalid value`);let u,d;for(u=a;;u++){let n=t.getNumDataCodewords(u,r)*8,i=o.getTotalBits(e,u);if(i<=n){d=i;break}if(u>=s)throw RangeError(`Data too long`)}for(let e of[t.Ecc.MEDIUM,t.Ecc.QUARTILE,t.Ecc.HIGH])l&&d<=t.getNumDataCodewords(u,e)*8&&(r=e);let f=[];for(let t of e){n(t.mode.modeBits,4,f),n(t.numChars,t.mode.numCharCountBits(u),f);for(let e of t.getData())f.push(e)}i(f.length==d);let p=t.getNumDataCodewords(u,r)*8;i(f.length<=p),n(0,Math.min(4,p-f.length),f),n(0,(8-f.length%8)%8,f),i(f.length%8==0);for(let e=236;f.length<p;e^=253)n(e,8,f);let m=[];for(;m.length*8<f.length;)m.push(0);return f.forEach((e,t)=>m[t>>>3]|=e<<7-(t&7)),new t(u,r,m,c)}getModule(e,t){return 0<=e&&e<this.size&&0<=t&&t<this.size&&this.modules[t][e]}getModules(){return this.modules}drawFunctionPatterns(){for(let e=0;e<this.size;e++)this.setFunctionModule(6,e,e%2==0),this.setFunctionModule(e,6,e%2==0);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);let e=this.getAlignmentPatternPositions(),t=e.length;for(let n=0;n<t;n++)for(let r=0;r<t;r++)n==0&&r==0||n==0&&r==t-1||n==t-1&&r==0||this.drawAlignmentPattern(e[n],e[r]);this.drawFormatBits(0),this.drawVersion()}drawFormatBits(e){let t=this.errorCorrectionLevel.formatBits<<3|e,n=t;for(let e=0;e<10;e++)n=n<<1^(n>>>9)*1335;let a=(t<<10|n)^21522;i(a>>>15==0);for(let e=0;e<=5;e++)this.setFunctionModule(8,e,r(a,e));this.setFunctionModule(8,7,r(a,6)),this.setFunctionModule(8,8,r(a,7)),this.setFunctionModule(7,8,r(a,8));for(let e=9;e<15;e++)this.setFunctionModule(14-e,8,r(a,e));for(let e=0;e<8;e++)this.setFunctionModule(this.size-1-e,8,r(a,e));for(let e=8;e<15;e++)this.setFunctionModule(8,this.size-15+e,r(a,e));this.setFunctionModule(8,this.size-8,!0)}drawVersion(){if(this.version<7)return;let e=this.version;for(let t=0;t<12;t++)e=e<<1^(e>>>11)*7973;let t=this.version<<12|e;i(t>>>18==0);for(let e=0;e<18;e++){let n=r(t,e),i=this.size-11+e%3,a=Math.floor(e/3);this.setFunctionModule(i,a,n),this.setFunctionModule(a,i,n)}}drawFinderPattern(e,t){for(let n=-4;n<=4;n++)for(let r=-4;r<=4;r++){let i=Math.max(Math.abs(r),Math.abs(n)),a=e+r,o=t+n;0<=a&&a<this.size&&0<=o&&o<this.size&&this.setFunctionModule(a,o,i!=2&&i!=4)}}drawAlignmentPattern(e,t){for(let n=-2;n<=2;n++)for(let r=-2;r<=2;r++)this.setFunctionModule(e+r,t+n,Math.max(Math.abs(r),Math.abs(n))!=1)}setFunctionModule(e,t,n){this.modules[t][e]=n,this.isFunction[t][e]=!0}addEccAndInterleave(e){let n=this.version,r=this.errorCorrectionLevel;if(e.length!=t.getNumDataCodewords(n,r))throw RangeError(`Invalid argument`);let a=t.NUM_ERROR_CORRECTION_BLOCKS[r.ordinal][n],o=t.ECC_CODEWORDS_PER_BLOCK[r.ordinal][n],s=Math.floor(t.getNumRawDataModules(n)/8),c=a-s%a,l=Math.floor(s/a),u=[],d=t.reedSolomonComputeDivisor(o);for(let n=0,r=0;n<a;n++){let i=e.slice(r,r+l-o+(n<c?0:1));r+=i.length;let a=t.reedSolomonComputeRemainder(i,d);n<c&&i.push(0),u.push(i.concat(a))}let f=[];for(let e=0;e<u[0].length;e++)u.forEach((t,n)=>{(e!=l-o||n>=c)&&f.push(t[e])});return i(f.length==s),f}drawCodewords(e){if(e.length!=Math.floor(t.getNumRawDataModules(this.version)/8))throw RangeError(`Invalid argument`);let n=0;for(let t=this.size-1;t>=1;t-=2){t==6&&(t=5);for(let i=0;i<this.size;i++)for(let a=0;a<2;a++){let o=t-a,s=t+1&2?i:this.size-1-i;!this.isFunction[s][o]&&n<e.length*8&&(this.modules[s][o]=r(e[n>>>3],7-(n&7)),n++)}}i(n==e.length*8)}applyMask(e){if(e<0||e>7)throw RangeError(`Mask value out of range`);for(let t=0;t<this.size;t++)for(let n=0;n<this.size;n++){let r;switch(e){case 0:r=(n+t)%2==0;break;case 1:r=t%2==0;break;case 2:r=n%3==0;break;case 3:r=(n+t)%3==0;break;case 4:r=(Math.floor(n/3)+Math.floor(t/2))%2==0;break;case 5:r=n*t%2+n*t%3==0;break;case 6:r=(n*t%2+n*t%3)%2==0;break;case 7:r=((n+t)%2+n*t%3)%2==0;break;default:throw Error(`Unreachable`)}!this.isFunction[t][n]&&r&&(this.modules[t][n]=!this.modules[t][n])}}getPenaltyScore(){let e=0;for(let n=0;n<this.size;n++){let r=!1,i=0,a=[0,0,0,0,0,0,0];for(let o=0;o<this.size;o++)this.modules[n][o]==r?(i++,i==5?e+=t.PENALTY_N1:i>5&&e++):(this.finderPenaltyAddHistory(i,a),r||(e+=this.finderPenaltyCountPatterns(a)*t.PENALTY_N3),r=this.modules[n][o],i=1);e+=this.finderPenaltyTerminateAndCount(r,i,a)*t.PENALTY_N3}for(let n=0;n<this.size;n++){let r=!1,i=0,a=[0,0,0,0,0,0,0];for(let o=0;o<this.size;o++)this.modules[o][n]==r?(i++,i==5?e+=t.PENALTY_N1:i>5&&e++):(this.finderPenaltyAddHistory(i,a),r||(e+=this.finderPenaltyCountPatterns(a)*t.PENALTY_N3),r=this.modules[o][n],i=1);e+=this.finderPenaltyTerminateAndCount(r,i,a)*t.PENALTY_N3}for(let n=0;n<this.size-1;n++)for(let r=0;r<this.size-1;r++){let i=this.modules[n][r];i==this.modules[n][r+1]&&i==this.modules[n+1][r]&&i==this.modules[n+1][r+1]&&(e+=t.PENALTY_N2)}let n=0;for(let e of this.modules)n=e.reduce((e,t)=>e+(t?1:0),n);let r=this.size*this.size,a=Math.ceil(Math.abs(n*20-r*10)/r)-1;return i(0<=a&&a<=9),e+=a*t.PENALTY_N4,i(0<=e&&e<=2568888),e}getAlignmentPatternPositions(){if(this.version==1)return[];{let e=Math.floor(this.version/7)+2,t=this.version==32?26:Math.ceil((this.version*4+4)/(e*2-2))*2,n=[6];for(let r=this.size-7;n.length<e;r-=t)n.splice(1,0,r);return n}}static getNumRawDataModules(e){if(e<t.MIN_VERSION||e>t.MAX_VERSION)throw RangeError(`Version number out of range`);let n=(16*e+128)*e+64;if(e>=2){let t=Math.floor(e/7)+2;n-=(25*t-10)*t-55,e>=7&&(n-=36)}return i(208<=n&&n<=29648),n}static getNumDataCodewords(e,n){return Math.floor(t.getNumRawDataModules(e)/8)-t.ECC_CODEWORDS_PER_BLOCK[n.ordinal][e]*t.NUM_ERROR_CORRECTION_BLOCKS[n.ordinal][e]}static reedSolomonComputeDivisor(e){if(e<1||e>255)throw RangeError(`Degree out of range`);let n=[];for(let t=0;t<e-1;t++)n.push(0);n.push(1);let r=1;for(let i=0;i<e;i++){for(let e=0;e<n.length;e++)n[e]=t.reedSolomonMultiply(n[e],r),e+1<n.length&&(n[e]^=n[e+1]);r=t.reedSolomonMultiply(r,2)}return n}static reedSolomonComputeRemainder(e,n){let r=n.map(e=>0);for(let i of e){let e=i^r.shift();r.push(0),n.forEach((n,i)=>r[i]^=t.reedSolomonMultiply(n,e))}return r}static reedSolomonMultiply(e,t){if(e>>>8||t>>>8)throw RangeError(`Byte out of range`);let n=0;for(let r=7;r>=0;r--)n=n<<1^(n>>>7)*285,n^=(t>>>r&1)*e;return i(n>>>8==0),n}finderPenaltyCountPatterns(e){let t=e[1];i(t<=this.size*3);let n=t>0&&e[2]==t&&e[3]==t*3&&e[4]==t&&e[5]==t;return(n&&e[0]>=t*4&&e[6]>=t?1:0)+(n&&e[6]>=t*4&&e[0]>=t?1:0)}finderPenaltyTerminateAndCount(e,t,n){return e&&(this.finderPenaltyAddHistory(t,n),t=0),t+=this.size,this.finderPenaltyAddHistory(t,n),this.finderPenaltyCountPatterns(n)}finderPenaltyAddHistory(e,t){t[0]==0&&(e+=this.size),t.pop(),t.unshift(e)}};t.MIN_VERSION=1,t.MAX_VERSION=40,t.PENALTY_N1=3,t.PENALTY_N2=3,t.PENALTY_N3=40,t.PENALTY_N4=10,t.ECC_CODEWORDS_PER_BLOCK=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],t.NUM_ERROR_CORRECTION_BLOCKS=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],e.QrCode=t;function n(e,t,n){if(t<0||t>31||e>>>t)throw RangeError(`Value out of range`);for(let r=t-1;r>=0;r--)n.push(e>>>r&1)}function r(e,t){return(e>>>t&1)!=0}function i(e){if(!e)throw Error(`Assertion error`)}let a=class e{constructor(e,t,n){if(this.mode=e,this.numChars=t,this.bitData=n,t<0)throw RangeError(`Invalid argument`);this.bitData=n.slice()}static makeBytes(t){let r=[];for(let e of t)n(e,8,r);return new e(e.Mode.BYTE,t.length,r)}static makeNumeric(t){if(!e.isNumeric(t))throw RangeError(`String contains non-numeric characters`);let r=[];for(let e=0;e<t.length;){let i=Math.min(t.length-e,3);n(parseInt(t.substring(e,e+i),10),i*3+1,r),e+=i}return new e(e.Mode.NUMERIC,t.length,r)}static makeAlphanumeric(t){if(!e.isAlphanumeric(t))throw RangeError(`String contains unencodable characters in alphanumeric mode`);let r=[],i;for(i=0;i+2<=t.length;i+=2){let a=e.ALPHANUMERIC_CHARSET.indexOf(t.charAt(i))*45;a+=e.ALPHANUMERIC_CHARSET.indexOf(t.charAt(i+1)),n(a,11,r)}return i<t.length&&n(e.ALPHANUMERIC_CHARSET.indexOf(t.charAt(i)),6,r),new e(e.Mode.ALPHANUMERIC,t.length,r)}static makeSegments(t){return t==``?[]:e.isNumeric(t)?[e.makeNumeric(t)]:e.isAlphanumeric(t)?[e.makeAlphanumeric(t)]:[e.makeBytes(e.toUtf8ByteArray(t))]}static makeEci(t){let r=[];if(t<0)throw RangeError(`ECI assignment value out of range`);if(t<128)n(t,8,r);else if(t<16384)n(2,2,r),n(t,14,r);else if(t<1e6)n(6,3,r),n(t,21,r);else throw RangeError(`ECI assignment value out of range`);return new e(e.Mode.ECI,0,r)}static isNumeric(t){return e.NUMERIC_REGEX.test(t)}static isAlphanumeric(t){return e.ALPHANUMERIC_REGEX.test(t)}getData(){return this.bitData.slice()}static getTotalBits(e,t){let n=0;for(let r of e){let e=r.mode.numCharCountBits(t);if(r.numChars>=1<<e)return 1/0;n+=4+e+r.bitData.length}return n}static toUtf8ByteArray(e){e=encodeURI(e);let t=[];for(let n=0;n<e.length;n++)e.charAt(n)==`%`?(t.push(parseInt(e.substring(n+1,n+3),16)),n+=2):t.push(e.charCodeAt(n));return t}};a.NUMERIC_REGEX=/^[0-9]*$/,a.ALPHANUMERIC_REGEX=/^[A-Z0-9 $%*+.\/:-]*$/,a.ALPHANUMERIC_CHARSET=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:`;let o=a;e.QrSegment=a})(zT||={}),(e=>{(e=>{let t=class{constructor(e,t){this.ordinal=e,this.formatBits=t}};t.LOW=new t(0,1),t.MEDIUM=new t(1,0),t.QUARTILE=new t(2,3),t.HIGH=new t(3,2),e.Ecc=t})(e.QrCode||={})})(zT||={}),(e=>{(e=>{let t=class{constructor(e,t){this.modeBits=e,this.numBitsCharCount=t}numCharCountBits(e){return this.numBitsCharCount[Math.floor((e+7)/17)]}};t.NUMERIC=new t(1,[10,12,14]),t.ALPHANUMERIC=new t(2,[9,11,13]),t.BYTE=new t(4,[8,16,16]),t.KANJI=new t(8,[8,10,12]),t.ECI=new t(7,[0,0,0]),e.Mode=t})(e.QrSegment||={})})(zT||={});var BT=zT,VT={L:BT.QrCode.Ecc.LOW,M:BT.QrCode.Ecc.MEDIUM,Q:BT.QrCode.Ecc.QUARTILE,H:BT.QrCode.Ecc.HIGH},HT=128,UT=`L`,WT=`#FFFFFF`,GT=`#000000`,KT=!1,qT=1,JT=4,YT=0,XT=.1;function ZT(e,t=0){let n=[];return e.forEach(function(e,r){let i=null;e.forEach(function(a,o){if(!a&&i!==null){n.push(`M${i+t} ${r+t}h${o-i}v1H${i+t}z`),i=null;return}if(o===e.length-1){if(!a)return;i===null?n.push(`M${o+t},${r+t} h1v1H${o+t}z`):n.push(`M${i+t},${r+t} h${o+1-i}v1H${i+t}z`);return}a&&i===null&&(i=o)})}),n.join(``)}function QT(e,t){return e.slice().map((e,n)=>n<t.y||n>=t.y+t.h?e:e.map((e,n)=>n<t.x||n>=t.x+t.w?e:!1))}function $T(e,t,n,r){if(r==null)return null;let i=e.length+n*2,a=Math.floor(t*XT),o=i/t,s=(r.width||a)*o,c=(r.height||a)*o,l=r.x==null?e.length/2-s/2:r.x*o,u=r.y==null?e.length/2-c/2:r.y*o,d=r.opacity==null?1:r.opacity,f=null;if(r.excavate){let e=Math.floor(l),t=Math.floor(u);f={x:e,y:t,w:Math.ceil(s+l-e),h:Math.ceil(c+u-t)}}let p=r.crossOrigin;return{x:l,y:u,h:c,w:s,excavation:f,opacity:d,crossOrigin:p}}function eE(e,t){return t==null?e?JT:YT:Math.max(Math.floor(t),0)}function tE({value:e,level:t,minVersion:n,includeMargin:r,marginSize:i,imageSettings:a,size:o,boostLevel:s}){let c=H.useMemo(()=>{let r=(Array.isArray(e)?e:[e]).reduce((e,t)=>(e.push(...BT.QrSegment.makeSegments(t)),e),[]);return BT.QrCode.encodeSegments(r,VT[t],n,void 0,void 0,s)},[e,t,n,s]),{cells:l,margin:u,numCells:d,calculatedImageSettings:f}=H.useMemo(()=>{let e=c.getModules(),t=eE(r,i);return{cells:e,margin:t,numCells:e.length+t*2,calculatedImageSettings:$T(e,o,t,a)}},[c,o,a,r,i]);return{qrcode:c,margin:u,cells:l,numCells:d,calculatedImageSettings:f}}var nE=function(){try{new Path2D().addPath(new Path2D)}catch{return!1}return!0}(),rE=H.forwardRef(function(e,t){let n=e,{value:r,size:i=HT,level:a=UT,bgColor:o=WT,fgColor:s=GT,includeMargin:c=KT,minVersion:l=qT,boostLevel:u,marginSize:d,imageSettings:f}=n,p=RT(n,[`value`,`size`,`level`,`bgColor`,`fgColor`,`includeMargin`,`minVersion`,`boostLevel`,`marginSize`,`imageSettings`]),{style:m}=p,h=RT(p,[`style`]),g=f?.src,_=H.useRef(null),v=H.useRef(null),y=H.useCallback(e=>{_.current=e,typeof t==`function`?t(e):t&&(t.current=e)},[t]),[b,x]=H.useState(!1),{margin:S,cells:C,numCells:w,calculatedImageSettings:T}=tE({value:r,level:a,minVersion:l,boostLevel:u,includeMargin:c,marginSize:d,imageSettings:f,size:i});H.useEffect(()=>{if(_.current!=null){let e=_.current,t=e.getContext(`2d`);if(!t)return;let n=C,r=v.current,a=T!=null&&r!==null&&r.complete&&r.naturalHeight!==0&&r.naturalWidth!==0;a&&T.excavation!=null&&(n=QT(C,T.excavation));let c=window.devicePixelRatio||1;e.height=e.width=i*c;let l=i/w*c;t.scale(l,l),t.fillStyle=o,t.fillRect(0,0,w,w),t.fillStyle=s,nE?t.fill(new Path2D(ZT(n,S))):C.forEach(function(e,n){e.forEach(function(e,r){e&&t.fillRect(r+S,n+S,1,1)})}),T&&(t.globalAlpha=T.opacity),a&&t.drawImage(r,T.x+S,T.y+S,T.w,T.h)}}),H.useEffect(()=>{x(!1)},[g]);let E=LT({height:i,width:i},m),D=null;return g!=null&&(D=H.createElement(`img`,{src:g,key:g,style:{display:`none`},onLoad:()=>{x(!0)},ref:v,crossOrigin:T?.crossOrigin})),H.createElement(H.Fragment,null,H.createElement(`canvas`,LT({style:E,height:i,width:i,ref:y,role:`img`},h)),D)});rE.displayName=`QRCodeCanvas`;var iE=H.forwardRef(function(e,t){let n=e,{value:r,size:i=HT,level:a=UT,bgColor:o=WT,fgColor:s=GT,includeMargin:c=KT,minVersion:l=qT,boostLevel:u,title:d,marginSize:f,imageSettings:p}=n,m=RT(n,[`value`,`size`,`level`,`bgColor`,`fgColor`,`includeMargin`,`minVersion`,`boostLevel`,`title`,`marginSize`,`imageSettings`]),{margin:h,cells:g,numCells:_,calculatedImageSettings:v}=tE({value:r,level:a,minVersion:l,boostLevel:u,includeMargin:c,marginSize:f,imageSettings:p,size:i}),y=g,b=null;p!=null&&v!=null&&(v.excavation!=null&&(y=QT(g,v.excavation)),b=H.createElement(`image`,{href:p.src,height:v.h,width:v.w,x:v.x+h,y:v.y+h,preserveAspectRatio:`none`,opacity:v.opacity,crossOrigin:v.crossOrigin}));let x=ZT(y,h);return H.createElement(`svg`,LT({height:i,width:i,viewBox:`0 0 ${_} ${_}`,ref:t,role:`img`},m),!!d&&H.createElement(`title`,null,d),H.createElement(`path`,{fill:o,d:`M0,0 h${_}v${_}H0z`,shapeRendering:`crispEdges`}),H.createElement(`path`,{fill:s,d:x,shapeRendering:`crispEdges`}),b)});iE.displayName=`QRCodeSVG`;function aE({data:e,onSubmit:t,submitted:n}){let r=e,i=(0,H.useRef)(!1),a=r?.value?.trim()??``;return(0,H.useEffect)(()=>{a&&!n&&!i.current&&(i.current=!0,t(``))},[a,n,t]),a?(0,U.jsxs)(`div`,{className:`qr-code`,children:[(0,U.jsx)(`div`,{className:`qr-code__canvas`,children:(0,U.jsx)(iE,{value:a,size:240,level:`M`,bgColor:`#ffffff`,fgColor:`#000000`})}),r?.label&&(0,U.jsx)(`div`,{className:`qr-code__label`,children:r.label})]}):(0,U.jsx)(`div`,{className:`qr-code qr-code--error`,children:`No QR data provided. Try again or ask the agent to generate a new QR code.`})}function oE(e){return e===0?`0 B`:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function sE(e){return e.startsWith(`image/`)?(0,U.jsx)(We,{size:18}):e===`application/pdf`?(0,U.jsx)(g,{size:18}):e===`text/calendar`?(0,U.jsx)(V,{size:18}):e.startsWith(`text/`)?(0,U.jsx)(v,{size:18}):e===`application/zip`||e===`application/x-zip-compressed`?(0,U.jsx)(Ve,{size:18}):(0,U.jsx)(fe,{size:18})}function cE({data:e,onSubmit:t,submitted:n,cacheKey:r}){let i=e,a=(0,H.useRef)(!1),o=!!(i?.attachmentId&&i?.filename);(0,H.useEffect)(()=>{o&&!n&&!a.current&&(a.current=!0,t(JSON.stringify({_lifecycle:!0,component:`file-attachment`,event:`rendered`,attachmentId:i.attachmentId,filename:i.filename})))},[o,n,t,i]);let s=(0,H.useCallback)(()=>{if(!i?.attachmentId||!r)return;let e=`/api/admin/attachment/${i.attachmentId}?session_key=${encodeURIComponent(r)}`,t=document.createElement(`a`);t.href=e,t.download=i.filename,t.click()},[i,r]);return o?(0,U.jsx)(j,{submitted:!1,submittedLabel:`Downloaded`,actions:[{label:`Download`,variant:`primary`,onClick:s,disabled:!r}],children:(0,U.jsxs)(`div`,{className:`file-attachment`,children:[(0,U.jsx)(`div`,{className:`file-attachment__icon`,children:sE(i.mimeType)}),(0,U.jsxs)(`div`,{className:`file-attachment__info`,children:[(0,U.jsx)(`div`,{className:`file-attachment__name`,title:i.filename,children:i.filename}),(0,U.jsxs)(`div`,{className:`file-attachment__meta`,children:[oE(i.sizeBytes),` · `,i.mimeType]})]}),(0,U.jsx)(`button`,{className:`file-attachment__download`,onClick:s,disabled:!r,title:`Download file`,children:(0,U.jsx)(de,{size:16})})]})}):null}var lE=/^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$/,uE=/^[a-z0-9-]$/;function dE(e){return e?lE.test(e):!1}function fE(e){let t=e.toLowerCase(),n=``;for(let e of t)uE.test(e)&&(n+=e);for(;n.startsWith(`-`);)n=n.slice(1);return n}function pE(e){return[{key:`length`,label:`At least 8 characters`,met:e.length>=8},{key:`number`,label:`Contains a number`,met:/\d/.test(e)},{key:`special`,label:`Contains a special character`,met:/[^A-Za-z0-9]/.test(e)},{key:`whitespace`,label:`No spaces`,met:e.length>0&&!/\s/.test(e)}]}var mE=/https:\/\/dash\.cloudflare\.com\/argotunnel\?[^\s]+/,hE=/^OAUTH_URL:\s*(\S+)/,gE=/result=error\s+reason=([a-z0-9-]+)/;function _E(e){let t=e.match(hE);if(t)return t[1];let n=e.match(mE);return n?n[0]:null}function vE(e){let t=e.match(gE);return t?t[1]:null}var yE=/\[(\d+)\/(\d+)\]/,bE=/\bstep=([a-z0-9-]+)/,xE=2e3,SE=9e4;function CE(e){if(!e)return null;let t=e.match(yE);return t?parseInt(t[1],10):null}function wE({actionId:e,cacheKey:t,onExit:n,onOutcome:r,maxLines:i=1e3,selfRestart:a}){let[o,s]=(0,H.useState)([]),[c,l]=(0,H.useState)(null),[u,f]=(0,H.useState)(null),[p,m]=(0,H.useState)(null),[g,_]=(0,H.useState)(null),[v,y]=(0,H.useState)({phase:`idle`}),[b,x]=(0,H.useState)(!1),[S,C]=(0,H.useState)(null),w=(0,H.useRef)(null),T=(0,H.useRef)(new Set),E=(0,H.useRef)(null),D=(0,H.useRef)(0),O=(0,H.useRef)(null),k=(0,H.useRef)(null),A=(0,H.useRef)(null),j=(0,H.useRef)(null),M=(0,H.useRef)(null),N=(0,H.useRef)(null),P=ee(),te=(0,H.useRef)(n);te.current=n;let F=(0,H.useRef)(r);F.current=r;let I=(0,H.useCallback)(()=>{M.current&&=(clearInterval(M.current),null),N.current&&=(clearTimeout(N.current),null)},[]),ne=(0,H.useCallback)(e=>{e&&(w.current=e,C(e))},[]),re=(0,H.useCallback)(async()=>{if(g){y({phase:`respawning`});try{let e=await fetch(`/api/admin/device-browser/navigate`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({url:g,intent:`open Cloudflare authorisation page`,hostname:``})}),t=await e.json().catch(()=>({}));if(e.ok&&t.ok){P?.onShowVnc(),y({phase:`respawned`}),window.setTimeout(()=>y({phase:`idle`}),2500);return}y({phase:`failed`,reason:(t.navigateResult??t.detail??`navigation failed`).slice(0,80)})}catch(e){y({phase:`failed`,reason:(e instanceof Error?e.message:String(e)).slice(0,80)})}}},[g,P]),L=(0,H.useCallback)(()=>{let n=D.current>0?`&from=${D.current}`:``,r=new EventSource(`/api/admin/actions/${encodeURIComponent(e)}/stream?session_key=${encodeURIComponent(t)}${n}`);O.current=r,r.addEventListener(`line`,e=>{try{let t=JSON.parse(e.data);if(D.current=t.byteOffset,s(e=>{let n=[...e,t];return n.length>i&&n.splice(0,n.length-i),n}),!g){let e=_E(t.text);e&&_(e)}let n=t.text.match(yE);n&&ne(n[0]);let r=t.text.match(bE);r&&T.current.add(r[1]);let a=vE(t.text);a&&(E.current=a),m(null)}catch(e){console.error(`[ActionLogPanel] line parse failed:`,e)}}),r.addEventListener(`heartbeat`,e=>{try{let t=JSON.parse(e.data);A.current=t,l(t),ne(t.last_phase),m(null)}catch(e){console.error(`[ActionLogPanel] heartbeat parse failed:`,e)}}),r.addEventListener(`exit`,t=>{try{let n=JSON.parse(t.data);f(n);let r=n.code===0&&n.source===`persisted-log`?`restart-reconciled`:n.code===0?`completed`:n.code===null?n.kind===`restart-in-progress`?`restart-in-progress`:`exit-unobserved-no-restart-context`:`failed`;console.log(`[ActionLogPanel] outcome=${r} action=${e}`),te.current?.(n,E.current),F.current?.(r)}catch(e){console.error(`[ActionLogPanel] exit parse failed:`,e)}finally{r.close(),O.current=null,I(),x(!1)}}),r.onerror=()=>{if(u)return;r.close(),O.current=null;let e=CE(w.current),t=!!a?.atPhase&&e!==null&&e>=a.atPhase,n=!!a?.atStep&&T.current.has(a.atStep);if((t||n)&&j.current!==null){let e=t?`phase=${w.current}`:`step=${a?.atStep}`;console.log(`[ActionLogPanel] SSE drop during self-restart window (${e}) — banner suppressed`),m(null),x(!0),ie();return}m(`Connection lost — reconnecting…`),setTimeout(()=>{u||L()},1500)}},[e,t,i,a?.atPhase,a?.atStep,I]);function ie(){I(),M.current=setInterval(async()=>{try{let e=await fetch(`/api/admin/version`,{cache:`no-store`});if(!e.ok)return;let t=(await e.json())?.installed,n=j.current;t&&n&&t!==n&&(console.log(`[ActionLogPanel] admin-server version changed ${n}→${t} — reconnecting stream`),I(),x(!1),j.current=t,L())}catch{}},xE),N.current=setTimeout(()=>{console.log(`[ActionLogPanel] self-restart window timeout (${SE}ms) — reverting to error banner`),I(),x(!1),m(`New version did not come up — reconnecting…`),setTimeout(()=>{u||L()},1500)},SE)}(0,H.useEffect)(()=>(L(),()=>{O.current?.close(),O.current=null,I()}),[L,I]),(0,H.useEffect)(()=>{if(!a)return;let e=!1;return(async()=>{try{let t=await fetch(`/api/admin/version`,{cache:`no-store`});if(!t.ok)return;let n=await t.json();!e&&typeof n?.installed==`string`&&(j.current=n.installed)}catch{}})(),()=>{e=!0}},[e,a?.atPhase,a?.atStep]),(0,H.useEffect)(()=>{let e=k.current;e&&e.scrollHeight-e.scrollTop-e.clientHeight<80&&(e.scrollTop=e.scrollHeight)},[o]),(0,H.useEffect)(()=>{if(!u&&!b)return;let e=k.current;e&&(e.scrollTop=e.scrollHeight)},[u,b]);let R=e=>new Date(e).toLocaleTimeString(void 0,{hour12:!1}),ae=c?Math.floor(c.elapsed_since_last_line_ms/1e3):0,z=!u&&(p!==null||b),oe=z?`#666`:void 0,se=!u&&!z&&c&&ae>=5;return(0,U.jsxs)(`div`,{className:`action-log-panel`,style:{display:`flex`,flexDirection:`column`,height:`100%`,background:`#0a0a0a`,color:`#e8e8e8`,borderRadius:4,overflow:`hidden`,fontFamily:`ui-monospace, monospace`,fontSize:12},children:[(0,U.jsxs)(`div`,{style:{padding:`6px 10px`,borderBottom:`1px solid #222`,display:`flex`,gap:12,alignItems:`center`,flexWrap:`wrap`,fontSize:11},children:[(0,U.jsx)(`span`,{style:{color:`#888`},children:`action:`}),(0,U.jsx)(`span`,{children:e}),c&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`span`,{style:{color:`#888`,marginLeft:`auto`},children:`state:`}),(0,U.jsx)(`span`,{style:{color:oe},children:c.systemd_state}),S&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`span`,{style:{color:`#888`},children:`phase:`}),(0,U.jsx)(`span`,{style:{color:oe},children:S})]}),z&&(0,U.jsx)(`span`,{style:{color:`#888`,fontStyle:`italic`},children:`(stale)`}),se&&(0,U.jsxs)(`span`,{style:{color:`#e4a657`,display:`inline-flex`,alignItems:`center`,gap:4},children:[(0,U.jsx)(d,{size:11}),` silent `,ae,`s`]})]})]}),g&&!u&&(0,U.jsxs)(`div`,{style:{padding:`8px 10px`,borderBottom:`1px solid #222`,background:`#1b1f2b`,display:`flex`,alignItems:`center`,gap:8,flexWrap:`wrap`},children:[(0,U.jsx)(`span`,{style:{color:`#cbd5f5`},children:`Authorise this device on the Pi’s browser — click the zone, then Authorize.`}),(0,U.jsxs)(`button`,{type:`button`,onClick:re,disabled:v.phase===`respawning`,style:{marginLeft:`auto`,color:`#fff`,background:`#f6821f`,padding:`4px 10px`,borderRadius:3,border:`none`,cursor:v.phase===`respawning`?`wait`:`pointer`,display:`inline-flex`,alignItems:`center`,gap:6,fontSize:11,opacity:v.phase===`respawning`?.7:1},title:`Re-opens the Cloudflare page on the Pi's VNC browser`,children:[(0,U.jsx)(h,{size:12}),v.phase===`respawning`?`Re-opening on Pi…`:v.phase===`respawned`?`Re-opened on Pi`:`Re-open on Pi browser`]}),v.phase===`failed`&&(0,U.jsxs)(`span`,{style:{width:`100%`,color:`#ffc987`,fontSize:11,marginTop:4},children:[`Could not re-open on Pi: `,v.reason,`. The page should still be on the Pi VNC from the initial spawn.`]})]}),p&&!b&&(0,U.jsxs)(`div`,{style:{padding:`6px 10px`,background:`#3a2b10`,color:`#ffc987`,display:`flex`,alignItems:`center`,gap:8},children:[(0,U.jsx)(ge,{size:12,className:`spin`}),` `,p]}),b&&(0,U.jsxs)(`div`,{style:{padding:`6px 10px`,background:`#132319`,color:`#9aeab0`,display:`flex`,alignItems:`center`,gap:8},children:[(0,U.jsx)(ge,{size:12,className:`spin`}),` Waiting for new version…`]}),(0,U.jsxs)(`div`,{ref:k,style:{flex:1,overflow:`auto`,padding:`6px 10px`,lineHeight:1.45,whiteSpace:`pre-wrap`,wordBreak:`break-word`},children:[o.length===0&&!u&&(0,U.jsx)(`div`,{style:{color:`#888`},children:`Waiting for output…`}),o.map(e=>(0,U.jsxs)(`div`,{style:{display:`flex`,gap:10,color:e.stream===`stderr`?`#ff9999`:`#e8e8e8`},children:[(0,U.jsx)(`span`,{style:{color:`#666`,flexShrink:0},children:R(e.ts)}),(0,U.jsx)(`span`,{children:e.text})]},e.byteOffset))]}),u&&(()=>{let e=u.code,t=e===null&&u.kind===`restart-in-progress`,n=e===0,r=e!==null&&e!==0,i=Math.round(u.duration_ms/1e3);return n?(0,U.jsxs)(`div`,{style:{padding:`8px 10px`,borderTop:`1px solid #222`,background:`#14331b`,color:`#9aeab0`,display:`flex`,alignItems:`center`,gap:8},children:[(0,U.jsx)(Ae,{size:13}),(0,U.jsxs)(`span`,{children:[`Completed · `,i,`s`]})]}):r?(0,U.jsxs)(`div`,{style:{padding:`8px 10px`,borderTop:`1px solid #222`,background:`#3a1717`,color:`#ff9999`,display:`flex`,alignItems:`center`,gap:8},children:[(0,U.jsx)(d,{size:13}),(0,U.jsxs)(`span`,{children:[`Failed (exit `,e,`) · `,i,`s`]})]}):t?(0,U.jsxs)(`div`,{style:{padding:`8px 10px`,borderTop:`1px solid #222`,background:`#132319`,color:`#9aeab0`,display:`flex`,alignItems:`center`,gap:8},children:[(0,U.jsx)(ge,{size:13,className:`spin`}),(0,U.jsxs)(`span`,{children:[`Restart in progress · `,i,`s`]})]}):(0,U.jsxs)(`div`,{style:{padding:`8px 10px`,borderTop:`1px solid #222`,background:`#3a2b10`,color:`#ffc987`,display:`flex`,alignItems:`center`,gap:8},children:[(0,U.jsx)(d,{size:13}),(0,U.jsxs)(`span`,{children:[`Failed (exit unobserved) · `,i,`s`]})]})})()]})}var TE={title:`Authorise the tunnel in your own browser`,intro:`The Pi's browser couldn't drive the Cloudflare consent page automatically. Open the dashboard in your own browser and follow these steps:`,steps:[`The "Authorize Cloudflare Tunnel" page shows every zone on the currently-active account.`,`Click the zone you want the tunnel to be able to route DNS for.`,`Click Authorize. The browser closes or shows "You can close this page."`,`Return here and click "Try again" — the cert will land and setup will continue.`],footnote:`If the account shown in the top-left of the dashboard is not the one that owns your zone, click the account-name dropdown first and switch accounts before authorising.`},EE=18e4,DE=4096;function OE(e){let t=new TextEncoder().encode(e);return t.length<=DE?e:`${new TextDecoder(`utf-8`,{fatal:!1}).decode(t.slice(0,DE))}\n… ${t.length-DE} bytes truncated (total ${t.length} bytes)`}var kE=`__create_new__`;function AE({data:e,onSubmit:t,submitted:n,cacheKey:r,messageId:i}){let a=e,[o,s]=(0,H.useState)({status:`loading`}),[c,l]=(0,H.useState)(``),[u,d]=(0,H.useState)(``),[f,p]=(0,H.useState)(``),[m,h]=(0,H.useState)(``),[g,_]=(0,H.useState)(``),[v,y]=(0,H.useState)(``),[b,x]=(0,H.useState)(!1),[S,C]=(0,H.useState)({status:`loading`}),[w,T]=(0,H.useState)(``),[E,D]=(0,H.useState)(``),[O,k]=(0,H.useState)(!1),[A,M]=(0,H.useState)(!1),[N,P]=(0,H.useState)(null),[ee,te]=(0,H.useState)(null),[F,I]=(0,H.useState)(null),ne=(0,H.useRef)(null),re=(0,H.useRef)(new Set),[L,ie]=(0,H.useState)(null),R=(0,H.useCallback)(async()=>{if(!r){s({status:`error`,field:`session`,message:`No session key available — refresh the page.`});return}s({status:`loading`});try{let e=await(await fetch(`/api/admin/cloudflare/domains?session_key=${encodeURIComponent(r)}`,{method:`GET`,headers:{Accept:`application/json`}})).json();if(!e.ok){s({status:`error`,field:e.field,message:e.message,output:e.output,correlationId:e.correlationId,streamLogPath:e.streamLogPath,brand:e.brand});return}if(e.domains.length===0){s({status:`empty`});return}s({status:`populated`,domains:e.domains}),d(t=>t||e.domains[0]),h(t=>t||e.domains[0])}catch(e){s({status:`error`,field:`script`,message:e instanceof Error?e.message:`Network error loading domains.`})}},[r]);(0,H.useEffect)(()=>{R()},[R]);let ae=(0,H.useCallback)(async()=>{if(!r){C({status:`error`,field:`session`,message:`No session key available — refresh the page.`});return}C({status:`loading`});try{let e=await(await fetch(`/api/admin/cloudflare/tunnels?session_key=${encodeURIComponent(r)}`,{method:`GET`,headers:{Accept:`application/json`}})).json();if(!e.ok){if(e.field===`cert`){C({status:`pre-oauth`,message:`First-time setup: we’ll sign you into Cloudflare and create the tunnel when you submit.`}),T(kE),e.defaultName&&D(t=>t||e.defaultName);return}C({status:`error`,field:e.field,message:e.message,output:e.output,correlationId:e.correlationId,streamLogPath:e.streamLogPath});return}if(e.tunnels.length===0){C({status:`empty`}),T(kE),e.defaultName&&D(t=>t||e.defaultName);return}C({status:`populated`,tunnels:e.tunnels});let t=e.tunnels.find(t=>t.name===e.defaultName);t?T(e=>e||t.id):(T(e=>e||kE),D(t=>t||e.defaultName))}catch(e){C({status:`error`,field:`script`,message:e instanceof Error?e.message:`Network error loading tunnels.`})}},[r]);(0,H.useEffect)(()=>{ae()},[ae]),(0,H.useEffect)(()=>()=>{ne.current&&clearTimeout(ne.current)},[]);let z=o.status===`populated`?o.domains:[],oe=e=>{n||O||(l(fE(e)),I(null))},se=e=>{n||O||(p(fE(e)),I(null))},ce=dE(c)&&u.length>0,le=f!==``,ue=!le||dE(f)&&m.length>0,de=ce?`${c.replace(/-+$/,``)}.${u}`:``,fe=le&&ue?`${f.replace(/-+$/,``)}.${m}`:``,pe=!(fe&&fe===de),me=pE(v),he=me.every(e=>e.met),ge=w===kE,_e=E.trim(),ve=/^[A-Za-z0-9_.-]{1,64}$/.test(_e),ye=w!==``&&(!ge||ve),be=S.status===`populated`||S.status===`empty`||S.status===`pre-oauth`,xe=o.status===`populated`&&be&&ye&&ce&&ue&&pe&&he&&!O,Se=c!==``&&!dE(c)?`Use lowercase letters, numbers, and hyphens. Start and end with a letter or number.`:null,Ce=le&&!dE(f)?`Use lowercase letters, numbers, and hyphens. Start and end with a letter or number.`:pe?null:`Public address must differ from the admin address.`,we=F?.field===`admin`?F.message:null,Te=F?.field===`public`?F.message:null,Ee=F?.field===`password`?F.message:null,B=F?.field===`script`||F?.field===`request`?F.message:null,De=()=>{M(!1),I(null),k(!1)},Oe=async()=>{if(!xe)return;if(!r){I({field:`request`,message:`No session key available — refresh the page.`});return}k(!0),I(null),M(!1);let e=new AbortController;ne.current=setTimeout(()=>{e.abort(),M(!0)},EE);let n={session_key:r,adminLabel:c.replace(/-+$/,``),adminDomain:u,password:v};le&&(n.publicLabel=f.replace(/-+$/,``),n.publicDomain=m),g&&(n.apex=g),i&&(n.messageId=i),ge?n.tunnelName=_e:n.tunnelId=w;try{let r=await fetch(`/api/admin/cloudflare/setup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n),signal:e.signal});ne.current&&clearTimeout(ne.current),ne.current=null;let i=await r.json();if(!i.ok){I({field:i.field,message:i.message,output:i.output,correlationId:i.correlationId,streamLogPath:i.streamLogPath});let e=i.streamLogPath?`\n\nstream log: ${i.streamLogPath}`:``;t(i.output&&i.output.length>0?`Cloudflare setup failed: ${i.message}\n\n${i.output}${e}`:`Cloudflare setup failed: ${i.message}${e}`),k(!1);return}if(i.actionId){P(i.actionId);return}t(i.output)}catch(t){if(ne.current&&clearTimeout(ne.current),ne.current=null,e.signal.aborted)return;I({field:`script`,message:t instanceof Error?t.message:`Network error — try again.`}),k(!1)}},V=(0,H.useMemo)(()=>c?`${c}.${u||`your-domain`}`:`admin.${u||`your-domain`}`,[c,u]);if(o.status===`loading`)return(0,U.jsx)(j,{submitted:!1,actions:[],children:(0,U.jsxs)(`div`,{className:`form-input`,children:[a?.title&&(0,U.jsx)(`div`,{className:`form-input__title`,children:a.title}),(0,U.jsx)(`div`,{className:`form-input__desc`,children:`Reading the domains on your Cloudflare account…`})]})});if(o.status===`empty`)return(0,U.jsx)(j,{submitted:!1,actions:[{label:`Retry`,variant:`primary`,onClick:R}],children:(0,U.jsxs)(`div`,{className:`form-input`,children:[(0,U.jsx)(`div`,{className:`form-input__title`,children:`No domains on this Cloudflare account`}),(0,U.jsx)(`div`,{className:`form-input__desc`,children:`Add a domain in the Cloudflare dashboard first, then click Retry.`}),(0,U.jsxs)(`ol`,{className:`form-input__field-desc`,style:{margin:0,paddingLeft:20},children:[(0,U.jsxs)(`li`,{children:[`With the correct account active (top-left), click `,(0,U.jsx)(`strong`,{children:`Websites`}),` in the left-hand sidebar.`]}),(0,U.jsxs)(`li`,{children:[`Click the `,(0,U.jsx)(`strong`,{children:`Add a site`}),` button.`]}),(0,U.jsxs)(`li`,{children:[`Enter the bare domain (e.g. `,(0,U.jsx)(`code`,{children:`example.com`}),`) and click `,(0,U.jsx)(`strong`,{children:`Continue`}),`.`]}),(0,U.jsxs)(`li`,{children:[`Review Cloudflare's imported DNS records — preserve website (`,(0,U.jsx)(`code`,{children:`A`}),`), email (`,(0,U.jsx)(`code`,{children:`MX`}),`), and verification (`,(0,U.jsx)(`code`,{children:`TXT`}),`) entries.`]}),(0,U.jsx)(`li`,{children:`Copy Cloudflare's two nameservers and set them on your domain registrar.`}),(0,U.jsxs)(`li`,{children:[`Return to Cloudflare and click `,(0,U.jsx)(`strong`,{children:`Check nameservers`}),`. Wait for the zone to show `,(0,U.jsx)(`strong`,{children:`Active`}),`.`]})]})]})});if(o.status===`error`){let e=o.field===`config`,t=o.field===`dashboard`,n=e?`Cloudflare setup misconfigured for brand "${o.brand??`unknown`}"`:t?`Not signed into Cloudflare on this device`:`Could not read domains from Cloudflare`,r=e?`${o.message}. Re-run the installer to restamp brand.json with the correct cdpPort, then re-open this form. The verbatim script output below names the missing key.`:t?`Sign in again at the Cloudflare dashboard in the VNC browser, then click Retry. If the VNC browser is not open, ask me to run vnc.sh restart.`:o.message;return(0,U.jsx)(j,{submitted:!1,actions:e?[]:[{label:`Retry`,variant:`primary`,onClick:R}],children:(0,U.jsxs)(`div`,{className:`form-input`,children:[(0,U.jsx)(`div`,{className:`form-input__title`,children:n}),(0,U.jsx)(`div`,{className:`form-input__desc`,children:r}),o.output&&o.output.length>0&&(0,U.jsx)(`pre`,{style:{marginTop:8,padding:8,maxHeight:280,overflow:`auto`,fontFamily:`var(--font-mono, ui-monospace, monospace)`,fontSize:12,lineHeight:1.4,whiteSpace:`pre-wrap`,wordBreak:`break-word`,background:`var(--surface-2, rgba(0,0,0,0.04))`,borderRadius:4},children:OE(o.output)}),(o.correlationId||o.streamLogPath)&&(0,U.jsxs)(`div`,{style:{marginTop:8,fontFamily:`var(--font-mono, ui-monospace, monospace)`,fontSize:11,color:`var(--text-secondary)`,wordBreak:`break-all`},children:[o.correlationId&&(0,U.jsxs)(`div`,{children:[`conversationId: `,o.correlationId]}),o.streamLogPath&&(0,U.jsxs)(`div`,{children:[`stream log: `,o.streamLogPath]})]})]})})}if(ee)return(0,U.jsx)(j,{submitted:!1,actions:[{label:`Try again`,variant:`primary`,onClick:()=>{te(null),P(null),I(null),k(!1),M(!1)}}],children:(0,U.jsxs)(`div`,{className:`form-input`,children:[(0,U.jsx)(`div`,{className:`form-input__title`,children:ee.card.title}),(0,U.jsx)(`div`,{className:`form-input__desc`,style:{whiteSpace:`pre-wrap`},children:ee.card.intro}),(0,U.jsx)(`ol`,{style:{marginTop:10,paddingLeft:20,lineHeight:1.6},children:ee.card.steps.map((e,t)=>(0,U.jsx)(`li`,{children:e},t))}),ee.card.footnote&&(0,U.jsx)(`div`,{style:{marginTop:10,fontStyle:`italic`,color:`#666`},children:ee.card.footnote})]})});if(N&&r){let e=L===`completed`||L===`restart-reconciled`?`Cloudflare setup complete.`:L===`failed`||L===`exit-unobserved-no-restart-context`?`Cloudflare setup failed.`:L===`restart-in-progress`?`Restart in progress — agent will reply once the service is back.`:`Cloudflare setup in progress — keep this panel open until it completes.`;return(0,U.jsx)(j,{submitted:!1,actions:[],children:(0,U.jsxs)(`div`,{className:`form-input`,children:[a?.title&&(0,U.jsx)(`div`,{className:`form-input__title`,children:a.title}),(0,U.jsx)(`div`,{className:`form-input__desc`,children:e}),(0,U.jsx)(`div`,{style:{marginTop:10,height:360},children:(0,U.jsx)(wE,{actionId:N,cacheKey:r,selfRestart:{atStep:`service-restart-armed`},onOutcome:e=>ie(e),onExit:(e,n)=>{if(re.current.has(N)){Ft(`cloudflare-setup-form`,{kind:`suppressed-duplicate`,actionId:N,exitCode:e.code});return}if(re.current.add(N),e.code===0){let e=`Cloudflare setup completed (actionId: ${N}).`;Ft(`cloudflare-setup-form`,{kind:`post-restart-resume-armed`,actionId:N}),typeof window<`u`&&window.dispatchEvent(new CustomEvent(`admin-chat:post-restart-resume`,{detail:{actionId:N,message:e}}));return}if(n===`authorize-button-not-found`){te({card:TE,actionId:N,exitCode:e.code});return}t(`Cloudflare setup failed with exit code ${e.code} (actionId: ${N}).`)}})})]})})}return A?(0,U.jsx)(j,{submitted:!1,actions:[{label:`Reset form`,variant:`ghost`,onClick:De}],children:(0,U.jsxs)(`div`,{className:`form-input`,children:[(0,U.jsx)(`div`,{className:`form-input__title`,children:`Setup is taking longer than expected`}),(0,U.jsx)(`div`,{className:`form-input__desc`,children:`The request is still running on the device — check the chat for live progress. Do not resubmit. If the script fails, the error will appear in chat and you can retry from there.`})]})}):(0,U.jsx)(j,{submitted:n,submittedLabel:`Submitting…`,actions:[{label:O?`Setting up…`:a?.submitLabel??`Set up Cloudflare`,variant:`primary`,disabled:!xe,onClick:Oe}],children:(0,U.jsxs)(`div`,{className:`form-input`,children:[a?.title&&(0,U.jsx)(`div`,{className:`form-input__title`,children:a.title}),a?.description&&(0,U.jsx)(`div`,{className:`form-input__desc`,children:a.description}),(0,U.jsxs)(`div`,{className:`form-input__fields`,children:[(0,U.jsxs)(`div`,{className:`form-input__field`,children:[(0,U.jsxs)(`label`,{className:`form-input__label`,htmlFor:`cf-admin-label`,children:[`Admin address`,(0,U.jsx)(`span`,{className:`form-input__required`,children:`*`})]}),(0,U.jsxs)(`div`,{className:`tunnel-route__row`,children:[(0,U.jsx)(`input`,{id:`cf-admin-label`,className:`form-input__input tunnel-route__input`,type:`text`,autoCapitalize:`none`,autoComplete:`off`,autoCorrect:`off`,spellCheck:!1,placeholder:`admin`,value:c,onChange:e=>oe(e.target.value),disabled:n||O}),(0,U.jsx)(jE,{id:`cf-admin-domain`,value:u,options:z,onChange:d,disabled:n||O})]}),(0,U.jsx)(`div`,{className:`form-input__field-desc`,children:`Where you access your platform remotely, via your main domain.`}),(0,U.jsxs)(`div`,{className:`form-input__field-desc`,children:[`Preview: `,(0,U.jsx)(`span`,{className:`tunnel-route__preview`,children:V})]}),(we||Se)&&(0,U.jsx)(`div`,{className:`tunnel-route__error`,children:we??Se})]}),(0,U.jsxs)(`div`,{className:`form-input__field`,children:[(0,U.jsxs)(`label`,{className:`form-input__label`,htmlFor:`cf-public-label`,children:[`Public address`,(0,U.jsx)(`span`,{className:`tunnel-route__optional`,children:`Optional`})]}),(0,U.jsxs)(`div`,{className:`tunnel-route__row`,children:[(0,U.jsx)(`input`,{id:`cf-public-label`,className:`form-input__input tunnel-route__input`,type:`text`,autoCapitalize:`none`,autoComplete:`off`,autoCorrect:`off`,spellCheck:!1,placeholder:`public`,value:f,onChange:e=>se(e.target.value),disabled:n||O}),(0,U.jsx)(jE,{id:`cf-public-domain`,value:m,options:z,onChange:h,disabled:n||O||!le})]}),(0,U.jsx)(`div`,{className:`form-input__field-desc`,children:`Where visitors engage with your public agents, via your main domain. Leave empty for admin-only access.`}),(Te||Ce)&&(0,U.jsx)(`div`,{className:`tunnel-route__error`,children:Te??Ce})]}),(0,U.jsxs)(`div`,{className:`form-input__field`,children:[(0,U.jsxs)(`label`,{className:`form-input__label`,htmlFor:`cf-apex`,children:[`Proxy apex`,(0,U.jsx)(`span`,{className:`tunnel-route__optional`,children:`Optional`})]}),(0,U.jsxs)(an,{id:`cf-apex`,className:`form-input__select`,value:g,onChange:e=>_(e.target.value),disabled:n||O,children:[(0,U.jsx)(`option`,{value:``,children:`None`}),z.map(e=>(0,U.jsx)(`option`,{value:e,children:e},e))]}),(0,U.jsx)(`div`,{className:`form-input__field-desc`,children:`Alternative domain for public agent visitors.`})]}),(0,U.jsxs)(`div`,{className:`form-input__field`,children:[(0,U.jsxs)(`label`,{className:`form-input__label`,htmlFor:`cf-tunnel`,children:[`Tunnel`,(0,U.jsx)(`span`,{className:`form-input__required`,children:`*`})]}),S.status===`loading`&&(0,U.jsx)(`div`,{className:`form-input__field-desc`,children:`Loading tunnels from your Cloudflare account…`}),S.status===`error`&&(0,U.jsx)(`div`,{className:`tunnel-route__error`,children:S.message}),S.status===`pre-oauth`&&(0,U.jsx)(`div`,{className:`form-input__field-desc`,style:{marginBottom:4},children:S.message}),be&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(an,{id:`cf-tunnel`,className:`form-input__select`,value:w,onChange:e=>T(e.target.value),disabled:n||O,children:[S.status===`populated`&&(0,U.jsxs)(U.Fragment,{children:[w===``&&(0,U.jsx)(`option`,{value:``,children:`Select a tunnel…`}),S.tunnels.map(e=>(0,U.jsx)(`option`,{value:e.id,children:e.name},e.id))]}),(0,U.jsx)(`option`,{value:kE,children:`+ Create a new tunnel…`})]}),ge&&(0,U.jsx)(`div`,{className:`tunnel-route__row`,style:{marginTop:8},children:(0,U.jsx)(`input`,{id:`cf-tunnel-new-name`,className:`form-input__input tunnel-route__input`,type:`text`,autoCapitalize:`none`,autoComplete:`off`,autoCorrect:`off`,spellCheck:!1,placeholder:`new-tunnel-name`,value:E,onChange:e=>D(e.target.value),disabled:n||O})}),(0,U.jsx)(`div`,{className:`form-input__field-desc`,children:S.status===`pre-oauth`?`Use letters, digits, dots, dashes, underscores. 1–64 characters.`:S.status===`empty`?`No existing tunnels on your Cloudflare account — give the new tunnel a name.`:ge?`Use letters, digits, dots, dashes, underscores. 1–64 characters.`:`Existing tunnels from the Cloudflare account you signed into. Hostnames you set above will be CNAME’d to whichever tunnel you pick.`}),ge&&E!==``&&!ve&&(0,U.jsx)(`div`,{className:`tunnel-route__error`,children:`Use letters, digits, dots, dashes, underscores. 1–64 characters.`}),F?.field===`tunnel`&&(0,U.jsx)(`div`,{className:`tunnel-route__error`,children:F.message})]})]}),(0,U.jsxs)(`div`,{className:`form-input__field`,children:[(0,U.jsxs)(`label`,{className:`form-input__label`,htmlFor:`cf-password`,children:[`Admin password`,(0,U.jsx)(`span`,{className:`form-input__required`,children:`*`})]}),(0,U.jsxs)(`div`,{className:`tunnel-route__row`,children:[(0,U.jsx)(`input`,{id:`cf-password`,className:`form-input__input tunnel-route__input`,type:b?`text`:`password`,autoCapitalize:`none`,autoComplete:`new-password`,autoCorrect:`off`,spellCheck:!1,value:v,onChange:e=>{y(e.target.value),I(null)},disabled:n||O}),(0,U.jsx)(`button`,{type:`button`,className:`tunnel-route__suffix`,onClick:()=>x(e=>!e),disabled:n||O,style:{cursor:`pointer`,border:`none`,background:`inherit`},"aria-label":b?`Hide password`:`Show password`,children:b?`Hide`:`Show`})]}),(0,U.jsx)(`ul`,{className:`form-input__field-desc`,style:{margin:0,paddingLeft:16},children:me.map(e=>(0,U.jsxs)(`li`,{style:{color:e.met?`var(--text)`:`var(--text-secondary)`},children:[e.met?`✓`:`○`,` `,e.label]},e.key))}),Ee&&(0,U.jsx)(`div`,{className:`tunnel-route__error`,children:Ee})]}),B&&(0,U.jsxs)(`div`,{className:`tunnel-route__error`,role:`alert`,children:[(0,U.jsx)(`div`,{children:B}),F?.output&&F.output.length>0&&(0,U.jsx)(`pre`,{style:{marginTop:8,padding:8,maxHeight:280,overflow:`auto`,fontFamily:`var(--font-mono, ui-monospace, monospace)`,fontSize:12,lineHeight:1.4,whiteSpace:`pre-wrap`,wordBreak:`break-word`,background:`var(--surface-2, rgba(0,0,0,0.04))`,borderRadius:4},children:OE(F.output)}),(F?.correlationId||F?.streamLogPath)&&(0,U.jsxs)(`div`,{style:{marginTop:8,fontFamily:`var(--font-mono, ui-monospace, monospace)`,fontSize:11,color:`var(--text-secondary)`,wordBreak:`break-all`},children:[F.correlationId&&(0,U.jsxs)(`div`,{children:[`conversationId: `,F.correlationId]}),F.streamLogPath&&(0,U.jsxs)(`div`,{children:[`stream log: `,F.streamLogPath]})]})]})]})]})})}function jE({id:e,value:t,options:n,onChange:r,disabled:i}){return(0,U.jsx)(an,{id:e,className:`tunnel-route__suffix`,value:t,onChange:e=>r(e.target.value),disabled:i,children:n.map(e=>(0,U.jsxs)(`option`,{value:e,children:[`.`,e]},e))})}var ME={"single-select":C,"multi-select":F,confirm:tn,"info-card":nn,"action-list":rn,form:on,progress:cn,"browser-viewer":dn,"rich-content-editor":wT,"grid-editor":jT,"qr-code":aE,"file-attachment":cE,"action-buttons":P,"cloudflare-setup-form":AE,"output-style":C,"thinking-view":C,"plugin-selector":F};function NE(e){let{data:t,filePath:n,attachmentId:r,onOpen:i}=e,a=n.split(`/`).pop()||n||`document.md`,o=(a.split(`.`).pop()||`doc`).toUpperCase().slice(0,6),s=!r,c=r??(n||a),l=(0,H.useRef)(!1);return(0,H.useEffect)(()=>{l.current||(l.current=!0,s&&console.warn(`[admin-ui] artefact-open-missing-attachmentId filePath=${n.slice(0,40)}`),i({docId:c,name:a,content:t.content??``,editable:!s}))},[c,a,t.content,i,s,n]),(0,U.jsx)(`div`,{className:`component-card artefact-ref-card`,children:(0,U.jsxs)(`button`,{type:`button`,className:`artefact-ref-button`,onClick:()=>i({docId:c,name:a,content:t.content??``,editable:!s}),children:[(0,U.jsx)(`span`,{className:`artefact-ref-icon`,children:(0,U.jsx)(g,{size:16})}),(0,U.jsxs)(`span`,{className:`artefact-ref-meta`,children:[(0,U.jsx)(`span`,{className:`artefact-ref-name`,children:a}),(0,U.jsxs)(`span`,{className:`artefact-ref-tag`,children:[o,` · open in artefact pane`]})]}),(0,U.jsx)(`span`,{className:`artefact-ref-open`,children:(0,U.jsx)(Be,{size:14})})]})})}function PE({name:e,data:t,onSubmit:n,submitted:r,isStreaming:i,cacheKey:a,messageId:o,onOpenArtefact:s,attachmentId:c}){if(e===`document-editor`&&s){let e=t??{};return(0,U.jsx)(NE,{data:e,filePath:e.filePath||e.title||`document.md`,attachmentId:c,onOpen:s})}if(e===`document-editor`)return(0,U.jsx)(cT,{data:t,onSubmit:n,submitted:r,isStreaming:i});let l=ME[e];return l?(0,U.jsx)(l,{data:t,onSubmit:n,submitted:r,isStreaming:i,cacheKey:a,messageId:o}):(console.warn(`[ComponentRenderer] Unknown component: "${e}". Registered: ${Object.keys(ME).join(`, `)}`),(0,U.jsx)(`div`,{className:`component-card component-card--error`,children:(0,U.jsxs)(`p`,{style:{fontFamily:`var(--font-body)`,fontSize:12,color:`var(--text-secondary)`},children:[`Component “`,e,`” is not available. This may require a platform update.`]})}))}var FE=/\b(?:fail|error|unable|could not|cannot|CAPTCHA|SIGN_IN_REQUIRED)\b/i;function IE(e){let t=new Date(e),n=new Date,r=String(t.getHours()).padStart(2,`0`),i=String(t.getMinutes()).padStart(2,`0`);return t.toDateString()===n.toDateString()?`${r}:${i}`:`${String(t.getDate()).padStart(2,`0`)}-${String(t.getMonth()+1).padStart(2,`0`)}-${t.getFullYear()} ${r}:${i}`}var LE=[_t,mt,Te,le,Re];function RE({size:e=13}){let[t,n]=(0,H.useState)(0);(0,H.useEffect)(()=>{let e=setInterval(()=>n(e=>(e+1)%8),300);return()=>clearInterval(e)},[]);let r=t<=4?t:8-t,i=LE[r];return(0,U.jsx)(i,{size:e,className:`star-loader star-frame-${r}`})}var zE=[`Thinking`,`Reasoning`,`Analyzing`,`Considering`,`Reflecting`,`Evaluating`,`Weighing`,`Synthesizing`,`Processing`,`Exploring`,`Examining`,`Assessing`,`Reviewing`,`Contemplating`,`Deliberating`],BE=60,VE=1500;function HE(){let e=(0,H.useRef)(-1),t=(0,H.useRef)(void 0),[n,r]=(0,H.useState)(()=>{let t=Math.floor(Math.random()*zE.length);return e.current=t,zE[t]+`…`});return(0,H.useEffect)(()=>{let n=!1;function i(){let t;do t=Math.floor(Math.random()*zE.length);while(t===e.current&&zE.length>1);return e.current=t,t}function a(){if(n)return;let e=zE[i()]+`…`,o=0;function s(){n||(o++,r(e.slice(0,o)),o<e.length?t.current=setTimeout(s,BE):t.current=setTimeout(a,VE))}t.current=setTimeout(s,BE)}return t.current=setTimeout(a,VE),()=>{n=!0,clearTimeout(t.current)}},[]),(0,U.jsx)(`span`,{className:`tl-thinking-typewriter`,children:n})}function UE(e,t){let n=e=>String(e??``);switch(e){case`Read`:return`Read ${n(t.file_path??t.path)}`;case`Write`:return`Write ${n(t.file_path??t.path)}`;case`Edit`:return`Edit ${n(t.file_path??t.path)}`;case`Bash`:return n(t.description??String(t.command??``).slice(0,70));case`Glob`:return`Glob ${n(t.pattern)}`;case`Grep`:return`Grep "${n(t.pattern)}" in ${n(t.path??`.`)}`;case`WebFetch`:return`Fetch ${n(t.url)}`;case`Agent`:return n(t.description??t.task??`Subagent`);case`Skill`:return n(t.skill??`Skill`);default:{let r=e.match(/^mcp__[^_]+__(.+)$/),i=r?r[1]:e,a=Object.keys(t)[0];return a?`${i}: ${n(t[a]).slice(0,50)}`:i}}}function WE({name:e,size:t=12}){let n=e.match(/^mcp__[^_]+__(.+)$/);switch(n?n[1]:e){case`Read`:return(0,U.jsx)(g,{size:t});case`Write`:return(0,U.jsx)(Ke,{size:t});case`Edit`:return(0,U.jsx)(Ge,{size:t});case`Bash`:return(0,U.jsx)(vt,{size:t});case`Glob`:case`Grep`:return(0,U.jsx)(he,{size:t});case`WebFetch`:return(0,U.jsx)(h,{size:t});case`Agent`:return(0,U.jsx)(De,{size:t});case`Skill`:return(0,U.jsx)(mt,{size:t});case`memory-search`:return(0,U.jsx)(Le,{size:t});case`memory-write`:return(0,U.jsx)(Ie,{size:t});case`task-list`:return(0,U.jsx)(Me,{size:t});case`task-create`:return(0,U.jsx)(Ne,{size:t});case`contact-create`:return(0,U.jsx)(yt,{size:t});default:return(0,U.jsx)(xt,{size:t})}}function GE(e){let t=new Map,n=new Map;return e.forEach((e,r)=>{if(e.type===`tool_use`){let t=n.get(e.name)??[];t.push(r),n.set(e.name,t)}else if(e.type===`tool_result`){let i=n.get(e.name);i?.length&&t.set(i.shift(),r)}}),t}function KE(e){return e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function qE(e){let t=``;switch(e.type){case`text`:case`thinking`:t=e.content??``;break;case`tool_use`:t=JSON.stringify(e.input??{});break;case`tool_result`:t=e.output??``;break;case`subagent_start`:t=e.task??``;break;case`subagent_end`:t=e.result??``;break;case`component`:t=JSON.stringify(e.data??{});break;case`status`:t=e.message??``;break;default:return 0}return Math.ceil(t.length/4)}function JE(e){if(e<60)return`${e}s`;let t=Math.floor(e/60),n=e%60;return n>0?`${t}m ${n}s`:`${t}m`}function YE(e){if(e<60)return`${e.toFixed(1)}s`;let t=Math.floor(e/60),n=e%60;return n>=.1?`${t}m ${Math.floor(n)}s`:`${t}m`}function XE({icon:e,isPending:t,isError:n,doneClass:r=`tl-done`,summary:i,detail:a,tokens:o,elapsed:s,isLast:c,expanded:l,onToggle:u,selectCheck:d}){let f=!!a;return(0,U.jsxs)(`div`,{className:`tl-step`,children:[d,(0,U.jsxs)(`div`,{className:`tl-col`,children:[(0,U.jsx)(`div`,{className:`tl-icon${t?` tl-pending`:n?` tl-error`:` ${r}`}`,children:e}),!c&&(0,U.jsx)(`div`,{className:`tl-line tl-line-grow`})]}),(0,U.jsxs)(`div`,{className:`tl-body`,children:[(0,U.jsxs)(`div`,{className:`tl-row`,onClick:f?()=>{window.getSelection()?.toString()||u()}:void 0,style:{cursor:f?`pointer`:`default`},children:[(0,U.jsx)(`span`,{className:`tl-summary`,children:i}),o>0&&(0,U.jsxs)(`span`,{className:`tl-step-tokens`,children:[(0,U.jsx)(St,{size:9}),KE(o)]}),(0,U.jsx)(`span`,{className:`tl-step-elapsed`,children:YE(s)}),f&&(0,U.jsx)(`span`,{className:`tl-chevron`,children:l?(0,U.jsx)(p,{size:10}):(0,U.jsx)(ke,{size:10})})]}),f&&l&&(0,U.jsx)(`pre`,{className:`tl-detail`,children:a})]})]})}function ZE({events:e,isStreaming:t,elapsedSeconds:n,streamStartMs:r,expandAll:i,onCompactNow:a,isCompacting:o,sessionCompacted:s,onComponentSubmit:c,submittedComponents:l,timestamp:u,selectionMode:d,selectedItems:f,onToggleItem:h,cacheKey:g,messageId:_,onOpenArtefact:v}){let[y,b]=(0,H.useState)(new Set),[x,S]=(0,H.useState)(!t),C=(0,H.useRef)(t);(0,H.useEffect)(()=>{C.current&&!t&&S(!0),!C.current&&t&&S(!1),C.current=t},[t]);let T=(0,H.useRef)(new Map),D=(0,H.useRef)(0),[O,k]=(0,H.useState)(Date.now());(0,H.useEffect)(()=>{let t=Date.now();for(let n=D.current;n<e.length;n++)T.current.has(n)||T.current.set(n,t);D.current=e.length},[e]),(0,H.useEffect)(()=>{if(!t)return;let e=setInterval(()=>k(Date.now()),100);return()=>clearInterval(e)},[t]);let A=e=>{b(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},j=(e,t)=>{let n=e===R[0]?.i&&r?r:T.current.get(e)??O,i=t===void 0?O:T.current.get(t)??O;return Math.max(0,(i-n)/1e3)},M=GE(e),N=new Set(M.values()),P=e.map((e,t)=>({e,i:t})).filter(({e})=>e.type===`text`),ee=new Set(t?[]:e.map((e,t)=>({e,i:t})).filter(({e})=>e.type===`component`).map(({i:e})=>e)),te=e=>e.type===`component`&&[`browser-viewer`,`qr-code`].includes(e.name);function F(e){if(!d||t||!u)return null;let n=`${u}_${e}`;return(0,U.jsx)(`div`,{className:`tl-select-check`,onClick:e=>e.stopPropagation(),children:(0,U.jsx)(Se,{checked:f?.has(n)??!1,onChange:()=>h?.(n)})})}let I=e.findLast(e=>e.type===`usage`),re=e.findLast(e=>e.type===`history_usage`),L=e.findLast(e=>e.type===`status`),ie=e.some(e=>e.type===`subagent_start`),R=e.map((e,t)=>({e,i:t})).filter(({e,i:n})=>e.type!==`text`&&e.type!==`usage`&&e.type!==`rate_limit`&&e.type!==`history_usage`&&e.type!==`status`&&e.type!==`done`&&e.type!==`subagent_progress`&&!N.has(n)&&!ee.has(n)&&!(t&&e.type===`component`&&!te(e))&&!(e.type===`tool_use`&&e.name===`Agent`&&ie)),ae=new Map;for(let e=0;e<R.length-1;e++)ae.set(R[e].i,R[e+1].i);let z=(()=>{let e=[],t=!1,n=0;for(let{e:r}of R)if(n+=qE(r),r.type===`thinking`)t=!0;else if(r.type===`tool_use`){let t=r.name;e.includes(t)||e.push(t)}let r=[`${R.length} step${R.length===1?``:`s`}`];if(e.length>0){let t=e.slice(0,3),n=e.length-t.length;r.push(t.join(`, `)+(n>0?` +${n}`:``))}return{text:r.join(` · `),hasThinking:t,tokenSum:n}})(),se=I?.peak_request_pct==null?I?.context_window?Math.round((I.input_tokens+I.cache_creation_tokens+I.cache_read_tokens)/I.context_window*100):null:Math.round(I.peak_request_pct*100),ce=R.length>0,le=P.length>0,ue=new Set(R.map(e=>e.i)),de=new Set(P.map(e=>e.i)),fe=[];for(let t=0;t<e.length;t++){let n=e[t],r=null;if(ue.has(t)?r=`steps`:de.has(t)&&(r=`text`),!r)continue;let i=fe[fe.length-1];i&&i.role===r?i.items.push({e:n,i:t}):fe.push({role:r,items:[{e:n,i:t}]})}let pe=P.length>0?P[P.length-1].i:-1;function me(n,r,a,o){let s=o===a.length-1;if(n.type===`thinking`){let e=i===void 0?!y.has(r):i,t=ae.get(r);return(0,U.jsxs)(`div`,{className:`tl-step`,children:[F(r),(0,U.jsxs)(`div`,{className:`tl-col`,children:[(0,U.jsx)(`div`,{className:`tl-icon tl-dim`,children:(0,U.jsx)(Qe,{size:11})}),!s&&(0,U.jsx)(`div`,{className:`tl-line tl-line-grow`})]}),(0,U.jsx)(`div`,{className:`tl-body`,children:(0,U.jsxs)(`div`,{className:`tl-row tl-row-top`,onClick:()=>{window.getSelection()?.toString()||A(r)},style:{cursor:`pointer`},children:[(0,U.jsx)(`div`,{className:`tl-thinking-col`,children:e?(0,U.jsx)(`div`,{className:`tl-thinking-body`,children:n.content}):(0,U.jsxs)(`span`,{className:`tl-summary tl-thinking-label`,children:[n.content.slice(0,80),n.content.length>80?`…`:``]})}),qE(n)>0&&(0,U.jsxs)(`span`,{className:`tl-step-tokens`,children:[(0,U.jsx)(St,{size:9}),KE(qE(n))]}),(0,U.jsx)(`span`,{className:`tl-step-elapsed`,children:YE(j(r,t))}),(0,U.jsx)(`span`,{className:`tl-chevron`,children:e?(0,U.jsx)(p,{size:10}):(0,U.jsx)(ke,{size:10})})]})})]},r)}if(n.type===`status`)return(0,U.jsx)(`div`,{className:`tl-status`,children:n.message},r);if(n.type===`tool_use`){let t=M.get(r),a=t===void 0?void 0:e[t],o=a===void 0,c=a?.type===`tool_result`&&!!a.error,l=o?(0,U.jsx)(nt,{size:11,className:`tl-spinner`}):c?(0,U.jsx)(oe,{size:11}):(0,U.jsx)(WE,{name:n.name,size:11}),u=n,d=a?.type===`tool_result`?`Input:
|
|
343
|
+
`).filter(e=>e.trim());if(n.length<=1&&!n[0]?.includes(` `)&&!n[0]?.includes(`,`))return;e.preventDefault();let r=n.slice(0,TT).map(OT);n.length>TT&&console.warn(`Grid editor: paste truncated from ${n.length} to ${TT} rows`);let{row:i,col:a}=g;h(e=>{let t=e.map(e=>[...e]);for(let e=0;e<r.length;e++){let n=i+e;for(;n>=t.length;)t.push(Array(f.length).fill(``));for(let i=0;i<r[e].length;i++){let o=a+i;o<f.length&&(t[n][o]=r[e][i])}}return t}),A()},[g,f.length,A]),re=(0,H.useCallback)(()=>{let e=kT(f,m),t=new Blob([e],{type:`text/csv;charset=utf-8;`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=`${d.replace(/[^a-zA-Z0-9]/g,`_`)}.csv`,r.click(),URL.revokeObjectURL(n)},[f,m,d]),L=(0,H.useCallback)(()=>{pT({title:d,content:mT(f,m),brandName:l,brandLogo:u})},[d,f,m,l,u]),ie=(0,H.useCallback)((e,t)=>{t.preventDefault(),C.current={colIndex:e,startX:t.clientX,startWidth:x[e]};let n=null,r=e=>{C.current&&(n&&cancelAnimationFrame(n),n=requestAnimationFrame(()=>{if(!C.current)return;let t=e.clientX-C.current.startX,n=Math.max(ET,C.current.startWidth+t);S(e=>{let t=[...e];return t[C.current.colIndex]=n,t})}))},i=()=>{C.current=null,n&&cancelAnimationFrame(n),window.removeEventListener(`mousemove`,r),window.removeEventListener(`mouseup`,i)};window.addEventListener(`mousemove`,r),window.addEventListener(`mouseup`,i)},[x]),R=(0,H.useCallback)(()=>{g&&M.openCommentInput()},[g,M]),ae=(0,H.useCallback)(()=>{if(!g)return;let e=m[g.row]?.[g.col]??``;M.submitComment(e,{row:g.row,column:g.col})},[g,m,M]);if(n)return(0,U.jsxs)(`div`,{className:`editor-base grid-editor grid-editor--submitted`,children:[(0,U.jsxs)(`div`,{className:`editor-base__bar`,children:[(0,U.jsx)(`span`,{className:`editor-base__title`,children:d}),(0,U.jsx)(`div`,{className:`editor-base__actions`,children:(0,U.jsx)(`span`,{className:`editor-base__status`,children:`Submitted`})})]}),(0,U.jsx)(`div`,{className:`grid-editor__body`,children:(0,U.jsx)(`div`,{className:`grid-editor__table-wrap`,children:(0,U.jsxs)(`table`,{className:`grid-editor__table`,role:`grid`,"aria-label":d,children:[(0,U.jsx)(`thead`,{children:(0,U.jsx)(`tr`,{children:f.map((e,t)=>(0,U.jsx)(`th`,{className:`grid-editor__col-header`,style:{width:x[t]},children:e},t))})}),(0,U.jsx)(`tbody`,{children:m.map((e,t)=>(0,U.jsx)(`tr`,{children:e.map((e,t)=>(0,U.jsx)(`td`,{className:`grid-editor__cell`,role:`gridcell`,style:{width:x[t]},children:(0,U.jsx)(`span`,{className:`grid-editor__cell-text`,children:e})},t))},t))})]})})})]});let se=typeof window<`u`&&window.innerWidth<640,ce=typeof BroadcastChannel<`u`,ue=(0,U.jsxs)(`div`,{className:`editor-base__actions`,children:[w===`saving`&&(0,U.jsx)(`span`,{className:`editor-base__status`,children:`Saving...`}),w===`saved`&&(0,U.jsx)(`span`,{className:`editor-base__status`,children:`Saved`}),M.pendingComments.length>0&&(0,U.jsxs)(E,{variant:`ghost`,size:`sm`,onClick:M.sendComments,children:[`Send `,M.pendingComments.length,` comment`,M.pendingComments.length>1?`s`:``]}),g&&(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:at,onClick:R,"aria-label":`Comment on cell`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:de,onClick:re,"aria-label":`Download CSV`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:He,onClick:L,"aria-label":`Export PDF`}),!se&&ce&&!j.poppedOut&&(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:Be,onClick:j.handlePopout,"aria-label":`Pop out`}),!j.fullscreen&&(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:rt,onClick:j.handleFullscreen,"aria-label":`Full screen`}),j.fullscreen&&(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:ct,onClick:j.exitFullscreen,"aria-label":`Exit full screen`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:z,onClick:j.handleMinimise,"aria-label":`Minimise`})]}),fe=(0,U.jsxs)(`div`,{className:`grid-editor__table-wrap`,onPaste:ne,children:[M.showCommentInput?(0,U.jsxs)(`div`,{className:`grid-editor__comment-popover`,children:[(0,U.jsx)(`input`,{ref:M.commentInputRef,type:`text`,value:M.commentText,onChange:e=>M.setCommentText(e.target.value),onKeyDown:e=>{e.key===`Enter`&&ae(),e.key===`Escape`&&M.cancelComment()},placeholder:`Add a comment...`,className:`doc-editor__comment-input`,"aria-label":`Add comment on cell`}),(0,U.jsxs)(`div`,{className:`doc-editor__comment-actions`,children:[(0,U.jsx)(E,{variant:`primary`,size:`sm`,onClick:ae,disabled:!M.commentText.trim(),children:`Add`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:oe,onClick:M.cancelComment,"aria-label":`Cancel`})]})]}):null,(0,U.jsxs)(`table`,{className:`grid-editor__table`,role:`grid`,"aria-label":d,children:[(0,U.jsx)(`thead`,{children:(0,U.jsxs)(`tr`,{children:[(0,U.jsx)(`th`,{className:`grid-editor__row-header`}),f.map((e,t)=>(0,U.jsxs)(`th`,{className:`grid-editor__col-header`,style:{width:x[t]},children:[e,(0,U.jsx)(`div`,{className:`grid-editor__resize-handle`,onMouseDown:e=>ie(t,e),role:`separator`,"aria-orientation":`vertical`})]},t))]})}),(0,U.jsx)(`tbody`,{children:m.map((e,t)=>(0,U.jsxs)(`tr`,{children:[(0,U.jsxs)(`td`,{className:`grid-editor__row-header`,children:[(0,U.jsx)(`span`,{className:`grid-editor__row-num`,children:t+1}),m.length>1&&(0,U.jsx)(`button`,{className:`grid-editor__row-delete`,onClick:()=>I(t),"aria-label":`Delete row ${t+1}`,children:(0,U.jsx)(i,{size:12})})]}),e.map((e,n)=>{let r=g?.row===t&&g?.col===n;return(0,U.jsx)(`td`,{className:`grid-editor__cell ${r?`grid-editor__cell--active`:``}`,onClick:()=>!r&&N(t,n),role:`gridcell`,"aria-selected":r,style:{width:x[n]},children:r?(0,U.jsx)(`input`,{ref:b,type:`text`,className:`grid-editor__cell-input`,value:v,onChange:e=>y(e.target.value),onKeyDown:te,onBlur:P,"aria-label":`${f[n]} row ${t+1}`}):(0,U.jsx)(`span`,{className:`grid-editor__cell-text`,children:e})},n)})]},t))})]}),(0,U.jsxs)(`button`,{className:`grid-editor__add-row`,onClick:F,"aria-label":`Add row`,children:[(0,U.jsx)(je,{size:14}),(0,U.jsx)(`span`,{children:`Add row`})]})]});return j.fullscreen?(0,U.jsxs)(`div`,{className:`editor-base-fullscreen`,children:[(0,U.jsxs)(`div`,{className:`editor-base-fullscreen__bar`,...j.dragBarProps,children:[(0,U.jsx)(`span`,{className:`editor-base-fullscreen__title`,children:d}),ue]}),(0,U.jsx)(`div`,{className:`editor-base-fullscreen__body`,style:{maxWidth:`none`},children:fe})]}):j.poppedOut?(0,U.jsx)(`div`,{className:`editor-base editor-base--popout`,children:(0,U.jsxs)(`div`,{className:`editor-base__bar`,...j.dragBarProps,children:[(0,U.jsx)(`span`,{className:`editor-base__title`,children:d}),(0,U.jsxs)(`div`,{className:`editor-base__actions`,children:[(0,U.jsx)(`span`,{className:`editor-base__status`,children:`Popped out`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:ht,onClick:j.handlePopIn,"aria-label":`Pop back in`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:z,onClick:j.handleMinimise,"aria-label":`Close`})]})]})}):j.minimised?(0,U.jsx)(`div`,{className:`editor-base editor-base--minimised`,onClick:j.handleExpand,role:`button`,tabIndex:0,onKeyDown:e=>e.key===`Enter`&&j.handleExpand(),children:(0,U.jsxs)(`div`,{className:`editor-base__bar`,...j.dragBarProps,children:[(0,U.jsx)(`span`,{className:`editor-base__title`,children:d}),(0,U.jsxs)(`div`,{className:`editor-base__actions`,onClick:e=>e.stopPropagation(),children:[!se&&ce&&(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:Be,onClick:j.handlePopout,"aria-label":`Pop out`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:rt,onClick:j.handleFullscreen,"aria-label":`Full screen`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:le,onClick:j.handleExpand,"aria-label":`Expand`})]})]})}):(0,U.jsxs)(`div`,{className:`editor-base grid-editor`,children:[(0,U.jsxs)(`div`,{className:`editor-base__bar`,...j.dragBarProps,children:[(0,U.jsx)(`span`,{className:`editor-base__title`,children:d}),ue]}),(0,U.jsx)(`div`,{className:`grid-editor__body`,children:fe})]})}var MT=Object.defineProperty,NT=Object.getOwnPropertySymbols,PT=Object.prototype.hasOwnProperty,FT=Object.prototype.propertyIsEnumerable,IT=(e,t,n)=>t in e?MT(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,LT=(e,t)=>{for(var n in t||={})PT.call(t,n)&&IT(e,n,t[n]);if(NT)for(var n of NT(t))FT.call(t,n)&&IT(e,n,t[n]);return e},RT=(e,t)=>{var n={};for(var r in e)PT.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&NT)for(var r of NT(e))t.indexOf(r)<0&&FT.call(e,r)&&(n[r]=e[r]);return n},zT;(e=>{let t=class t{constructor(e,n,r,a){if(this.version=e,this.errorCorrectionLevel=n,this.modules=[],this.isFunction=[],e<t.MIN_VERSION||e>t.MAX_VERSION)throw RangeError(`Version value out of range`);if(a<-1||a>7)throw RangeError(`Mask value out of range`);this.size=e*4+17;let o=[];for(let e=0;e<this.size;e++)o.push(!1);for(let e=0;e<this.size;e++)this.modules.push(o.slice()),this.isFunction.push(o.slice());this.drawFunctionPatterns();let s=this.addEccAndInterleave(r);if(this.drawCodewords(s),a==-1){let e=1e9;for(let t=0;t<8;t++){this.applyMask(t),this.drawFormatBits(t);let n=this.getPenaltyScore();n<e&&(a=t,e=n),this.applyMask(t)}}i(0<=a&&a<=7),this.mask=a,this.applyMask(a),this.drawFormatBits(a),this.isFunction=[]}static encodeText(n,r){let i=e.QrSegment.makeSegments(n);return t.encodeSegments(i,r)}static encodeBinary(n,r){let i=e.QrSegment.makeBytes(n);return t.encodeSegments([i],r)}static encodeSegments(e,r,a=1,s=40,c=-1,l=!0){if(!(t.MIN_VERSION<=a&&a<=s&&s<=t.MAX_VERSION)||c<-1||c>7)throw RangeError(`Invalid value`);let u,d;for(u=a;;u++){let n=t.getNumDataCodewords(u,r)*8,i=o.getTotalBits(e,u);if(i<=n){d=i;break}if(u>=s)throw RangeError(`Data too long`)}for(let e of[t.Ecc.MEDIUM,t.Ecc.QUARTILE,t.Ecc.HIGH])l&&d<=t.getNumDataCodewords(u,e)*8&&(r=e);let f=[];for(let t of e){n(t.mode.modeBits,4,f),n(t.numChars,t.mode.numCharCountBits(u),f);for(let e of t.getData())f.push(e)}i(f.length==d);let p=t.getNumDataCodewords(u,r)*8;i(f.length<=p),n(0,Math.min(4,p-f.length),f),n(0,(8-f.length%8)%8,f),i(f.length%8==0);for(let e=236;f.length<p;e^=253)n(e,8,f);let m=[];for(;m.length*8<f.length;)m.push(0);return f.forEach((e,t)=>m[t>>>3]|=e<<7-(t&7)),new t(u,r,m,c)}getModule(e,t){return 0<=e&&e<this.size&&0<=t&&t<this.size&&this.modules[t][e]}getModules(){return this.modules}drawFunctionPatterns(){for(let e=0;e<this.size;e++)this.setFunctionModule(6,e,e%2==0),this.setFunctionModule(e,6,e%2==0);this.drawFinderPattern(3,3),this.drawFinderPattern(this.size-4,3),this.drawFinderPattern(3,this.size-4);let e=this.getAlignmentPatternPositions(),t=e.length;for(let n=0;n<t;n++)for(let r=0;r<t;r++)n==0&&r==0||n==0&&r==t-1||n==t-1&&r==0||this.drawAlignmentPattern(e[n],e[r]);this.drawFormatBits(0),this.drawVersion()}drawFormatBits(e){let t=this.errorCorrectionLevel.formatBits<<3|e,n=t;for(let e=0;e<10;e++)n=n<<1^(n>>>9)*1335;let a=(t<<10|n)^21522;i(a>>>15==0);for(let e=0;e<=5;e++)this.setFunctionModule(8,e,r(a,e));this.setFunctionModule(8,7,r(a,6)),this.setFunctionModule(8,8,r(a,7)),this.setFunctionModule(7,8,r(a,8));for(let e=9;e<15;e++)this.setFunctionModule(14-e,8,r(a,e));for(let e=0;e<8;e++)this.setFunctionModule(this.size-1-e,8,r(a,e));for(let e=8;e<15;e++)this.setFunctionModule(8,this.size-15+e,r(a,e));this.setFunctionModule(8,this.size-8,!0)}drawVersion(){if(this.version<7)return;let e=this.version;for(let t=0;t<12;t++)e=e<<1^(e>>>11)*7973;let t=this.version<<12|e;i(t>>>18==0);for(let e=0;e<18;e++){let n=r(t,e),i=this.size-11+e%3,a=Math.floor(e/3);this.setFunctionModule(i,a,n),this.setFunctionModule(a,i,n)}}drawFinderPattern(e,t){for(let n=-4;n<=4;n++)for(let r=-4;r<=4;r++){let i=Math.max(Math.abs(r),Math.abs(n)),a=e+r,o=t+n;0<=a&&a<this.size&&0<=o&&o<this.size&&this.setFunctionModule(a,o,i!=2&&i!=4)}}drawAlignmentPattern(e,t){for(let n=-2;n<=2;n++)for(let r=-2;r<=2;r++)this.setFunctionModule(e+r,t+n,Math.max(Math.abs(r),Math.abs(n))!=1)}setFunctionModule(e,t,n){this.modules[t][e]=n,this.isFunction[t][e]=!0}addEccAndInterleave(e){let n=this.version,r=this.errorCorrectionLevel;if(e.length!=t.getNumDataCodewords(n,r))throw RangeError(`Invalid argument`);let a=t.NUM_ERROR_CORRECTION_BLOCKS[r.ordinal][n],o=t.ECC_CODEWORDS_PER_BLOCK[r.ordinal][n],s=Math.floor(t.getNumRawDataModules(n)/8),c=a-s%a,l=Math.floor(s/a),u=[],d=t.reedSolomonComputeDivisor(o);for(let n=0,r=0;n<a;n++){let i=e.slice(r,r+l-o+(n<c?0:1));r+=i.length;let a=t.reedSolomonComputeRemainder(i,d);n<c&&i.push(0),u.push(i.concat(a))}let f=[];for(let e=0;e<u[0].length;e++)u.forEach((t,n)=>{(e!=l-o||n>=c)&&f.push(t[e])});return i(f.length==s),f}drawCodewords(e){if(e.length!=Math.floor(t.getNumRawDataModules(this.version)/8))throw RangeError(`Invalid argument`);let n=0;for(let t=this.size-1;t>=1;t-=2){t==6&&(t=5);for(let i=0;i<this.size;i++)for(let a=0;a<2;a++){let o=t-a,s=t+1&2?i:this.size-1-i;!this.isFunction[s][o]&&n<e.length*8&&(this.modules[s][o]=r(e[n>>>3],7-(n&7)),n++)}}i(n==e.length*8)}applyMask(e){if(e<0||e>7)throw RangeError(`Mask value out of range`);for(let t=0;t<this.size;t++)for(let n=0;n<this.size;n++){let r;switch(e){case 0:r=(n+t)%2==0;break;case 1:r=t%2==0;break;case 2:r=n%3==0;break;case 3:r=(n+t)%3==0;break;case 4:r=(Math.floor(n/3)+Math.floor(t/2))%2==0;break;case 5:r=n*t%2+n*t%3==0;break;case 6:r=(n*t%2+n*t%3)%2==0;break;case 7:r=((n+t)%2+n*t%3)%2==0;break;default:throw Error(`Unreachable`)}!this.isFunction[t][n]&&r&&(this.modules[t][n]=!this.modules[t][n])}}getPenaltyScore(){let e=0;for(let n=0;n<this.size;n++){let r=!1,i=0,a=[0,0,0,0,0,0,0];for(let o=0;o<this.size;o++)this.modules[n][o]==r?(i++,i==5?e+=t.PENALTY_N1:i>5&&e++):(this.finderPenaltyAddHistory(i,a),r||(e+=this.finderPenaltyCountPatterns(a)*t.PENALTY_N3),r=this.modules[n][o],i=1);e+=this.finderPenaltyTerminateAndCount(r,i,a)*t.PENALTY_N3}for(let n=0;n<this.size;n++){let r=!1,i=0,a=[0,0,0,0,0,0,0];for(let o=0;o<this.size;o++)this.modules[o][n]==r?(i++,i==5?e+=t.PENALTY_N1:i>5&&e++):(this.finderPenaltyAddHistory(i,a),r||(e+=this.finderPenaltyCountPatterns(a)*t.PENALTY_N3),r=this.modules[o][n],i=1);e+=this.finderPenaltyTerminateAndCount(r,i,a)*t.PENALTY_N3}for(let n=0;n<this.size-1;n++)for(let r=0;r<this.size-1;r++){let i=this.modules[n][r];i==this.modules[n][r+1]&&i==this.modules[n+1][r]&&i==this.modules[n+1][r+1]&&(e+=t.PENALTY_N2)}let n=0;for(let e of this.modules)n=e.reduce((e,t)=>e+(t?1:0),n);let r=this.size*this.size,a=Math.ceil(Math.abs(n*20-r*10)/r)-1;return i(0<=a&&a<=9),e+=a*t.PENALTY_N4,i(0<=e&&e<=2568888),e}getAlignmentPatternPositions(){if(this.version==1)return[];{let e=Math.floor(this.version/7)+2,t=this.version==32?26:Math.ceil((this.version*4+4)/(e*2-2))*2,n=[6];for(let r=this.size-7;n.length<e;r-=t)n.splice(1,0,r);return n}}static getNumRawDataModules(e){if(e<t.MIN_VERSION||e>t.MAX_VERSION)throw RangeError(`Version number out of range`);let n=(16*e+128)*e+64;if(e>=2){let t=Math.floor(e/7)+2;n-=(25*t-10)*t-55,e>=7&&(n-=36)}return i(208<=n&&n<=29648),n}static getNumDataCodewords(e,n){return Math.floor(t.getNumRawDataModules(e)/8)-t.ECC_CODEWORDS_PER_BLOCK[n.ordinal][e]*t.NUM_ERROR_CORRECTION_BLOCKS[n.ordinal][e]}static reedSolomonComputeDivisor(e){if(e<1||e>255)throw RangeError(`Degree out of range`);let n=[];for(let t=0;t<e-1;t++)n.push(0);n.push(1);let r=1;for(let i=0;i<e;i++){for(let e=0;e<n.length;e++)n[e]=t.reedSolomonMultiply(n[e],r),e+1<n.length&&(n[e]^=n[e+1]);r=t.reedSolomonMultiply(r,2)}return n}static reedSolomonComputeRemainder(e,n){let r=n.map(e=>0);for(let i of e){let e=i^r.shift();r.push(0),n.forEach((n,i)=>r[i]^=t.reedSolomonMultiply(n,e))}return r}static reedSolomonMultiply(e,t){if(e>>>8||t>>>8)throw RangeError(`Byte out of range`);let n=0;for(let r=7;r>=0;r--)n=n<<1^(n>>>7)*285,n^=(t>>>r&1)*e;return i(n>>>8==0),n}finderPenaltyCountPatterns(e){let t=e[1];i(t<=this.size*3);let n=t>0&&e[2]==t&&e[3]==t*3&&e[4]==t&&e[5]==t;return(n&&e[0]>=t*4&&e[6]>=t?1:0)+(n&&e[6]>=t*4&&e[0]>=t?1:0)}finderPenaltyTerminateAndCount(e,t,n){return e&&(this.finderPenaltyAddHistory(t,n),t=0),t+=this.size,this.finderPenaltyAddHistory(t,n),this.finderPenaltyCountPatterns(n)}finderPenaltyAddHistory(e,t){t[0]==0&&(e+=this.size),t.pop(),t.unshift(e)}};t.MIN_VERSION=1,t.MAX_VERSION=40,t.PENALTY_N1=3,t.PENALTY_N2=3,t.PENALTY_N3=40,t.PENALTY_N4=10,t.ECC_CODEWORDS_PER_BLOCK=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],t.NUM_ERROR_CORRECTION_BLOCKS=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],e.QrCode=t;function n(e,t,n){if(t<0||t>31||e>>>t)throw RangeError(`Value out of range`);for(let r=t-1;r>=0;r--)n.push(e>>>r&1)}function r(e,t){return(e>>>t&1)!=0}function i(e){if(!e)throw Error(`Assertion error`)}let a=class e{constructor(e,t,n){if(this.mode=e,this.numChars=t,this.bitData=n,t<0)throw RangeError(`Invalid argument`);this.bitData=n.slice()}static makeBytes(t){let r=[];for(let e of t)n(e,8,r);return new e(e.Mode.BYTE,t.length,r)}static makeNumeric(t){if(!e.isNumeric(t))throw RangeError(`String contains non-numeric characters`);let r=[];for(let e=0;e<t.length;){let i=Math.min(t.length-e,3);n(parseInt(t.substring(e,e+i),10),i*3+1,r),e+=i}return new e(e.Mode.NUMERIC,t.length,r)}static makeAlphanumeric(t){if(!e.isAlphanumeric(t))throw RangeError(`String contains unencodable characters in alphanumeric mode`);let r=[],i;for(i=0;i+2<=t.length;i+=2){let a=e.ALPHANUMERIC_CHARSET.indexOf(t.charAt(i))*45;a+=e.ALPHANUMERIC_CHARSET.indexOf(t.charAt(i+1)),n(a,11,r)}return i<t.length&&n(e.ALPHANUMERIC_CHARSET.indexOf(t.charAt(i)),6,r),new e(e.Mode.ALPHANUMERIC,t.length,r)}static makeSegments(t){return t==``?[]:e.isNumeric(t)?[e.makeNumeric(t)]:e.isAlphanumeric(t)?[e.makeAlphanumeric(t)]:[e.makeBytes(e.toUtf8ByteArray(t))]}static makeEci(t){let r=[];if(t<0)throw RangeError(`ECI assignment value out of range`);if(t<128)n(t,8,r);else if(t<16384)n(2,2,r),n(t,14,r);else if(t<1e6)n(6,3,r),n(t,21,r);else throw RangeError(`ECI assignment value out of range`);return new e(e.Mode.ECI,0,r)}static isNumeric(t){return e.NUMERIC_REGEX.test(t)}static isAlphanumeric(t){return e.ALPHANUMERIC_REGEX.test(t)}getData(){return this.bitData.slice()}static getTotalBits(e,t){let n=0;for(let r of e){let e=r.mode.numCharCountBits(t);if(r.numChars>=1<<e)return 1/0;n+=4+e+r.bitData.length}return n}static toUtf8ByteArray(e){e=encodeURI(e);let t=[];for(let n=0;n<e.length;n++)e.charAt(n)==`%`?(t.push(parseInt(e.substring(n+1,n+3),16)),n+=2):t.push(e.charCodeAt(n));return t}};a.NUMERIC_REGEX=/^[0-9]*$/,a.ALPHANUMERIC_REGEX=/^[A-Z0-9 $%*+.\/:-]*$/,a.ALPHANUMERIC_CHARSET=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:`;let o=a;e.QrSegment=a})(zT||={}),(e=>{(e=>{let t=class{constructor(e,t){this.ordinal=e,this.formatBits=t}};t.LOW=new t(0,1),t.MEDIUM=new t(1,0),t.QUARTILE=new t(2,3),t.HIGH=new t(3,2),e.Ecc=t})(e.QrCode||={})})(zT||={}),(e=>{(e=>{let t=class{constructor(e,t){this.modeBits=e,this.numBitsCharCount=t}numCharCountBits(e){return this.numBitsCharCount[Math.floor((e+7)/17)]}};t.NUMERIC=new t(1,[10,12,14]),t.ALPHANUMERIC=new t(2,[9,11,13]),t.BYTE=new t(4,[8,16,16]),t.KANJI=new t(8,[8,10,12]),t.ECI=new t(7,[0,0,0]),e.Mode=t})(e.QrSegment||={})})(zT||={});var BT=zT,VT={L:BT.QrCode.Ecc.LOW,M:BT.QrCode.Ecc.MEDIUM,Q:BT.QrCode.Ecc.QUARTILE,H:BT.QrCode.Ecc.HIGH},HT=128,UT=`L`,WT=`#FFFFFF`,GT=`#000000`,KT=!1,qT=1,JT=4,YT=0,XT=.1;function ZT(e,t=0){let n=[];return e.forEach(function(e,r){let i=null;e.forEach(function(a,o){if(!a&&i!==null){n.push(`M${i+t} ${r+t}h${o-i}v1H${i+t}z`),i=null;return}if(o===e.length-1){if(!a)return;i===null?n.push(`M${o+t},${r+t} h1v1H${o+t}z`):n.push(`M${i+t},${r+t} h${o+1-i}v1H${i+t}z`);return}a&&i===null&&(i=o)})}),n.join(``)}function QT(e,t){return e.slice().map((e,n)=>n<t.y||n>=t.y+t.h?e:e.map((e,n)=>n<t.x||n>=t.x+t.w?e:!1))}function $T(e,t,n,r){if(r==null)return null;let i=e.length+n*2,a=Math.floor(t*XT),o=i/t,s=(r.width||a)*o,c=(r.height||a)*o,l=r.x==null?e.length/2-s/2:r.x*o,u=r.y==null?e.length/2-c/2:r.y*o,d=r.opacity==null?1:r.opacity,f=null;if(r.excavate){let e=Math.floor(l),t=Math.floor(u);f={x:e,y:t,w:Math.ceil(s+l-e),h:Math.ceil(c+u-t)}}let p=r.crossOrigin;return{x:l,y:u,h:c,w:s,excavation:f,opacity:d,crossOrigin:p}}function eE(e,t){return t==null?e?JT:YT:Math.max(Math.floor(t),0)}function tE({value:e,level:t,minVersion:n,includeMargin:r,marginSize:i,imageSettings:a,size:o,boostLevel:s}){let c=H.useMemo(()=>{let r=(Array.isArray(e)?e:[e]).reduce((e,t)=>(e.push(...BT.QrSegment.makeSegments(t)),e),[]);return BT.QrCode.encodeSegments(r,VT[t],n,void 0,void 0,s)},[e,t,n,s]),{cells:l,margin:u,numCells:d,calculatedImageSettings:f}=H.useMemo(()=>{let e=c.getModules(),t=eE(r,i);return{cells:e,margin:t,numCells:e.length+t*2,calculatedImageSettings:$T(e,o,t,a)}},[c,o,a,r,i]);return{qrcode:c,margin:u,cells:l,numCells:d,calculatedImageSettings:f}}var nE=function(){try{new Path2D().addPath(new Path2D)}catch{return!1}return!0}(),rE=H.forwardRef(function(e,t){let n=e,{value:r,size:i=HT,level:a=UT,bgColor:o=WT,fgColor:s=GT,includeMargin:c=KT,minVersion:l=qT,boostLevel:u,marginSize:d,imageSettings:f}=n,p=RT(n,[`value`,`size`,`level`,`bgColor`,`fgColor`,`includeMargin`,`minVersion`,`boostLevel`,`marginSize`,`imageSettings`]),{style:m}=p,h=RT(p,[`style`]),g=f?.src,_=H.useRef(null),v=H.useRef(null),y=H.useCallback(e=>{_.current=e,typeof t==`function`?t(e):t&&(t.current=e)},[t]),[b,x]=H.useState(!1),{margin:S,cells:C,numCells:w,calculatedImageSettings:T}=tE({value:r,level:a,minVersion:l,boostLevel:u,includeMargin:c,marginSize:d,imageSettings:f,size:i});H.useEffect(()=>{if(_.current!=null){let e=_.current,t=e.getContext(`2d`);if(!t)return;let n=C,r=v.current,a=T!=null&&r!==null&&r.complete&&r.naturalHeight!==0&&r.naturalWidth!==0;a&&T.excavation!=null&&(n=QT(C,T.excavation));let c=window.devicePixelRatio||1;e.height=e.width=i*c;let l=i/w*c;t.scale(l,l),t.fillStyle=o,t.fillRect(0,0,w,w),t.fillStyle=s,nE?t.fill(new Path2D(ZT(n,S))):C.forEach(function(e,n){e.forEach(function(e,r){e&&t.fillRect(r+S,n+S,1,1)})}),T&&(t.globalAlpha=T.opacity),a&&t.drawImage(r,T.x+S,T.y+S,T.w,T.h)}}),H.useEffect(()=>{x(!1)},[g]);let E=LT({height:i,width:i},m),D=null;return g!=null&&(D=H.createElement(`img`,{src:g,key:g,style:{display:`none`},onLoad:()=>{x(!0)},ref:v,crossOrigin:T?.crossOrigin})),H.createElement(H.Fragment,null,H.createElement(`canvas`,LT({style:E,height:i,width:i,ref:y,role:`img`},h)),D)});rE.displayName=`QRCodeCanvas`;var iE=H.forwardRef(function(e,t){let n=e,{value:r,size:i=HT,level:a=UT,bgColor:o=WT,fgColor:s=GT,includeMargin:c=KT,minVersion:l=qT,boostLevel:u,title:d,marginSize:f,imageSettings:p}=n,m=RT(n,[`value`,`size`,`level`,`bgColor`,`fgColor`,`includeMargin`,`minVersion`,`boostLevel`,`title`,`marginSize`,`imageSettings`]),{margin:h,cells:g,numCells:_,calculatedImageSettings:v}=tE({value:r,level:a,minVersion:l,boostLevel:u,includeMargin:c,marginSize:f,imageSettings:p,size:i}),y=g,b=null;p!=null&&v!=null&&(v.excavation!=null&&(y=QT(g,v.excavation)),b=H.createElement(`image`,{href:p.src,height:v.h,width:v.w,x:v.x+h,y:v.y+h,preserveAspectRatio:`none`,opacity:v.opacity,crossOrigin:v.crossOrigin}));let x=ZT(y,h);return H.createElement(`svg`,LT({height:i,width:i,viewBox:`0 0 ${_} ${_}`,ref:t,role:`img`},m),!!d&&H.createElement(`title`,null,d),H.createElement(`path`,{fill:o,d:`M0,0 h${_}v${_}H0z`,shapeRendering:`crispEdges`}),H.createElement(`path`,{fill:s,d:x,shapeRendering:`crispEdges`}),b)});iE.displayName=`QRCodeSVG`;function aE({data:e,onSubmit:t,submitted:n}){let r=e,i=(0,H.useRef)(!1),a=r?.value?.trim()??``;return(0,H.useEffect)(()=>{a&&!n&&!i.current&&(i.current=!0,t(``))},[a,n,t]),a?(0,U.jsxs)(`div`,{className:`qr-code`,children:[(0,U.jsx)(`div`,{className:`qr-code__canvas`,children:(0,U.jsx)(iE,{value:a,size:240,level:`M`,bgColor:`#ffffff`,fgColor:`#000000`})}),r?.label&&(0,U.jsx)(`div`,{className:`qr-code__label`,children:r.label})]}):(0,U.jsx)(`div`,{className:`qr-code qr-code--error`,children:`No QR data provided. Try again or ask the agent to generate a new QR code.`})}function oE(e){return e===0?`0 B`:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function sE(e){return e.startsWith(`image/`)?(0,U.jsx)(We,{size:18}):e===`application/pdf`?(0,U.jsx)(g,{size:18}):e===`text/calendar`?(0,U.jsx)(V,{size:18}):e.startsWith(`text/`)?(0,U.jsx)(v,{size:18}):e===`application/zip`||e===`application/x-zip-compressed`?(0,U.jsx)(Ve,{size:18}):(0,U.jsx)(fe,{size:18})}function cE({data:e,onSubmit:t,submitted:n,cacheKey:r}){let i=e,a=(0,H.useRef)(!1),o=!!(i?.attachmentId&&i?.filename);(0,H.useEffect)(()=>{o&&!n&&!a.current&&(a.current=!0,t(JSON.stringify({_lifecycle:!0,component:`file-attachment`,event:`rendered`,attachmentId:i.attachmentId,filename:i.filename})))},[o,n,t,i]);let s=(0,H.useCallback)(()=>{if(!i?.attachmentId||!r)return;let e=`/api/admin/attachment/${i.attachmentId}?session_key=${encodeURIComponent(r)}`,t=document.createElement(`a`);t.href=e,t.download=i.filename,t.click()},[i,r]);return o?(0,U.jsx)(j,{submitted:!1,submittedLabel:`Downloaded`,actions:[{label:`Download`,variant:`primary`,onClick:s,disabled:!r}],children:(0,U.jsxs)(`div`,{className:`file-attachment`,children:[(0,U.jsx)(`div`,{className:`file-attachment__icon`,children:sE(i.mimeType)}),(0,U.jsxs)(`div`,{className:`file-attachment__info`,children:[(0,U.jsx)(`div`,{className:`file-attachment__name`,title:i.filename,children:i.filename}),(0,U.jsxs)(`div`,{className:`file-attachment__meta`,children:[oE(i.sizeBytes),` · `,i.mimeType]})]}),(0,U.jsx)(`button`,{className:`file-attachment__download`,onClick:s,disabled:!r,title:`Download file`,children:(0,U.jsx)(de,{size:16})})]})}):null}var lE=/^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$/,uE=/^[a-z0-9-]$/;function dE(e){return e?lE.test(e):!1}function fE(e){let t=e.toLowerCase(),n=``;for(let e of t)uE.test(e)&&(n+=e);for(;n.startsWith(`-`);)n=n.slice(1);return n}function pE(e){return[{key:`length`,label:`At least 8 characters`,met:e.length>=8},{key:`number`,label:`Contains a number`,met:/\d/.test(e)},{key:`special`,label:`Contains a special character`,met:/[^A-Za-z0-9]/.test(e)},{key:`whitespace`,label:`No spaces`,met:e.length>0&&!/\s/.test(e)}]}var mE=/https:\/\/dash\.cloudflare\.com\/argotunnel\?[^\s]+/,hE=/^OAUTH_URL:\s*(\S+)/,gE=/result=error\s+reason=([a-z0-9-]+)/;function _E(e){let t=e.match(hE);if(t)return t[1];let n=e.match(mE);return n?n[0]:null}function vE(e){let t=e.match(gE);return t?t[1]:null}var yE=/\[(\d+)\/(\d+)\]/,bE=/\bstep=([a-z0-9-]+)/,xE=2e3,SE=9e4;function CE(e){if(!e)return null;let t=e.match(yE);return t?parseInt(t[1],10):null}function wE({actionId:e,cacheKey:t,onExit:n,onOutcome:r,maxLines:i=1e3,selfRestart:a}){let[o,s]=(0,H.useState)([]),[c,l]=(0,H.useState)(null),[u,f]=(0,H.useState)(null),[p,m]=(0,H.useState)(null),[g,_]=(0,H.useState)(null),[v,y]=(0,H.useState)({phase:`idle`}),[b,x]=(0,H.useState)(!1),[S,C]=(0,H.useState)(null),w=(0,H.useRef)(null),T=(0,H.useRef)(new Set),E=(0,H.useRef)(null),D=(0,H.useRef)(0),O=(0,H.useRef)(null),k=(0,H.useRef)(null),A=(0,H.useRef)(null),j=(0,H.useRef)(null),M=(0,H.useRef)(null),N=(0,H.useRef)(null),P=ee(),te=(0,H.useRef)(n);te.current=n;let F=(0,H.useRef)(r);F.current=r;let I=(0,H.useCallback)(()=>{M.current&&=(clearInterval(M.current),null),N.current&&=(clearTimeout(N.current),null)},[]),ne=(0,H.useCallback)(e=>{e&&(w.current=e,C(e))},[]),re=(0,H.useCallback)(async()=>{if(g){y({phase:`respawning`});try{let e=await fetch(`/api/admin/device-browser/navigate`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({url:g,intent:`open Cloudflare authorisation page`,hostname:``})}),t=await e.json().catch(()=>({}));if(e.ok&&t.ok){P?.onShowVnc(),y({phase:`respawned`}),window.setTimeout(()=>y({phase:`idle`}),2500);return}y({phase:`failed`,reason:(t.navigateResult??t.detail??`navigation failed`).slice(0,80)})}catch(e){y({phase:`failed`,reason:(e instanceof Error?e.message:String(e)).slice(0,80)})}}},[g,P]),L=(0,H.useCallback)(()=>{let n=D.current>0?`&from=${D.current}`:``,r=new EventSource(`/api/admin/actions/${encodeURIComponent(e)}/stream?session_key=${encodeURIComponent(t)}${n}`);O.current=r,r.addEventListener(`line`,e=>{try{let t=JSON.parse(e.data);if(D.current=t.byteOffset,s(e=>{let n=[...e,t];return n.length>i&&n.splice(0,n.length-i),n}),!g){let e=_E(t.text);e&&_(e)}let n=t.text.match(yE);n&&ne(n[0]);let r=t.text.match(bE);r&&T.current.add(r[1]);let a=vE(t.text);a&&(E.current=a),m(null)}catch(e){console.error(`[ActionLogPanel] line parse failed:`,e)}}),r.addEventListener(`heartbeat`,e=>{try{let t=JSON.parse(e.data);A.current=t,l(t),ne(t.last_phase),m(null)}catch(e){console.error(`[ActionLogPanel] heartbeat parse failed:`,e)}}),r.addEventListener(`exit`,t=>{try{let n=JSON.parse(t.data);f(n);let r=n.code===0&&n.source===`persisted-log`?`restart-reconciled`:n.code===0?`completed`:n.code===null?n.kind===`restart-in-progress`?`restart-in-progress`:`exit-unobserved-no-restart-context`:`failed`;console.log(`[ActionLogPanel] outcome=${r} action=${e}`),te.current?.(n,E.current),F.current?.(r)}catch(e){console.error(`[ActionLogPanel] exit parse failed:`,e)}finally{r.close(),O.current=null,I(),x(!1)}}),r.onerror=()=>{if(u)return;r.close(),O.current=null;let e=CE(w.current),t=!!a?.atPhase&&e!==null&&e>=a.atPhase,n=!!a?.atStep&&T.current.has(a.atStep);if((t||n)&&j.current!==null){let e=t?`phase=${w.current}`:`step=${a?.atStep}`;console.log(`[ActionLogPanel] SSE drop during self-restart window (${e}) — banner suppressed`),m(null),x(!0),ie();return}m(`Connection lost — reconnecting…`),setTimeout(()=>{u||L()},1500)}},[e,t,i,a?.atPhase,a?.atStep,I]);function ie(){I(),M.current=setInterval(async()=>{try{let e=await fetch(`/api/admin/version`,{cache:`no-store`});if(!e.ok)return;let t=(await e.json())?.installed,n=j.current;t&&n&&t!==n&&(console.log(`[ActionLogPanel] admin-server version changed ${n}→${t} — reconnecting stream`),I(),x(!1),j.current=t,L())}catch{}},xE),N.current=setTimeout(()=>{console.log(`[ActionLogPanel] self-restart window timeout (${SE}ms) — reverting to error banner`),I(),x(!1),m(`New version did not come up — reconnecting…`),setTimeout(()=>{u||L()},1500)},SE)}(0,H.useEffect)(()=>(L(),()=>{O.current?.close(),O.current=null,I()}),[L,I]),(0,H.useEffect)(()=>{if(!a)return;let e=!1;return(async()=>{try{let t=await fetch(`/api/admin/version`,{cache:`no-store`});if(!t.ok)return;let n=await t.json();!e&&typeof n?.installed==`string`&&(j.current=n.installed)}catch{}})(),()=>{e=!0}},[e,a?.atPhase,a?.atStep]),(0,H.useEffect)(()=>{let e=k.current;e&&e.scrollHeight-e.scrollTop-e.clientHeight<80&&(e.scrollTop=e.scrollHeight)},[o]),(0,H.useEffect)(()=>{if(!u&&!b)return;let e=k.current;e&&(e.scrollTop=e.scrollHeight)},[u,b]);let R=e=>new Date(e).toLocaleTimeString(void 0,{hour12:!1}),ae=c?Math.floor(c.elapsed_since_last_line_ms/1e3):0,z=!u&&(p!==null||b),oe=z?`#666`:void 0,se=!u&&!z&&c&&ae>=5;return(0,U.jsxs)(`div`,{className:`action-log-panel`,style:{display:`flex`,flexDirection:`column`,height:`100%`,background:`#0a0a0a`,color:`#e8e8e8`,borderRadius:4,overflow:`hidden`,fontFamily:`ui-monospace, monospace`,fontSize:12},children:[(0,U.jsxs)(`div`,{style:{padding:`6px 10px`,borderBottom:`1px solid #222`,display:`flex`,gap:12,alignItems:`center`,flexWrap:`wrap`,fontSize:11},children:[(0,U.jsx)(`span`,{style:{color:`#888`},children:`action:`}),(0,U.jsx)(`span`,{children:e}),!!c&&!u&&c&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`span`,{style:{color:`#888`,marginLeft:`auto`},children:`state:`}),(0,U.jsx)(`span`,{style:{color:oe},children:c.systemd_state}),S&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`span`,{style:{color:`#888`},children:`phase:`}),(0,U.jsx)(`span`,{style:{color:oe},children:S})]}),z&&(0,U.jsx)(`span`,{style:{color:`#888`,fontStyle:`italic`},children:`(stale)`}),se&&(0,U.jsxs)(`span`,{style:{color:`#e4a657`,display:`inline-flex`,alignItems:`center`,gap:4},children:[(0,U.jsx)(d,{size:11}),` silent `,ae,`s`]})]})]}),g&&!u&&(0,U.jsxs)(`div`,{style:{padding:`8px 10px`,borderBottom:`1px solid #222`,background:`#1b1f2b`,display:`flex`,alignItems:`center`,gap:8,flexWrap:`wrap`},children:[(0,U.jsx)(`span`,{style:{color:`#cbd5f5`},children:`Authorise this device on the Pi’s browser — click the zone, then Authorize.`}),(0,U.jsxs)(`button`,{type:`button`,onClick:re,disabled:v.phase===`respawning`,style:{marginLeft:`auto`,color:`#fff`,background:`#f6821f`,padding:`4px 10px`,borderRadius:3,border:`none`,cursor:v.phase===`respawning`?`wait`:`pointer`,display:`inline-flex`,alignItems:`center`,gap:6,fontSize:11,opacity:v.phase===`respawning`?.7:1},title:`Re-opens the Cloudflare page on the Pi's VNC browser`,children:[(0,U.jsx)(h,{size:12}),v.phase===`respawning`?`Re-opening on Pi…`:v.phase===`respawned`?`Re-opened on Pi`:`Re-open on Pi browser`]}),v.phase===`failed`&&(0,U.jsxs)(`span`,{style:{width:`100%`,color:`#ffc987`,fontSize:11,marginTop:4},children:[`Could not re-open on Pi: `,v.reason,`. The page should still be on the Pi VNC from the initial spawn.`]})]}),p&&!b&&(0,U.jsxs)(`div`,{style:{padding:`6px 10px`,background:`#3a2b10`,color:`#ffc987`,display:`flex`,alignItems:`center`,gap:8},children:[(0,U.jsx)(ge,{size:12,className:`spin`}),` `,p]}),b&&(0,U.jsxs)(`div`,{style:{padding:`6px 10px`,background:`#132319`,color:`#9aeab0`,display:`flex`,alignItems:`center`,gap:8},children:[(0,U.jsx)(ge,{size:12,className:`spin`}),` Waiting for new version…`]}),(0,U.jsxs)(`div`,{ref:k,style:{flex:1,overflow:`auto`,padding:`6px 10px`,lineHeight:1.45,whiteSpace:`pre-wrap`,wordBreak:`break-word`},children:[o.length===0&&!u&&(0,U.jsx)(`div`,{style:{color:`#888`},children:`Waiting for output…`}),o.map(e=>(0,U.jsxs)(`div`,{style:{display:`flex`,gap:10,color:e.stream===`stderr`?`#ff9999`:`#e8e8e8`},children:[(0,U.jsx)(`span`,{style:{color:`#666`,flexShrink:0},children:R(e.ts)}),(0,U.jsx)(`span`,{children:e.text})]},e.byteOffset))]}),u&&(()=>{let e=u.code,t=e===null&&u.kind===`restart-in-progress`,n=e===0,r=e!==null&&e!==0,i=Math.round(u.duration_ms/1e3);return n?(0,U.jsxs)(`div`,{style:{padding:`8px 10px`,borderTop:`1px solid #222`,background:`#14331b`,color:`#9aeab0`,display:`flex`,alignItems:`center`,gap:8},children:[(0,U.jsx)(Ae,{size:13}),(0,U.jsxs)(`span`,{children:[`Completed · `,i,`s`]})]}):r?(0,U.jsxs)(`div`,{style:{padding:`8px 10px`,borderTop:`1px solid #222`,background:`#3a1717`,color:`#ff9999`,display:`flex`,alignItems:`center`,gap:8},children:[(0,U.jsx)(d,{size:13}),(0,U.jsxs)(`span`,{children:[`Failed (exit `,e,`) · `,i,`s`]})]}):t?(0,U.jsxs)(`div`,{style:{padding:`8px 10px`,borderTop:`1px solid #222`,background:`#132319`,color:`#9aeab0`,display:`flex`,alignItems:`center`,gap:8},children:[(0,U.jsx)(ge,{size:13,className:`spin`}),(0,U.jsxs)(`span`,{children:[`Restart in progress · `,i,`s`]})]}):(0,U.jsxs)(`div`,{style:{padding:`8px 10px`,borderTop:`1px solid #222`,background:`#3a2b10`,color:`#ffc987`,display:`flex`,alignItems:`center`,gap:8},children:[(0,U.jsx)(d,{size:13}),(0,U.jsxs)(`span`,{children:[`Failed (exit unobserved) · `,i,`s`]})]})})()]})}var TE={title:`Authorise the tunnel in your own browser`,intro:`The Pi's browser couldn't drive the Cloudflare consent page automatically. Open the dashboard in your own browser and follow these steps:`,steps:[`The "Authorize Cloudflare Tunnel" page shows every zone on the currently-active account.`,`Click the zone you want the tunnel to be able to route DNS for.`,`Click Authorize. The browser closes or shows "You can close this page."`,`Return here and click "Try again" — the cert will land and setup will continue.`],footnote:`If the account shown in the top-left of the dashboard is not the one that owns your zone, click the account-name dropdown first and switch accounts before authorising.`},EE=18e4,DE=4096;function OE(e){let t=new TextEncoder().encode(e);return t.length<=DE?e:`${new TextDecoder(`utf-8`,{fatal:!1}).decode(t.slice(0,DE))}\n… ${t.length-DE} bytes truncated (total ${t.length} bytes)`}var kE=`__create_new__`;function AE({data:e,onSubmit:t,submitted:n,cacheKey:r,messageId:i}){let a=e,[o,s]=(0,H.useState)({status:`loading`}),[c,l]=(0,H.useState)(``),[u,d]=(0,H.useState)(``),[f,p]=(0,H.useState)(``),[m,h]=(0,H.useState)(``),[g,_]=(0,H.useState)(``),[v,y]=(0,H.useState)(``),[b,x]=(0,H.useState)(!1),[S,C]=(0,H.useState)({status:`loading`}),[w,T]=(0,H.useState)(``),[E,D]=(0,H.useState)(``),[O,k]=(0,H.useState)(!1),[A,M]=(0,H.useState)(!1),[N,P]=(0,H.useState)(null),[ee,te]=(0,H.useState)(null),[F,I]=(0,H.useState)(null),ne=(0,H.useRef)(null),re=(0,H.useRef)(new Set),[L,ie]=(0,H.useState)(null),R=(0,H.useCallback)(async()=>{if(!r){s({status:`error`,field:`session`,message:`No session key available — refresh the page.`});return}s({status:`loading`});try{let e=await(await fetch(`/api/admin/cloudflare/domains?session_key=${encodeURIComponent(r)}`,{method:`GET`,headers:{Accept:`application/json`}})).json();if(!e.ok){s({status:`error`,field:e.field,message:e.message,output:e.output,correlationId:e.correlationId,streamLogPath:e.streamLogPath,brand:e.brand});return}if(e.domains.length===0){s({status:`empty`});return}s({status:`populated`,domains:e.domains}),d(t=>t||e.domains[0]),h(t=>t||e.domains[0])}catch(e){s({status:`error`,field:`script`,message:e instanceof Error?e.message:`Network error loading domains.`})}},[r]);(0,H.useEffect)(()=>{R()},[R]);let ae=(0,H.useCallback)(async()=>{if(!r){C({status:`error`,field:`session`,message:`No session key available — refresh the page.`});return}C({status:`loading`});try{let e=await(await fetch(`/api/admin/cloudflare/tunnels?session_key=${encodeURIComponent(r)}`,{method:`GET`,headers:{Accept:`application/json`}})).json();if(!e.ok){if(e.field===`cert`){C({status:`pre-oauth`,message:`First-time setup: we’ll sign you into Cloudflare and create the tunnel when you submit.`}),T(kE),e.defaultName&&D(t=>t||e.defaultName);return}C({status:`error`,field:e.field,message:e.message,output:e.output,correlationId:e.correlationId,streamLogPath:e.streamLogPath});return}if(e.tunnels.length===0){C({status:`empty`}),T(kE),e.defaultName&&D(t=>t||e.defaultName);return}C({status:`populated`,tunnels:e.tunnels});let t=e.tunnels.find(t=>t.name===e.defaultName);t?T(e=>e||t.id):(T(e=>e||kE),D(t=>t||e.defaultName))}catch(e){C({status:`error`,field:`script`,message:e instanceof Error?e.message:`Network error loading tunnels.`})}},[r]);(0,H.useEffect)(()=>{ae()},[ae]),(0,H.useEffect)(()=>()=>{ne.current&&clearTimeout(ne.current)},[]);let z=o.status===`populated`?o.domains:[],oe=e=>{n||O||(l(fE(e)),I(null))},se=e=>{n||O||(p(fE(e)),I(null))},ce=dE(c)&&u.length>0,le=f!==``,ue=!le||dE(f)&&m.length>0,de=ce?`${c.replace(/-+$/,``)}.${u}`:``,fe=le&&ue?`${f.replace(/-+$/,``)}.${m}`:``,pe=!(fe&&fe===de),me=pE(v),he=me.every(e=>e.met),ge=w===kE,_e=E.trim(),ve=/^[A-Za-z0-9_.-]{1,64}$/.test(_e),ye=w!==``&&(!ge||ve),be=S.status===`populated`||S.status===`empty`||S.status===`pre-oauth`,xe=o.status===`populated`&&be&&ye&&ce&&ue&&pe&&he&&!O,Se=c!==``&&!dE(c)?`Use lowercase letters, numbers, and hyphens. Start and end with a letter or number.`:null,Ce=le&&!dE(f)?`Use lowercase letters, numbers, and hyphens. Start and end with a letter or number.`:pe?null:`Public address must differ from the admin address.`,we=F?.field===`admin`?F.message:null,Te=F?.field===`public`?F.message:null,Ee=F?.field===`password`?F.message:null,B=F?.field===`script`||F?.field===`request`?F.message:null,De=()=>{M(!1),I(null),k(!1)},Oe=async()=>{if(!xe)return;if(!r){I({field:`request`,message:`No session key available — refresh the page.`});return}k(!0),I(null),M(!1);let e=new AbortController;ne.current=setTimeout(()=>{e.abort(),M(!0)},EE);let n={session_key:r,adminLabel:c.replace(/-+$/,``),adminDomain:u,password:v};le&&(n.publicLabel=f.replace(/-+$/,``),n.publicDomain=m),g&&(n.apex=g),i&&(n.messageId=i),ge?n.tunnelName=_e:n.tunnelId=w;try{let r=await fetch(`/api/admin/cloudflare/setup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(n),signal:e.signal});ne.current&&clearTimeout(ne.current),ne.current=null;let i=await r.json();if(!i.ok){I({field:i.field,message:i.message,output:i.output,correlationId:i.correlationId,streamLogPath:i.streamLogPath});let e=i.streamLogPath?`\n\nstream log: ${i.streamLogPath}`:``;t(i.output&&i.output.length>0?`Cloudflare setup failed: ${i.message}\n\n${i.output}${e}`:`Cloudflare setup failed: ${i.message}${e}`),k(!1);return}if(i.actionId){P(i.actionId);return}t(i.output)}catch(t){if(ne.current&&clearTimeout(ne.current),ne.current=null,e.signal.aborted)return;I({field:`script`,message:t instanceof Error?t.message:`Network error — try again.`}),k(!1)}},V=(0,H.useMemo)(()=>c?`${c}.${u||`your-domain`}`:`admin.${u||`your-domain`}`,[c,u]);if(o.status===`loading`)return(0,U.jsx)(j,{submitted:!1,actions:[],children:(0,U.jsxs)(`div`,{className:`form-input`,children:[a?.title&&(0,U.jsx)(`div`,{className:`form-input__title`,children:a.title}),(0,U.jsx)(`div`,{className:`form-input__desc`,children:`Reading the domains on your Cloudflare account…`})]})});if(o.status===`empty`)return(0,U.jsx)(j,{submitted:!1,actions:[{label:`Retry`,variant:`primary`,onClick:R}],children:(0,U.jsxs)(`div`,{className:`form-input`,children:[(0,U.jsx)(`div`,{className:`form-input__title`,children:`No domains on this Cloudflare account`}),(0,U.jsx)(`div`,{className:`form-input__desc`,children:`Add a domain in the Cloudflare dashboard first, then click Retry.`}),(0,U.jsxs)(`ol`,{className:`form-input__field-desc`,style:{margin:0,paddingLeft:20},children:[(0,U.jsxs)(`li`,{children:[`With the correct account active (top-left), click `,(0,U.jsx)(`strong`,{children:`Websites`}),` in the left-hand sidebar.`]}),(0,U.jsxs)(`li`,{children:[`Click the `,(0,U.jsx)(`strong`,{children:`Add a site`}),` button.`]}),(0,U.jsxs)(`li`,{children:[`Enter the bare domain (e.g. `,(0,U.jsx)(`code`,{children:`example.com`}),`) and click `,(0,U.jsx)(`strong`,{children:`Continue`}),`.`]}),(0,U.jsxs)(`li`,{children:[`Review Cloudflare's imported DNS records — preserve website (`,(0,U.jsx)(`code`,{children:`A`}),`), email (`,(0,U.jsx)(`code`,{children:`MX`}),`), and verification (`,(0,U.jsx)(`code`,{children:`TXT`}),`) entries.`]}),(0,U.jsx)(`li`,{children:`Copy Cloudflare's two nameservers and set them on your domain registrar.`}),(0,U.jsxs)(`li`,{children:[`Return to Cloudflare and click `,(0,U.jsx)(`strong`,{children:`Check nameservers`}),`. Wait for the zone to show `,(0,U.jsx)(`strong`,{children:`Active`}),`.`]})]})]})});if(o.status===`error`){let e=o.field===`config`,t=o.field===`dashboard`,n=e?`Cloudflare setup misconfigured for brand "${o.brand??`unknown`}"`:t?`Not signed into Cloudflare on this device`:`Could not read domains from Cloudflare`,r=e?`${o.message}. Re-run the installer to restamp brand.json with the correct cdpPort, then re-open this form. The verbatim script output below names the missing key.`:t?`Sign in again at the Cloudflare dashboard in the VNC browser, then click Retry. If the VNC browser is not open, ask me to run vnc.sh restart.`:o.message;return(0,U.jsx)(j,{submitted:!1,actions:e?[]:[{label:`Retry`,variant:`primary`,onClick:R}],children:(0,U.jsxs)(`div`,{className:`form-input`,children:[(0,U.jsx)(`div`,{className:`form-input__title`,children:n}),(0,U.jsx)(`div`,{className:`form-input__desc`,children:r}),o.output&&o.output.length>0&&(0,U.jsx)(`pre`,{style:{marginTop:8,padding:8,maxHeight:280,overflow:`auto`,fontFamily:`var(--font-mono, ui-monospace, monospace)`,fontSize:12,lineHeight:1.4,whiteSpace:`pre-wrap`,wordBreak:`break-word`,background:`var(--surface-2, rgba(0,0,0,0.04))`,borderRadius:4},children:OE(o.output)}),(o.correlationId||o.streamLogPath)&&(0,U.jsxs)(`div`,{style:{marginTop:8,fontFamily:`var(--font-mono, ui-monospace, monospace)`,fontSize:11,color:`var(--text-secondary)`,wordBreak:`break-all`},children:[o.correlationId&&(0,U.jsxs)(`div`,{children:[`conversationId: `,o.correlationId]}),o.streamLogPath&&(0,U.jsxs)(`div`,{children:[`stream log: `,o.streamLogPath]})]})]})})}if(ee)return(0,U.jsx)(j,{submitted:!1,actions:[{label:`Try again`,variant:`primary`,onClick:()=>{te(null),P(null),I(null),k(!1),M(!1)}}],children:(0,U.jsxs)(`div`,{className:`form-input`,children:[(0,U.jsx)(`div`,{className:`form-input__title`,children:ee.card.title}),(0,U.jsx)(`div`,{className:`form-input__desc`,style:{whiteSpace:`pre-wrap`},children:ee.card.intro}),(0,U.jsx)(`ol`,{style:{marginTop:10,paddingLeft:20,lineHeight:1.6},children:ee.card.steps.map((e,t)=>(0,U.jsx)(`li`,{children:e},t))}),ee.card.footnote&&(0,U.jsx)(`div`,{style:{marginTop:10,fontStyle:`italic`,color:`#666`},children:ee.card.footnote})]})});if(N&&r){let e=L===`completed`||L===`restart-reconciled`?`Cloudflare setup complete.`:L===`failed`||L===`exit-unobserved-no-restart-context`?`Cloudflare setup failed.`:L===`restart-in-progress`?`Restart in progress — agent will reply once the service is back.`:`Cloudflare setup in progress — keep this panel open until it completes.`;return(0,U.jsx)(j,{submitted:!1,actions:[],children:(0,U.jsxs)(`div`,{className:`form-input`,children:[a?.title&&(0,U.jsx)(`div`,{className:`form-input__title`,children:a.title}),(0,U.jsx)(`div`,{className:`form-input__desc`,children:e}),(0,U.jsx)(`div`,{style:{marginTop:10,height:360},children:(0,U.jsx)(wE,{actionId:N,cacheKey:r,selfRestart:{atStep:`service-restart-armed`},onOutcome:e=>ie(e),onExit:(e,n)=>{if(re.current.has(N)){Ft(`cloudflare-setup-form`,{kind:`suppressed-duplicate`,actionId:N,exitCode:e.code});return}if(re.current.add(N),e.code===0){let e=`Cloudflare setup completed (actionId: ${N}).`;Ft(`cloudflare-setup-form`,{kind:`post-restart-resume-armed`,actionId:N}),typeof window<`u`&&window.dispatchEvent(new CustomEvent(`admin-chat:post-restart-resume`,{detail:{actionId:N,message:e}}));return}if(n===`authorize-button-not-found`){te({card:TE,actionId:N,exitCode:e.code});return}t(`Cloudflare setup failed with exit code ${e.code} (actionId: ${N}).`)}})})]})})}return A?(0,U.jsx)(j,{submitted:!1,actions:[{label:`Reset form`,variant:`ghost`,onClick:De}],children:(0,U.jsxs)(`div`,{className:`form-input`,children:[(0,U.jsx)(`div`,{className:`form-input__title`,children:`Setup is taking longer than expected`}),(0,U.jsx)(`div`,{className:`form-input__desc`,children:`The request is still running on the device — check the chat for live progress. Do not resubmit. If the script fails, the error will appear in chat and you can retry from there.`})]})}):(0,U.jsx)(j,{submitted:n,submittedLabel:`Submitting…`,actions:[{label:O?`Setting up…`:a?.submitLabel??`Set up Cloudflare`,variant:`primary`,disabled:!xe,onClick:Oe}],children:(0,U.jsxs)(`div`,{className:`form-input`,children:[a?.title&&(0,U.jsx)(`div`,{className:`form-input__title`,children:a.title}),a?.description&&(0,U.jsx)(`div`,{className:`form-input__desc`,children:a.description}),(0,U.jsxs)(`div`,{className:`form-input__fields`,children:[(0,U.jsxs)(`div`,{className:`form-input__field`,children:[(0,U.jsxs)(`label`,{className:`form-input__label`,htmlFor:`cf-admin-label`,children:[`Admin address`,(0,U.jsx)(`span`,{className:`form-input__required`,children:`*`})]}),(0,U.jsxs)(`div`,{className:`tunnel-route__row`,children:[(0,U.jsx)(`input`,{id:`cf-admin-label`,className:`form-input__input tunnel-route__input`,type:`text`,autoCapitalize:`none`,autoComplete:`off`,autoCorrect:`off`,spellCheck:!1,placeholder:`admin`,value:c,onChange:e=>oe(e.target.value),disabled:n||O}),(0,U.jsx)(jE,{id:`cf-admin-domain`,value:u,options:z,onChange:d,disabled:n||O})]}),(0,U.jsx)(`div`,{className:`form-input__field-desc`,children:`Where you access your platform remotely, via your main domain.`}),(0,U.jsxs)(`div`,{className:`form-input__field-desc`,children:[`Preview: `,(0,U.jsx)(`span`,{className:`tunnel-route__preview`,children:V})]}),(we||Se)&&(0,U.jsx)(`div`,{className:`tunnel-route__error`,children:we??Se})]}),(0,U.jsxs)(`div`,{className:`form-input__field`,children:[(0,U.jsxs)(`label`,{className:`form-input__label`,htmlFor:`cf-public-label`,children:[`Public address`,(0,U.jsx)(`span`,{className:`tunnel-route__optional`,children:`Optional`})]}),(0,U.jsxs)(`div`,{className:`tunnel-route__row`,children:[(0,U.jsx)(`input`,{id:`cf-public-label`,className:`form-input__input tunnel-route__input`,type:`text`,autoCapitalize:`none`,autoComplete:`off`,autoCorrect:`off`,spellCheck:!1,placeholder:`public`,value:f,onChange:e=>se(e.target.value),disabled:n||O}),(0,U.jsx)(jE,{id:`cf-public-domain`,value:m,options:z,onChange:h,disabled:n||O||!le})]}),(0,U.jsx)(`div`,{className:`form-input__field-desc`,children:`Where visitors engage with your public agents, via your main domain. Leave empty for admin-only access.`}),(Te||Ce)&&(0,U.jsx)(`div`,{className:`tunnel-route__error`,children:Te??Ce})]}),(0,U.jsxs)(`div`,{className:`form-input__field`,children:[(0,U.jsxs)(`label`,{className:`form-input__label`,htmlFor:`cf-apex`,children:[`Proxy apex`,(0,U.jsx)(`span`,{className:`tunnel-route__optional`,children:`Optional`})]}),(0,U.jsxs)(an,{id:`cf-apex`,className:`form-input__select`,value:g,onChange:e=>_(e.target.value),disabled:n||O,children:[(0,U.jsx)(`option`,{value:``,children:`None`}),z.map(e=>(0,U.jsx)(`option`,{value:e,children:e},e))]}),(0,U.jsx)(`div`,{className:`form-input__field-desc`,children:`Alternative domain for public agent visitors.`})]}),(0,U.jsxs)(`div`,{className:`form-input__field`,children:[(0,U.jsxs)(`label`,{className:`form-input__label`,htmlFor:`cf-tunnel`,children:[`Tunnel`,(0,U.jsx)(`span`,{className:`form-input__required`,children:`*`})]}),S.status===`loading`&&(0,U.jsx)(`div`,{className:`form-input__field-desc`,children:`Loading tunnels from your Cloudflare account…`}),S.status===`error`&&(0,U.jsx)(`div`,{className:`tunnel-route__error`,children:S.message}),S.status===`pre-oauth`&&(0,U.jsx)(`div`,{className:`form-input__field-desc`,style:{marginBottom:4},children:S.message}),be&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(an,{id:`cf-tunnel`,className:`form-input__select`,value:w,onChange:e=>T(e.target.value),disabled:n||O,children:[S.status===`populated`&&(0,U.jsxs)(U.Fragment,{children:[w===``&&(0,U.jsx)(`option`,{value:``,children:`Select a tunnel…`}),S.tunnels.map(e=>(0,U.jsx)(`option`,{value:e.id,children:e.name},e.id))]}),(0,U.jsx)(`option`,{value:kE,children:`+ Create a new tunnel…`})]}),ge&&(0,U.jsx)(`div`,{className:`tunnel-route__row`,style:{marginTop:8},children:(0,U.jsx)(`input`,{id:`cf-tunnel-new-name`,className:`form-input__input tunnel-route__input`,type:`text`,autoCapitalize:`none`,autoComplete:`off`,autoCorrect:`off`,spellCheck:!1,placeholder:`new-tunnel-name`,value:E,onChange:e=>D(e.target.value),disabled:n||O})}),(0,U.jsx)(`div`,{className:`form-input__field-desc`,children:S.status===`pre-oauth`?`Use letters, digits, dots, dashes, underscores. 1–64 characters.`:S.status===`empty`?`No existing tunnels on your Cloudflare account — give the new tunnel a name.`:ge?`Use letters, digits, dots, dashes, underscores. 1–64 characters.`:`Existing tunnels from the Cloudflare account you signed into. Hostnames you set above will be CNAME’d to whichever tunnel you pick.`}),ge&&E!==``&&!ve&&(0,U.jsx)(`div`,{className:`tunnel-route__error`,children:`Use letters, digits, dots, dashes, underscores. 1–64 characters.`}),F?.field===`tunnel`&&(0,U.jsx)(`div`,{className:`tunnel-route__error`,children:F.message})]})]}),(0,U.jsxs)(`div`,{className:`form-input__field`,children:[(0,U.jsxs)(`label`,{className:`form-input__label`,htmlFor:`cf-password`,children:[`Admin password`,(0,U.jsx)(`span`,{className:`form-input__required`,children:`*`})]}),(0,U.jsxs)(`div`,{className:`tunnel-route__row`,children:[(0,U.jsx)(`input`,{id:`cf-password`,className:`form-input__input tunnel-route__input`,type:b?`text`:`password`,autoCapitalize:`none`,autoComplete:`new-password`,autoCorrect:`off`,spellCheck:!1,value:v,onChange:e=>{y(e.target.value),I(null)},disabled:n||O}),(0,U.jsx)(`button`,{type:`button`,className:`tunnel-route__suffix`,onClick:()=>x(e=>!e),disabled:n||O,style:{cursor:`pointer`,border:`none`,background:`inherit`},"aria-label":b?`Hide password`:`Show password`,children:b?`Hide`:`Show`})]}),(0,U.jsx)(`ul`,{className:`form-input__field-desc`,style:{margin:0,paddingLeft:16},children:me.map(e=>(0,U.jsxs)(`li`,{style:{color:e.met?`var(--text)`:`var(--text-secondary)`},children:[e.met?`✓`:`○`,` `,e.label]},e.key))}),Ee&&(0,U.jsx)(`div`,{className:`tunnel-route__error`,children:Ee})]}),B&&(0,U.jsxs)(`div`,{className:`tunnel-route__error`,role:`alert`,children:[(0,U.jsx)(`div`,{children:B}),F?.output&&F.output.length>0&&(0,U.jsx)(`pre`,{style:{marginTop:8,padding:8,maxHeight:280,overflow:`auto`,fontFamily:`var(--font-mono, ui-monospace, monospace)`,fontSize:12,lineHeight:1.4,whiteSpace:`pre-wrap`,wordBreak:`break-word`,background:`var(--surface-2, rgba(0,0,0,0.04))`,borderRadius:4},children:OE(F.output)}),(F?.correlationId||F?.streamLogPath)&&(0,U.jsxs)(`div`,{style:{marginTop:8,fontFamily:`var(--font-mono, ui-monospace, monospace)`,fontSize:11,color:`var(--text-secondary)`,wordBreak:`break-all`},children:[F.correlationId&&(0,U.jsxs)(`div`,{children:[`conversationId: `,F.correlationId]}),F.streamLogPath&&(0,U.jsxs)(`div`,{children:[`stream log: `,F.streamLogPath]})]})]})]})]})})}function jE({id:e,value:t,options:n,onChange:r,disabled:i}){return(0,U.jsx)(an,{id:e,className:`tunnel-route__suffix`,value:t,onChange:e=>r(e.target.value),disabled:i,children:n.map(e=>(0,U.jsxs)(`option`,{value:e,children:[`.`,e]},e))})}var ME={"single-select":C,"multi-select":F,confirm:tn,"info-card":nn,"action-list":rn,form:on,progress:cn,"browser-viewer":dn,"rich-content-editor":wT,"grid-editor":jT,"qr-code":aE,"file-attachment":cE,"action-buttons":P,"cloudflare-setup-form":AE,"output-style":C,"thinking-view":C,"plugin-selector":F};function NE(e){let{data:t,filePath:n,attachmentId:r,onOpen:i}=e,a=n.split(`/`).pop()||n||`document.md`,o=(a.split(`.`).pop()||`doc`).toUpperCase().slice(0,6),s=!r,c=r??(n||a),l=(0,H.useRef)(!1);return(0,H.useEffect)(()=>{l.current||(l.current=!0,s&&console.warn(`[admin-ui] artefact-open-missing-attachmentId filePath=${n.slice(0,40)}`),i({docId:c,name:a,content:t.content??``,editable:!s}))},[c,a,t.content,i,s,n]),(0,U.jsx)(`div`,{className:`component-card artefact-ref-card`,children:(0,U.jsxs)(`button`,{type:`button`,className:`artefact-ref-button`,onClick:()=>i({docId:c,name:a,content:t.content??``,editable:!s}),children:[(0,U.jsx)(`span`,{className:`artefact-ref-icon`,children:(0,U.jsx)(g,{size:16})}),(0,U.jsxs)(`span`,{className:`artefact-ref-meta`,children:[(0,U.jsx)(`span`,{className:`artefact-ref-name`,children:a}),(0,U.jsxs)(`span`,{className:`artefact-ref-tag`,children:[o,` · open in artefact pane`]})]}),(0,U.jsx)(`span`,{className:`artefact-ref-open`,children:(0,U.jsx)(Be,{size:14})})]})})}function PE({name:e,data:t,onSubmit:n,submitted:r,isStreaming:i,cacheKey:a,messageId:o,onOpenArtefact:s,attachmentId:c}){if(e===`document-editor`&&s){let e=t??{};return(0,U.jsx)(NE,{data:e,filePath:e.filePath||e.title||`document.md`,attachmentId:c,onOpen:s})}if(e===`document-editor`)return(0,U.jsx)(cT,{data:t,onSubmit:n,submitted:r,isStreaming:i});let l=ME[e];return l?(0,U.jsx)(l,{data:t,onSubmit:n,submitted:r,isStreaming:i,cacheKey:a,messageId:o}):(console.warn(`[ComponentRenderer] Unknown component: "${e}". Registered: ${Object.keys(ME).join(`, `)}`),(0,U.jsx)(`div`,{className:`component-card component-card--error`,children:(0,U.jsxs)(`p`,{style:{fontFamily:`var(--font-body)`,fontSize:12,color:`var(--text-secondary)`},children:[`Component “`,e,`” is not available. This may require a platform update.`]})}))}var FE=/\b(?:fail|error|unable|could not|cannot|CAPTCHA|SIGN_IN_REQUIRED)\b/i;function IE(e){let t=new Date(e),n=new Date,r=String(t.getHours()).padStart(2,`0`),i=String(t.getMinutes()).padStart(2,`0`);return t.toDateString()===n.toDateString()?`${r}:${i}`:`${String(t.getDate()).padStart(2,`0`)}-${String(t.getMonth()+1).padStart(2,`0`)}-${t.getFullYear()} ${r}:${i}`}var LE=[_t,mt,Te,le,Re];function RE({size:e=13}){let[t,n]=(0,H.useState)(0);(0,H.useEffect)(()=>{let e=setInterval(()=>n(e=>(e+1)%8),300);return()=>clearInterval(e)},[]);let r=t<=4?t:8-t,i=LE[r];return(0,U.jsx)(i,{size:e,className:`star-loader star-frame-${r}`})}var zE=[`Thinking`,`Reasoning`,`Analyzing`,`Considering`,`Reflecting`,`Evaluating`,`Weighing`,`Synthesizing`,`Processing`,`Exploring`,`Examining`,`Assessing`,`Reviewing`,`Contemplating`,`Deliberating`],BE=60,VE=1500;function HE(){let e=(0,H.useRef)(-1),t=(0,H.useRef)(void 0),[n,r]=(0,H.useState)(()=>{let t=Math.floor(Math.random()*zE.length);return e.current=t,zE[t]+`…`});return(0,H.useEffect)(()=>{let n=!1;function i(){let t;do t=Math.floor(Math.random()*zE.length);while(t===e.current&&zE.length>1);return e.current=t,t}function a(){if(n)return;let e=zE[i()]+`…`,o=0;function s(){n||(o++,r(e.slice(0,o)),o<e.length?t.current=setTimeout(s,BE):t.current=setTimeout(a,VE))}t.current=setTimeout(s,BE)}return t.current=setTimeout(a,VE),()=>{n=!0,clearTimeout(t.current)}},[]),(0,U.jsx)(`span`,{className:`tl-thinking-typewriter`,children:n})}function UE(e,t){let n=e=>String(e??``);switch(e){case`Read`:return`Read ${n(t.file_path??t.path)}`;case`Write`:return`Write ${n(t.file_path??t.path)}`;case`Edit`:return`Edit ${n(t.file_path??t.path)}`;case`Bash`:return n(t.description??String(t.command??``).slice(0,70));case`Glob`:return`Glob ${n(t.pattern)}`;case`Grep`:return`Grep "${n(t.pattern)}" in ${n(t.path??`.`)}`;case`WebFetch`:return`Fetch ${n(t.url)}`;case`Agent`:return n(t.description??t.task??`Subagent`);case`Skill`:return n(t.skill??`Skill`);default:{let r=e.match(/^mcp__[^_]+__(.+)$/),i=r?r[1]:e,a=Object.keys(t)[0];return a?`${i}: ${n(t[a]).slice(0,50)}`:i}}}function WE({name:e,size:t=12}){let n=e.match(/^mcp__[^_]+__(.+)$/);switch(n?n[1]:e){case`Read`:return(0,U.jsx)(g,{size:t});case`Write`:return(0,U.jsx)(Ke,{size:t});case`Edit`:return(0,U.jsx)(Ge,{size:t});case`Bash`:return(0,U.jsx)(vt,{size:t});case`Glob`:case`Grep`:return(0,U.jsx)(he,{size:t});case`WebFetch`:return(0,U.jsx)(h,{size:t});case`Agent`:return(0,U.jsx)(De,{size:t});case`Skill`:return(0,U.jsx)(mt,{size:t});case`memory-search`:return(0,U.jsx)(Le,{size:t});case`memory-write`:return(0,U.jsx)(Ie,{size:t});case`task-list`:return(0,U.jsx)(Me,{size:t});case`task-create`:return(0,U.jsx)(Ne,{size:t});case`contact-create`:return(0,U.jsx)(yt,{size:t});default:return(0,U.jsx)(xt,{size:t})}}function GE(e){let t=new Map,n=new Map;return e.forEach((e,r)=>{if(e.type===`tool_use`){let t=n.get(e.name)??[];t.push(r),n.set(e.name,t)}else if(e.type===`tool_result`){let i=n.get(e.name);i?.length&&t.set(i.shift(),r)}}),t}function KE(e){return e>=1e3?`${(e/1e3).toFixed(1)}k`:String(e)}function qE(e){let t=``;switch(e.type){case`text`:case`thinking`:t=e.content??``;break;case`tool_use`:t=JSON.stringify(e.input??{});break;case`tool_result`:t=e.output??``;break;case`subagent_start`:t=e.task??``;break;case`subagent_end`:t=e.result??``;break;case`component`:t=JSON.stringify(e.data??{});break;case`status`:t=e.message??``;break;default:return 0}return Math.ceil(t.length/4)}function JE(e){if(e<60)return`${e}s`;let t=Math.floor(e/60),n=e%60;return n>0?`${t}m ${n}s`:`${t}m`}function YE(e){if(e<60)return`${e.toFixed(1)}s`;let t=Math.floor(e/60),n=e%60;return n>=.1?`${t}m ${Math.floor(n)}s`:`${t}m`}function XE({icon:e,isPending:t,isError:n,doneClass:r=`tl-done`,summary:i,detail:a,tokens:o,elapsed:s,isLast:c,expanded:l,onToggle:u,selectCheck:d}){let f=!!a;return(0,U.jsxs)(`div`,{className:`tl-step`,children:[d,(0,U.jsxs)(`div`,{className:`tl-col`,children:[(0,U.jsx)(`div`,{className:`tl-icon${t?` tl-pending`:n?` tl-error`:` ${r}`}`,children:e}),!c&&(0,U.jsx)(`div`,{className:`tl-line tl-line-grow`})]}),(0,U.jsxs)(`div`,{className:`tl-body`,children:[(0,U.jsxs)(`div`,{className:`tl-row`,onClick:f?()=>{window.getSelection()?.toString()||u()}:void 0,style:{cursor:f?`pointer`:`default`},children:[(0,U.jsx)(`span`,{className:`tl-summary`,children:i}),o>0&&(0,U.jsxs)(`span`,{className:`tl-step-tokens`,children:[(0,U.jsx)(St,{size:9}),KE(o)]}),(0,U.jsx)(`span`,{className:`tl-step-elapsed`,children:YE(s)}),f&&(0,U.jsx)(`span`,{className:`tl-chevron`,children:l?(0,U.jsx)(p,{size:10}):(0,U.jsx)(ke,{size:10})})]}),f&&l&&(0,U.jsx)(`pre`,{className:`tl-detail`,children:a})]})]})}function ZE({events:e,isStreaming:t,elapsedSeconds:n,streamStartMs:r,expandAll:i,onCompactNow:a,isCompacting:o,sessionCompacted:s,onComponentSubmit:c,submittedComponents:l,timestamp:u,selectionMode:d,selectedItems:f,onToggleItem:h,cacheKey:g,messageId:_,onOpenArtefact:v}){let[y,b]=(0,H.useState)(new Set),[x,S]=(0,H.useState)(!t),C=(0,H.useRef)(t);(0,H.useEffect)(()=>{C.current&&!t&&S(!0),!C.current&&t&&S(!1),C.current=t},[t]);let T=(0,H.useRef)(new Map),D=(0,H.useRef)(0),[O,k]=(0,H.useState)(Date.now());(0,H.useEffect)(()=>{let t=Date.now();for(let n=D.current;n<e.length;n++)T.current.has(n)||T.current.set(n,t);D.current=e.length},[e]),(0,H.useEffect)(()=>{if(!t)return;let e=setInterval(()=>k(Date.now()),100);return()=>clearInterval(e)},[t]);let A=e=>{b(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},j=(e,t)=>{let n=e===R[0]?.i&&r?r:T.current.get(e)??O,i=t===void 0?O:T.current.get(t)??O;return Math.max(0,(i-n)/1e3)},M=GE(e),N=new Set(M.values()),P=e.map((e,t)=>({e,i:t})).filter(({e})=>e.type===`text`),ee=new Set(t?[]:e.map((e,t)=>({e,i:t})).filter(({e})=>e.type===`component`).map(({i:e})=>e)),te=e=>e.type===`component`&&[`browser-viewer`,`qr-code`].includes(e.name);function F(e){if(!d||t||!u)return null;let n=`${u}_${e}`;return(0,U.jsx)(`div`,{className:`tl-select-check`,onClick:e=>e.stopPropagation(),children:(0,U.jsx)(Se,{checked:f?.has(n)??!1,onChange:()=>h?.(n)})})}let I=e.findLast(e=>e.type===`usage`),re=e.findLast(e=>e.type===`history_usage`),L=e.findLast(e=>e.type===`status`),ie=e.some(e=>e.type===`subagent_start`),R=e.map((e,t)=>({e,i:t})).filter(({e,i:n})=>e.type!==`text`&&e.type!==`usage`&&e.type!==`rate_limit`&&e.type!==`history_usage`&&e.type!==`status`&&e.type!==`done`&&e.type!==`subagent_progress`&&!N.has(n)&&!ee.has(n)&&!(t&&e.type===`component`&&!te(e))&&!(e.type===`tool_use`&&e.name===`Agent`&&ie)),ae=new Map;for(let e=0;e<R.length-1;e++)ae.set(R[e].i,R[e+1].i);let z=(()=>{let e=[],t=!1,n=0;for(let{e:r}of R)if(n+=qE(r),r.type===`thinking`)t=!0;else if(r.type===`tool_use`){let t=r.name;e.includes(t)||e.push(t)}let r=[`${R.length} step${R.length===1?``:`s`}`];if(e.length>0){let t=e.slice(0,3),n=e.length-t.length;r.push(t.join(`, `)+(n>0?` +${n}`:``))}return{text:r.join(` · `),hasThinking:t,tokenSum:n}})(),se=I?.peak_request_pct==null?I?.context_window?Math.round((I.input_tokens+I.cache_creation_tokens+I.cache_read_tokens)/I.context_window*100):null:Math.round(I.peak_request_pct*100),ce=R.length>0,le=P.length>0,ue=new Set(R.map(e=>e.i)),de=new Set(P.map(e=>e.i)),fe=[];for(let t=0;t<e.length;t++){let n=e[t],r=null;if(ue.has(t)?r=`steps`:de.has(t)&&(r=`text`),!r)continue;let i=fe[fe.length-1];i&&i.role===r?i.items.push({e:n,i:t}):fe.push({role:r,items:[{e:n,i:t}]})}let pe=P.length>0?P[P.length-1].i:-1;function me(n,r,a,o){let s=o===a.length-1;if(n.type===`thinking`){let e=i===void 0?!y.has(r):i,t=ae.get(r);return(0,U.jsxs)(`div`,{className:`tl-step`,children:[F(r),(0,U.jsxs)(`div`,{className:`tl-col`,children:[(0,U.jsx)(`div`,{className:`tl-icon tl-dim`,children:(0,U.jsx)(Qe,{size:11})}),!s&&(0,U.jsx)(`div`,{className:`tl-line tl-line-grow`})]}),(0,U.jsx)(`div`,{className:`tl-body`,children:(0,U.jsxs)(`div`,{className:`tl-row tl-row-top`,onClick:()=>{window.getSelection()?.toString()||A(r)},style:{cursor:`pointer`},children:[(0,U.jsx)(`div`,{className:`tl-thinking-col`,children:e?(0,U.jsx)(`div`,{className:`tl-thinking-body`,children:n.content}):(0,U.jsxs)(`span`,{className:`tl-summary tl-thinking-label`,children:[n.content.slice(0,80),n.content.length>80?`…`:``]})}),qE(n)>0&&(0,U.jsxs)(`span`,{className:`tl-step-tokens`,children:[(0,U.jsx)(St,{size:9}),KE(qE(n))]}),(0,U.jsx)(`span`,{className:`tl-step-elapsed`,children:YE(j(r,t))}),(0,U.jsx)(`span`,{className:`tl-chevron`,children:e?(0,U.jsx)(p,{size:10}):(0,U.jsx)(ke,{size:10})})]})})]},r)}if(n.type===`status`)return(0,U.jsx)(`div`,{className:`tl-status`,children:n.message},r);if(n.type===`tool_use`){let t=M.get(r),a=t===void 0?void 0:e[t],o=a===void 0,c=a?.type===`tool_result`&&!!a.error,l=o?(0,U.jsx)(nt,{size:11,className:`tl-spinner`}):c?(0,U.jsx)(oe,{size:11}):(0,U.jsx)(WE,{name:n.name,size:11}),u=n,d=a?.type===`tool_result`?`Input:
|
|
344
344
|
${JSON.stringify(u.input,null,2)}
|
|
345
345
|
|
|
346
346
|
Result:
|
|
@@ -349,4 +349,4 @@ ${JSON.stringify(u.input,null,2)}`,f=ae.get(r),p=o?void 0:f??t;return(0,U.jsx)(X
|
|
|
349
349
|
|
|
350
350
|
---
|
|
351
351
|
|
|
352
|
-
`)}var nD=`Cloudflare setup completed (actionId: `,rD=`{"_componentDone"`,iD=`{"_lifecycle"`;function aD(e){return typeof e!=`string`||e.length===0?!1:e.startsWith(rD)||e.startsWith(iD)||e.startsWith(nD)}function oD(e){let{row:t,surface:n,isStreaming:r,activeCacheKey:a,isLogsOpen:o,onLogsToggle:s,onRequestRename:c,onResume:l,onDelete:u,onSwitchPreFlush:d}=e,f=t.phase===`pre-flush`,p=f&&t.cacheKey!==null&&t.cacheKey!==a;return(0,U.jsxs)(`div`,{className:`conversations-row-actions`,"data-surface":n,children:[(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-logs`,title:f?`View pre-flush logs`:`View logs`,"aria-haspopup":`menu`,"aria-expanded":o,onClick:e=>{e.stopPropagation(),s(e.currentTarget)},children:(0,U.jsx)(g,{size:13})}),p&&d&&(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-play`,title:`Switch into this in-memory session`,disabled:r||!a,onClick:e=>{e.stopPropagation(),!(r||!a)&&d()},children:(0,U.jsx)(_,{size:13})}),!f&&t.conversationId&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-rename`,title:`Rename conversation`,onClick:e=>{e.stopPropagation(),c()},children:(0,U.jsx)(ft,{size:13})}),(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-play`,title:`Resume conversation`,disabled:r,onClick:e=>{e.stopPropagation(),!(r||!a)&&l()},children:(0,U.jsx)(_,{size:13})}),(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-delete`,title:`Delete conversation`,onClick:e=>{e.stopPropagation(),u()},children:(0,U.jsx)(i,{size:13})})]})]})}var sD=[{type:`stream`,label:`Stream`},{type:`error`,label:`Errors`},{type:`sse`,label:`SSE`}];function cD(e){let{state:t,popoverRef:n,surface:r,buildLogsUrl:i,onClose:a}=e;return t?(0,U.jsx)(`div`,{ref:n,className:`conversations-logs-popover`,role:`menu`,style:{top:t.top,right:t.right},"data-surface":r,children:sD.map(({type:e,label:n})=>(0,U.jsxs)(`a`,{role:`menuitem`,className:`conversations-logs-popover-item`,href:i({conversationId:t.conversationId,cacheKey:t.cacheKey},e),target:`_blank`,rel:`noopener noreferrer`,onClick:()=>{console.debug(`[admin-logs-popover] open-log`,{surface:r,conversationId:t.conversationId,cacheKey:t.cacheKey,type:e}),a()},children:[(0,U.jsx)(g,{size:12}),(0,U.jsx)(`span`,{children:n})]},e))}):null}function lD(e){let[t,n]=(0,H.useState)(null),r=(0,H.useRef)(null),i=(0,H.useCallback)(()=>n(null),[]),a=(0,H.useCallback)((e,t,r)=>{n(n=>{if(n?.rowId===e)return null;let i=r.getBoundingClientRect();return{rowId:e,conversationId:t.conversationId,cacheKey:t.cacheKey,top:i.bottom+4,right:Math.max(8,window.innerWidth-i.right)}})},[]);return(0,H.useEffect)(()=>{if(!t)return;function e(e){let t=e.target;t&&r.current?.contains(t)||t&&t.closest?.(`.conversations-logs`)||n(null)}function i(e){e.key===`Escape`&&n(null)}return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,i),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,i)}},[t]),(0,H.useEffect)(()=>{if(!t||!e?.current)return;let r=e.current,i=()=>n(null);return r.addEventListener(`scroll`,i,{passive:!0}),()=>r.removeEventListener(`scroll`,i)},[t,e]),{popover:t,popoverRef:r,toggle:a,close:i}}function uD(e,t){let[n,r]=(0,H.useState)(null),[i,a]=(0,H.useState)(null),[o,s]=(0,H.useState)(``),[c,l]=(0,H.useState)(!1),u=(0,H.useRef)(null);(0,H.useEffect)(()=>{i?.phase===`editing`&&(u.current?.focus(),u.current?.select())},[i]);let d=(0,H.useCallback)(()=>{r(null),a(null),s(``),l(!1)},[]);return{editingId:n,editState:i,editValue:o,setEditValue:s,confirming:c,editInputRef:u,requestSuggestion:(0,H.useCallback)(async t=>{if(e){d(),r(t),a({phase:`loading`});try{let n=await fetch(`/api/admin/sessions/${encodeURIComponent(t)}/label?session_key=${encodeURIComponent(e)}`,{method:`POST`});if(!n.ok){a({phase:`error`,reason:(await n.json().catch(()=>({}))).error||`Request failed`});return}let r=await n.json();r.label?(a({phase:`editing`}),s(r.label)):a({phase:`error`,reason:`Not enough message content to suggest a name`})}catch(e){console.error(`[admin-rename] label suggestion failed:`,e),a({phase:`error`,reason:e instanceof Error?e.message:String(e)})}}},[e,d]),confirmRename:(0,H.useCallback)(async n=>{let r=o.trim();if(!(!e||!r||c)){l(!0);try{let i=await fetch(`/api/admin/sessions/${encodeURIComponent(n)}/label`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({label:r,session_key:e})});if(!i.ok){a({phase:`error`,reason:(await i.json().catch(()=>({}))).error||`Rename failed`}),l(!1);return}t(e=>e.map(e=>e.conversationId===n?{...e,name:r}:e)),d()}catch(e){console.error(`[admin-rename] label rename failed:`,e),a({phase:`error`,reason:e instanceof Error?e.message:String(e)}),l(!1)}}},[e,o,c,t,d]),cancelEdit:d,isEditingRow:(0,H.useCallback)(e=>e!==null&&n===e,[n])}}var dD=`maxy-admin-session-key`;function fD(e,t){return e.conversationId?`/api/admin/logs?type=${t}&conversationId=${encodeURIComponent(e.conversationId)}`:e.cacheKey?`/api/admin/logs?type=${t}&cacheKey=${encodeURIComponent(e.cacheKey)}`:`/api/admin/logs?type=${t}`}function pD(e){let{show:t,onClose:n,conversationsLoading:r,conversationsError:i,conversationsList:a,setConversationsList:o,cacheKey:s,setCacheKey:c,isStreaming:l,resetConversation:u,setMessages:d,setConversationId:f}=e,[p,h]=(0,H.useState)(null),[g,_]=(0,H.useState)(null),v=(0,H.useRef)(null),y=(0,H.useRef)(null),b=(0,H.useRef)(null),{popover:x,popoverRef:S,toggle:C,close:w}=lD(b),T=uD(s,o);(0,H.useEffect)(()=>{t||(T.cancelEdit(),w(),h(null),_(null),v.current&&=(clearTimeout(v.current),null),y.current&&=(clearTimeout(y.current),null))},[t,T,w]);async function E(e){await L(e)?(h(e),_(null),v.current&&clearTimeout(v.current),v.current=setTimeout(()=>h(null),1500)):(_(e),h(null),y.current&&clearTimeout(y.current),y.current=setTimeout(()=>_(null),1500))}return t?(0,U.jsx)(`div`,{className:`claude-info-overlay`,onClick:n,children:(0,U.jsxs)(`div`,{className:`claude-info-modal conversations-modal`,onClick:e=>e.stopPropagation(),children:[(0,U.jsxs)(`div`,{className:`claude-info-header`,children:[(0,U.jsx)(tt,{size:12}),`Conversations`,(0,U.jsx)(`button`,{className:`claude-info-close`,onClick:n,children:`✕`})]}),(0,U.jsxs)(`div`,{className:`conversations-list`,ref:b,children:[r&&(0,U.jsxs)(`div`,{className:`conversations-empty`,children:[(0,U.jsx)(ge,{size:14,className:`spin`}),` Loading…`]}),i&&(0,U.jsx)(`div`,{className:`conversations-empty conversations-error`,children:i}),!r&&!i&&a.length===0&&(0,U.jsx)(`div`,{className:`conversations-empty`,children:`No recent conversations`}),!r&&!i&&a.map(e=>{let t=e.conversationId??e.cacheKey??``,r=e.phase===`pre-flush`,i=T.isEditingRow(e.conversationId),a=i&&T.editState?.phase===`loading`,h=i&&T.editState?.phase===`editing`,_=i&&T.editState?.phase===`error`,v=e.conversationId??e.cacheKey??``;return(0,U.jsxs)(`div`,{className:`conversations-row${r?` conversations-row-pre-flush`:``}`,children:[(0,U.jsxs)(`div`,{className:`conversations-row-info`,children:[a&&(0,U.jsxs)(`span`,{className:`conversations-row-name conversations-edit-loading`,children:[(0,U.jsx)(ge,{size:12,className:`spin`}),` Generating suggestion…`]}),h&&(0,U.jsxs)(`div`,{className:`conversations-edit-inline`,children:[(0,U.jsx)(`input`,{ref:T.editInputRef,type:`text`,className:`conversations-edit-input`,value:T.editValue,onChange:e=>T.setEditValue(e.target.value),onKeyDown:t=>{t.key===`Enter`&&T.editValue.trim()&&T.confirmRename(e.conversationId),t.key===`Escape`&&T.cancelEdit()},maxLength:200}),(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-confirm`,title:`Confirm rename`,disabled:!T.editValue.trim()||T.confirming,onClick:()=>T.confirmRename(e.conversationId),children:T.confirming?(0,U.jsx)(ge,{size:13,className:`spin`}):(0,U.jsx)(m,{size:13})}),(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-cancel`,title:`Cancel`,onClick:T.cancelEdit,children:(0,U.jsx)(oe,{size:13})})]}),_&&(0,U.jsxs)(`div`,{className:`conversations-edit-inline`,children:[(0,U.jsx)(`span`,{className:`conversations-edit-error`,children:T.editState.reason}),(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-retry`,title:`Retry`,onClick:()=>T.requestSuggestion(e.conversationId),children:(0,U.jsx)(ae,{size:13})}),(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-cancel`,title:`Cancel`,onClick:T.cancelEdit,children:(0,U.jsx)(oe,{size:13})})]}),!i&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`span`,{className:`conversations-row-name`,children:[e.name||(r?`session ${v}`:v),r&&(0,U.jsx)(`span`,{className:`conversations-row-phase-badge`,title:`Pre-flush — conversation not yet persisted`,children:`pre-flush`})]}),(0,U.jsxs)(`span`,{className:`conversations-row-meta`,children:[(0,U.jsx)(`button`,{type:`button`,className:`conversations-row-id${p===t?` copied`:``}${g===t?` copy-failed`:``}`,title:v,"aria-label":r?`Copy session key ${v}`:`Copy conversation id ${v}`,onClick:e=>{e.stopPropagation(),E(t)},children:p===t?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(m,{size:10}),` copied`]}):g===t?`copy failed`:v.slice(0,8)}),(0,U.jsxs)(`span`,{className:`conversations-row-time`,children:[(0,U.jsx)(Pe,{size:10}),(()=>{try{let t=new Date(e.updatedAt),n=Date.now()-t.getTime();return n<6e4?`just now`:n<36e5?`${Math.floor(n/6e4)}m ago`:n<864e5?`${Math.floor(n/36e5)}h ago`:`${Math.floor(n/864e5)}d ago`}catch{return``}})()]})]})]})]}),!i&&(0,U.jsx)(oD,{row:e,surface:`conversations-modal`,rowId:t,isStreaming:l,activeCacheKey:s,isLogsOpen:x?.rowId===t,onLogsToggle:n=>{console.info(`[admin-session-identity] cacheKey=${(e.cacheKey??`null`).slice(0,8)} conversationId=${(e.conversationId??`null`).slice(0,8)} phase=${e.phase} surface=conversations-modal action=logs`),C(t,{conversationId:e.conversationId,cacheKey:e.cacheKey},n)},onRequestRename:()=>{e.conversationId&&(console.info(`[admin-session-identity] cacheKey=${(e.cacheKey??`null`).slice(0,8)} conversationId=${e.conversationId.slice(0,8)} phase=${e.phase} surface=conversations-modal action=rename`),T.requestSuggestion(e.conversationId))},onResume:()=>{!e.conversationId||!s||(console.info(`[admin-session-identity] cacheKey=${s.slice(0,8)} conversationId=${e.conversationId.slice(0,8)} phase=${e.phase} surface=conversations-modal action=resume`),n(),u(),fetch(`/api/admin/sessions/${encodeURIComponent(e.conversationId)}/resume?session_key=${encodeURIComponent(s)}`,{method:`POST`}).then(e=>e.ok?e.json():Promise.reject(Error(`Failed to resume conversation`))).then(e=>{e.conversationId&&f(e.conversationId);let t=(e.messages??[]).map(e=>({role:e.role===`user`?`admin`:`maxy`,content:e.role===`user`?e.content:void 0,events:e.role===`assistant`?e.events??(e.content?[{type:`text`,content:e.content}]:[]):void 0,...e.role===`user`&&e.attachments&&e.attachments.length>0?{attachments:e.attachments}:{},...e.role===`user`&&aD(e.content)?{hidden:!0}:{},timestamp:new Date(e.createdAt).getTime()||0,historical:!0,...e.messageId?{messageId:e.messageId}:{}}));t.length>0&&d(t)}).catch(e=>{console.error(`[chat] conversation resume failed:`,e),d([{role:`maxy`,events:[{type:`text`,content:`Could not load conversation history.`}],timestamp:Date.now()-1,historical:!0}])}))},onDelete:()=>{e.conversationId&&(console.info(`[admin-session-identity] cacheKey=${(e.cacheKey??`null`).slice(0,8)} conversationId=${e.conversationId.slice(0,8)} phase=${e.phase} surface=conversations-modal action=delete`),o(t=>t.filter(t=>t.conversationId!==e.conversationId)),s&&fetch(`/api/admin/sessions/${encodeURIComponent(e.conversationId)}?session_key=${encodeURIComponent(s)}`,{method:`DELETE`}).catch(e=>console.error(`[chat] conversation delete failed:`,e)))},onSwitchPreFlush:()=>{if(l||!s||!e.cacheKey)return;let t=e.cacheKey;console.info(`[admin-session-identity] cacheKey=${s.slice(0,8)} conversationId=null phase=${e.phase} surface=conversations-modal action=switch-pre-flush target=${t.slice(0,8)}`),n(),u(),d([]),fetch(`/api/admin/sessions/switch?session_key=${encodeURIComponent(s)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({target_session_key:t})}).then(e=>e.ok?e.json():Promise.reject(Error(`switch returned ${e.status}`))).then(e=>{try{sessionStorage.setItem(dD,e.session_key)}catch{}ve(e.session_key,`chat`),c(e.session_key),f(e.conversationId)}).catch(e=>{console.error(`[chat] pre-flush session switch failed:`,e),d([{role:`maxy`,events:[{type:`text`,content:`Could not switch into that session.`}],timestamp:Date.now()-1,historical:!0}])})}})]},t)})]}),(0,U.jsx)(cD,{state:x,popoverRef:S,surface:`conversations-modal`,buildLogsUrl:fD,onClose:w})]})}):null}function mD({src:e,onClose:t}){return e?(0,U.jsxs)(`div`,{className:`attachment-lightbox`,onClick:t,children:[(0,U.jsx)(`button`,{className:`attachment-lightbox-close`,onClick:t,"aria-label":`Close`,children:`×`}),(0,U.jsx)(`img`,{src:e,alt:`Attachment`,onClick:e=>e.stopPropagation()})]}):null}function hD({show:e,onClose:t,onConfirm:n}){return e?(0,U.jsx)(`div`,{className:`claude-info-overlay`,onClick:t,children:(0,U.jsxs)(`div`,{className:`claude-info-modal`,onClick:e=>e.stopPropagation(),children:[(0,U.jsxs)(`div`,{className:`claude-info-header`,children:[(0,U.jsx)(`span`,{children:`Compact conversation?`}),(0,U.jsx)(`button`,{className:`claude-info-close`,onClick:t,"aria-label":`Close`,children:`✕`})]}),(0,U.jsx)(`div`,{className:`claude-info-section`,style:{padding:`12px 14px`,fontSize:`11px`,color:`var(--text-secondary)`},children:`Summarises the conversation history to free up context window space. The session continues with a compressed summary.`}),(0,U.jsxs)(`div`,{className:`claude-info-section`,style:{display:`flex`,gap:`8px`,padding:`10px 14px`},children:[(0,U.jsx)(E,{variant:`secondary`,size:`sm`,style:{background:`var(--accent)`,flex:1},onClick:()=>{t(),n()},children:`Yes, compact`}),(0,U.jsx)(E,{variant:`secondary`,size:`sm`,style:{flex:1},onClick:t,children:`No`})]})]})}):null}function gD(e){let{show:t,onClose:n,claudeInfo:r,messages:i,sessionElapsed:a,conversationId:o,cacheKey:s}=e,[c,l]=(0,H.useState)(null);if(!t)return null;let u=i.flatMap(e=>e.events?.filter(e=>e.type===`usage`)??[]),d=u.at(-1),f=d?.peak_request_pct==null?d?.context_window?Math.round((d.input_tokens+d.cache_creation_tokens+d.cache_read_tokens)/d.context_window*100):0:Math.round(d.peak_request_pct*100),p=u.reduce((e,t)=>e+t.input_tokens+t.cache_creation_tokens+t.cache_read_tokens+t.output_tokens,0),m=i.flatMap(e=>e.events?.filter(e=>e.type===`rate_limit`)??[]).at(-1),h=u.reduce((e,t)=>e+(t.total_cost_usd??0),0),g=r?.account?.subscriptionType,_=e=>{let t=e*1e3-Date.now();if(t<=0)return`now`;let n=Math.floor(t/36e5),r=Math.floor(t%36e5/6e4);return n>0?`${n}h ${r}m`:`${r}m`};return(0,U.jsx)(`div`,{className:`claude-info-overlay`,onClick:n,children:(0,U.jsxs)(`div`,{className:`claude-info-modal`,onClick:e=>e.stopPropagation(),children:[(0,U.jsxs)(`div`,{className:`claude-info-header`,children:[(0,U.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`claude-info-icon`}),(0,U.jsx)(`span`,{children:`Claude Code`}),(0,U.jsx)(`button`,{className:`claude-info-close`,onClick:n,"aria-label":`Close`,children:`✕`})]}),(0,U.jsxs)(`div`,{className:`claude-info-section`,children:[(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Version`}),(0,U.jsx)(`span`,{className:`claude-info-value`,children:r?r.version:`…`})]}),(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Email`}),(0,U.jsx)(`span`,{className:`claude-info-value`,children:r?.account?.email??`…`})]})]}),(g||m||h>0)&&(0,U.jsxs)(`div`,{className:`claude-info-section`,children:[g&&(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Plan`}),(0,U.jsx)(`span`,{className:`claude-info-value`,style:{textTransform:`capitalize`},children:g})]}),m&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Usage`}),(0,U.jsxs)(`span`,{className:`claude-info-value`,children:[Math.round(m.utilization*100),`%`]})]}),(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Resets in`}),(0,U.jsx)(`span`,{className:`claude-info-value`,children:_(m.resetsAt)})]}),m.isUsingOverage&&(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Overage`}),(0,U.jsx)(`span`,{className:`claude-info-value`,children:`Active`})]})]}),h>0&&(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Session cost`}),(0,U.jsxs)(`span`,{className:`claude-info-value`,children:[`$`,h<.01?h.toFixed(4):h.toFixed(2)]})]})]}),(0,U.jsxs)(`div`,{className:`claude-info-section`,children:[(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Model`}),(0,U.jsx)(`span`,{className:`claude-info-value`,children:r?.model??`…`})]}),(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Context used`}),(0,U.jsx)(`span`,{className:`claude-info-value`,children:f>0?`${f}%`:`—`})]}),(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Tokens`}),(0,U.jsx)(`span`,{className:`claude-info-value`,children:p>0?Tt(p):`—`})]}),(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Session`}),(0,U.jsx)(`span`,{className:`claude-info-value`,children:wt(a)})]}),(o||s)&&(()=>{let e=o??s??``;return(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Session`}),(0,U.jsx)(`button`,{type:`button`,className:`claude-info-value claude-info-id-copy`,title:`${e} (${o?`flushed`:`pre-flush`}) — click to copy`,onClick:async()=>{l(await L(e)?`copied`:`failed`),setTimeout(()=>l(null),1200)},children:c===`copied`?`copied ✓`:c===`failed`?`copy failed ✕`:`${e.slice(0,8)}…`})]})})()]})]})})}var _D=5e3,vD={atPhase:8};function yD({show:e,onClose:t,versionInfo:n,cacheKey:r,onUpgradeComplete:i}){let[a,o]=(0,H.useState)(`prompt`),[s,c]=(0,H.useState)(``),[l,u]=(0,H.useState)(!1),[d,f]=(0,H.useState)(null),[p,m]=(0,H.useState)(null),[h,g]=(0,H.useState)(null),_=(0,H.useRef)(null),v=n?.latest??null,y=(0,H.useCallback)(()=>{_.current&&=(clearInterval(_.current),null)},[]);(0,H.useEffect)(()=>{e||(y(),o(`prompt`),c(``),u(!1),f(null),m(null),g(null))},[e,y]),(0,H.useEffect)(()=>y,[y]),(0,H.useEffect)(()=>{if(!(!e||a!==`running`||!v))return _.current=setInterval(async()=>{try{let e=await fetch(`/api/admin/version`,{cache:`no-store`});if(!e.ok)return;(await e.json()).installed===v&&(y(),o(`succeeded`),i(),setTimeout(()=>window.location.reload(),2e3))}catch{}},_D),y},[e,a,v,i,y]);let b=(0,H.useCallback)(async()=>{if(!(!v||!r||a!==`prompt`)){if(!s){f(`Enter your device password first.`);return}f(null),m(null),o(`priming`);try{let e=await fetch(`/api/admin/actions/sudo-prime?session_key=${encodeURIComponent(r)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({password:s,session_key:r})});if(e.status!==204){f((await e.json().catch(()=>({}))).error??`Password check failed (status ${e.status})`),o(`prompt`);return}}catch(e){f(e instanceof Error?e.message:`Password check network error`),o(`prompt`);return}try{let e=await fetch(`/api/admin/actions/upgrade?session_key=${encodeURIComponent(r)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({sudoPassword:s,session_key:r})}),t=await e.json().catch(()=>({}));if(!e.ok||!t.actionId){m(t.error??`launch failed (status ${e.status})`),o(`launch-failed`);return}g(t.actionId),o(`running`)}catch(e){m(e instanceof Error?e.message:`launch network error`),o(`launch-failed`)}finally{c(``)}}},[s,v,r,a]);return e?(0,U.jsx)(`div`,{className:`claude-info-overlay`,onClick:()=>{(a===`prompt`||a===`succeeded`||a===`launch-failed`)&&t()},children:(0,U.jsxs)(`div`,{className:`claude-info-modal update-modal`,onClick:e=>e.stopPropagation(),children:[(0,U.jsxs)(`div`,{className:`claude-info-header`,children:[(0,U.jsx)(de,{size:12}),`Software Update`,(0,U.jsx)(`button`,{className:`claude-info-close`,onClick:t,children:`✕`})]}),(0,U.jsxs)(`div`,{className:`update-modal-body`,children:[(0,U.jsxs)(`div`,{className:`update-modal-versions`,children:[(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Installed`}),(0,U.jsxs)(`span`,{className:`claude-info-value`,children:[`v`,n?.installed??`…`]})]}),(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Available`}),(0,U.jsxs)(`span`,{className:`claude-info-value update-version-new`,children:[`v`,v??`…`]})]})]}),(a===`prompt`||a===`priming`||a===`launch-failed`)&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`div`,{className:`form-input__field`,style:{marginTop:12},children:[(0,U.jsx)(`label`,{className:`form-input__label`,htmlFor:`upgrade-sudo`,children:`Device password`}),(0,U.jsxs)(`div`,{className:`tunnel-route__row`,children:[(0,U.jsx)(`input`,{id:`upgrade-sudo`,className:`form-input__input tunnel-route__input`,type:l?`text`:`password`,autoComplete:`current-password`,value:s,onChange:e=>{c(e.target.value),f(null)},disabled:a===`priming`,onKeyDown:e=>{e.key===`Enter`&&s&&b()}}),(0,U.jsx)(`button`,{type:`button`,className:`tunnel-route__suffix`,onClick:()=>u(e=>!e),disabled:a===`priming`,style:{cursor:`pointer`,border:`none`,background:`inherit`},"aria-label":l?`Hide password`:`Show password`,children:l?`Hide`:`Show`})]}),(0,U.jsx)(`div`,{className:`form-input__field-desc`,children:`Needed once. The installer uses it to run the privileged steps; it is never saved.`}),d&&(0,U.jsx)(`div`,{className:`tunnel-route__error`,children:d}),p&&(0,U.jsx)(`div`,{className:`tunnel-route__error`,role:`alert`,children:p})]}),(0,U.jsx)(`button`,{type:`button`,className:`update-modal-btn`,onClick:b,disabled:!v||!s||a===`priming`,children:a===`priming`?`Checking password…`:a===`launch-failed`?`Try again`:`Upgrade`})]}),a===`running`&&h&&r&&(0,U.jsx)(`div`,{className:`update-modal-terminal`,style:{height:360,marginTop:10},children:(0,U.jsx)(wE,{actionId:h,cacheKey:r,selfRestart:vD})}),a===`succeeded`&&(0,U.jsxs)(`div`,{className:`update-modal-result`,children:[(0,U.jsx)(Ae,{size:14,className:`update-success-icon`}),(0,U.jsxs)(`span`,{children:[`Upgraded to v`,v,` — reloading…`]})]})]})]})}):null}function bD(e){let{conversationId:t,cacheKey:n,disconnecting:r,onOpenConversations:i,handleDisconnect:a,onAfterAction:o}=e,s=!t&&!n;return(0,U.jsxs)(`div`,{className:`chat-actions-menu`,children:[(0,U.jsxs)(`button`,{type:`button`,className:`chat-action`,onClick:()=>{o(),i()},children:[(0,U.jsx)(tt,{size:14}),(0,U.jsx)(`span`,{className:`action-label`,children:`Conversations`})]}),(0,U.jsxs)(`button`,{type:`button`,className:`chat-action`,disabled:r,onClick:async()=>{o(),await a()},children:[r?(0,U.jsx)(ge,{size:14,className:`animate-spin`}):(0,U.jsx)(B,{size:14}),(0,U.jsx)(`span`,{className:`action-label`,children:r?`Disconnecting...`:`Disconnect Claude`})]}),(0,U.jsxs)(`button`,{type:`button`,className:`chat-action`,disabled:s,title:t?`Download stream log`:n?`Download stream log (pre-flush)`:`No session active — reload the page to start one`,onClick:async()=>{if(o(),s){console.debug(`[stream-log-button] no-identity cacheKey=null conversationId=null`);return}let e=`${fD({conversationId:t,cacheKey:n},`stream`)}&download=1`,r=(t??``).slice(-8),i=0,a=0,c;try{let t=await fetch(e);i=t.status;let n=t.headers.get(`content-length`);c=await t.blob(),a=n?Number(n):c.size}catch(e){i=0,console.debug(`[stream-log-button] fetch-failed reason=${e instanceof Error?e.message:String(e)}`)}try{let t=JSON.stringify({kind:`event`,source:`stream-log-click`,url:e,status:i,bytes:a,conversationId:r});navigator.sendBeacon(`/api/_client-error`,new Blob([t],{type:`application/json`}))||console.debug(`[stream-log-button] sendBeacon returned false`)}catch(e){console.debug(`[stream-log-button] beacon-failed reason=${e instanceof Error?e.message:String(e)}`)}if(c&&i>=200&&i<300){let e=URL.createObjectURL(c),t=document.createElement(`a`);t.href=e,t.download=`stream-${r||`session`}.log`,t.click(),setTimeout(()=>URL.revokeObjectURL(e),5e3)}},children:[(0,U.jsx)(pt,{size:14}),(0,U.jsx)(`span`,{className:`action-label`,children:`Stream log`})]})]})}function xD(e){let{selectionMode:t,selectedItems:n,copyToast:r,exitSelection:i,enterSelection:a,copySelected:o,showCopyToast:s,input:l,setInput:d,inputRef:p,pendingFiles:m,setPendingFiles:h,isDragOver:y,attachError:b,fileInputRef:x,addFiles:S,removeFile:C,onDragOver:w,onDragLeave:T,onDrop:D,isStreaming:j,wasPaused:M,messages:P,messageQueueRef:ee,setQueue:F,sendMessage:ne,stopStreaming:re,disconnecting:ie,handleDisconnect:R,claudeInfo:ae,setClaudeInfo:z,setShowClaudeInfo:oe,conversationId:se,cacheKey:ce,onNewConversation:le,newConversationDisabled:ue,onOpenConversations:de,sidebarVisible:fe}=e,[pe,me]=(0,H.useState)(!1),he=(0,H.useRef)(null),[ge,_e]=(0,H.useState)(!1),ve=(0,H.useRef)(null),ye=(0,H.useRef)(!1),be=I(),xe=be.state===`recording`||be.state===`paused`||be.state===`sending`,Se=!xe&&!M&&!l.trim()&&m.length===0;async function Ce(){let e=await be.send();if(!e)return;let t=e.type===`audio/ogg`?`.ogg`:e.type===`audio/mp4`?`.m4a`:`.webm`,n=new File([e],`voice-note${t}`,{type:e.type});if(j){F([...ee.current,{text:`[Voice note]`,files:[n],timestamp:Date.now()}]);return}ne(`[Voice note]`,[n])}return(0,H.useEffect)(()=>{t||_e(!1)},[t]),(0,H.useEffect)(()=>{if(!ge)return;let e=e=>{e.target.closest(`.selection-copy-wrap`)||_e(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[ge]),(0,H.useEffect)(()=>{if(!pe)return;let e=e=>{if(e.key===`Escape`){me(!1);return}if(e.key===`Tab`&&he.current){let t=he.current.querySelectorAll(`.actions-menu-items button:not([disabled])`);if(t.length===0)return;let n=t[0],r=t[t.length-1];e.shiftKey&&document.activeElement===n?(e.preventDefault(),r.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n.focus())}},t=e=>{he.current&&!he.current.contains(e.target)&&me(!1)};return document.addEventListener(`keydown`,e),document.addEventListener(`mousedown`,t),()=>{document.removeEventListener(`keydown`,e),document.removeEventListener(`mousedown`,t)}},[pe]),t?(0,U.jsx)(`div`,{className:`chat-input-area`,children:(0,U.jsxs)(`div`,{className:`selection-bar`,children:[(0,U.jsxs)(`span`,{className:`selection-count`,children:[n.size,` Selected`]}),(0,U.jsxs)(`div`,{className:`selection-copy-wrap`,children:[(0,U.jsxs)(`button`,{type:`button`,className:`selection-copy`,onPointerDown:()=>{if(ge){_e(!1);return}ye.current=!1,ve.current=setTimeout(()=>{ye.current=!0,_e(!0),ve.current=null},500)},onPointerUp:()=>{ve.current!==null&&(clearTimeout(ve.current),ve.current=null)},onPointerLeave:()=>{ve.current!==null&&(clearTimeout(ve.current),ve.current=null)},onPointerCancel:()=>{ve.current!==null&&(clearTimeout(ve.current),ve.current=null)},onClick:async()=>{ye.current||await o(e=>eD(P,e),(e,t)=>{let[n,r]=[e.slice(0,e.lastIndexOf(`_`)),e.slice(e.lastIndexOf(`_`)+1)],[i,a]=[t.slice(0,t.lastIndexOf(`_`)),t.slice(t.lastIndexOf(`_`)+1)],o=parseInt(n,10)-parseInt(i,10);return o===0?r===`admin`?-1:a===`admin`?1:parseInt(r,10)-parseInt(a,10):o})},children:[(0,U.jsx)(f,{size:18}),(0,U.jsx)(`span`,{children:`Copy`})]}),ge&&(0,U.jsx)(`div`,{className:`copy-menu`,children:[[`all`,`All events`],[`text`,`Text messages only`],[`non-text`,`Non-text only`]].map(([e,t])=>(0,U.jsx)(`button`,{type:`button`,className:`copy-menu-item`,onClick:async()=>{let t=tD(P,e);t&&s(await L(t)),i()},children:t},e))})]}),(0,U.jsx)(`button`,{type:`button`,className:`selection-cancel`,onClick:i,children:`Cancel`})]})}):(0,U.jsxs)(`div`,{className:`chat-input-area`,children:[(0,U.jsx)(`input`,{ref:x,type:`file`,multiple:!0,accept:Ot,style:{display:`none`},onChange:e=>{e.target.files&&S([...e.target.files]),e.target.value=``}}),m.length>0&&(0,U.jsx)(`div`,{className:`attachment-strip`,children:m.map((e,t)=>(0,U.jsxs)(`div`,{className:`attachment-chip`,children:[e.type.startsWith(`image/`)?(0,U.jsx)(`img`,{src:URL.createObjectURL(e),alt:e.name,className:`attachment-chip-thumb`}):e.type.startsWith(`audio/`)?(0,U.jsx)(k,{size:14}):e.type===`application/pdf`?(0,U.jsx)(g,{size:14}):(0,U.jsx)(v,{size:14}),(0,U.jsx)(`span`,{className:`attachment-chip-name`,children:e.name}),(0,U.jsx)(`button`,{type:`button`,className:`attachment-chip-remove`,onClick:()=>C(t),"aria-label":`Remove ${e.name}`,children:`×`})]},t))}),b&&(0,U.jsx)(`p`,{className:`attach-error`,children:b}),be.state===`error`&&be.errorMessage&&(0,U.jsxs)(`p`,{className:`voice-error`,role:`alert`,children:[(0,U.jsx)(k,{size:14}),be.errorMessage]}),(0,U.jsx)(O,{inputRef:p}),xe?(0,U.jsx)(`div`,{className:`chat-form voice-active`,children:(0,U.jsx)(N,{state:be.state,elapsedSeconds:be.elapsedSeconds,waveform:be.waveform,onTogglePause:be.togglePause,onDiscard:be.discard,onSend:Ce})}):(0,U.jsxs)(`form`,{className:`chat-form${y?` drag-over`:``}`,onSubmit:e=>{e.preventDefault();let t=l.trim()||(M?`continue`:``);if(!(!t&&m.length===0)){if(j){F([...ee.current,{text:t,files:[...m],timestamp:Date.now()}]),d(``),h([]),p.current?.resetHeight();return}ne(t),p.current?.resetHeight()}},onDragOver:w,onDragLeave:T,onDrop:D,onPaste:e=>{let t=e.clipboardData?.items;if(!t)return;let n=[];for(let e of t){if(e.kind!==`file`)continue;let t=e.getAsFile();if(!t)continue;let r=t.type.split(`/`)[1]?.replace(`jpeg`,`jpg`)||`png`;n.push(new File([t],`pasted-image-${Date.now()}.${r}`,{type:t.type}))}n.length>0&&S(n)},children:[(0,U.jsx)(E,{variant:`icon`,type:`button`,onClick:()=>x.current?.click(),"aria-label":`Attach file`,children:(0,U.jsx)(c,{size:14})}),(0,U.jsx)(te,{ref:p,value:l,onChange:d}),j?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(E,{variant:`send`,type:`button`,onClick:()=>re(!0),"aria-label":`Pause`,style:{background:`var(--text-secondary)`},children:(0,U.jsx)(A,{size:14})}),(0,U.jsx)(E,{variant:`send`,type:`button`,onClick:()=>re(!1),"aria-label":`Stop`,style:{background:`var(--danger)`},children:(0,U.jsx)(gt,{size:14})})]}):Se?(0,U.jsx)(E,{variant:`send`,type:`button`,onClick:be.start,"aria-label":`Record voice note`,children:(0,U.jsx)(k,{size:14})}):(0,U.jsx)(E,{variant:`send`,type:`submit`,disabled:!l.trim()&&m.length===0&&!M,"aria-label":`Send message`,children:M?(0,U.jsx)(_,{size:14}):(0,U.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,U.jsx)(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`}),(0,U.jsx)(`polyline`,{points:`12 5 19 12 12 19`})]})})]}),(0,U.jsxs)(`div`,{className:`chat-actions`,ref:he,children:[!fe&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`button`,{className:`burger-trigger`,onClick:()=>me(e=>!e),"aria-expanded":pe,"aria-haspopup":`true`,"aria-label":`Conversation actions`,children:(0,U.jsx)(ze,{size:16})}),(0,U.jsx)(`div`,{className:`actions-menu-items${pe?` actions-menu-open`:``}`,children:(0,U.jsx)(bD,{conversationId:se,cacheKey:ce,disconnecting:ie,onOpenConversations:de,handleDisconnect:R,onAfterAction:()=>me(!1)})})]}),(0,U.jsx)(`button`,{type:`button`,className:`chat-action-icon`,title:`New conversation`,"aria-label":`New conversation`,disabled:ue,onClick:le,children:(0,U.jsx)(Ke,{size:16})}),(0,U.jsx)(`button`,{type:`button`,className:`chat-action-icon`,title:`Select messages`,"aria-label":`Select messages`,onClick:a,children:(0,U.jsx)(u,{size:16})}),(0,U.jsxs)(`div`,{className:`powered-by`,onClick:async()=>{if(oe(!0),!ae){let e=await fetch(`/api/admin/claude-info`);e.ok&&z(await e.json())}},children:[(0,U.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`powered-by-icon`}),(0,U.jsx)(`span`,{children:`Powered by Claude Code`})]})]})]})}var SD=`maxy-vnc-overlay-popout`;function CD(e){let[t,n]=(0,H.useState)(!1),r=(0,H.useRef)(null),i=(0,H.useRef)(null),a=(0,H.useCallback)(()=>{i.current&&=(clearInterval(i.current),null),r.current&&!r.current.closed&&r.current.close(),r.current=null,n(!1)},[]),o=(0,H.useCallback)(()=>{let t=`/vnc-popout.html?title=${encodeURIComponent(R.productName)}`,o=window.open(t,SD,`width=1024,height=768`);o&&(r.current=o,n(!0),i.current=setInterval(()=>{r.current?.closed&&(a(),e?.())},500))},[a,e]);return(0,H.useEffect)(()=>()=>a(),[a]),{poppedOut:t,popout:o,cleanupPopout:a}}var wD=(0,H.forwardRef)(function({onClose:e},t){Ct(),un(`overlay`);let{poppedOut:n,popout:r,cleanupPopout:i}=CD(e);return(0,H.useImperativeHandle)(t,()=>({popout:r}),[r]),n?(0,U.jsxs)(`div`,{className:`browser-overlay-popout`,children:[(0,U.jsx)(h,{className:`browser-viewer__icon`}),(0,U.jsx)(`span`,{className:`browser-viewer__title`,children:R.productName}),(0,U.jsx)(`span`,{className:`browser-viewer__popout-label`,children:`Popped out`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:ct,onClick:()=>i(),"aria-label":`Pop back in`}),e&&(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:oe,onClick:()=>{i(),e()},"aria-label":`Close`})]}):(0,U.jsx)(`iframe`,{src:`/vnc-viewer.html`,className:`browser-surface__iframe`,title:R.productName})});function TD({onClose:e}){Ct(),un(`overlay`);let{poppedOut:t,popout:n,cleanupPopout:r}=CD(e),i=(0,H.useCallback)(()=>{r(),e()},[r,e]);(0,H.useEffect)(()=>{if(t)return;let e=e=>{e.key===`Escape`&&i()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[t,i]);let a=ln({handlePopout:n,disabled:t});return t?(0,U.jsxs)(`div`,{className:`browser-overlay-popout`,children:[(0,U.jsx)(h,{className:`browser-viewer__icon`}),(0,U.jsx)(`span`,{className:`browser-viewer__title`,children:R.productName}),(0,U.jsx)(`span`,{className:`browser-viewer__popout-label`,children:`Popped out`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:ct,onClick:()=>{r()},"aria-label":`Pop back in`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:oe,onClick:i,"aria-label":`Close`})]}):(0,U.jsxs)(`div`,{className:`browser-viewer-fullscreen`,children:[(0,U.jsxs)(`div`,{className:`browser-viewer-fullscreen__bar`,...a,children:[(0,U.jsx)(h,{className:`browser-viewer__icon`}),(0,U.jsx)(`span`,{className:`browser-viewer-fullscreen__title`,children:R.productName}),(0,U.jsxs)(`div`,{className:`browser-viewer-fullscreen__actions`,children:[(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:Be,onClick:n,"aria-label":`Pop out`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:oe,onClick:i,"aria-label":`Close`})]})]}),(0,U.jsx)(`iframe`,{src:`/vnc-viewer.html`,className:`browser-viewer-fullscreen__iframe`,title:R.productName})]})}var ED=`maxy-admin-session-key`,DD=(0,H.forwardRef)(function(e,t){let{businessName:n,cacheKey:r,conversationId:i,role:a,userName:o,userAvatar:s,sessions:c,sessionsLoading:l,sessionsError:u,ensureSessionsLoaded:d,refetchSessions:f,onSelectSession:p,onSelectArtefact:h,onSelectProjects:_,onSelectPeople:v,onSelectTasks:y,onSelectAgents:b,onCloseMobileDrawer:x,collapsed:S,onToggleCollapsed:C,mobileDrawerOpen:w,actions:T,recentsActions:E}=e;(0,H.useEffect)(()=>{d()},[d]);let D=(0,H.useRef)(null),{popover:O,popoverRef:k,toggle:A,close:j}=lD(D),M=uD(r,E.setSessions),N=R.productName,P=typeof o==`string`?o:o===null?`name unavailable`:n||N,ee=(P.trim().charAt(0)||`?`).toUpperCase(),[te,F]=(0,H.useState)(`all`),I=(0,H.useMemo)(()=>c.filter(e=>e.name).filter(e=>te===`all`?!0:(e.channel??`webchat`)===te),[c,te]),ne=I.length,re=i??r,[L,ie]=(0,H.useState)(`chat`),[z,ce]=(0,H.useState)([]),[le,ue]=(0,H.useState)(!1),[de,fe]=(0,H.useState)(null),[pe,me]=(0,H.useState)(!1);(0,H.useImperativeHandle)(t,()=>({patchArtefact(e,t){ce(n=>n.map(n=>n.id===e?{...n,...t}:n))}}),[]);let[he,_e]=(0,H.useState)(!1),ye=(0,H.useRef)(null);(0,H.useEffect)(()=>{if(!he)return;function e(e){ye.current&&!ye.current.contains(e.target)&&_e(!1)}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[he]);let be=(0,H.useCallback)(async()=>{if(r){me(!0),fe(null);try{let e=await fetch(`/api/admin/sidebar-artefacts?session_key=${encodeURIComponent(r)}`);if(!e.ok)throw Error(`status ${e.status}`);ce((await e.json()).artefacts??[]),ue(!0)}catch(e){let t=e instanceof Error?e.message:String(e);fe(`Failed to load artefacts: ${t}`),console.error(`[admin-ui] sidebar-artefacts fetch failed: ${t}`)}finally{me(!1)}}},[r]),xe=()=>{ie(`chat`),console.info(`[admin-ui] sidebar-nav surface=chat count=${ne}`)},Se=()=>{ie(`artefacts`),console.info(`[admin-ui] sidebar-nav surface=artefacts count=${le?z.length:0} collapsed=${S}`),S&&C(),le||be()},Ce=S?24:16,we=L===`chat`?`Recents`:`Artefacts`,Te=L===`chat`?l?`…`:String(ne):pe?`…`:String(z.length),Ee=L===`chat`?l:pe,B=()=>{L===`chat`?f():be(),console.info(`[admin-ui] sidebar-refresh surface=${L}`)};return(0,U.jsxs)(`aside`,{className:`side`,children:[(0,U.jsx)(`div`,{className:`side-head`,children:(0,U.jsx)(`button`,{className:`icon-btn side-head-toggle`,title:w?`Close sidebar`:S?`Expand sidebar`:`Collapse sidebar`,type:`button`,"aria-label":w?`Close sidebar`:S?`Expand sidebar`:`Collapse sidebar`,onClick:()=>{w?(console.info(`[admin-ui] sidebar-head-toggle action=close-drawer state=closed`),x()):(console.info(`[admin-ui] sidebar-head-toggle action=toggle-collapsed state=${S?`expanded`:`collapsed`}`),C())},children:S?(0,U.jsx)(dt,{size:28}):(0,U.jsx)(ut,{size:28})})}),(0,U.jsxs)(`nav`,{className:`side-nav`,children:[(0,U.jsxs)(`button`,{type:`button`,className:`nav-row${L===`chat`?` active`:``}`,onClick:xe,children:[(0,U.jsx)(st,{size:Ce}),(0,U.jsx)(`span`,{className:`label`,children:`Chat`}),(0,U.jsx)(`span`,{className:`kbd`})]}),(0,U.jsxs)(`button`,{type:`button`,className:`nav-row`,onClick:()=>{console.info(`[admin-ui] sidebar-nav surface=people`),v(),x()},children:[(0,U.jsx)(bt,{size:Ce}),(0,U.jsx)(`span`,{className:`label`,children:`People`}),(0,U.jsx)(`span`,{className:`kbd`})]}),(0,U.jsxs)(`button`,{type:`button`,className:`nav-row`,onClick:()=>{console.info(`[admin-ui] sidebar-nav surface=agents`),b(),x()},children:[(0,U.jsx)(De,{size:Ce}),(0,U.jsx)(`span`,{className:`label`,children:`Agents`}),(0,U.jsx)(`span`,{className:`kbd`})]}),(0,U.jsxs)(`button`,{type:`button`,className:`nav-row`,onClick:()=>{console.info(`[admin-ui] sidebar-nav surface=projects`),_(),x()},children:[(0,U.jsx)(Oe,{size:Ce}),(0,U.jsx)(`span`,{className:`label`,children:`Projects`}),(0,U.jsx)(`span`,{className:`kbd`})]}),(0,U.jsxs)(`button`,{type:`button`,className:`nav-row`,onClick:()=>{console.info(`[admin-ui] sidebar-nav surface=tasks`),y(),x()},children:[(0,U.jsx)(et,{size:Ce}),(0,U.jsx)(`span`,{className:`label`,children:`Tasks`}),(0,U.jsx)(`span`,{className:`kbd`})]}),(0,U.jsxs)(`button`,{type:`button`,className:`nav-row${L===`artefacts`?` active`:``}`,onClick:Se,children:[(0,U.jsx)(g,{size:Ce}),(0,U.jsx)(`span`,{className:`label`,children:`Artefacts`}),(0,U.jsx)(`span`,{className:`kbd`})]})]}),(0,U.jsxs)(`div`,{className:`side-list`,ref:D,children:[(0,U.jsxs)(`div`,{className:`group-head`,children:[(0,U.jsx)(`span`,{children:we}),(0,U.jsxs)(`span`,{className:`group-head-meta`,children:[(0,U.jsx)(`button`,{type:`button`,className:`group-head-refresh`,title:`Refresh ${we.toLowerCase()}`,"aria-label":`Refresh ${we.toLowerCase()}`,onClick:B,disabled:Ee,children:(0,U.jsx)(se,{size:12,className:Ee?`spinning`:void 0})}),(0,U.jsx)(`span`,{children:Te})]})]}),L===`chat`&&(0,U.jsxs)(U.Fragment,{children:[u&&(0,U.jsx)(`div`,{className:`conv`,style:{color:`var(--text-tertiary)`,cursor:`default`},children:u}),(0,U.jsxs)(an,{className:`conv-channel-filter`,value:te,onChange:e=>{let t=e.target.value;F(t),console.info(`[admin-ui] sidebar-channel-filter set value=${t}`)},"aria-label":`Filter conversations by channel`,children:[(0,U.jsx)(`option`,{value:`all`,children:`All channels`}),(0,U.jsx)(`option`,{value:`webchat`,children:`Web`})]}),I.map(e=>{let t=e.conversationId??e.cacheKey??``,n=t!==``&&t===re,i=e.channel??`webchat`,a=e.phase===`pre-flush`,o=M.isEditingRow(e.conversationId),s=o&&M.editState?.phase===`loading`,c=o&&M.editState?.phase===`editing`,l=o&&M.editState?.phase===`error`,u=t=>{let n=e.cacheKey?e.cacheKey.slice(0,8):`null`,r=e.conversationId?e.conversationId.slice(0,8):`null`;console.info(`[admin-session-identity] cacheKey=${n} conversationId=${r} phase=${e.phase} surface=sidebar-recents action=${t}`)};return(0,U.jsxs)(`div`,{className:`conv${n?` active`:``}${a?` conv-pre-flush`:``}${o?` conv-editing`:``}`,children:[!o&&(0,U.jsxs)(`button`,{type:`button`,className:`conv-name-button`,onClick:()=>{u(`select`),p(e),x()},children:[i===`whatsapp`&&(0,U.jsx)(it,{size:12,className:`conv-channel-icon`,"aria-label":`WhatsApp`}),(0,U.jsx)(`span`,{className:`conv-name`,children:e.name??`(untitled)`})]}),s&&(0,U.jsxs)(`span`,{className:`conversations-row-name conversations-edit-loading conv-edit-loading`,children:[(0,U.jsx)(ge,{size:12,className:`spin`}),` Generating suggestion…`]}),c&&(0,U.jsxs)(`div`,{className:`conversations-edit-inline conv-edit-inline`,children:[(0,U.jsx)(`input`,{ref:M.editInputRef,type:`text`,className:`conversations-edit-input`,value:M.editValue,onChange:e=>M.setEditValue(e.target.value),onKeyDown:t=>{t.key===`Enter`&&M.editValue.trim()&&e.conversationId&&M.confirmRename(e.conversationId),t.key===`Escape`&&M.cancelEdit()},maxLength:200}),(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-confirm`,title:`Confirm rename`,disabled:!M.editValue.trim()||M.confirming,onClick:()=>e.conversationId&&M.confirmRename(e.conversationId),children:M.confirming?(0,U.jsx)(ge,{size:13,className:`spin`}):(0,U.jsx)(m,{size:13})}),(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-cancel`,title:`Cancel`,onClick:M.cancelEdit,children:(0,U.jsx)(oe,{size:13})})]}),l&&(0,U.jsxs)(`div`,{className:`conversations-edit-inline conv-edit-inline`,children:[(0,U.jsx)(`span`,{className:`conversations-edit-error`,children:M.editState.reason}),(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-retry`,title:`Retry`,onClick:()=>e.conversationId&&M.requestSuggestion(e.conversationId),children:(0,U.jsx)(ae,{size:13})}),(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-cancel`,title:`Cancel`,onClick:M.cancelEdit,children:(0,U.jsx)(oe,{size:13})})]}),!o&&(0,U.jsx)(oD,{row:e,surface:`sidebar-recents`,rowId:t,isStreaming:E.isStreaming,activeCacheKey:r,isLogsOpen:O?.rowId===t,onLogsToggle:n=>{u(`logs`),A(t,{conversationId:e.conversationId,cacheKey:e.cacheKey},n)},onRequestRename:()=>{e.conversationId&&(u(`rename`),M.requestSuggestion(e.conversationId))},onResume:()=>{!e.conversationId||E.isStreaming||(u(`resume`),p(e),x())},onDelete:()=>{if(!e.conversationId)return;u(`delete`);let t=e.conversationId;E.setSessions(e=>e.filter(e=>e.conversationId!==t)),r&&fetch(`/api/admin/sessions/${encodeURIComponent(t)}?session_key=${encodeURIComponent(r)}`,{method:`DELETE`}).catch(e=>console.error(`[chat] conversation delete failed:`,e))},onSwitchPreFlush:()=>{if(E.isStreaming||!r||!e.cacheKey)return;let t=e.cacheKey;u(`switch-pre-flush target=${t.slice(0,8)}`),E.resetConversation(),E.setMessages([]),fetch(`/api/admin/sessions/switch?session_key=${encodeURIComponent(r)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({target_session_key:t})}).then(e=>e.ok?e.json():Promise.reject(Error(`switch returned ${e.status}`))).then(e=>{try{sessionStorage.setItem(ED,e.session_key)}catch{}ve(e.session_key,`chat`),E.setCacheKey(e.session_key),E.setConversationId(e.conversationId)}).catch(e=>{console.error(`[chat] pre-flush session switch failed:`,e),E.setMessages([{role:`maxy`,events:[{type:`text`,content:`Could not switch into that session.`}],timestamp:Date.now()-1,historical:!0}])})}})]},t===``?e.updatedAt:t)})]}),L===`artefacts`&&(0,U.jsxs)(U.Fragment,{children:[de&&(0,U.jsx)(`div`,{className:`conv`,style:{color:`var(--text-tertiary)`,cursor:`default`},children:de}),le&&!de&&z.length===0&&(0,U.jsx)(`div`,{className:`conv`,style:{color:`var(--text-tertiary)`,cursor:`default`},children:`No artefacts yet`}),z.map(e=>(0,U.jsxs)(`button`,{type:`button`,className:`conv`,onClick:()=>{h({docId:e.id,name:e.name,content:e.content,editable:e.editable,mimeType:e.mimeType,skipReason:e.skipReason},`sidebar-artefacts`),x()},children:[(0,U.jsx)(`span`,{className:`conv-name`,children:e.name}),(0,U.jsx)(`span`,{className:`conv-kind`,"data-kind":e.kind===`agent-template`?`agent`:`doc`,children:e.kind===`agent-template`?`agent`:`doc`})]},e.id))]}),(0,U.jsx)(cD,{state:O,popoverRef:k,surface:`sidebar-recents`,buildLogsUrl:fD,onClose:j})]}),(0,U.jsxs)(`div`,{className:`side-foot`,ref:ye,children:[(0,U.jsx)(`div`,{className:`avatar`,children:s?(0,U.jsx)(`img`,{src:s,alt:P}):ee}),(0,U.jsxs)(`div`,{className:`who`,children:[(0,U.jsx)(`span`,{className:`name`,children:P}),(0,U.jsx)(`span`,{className:`role`,children:a??`operator`})]}),(0,U.jsx)(`button`,{className:`icon-btn side-foot-actions-trigger`,title:`Conversation actions`,type:`button`,"aria-label":`Conversation actions`,"aria-haspopup":`true`,"aria-expanded":he,onClick:()=>_e(e=>!e),children:(0,U.jsx)(ze,{size:Ce})}),he&&(0,U.jsx)(`div`,{className:`side-foot-actions-popover`,children:(0,U.jsx)(bD,{...T,onAfterAction:()=>_e(!1)})})]})]})}),OD=()=>{},kD=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function AD(e){return kD.test(e)?`uuid`:e.startsWith(`agent-template:`)?`agent-template`:`other`}var jD={"null-attachmentId":`No file backing this artefact.`,"non-text-mime":`Content type cannot be displayed inline.`,"containment-rejected":`File path failed containment check; cannot display.`,"missing-on-disk":`File is missing on disk.`};function MD({reason:e}){return(0,U.jsxs)(`div`,{className:`art-skip-banner`,role:`status`,children:[(0,U.jsx)(Ue,{size:14}),(0,U.jsx)(`span`,{children:jD[e]})]})}function ND({src:e,name:t,docId:n}){let[r,i]=(0,H.useState)(!1),a=(0,H.useRef)(null),o=(0,H.useRef)(!1),s=(0,H.useRef)(!1),c=(0,H.useCallback)(e=>{s.current||(s.current=!0,console.info(`[admin-ui] artefact-pdf-fallback id=${n.slice(0,8)} reason=${e}`),i(!0))},[n]);(0,H.useEffect)(()=>{let e=setTimeout(()=>{o.current||c(`onload-timeout`)},3e3);return()=>clearTimeout(e)},[c]);let l=()=>{o.current=!0;try{let e=a.current?.contentDocument?.body;e&&e.children.length===0&&!e.textContent?.trim()&&c(`empty-body`)}catch{}};return r?(0,U.jsxs)(`a`,{className:`art-pdf-fallback`,href:e,download:t,children:[(0,U.jsx)(g,{size:20}),(0,U.jsxs)(`div`,{className:`art-pdf-fallback-text`,children:[(0,U.jsx)(`div`,{className:`art-pdf-fallback-name`,children:t}),(0,U.jsx)(`div`,{className:`art-pdf-fallback-hint`,children:`Your browser can't display this PDF inline. Click to download.`})]}),(0,U.jsx)(de,{size:16})]}):(0,U.jsx)(`iframe`,{ref:a,className:`art-pdf`,src:e,title:t,"aria-label":`PDF preview of ${t}`,onLoad:l,onError:()=>c(`onerror`)})}var PD={browser:`Browser`,data:`Data`,graph:`Graph`};function FD({selection:e,trigger:t,cacheKey:n,onClose:r,onArtefactSaved:i,onSwapToGraph:a}){let o=e!==null,s=e?.surface??null,c=(0,H.useRef)(null),l=(0,H.useRef)(null),[u,d]=(0,H.useState)(null),p=e?.surface===`doc`?e.docId:null,m=(0,H.useCallback)(e=>{if(!n||!p)return;let t={};try{t=JSON.parse(e)}catch{return}t.action!==`save`||typeof t.content!=`string`||(d(null),fetch(`/api/admin/sidebar-artefact-save?session_key=${encodeURIComponent(n)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:p,content:t.content})}).then(async e=>{if(!e.ok){let t=(await e.json().catch(()=>({}))).error??`status ${e.status}`;d(`Save failed: ${t}`),console.error(`[admin-ui] artefact-save-failed docId=${p} status=${e.status} error="${t}"`);return}let n=await e.json();i?.(p,n.updatedAt,t.content)}).catch(e=>{let t=e instanceof Error?e.message:String(e);d(`Save failed: ${t}`),console.error(`[admin-ui] artefact-save-failed docId=${p} error="${t}"`)}))},[n,p,i]);(0,H.useEffect)(()=>{d(null)},[p]),(0,H.useEffect)(()=>{let n=e?.surface===`doc`?e.docId:null,r=e?.surface===`graph`?e.focusNodeId??null:null,i=e?.surface??null,a=i===null?`closed`:`${i}:${n??`none`}:${r??`none`}`;if(a===c.current)return;let s=o?`open`:`closed`,l=o?t??`chat-link`:`toolbar-close`,u=i??c.current?.split(`:`)[0]??`doc`,d=n?` docIdShape=${AD(n)} docIdSample=${n.slice(0,8)}`:``;console.info(`[admin-ui] artefact-pane state=${s} docId=${n??`none`} trigger=${l} surface=${u}${d}`),c.current=a},[e,t,o]);let g=e?.surface===`doc`,_=g?(e.tag||e.name.split(`.`).pop()||`doc`).toUpperCase().slice(0,6):``,v=g?e.revision||`rev 1`:`live`,y=e&&e.surface!==`doc`?PD[e.surface]:``,b=g?e.name:y;return(0,U.jsxs)(`aside`,{className:`artefact`,"data-open":o,"data-surface":s??`none`,children:[(0,U.jsxs)(`div`,{className:`art-head`,children:[(0,U.jsxs)(`div`,{className:`left`,children:[!g&&s===`browser`&&(0,U.jsx)(h,{size:14,className:`art-head-surface-icon`}),!g&&s===`data`&&(0,U.jsx)(ye,{size:14,className:`art-head-surface-icon`}),!g&&s===`graph`&&(0,U.jsx)(be,{size:14,className:`art-head-surface-icon`}),(0,U.jsx)(`span`,{className:`file-name`,children:b}),g&&(0,U.jsx)(`span`,{className:`file-tag`,children:_})]}),(0,U.jsxs)(`div`,{className:`right`,children:[g&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`button`,{className:`icon-btn`,title:`Copy`,type:`button`,"aria-label":`Copy`,onClick:()=>{L(e.content)},children:(0,U.jsx)(f,{size:14})}),(0,U.jsx)(`button`,{className:`icon-btn`,title:`Refresh`,type:`button`,"aria-label":`Refresh`,children:(0,U.jsx)(ae,{size:14})})]}),s===`browser`&&(0,U.jsx)(`button`,{className:`icon-btn`,title:`Pop out`,type:`button`,"aria-label":`Pop out`,onClick:()=>l.current?.popout(),children:(0,U.jsx)(Be,{size:14})}),o&&(0,U.jsx)(`button`,{className:`icon-btn`,title:`Close`,type:`button`,"aria-label":`Close`,onClick:r,children:(0,U.jsx)(oe,{size:14})})]})]}),(0,U.jsxs)(`div`,{className:`art-toolbar`,children:[(0,U.jsxs)(`span`,{className:`seg`,children:[(0,U.jsx)(`span`,{className:`bullet`}),(0,U.jsx)(`strong`,{children:g?`Artefact`:y})]}),(0,U.jsx)(`span`,{className:`right-meta`,children:v})]}),(0,U.jsxs)(`div`,{className:`art-body`,"data-surface":s??`none`,children:[g&&(()=>{let t=e.editable!==!1,r=e.skipReason??null,i=(e.mimeType??``).startsWith(`application/pdf`);if(r)return(0,U.jsx)(MD,{reason:r});if(i&&n){let t=`/api/admin/sidebar-artefact-content?id=${encodeURIComponent(e.docId)}&session_key=${encodeURIComponent(n)}`;return(0,U.jsx)(ND,{src:t,name:e.name,docId:e.docId},t)}return(0,U.jsxs)(U.Fragment,{children:[u&&(0,U.jsx)(`div`,{className:`art-save-error`,role:`alert`,children:u}),(0,U.jsx)(cT,{data:{title:e.name,content:e.content,readOnly:!t},onSubmit:t?m:OD,submitted:!1})]})})(),s===`browser`&&(0,U.jsx)(wD,{ref:l,onClose:r}),s===`data`&&n&&(0,U.jsx)(pe,{cacheKey:n,onOpenInGraph:a?e=>{let t=me(e.properties);a(e.nodeId,t??e.labels[0]??null)}:void 0}),e?.surface===`graph`&&n&&(0,U.jsx)(ue,{cacheKey:n,initialFocus:e.focusNodeId?{nodeId:e.focusNodeId,nodeLabel:e.focusNodeLabel??null}:null,initialLabels:e.initialLabels??null})]}),(0,U.jsxs)(`div`,{className:`art-foot`,children:[(0,U.jsx)(`span`,{className:`left`,children:v}),(0,U.jsx)(`span`,{className:`right in-sync`,children:`in sync`})]})]})}var ID=`maxy-shell-artefact-px`;function LD(){if(typeof window>`u`)return 320;let e=window.innerWidth,t=document.querySelector(`.platform > .side`)?.getBoundingClientRect(),n=t?t.right:Math.round(e*.3);return zD(Math.round((e-n)*(2/3)))}function RD(){if(typeof window>`u`)return 320;try{let e=window.localStorage.getItem(ID);if(!e)return LD();let t=parseInt(e,10);if(Number.isFinite(t)&&t>=320)return t}catch{}return LD()}function zD(e){if(typeof window>`u`)return e;let t=window.innerWidth,n=document.querySelector(`.platform > .side`)?.getBoundingClientRect(),r=n?n.right:Math.round(t*.3),i=Math.max(320,t-r-480);return Math.min(Math.max(e,320),i)}function BD({targetSelector:e=`.platform`}){let t=(0,H.useRef)(null),[n,r]=(0,H.useState)(()=>RD()),i=(0,H.useRef)(n);(0,H.useEffect)(()=>{let t=document.querySelector(e);!t||!(t instanceof HTMLElement)||(t.style.setProperty(`--artefact-px`,`${n}px`),i.current=n)},[n,e]);let a=(0,H.useCallback)(()=>{r(e=>{let t=zD(e);return t===e?e:t})},[]);(0,H.useEffect)(()=>(a(),window.addEventListener(`resize`,a),()=>window.removeEventListener(`resize`,a)),[a]);let o=e=>{e.preventDefault();let n=t.current;if(!n)return;n.setPointerCapture(e.pointerId),n.classList.add(`dragging`);let a=!1,o=e=>{a=!0,r(zD(Math.round(window.innerWidth-e.clientX)))},s=()=>{if(n.releasePointerCapture(e.pointerId),n.classList.remove(`dragging`),window.removeEventListener(`pointermove`,o),window.removeEventListener(`pointerup`,s),!a)return;let t=i.current;try{window.localStorage.setItem(ID,String(t))}catch{}console.info(`[admin-ui] artefact-resize px=${t}`)};window.addEventListener(`pointermove`,o),window.addEventListener(`pointerup`,s)},s=()=>{let e=LD();r(e);try{window.localStorage.removeItem(ID)}catch{}console.info(`[admin-ui] artefact-resize px=${e}`)};return(0,U.jsx)(`div`,{ref:t,className:`art-resize-handle`,role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize artefact pane`,onPointerDown:o,onDoubleClick:s})}var VD=`maxy-shell-side-px`;function HD(){if(typeof window>`u`)return 0;let e=document.querySelector(`.platform > .artefact`)?.getBoundingClientRect();return e&&e.width>0?Math.round(e.width):0}function UD(e){if(typeof window>`u`)return e;let t=window.innerWidth,n=Math.max(248,t-480-HD());return Math.min(Math.max(e,248),n)}function WD(){if(typeof window>`u`)return 264;try{let e=window.localStorage.getItem(VD);if(!e)return 264;let t=parseInt(e,10);if(Number.isFinite(t)&&t>=248)return UD(t)}catch{}return 264}function GD({targetSelector:e=`.platform`}){let t=(0,H.useRef)(null),[n,r]=(0,H.useState)(()=>WD()),i=(0,H.useRef)(n);(0,H.useEffect)(()=>{let t=document.querySelector(e);!t||!(t instanceof HTMLElement)||(t.style.setProperty(`--side-px`,`${n}px`),i.current=n)},[n,e]);let a=(0,H.useCallback)(()=>{r(e=>{let t=UD(e);return t===e?e:t})},[]);(0,H.useEffect)(()=>{a(),window.addEventListener(`resize`,a);let t=document.querySelector(e),n=null;return t instanceof HTMLElement&&(n=new MutationObserver(a),n.observe(t,{attributes:!0,attributeFilter:[`data-artefact`,`class`]})),()=>{window.removeEventListener(`resize`,a),n?.disconnect()}},[a,e]);let o=e=>{e.preventDefault();let n=t.current;if(!n)return;n.setPointerCapture(e.pointerId),n.classList.add(`dragging`);let a=!1,o=e=>{a=!0,r(UD(Math.round(e.clientX)))},s=()=>{if(n.releasePointerCapture(e.pointerId),n.classList.remove(`dragging`),window.removeEventListener(`pointermove`,o),window.removeEventListener(`pointerup`,s),!a)return;let t=i.current;try{window.localStorage.setItem(VD,String(t))}catch{}console.info(`[admin-ui] sidebar-resize px=${t}`)};window.addEventListener(`pointermove`,o),window.addEventListener(`pointerup`,s)},s=()=>{let e=UD(264);r(e);try{window.localStorage.removeItem(VD)}catch{}console.info(`[admin-ui] sidebar-resize px=${e}`)};return(0,U.jsx)(`div`,{ref:t,className:`side-resize-handle`,role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize sidebar`,onPointerDown:o,onDoubleClick:s})}var KD=50;function qD(e){let[t,n]=(0,H.useState)([]),[r,i]=(0,H.useState)(!1),[a,o]=(0,H.useState)(null),[s,c]=(0,H.useState)(null),l=(0,H.useCallback)(async t=>{if(e&&!(!t&&s===e)){i(!0),o(null);try{let t=await fetch(`/api/admin/sessions?session_key=${encodeURIComponent(e)}`);if(!t.ok)throw Error(`sessions fetch returned ${t.status}`);n((await t.json()).sessions??[]),c(e)}catch(e){console.error(`[admin/sessions] fetch failed:`,e),o(e instanceof Error?e.message:String(e))}finally{i(!1)}}},[e,s]);(0,H.useEffect)(()=>{e||(c(null),n([]),o(null))},[e]);let u=(0,H.useCallback)(()=>l(!1),[l]),d=(0,H.useCallback)(()=>l(!0),[l]),f=(0,H.useRef)(d);return(0,H.useEffect)(()=>{f.current=d},[d]),(0,H.useEffect)(()=>{if(!e)return;let t=null,n=ce(()=>{t&&clearTimeout(t),t=setTimeout(()=>{t=null,f.current()},KD)});return()=>{t&&clearTimeout(t),n()}},[e]),{sessions:t,setSessions:n,loading:r,loaded:s!==null&&s===e,error:a,ensureLoaded:u,refetch:d}}function JD(){Ct();let e=(0,H.useRef)(null),[t,n]=(0,H.useState)(null),[r,a]=(0,H.useState)(!1),[o,s]=(0,H.useState)(!1),[c,l]=(0,H.useState)(``),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(null),[g,_]=(0,H.useState)(!1),[v,y]=(0,H.useState)(null),[x,S]=(0,H.useState)(null),[C,w]=(0,H.useState)(!1),[E,D]=(0,H.useState)(null),[O,k]=(0,H.useState)(!1),[A,j]=(0,H.useState)(null),[M,N]=(0,H.useState)(!1),[P,ee]=(0,H.useState)(!1),[te,F]=(0,H.useState)(!1),[I,ne]=(0,H.useState)(!1),re=(0,H.useRef)(!0);(0,H.useEffect)(()=>{if(re.current){re.current=!1;return}ne(!0);let e=window.setTimeout(()=>ne(!1),240);return()=>window.clearTimeout(e)},[te]);let[L,ae]=(0,H.useState)(!1),[z,se]=(0,H.useState)(null),[ce,le]=(0,H.useState)(null),ue=(0,H.useRef)(null),[de,fe]=(0,H.useState)(()=>typeof window<`u`&&window.matchMedia(`(min-width: 721px)`).matches);(0,H.useEffect)(()=>{let e=window.matchMedia(`(min-width: 721px)`),t=e=>fe(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let[pe,me]=(0,H.useState)(()=>typeof window<`u`&&window.matchMedia(`(min-width: 1080px)`).matches);(0,H.useEffect)(()=>{let e=window.matchMedia(`(min-width: 1080px)`),t=e=>me(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let he=(0,H.useRef)(!1),ve=(0,H.useRef)(!1),Se=(0,H.useRef)(!1),Ce=(0,H.useRef)(!1),we=(0,H.useRef)(null),Te=b(),Ee=Et(),B=Mt(),De=Jt(),Oe=qD(B.cacheKey),V=qt({cacheKey:B.cacheKey,setCacheKey:B.setCacheKey,setAppState:B.setAppState,conversationId:B.conversationId,setConversationId:B.setConversationId,startElapsedTimer:Ee.startElapsedTimer,stopElapsedTimer:Ee.stopElapsedTimer,resetTimerState:Ee.resetTimerState,pausedElapsedRef:Ee.pausedElapsedRef,expandAllDefaultRef:B.expandAllDefaultRef,setExpandAll:B.setExpandAll,getPendingFiles:()=>De.pendingFiles,clearPendingFiles:De.clearFiles,inputRef:e});(0,H.useEffect)(()=>{l(window.location.hostname.startsWith(`admin.`)?window.location.origin.replace(`admin.`,`public.`):window.location.origin)},[]),(0,H.useEffect)(()=>{function e(e){e.key===`Escape`&&(t?n(null):Te.selectionMode&&Te.exitSelection())}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[t,Te.selectionMode]),(0,H.useEffect)(()=>{(B.appState===`set-pin`||B.appState===`enter-pin`)&&setTimeout(()=>B.pinInputRef.current?.focus(),100),B.appState===`chat`&&setTimeout(()=>e.current?.focus(),100)},[B.appState,V.greetingGeneration]),(0,H.useEffect)(()=>{if(B.appState!==`chat`)return;history.pushState({maxyChat:!0},``);function e(){console.debug(`[history-guard] popstate absorbed`),history.pushState({maxyChat:!0},``)}return window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[B.appState]);let ke=(0,H.useRef)(V.greetingGeneration);(0,H.useEffect)(()=>{V.greetingGeneration!==ke.current&&(ke.current=V.greetingGeneration,B.onboardingComplete===!1&&(he.current=!1))},[V.greetingGeneration,B.onboardingComplete]),(0,H.useEffect)(()=>{B.appState===`chat`&&B.onboardingComplete===!1&&(he.current||(he.current=!0,V.sendSystemPrompt(`[Begin onboarding.]`)))},[B.appState,B.onboardingComplete,V.greetingGeneration]),(0,H.useEffect)(()=>{if(!u)return;let e=!1;return fetch(`/api/admin/version`).then(e=>e.json()).then(t=>{e||D(t)}).catch(e=>{console.error(`[admin/version] menu-open client fetch failed:`,e)}),()=>{e=!0}},[u]),(0,H.useEffect)(()=>{if(B.appState!==`chat`){Se.current=!1,Ce.current=!1;return}if(Se.current)return;Se.current=!0;let e=!1;return fetch(`/api/admin/version`).then(e=>e.json()).then(t=>{e||(D(t),!(!t.updateAvailable||Ce.current)&&(j(t),k(!0),fetch(`/api/admin/version/alert-surfaced`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({installed:t.installed,latest:t.latest})}).catch(e=>{console.error(`[admin/version] alert-surfaced signal failed:`,e)})))}).catch(e=>{console.error(`[admin/version] session-start client fetch failed:`,e)}),()=>{e=!0}},[B.appState]),(0,H.useEffect)(()=>{if(B.appState!==`chat`||!B.cacheKey)return;let e=B.conversationId?`flushed`:`pre-flush`,t=B.cacheKey.slice(0,8),n=B.conversationId?B.conversationId.slice(0,8):`null`;console.info(`[admin-session-identity] cacheKey=${t} conversationId=${n} phase=${e} surface=chat-header`)},[B.appState,B.cacheKey,B.conversationId]),(0,H.useEffect)(()=>{if(B.appState!==`chat`){ve.current=!1;return}if(ve.current||!Oe.loaded)return;ve.current=!0;let e=Oe.sessions.filter(e=>e.name).length,t=z?`open`:`closed`;console.info(`[admin-ui] platform-shell brand=${R.productName} sidebar=${e} artefact=${t}`)},[B.appState,Oe.loaded,Oe.sessions,z]);let Ae=Oe.sessions.find(e=>B.conversationId&&e.conversationId===B.conversationId||B.cacheKey&&e.cacheKey===B.cacheKey)?.name||B.businessName||(R.logoContainsName?``:R.productName);if((0,H.useEffect)(()=>{if(!u){p(null),y(null),S(null),D(null);return}function e(e){we.current&&!we.current.contains(e.target)&&d(!1)}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[u]),(0,H.useEffect)(()=>{if(typeof BroadcastChannel>`u`)return;let e=new BroadcastChannel(`platform-onboarding`);return e.onmessage=e=>{e.data?.type===`remote-password-set`&&V.sendMessageRef.current(`I've set the remote password`)},()=>e.close()},[]),B.appState===`loading`)return(0,U.jsx)(`div`,{className:`chat-page admin-page`,children:(0,U.jsx)(`header`,{className:`chat-header`,children:(0,U.jsx)(`img`,{src:ie,alt:R.productName,className:`chat-logo`})})});if(B.appState===`set-pin`)return(0,U.jsx)(Xt,{pin:B.pin,setPin:B.setPin,confirmPin:B.confirmPin,setConfirmPin:B.setConfirmPin,operatorName:B.operatorName,setOperatorName:B.setOperatorName,showPin:B.showPin,setShowPin:B.setShowPin,pinLoading:B.pinLoading,pinError:B.pinError,pinInputRef:B.pinInputRef,confirmPinInputRef:B.confirmPinInputRef,setPinFormRef:B.setPinFormRef,onSubmit:B.handleSetPin});if(B.appState===`onboarding-choice`)return(0,U.jsx)(en,{setAppState:B.setAppState,setOnboardingComplete:B.setOnboardingComplete});if(B.appState===`connect-claude`)return(0,U.jsx)($t,{authPolling:B.authPolling,setAuthPolling:B.setAuthPolling,authLoading:B.authLoading,setAuthLoading:B.setAuthLoading,pinError:B.pinError,setPinError:B.setPinError,setAppState:B.setAppState});if(B.appState===`enter-pin`)return(0,U.jsx)(Zt,{pin:B.pin,setPin:B.setPin,showPin:B.showPin,setShowPin:B.setShowPin,pinLoading:B.pinLoading,pinError:B.pinError,pinInputRef:B.pinInputRef,onSubmit:B.handleLogin,onChangePin:B.handleChangePin,remoteAuthEnabled:B.remoteAuthEnabled,onSignOutRemote:()=>{window.location.href=`/__remote-auth/logout`}});if(B.appState===`account-picker`)return(0,U.jsx)(Qt,{accounts:B.accounts,loading:B.accountPickerLoading,error:B.pinError,onSelect:B.handleAccountSelect});let je=z?`open`:`closed`,Me=L&&de,Ne=`platform${te?` menu-open`:``}${Me?` sidebar-collapsed`:``}${I?` drawer-animating`:``}`,Pe=e=>{if(!V.isStreaming&&B.cacheKey){if(!e.conversationId){V.resetConversation(),V.setMessages([]),B.setConversationId(null);return}V.resetConversation(),V.setMessages([]),fetch(`/api/admin/sessions/${encodeURIComponent(e.conversationId)}/resume?session_key=${encodeURIComponent(B.cacheKey)}`,{method:`POST`}).then(e=>e.ok?e.json():Promise.reject(Error(`resume returned ${e.status}`))).then(e=>{e.conversationId&&B.setConversationId(e.conversationId);let t=(e.messages??[]).map(e=>({role:e.role===`user`?`admin`:`maxy`,content:e.role===`user`?e.content:void 0,events:e.role===`assistant`?e.events??[]:void 0,...e.role===`user`&&e.attachments&&e.attachments.length>0?{attachments:e.attachments}:{},...e.role===`user`&&aD(e.content)?{hidden:!0}:{},timestamp:new Date(e.createdAt).getTime()||0,historical:!0,...e.messageId?{messageId:e.messageId}:{}}));if(t.length>0&&V.setMessages(t),e.resumeHeal){let{missingTurns:n,failed:r,jsonlMissing:i}=e.resumeHeal,a;r>0?a=`Could not heal ${r} of ${n} turn${n===1?``:`s`} that were missing from the graph. The JSONL replay rendered them above so the conversation is intact, but they may not appear in future searches until the writer recovers.`:i&&t.length>0&&(a=`This conversation's SDK transcript file is no longer on disk; the conversation is rendered from the graph projection. The next message you send will start a fresh SDK session under the same conversation.`),a&&V.setMessages(e=>[{role:`maxy`,events:[{type:`text`,content:a}],timestamp:Date.now()-2,historical:!0},...e])}let n=[];for(let t of e.messages??[]){if(t.role!==`assistant`||!t.submittedEventIndices?.length)continue;let e=new Date(t.createdAt).getTime()||0;for(let r of t.submittedEventIndices)n.push(`${e}_${r}`)}n.length>0&&V.seedSubmittedComponents(n)}).catch(e=>{console.error(`[chat] sidebar conversation resume failed:`,e),V.setMessages([{role:`maxy`,events:[{type:`text`,content:`Could not load conversation history.`}],timestamp:Date.now()-1,historical:!0}])})}},Fe={conversationId:B.conversationId,cacheKey:B.cacheKey,disconnecting:B.disconnecting,onOpenConversations:()=>{w(!0),Oe.refetch()},handleDisconnect:B.handleDisconnect};return(0,U.jsx)(T,{value:{onShowVnc:()=>N(!0)},children:(0,U.jsxs)(`div`,{className:Ne,"data-artefact":je,children:[(0,U.jsx)(`div`,{className:`scrim`,onClick:()=>{F(!1),console.info(`[admin-ui] mobile-drawer state=closed`)}}),(0,U.jsx)(DD,{ref:ue,businessName:B.businessName??null,cacheKey:B.cacheKey,conversationId:B.conversationId,role:B.role,userName:B.userName,userAvatar:B.userAvatar,sessions:Oe.sessions,sessionsLoading:Oe.loading,sessionsError:Oe.error,ensureSessionsLoaded:Oe.ensureLoaded,refetchSessions:Oe.refetch,recentsActions:{setSessions:Oe.setSessions,isStreaming:V.isStreaming,resetConversation:V.resetConversation,setMessages:V.setMessages,setConversationId:B.setConversationId,setCacheKey:B.setCacheKey},onSelectSession:Pe,onSelectArtefact:(e,t)=>{se({surface:`doc`,...e}),le(t)},onSelectProjects:()=>{se({surface:`graph`,initialLabels:[`Project`]}),le(`sidebar-projects`)},onSelectPeople:()=>{se({surface:`graph`,initialLabels:[`Person`]}),le(`sidebar-people`)},onSelectTasks:()=>{se({surface:`graph`,initialLabels:[`Task`]}),le(`sidebar-tasks`)},onSelectAgents:()=>{se({surface:`graph`,initialLabels:[`Agent`]}),le(`sidebar-agents`)},onCloseMobileDrawer:()=>{te&&(F(!1),console.info(`[admin-ui] mobile-drawer state=closed`))},collapsed:Me,onToggleCollapsed:()=>ae(e=>!e),mobileDrawerOpen:te,actions:Fe}),(0,U.jsxs)(`div`,{className:`chat-page admin-page`,children:[(0,U.jsxs)(`header`,{className:`chat-header`,children:[(0,U.jsx)(`button`,{type:`button`,className:`chat-logo-btn`,"aria-label":`Show sidebar`,title:`Show sidebar`,onClick:()=>{F(e=>{let t=!e;return console.info(`[admin-ui] header-logo-tap state=${t?`open`:`closed`}`),t})},children:(0,U.jsx)(`img`,{src:ie,alt:R.productName,className:`chat-logo`})}),(0,U.jsx)(`div`,{className:`chat-header-label`,children:(0,U.jsx)(`h1`,{className:`chat-tagline`,children:Ae})}),(0,U.jsxs)(`div`,{className:`chat-burger-wrap`,ref:we,children:[(0,U.jsx)(`button`,{type:`button`,className:`chat-burger`,onClick:()=>d(e=>!e),"aria-label":`Menu`,"aria-haspopup":`true`,"aria-expanded":u,children:(0,U.jsx)(_e,{size:20})}),u&&(0,U.jsxs)(`div`,{className:`chat-menu`,children:[(0,U.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,onClick:async()=>{if(!P&&!(!pe&&M)){ee(!0),d(!1);try{let e=await(await fetch(`/api/admin/browser/launch`,{method:`POST`})).json().catch(()=>({ok:!1,error:`Invalid response`}));if(!e.ok)throw Error(e.error??`Failed to launch browser`);pe?(se({surface:`browser`}),le(`header-menu`)):N(!0)}catch(e){console.error(`[browser] Launch failed:`,e),alert(e instanceof Error?e.message:`Failed to launch browser`)}finally{ee(!1)}}},disabled:P,children:[(0,U.jsx)(h,{size:14}),` Browser`,P&&(0,U.jsx)(ge,{size:12,className:`spin`})]}),(0,U.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,onClick:()=>{d(!1),pe?(se({surface:`data`}),le(`header-menu`)):window.location.href=`/data`},children:[(0,U.jsx)(ye,{size:14}),` Data`]}),(0,U.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,onClick:()=>{d(!1),pe?(se({surface:`graph`}),le(`header-menu`)):window.location.href=`/graph`},children:[(0,U.jsx)(be,{size:14}),` Graph`]}),(0,U.jsx)(`div`,{className:`chat-menu-divider`}),(0,U.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,onClick:async()=>{if(f!==null){p(null),S(null);return}_(!0),y(null);try{let e=await fetch(`/api/admin/agents`);if(!e.ok)throw Error(`Failed to load agents`);p((await e.json()).agents??[])}catch(e){console.error(`[admin] agent list failed:`,e),y(e instanceof Error?e.message:String(e))}finally{_(!1)}},children:[(0,U.jsx)(Be,{size:14}),` Public`,g&&(0,U.jsx)(ge,{size:12,className:`spin`})]}),f!==null&&(0,U.jsxs)(`div`,{className:`chat-menu-agents`,children:[v&&(0,U.jsx)(`span`,{className:`chat-menu-agent-error`,children:v}),f.length===0&&!v&&(0,U.jsx)(`span`,{className:`chat-menu-agent-empty`,children:`No public agents configured`}),f.map(e=>(0,U.jsxs)(`div`,{className:`chat-menu-item chat-menu-agent-item`,children:[(0,U.jsx)(`span`,{className:`agent-status-dot ${e.status}`}),(0,U.jsxs)(`span`,{className:`agent-text`,children:[(0,U.jsx)(`span`,{className:`agent-display-name`,children:e.displayName}),(0,U.jsxs)(`span`,{className:`agent-slug`,children:[`/`,e.slug]})]}),x===e.slug?(0,U.jsxs)(`span`,{className:`agent-actions agent-confirm`,children:[(0,U.jsx)(`button`,{type:`button`,className:`agent-action-btn agent-confirm-yes`,title:`Confirm delete`,onClick:()=>{S(null),p(t=>t?.filter(t=>t.slug!==e.slug)??null),fetch(`/api/admin/agents/${encodeURIComponent(e.slug)}`,{method:`DELETE`}).catch(e=>console.error(`[admin/agents] delete failed:`,e))},children:(0,U.jsx)(m,{size:12})}),(0,U.jsx)(`button`,{type:`button`,className:`agent-action-btn agent-confirm-no`,title:`Cancel`,onClick:()=>S(null),children:(0,U.jsx)(oe,{size:12})})]}):(0,U.jsxs)(`span`,{className:`agent-actions`,children:[(0,U.jsx)(`a`,{href:`${c}/${e.slug}`,target:`_blank`,rel:`noopener noreferrer`,className:`agent-action-btn`,title:`Open agent`,onClick:()=>d(!1),children:(0,U.jsx)(Be,{size:12})}),(0,U.jsx)(`button`,{type:`button`,className:`agent-action-btn agent-delete-btn`,title:`Delete agent`,onClick:()=>S(e.slug),children:(0,U.jsx)(i,{size:12})})]})]},e.slug))]}),(0,U.jsx)(`div`,{className:`chat-menu-divider`}),E?.updateAvailable?(0,U.jsxs)(`button`,{type:`button`,className:`chat-menu-version`,onClick:()=>{E.latest&&(j(E),d(!1),k(!0))},children:[(0,U.jsx)(Ye,{size:14}),(0,U.jsxs)(`span`,{className:`version-installed`,children:[`v`,E.installed,(0,U.jsx)(`span`,{className:`version-update-dot`})]})]}):(0,U.jsxs)(`div`,{className:`chat-menu-version chat-menu-version-passive`,children:[(0,U.jsx)(Ye,{size:14}),(0,U.jsxs)(`span`,{className:`version-installed`,children:[E?`v${E.installed}`:`…`,E&&!E.updateAvailable&&(0,U.jsx)(`span`,{className:`version-uptodate-dot`})]})]}),(0,U.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,onClick:()=>{d(!1),B.handleLogout(),V.setMessages([])},children:[(0,U.jsx)(xe,{size:14}),` Log out`]})]})]})]}),(0,U.jsxs)(`div`,{className:`chat-content`,children:[(0,U.jsx)(QE,{messages:V.messages,isStreaming:V.isStreaming,elapsedSeconds:Ee.elapsedSeconds,sessionTurnStart:Ee.sessionTurnStart,expandAll:B.expandAll,setExpandAll:B.setExpandAll,conversationCompacted:V.conversationCompacted,isCompacting:V.isCompacting,setShowCompactConfirm:s,handleComponentSubmit:V.handleComponentSubmit,effectiveSubmitted:V.effectiveSubmitted,selectionMode:Te.selectionMode,selectedItems:Te.selectedItems,toggleSelectItem:Te.toggleSelectItem,cacheKey:B.cacheKey,setLightboxSrc:n,messageQueue:V.messageQueue,messageQueueRef:V.messageQueueRef,setQueue:V.setQueue,sendMessage:V.sendMessage,appState:B.appState,onboardingComplete:B.onboardingComplete,onOpenArtefact:e=>{se({surface:`doc`,...e}),le(`chat-link`)}}),(0,U.jsx)($E,{offer:V.topicChangeOffer,onFreshStart:V.handleTopicFreshStart,onContinue:V.handleTopicContinue,disabled:V.isStreaming}),(0,U.jsx)(xD,{selectionMode:Te.selectionMode,selectedItems:Te.selectedItems,copyToast:Te.copyToast||null,exitSelection:Te.exitSelection,enterSelection:Te.enterSelection,copySelected:Te.copySelected,showCopyToast:Te.showCopyToast,input:V.input,setInput:V.setInput,inputRef:e,pendingFiles:De.pendingFiles,setPendingFiles:De.setPendingFiles,isDragOver:De.isDragOver,attachError:De.attachError,fileInputRef:De.fileInputRef,addFiles:De.addFiles,removeFile:De.removeFile,onDragOver:De.onDragOver,onDragLeave:De.onDragLeave,onDrop:De.onDrop,isStreaming:V.isStreaming,wasPaused:V.wasPaused,messages:V.messages,messageQueueRef:V.messageQueueRef,setQueue:V.setQueue,sendMessage:V.sendMessage,stopStreaming:V.stopStreaming,disconnecting:B.disconnecting,handleDisconnect:B.handleDisconnect,claudeInfo:B.claudeInfo,setClaudeInfo:B.setClaudeInfo,setShowClaudeInfo:a,conversationId:B.conversationId,cacheKey:B.cacheKey,onNewConversation:V.startNewConversation,newConversationDisabled:V.isStreaming||V.isCompacting,onOpenConversations:()=>{w(!0),Oe.refetch()},sidebarVisible:de})]}),Te.copyToast&&(0,U.jsx)(`span`,{className:`copy-toast${Te.copyToast===`failed`?` copy-toast-failed`:``}`,children:Te.copyToast===`copied`?`Copied`:`Copy failed`}),(0,U.jsx)(pD,{show:C,onClose:()=>w(!1),conversationsLoading:Oe.loading,conversationsError:Oe.error,conversationsList:Oe.sessions,setConversationsList:Oe.setSessions,cacheKey:B.cacheKey,setCacheKey:B.setCacheKey,isStreaming:V.isStreaming,resetConversation:V.resetConversation,setMessages:V.setMessages,setConversationId:B.setConversationId}),(0,U.jsx)(mD,{src:t,onClose:()=>n(null)}),(0,U.jsx)(hD,{show:o,onClose:()=>s(!1),onConfirm:V.handleCompactNow}),(0,U.jsx)(gD,{show:r,onClose:()=>{a(!1),B.setClaudeInfo(null)},claudeInfo:B.claudeInfo,messages:V.messages,sessionElapsed:Ee.sessionElapsed,conversationId:B.conversationId,cacheKey:B.cacheKey}),(0,U.jsx)(yD,{show:O,onClose:()=>{k(!1),Ce.current=!0},versionInfo:A,cacheKey:B.cacheKey,onUpgradeComplete:()=>D(null)}),M&&(0,U.jsx)(TD,{onClose:()=>N(!1)})]}),(0,U.jsx)(GD,{}),(0,U.jsx)(BD,{}),(0,U.jsx)(FD,{selection:z,trigger:ce,cacheKey:B.cacheKey,onClose:()=>{se(null),le(null)},onArtefactSaved:(e,t,n)=>{ue.current?.patchArtefact(e,{updatedAt:t,content:n})},onSwapToGraph:(e,t)=>{se({surface:`graph`,focusNodeId:e,focusNodeLabel:t}),le(`chat-link`)}})]})})}(0,Ce.createRoot)(document.getElementById(`root`)).render((0,U.jsx)(JD,{}));
|
|
352
|
+
`)}var nD=`Cloudflare setup completed (actionId: `,rD=`{"_componentDone"`,iD=`{"_lifecycle"`;function aD(e){return typeof e!=`string`||e.length===0?!1:e.startsWith(rD)||e.startsWith(iD)||e.startsWith(nD)}function oD(e){let{row:t,surface:n,isStreaming:r,activeCacheKey:a,isLogsOpen:o,onLogsToggle:s,onRequestRename:c,onResume:l,onDelete:u,onSwitchPreFlush:d}=e,f=t.phase===`pre-flush`,p=f&&t.cacheKey!==null&&t.cacheKey!==a;return(0,U.jsxs)(`div`,{className:`conversations-row-actions`,"data-surface":n,children:[(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-logs`,title:f?`View pre-flush logs`:`View logs`,"aria-haspopup":`menu`,"aria-expanded":o,onClick:e=>{e.stopPropagation(),s(e.currentTarget)},children:(0,U.jsx)(g,{size:13})}),p&&d&&(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-play`,title:`Switch into this in-memory session`,disabled:r||!a,onClick:e=>{e.stopPropagation(),!(r||!a)&&d()},children:(0,U.jsx)(_,{size:13})}),!f&&t.conversationId&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-rename`,title:`Rename conversation`,onClick:e=>{e.stopPropagation(),c()},children:(0,U.jsx)(ft,{size:13})}),(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-play`,title:`Resume conversation`,disabled:r,onClick:e=>{e.stopPropagation(),!(r||!a)&&l()},children:(0,U.jsx)(_,{size:13})}),(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-delete`,title:`Delete conversation`,onClick:e=>{e.stopPropagation(),u()},children:(0,U.jsx)(i,{size:13})})]})]})}var sD=[{type:`stream`,label:`Stream`},{type:`error`,label:`Errors`},{type:`sse`,label:`SSE`}];function cD(e){let{state:t,popoverRef:n,surface:r,buildLogsUrl:i,onClose:a}=e;return t?(0,U.jsx)(`div`,{ref:n,className:`conversations-logs-popover`,role:`menu`,style:{top:t.top,right:t.right},"data-surface":r,children:sD.map(({type:e,label:n})=>(0,U.jsxs)(`a`,{role:`menuitem`,className:`conversations-logs-popover-item`,href:i({conversationId:t.conversationId,cacheKey:t.cacheKey},e),target:`_blank`,rel:`noopener noreferrer`,onClick:()=>{console.debug(`[admin-logs-popover] open-log`,{surface:r,conversationId:t.conversationId,cacheKey:t.cacheKey,type:e}),a()},children:[(0,U.jsx)(g,{size:12}),(0,U.jsx)(`span`,{children:n})]},e))}):null}function lD(e){let[t,n]=(0,H.useState)(null),r=(0,H.useRef)(null),i=(0,H.useCallback)(()=>n(null),[]),a=(0,H.useCallback)((e,t,r)=>{n(n=>{if(n?.rowId===e)return null;let i=r.getBoundingClientRect();return{rowId:e,conversationId:t.conversationId,cacheKey:t.cacheKey,top:i.bottom+4,right:Math.max(8,window.innerWidth-i.right)}})},[]);return(0,H.useEffect)(()=>{if(!t)return;function e(e){let t=e.target;t&&r.current?.contains(t)||t&&t.closest?.(`.conversations-logs`)||n(null)}function i(e){e.key===`Escape`&&n(null)}return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,i),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,i)}},[t]),(0,H.useEffect)(()=>{if(!t||!e?.current)return;let r=e.current,i=()=>n(null);return r.addEventListener(`scroll`,i,{passive:!0}),()=>r.removeEventListener(`scroll`,i)},[t,e]),{popover:t,popoverRef:r,toggle:a,close:i}}function uD(e,t){let[n,r]=(0,H.useState)(null),[i,a]=(0,H.useState)(null),[o,s]=(0,H.useState)(``),[c,l]=(0,H.useState)(!1),u=(0,H.useRef)(null);(0,H.useEffect)(()=>{i?.phase===`editing`&&(u.current?.focus(),u.current?.select())},[i]);let d=(0,H.useCallback)(()=>{r(null),a(null),s(``),l(!1)},[]);return{editingId:n,editState:i,editValue:o,setEditValue:s,confirming:c,editInputRef:u,requestSuggestion:(0,H.useCallback)(async t=>{if(e){d(),r(t),a({phase:`loading`});try{let n=await fetch(`/api/admin/sessions/${encodeURIComponent(t)}/label?session_key=${encodeURIComponent(e)}`,{method:`POST`});if(!n.ok){a({phase:`error`,reason:(await n.json().catch(()=>({}))).error||`Request failed`});return}let r=await n.json();r.label?(a({phase:`editing`}),s(r.label)):a({phase:`error`,reason:`Not enough message content to suggest a name`})}catch(e){console.error(`[admin-rename] label suggestion failed:`,e),a({phase:`error`,reason:e instanceof Error?e.message:String(e)})}}},[e,d]),confirmRename:(0,H.useCallback)(async n=>{let r=o.trim();if(!(!e||!r||c)){l(!0);try{let i=await fetch(`/api/admin/sessions/${encodeURIComponent(n)}/label`,{method:`PUT`,headers:{"Content-Type":`application/json`},body:JSON.stringify({label:r,session_key:e})});if(!i.ok){a({phase:`error`,reason:(await i.json().catch(()=>({}))).error||`Rename failed`}),l(!1);return}t(e=>e.map(e=>e.conversationId===n?{...e,name:r}:e)),d()}catch(e){console.error(`[admin-rename] label rename failed:`,e),a({phase:`error`,reason:e instanceof Error?e.message:String(e)}),l(!1)}}},[e,o,c,t,d]),cancelEdit:d,isEditingRow:(0,H.useCallback)(e=>e!==null&&n===e,[n])}}var dD=`maxy-admin-session-key`;function fD(e,t){return e.conversationId?`/api/admin/logs?type=${t}&conversationId=${encodeURIComponent(e.conversationId)}`:e.cacheKey?`/api/admin/logs?type=${t}&cacheKey=${encodeURIComponent(e.cacheKey)}`:`/api/admin/logs?type=${t}`}function pD(e){let{show:t,onClose:n,conversationsLoading:r,conversationsError:i,conversationsList:a,setConversationsList:o,cacheKey:s,setCacheKey:c,isStreaming:l,resetConversation:u,setMessages:d,setConversationId:f}=e,[p,h]=(0,H.useState)(null),[g,_]=(0,H.useState)(null),v=(0,H.useRef)(null),y=(0,H.useRef)(null),b=(0,H.useRef)(null),{popover:x,popoverRef:S,toggle:C,close:w}=lD(b),T=uD(s,o);(0,H.useEffect)(()=>{t||(T.cancelEdit(),w(),h(null),_(null),v.current&&=(clearTimeout(v.current),null),y.current&&=(clearTimeout(y.current),null))},[t,T,w]);async function E(e){await L(e)?(h(e),_(null),v.current&&clearTimeout(v.current),v.current=setTimeout(()=>h(null),1500)):(_(e),h(null),y.current&&clearTimeout(y.current),y.current=setTimeout(()=>_(null),1500))}return t?(0,U.jsx)(`div`,{className:`claude-info-overlay`,onClick:n,children:(0,U.jsxs)(`div`,{className:`claude-info-modal conversations-modal`,onClick:e=>e.stopPropagation(),children:[(0,U.jsxs)(`div`,{className:`claude-info-header`,children:[(0,U.jsx)(tt,{size:12}),`Conversations`,(0,U.jsx)(`button`,{className:`claude-info-close`,onClick:n,children:`✕`})]}),(0,U.jsxs)(`div`,{className:`conversations-list`,ref:b,children:[r&&(0,U.jsxs)(`div`,{className:`conversations-empty`,children:[(0,U.jsx)(ge,{size:14,className:`spin`}),` Loading…`]}),i&&(0,U.jsx)(`div`,{className:`conversations-empty conversations-error`,children:i}),!r&&!i&&a.length===0&&(0,U.jsx)(`div`,{className:`conversations-empty`,children:`No recent conversations`}),!r&&!i&&a.map(e=>{let t=e.conversationId??e.cacheKey??``,r=e.phase===`pre-flush`,i=T.isEditingRow(e.conversationId),a=i&&T.editState?.phase===`loading`,h=i&&T.editState?.phase===`editing`,_=i&&T.editState?.phase===`error`,v=e.conversationId??e.cacheKey??``;return(0,U.jsxs)(`div`,{className:`conversations-row${r?` conversations-row-pre-flush`:``}`,children:[(0,U.jsxs)(`div`,{className:`conversations-row-info`,children:[a&&(0,U.jsxs)(`span`,{className:`conversations-row-name conversations-edit-loading`,children:[(0,U.jsx)(ge,{size:12,className:`spin`}),` Generating suggestion…`]}),h&&(0,U.jsxs)(`div`,{className:`conversations-edit-inline`,children:[(0,U.jsx)(`input`,{ref:T.editInputRef,type:`text`,className:`conversations-edit-input`,value:T.editValue,onChange:e=>T.setEditValue(e.target.value),onKeyDown:t=>{t.key===`Enter`&&T.editValue.trim()&&T.confirmRename(e.conversationId),t.key===`Escape`&&T.cancelEdit()},maxLength:200}),(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-confirm`,title:`Confirm rename`,disabled:!T.editValue.trim()||T.confirming,onClick:()=>T.confirmRename(e.conversationId),children:T.confirming?(0,U.jsx)(ge,{size:13,className:`spin`}):(0,U.jsx)(m,{size:13})}),(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-cancel`,title:`Cancel`,onClick:T.cancelEdit,children:(0,U.jsx)(oe,{size:13})})]}),_&&(0,U.jsxs)(`div`,{className:`conversations-edit-inline`,children:[(0,U.jsx)(`span`,{className:`conversations-edit-error`,children:T.editState.reason}),(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-retry`,title:`Retry`,onClick:()=>T.requestSuggestion(e.conversationId),children:(0,U.jsx)(ae,{size:13})}),(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-cancel`,title:`Cancel`,onClick:T.cancelEdit,children:(0,U.jsx)(oe,{size:13})})]}),!i&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`span`,{className:`conversations-row-name`,children:[e.name||(r?`session ${v}`:v),r&&(0,U.jsx)(`span`,{className:`conversations-row-phase-badge`,title:`Pre-flush — conversation not yet persisted`,children:`pre-flush`})]}),(0,U.jsxs)(`span`,{className:`conversations-row-meta`,children:[(0,U.jsx)(`button`,{type:`button`,className:`conversations-row-id${p===t?` copied`:``}${g===t?` copy-failed`:``}`,title:v,"aria-label":r?`Copy session key ${v}`:`Copy conversation id ${v}`,onClick:e=>{e.stopPropagation(),E(t)},children:p===t?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(m,{size:10}),` copied`]}):g===t?`copy failed`:v.slice(0,8)}),(0,U.jsxs)(`span`,{className:`conversations-row-time`,children:[(0,U.jsx)(Pe,{size:10}),(()=>{try{let t=new Date(e.updatedAt),n=Date.now()-t.getTime();return n<6e4?`just now`:n<36e5?`${Math.floor(n/6e4)}m ago`:n<864e5?`${Math.floor(n/36e5)}h ago`:`${Math.floor(n/864e5)}d ago`}catch{return``}})()]})]})]})]}),!i&&(0,U.jsx)(oD,{row:e,surface:`conversations-modal`,rowId:t,isStreaming:l,activeCacheKey:s,isLogsOpen:x?.rowId===t,onLogsToggle:n=>{console.info(`[admin-session-identity] cacheKey=${(e.cacheKey??`null`).slice(0,8)} conversationId=${(e.conversationId??`null`).slice(0,8)} phase=${e.phase} surface=conversations-modal action=logs`),C(t,{conversationId:e.conversationId,cacheKey:e.cacheKey},n)},onRequestRename:()=>{e.conversationId&&(console.info(`[admin-session-identity] cacheKey=${(e.cacheKey??`null`).slice(0,8)} conversationId=${e.conversationId.slice(0,8)} phase=${e.phase} surface=conversations-modal action=rename`),T.requestSuggestion(e.conversationId))},onResume:()=>{!e.conversationId||!s||(console.info(`[admin-session-identity] cacheKey=${s.slice(0,8)} conversationId=${e.conversationId.slice(0,8)} phase=${e.phase} surface=conversations-modal action=resume`),n(),u(),fetch(`/api/admin/sessions/${encodeURIComponent(e.conversationId)}/resume?session_key=${encodeURIComponent(s)}`,{method:`POST`}).then(e=>e.ok?e.json():Promise.reject(Error(`Failed to resume conversation`))).then(e=>{e.conversationId&&f(e.conversationId);let t=(e.messages??[]).map(e=>({role:e.role===`user`?`admin`:`maxy`,content:e.role===`user`?e.content:void 0,events:e.role===`assistant`?e.events??(e.content?[{type:`text`,content:e.content}]:[]):void 0,...e.role===`user`&&e.attachments&&e.attachments.length>0?{attachments:e.attachments}:{},...e.role===`user`&&aD(e.content)?{hidden:!0}:{},timestamp:new Date(e.createdAt).getTime()||0,historical:!0,...e.messageId?{messageId:e.messageId}:{}}));t.length>0&&d(t)}).catch(e=>{console.error(`[chat] conversation resume failed:`,e),d([{role:`maxy`,events:[{type:`text`,content:`Could not load conversation history.`}],timestamp:Date.now()-1,historical:!0}])}))},onDelete:()=>{e.conversationId&&(console.info(`[admin-session-identity] cacheKey=${(e.cacheKey??`null`).slice(0,8)} conversationId=${e.conversationId.slice(0,8)} phase=${e.phase} surface=conversations-modal action=delete`),o(t=>t.filter(t=>t.conversationId!==e.conversationId)),s&&fetch(`/api/admin/sessions/${encodeURIComponent(e.conversationId)}?session_key=${encodeURIComponent(s)}`,{method:`DELETE`}).catch(e=>console.error(`[chat] conversation delete failed:`,e)))},onSwitchPreFlush:()=>{if(l||!s||!e.cacheKey)return;let t=e.cacheKey;console.info(`[admin-session-identity] cacheKey=${s.slice(0,8)} conversationId=null phase=${e.phase} surface=conversations-modal action=switch-pre-flush target=${t.slice(0,8)}`),n(),u(),d([]),fetch(`/api/admin/sessions/switch?session_key=${encodeURIComponent(s)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({target_session_key:t})}).then(e=>e.ok?e.json():Promise.reject(Error(`switch returned ${e.status}`))).then(e=>{try{sessionStorage.setItem(dD,e.session_key)}catch{}ve(e.session_key,`chat`),c(e.session_key),f(e.conversationId)}).catch(e=>{console.error(`[chat] pre-flush session switch failed:`,e),d([{role:`maxy`,events:[{type:`text`,content:`Could not switch into that session.`}],timestamp:Date.now()-1,historical:!0}])})}})]},t)})]}),(0,U.jsx)(cD,{state:x,popoverRef:S,surface:`conversations-modal`,buildLogsUrl:fD,onClose:w})]})}):null}function mD({src:e,onClose:t}){return e?(0,U.jsxs)(`div`,{className:`attachment-lightbox`,onClick:t,children:[(0,U.jsx)(`button`,{className:`attachment-lightbox-close`,onClick:t,"aria-label":`Close`,children:`×`}),(0,U.jsx)(`img`,{src:e,alt:`Attachment`,onClick:e=>e.stopPropagation()})]}):null}function hD({show:e,onClose:t,onConfirm:n}){return e?(0,U.jsx)(`div`,{className:`claude-info-overlay`,onClick:t,children:(0,U.jsxs)(`div`,{className:`claude-info-modal`,onClick:e=>e.stopPropagation(),children:[(0,U.jsxs)(`div`,{className:`claude-info-header`,children:[(0,U.jsx)(`span`,{children:`Compact conversation?`}),(0,U.jsx)(`button`,{className:`claude-info-close`,onClick:t,"aria-label":`Close`,children:`✕`})]}),(0,U.jsx)(`div`,{className:`claude-info-section`,style:{padding:`12px 14px`,fontSize:`11px`,color:`var(--text-secondary)`},children:`Summarises the conversation history to free up context window space. The session continues with a compressed summary.`}),(0,U.jsxs)(`div`,{className:`claude-info-section`,style:{display:`flex`,gap:`8px`,padding:`10px 14px`},children:[(0,U.jsx)(E,{variant:`secondary`,size:`sm`,style:{background:`var(--accent)`,flex:1},onClick:()=>{t(),n()},children:`Yes, compact`}),(0,U.jsx)(E,{variant:`secondary`,size:`sm`,style:{flex:1},onClick:t,children:`No`})]})]})}):null}function gD(e){let{show:t,onClose:n,claudeInfo:r,messages:i,sessionElapsed:a,conversationId:o,cacheKey:s}=e,[c,l]=(0,H.useState)(null);if(!t)return null;let u=i.flatMap(e=>e.events?.filter(e=>e.type===`usage`)??[]),d=u.at(-1),f=d?.peak_request_pct==null?d?.context_window?Math.round((d.input_tokens+d.cache_creation_tokens+d.cache_read_tokens)/d.context_window*100):0:Math.round(d.peak_request_pct*100),p=u.reduce((e,t)=>e+t.input_tokens+t.cache_creation_tokens+t.cache_read_tokens+t.output_tokens,0),m=i.flatMap(e=>e.events?.filter(e=>e.type===`rate_limit`)??[]).at(-1),h=u.reduce((e,t)=>e+(t.total_cost_usd??0),0),g=r?.account?.subscriptionType,_=e=>{let t=e*1e3-Date.now();if(t<=0)return`now`;let n=Math.floor(t/36e5),r=Math.floor(t%36e5/6e4);return n>0?`${n}h ${r}m`:`${r}m`};return(0,U.jsx)(`div`,{className:`claude-info-overlay`,onClick:n,children:(0,U.jsxs)(`div`,{className:`claude-info-modal`,onClick:e=>e.stopPropagation(),children:[(0,U.jsxs)(`div`,{className:`claude-info-header`,children:[(0,U.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`claude-info-icon`}),(0,U.jsx)(`span`,{children:`Claude Code`}),(0,U.jsx)(`button`,{className:`claude-info-close`,onClick:n,"aria-label":`Close`,children:`✕`})]}),(0,U.jsxs)(`div`,{className:`claude-info-section`,children:[(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Version`}),(0,U.jsx)(`span`,{className:`claude-info-value`,children:r?r.version:`…`})]}),(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Email`}),(0,U.jsx)(`span`,{className:`claude-info-value`,children:r?.account?.email??`…`})]})]}),(g||m||h>0)&&(0,U.jsxs)(`div`,{className:`claude-info-section`,children:[g&&(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Plan`}),(0,U.jsx)(`span`,{className:`claude-info-value`,style:{textTransform:`capitalize`},children:g})]}),m&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Usage`}),(0,U.jsxs)(`span`,{className:`claude-info-value`,children:[Math.round(m.utilization*100),`%`]})]}),(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Resets in`}),(0,U.jsx)(`span`,{className:`claude-info-value`,children:_(m.resetsAt)})]}),m.isUsingOverage&&(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Overage`}),(0,U.jsx)(`span`,{className:`claude-info-value`,children:`Active`})]})]}),h>0&&(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Session cost`}),(0,U.jsxs)(`span`,{className:`claude-info-value`,children:[`$`,h<.01?h.toFixed(4):h.toFixed(2)]})]})]}),(0,U.jsxs)(`div`,{className:`claude-info-section`,children:[(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Model`}),(0,U.jsx)(`span`,{className:`claude-info-value`,children:r?.model??`…`})]}),(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Context used`}),(0,U.jsx)(`span`,{className:`claude-info-value`,children:f>0?`${f}%`:`—`})]}),(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Tokens`}),(0,U.jsx)(`span`,{className:`claude-info-value`,children:p>0?Tt(p):`—`})]}),(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Session`}),(0,U.jsx)(`span`,{className:`claude-info-value`,children:wt(a)})]}),(o||s)&&(()=>{let e=o??s??``;return(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Session`}),(0,U.jsx)(`button`,{type:`button`,className:`claude-info-value claude-info-id-copy`,title:`${e} (${o?`flushed`:`pre-flush`}) — click to copy`,onClick:async()=>{l(await L(e)?`copied`:`failed`),setTimeout(()=>l(null),1200)},children:c===`copied`?`copied ✓`:c===`failed`?`copy failed ✕`:`${e.slice(0,8)}…`})]})})()]})]})})}var _D=5e3,vD={atPhase:8};function yD({show:e,onClose:t,versionInfo:n,cacheKey:r,onUpgradeComplete:i}){let[a,o]=(0,H.useState)(`prompt`),[s,c]=(0,H.useState)(``),[l,u]=(0,H.useState)(!1),[d,f]=(0,H.useState)(null),[p,m]=(0,H.useState)(null),[h,g]=(0,H.useState)(null),_=(0,H.useRef)(null),v=n?.latest??null,y=(0,H.useCallback)(()=>{_.current&&=(clearInterval(_.current),null)},[]);(0,H.useEffect)(()=>{e||(y(),o(`prompt`),c(``),u(!1),f(null),m(null),g(null))},[e,y]),(0,H.useEffect)(()=>y,[y]),(0,H.useEffect)(()=>{if(!(!e||a!==`running`||!v))return _.current=setInterval(async()=>{try{let e=await fetch(`/api/admin/version`,{cache:`no-store`});if(!e.ok)return;(await e.json()).installed===v&&(y(),o(`succeeded`),i(),setTimeout(()=>window.location.reload(),2e3))}catch{}},_D),y},[e,a,v,i,y]);let b=(0,H.useCallback)(async()=>{if(!(!v||!r||a!==`prompt`)){if(!s){f(`Enter your device password first.`);return}f(null),m(null),o(`priming`);try{let e=await fetch(`/api/admin/actions/sudo-prime?session_key=${encodeURIComponent(r)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({password:s,session_key:r})});if(e.status!==204){f((await e.json().catch(()=>({}))).error??`Password check failed (status ${e.status})`),o(`prompt`);return}}catch(e){f(e instanceof Error?e.message:`Password check network error`),o(`prompt`);return}try{let e=await fetch(`/api/admin/actions/upgrade?session_key=${encodeURIComponent(r)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({sudoPassword:s,session_key:r})}),t=await e.json().catch(()=>({}));if(!e.ok||!t.actionId){m(t.error??`launch failed (status ${e.status})`),o(`launch-failed`);return}g(t.actionId),o(`running`)}catch(e){m(e instanceof Error?e.message:`launch network error`),o(`launch-failed`)}finally{c(``)}}},[s,v,r,a]);return e?(0,U.jsx)(`div`,{className:`claude-info-overlay`,onClick:()=>{(a===`prompt`||a===`succeeded`||a===`launch-failed`)&&t()},children:(0,U.jsxs)(`div`,{className:`claude-info-modal update-modal`,onClick:e=>e.stopPropagation(),children:[(0,U.jsxs)(`div`,{className:`claude-info-header`,children:[(0,U.jsx)(de,{size:12}),`Software Update`,(0,U.jsx)(`button`,{className:`claude-info-close`,onClick:t,children:`✕`})]}),(0,U.jsxs)(`div`,{className:`update-modal-body`,children:[(0,U.jsxs)(`div`,{className:`update-modal-versions`,children:[(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Installed`}),(0,U.jsxs)(`span`,{className:`claude-info-value`,children:[`v`,n?.installed??`…`]})]}),(0,U.jsxs)(`div`,{className:`claude-info-row`,children:[(0,U.jsx)(`span`,{className:`claude-info-label`,children:`Available`}),(0,U.jsxs)(`span`,{className:`claude-info-value update-version-new`,children:[`v`,v??`…`]})]})]}),(a===`prompt`||a===`priming`||a===`launch-failed`)&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsxs)(`div`,{className:`form-input__field`,style:{marginTop:12},children:[(0,U.jsx)(`label`,{className:`form-input__label`,htmlFor:`upgrade-sudo`,children:`Device password`}),(0,U.jsxs)(`div`,{className:`tunnel-route__row`,children:[(0,U.jsx)(`input`,{id:`upgrade-sudo`,className:`form-input__input tunnel-route__input`,type:l?`text`:`password`,autoComplete:`current-password`,value:s,onChange:e=>{c(e.target.value),f(null)},disabled:a===`priming`,onKeyDown:e=>{e.key===`Enter`&&s&&b()}}),(0,U.jsx)(`button`,{type:`button`,className:`tunnel-route__suffix`,onClick:()=>u(e=>!e),disabled:a===`priming`,style:{cursor:`pointer`,border:`none`,background:`inherit`},"aria-label":l?`Hide password`:`Show password`,children:l?`Hide`:`Show`})]}),(0,U.jsx)(`div`,{className:`form-input__field-desc`,children:`Needed once. The installer uses it to run the privileged steps; it is never saved.`}),d&&(0,U.jsx)(`div`,{className:`tunnel-route__error`,children:d}),p&&(0,U.jsx)(`div`,{className:`tunnel-route__error`,role:`alert`,children:p})]}),(0,U.jsx)(`button`,{type:`button`,className:`update-modal-btn`,onClick:b,disabled:!v||!s||a===`priming`,children:a===`priming`?`Checking password…`:a===`launch-failed`?`Try again`:`Upgrade`})]}),a===`running`&&h&&r&&(0,U.jsx)(`div`,{className:`update-modal-terminal`,style:{height:360,marginTop:10},children:(0,U.jsx)(wE,{actionId:h,cacheKey:r,selfRestart:vD})}),a===`succeeded`&&(0,U.jsxs)(`div`,{className:`update-modal-result`,children:[(0,U.jsx)(Ae,{size:14,className:`update-success-icon`}),(0,U.jsxs)(`span`,{children:[`Upgraded to v`,v,` — reloading…`]})]})]})]})}):null}function bD(e){let{conversationId:t,cacheKey:n,disconnecting:r,onOpenConversations:i,handleDisconnect:a,onAfterAction:o}=e,s=!t&&!n;return(0,U.jsxs)(`div`,{className:`chat-actions-menu`,children:[(0,U.jsxs)(`button`,{type:`button`,className:`chat-action`,onClick:()=>{o(),i()},children:[(0,U.jsx)(tt,{size:14}),(0,U.jsx)(`span`,{className:`action-label`,children:`Conversations`})]}),(0,U.jsxs)(`button`,{type:`button`,className:`chat-action`,disabled:r,onClick:async()=>{o(),await a()},children:[r?(0,U.jsx)(ge,{size:14,className:`animate-spin`}):(0,U.jsx)(B,{size:14}),(0,U.jsx)(`span`,{className:`action-label`,children:r?`Disconnecting...`:`Disconnect Claude`})]}),(0,U.jsxs)(`button`,{type:`button`,className:`chat-action`,disabled:s,title:t?`Download stream log`:n?`Download stream log (pre-flush)`:`No session active — reload the page to start one`,onClick:async()=>{o();let e=(t??``).slice(-8),r=(n??``).slice(-8);if(console.debug(`[stream-log-button] click conversationId=${e||`null`} cacheKey=${r||`null`} disabled=${s}`),s)return;let i=`${fD({conversationId:t,cacheKey:n},`stream`)}&download=1`,a=0,c=0,l;try{let e=await fetch(i);a=e.status;let t=e.headers.get(`content-length`);l=await e.blob(),c=t?Number(t):l.size}catch(e){a=0,console.debug(`[stream-log-button] fetch-failed reason=${e instanceof Error?e.message:String(e)}`)}try{let t=JSON.stringify({kind:`event`,source:`stream-log-click`,url:i,status:a,bytes:c,conversationId:e});navigator.sendBeacon(`/api/_client-error`,new Blob([t],{type:`application/json`}))||console.debug(`[stream-log-button] sendBeacon returned false`)}catch(e){console.debug(`[stream-log-button] beacon-failed reason=${e instanceof Error?e.message:String(e)}`)}if(l&&a>=200&&a<300){let t=URL.createObjectURL(l),n=document.createElement(`a`);n.href=t,n.download=`stream-${e||`session`}.log`,n.click(),setTimeout(()=>URL.revokeObjectURL(t),5e3)}},children:[(0,U.jsx)(pt,{size:14}),(0,U.jsx)(`span`,{className:`action-label`,children:`Stream log`})]})]})}function xD(e){let{selectionMode:t,selectedItems:n,copyToast:r,exitSelection:i,enterSelection:a,copySelected:o,showCopyToast:s,input:l,setInput:d,inputRef:p,pendingFiles:m,setPendingFiles:h,isDragOver:y,attachError:b,fileInputRef:x,addFiles:S,removeFile:C,onDragOver:w,onDragLeave:T,onDrop:D,isStreaming:j,wasPaused:M,messages:P,messageQueueRef:ee,setQueue:F,sendMessage:ne,stopStreaming:re,disconnecting:ie,handleDisconnect:R,claudeInfo:ae,setClaudeInfo:z,setShowClaudeInfo:oe,conversationId:se,cacheKey:ce,onNewConversation:le,newConversationDisabled:ue,onOpenConversations:de,sidebarVisible:fe}=e,[pe,me]=(0,H.useState)(!1),he=(0,H.useRef)(null),[ge,_e]=(0,H.useState)(!1),ve=(0,H.useRef)(null),ye=(0,H.useRef)(!1),be=I(),xe=be.state===`recording`||be.state===`paused`||be.state===`sending`,Se=!xe&&!M&&!l.trim()&&m.length===0;async function Ce(){let e=await be.send();if(!e)return;let t=e.type===`audio/ogg`?`.ogg`:e.type===`audio/mp4`?`.m4a`:`.webm`,n=new File([e],`voice-note${t}`,{type:e.type});if(j){F([...ee.current,{text:`[Voice note]`,files:[n],timestamp:Date.now()}]);return}ne(`[Voice note]`,[n])}return(0,H.useEffect)(()=>{t||_e(!1)},[t]),(0,H.useEffect)(()=>{if(!ge)return;let e=e=>{e.target.closest(`.selection-copy-wrap`)||_e(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[ge]),(0,H.useEffect)(()=>{if(!pe)return;let e=e=>{if(e.key===`Escape`){me(!1);return}if(e.key===`Tab`&&he.current){let t=he.current.querySelectorAll(`.actions-menu-items button:not([disabled])`);if(t.length===0)return;let n=t[0],r=t[t.length-1];e.shiftKey&&document.activeElement===n?(e.preventDefault(),r.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n.focus())}},t=e=>{he.current&&!he.current.contains(e.target)&&me(!1)};return document.addEventListener(`keydown`,e),document.addEventListener(`mousedown`,t),()=>{document.removeEventListener(`keydown`,e),document.removeEventListener(`mousedown`,t)}},[pe]),t?(0,U.jsx)(`div`,{className:`chat-input-area`,children:(0,U.jsxs)(`div`,{className:`selection-bar`,children:[(0,U.jsxs)(`span`,{className:`selection-count`,children:[n.size,` Selected`]}),(0,U.jsxs)(`div`,{className:`selection-copy-wrap`,children:[(0,U.jsxs)(`button`,{type:`button`,className:`selection-copy`,onPointerDown:()=>{if(ge){_e(!1);return}ye.current=!1,ve.current=setTimeout(()=>{ye.current=!0,_e(!0),ve.current=null},500)},onPointerUp:()=>{ve.current!==null&&(clearTimeout(ve.current),ve.current=null)},onPointerLeave:()=>{ve.current!==null&&(clearTimeout(ve.current),ve.current=null)},onPointerCancel:()=>{ve.current!==null&&(clearTimeout(ve.current),ve.current=null)},onClick:async()=>{ye.current||await o(e=>eD(P,e),(e,t)=>{let[n,r]=[e.slice(0,e.lastIndexOf(`_`)),e.slice(e.lastIndexOf(`_`)+1)],[i,a]=[t.slice(0,t.lastIndexOf(`_`)),t.slice(t.lastIndexOf(`_`)+1)],o=parseInt(n,10)-parseInt(i,10);return o===0?r===`admin`?-1:a===`admin`?1:parseInt(r,10)-parseInt(a,10):o})},children:[(0,U.jsx)(f,{size:18}),(0,U.jsx)(`span`,{children:`Copy`})]}),ge&&(0,U.jsx)(`div`,{className:`copy-menu`,children:[[`all`,`All events`],[`text`,`Text messages only`],[`non-text`,`Non-text only`]].map(([e,t])=>(0,U.jsx)(`button`,{type:`button`,className:`copy-menu-item`,onClick:async()=>{let t=tD(P,e);t&&s(await L(t)),i()},children:t},e))})]}),(0,U.jsx)(`button`,{type:`button`,className:`selection-cancel`,onClick:i,children:`Cancel`})]})}):(0,U.jsxs)(`div`,{className:`chat-input-area`,children:[(0,U.jsx)(`input`,{ref:x,type:`file`,multiple:!0,accept:Ot,style:{display:`none`},onChange:e=>{e.target.files&&S([...e.target.files]),e.target.value=``}}),m.length>0&&(0,U.jsx)(`div`,{className:`attachment-strip`,children:m.map((e,t)=>(0,U.jsxs)(`div`,{className:`attachment-chip`,children:[e.type.startsWith(`image/`)?(0,U.jsx)(`img`,{src:URL.createObjectURL(e),alt:e.name,className:`attachment-chip-thumb`}):e.type.startsWith(`audio/`)?(0,U.jsx)(k,{size:14}):e.type===`application/pdf`?(0,U.jsx)(g,{size:14}):(0,U.jsx)(v,{size:14}),(0,U.jsx)(`span`,{className:`attachment-chip-name`,children:e.name}),(0,U.jsx)(`button`,{type:`button`,className:`attachment-chip-remove`,onClick:()=>C(t),"aria-label":`Remove ${e.name}`,children:`×`})]},t))}),b&&(0,U.jsx)(`p`,{className:`attach-error`,children:b}),be.state===`error`&&be.errorMessage&&(0,U.jsxs)(`p`,{className:`voice-error`,role:`alert`,children:[(0,U.jsx)(k,{size:14}),be.errorMessage]}),(0,U.jsx)(O,{inputRef:p}),xe?(0,U.jsx)(`div`,{className:`chat-form voice-active`,children:(0,U.jsx)(N,{state:be.state,elapsedSeconds:be.elapsedSeconds,waveform:be.waveform,onTogglePause:be.togglePause,onDiscard:be.discard,onSend:Ce})}):(0,U.jsxs)(`form`,{className:`chat-form${y?` drag-over`:``}`,onSubmit:e=>{e.preventDefault();let t=l.trim()||(M?`continue`:``);if(!(!t&&m.length===0)){if(j){F([...ee.current,{text:t,files:[...m],timestamp:Date.now()}]),d(``),h([]),p.current?.resetHeight();return}ne(t),p.current?.resetHeight()}},onDragOver:w,onDragLeave:T,onDrop:D,onPaste:e=>{let t=e.clipboardData?.items;if(!t)return;let n=[];for(let e of t){if(e.kind!==`file`)continue;let t=e.getAsFile();if(!t)continue;let r=t.type.split(`/`)[1]?.replace(`jpeg`,`jpg`)||`png`;n.push(new File([t],`pasted-image-${Date.now()}.${r}`,{type:t.type}))}n.length>0&&S(n)},children:[(0,U.jsx)(E,{variant:`icon`,type:`button`,onClick:()=>x.current?.click(),"aria-label":`Attach file`,children:(0,U.jsx)(c,{size:14})}),(0,U.jsx)(te,{ref:p,value:l,onChange:d}),j?(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(E,{variant:`send`,type:`button`,onClick:()=>re(!0),"aria-label":`Pause`,style:{background:`var(--text-secondary)`},children:(0,U.jsx)(A,{size:14})}),(0,U.jsx)(E,{variant:`send`,type:`button`,onClick:()=>re(!1),"aria-label":`Stop`,style:{background:`var(--danger)`},children:(0,U.jsx)(gt,{size:14})})]}):Se?(0,U.jsx)(E,{variant:`send`,type:`button`,onClick:be.start,"aria-label":`Record voice note`,children:(0,U.jsx)(k,{size:14})}):(0,U.jsx)(E,{variant:`send`,type:`submit`,disabled:!l.trim()&&m.length===0&&!M,"aria-label":`Send message`,children:M?(0,U.jsx)(_,{size:14}):(0,U.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,U.jsx)(`line`,{x1:`5`,y1:`12`,x2:`19`,y2:`12`}),(0,U.jsx)(`polyline`,{points:`12 5 19 12 12 19`})]})})]}),(0,U.jsxs)(`div`,{className:`chat-actions`,ref:he,children:[!fe&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`button`,{className:`burger-trigger`,onClick:()=>me(e=>!e),"aria-expanded":pe,"aria-haspopup":`true`,"aria-label":`Conversation actions`,children:(0,U.jsx)(ze,{size:16})}),(0,U.jsx)(`div`,{className:`actions-menu-items${pe?` actions-menu-open`:``}`,children:(0,U.jsx)(bD,{conversationId:se,cacheKey:ce,disconnecting:ie,onOpenConversations:de,handleDisconnect:R,onAfterAction:()=>me(!1)})})]}),(0,U.jsx)(`button`,{type:`button`,className:`chat-action-icon`,title:`New conversation`,"aria-label":`New conversation`,disabled:ue,onClick:le,children:(0,U.jsx)(Ke,{size:16})}),(0,U.jsx)(`button`,{type:`button`,className:`chat-action-icon`,title:`Select messages`,"aria-label":`Select messages`,onClick:a,children:(0,U.jsx)(u,{size:16})}),(0,U.jsxs)(`div`,{className:`powered-by`,onClick:async()=>{if(oe(!0),!ae){let e=await fetch(`/api/admin/claude-info`);e.ok&&z(await e.json())}},children:[(0,U.jsx)(`img`,{src:`/brand/claude.png`,alt:`Claude`,className:`powered-by-icon`}),(0,U.jsx)(`span`,{children:`Powered by Claude Code`})]})]})]})}var SD=`maxy-vnc-overlay-popout`;function CD(e){let[t,n]=(0,H.useState)(!1),r=(0,H.useRef)(null),i=(0,H.useRef)(null),a=(0,H.useCallback)(()=>{i.current&&=(clearInterval(i.current),null),r.current&&!r.current.closed&&r.current.close(),r.current=null,n(!1)},[]),o=(0,H.useCallback)(()=>{let t=`/vnc-popout.html?title=${encodeURIComponent(R.productName)}`,o=window.open(t,SD,`width=1024,height=768`);o&&(r.current=o,n(!0),i.current=setInterval(()=>{r.current?.closed&&(a(),e?.())},500))},[a,e]);return(0,H.useEffect)(()=>()=>a(),[a]),{poppedOut:t,popout:o,cleanupPopout:a}}var wD=(0,H.forwardRef)(function({onClose:e},t){Ct(),un(`overlay`);let{poppedOut:n,popout:r,cleanupPopout:i}=CD(e);return(0,H.useImperativeHandle)(t,()=>({popout:r}),[r]),n?(0,U.jsxs)(`div`,{className:`browser-overlay-popout`,children:[(0,U.jsx)(h,{className:`browser-viewer__icon`}),(0,U.jsx)(`span`,{className:`browser-viewer__title`,children:R.productName}),(0,U.jsx)(`span`,{className:`browser-viewer__popout-label`,children:`Popped out`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:ct,onClick:()=>i(),"aria-label":`Pop back in`}),e&&(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:oe,onClick:()=>{i(),e()},"aria-label":`Close`})]}):(0,U.jsx)(`iframe`,{src:`/vnc-viewer.html`,className:`browser-surface__iframe`,title:R.productName})});function TD({onClose:e}){Ct(),un(`overlay`);let{poppedOut:t,popout:n,cleanupPopout:r}=CD(e),i=(0,H.useCallback)(()=>{r(),e()},[r,e]);(0,H.useEffect)(()=>{if(t)return;let e=e=>{e.key===`Escape`&&i()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[t,i]);let a=ln({handlePopout:n,disabled:t});return t?(0,U.jsxs)(`div`,{className:`browser-overlay-popout`,children:[(0,U.jsx)(h,{className:`browser-viewer__icon`}),(0,U.jsx)(`span`,{className:`browser-viewer__title`,children:R.productName}),(0,U.jsx)(`span`,{className:`browser-viewer__popout-label`,children:`Popped out`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:ct,onClick:()=>{r()},"aria-label":`Pop back in`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:oe,onClick:i,"aria-label":`Close`})]}):(0,U.jsxs)(`div`,{className:`browser-viewer-fullscreen`,children:[(0,U.jsxs)(`div`,{className:`browser-viewer-fullscreen__bar`,...a,children:[(0,U.jsx)(h,{className:`browser-viewer__icon`}),(0,U.jsx)(`span`,{className:`browser-viewer-fullscreen__title`,children:R.productName}),(0,U.jsxs)(`div`,{className:`browser-viewer-fullscreen__actions`,children:[(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:Be,onClick:n,"aria-label":`Pop out`}),(0,U.jsx)(E,{variant:`ghost`,size:`sm`,icon:oe,onClick:i,"aria-label":`Close`})]})]}),(0,U.jsx)(`iframe`,{src:`/vnc-viewer.html`,className:`browser-viewer-fullscreen__iframe`,title:R.productName})]})}var ED=`maxy-admin-session-key`,DD=(0,H.forwardRef)(function(e,t){let{businessName:n,cacheKey:r,conversationId:i,role:a,userName:o,userAvatar:s,sessions:c,sessionsLoading:l,sessionsError:u,ensureSessionsLoaded:d,refetchSessions:f,onSelectSession:p,onSelectArtefact:h,onSelectProjects:_,onSelectPeople:v,onSelectTasks:y,onSelectAgents:b,onCloseMobileDrawer:x,collapsed:S,onToggleCollapsed:C,mobileDrawerOpen:w,actions:T,recentsActions:E}=e;(0,H.useEffect)(()=>{d()},[d]);let D=(0,H.useRef)(null),{popover:O,popoverRef:k,toggle:A,close:j}=lD(D),M=uD(r,E.setSessions),N=R.productName,P=typeof o==`string`?o:o===null?`name unavailable`:n||N,ee=(P.trim().charAt(0)||`?`).toUpperCase(),[te,F]=(0,H.useState)(`all`),I=(0,H.useMemo)(()=>c.filter(e=>e.name).filter(e=>te===`all`?!0:(e.channel??`webchat`)===te),[c,te]),ne=I.length,re=i??r,[L,ie]=(0,H.useState)(`chat`),[z,ce]=(0,H.useState)([]),[le,ue]=(0,H.useState)(!1),[de,fe]=(0,H.useState)(null),[pe,me]=(0,H.useState)(!1);(0,H.useImperativeHandle)(t,()=>({patchArtefact(e,t){ce(n=>n.map(n=>n.id===e?{...n,...t}:n))}}),[]);let[he,_e]=(0,H.useState)(!1),ye=(0,H.useRef)(null);(0,H.useEffect)(()=>{if(!he)return;function e(e){ye.current&&!ye.current.contains(e.target)&&_e(!1)}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[he]);let be=(0,H.useCallback)(async()=>{if(r){me(!0),fe(null);try{let e=await fetch(`/api/admin/sidebar-artefacts?session_key=${encodeURIComponent(r)}`);if(!e.ok)throw Error(`status ${e.status}`);ce((await e.json()).artefacts??[]),ue(!0)}catch(e){let t=e instanceof Error?e.message:String(e);fe(`Failed to load artefacts: ${t}`),console.error(`[admin-ui] sidebar-artefacts fetch failed: ${t}`)}finally{me(!1)}}},[r]),xe=()=>{ie(`chat`),console.info(`[admin-ui] sidebar-nav surface=chat count=${ne}`)},Se=()=>{ie(`artefacts`),console.info(`[admin-ui] sidebar-nav surface=artefacts count=${le?z.length:0} collapsed=${S}`),S&&C(),le||be()},Ce=S?24:16,we=L===`chat`?`Recents`:`Artefacts`,Te=L===`chat`?l?`…`:String(ne):pe?`…`:String(z.length),Ee=L===`chat`?l:pe,B=()=>{L===`chat`?f():be(),console.info(`[admin-ui] sidebar-refresh surface=${L}`)};return(0,U.jsxs)(`aside`,{className:`side`,children:[(0,U.jsx)(`div`,{className:`side-head`,children:(0,U.jsx)(`button`,{className:`icon-btn side-head-toggle`,title:w?`Close sidebar`:S?`Expand sidebar`:`Collapse sidebar`,type:`button`,"aria-label":w?`Close sidebar`:S?`Expand sidebar`:`Collapse sidebar`,onClick:()=>{w?(console.info(`[admin-ui] sidebar-head-toggle action=close-drawer state=closed`),x()):(console.info(`[admin-ui] sidebar-head-toggle action=toggle-collapsed state=${S?`expanded`:`collapsed`}`),C())},children:S?(0,U.jsx)(dt,{size:28}):(0,U.jsx)(ut,{size:28})})}),(0,U.jsxs)(`nav`,{className:`side-nav`,children:[(0,U.jsxs)(`button`,{type:`button`,className:`nav-row${L===`chat`?` active`:``}`,onClick:xe,children:[(0,U.jsx)(st,{size:Ce}),(0,U.jsx)(`span`,{className:`label`,children:`Chat`}),(0,U.jsx)(`span`,{className:`kbd`})]}),(0,U.jsxs)(`button`,{type:`button`,className:`nav-row`,onClick:()=>{console.info(`[admin-ui] sidebar-nav surface=people`),v(),x()},children:[(0,U.jsx)(bt,{size:Ce}),(0,U.jsx)(`span`,{className:`label`,children:`People`}),(0,U.jsx)(`span`,{className:`kbd`})]}),(0,U.jsxs)(`button`,{type:`button`,className:`nav-row`,onClick:()=>{console.info(`[admin-ui] sidebar-nav surface=agents`),b(),x()},children:[(0,U.jsx)(De,{size:Ce}),(0,U.jsx)(`span`,{className:`label`,children:`Agents`}),(0,U.jsx)(`span`,{className:`kbd`})]}),(0,U.jsxs)(`button`,{type:`button`,className:`nav-row`,onClick:()=>{console.info(`[admin-ui] sidebar-nav surface=projects`),_(),x()},children:[(0,U.jsx)(Oe,{size:Ce}),(0,U.jsx)(`span`,{className:`label`,children:`Projects`}),(0,U.jsx)(`span`,{className:`kbd`})]}),(0,U.jsxs)(`button`,{type:`button`,className:`nav-row`,onClick:()=>{console.info(`[admin-ui] sidebar-nav surface=tasks`),y(),x()},children:[(0,U.jsx)(et,{size:Ce}),(0,U.jsx)(`span`,{className:`label`,children:`Tasks`}),(0,U.jsx)(`span`,{className:`kbd`})]}),(0,U.jsxs)(`button`,{type:`button`,className:`nav-row${L===`artefacts`?` active`:``}`,onClick:Se,children:[(0,U.jsx)(g,{size:Ce}),(0,U.jsx)(`span`,{className:`label`,children:`Artefacts`}),(0,U.jsx)(`span`,{className:`kbd`})]})]}),(0,U.jsxs)(`div`,{className:`side-list`,ref:D,children:[(0,U.jsxs)(`div`,{className:`group-head`,children:[(0,U.jsx)(`span`,{children:we}),(0,U.jsxs)(`span`,{className:`group-head-meta`,children:[(0,U.jsx)(`button`,{type:`button`,className:`group-head-refresh`,title:`Refresh ${we.toLowerCase()}`,"aria-label":`Refresh ${we.toLowerCase()}`,onClick:B,disabled:Ee,children:(0,U.jsx)(se,{size:12,className:Ee?`spinning`:void 0})}),(0,U.jsx)(`span`,{children:Te})]})]}),L===`chat`&&(0,U.jsxs)(U.Fragment,{children:[u&&(0,U.jsx)(`div`,{className:`conv`,style:{color:`var(--text-tertiary)`,cursor:`default`},children:u}),(0,U.jsxs)(an,{className:`conv-channel-filter`,value:te,onChange:e=>{let t=e.target.value;F(t),console.info(`[admin-ui] sidebar-channel-filter set value=${t}`)},"aria-label":`Filter conversations by channel`,children:[(0,U.jsx)(`option`,{value:`all`,children:`All channels`}),(0,U.jsx)(`option`,{value:`webchat`,children:`Web`})]}),I.map(e=>{let t=e.conversationId??e.cacheKey??``,n=t!==``&&t===re,i=e.channel??`webchat`,a=e.phase===`pre-flush`,o=M.isEditingRow(e.conversationId),s=o&&M.editState?.phase===`loading`,c=o&&M.editState?.phase===`editing`,l=o&&M.editState?.phase===`error`,u=t=>{let n=e.cacheKey?e.cacheKey.slice(0,8):`null`,r=e.conversationId?e.conversationId.slice(0,8):`null`;console.info(`[admin-session-identity] cacheKey=${n} conversationId=${r} phase=${e.phase} surface=sidebar-recents action=${t}`)};return(0,U.jsxs)(`div`,{className:`conv${n?` active`:``}${a?` conv-pre-flush`:``}${o?` conv-editing`:``}`,children:[!o&&(0,U.jsxs)(`button`,{type:`button`,className:`conv-name-button`,onClick:()=>{u(`select`),p(e),x()},children:[i===`whatsapp`&&(0,U.jsx)(it,{size:12,className:`conv-channel-icon`,"aria-label":`WhatsApp`}),(0,U.jsx)(`span`,{className:`conv-name`,children:e.name??`(untitled)`})]}),s&&(0,U.jsxs)(`span`,{className:`conversations-row-name conversations-edit-loading conv-edit-loading`,children:[(0,U.jsx)(ge,{size:12,className:`spin`}),` Generating suggestion…`]}),c&&(0,U.jsxs)(`div`,{className:`conversations-edit-inline conv-edit-inline`,children:[(0,U.jsx)(`input`,{ref:M.editInputRef,type:`text`,className:`conversations-edit-input`,value:M.editValue,onChange:e=>M.setEditValue(e.target.value),onKeyDown:t=>{t.key===`Enter`&&M.editValue.trim()&&e.conversationId&&M.confirmRename(e.conversationId),t.key===`Escape`&&M.cancelEdit()},maxLength:200}),(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-confirm`,title:`Confirm rename`,disabled:!M.editValue.trim()||M.confirming,onClick:()=>e.conversationId&&M.confirmRename(e.conversationId),children:M.confirming?(0,U.jsx)(ge,{size:13,className:`spin`}):(0,U.jsx)(m,{size:13})}),(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-cancel`,title:`Cancel`,onClick:M.cancelEdit,children:(0,U.jsx)(oe,{size:13})})]}),l&&(0,U.jsxs)(`div`,{className:`conversations-edit-inline conv-edit-inline`,children:[(0,U.jsx)(`span`,{className:`conversations-edit-error`,children:M.editState.reason}),(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-retry`,title:`Retry`,onClick:()=>e.conversationId&&M.requestSuggestion(e.conversationId),children:(0,U.jsx)(ae,{size:13})}),(0,U.jsx)(`button`,{type:`button`,className:`conversations-action conversations-cancel`,title:`Cancel`,onClick:M.cancelEdit,children:(0,U.jsx)(oe,{size:13})})]}),!o&&(0,U.jsx)(oD,{row:e,surface:`sidebar-recents`,rowId:t,isStreaming:E.isStreaming,activeCacheKey:r,isLogsOpen:O?.rowId===t,onLogsToggle:n=>{u(`logs`),A(t,{conversationId:e.conversationId,cacheKey:e.cacheKey},n)},onRequestRename:()=>{e.conversationId&&(u(`rename`),M.requestSuggestion(e.conversationId))},onResume:()=>{!e.conversationId||E.isStreaming||(u(`resume`),p(e),x())},onDelete:()=>{if(!e.conversationId)return;u(`delete`);let t=e.conversationId;E.setSessions(e=>e.filter(e=>e.conversationId!==t)),r&&fetch(`/api/admin/sessions/${encodeURIComponent(t)}?session_key=${encodeURIComponent(r)}`,{method:`DELETE`}).catch(e=>console.error(`[chat] conversation delete failed:`,e))},onSwitchPreFlush:()=>{if(E.isStreaming||!r||!e.cacheKey)return;let t=e.cacheKey;u(`switch-pre-flush target=${t.slice(0,8)}`),E.resetConversation(),E.setMessages([]),fetch(`/api/admin/sessions/switch?session_key=${encodeURIComponent(r)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({target_session_key:t})}).then(e=>e.ok?e.json():Promise.reject(Error(`switch returned ${e.status}`))).then(e=>{try{sessionStorage.setItem(ED,e.session_key)}catch{}ve(e.session_key,`chat`),E.setCacheKey(e.session_key),E.setConversationId(e.conversationId)}).catch(e=>{console.error(`[chat] pre-flush session switch failed:`,e),E.setMessages([{role:`maxy`,events:[{type:`text`,content:`Could not switch into that session.`}],timestamp:Date.now()-1,historical:!0}])})}})]},t===``?e.updatedAt:t)})]}),L===`artefacts`&&(0,U.jsxs)(U.Fragment,{children:[de&&(0,U.jsx)(`div`,{className:`conv`,style:{color:`var(--text-tertiary)`,cursor:`default`},children:de}),le&&!de&&z.length===0&&(0,U.jsx)(`div`,{className:`conv`,style:{color:`var(--text-tertiary)`,cursor:`default`},children:`No artefacts yet`}),z.map(e=>(0,U.jsxs)(`button`,{type:`button`,className:`conv`,onClick:()=>{h({docId:e.id,name:e.name,content:e.content,editable:e.editable,mimeType:e.mimeType,skipReason:e.skipReason},`sidebar-artefacts`),x()},children:[(0,U.jsx)(`span`,{className:`conv-name`,children:e.name}),(0,U.jsx)(`span`,{className:`conv-kind`,"data-kind":e.kind===`agent-template`?`agent`:`doc`,children:e.kind===`agent-template`?`agent`:`doc`})]},e.id))]}),(0,U.jsx)(cD,{state:O,popoverRef:k,surface:`sidebar-recents`,buildLogsUrl:fD,onClose:j})]}),(0,U.jsxs)(`div`,{className:`side-foot`,ref:ye,children:[(0,U.jsx)(`div`,{className:`avatar`,children:s?(0,U.jsx)(`img`,{src:s,alt:P}):ee}),(0,U.jsxs)(`div`,{className:`who`,children:[(0,U.jsx)(`span`,{className:`name`,children:P}),(0,U.jsx)(`span`,{className:`role`,children:a??`operator`})]}),(0,U.jsx)(`button`,{className:`icon-btn side-foot-actions-trigger`,title:`Conversation actions`,type:`button`,"aria-label":`Conversation actions`,"aria-haspopup":`true`,"aria-expanded":he,onClick:()=>_e(e=>!e),children:(0,U.jsx)(ze,{size:Ce})}),he&&(0,U.jsx)(`div`,{className:`side-foot-actions-popover`,children:(0,U.jsx)(bD,{...T,onAfterAction:()=>_e(!1)})})]})]})}),OD=()=>{},kD=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;function AD(e){return kD.test(e)?`uuid`:e.startsWith(`agent-template:`)?`agent-template`:`other`}var jD={"null-attachmentId":`No file backing this artefact.`,"non-text-mime":`Content type cannot be displayed inline.`,"containment-rejected":`File path failed containment check; cannot display.`,"missing-on-disk":`File is missing on disk.`};function MD({reason:e}){return(0,U.jsxs)(`div`,{className:`art-skip-banner`,role:`status`,children:[(0,U.jsx)(Ue,{size:14}),(0,U.jsx)(`span`,{children:jD[e]})]})}function ND({src:e,name:t,docId:n}){let[r,i]=(0,H.useState)(!1),a=(0,H.useRef)(null),o=(0,H.useRef)(!1),s=(0,H.useRef)(!1),c=(0,H.useCallback)(e=>{s.current||(s.current=!0,console.info(`[admin-ui] artefact-pdf-fallback id=${n.slice(0,8)} reason=${e}`),i(!0))},[n]);(0,H.useEffect)(()=>{let e=setTimeout(()=>{o.current||c(`onload-timeout`)},3e3);return()=>clearTimeout(e)},[c]);let l=()=>{o.current=!0;try{let e=a.current?.contentDocument?.body;e&&e.children.length===0&&!e.textContent?.trim()&&c(`empty-body`)}catch{}};return r?(0,U.jsxs)(`a`,{className:`art-pdf-fallback`,href:e,download:t,children:[(0,U.jsx)(g,{size:20}),(0,U.jsxs)(`div`,{className:`art-pdf-fallback-text`,children:[(0,U.jsx)(`div`,{className:`art-pdf-fallback-name`,children:t}),(0,U.jsx)(`div`,{className:`art-pdf-fallback-hint`,children:`Your browser can't display this PDF inline. Click to download.`})]}),(0,U.jsx)(de,{size:16})]}):(0,U.jsx)(`iframe`,{ref:a,className:`art-pdf`,src:e,title:t,"aria-label":`PDF preview of ${t}`,onLoad:l,onError:()=>c(`onerror`)})}var PD={browser:`Browser`,data:`Data`,graph:`Graph`};function FD({selection:e,trigger:t,cacheKey:n,onClose:r,onArtefactSaved:i,onSwapToGraph:a}){let o=e!==null,s=e?.surface??null,c=(0,H.useRef)(null),l=(0,H.useRef)(null),[u,d]=(0,H.useState)(null),p=e?.surface===`doc`?e.docId:null,m=[250,500,1e3,2e3],g=(0,H.useCallback)(e=>{if(!n||!p)return;let t={};try{t=JSON.parse(e)}catch{return}if(t.action!==`save`||typeof t.content!=`string`)return;d(null);let r=t.content,a=e=>{fetch(`/api/admin/sidebar-artefact-save?session_key=${encodeURIComponent(n)}`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({id:p,content:r})}).then(async t=>{if(t.status===503&&e<m.length){let t=m[e];console.info(`[admin-ui] artefact-save-retry docId=${p} attempt=${e+1} delayMs=${t} status=503`),setTimeout(()=>a(e+1),t);return}if(!t.ok){let n=(await t.json().catch(()=>({}))).error??`status ${t.status}`,r=t.status===503?`retries-exhausted`:`status-${t.status}`;d(`Save failed: ${n}`),console.error(`[admin-ui] artefact-save-failed docId=${p} status=${t.status} attempts=${e+1} source=${r} error="${n}"`);return}let n=await t.json();i?.(p,n.updatedAt,r)}).catch(t=>{let n=t instanceof Error?t.message:String(t);d(`Save failed: ${n}`),console.error(`[admin-ui] artefact-save-failed docId=${p} attempts=${e+1} error="${n}"`)})};a(0)},[n,p,i]);(0,H.useEffect)(()=>{d(null)},[p]),(0,H.useEffect)(()=>{let n=e?.surface===`doc`?e.docId:null,r=e?.surface===`graph`?e.focusNodeId??null:null,i=e?.surface??null,a=i===null?`closed`:`${i}:${n??`none`}:${r??`none`}`;if(a===c.current)return;let s=o?`open`:`closed`,l=o?t??`chat-link`:`toolbar-close`,u=i??c.current?.split(`:`)[0]??`doc`,d=n?` docIdShape=${AD(n)} docIdSample=${n.slice(0,8)}`:``;console.info(`[admin-ui] artefact-pane state=${s} docId=${n??`none`} trigger=${l} surface=${u}${d}`),c.current=a},[e,t,o]);let _=e?.surface===`doc`,v=_?(e.tag||e.name.split(`.`).pop()||`doc`).toUpperCase().slice(0,6):``,y=_?e.revision||`rev 1`:`live`,b=e&&e.surface!==`doc`?PD[e.surface]:``,x=_?e.name:b;return(0,U.jsxs)(`aside`,{className:`artefact`,"data-open":o,"data-surface":s??`none`,children:[(0,U.jsxs)(`div`,{className:`art-head`,children:[(0,U.jsxs)(`div`,{className:`left`,children:[!_&&s===`browser`&&(0,U.jsx)(h,{size:14,className:`art-head-surface-icon`}),!_&&s===`data`&&(0,U.jsx)(ye,{size:14,className:`art-head-surface-icon`}),!_&&s===`graph`&&(0,U.jsx)(be,{size:14,className:`art-head-surface-icon`}),(0,U.jsx)(`span`,{className:`file-name`,children:x}),_&&(0,U.jsx)(`span`,{className:`file-tag`,children:v})]}),(0,U.jsxs)(`div`,{className:`right`,children:[_&&(0,U.jsxs)(U.Fragment,{children:[(0,U.jsx)(`button`,{className:`icon-btn`,title:`Copy`,type:`button`,"aria-label":`Copy`,onClick:()=>{L(e.content)},children:(0,U.jsx)(f,{size:14})}),(0,U.jsx)(`button`,{className:`icon-btn`,title:`Refresh`,type:`button`,"aria-label":`Refresh`,children:(0,U.jsx)(ae,{size:14})})]}),s===`browser`&&(0,U.jsx)(`button`,{className:`icon-btn`,title:`Pop out`,type:`button`,"aria-label":`Pop out`,onClick:()=>l.current?.popout(),children:(0,U.jsx)(Be,{size:14})}),o&&(0,U.jsx)(`button`,{className:`icon-btn`,title:`Close`,type:`button`,"aria-label":`Close`,onClick:r,children:(0,U.jsx)(oe,{size:14})})]})]}),(0,U.jsxs)(`div`,{className:`art-toolbar`,children:[(0,U.jsxs)(`span`,{className:`seg`,children:[(0,U.jsx)(`span`,{className:`bullet`}),(0,U.jsx)(`strong`,{children:_?`Artefact`:b})]}),(0,U.jsx)(`span`,{className:`right-meta`,children:y})]}),(0,U.jsxs)(`div`,{className:`art-body`,"data-surface":s??`none`,children:[_&&(()=>{let t=e.editable!==!1,r=e.skipReason??null,i=(e.mimeType??``).startsWith(`application/pdf`);if(r)return(0,U.jsx)(MD,{reason:r});if(i&&n){let t=`/api/admin/sidebar-artefact-content?id=${encodeURIComponent(e.docId)}&session_key=${encodeURIComponent(n)}`;return(0,U.jsx)(ND,{src:t,name:e.name,docId:e.docId},t)}return(0,U.jsxs)(U.Fragment,{children:[u&&(0,U.jsx)(`div`,{className:`art-save-error`,role:`alert`,children:u}),(0,U.jsx)(cT,{data:{title:e.name,content:e.content,readOnly:!t},onSubmit:t?g:OD,submitted:!1})]})})(),s===`browser`&&(0,U.jsx)(wD,{ref:l,onClose:r}),s===`data`&&n&&(0,U.jsx)(pe,{cacheKey:n,onOpenInGraph:a?e=>{let t=me(e.properties);a(e.nodeId,t??e.labels[0]??null)}:void 0}),e?.surface===`graph`&&n&&(0,U.jsx)(ue,{cacheKey:n,initialFocus:e.focusNodeId?{nodeId:e.focusNodeId,nodeLabel:e.focusNodeLabel??null}:null,initialLabels:e.initialLabels??null})]}),(0,U.jsxs)(`div`,{className:`art-foot`,children:[(0,U.jsx)(`span`,{className:`left`,children:y}),(0,U.jsx)(`span`,{className:`right in-sync`,children:`in sync`})]})]})}var ID=`maxy-shell-artefact-px`;function LD(){if(typeof window>`u`)return 320;let e=window.innerWidth,t=document.querySelector(`.platform > .side`)?.getBoundingClientRect(),n=t?t.right:Math.round(e*.3);return zD(Math.round((e-n)*(2/3)))}function RD(){if(typeof window>`u`)return 320;try{let e=window.localStorage.getItem(ID);if(!e)return LD();let t=parseInt(e,10);if(Number.isFinite(t)&&t>=320)return t}catch{}return LD()}function zD(e){if(typeof window>`u`)return e;let t=window.innerWidth,n=document.querySelector(`.platform > .side`)?.getBoundingClientRect(),r=n?n.right:Math.round(t*.3),i=Math.max(320,t-r-480);return Math.min(Math.max(e,320),i)}function BD({targetSelector:e=`.platform`}){let t=(0,H.useRef)(null),[n,r]=(0,H.useState)(()=>RD()),i=(0,H.useRef)(n);(0,H.useEffect)(()=>{let t=document.querySelector(e);!t||!(t instanceof HTMLElement)||(t.style.setProperty(`--artefact-px`,`${n}px`),i.current=n)},[n,e]);let a=(0,H.useCallback)(()=>{r(e=>{let t=zD(e);return t===e?e:t})},[]);(0,H.useEffect)(()=>(a(),window.addEventListener(`resize`,a),()=>window.removeEventListener(`resize`,a)),[a]);let o=e=>{e.preventDefault();let n=t.current;if(!n)return;n.setPointerCapture(e.pointerId),n.classList.add(`dragging`);let a=!1,o=e=>{a=!0,r(zD(Math.round(window.innerWidth-e.clientX)))},s=()=>{if(n.releasePointerCapture(e.pointerId),n.classList.remove(`dragging`),window.removeEventListener(`pointermove`,o),window.removeEventListener(`pointerup`,s),!a)return;let t=i.current;try{window.localStorage.setItem(ID,String(t))}catch{}console.info(`[admin-ui] artefact-resize px=${t}`)};window.addEventListener(`pointermove`,o),window.addEventListener(`pointerup`,s)},s=()=>{let e=LD();r(e);try{window.localStorage.removeItem(ID)}catch{}console.info(`[admin-ui] artefact-resize px=${e}`)};return(0,U.jsx)(`div`,{ref:t,className:`art-resize-handle`,role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize artefact pane`,onPointerDown:o,onDoubleClick:s})}var VD=`maxy-shell-side-px`;function HD(){if(typeof window>`u`)return 0;let e=document.querySelector(`.platform > .artefact`)?.getBoundingClientRect();return e&&e.width>0?Math.round(e.width):0}function UD(e){if(typeof window>`u`)return e;let t=window.innerWidth,n=Math.max(248,t-480-HD());return Math.min(Math.max(e,248),n)}function WD(){if(typeof window>`u`)return 264;try{let e=window.localStorage.getItem(VD);if(!e)return 264;let t=parseInt(e,10);if(Number.isFinite(t)&&t>=248)return UD(t)}catch{}return 264}function GD({targetSelector:e=`.platform`}){let t=(0,H.useRef)(null),[n,r]=(0,H.useState)(()=>WD()),i=(0,H.useRef)(n);(0,H.useEffect)(()=>{let t=document.querySelector(e);!t||!(t instanceof HTMLElement)||(t.style.setProperty(`--side-px`,`${n}px`),i.current=n)},[n,e]);let a=(0,H.useCallback)(()=>{r(e=>{let t=UD(e);return t===e?e:t})},[]);(0,H.useEffect)(()=>{a(),window.addEventListener(`resize`,a);let t=document.querySelector(e),n=null;return t instanceof HTMLElement&&(n=new MutationObserver(a),n.observe(t,{attributes:!0,attributeFilter:[`data-artefact`,`class`]})),()=>{window.removeEventListener(`resize`,a),n?.disconnect()}},[a,e]);let o=e=>{e.preventDefault();let n=t.current;if(!n)return;n.setPointerCapture(e.pointerId),n.classList.add(`dragging`);let a=!1,o=e=>{a=!0,r(UD(Math.round(e.clientX)))},s=()=>{if(n.releasePointerCapture(e.pointerId),n.classList.remove(`dragging`),window.removeEventListener(`pointermove`,o),window.removeEventListener(`pointerup`,s),!a)return;let t=i.current;try{window.localStorage.setItem(VD,String(t))}catch{}console.info(`[admin-ui] sidebar-resize px=${t}`)};window.addEventListener(`pointermove`,o),window.addEventListener(`pointerup`,s)},s=()=>{let e=UD(264);r(e);try{window.localStorage.removeItem(VD)}catch{}console.info(`[admin-ui] sidebar-resize px=${e}`)};return(0,U.jsx)(`div`,{ref:t,className:`side-resize-handle`,role:`separator`,"aria-orientation":`vertical`,"aria-label":`Resize sidebar`,onPointerDown:o,onDoubleClick:s})}var KD=50;function qD(e){let[t,n]=(0,H.useState)([]),[r,i]=(0,H.useState)(!1),[a,o]=(0,H.useState)(null),[s,c]=(0,H.useState)(null),l=(0,H.useCallback)(async t=>{if(e&&!(!t&&s===e)){i(!0),o(null);try{let t=await fetch(`/api/admin/sessions?session_key=${encodeURIComponent(e)}`);if(!t.ok)throw Error(`sessions fetch returned ${t.status}`);n((await t.json()).sessions??[]),c(e)}catch(e){console.error(`[admin/sessions] fetch failed:`,e),o(e instanceof Error?e.message:String(e))}finally{i(!1)}}},[e,s]);(0,H.useEffect)(()=>{e||(c(null),n([]),o(null))},[e]);let u=(0,H.useCallback)(()=>l(!1),[l]),d=(0,H.useCallback)(()=>l(!0),[l]),f=(0,H.useRef)(d);return(0,H.useEffect)(()=>{f.current=d},[d]),(0,H.useEffect)(()=>{if(!e)return;let t=null,n=ce(()=>{t&&clearTimeout(t),t=setTimeout(()=>{t=null,f.current()},KD)});return()=>{t&&clearTimeout(t),n()}},[e]),{sessions:t,setSessions:n,loading:r,loaded:s!==null&&s===e,error:a,ensureLoaded:u,refetch:d}}function JD(){Ct();let e=(0,H.useRef)(null),[t,n]=(0,H.useState)(null),[r,a]=(0,H.useState)(!1),[o,s]=(0,H.useState)(!1),[c,l]=(0,H.useState)(``),[u,d]=(0,H.useState)(!1),[f,p]=(0,H.useState)(null),[g,_]=(0,H.useState)(!1),[v,y]=(0,H.useState)(null),[x,S]=(0,H.useState)(null),[C,w]=(0,H.useState)(!1),[E,D]=(0,H.useState)(null),[O,k]=(0,H.useState)(!1),[A,j]=(0,H.useState)(null),[M,N]=(0,H.useState)(!1),[P,ee]=(0,H.useState)(!1),[te,F]=(0,H.useState)(!1),[I,ne]=(0,H.useState)(!1),re=(0,H.useRef)(!0);(0,H.useEffect)(()=>{if(re.current){re.current=!1;return}ne(!0);let e=window.setTimeout(()=>ne(!1),240);return()=>window.clearTimeout(e)},[te]);let[L,ae]=(0,H.useState)(!1),[z,se]=(0,H.useState)(null),[ce,le]=(0,H.useState)(null),ue=(0,H.useRef)(null),[de,fe]=(0,H.useState)(()=>typeof window<`u`&&window.matchMedia(`(min-width: 721px)`).matches);(0,H.useEffect)(()=>{let e=window.matchMedia(`(min-width: 721px)`),t=e=>fe(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let[pe,me]=(0,H.useState)(()=>typeof window<`u`&&window.matchMedia(`(min-width: 1080px)`).matches);(0,H.useEffect)(()=>{let e=window.matchMedia(`(min-width: 1080px)`),t=e=>me(e.matches);return e.addEventListener(`change`,t),()=>e.removeEventListener(`change`,t)},[]);let he=(0,H.useRef)(!1),ve=(0,H.useRef)(!1),Se=(0,H.useRef)(!1),Ce=(0,H.useRef)(!1),we=(0,H.useRef)(null),Te=b(),Ee=Et(),B=Mt(),De=Jt(),Oe=qD(B.cacheKey),V=qt({cacheKey:B.cacheKey,setCacheKey:B.setCacheKey,setAppState:B.setAppState,conversationId:B.conversationId,setConversationId:B.setConversationId,startElapsedTimer:Ee.startElapsedTimer,stopElapsedTimer:Ee.stopElapsedTimer,resetTimerState:Ee.resetTimerState,pausedElapsedRef:Ee.pausedElapsedRef,expandAllDefaultRef:B.expandAllDefaultRef,setExpandAll:B.setExpandAll,getPendingFiles:()=>De.pendingFiles,clearPendingFiles:De.clearFiles,inputRef:e});(0,H.useEffect)(()=>{l(window.location.hostname.startsWith(`admin.`)?window.location.origin.replace(`admin.`,`public.`):window.location.origin)},[]),(0,H.useEffect)(()=>{function e(e){e.key===`Escape`&&(t?n(null):Te.selectionMode&&Te.exitSelection())}return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[t,Te.selectionMode]),(0,H.useEffect)(()=>{(B.appState===`set-pin`||B.appState===`enter-pin`)&&setTimeout(()=>B.pinInputRef.current?.focus(),100),B.appState===`chat`&&setTimeout(()=>e.current?.focus(),100)},[B.appState,V.greetingGeneration]),(0,H.useEffect)(()=>{if(B.appState!==`chat`)return;history.pushState({maxyChat:!0},``);function e(){console.debug(`[history-guard] popstate absorbed`),history.pushState({maxyChat:!0},``)}return window.addEventListener(`popstate`,e),()=>window.removeEventListener(`popstate`,e)},[B.appState]);let ke=(0,H.useRef)(V.greetingGeneration);(0,H.useEffect)(()=>{V.greetingGeneration!==ke.current&&(ke.current=V.greetingGeneration,B.onboardingComplete===!1&&(he.current=!1))},[V.greetingGeneration,B.onboardingComplete]),(0,H.useEffect)(()=>{B.appState===`chat`&&B.onboardingComplete===!1&&(he.current||(he.current=!0,V.sendSystemPrompt(`[Begin onboarding.]`)))},[B.appState,B.onboardingComplete,V.greetingGeneration]),(0,H.useEffect)(()=>{if(!u)return;let e=!1;return fetch(`/api/admin/version`).then(e=>e.json()).then(t=>{e||D(t)}).catch(e=>{console.error(`[admin/version] menu-open client fetch failed:`,e)}),()=>{e=!0}},[u]),(0,H.useEffect)(()=>{if(B.appState!==`chat`){Se.current=!1,Ce.current=!1;return}if(Se.current)return;Se.current=!0;let e=!1;return fetch(`/api/admin/version`).then(e=>e.json()).then(t=>{e||(D(t),!(!t.updateAvailable||Ce.current)&&(j(t),k(!0),fetch(`/api/admin/version/alert-surfaced`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({installed:t.installed,latest:t.latest})}).catch(e=>{console.error(`[admin/version] alert-surfaced signal failed:`,e)})))}).catch(e=>{console.error(`[admin/version] session-start client fetch failed:`,e)}),()=>{e=!0}},[B.appState]),(0,H.useEffect)(()=>{if(B.appState!==`chat`||!B.cacheKey)return;let e=B.conversationId?`flushed`:`pre-flush`,t=B.cacheKey.slice(0,8),n=B.conversationId?B.conversationId.slice(0,8):`null`;console.info(`[admin-session-identity] cacheKey=${t} conversationId=${n} phase=${e} surface=chat-header`)},[B.appState,B.cacheKey,B.conversationId]),(0,H.useEffect)(()=>{if(B.appState!==`chat`){ve.current=!1;return}if(ve.current||!Oe.loaded)return;ve.current=!0;let e=Oe.sessions.filter(e=>e.name).length,t=z?`open`:`closed`;console.info(`[admin-ui] platform-shell brand=${R.productName} sidebar=${e} artefact=${t}`)},[B.appState,Oe.loaded,Oe.sessions,z]);let Ae=Oe.sessions.find(e=>B.conversationId&&e.conversationId===B.conversationId||B.cacheKey&&e.cacheKey===B.cacheKey)?.name||B.businessName||(R.logoContainsName?``:R.productName);if((0,H.useEffect)(()=>{if(!u){p(null),y(null),S(null),D(null);return}function e(e){we.current&&!we.current.contains(e.target)&&d(!1)}return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[u]),(0,H.useEffect)(()=>{if(typeof BroadcastChannel>`u`)return;let e=new BroadcastChannel(`platform-onboarding`);return e.onmessage=e=>{e.data?.type===`remote-password-set`&&V.sendMessageRef.current(`I've set the remote password`)},()=>e.close()},[]),B.appState===`loading`)return(0,U.jsx)(`div`,{className:`chat-page admin-page`,children:(0,U.jsx)(`header`,{className:`chat-header`,children:(0,U.jsx)(`img`,{src:ie,alt:R.productName,className:`chat-logo`})})});if(B.appState===`set-pin`)return(0,U.jsx)(Xt,{pin:B.pin,setPin:B.setPin,confirmPin:B.confirmPin,setConfirmPin:B.setConfirmPin,operatorName:B.operatorName,setOperatorName:B.setOperatorName,showPin:B.showPin,setShowPin:B.setShowPin,pinLoading:B.pinLoading,pinError:B.pinError,pinInputRef:B.pinInputRef,confirmPinInputRef:B.confirmPinInputRef,setPinFormRef:B.setPinFormRef,onSubmit:B.handleSetPin});if(B.appState===`onboarding-choice`)return(0,U.jsx)(en,{setAppState:B.setAppState,setOnboardingComplete:B.setOnboardingComplete});if(B.appState===`connect-claude`)return(0,U.jsx)($t,{authPolling:B.authPolling,setAuthPolling:B.setAuthPolling,authLoading:B.authLoading,setAuthLoading:B.setAuthLoading,pinError:B.pinError,setPinError:B.setPinError,setAppState:B.setAppState});if(B.appState===`enter-pin`)return(0,U.jsx)(Zt,{pin:B.pin,setPin:B.setPin,showPin:B.showPin,setShowPin:B.setShowPin,pinLoading:B.pinLoading,pinError:B.pinError,pinInputRef:B.pinInputRef,onSubmit:B.handleLogin,onChangePin:B.handleChangePin,remoteAuthEnabled:B.remoteAuthEnabled,onSignOutRemote:()=>{window.location.href=`/__remote-auth/logout`}});if(B.appState===`account-picker`)return(0,U.jsx)(Qt,{accounts:B.accounts,loading:B.accountPickerLoading,error:B.pinError,onSelect:B.handleAccountSelect});let je=z?`open`:`closed`,Me=L&&de,Ne=`platform${te?` menu-open`:``}${Me?` sidebar-collapsed`:``}${I?` drawer-animating`:``}`,Pe=e=>{if(!V.isStreaming&&B.cacheKey){if(!e.conversationId){V.resetConversation(),V.setMessages([]),B.setConversationId(null);return}V.resetConversation(),V.setMessages([]),fetch(`/api/admin/sessions/${encodeURIComponent(e.conversationId)}/resume?session_key=${encodeURIComponent(B.cacheKey)}`,{method:`POST`}).then(e=>e.ok?e.json():Promise.reject(Error(`resume returned ${e.status}`))).then(e=>{e.conversationId&&B.setConversationId(e.conversationId);let t=(e.messages??[]).map(e=>({role:e.role===`user`?`admin`:`maxy`,content:e.role===`user`?e.content:void 0,events:e.role===`assistant`?e.events??[]:void 0,...e.role===`user`&&e.attachments&&e.attachments.length>0?{attachments:e.attachments}:{},...e.role===`user`&&aD(e.content)?{hidden:!0}:{},timestamp:new Date(e.createdAt).getTime()||0,historical:!0,...e.messageId?{messageId:e.messageId}:{}}));if(t.length>0&&V.setMessages(t),e.resumeHeal){let{missingTurns:n,failed:r,jsonlMissing:i}=e.resumeHeal,a;r>0?a=`Could not heal ${r} of ${n} turn${n===1?``:`s`} that were missing from the graph. The JSONL replay rendered them above so the conversation is intact, but they may not appear in future searches until the writer recovers.`:i&&t.length>0&&(a=`This conversation's SDK transcript file is no longer on disk; the conversation is rendered from the graph projection. The next message you send will start a fresh SDK session under the same conversation.`),a&&V.setMessages(e=>[{role:`maxy`,events:[{type:`text`,content:a}],timestamp:Date.now()-2,historical:!0},...e])}let n=[];for(let t of e.messages??[]){if(t.role!==`assistant`||!t.submittedEventIndices?.length)continue;let e=new Date(t.createdAt).getTime()||0;for(let r of t.submittedEventIndices)n.push(`${e}_${r}`)}n.length>0&&V.seedSubmittedComponents(n)}).catch(e=>{console.error(`[chat] sidebar conversation resume failed:`,e),V.setMessages([{role:`maxy`,events:[{type:`text`,content:`Could not load conversation history.`}],timestamp:Date.now()-1,historical:!0}])})}},Fe={conversationId:B.conversationId,cacheKey:B.cacheKey,disconnecting:B.disconnecting,onOpenConversations:()=>{w(!0),Oe.refetch()},handleDisconnect:B.handleDisconnect};return(0,U.jsx)(T,{value:{onShowVnc:()=>N(!0)},children:(0,U.jsxs)(`div`,{className:Ne,"data-artefact":je,children:[(0,U.jsx)(`div`,{className:`scrim`,onClick:()=>{F(!1),console.info(`[admin-ui] mobile-drawer state=closed`)}}),(0,U.jsx)(DD,{ref:ue,businessName:B.businessName??null,cacheKey:B.cacheKey,conversationId:B.conversationId,role:B.role,userName:B.userName,userAvatar:B.userAvatar,sessions:Oe.sessions,sessionsLoading:Oe.loading,sessionsError:Oe.error,ensureSessionsLoaded:Oe.ensureLoaded,refetchSessions:Oe.refetch,recentsActions:{setSessions:Oe.setSessions,isStreaming:V.isStreaming,resetConversation:V.resetConversation,setMessages:V.setMessages,setConversationId:B.setConversationId,setCacheKey:B.setCacheKey},onSelectSession:Pe,onSelectArtefact:(e,t)=>{se({surface:`doc`,...e}),le(t)},onSelectProjects:()=>{se({surface:`graph`,initialLabels:[`Project`]}),le(`sidebar-projects`)},onSelectPeople:()=>{se({surface:`graph`,initialLabels:[`Person`]}),le(`sidebar-people`)},onSelectTasks:()=>{se({surface:`graph`,initialLabels:[`Task`]}),le(`sidebar-tasks`)},onSelectAgents:()=>{se({surface:`graph`,initialLabels:[`Agent`]}),le(`sidebar-agents`)},onCloseMobileDrawer:()=>{te&&(F(!1),console.info(`[admin-ui] mobile-drawer state=closed`))},collapsed:Me,onToggleCollapsed:()=>ae(e=>!e),mobileDrawerOpen:te,actions:Fe}),(0,U.jsxs)(`div`,{className:`chat-page admin-page`,children:[(0,U.jsxs)(`header`,{className:`chat-header`,children:[(0,U.jsx)(`button`,{type:`button`,className:`chat-logo-btn`,"aria-label":`Show sidebar`,title:`Show sidebar`,onClick:()=>{F(e=>{let t=!e;return console.info(`[admin-ui] header-logo-tap state=${t?`open`:`closed`}`),t})},children:(0,U.jsx)(`img`,{src:ie,alt:R.productName,className:`chat-logo`})}),(0,U.jsx)(`div`,{className:`chat-header-label`,children:(0,U.jsx)(`h1`,{className:`chat-tagline`,children:Ae})}),(0,U.jsxs)(`div`,{className:`chat-burger-wrap`,ref:we,children:[(0,U.jsx)(`button`,{type:`button`,className:`chat-burger`,onClick:()=>d(e=>!e),"aria-label":`Menu`,"aria-haspopup":`true`,"aria-expanded":u,children:(0,U.jsx)(_e,{size:20})}),u&&(0,U.jsxs)(`div`,{className:`chat-menu`,children:[(0,U.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,onClick:async()=>{if(!P&&!(!pe&&M)){ee(!0),d(!1);try{let e=await(await fetch(`/api/admin/browser/launch`,{method:`POST`})).json().catch(()=>({ok:!1,error:`Invalid response`}));if(!e.ok)throw Error(e.error??`Failed to launch browser`);pe?(se({surface:`browser`}),le(`header-menu`)):N(!0)}catch(e){console.error(`[browser] Launch failed:`,e),alert(e instanceof Error?e.message:`Failed to launch browser`)}finally{ee(!1)}}},disabled:P,children:[(0,U.jsx)(h,{size:14}),` Browser`,P&&(0,U.jsx)(ge,{size:12,className:`spin`})]}),(0,U.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,onClick:()=>{d(!1),pe?(se({surface:`data`}),le(`header-menu`)):window.location.href=`/data`},children:[(0,U.jsx)(ye,{size:14}),` Data`]}),(0,U.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,onClick:()=>{d(!1),pe?(se({surface:`graph`}),le(`header-menu`)):window.location.href=`/graph`},children:[(0,U.jsx)(be,{size:14}),` Graph`]}),(0,U.jsx)(`div`,{className:`chat-menu-divider`}),(0,U.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,onClick:async()=>{if(f!==null){p(null),S(null);return}_(!0),y(null);try{let e=await fetch(`/api/admin/agents`);if(!e.ok)throw Error(`Failed to load agents`);p((await e.json()).agents??[])}catch(e){console.error(`[admin] agent list failed:`,e),y(e instanceof Error?e.message:String(e))}finally{_(!1)}},children:[(0,U.jsx)(Be,{size:14}),` Public`,g&&(0,U.jsx)(ge,{size:12,className:`spin`})]}),f!==null&&(0,U.jsxs)(`div`,{className:`chat-menu-agents`,children:[v&&(0,U.jsx)(`span`,{className:`chat-menu-agent-error`,children:v}),f.length===0&&!v&&(0,U.jsx)(`span`,{className:`chat-menu-agent-empty`,children:`No public agents configured`}),f.map(e=>(0,U.jsxs)(`div`,{className:`chat-menu-item chat-menu-agent-item`,children:[(0,U.jsx)(`span`,{className:`agent-status-dot ${e.status}`}),(0,U.jsxs)(`span`,{className:`agent-text`,children:[(0,U.jsx)(`span`,{className:`agent-display-name`,children:e.displayName}),(0,U.jsxs)(`span`,{className:`agent-slug`,children:[`/`,e.slug]})]}),x===e.slug?(0,U.jsxs)(`span`,{className:`agent-actions agent-confirm`,children:[(0,U.jsx)(`button`,{type:`button`,className:`agent-action-btn agent-confirm-yes`,title:`Confirm delete`,onClick:()=>{S(null),p(t=>t?.filter(t=>t.slug!==e.slug)??null),fetch(`/api/admin/agents/${encodeURIComponent(e.slug)}`,{method:`DELETE`}).catch(e=>console.error(`[admin/agents] delete failed:`,e))},children:(0,U.jsx)(m,{size:12})}),(0,U.jsx)(`button`,{type:`button`,className:`agent-action-btn agent-confirm-no`,title:`Cancel`,onClick:()=>S(null),children:(0,U.jsx)(oe,{size:12})})]}):(0,U.jsxs)(`span`,{className:`agent-actions`,children:[(0,U.jsx)(`a`,{href:`${c}/${e.slug}`,target:`_blank`,rel:`noopener noreferrer`,className:`agent-action-btn`,title:`Open agent`,onClick:()=>d(!1),children:(0,U.jsx)(Be,{size:12})}),(0,U.jsx)(`button`,{type:`button`,className:`agent-action-btn agent-delete-btn`,title:`Delete agent`,onClick:()=>S(e.slug),children:(0,U.jsx)(i,{size:12})})]})]},e.slug))]}),(0,U.jsx)(`div`,{className:`chat-menu-divider`}),E?.updateAvailable?(0,U.jsxs)(`button`,{type:`button`,className:`chat-menu-version`,onClick:()=>{E.latest&&(j(E),d(!1),k(!0))},children:[(0,U.jsx)(Ye,{size:14}),(0,U.jsxs)(`span`,{className:`version-installed`,children:[`v`,E.installed,(0,U.jsx)(`span`,{className:`version-update-dot`})]})]}):(0,U.jsxs)(`div`,{className:`chat-menu-version chat-menu-version-passive`,children:[(0,U.jsx)(Ye,{size:14}),(0,U.jsxs)(`span`,{className:`version-installed`,children:[E?`v${E.installed}`:`…`,E&&!E.updateAvailable&&(0,U.jsx)(`span`,{className:`version-uptodate-dot`})]})]}),(0,U.jsxs)(`button`,{type:`button`,className:`chat-menu-item`,onClick:()=>{d(!1),B.handleLogout(),V.setMessages([])},children:[(0,U.jsx)(xe,{size:14}),` Log out`]})]})]})]}),(0,U.jsxs)(`div`,{className:`chat-content`,children:[(0,U.jsx)(QE,{messages:V.messages,isStreaming:V.isStreaming,elapsedSeconds:Ee.elapsedSeconds,sessionTurnStart:Ee.sessionTurnStart,expandAll:B.expandAll,setExpandAll:B.setExpandAll,conversationCompacted:V.conversationCompacted,isCompacting:V.isCompacting,setShowCompactConfirm:s,handleComponentSubmit:V.handleComponentSubmit,effectiveSubmitted:V.effectiveSubmitted,selectionMode:Te.selectionMode,selectedItems:Te.selectedItems,toggleSelectItem:Te.toggleSelectItem,cacheKey:B.cacheKey,setLightboxSrc:n,messageQueue:V.messageQueue,messageQueueRef:V.messageQueueRef,setQueue:V.setQueue,sendMessage:V.sendMessage,appState:B.appState,onboardingComplete:B.onboardingComplete,onOpenArtefact:e=>{se({surface:`doc`,...e}),le(`chat-link`)}}),(0,U.jsx)($E,{offer:V.topicChangeOffer,onFreshStart:V.handleTopicFreshStart,onContinue:V.handleTopicContinue,disabled:V.isStreaming}),(0,U.jsx)(xD,{selectionMode:Te.selectionMode,selectedItems:Te.selectedItems,copyToast:Te.copyToast||null,exitSelection:Te.exitSelection,enterSelection:Te.enterSelection,copySelected:Te.copySelected,showCopyToast:Te.showCopyToast,input:V.input,setInput:V.setInput,inputRef:e,pendingFiles:De.pendingFiles,setPendingFiles:De.setPendingFiles,isDragOver:De.isDragOver,attachError:De.attachError,fileInputRef:De.fileInputRef,addFiles:De.addFiles,removeFile:De.removeFile,onDragOver:De.onDragOver,onDragLeave:De.onDragLeave,onDrop:De.onDrop,isStreaming:V.isStreaming,wasPaused:V.wasPaused,messages:V.messages,messageQueueRef:V.messageQueueRef,setQueue:V.setQueue,sendMessage:V.sendMessage,stopStreaming:V.stopStreaming,disconnecting:B.disconnecting,handleDisconnect:B.handleDisconnect,claudeInfo:B.claudeInfo,setClaudeInfo:B.setClaudeInfo,setShowClaudeInfo:a,conversationId:B.conversationId,cacheKey:B.cacheKey,onNewConversation:V.startNewConversation,newConversationDisabled:V.isStreaming||V.isCompacting,onOpenConversations:()=>{w(!0),Oe.refetch()},sidebarVisible:de})]}),Te.copyToast&&(0,U.jsx)(`span`,{className:`copy-toast${Te.copyToast===`failed`?` copy-toast-failed`:``}`,children:Te.copyToast===`copied`?`Copied`:`Copy failed`}),(0,U.jsx)(pD,{show:C,onClose:()=>w(!1),conversationsLoading:Oe.loading,conversationsError:Oe.error,conversationsList:Oe.sessions,setConversationsList:Oe.setSessions,cacheKey:B.cacheKey,setCacheKey:B.setCacheKey,isStreaming:V.isStreaming,resetConversation:V.resetConversation,setMessages:V.setMessages,setConversationId:B.setConversationId}),(0,U.jsx)(mD,{src:t,onClose:()=>n(null)}),(0,U.jsx)(hD,{show:o,onClose:()=>s(!1),onConfirm:V.handleCompactNow}),(0,U.jsx)(gD,{show:r,onClose:()=>{a(!1),B.setClaudeInfo(null)},claudeInfo:B.claudeInfo,messages:V.messages,sessionElapsed:Ee.sessionElapsed,conversationId:B.conversationId,cacheKey:B.cacheKey}),(0,U.jsx)(yD,{show:O,onClose:()=>{k(!1),Ce.current=!0},versionInfo:A,cacheKey:B.cacheKey,onUpgradeComplete:()=>D(null)}),M&&(0,U.jsx)(TD,{onClose:()=>N(!1)})]}),(0,U.jsx)(GD,{}),(0,U.jsx)(BD,{}),(0,U.jsx)(FD,{selection:z,trigger:ce,cacheKey:B.cacheKey,onClose:()=>{se(null),le(null)},onArtefactSaved:(e,t,n)=>{ue.current?.patchArtefact(e,{updatedAt:t,content:n})},onSwapToGraph:(e,t)=>{se({surface:`graph`,focusNodeId:e,focusNodeLabel:t}),le(`chat-link`)}})]})})}(0,Ce.createRoot)(document.getElementById(`root`)).render((0,U.jsx)(JD,{}));
|