@polderlabs/bizar 4.5.0 → 4.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/bizar-dash/dist/assets/__vite-browser-external-BIHI7g3E.js +2 -0
  2. package/bizar-dash/dist/assets/__vite-browser-external-BIHI7g3E.js.map +1 -0
  3. package/bizar-dash/dist/assets/{main-CDFKHzBg.css → main-eWZ4NlCL.css} +1 -1
  4. package/bizar-dash/dist/assets/main-usWhlPWa.js +362 -0
  5. package/bizar-dash/dist/assets/main-usWhlPWa.js.map +1 -0
  6. package/bizar-dash/dist/assets/{mobile--0FBIKX3.js → mobile-DQLFCjwJ.js} +2 -2
  7. package/bizar-dash/dist/assets/{mobile--0FBIKX3.js.map → mobile-DQLFCjwJ.js.map} +1 -1
  8. package/bizar-dash/dist/assets/{mobile-OgRp8VIb.js → mobile-O6ANdD4W.js} +2 -2
  9. package/bizar-dash/dist/assets/{mobile-OgRp8VIb.js.map → mobile-O6ANdD4W.js.map} +1 -1
  10. package/bizar-dash/dist/index.html +3 -3
  11. package/bizar-dash/dist/mobile.html +2 -2
  12. package/bizar-dash/skills/bizar/SKILL.md +20 -0
  13. package/bizar-dash/skills/headroom/SKILL.md +94 -0
  14. package/bizar-dash/skills/lightrag/SKILL.md +11 -0
  15. package/bizar-dash/skills/obsidian/SKILL.md +13 -0
  16. package/bizar-dash/src/server/api.mjs +6 -0
  17. package/bizar-dash/src/server/headroom.mjs +645 -0
  18. package/bizar-dash/src/server/memory-lightrag.mjs +267 -0
  19. package/bizar-dash/src/server/memory-obsidian.mjs +230 -0
  20. package/bizar-dash/src/server/memory-store.mjs +151 -0
  21. package/bizar-dash/src/server/routes/_shared.mjs +17 -0
  22. package/bizar-dash/src/server/routes/headroom.mjs +126 -0
  23. package/bizar-dash/src/server/routes/memory.mjs +428 -1
  24. package/bizar-dash/src/server/server.mjs +16 -0
  25. package/bizar-dash/src/web/App.tsx +2 -0
  26. package/bizar-dash/src/web/components/HeadroomSettings.tsx +418 -0
  27. package/bizar-dash/src/web/components/HeadroomStatus.tsx +158 -0
  28. package/bizar-dash/src/web/components/Topbar.tsx +2 -0
  29. package/bizar-dash/src/web/lib/types.ts +16 -0
  30. package/bizar-dash/src/web/main.tsx +1 -0
  31. package/bizar-dash/src/web/styles/memory.css +955 -0
  32. package/bizar-dash/src/web/views/Memory.tsx +140 -0
  33. package/bizar-dash/src/web/views/Overview.tsx +3 -0
  34. package/bizar-dash/src/web/views/Settings.tsx +30 -0
  35. package/bizar-dash/src/web/views/memory/ConfigPanel.tsx +289 -0
  36. package/bizar-dash/src/web/views/memory/GitSyncPanel.tsx +220 -0
  37. package/bizar-dash/src/web/views/memory/LightragPanel.tsx +307 -0
  38. package/bizar-dash/src/web/views/memory/MemoryOverview.tsx +354 -0
  39. package/bizar-dash/src/web/views/memory/MemoryStatusCard.tsx +160 -0
  40. package/bizar-dash/src/web/views/memory/ObsidianPanel.tsx +642 -0
  41. package/bizar-dash/src/web/views/memory/SemanticSearchPanel.tsx +194 -0
  42. package/bizar-dash/tests/headroom-install.test.mjs +173 -0
  43. package/bizar-dash/tests/headroom-settings.test.mjs +126 -0
  44. package/bizar-dash/tests/headroom-status.test.mjs +117 -0
  45. package/bizar-dash/tests/memory-lightrag-extended.test.mjs +162 -0
  46. package/bizar-dash/tests/memory-obsidian.test.mjs +269 -0
  47. package/bizar-dash/tests/memory-tab.test.mjs +322 -0
  48. package/bizar-dash/tests/mod-upgrade.node.test.mjs +1 -1
  49. package/bizar-dash/tests/submit-feedback.test.mjs +6 -6
  50. package/cli/bin.mjs +165 -0
  51. package/package.json +1 -1
  52. package/bizar-dash/dist/assets/main-NYFpS2wY.js +0 -312
  53. package/bizar-dash/dist/assets/main-NYFpS2wY.js.map +0 -1
@@ -348,5 +348,5 @@ Error generating stack: `+l.message+`
348
348
  * @license qrcode.react
349
349
  * Copyright (c) Paul O'Shannessy
350
350
  * SPDX-License-Identifier: ISC
351
- */var D2={L:gr.QrCode.Ecc.LOW,M:gr.QrCode.Ecc.MEDIUM,Q:gr.QrCode.Ecc.QUARTILE,H:gr.QrCode.Ecc.HIGH},Jp=128,eg="L",tg="#FFFFFF",ng="#000000",rg=!1,ig=1,_2=4,O2=0,F2=.1;function lg(e,t=0){const n=[];return e.forEach(function(r,i){let l=null;r.forEach(function(s,o){if(!s&&l!==null){n.push(`M${l+t} ${i+t}h${o-l}v1H${l+t}z`),l=null;return}if(o===r.length-1){if(!s)return;l===null?n.push(`M${o+t},${i+t} h1v1H${o+t}z`):n.push(`M${l+t},${i+t} h${o+1-l}v1H${l+t}z`);return}s&&l===null&&(l=o)})}),n.join("")}function sg(e,t){return e.slice().map((n,r)=>r<t.y||r>=t.y+t.h?n:n.map((i,l)=>l<t.x||l>=t.x+t.w?i:!1))}function $2(e,t,n,r){if(r==null)return null;const i=e.length+n*2,l=Math.floor(t*F2),s=i/t,o=(r.width||l)*s,u=(r.height||l)*s,d=r.x==null?e.length/2-o/2:r.x*s,c=r.y==null?e.length/2-u/2:r.y*s,f=r.opacity==null?1:r.opacity;let m=null;if(r.excavate){let p=Math.floor(d),x=Math.floor(c),b=Math.ceil(o+d-p),y=Math.ceil(u+c-x);m={x:p,y:x,w:b,h:y}}const h=r.crossOrigin;return{x:d,y:c,h:u,w:o,excavation:m,opacity:f,crossOrigin:h}}function B2(e,t){return t!=null?Math.max(Math.floor(t),0):e?_2:O2}function og({value:e,level:t,minVersion:n,includeMargin:r,marginSize:i,imageSettings:l,size:s,boostLevel:o}){let u=_e.useMemo(()=>{const p=(Array.isArray(e)?e:[e]).reduce((x,b)=>(x.push(...gr.QrSegment.makeSegments(b)),x),[]);return gr.QrCode.encodeSegments(p,D2[t],n,void 0,void 0,o)},[e,t,n,o]);const{cells:d,margin:c,numCells:f,calculatedImageSettings:m}=_e.useMemo(()=>{let h=u.getModules();const p=B2(r,i),x=h.length+p*2,b=$2(h,s,p,l);return{cells:h,margin:p,numCells:x,calculatedImageSettings:b}},[u,s,l,r,i]);return{qrcode:u,margin:c,cells:d,numCells:f,calculatedImageSettings:m}}var U2=function(){try{new Path2D().addPath(new Path2D)}catch{return!1}return!0}(),H2=_e.forwardRef(function(t,n){const r=t,{value:i,size:l=Jp,level:s=eg,bgColor:o=tg,fgColor:u=ng,includeMargin:d=rg,minVersion:c=ig,boostLevel:f,marginSize:m,imageSettings:h}=r,x=Ra(r,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","marginSize","imageSettings"]),{style:b}=x,y=Ra(x,["style"]),g=h==null?void 0:h.src,v=_e.useRef(null),C=_e.useRef(null),z=_e.useCallback(O=>{v.current=O,typeof n=="function"?n(O):n&&(n.current=O)},[n]),[E,A]=_e.useState(!1),{margin:L,cells:I,numCells:k,calculatedImageSettings:j}=og({value:i,level:s,minVersion:c,boostLevel:f,includeMargin:d,marginSize:m,imageSettings:h,size:l});_e.useEffect(()=>{if(v.current!=null){const O=v.current,W=O.getContext("2d");if(!W)return;let de=I;const ee=C.current,R=j!=null&&ee!==null&&ee.complete&&ee.naturalHeight!==0&&ee.naturalWidth!==0;R&&j.excavation!=null&&(de=sg(I,j.excavation));const V=window.devicePixelRatio||1;O.height=O.width=l*V;const S=l/k*V;W.scale(S,S),W.fillStyle=o,W.fillRect(0,0,k,k),W.fillStyle=u,U2?W.fill(new Path2D(lg(de,L))):I.forEach(function(Y,ie){Y.forEach(function(N,ge){N&&W.fillRect(ge+L,ie+L,1,1)})}),j&&(W.globalAlpha=j.opacity),R&&W.drawImage(ee,j.x+L,j.y+L,j.w,j.h)}}),_e.useEffect(()=>{A(!1)},[g]);const P=La({height:l,width:l},b);let B=null;return g!=null&&(B=_e.createElement("img",{src:g,key:g,style:{display:"none"},onLoad:()=>{A(!0)},ref:C,crossOrigin:j==null?void 0:j.crossOrigin})),_e.createElement(_e.Fragment,null,_e.createElement("canvas",La({style:P,height:l,width:l,ref:z,role:"img"},y)),B)});H2.displayName="QRCodeCanvas";var ag=_e.forwardRef(function(t,n){const r=t,{value:i,size:l=Jp,level:s=eg,bgColor:o=tg,fgColor:u=ng,includeMargin:d=rg,minVersion:c=ig,boostLevel:f,title:m,marginSize:h,imageSettings:p}=r,x=Ra(r,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","title","marginSize","imageSettings"]),{margin:b,cells:y,numCells:g,calculatedImageSettings:v}=og({value:i,level:s,minVersion:c,boostLevel:f,includeMargin:d,marginSize:h,imageSettings:p,size:l});let C=y,z=null;p!=null&&v!=null&&(v.excavation!=null&&(C=sg(y,v.excavation)),z=_e.createElement("image",{href:p.src,height:v.h,width:v.w,x:v.x+b,y:v.y+b,preserveAspectRatio:"none",opacity:v.opacity,crossOrigin:v.crossOrigin}));const E=lg(C,b);return _e.createElement("svg",La({height:l,width:l,viewBox:`0 0 ${g} ${g}`,ref:n,role:"img"},x),!!m&&_e.createElement("title",null,m),_e.createElement("path",{fill:o,d:`M0,0 h${g}v${g}H0z`,shapeRendering:"crispEdges"}),_e.createElement("path",{fill:u,d:E,shapeRendering:"crispEdges"}),z)});ag.displayName="QRCodeSVG";function V2({tabs:e,activeTab:t,onChange:n}){return a.jsx("nav",{className:"mobile-bottom-nav",role:"navigation","aria-label":"Mobile navigation",children:e.map(r=>{const i=r.icon;return a.jsxs("button",{type:"button",className:Mu("mobile-nav-btn",t===r.id&&"mobile-nav-btn-active"),onClick:()=>n(r.id),"aria-label":r.label,"aria-current":t===r.id?"page":void 0,children:[a.jsx(i,{size:22}),a.jsx("span",{className:"mobile-nav-label",children:r.label})]},r.id)})})}function Dt({open:e,onClose:t,title:n,children:r,actions:i,maxHeight:l="85vh"}){const s=w.useRef(null),o=w.useRef(null),u=w.useId(),d=w.useRef(null),c=w.useRef(null),f=w.useRef(0),m=w.useRef(0),h=()=>{var y;return((y=s.current)==null?void 0:y.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])'))??[]};if(w.useEffect(()=>{if(!e)return;d.current=document.activeElement instanceof HTMLElement?document.activeElement:null;const y=g=>{var A;if(g.key==="Escape"&&t(),g.key!=="Tab")return;const v=Array.from(h());if(v.length===0){g.preventDefault(),(A=s.current)==null||A.focus();return}const C=v[0],z=v[v.length-1],E=document.activeElement;if(g.shiftKey){(!E||E===C||E===s.current)&&(g.preventDefault(),z==null||z.focus());return}E===z&&(g.preventDefault(),C==null||C.focus())};return window.addEventListener("keydown",y),requestAnimationFrame(()=>{var g,v;((g=o.current)==null?void 0:g.focus())??((v=s.current)==null||v.focus())}),()=>{var g;window.removeEventListener("keydown",y),(g=d.current)==null||g.focus()}},[e,t]),w.useEffect(()=>(e?(m.current=window.scrollY,document.documentElement.style.overflow="hidden",document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.top=`-${m.current}px`,document.body.style.left="0",document.body.style.right="0",document.body.style.width="100%"):(document.documentElement.style.overflow="",document.body.style.overflow="",document.body.style.position="",document.body.style.top="",document.body.style.left="",document.body.style.right="",document.body.style.width=""),()=>{document.documentElement.style.overflow="",document.body.style.overflow="",document.body.style.position="",document.body.style.top="",document.body.style.left="",document.body.style.right="",document.body.style.width="",window.scrollTo(0,m.current)}),[e]),!e)return null;const p=y=>{var g;y.isPrimary&&(c.current=y.clientY,f.current=0,(g=s.current)==null||g.setPointerCapture(y.pointerId))},x=y=>{if(c.current==null||!s.current)return;const g=Math.max(0,y.clientY-c.current);f.current=g,s.current.style.transform=`translateY(${g}px)`},b=y=>{if(!s.current)return;y&&s.current.hasPointerCapture(y.pointerId)&&s.current.releasePointerCapture(y.pointerId);const g=f.current;s.current.style.transform="",c.current=null,f.current=0,g>72&&t()};return a.jsx("div",{className:"mobile-sheet-overlay",onClick:t,children:a.jsxs("div",{ref:s,className:"mobile-sheet",style:{maxHeight:l},onClick:y=>y.stopPropagation(),role:"dialog","aria-modal":!0,"aria-label":n?void 0:"Sheet","aria-labelledby":n?u:void 0,tabIndex:-1,children:[a.jsx("div",{className:"mobile-sheet-handle",onPointerDown:p,onPointerMove:x,onPointerUp:b,onPointerCancel:b,"aria-hidden":"true"}),a.jsxs("div",{className:"mobile-sheet-header",children:[n?a.jsx("h3",{id:u,className:"mobile-sheet-title",children:n}):a.jsx("div",{}),a.jsx("button",{ref:o,type:"button",className:"mobile-icon-btn",onClick:t,"aria-label":"Close",children:a.jsx(Zn,{size:18})})]}),a.jsx("div",{className:"mobile-sheet-content",children:r}),i&&a.jsx("div",{className:"mobile-sheet-actions",children:i})]})})}function W2(e){switch(e){case"success":return"✓";case"error":return"✗";case"warning":return"⚠";default:return"ℹ"}}function Q2(e){const t=new Date(e),r=Date.now()-t.getTime();return r<6e4?"just now":r<36e5?`${Math.floor(r/6e4)}m ago`:r<864e5?`${Math.floor(r/36e5)}h ago`:t.toLocaleDateString()}function q2({onSelect:e}){const[t,n]=w.useState(!1),[r,i]=w.useState([]),[l,s]=w.useState(0),o=async()=>{var c;try{const f=await q.get("/notifications");i(f.notifications||[]),s(((c=f.stats)==null?void 0:c.unread)||0)}catch{}};w.useEffect(()=>{o()},[]),w.useEffect(()=>{t&&o()},[t]);const u=async()=>{try{await q.post("/notifications/read-all"),i(c=>c.map(f=>({...f,read:!0}))),s(0)}catch{}},d=async c=>{try{await q.post(`/notifications/${encodeURIComponent(c)}/read`),i(f=>f.map(m=>m.id===c?{...m,read:!0}:m)),s(f=>Math.max(0,f-1))}catch{}};return a.jsxs(a.Fragment,{children:[a.jsxs("button",{type:"button",className:"mobile-icon-btn mobile-notif-btn",onClick:()=>n(!0),"aria-label":`Notifications${l>0?` (${l} unread)`:""}`,children:[a.jsx(cd,{size:20}),l>0&&a.jsx("span",{className:"mobile-notif-badge",children:l>9?"9+":l})]}),a.jsx(Dt,{open:t,onClose:()=>n(!1),title:"Notifications",actions:l>0?a.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-secondary",style:{width:"100%"},onClick:u,children:[a.jsx(Q1,{size:14})," Mark all read"]}):void 0,children:a.jsxs("div",{className:"mobile-notif-list",children:[r.length===0&&a.jsxs("div",{className:"mobile-empty",children:[a.jsx(cd,{size:32}),a.jsx("p",{children:"No notifications"})]}),r.map(c=>a.jsxs("button",{type:"button",className:`mobile-notif-item ${c.read?"read":"unread"}`,onClick:()=>{c.read||d(c.id),e(c),n(!1)},children:[a.jsx("span",{className:`mobile-notif-icon severity-${c.severity}`,children:W2(c.severity)}),a.jsxs("div",{className:"mobile-notif-body",children:[a.jsx("span",{className:"mobile-notif-title",children:c.title||c.message}),c.message&&c.title&&a.jsx("span",{className:"mobile-notif-text",children:c.message}),a.jsx("span",{className:"mobile-notif-time",children:Q2(c.ts)})]}),!c.read&&a.jsx("span",{className:"mobile-notif-dot"})]},c.id))]})})]})}const Y2={activity:"Activity",chat:"Chat",tasks:"Tasks",settings:"Settings",more:"More",plans:"Plans",agents:"Agents",skills:"Skills",mods:"Mods",schedules:"Schedules",history:"History",config:"Config","plan-detail":"Plan","agent-detail":"Agent","task-detail":"Task"};function K2({activeTab:e,snapshot:t,onSearch:n,onNavigate:r}){const[i,l]=w.useState(!1),s=async o=>{try{await q.post(`/projects/${encodeURIComponent(o)}/activate`),l(!1),window.location.reload()}catch{}};return a.jsxs("header",{className:"mobile-topbar",children:[a.jsxs("div",{className:"mobile-topbar-left",children:[a.jsx("span",{className:"mobile-logo",children:"ᛒ"}),(t==null?void 0:t.activeProject)&&a.jsxs("button",{type:"button",className:"mobile-project-btn",onClick:()=>l(!0),"aria-label":"Select project",children:[a.jsx("span",{className:"mobile-project-name",children:t.activeProject.name}),a.jsx(Ss,{size:14})]}),a.jsx("span",{className:"mobile-title",children:Y2[e]||"Bizar"})]}),a.jsxs("div",{className:"mobile-topbar-right",children:[a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:n,"aria-label":"Search",children:a.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[a.jsx("circle",{cx:"11",cy:"11",r:"8"}),a.jsx("path",{d:"m21 21-4.35-4.35"})]})}),a.jsx(q2,{onSelect:o=>{r("notification",o.link||"",o.meta??null)}}),(t==null?void 0:t.activeProject)&&a.jsx(Dt,{open:i,onClose:()=>l(!1),title:"Projects",children:a.jsx("div",{className:"mobile-project-list",children:(t.projects||[]).map(o=>{var u,d;return a.jsxs("button",{type:"button",className:`mobile-project-item ${o.id===((u=t.activeProject)==null?void 0:u.id)?"active":""}`,onClick:()=>s(o.id),children:[a.jsx("div",{className:"mobile-project-status","data-status":o.status}),a.jsxs("div",{className:"mobile-project-info",children:[a.jsx("span",{className:"mobile-project-item-name",children:o.name}),a.jsx("span",{className:"mobile-project-item-path",children:o.path})]}),o.id===((d=t.activeProject)==null?void 0:d.id)&&a.jsx("span",{className:"mobile-active-badge",children:"active"})]},o.id)})})})]})]})}const G2=["all","tasks","agents","bg","artifacts","mods"],Co={all:"All",tasks:"Tasks",agents:"Agents",bg:"Background",artifacts:"Plans",mods:"Mods"};function X2({snapshot:e,onRefresh:t}){var L;const[n,r]=w.useState(((L=e.overview)==null?void 0:L.recentActivity)||[]),[i,l]=w.useState(!0),[s,o]=w.useState("all"),[u,d]=w.useState(!1),[c,f]=w.useState(null),[m,h]=w.useState(""),[p,x]=w.useState(!1);w.useEffect(()=>{var I;(I=e.overview)!=null&&I.recentActivity?(r(e.overview.recentActivity),l(!1)):b()},[e.overview]);const b=async()=>{var I;try{const k=await q.get("/snapshot");r(((I=k.overview)==null?void 0:I.recentActivity)||[])}catch{}finally{l(!1)}},y=s==="all"?n:n.filter(I=>{var k,j,P,B,O,W;return s==="tasks"?(k=I.kind)==null?void 0:k.startsWith("task"):s==="agents"?(j=I.kind)==null?void 0:j.startsWith("agent"):s==="bg"?((P=I.kind)==null?void 0:P.includes("bg"))||((B=I.kind)==null?void 0:B.includes("schedule")):s==="artifacts"?(O=I.kind)==null?void 0:O.includes("artifacts"):s==="mods"?(W=I.kind)==null?void 0:W.includes("mod"):!0}),g=e.agents||[],v=e.tasks||[],C=v.filter(I=>I.status==="doing"||I.status==="queued"),z=v.filter(I=>I.status==="done"),E=async()=>{if(!(!m.trim()||p)){x(!0);try{await q.post("/chat",{message:m.trim(),agent:"odin"}),h(""),await t().catch(()=>{}),await b()}catch{}finally{x(!1)}}},A=async()=>{await t().catch(()=>{}),await b()};return a.jsxs("div",{className:"mobile-view",children:[a.jsxs("div",{className:"mobile-submit-hero",children:[a.jsx("textarea",{className:"mobile-submit-input",placeholder:"What needs to be done? Describe a task, bug, or refactor for Odin to artifacts…",value:m,onChange:I=>h(I.target.value),rows:2}),a.jsxs("div",{className:"mobile-submit-actions",children:[a.jsx("div",{className:"mobile-submit-chips",children:["Implement feature","Fix bug","Refactor","Investigate","Write tests"].map(I=>a.jsx("button",{type:"button",className:"mobile-submit-chip",onClick:()=>h(k=>k?`${k} ${I}`:I),children:I},I))}),a.jsxs("button",{type:"button",className:"mobile-btn",disabled:!m.trim()||p,onClick:E,children:[a.jsx($m,{size:14})," Submit to Odin"]})]})]}),a.jsxs("div",{className:"mobile-stats",children:[a.jsxs("div",{className:"mobile-stat",children:[a.jsx("div",{className:"mobile-stat-value",children:g.length}),a.jsx("div",{className:"mobile-stat-label",children:"Agents"})]}),a.jsxs("div",{className:"mobile-stat",children:[a.jsx("div",{className:"mobile-stat-value",children:C.length}),a.jsx("div",{className:"mobile-stat-label",children:"Active"})]}),a.jsxs("div",{className:"mobile-stat",children:[a.jsx("div",{className:"mobile-stat-value",children:z.length}),a.jsx("div",{className:"mobile-stat-label",children:"Done"})]}),a.jsxs("div",{className:"mobile-stat",children:[a.jsx("div",{className:"mobile-stat-value",children:e.artifacts.length||0}),a.jsx("div",{className:"mobile-stat-label",children:"Plans"})]})]}),i&&n.length===0&&a.jsx("div",{className:"mobile-loading mobile-loading-inline",children:a.jsx("p",{children:"Loading activity…"})}),a.jsxs("div",{className:"mobile-activity-header",children:[a.jsx("h3",{className:"mobile-section-title",style:{margin:0},children:"Recent Activity"}),a.jsxs("div",{style:{display:"flex",gap:4},children:[a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>d(I=>!I),"aria-label":u?"Resume":"Pause",children:u?a.jsx(Zl,{size:14}):a.jsx(lx,{size:14})}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:A,"aria-label":"Refresh",children:a.jsx(_t,{size:14})})]})]}),a.jsx("div",{className:"mobile-search-scopes",children:G2.map(I=>a.jsx("button",{type:"button",className:`mobile-scope-chip ${s===I?"active":""}`,onClick:()=>o(I),children:Co[I]},I))}),g.length>0&&a.jsxs("section",{className:"mobile-section",children:[a.jsxs("h3",{className:"mobile-section-title",children:[a.jsx(Dr,{size:14})," Agents"]}),a.jsx("div",{className:"mobile-card-list",children:g.slice(0,6).map(I=>a.jsxs("div",{className:"mobile-agent-card",children:[a.jsx("div",{className:"mobile-agent-dot","data-status":I.status||"idle"}),a.jsxs("div",{className:"mobile-agent-info",children:[a.jsx("span",{className:"mobile-agent-name",children:I.name}),a.jsx("span",{className:"mobile-agent-meta",children:I.status||"idle"})]})]},I.name))})]}),!u&&y.length>0&&a.jsx("section",{className:"mobile-section",children:a.jsx("div",{className:"mobile-card-list",children:y.slice(0,30).map((I,k)=>a.jsxs("button",{type:"button",className:"mobile-event-item",onClick:()=>f(I),children:[a.jsx("span",{className:"mobile-event-kind","data-kind":I.kind,children:Co[I.kind]||I.kind}),a.jsx("span",{className:"mobile-event-msg",children:Z2(I)}),a.jsx("span",{className:"mobile-event-time",children:Sr(I.ts)})]},`${I.ts}-${I.kind}-${k}`))})}),!u&&y.length===0&&n.length>0&&a.jsxs("div",{className:"mobile-empty",children:[a.jsx(xa,{size:40}),a.jsx("p",{children:"No matching activity."}),a.jsx("p",{className:"muted",children:"Try a different filter."})]}),c&&a.jsx(Dt,{open:!0,onClose:()=>f(null),title:Co[c.kind]||c.kind,children:a.jsxs("div",{className:"mobile-agent-detail-meta",children:[a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Kind"}),a.jsx("span",{children:c.kind})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Time"}),a.jsx("span",{children:new Date(c.ts).toLocaleString()})]}),Object.entries(c).filter(([I])=>!["ts","kind"].includes(I)).map(([I,k])=>a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:I}),a.jsx("span",{style:{fontSize:12,maxWidth:200,wordBreak:"break-all"},children:typeof k=="object"?JSON.stringify(k):String(k)})]},I))]})}),g.length===0&&C.length===0&&a.jsxs("div",{className:"mobile-empty",children:[a.jsx(xa,{size:40}),a.jsx("p",{children:"No activity yet."}),a.jsx("p",{className:"muted",children:"Start a task or chat to see things here."})]})]})}function Z2(e){const t=e.kind||"";return t.includes("task")?`Task: ${e.title||e.id||"updated"}`:t.includes("agent")?`Agent: ${e.name||"status changed"}`:t.includes("artifacts")?`Plan: ${e.slug||"changed"}`:t.includes("mod")?`Mod: ${e.name||"changed"}`:t.includes("schedule")?`Schedule: ${e.name||"triggered"}`:JSON.stringify(e).slice(0,80)}function Tn({open:e,onClose:t,title:n,children:r,actions:i}){const l=w.useRef(null),s=w.useRef(null),o=w.useRef(null),u=w.useId(),d=w.useRef(0);return w.useEffect(()=>{if(!e)return;o.current=document.activeElement instanceof HTMLElement?document.activeElement:null;const c='button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])',f=m=>{var y,g;if(m.key==="Escape"&&t(),m.key!=="Tab")return;const h=Array.from(((y=l.current)==null?void 0:y.querySelectorAll(c))??[]);if(h.length===0){m.preventDefault(),(g=l.current)==null||g.focus();return}const p=h[0],x=h[h.length-1],b=document.activeElement;if(m.shiftKey){(!b||b===p||b===l.current)&&(m.preventDefault(),x==null||x.focus());return}b===x&&(m.preventDefault(),p==null||p.focus())};return window.addEventListener("keydown",f),d.current=window.scrollY,document.documentElement.style.overflow="hidden",document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.top=`-${d.current}px`,document.body.style.left="0",document.body.style.right="0",document.body.style.width="100%",requestAnimationFrame(()=>{var m,h;((m=s.current)==null?void 0:m.focus())??((h=l.current)==null||h.focus())}),()=>{var m;window.removeEventListener("keydown",f),document.documentElement.style.overflow="",document.body.style.overflow="",document.body.style.position="",document.body.style.top="",document.body.style.left="",document.body.style.right="",document.body.style.width="",window.scrollTo(0,d.current),(m=o.current)==null||m.focus()}},[e,t]),e?a.jsx("div",{className:"mobile-modal-overlay",onClick:c=>{c.target===c.currentTarget&&t()},children:a.jsxs("div",{ref:l,className:"mobile-modal",onClick:c=>c.stopPropagation(),role:"dialog","aria-modal":!0,"aria-label":n?void 0:"Modal","aria-labelledby":n?u:void 0,tabIndex:-1,children:[a.jsxs("div",{className:"mobile-modal-header",children:[n?a.jsx("h2",{id:u,className:"mobile-modal-title",children:n}):a.jsx("div",{}),a.jsx("button",{ref:s,type:"button",className:"mobile-icon-btn",onClick:t,"aria-label":"Close",children:a.jsx(Zn,{size:20})})]}),a.jsx("div",{className:"mobile-modal-content",children:r}),i&&a.jsx("div",{className:"mobile-modal-actions",children:i})]})}):null}const ug=["reasoning","code","design","planning","gitops","analysis"],gf={reasoning:"var(--accent)",code:"var(--info)",design:"var(--success)",planning:"var(--warning)",gitops:"var(--error)",analysis:"var(--text-dim)"};function yf({snapshot:e,onBack:t,onOpenAgent:n,selectedAgent:r,onRefresh:i}){const[l,s]=w.useState(e.agents||[]),[o,u]=w.useState(!e.agents),[d,c]=w.useState(""),[f,m]=w.useState(""),[h,p]=w.useState(null),[x,b]=w.useState(!1),[y,g]=w.useState(""),[v,C]=w.useState(!1);w.useEffect(()=>{if(r){const j=l.find(P=>P.name===r);j&&p(j)}},[r,l]);const z=async()=>{try{const j=await q.get("/agents");s(j.agents||[])}catch{}finally{u(!1)}},E=l.filter(j=>{if(d&&j.category!==d)return!1;if(f){const P=f.toLowerCase();if(!j.name.toLowerCase().includes(P)&&!(j.description||"").toLowerCase().includes(P))return!1}return!0}),A=async(j,P)=>{try{await q.post(`/agents/${encodeURIComponent(j)}/invoke`,{prompt:P}),C(!1),g("")}catch{}},L=async j=>{try{await q.post(`/agents/${encodeURIComponent(j)}/restart`),await z()}catch{}},I=async j=>{if(confirm(`Delete agent "${j}"?`))try{await q.del(`/agents/${encodeURIComponent(j)}`),s(P=>P.filter(B=>B.name!==j)),p(null),i==null||i()}catch{}},k=async j=>{try{const P=await q.post("/agents",j);s(B=>[...B,P]),b(!1),i==null||i()}catch{}};return a.jsxs("div",{className:"mobile-view",children:[a.jsxs("div",{className:"mobile-tasks-toolbar",children:[a.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search agents…",value:f,onChange:j=>m(j.target.value),style:{flex:1}}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>z(),"aria-label":"Refresh",children:a.jsx(_t,{size:16})}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>b(!0),"aria-label":"New agent",children:a.jsx(xt,{size:16})})]}),a.jsxs("div",{className:"mobile-search-scopes",children:[a.jsx("button",{type:"button",className:`mobile-scope-chip ${d?"":"active"}`,onClick:()=>c(""),children:"All"}),ug.map(j=>a.jsx("button",{type:"button",className:`mobile-scope-chip ${d===j?"active":""}`,onClick:()=>c(j),children:j},j))]}),o?a.jsx("div",{className:"mobile-loading",children:a.jsx("p",{children:"Loading…"})}):E.length===0?a.jsxs("div",{className:"mobile-empty",children:[a.jsx(Dr,{size:40}),a.jsx("p",{children:"No agents found."})]}):a.jsx("div",{className:"mobile-card-list",children:E.map(j=>a.jsxs("button",{type:"button",className:"mobile-list-item mobile-list-item-interactive",onClick:()=>{p(j),n(j.name)},children:[a.jsx("div",{className:"mobile-agent-dot","data-status":j.status||"idle"}),a.jsxs("div",{className:"mobile-list-content",children:[a.jsx("span",{className:"mobile-list-title",children:j.name}),a.jsx("span",{className:"mobile-list-meta",children:j.model||j.mode||"—"})]}),j.category&&a.jsx("span",{className:"mobile-list-badge",style:{color:gf[j.category]||"var(--text-dim)"},children:j.category}),a.jsx("span",{className:"mobile-list-badge","data-status":j.status||"idle",children:j.status||"idle"})]},j.name))}),h&&a.jsx(Dt,{open:!0,onClose:()=>p(null),title:h.name,actions:a.jsxs("div",{className:"mobile-task-detail-actions",children:[a.jsxs("button",{type:"button",className:"mobile-btn",onClick:()=>{g(""),C(!0)},children:[a.jsx(Zl,{size:14})," Invoke"]}),(h.isStuck||h.status==="error"||h.status==="working")&&a.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-secondary",onClick:()=>L(h.name),children:[a.jsx(ux,{size:14})," Restart"]}),a.jsx("button",{type:"button",className:"mobile-btn mobile-btn-danger",onClick:()=>I(h.name),children:a.jsx(_r,{size:14})})]}),children:a.jsxs("div",{className:"mobile-agent-detail",children:[a.jsxs("div",{className:"mobile-agent-detail-status",children:[a.jsx("span",{className:"mobile-agent-dot","data-status":h.status||"idle"}),a.jsx("span",{className:"mobile-agent-detail-status-text",children:h.status||"idle"}),h.category&&a.jsx("span",{className:"mobile-list-badge",style:{color:gf[h.category]},children:h.category})]}),a.jsx("p",{className:"mobile-agent-detail-desc",children:h.description||"No description."}),a.jsxs("div",{className:"mobile-agent-detail-meta",children:[a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Model"}),a.jsx("span",{className:"mono",children:h.model||"—"})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Mode"}),a.jsx("span",{children:h.mode||"subagent"})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Path"}),a.jsx("span",{className:"mono",style:{fontSize:11},children:h.path})]}),h.lastError&&a.jsxs("div",{className:"mobile-task-detail-row",style:{color:"var(--error)"},children:[a.jsx("span",{children:"Last error"}),a.jsx("span",{children:h.lastError.message})]}),h.tasksTotal!=null&&h.tasksTotal>0&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Success rate"}),a.jsxs("span",{children:[Math.round((h.successRate||0)*100),"%"]})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Last modified"}),a.jsx("span",{children:Sr(h.mtime)})]})]})]})}),a.jsxs(Tn,{open:v,onClose:()=>C(!1),title:`Invoke ${h==null?void 0:h.name}`,actions:a.jsxs("button",{type:"button",className:"mobile-btn",style:{width:"100%"},disabled:!y.trim(),onClick:()=>{h&&A(h.name,y.trim())},children:[a.jsx(Zl,{size:14})," Invoke"]}),children:[a.jsxs("p",{className:"muted",style:{marginBottom:12},children:["Model: ",a.jsx("span",{className:"mono",children:(h==null?void 0:h.model)||"—"})]}),a.jsx("textarea",{className:"mobile-input",rows:5,placeholder:"What should this agent do?",value:y,onChange:j=>g(j.target.value),autoFocus:!0})]}),a.jsx(J2,{open:x,onClose:()=>b(!1),onCreate:k})]})}function J2({open:e,onClose:t,onCreate:n}){const[r,i]=w.useState(""),[l,s]=w.useState(""),[o,u]=w.useState(""),[d,c]=w.useState("subagent"),[f,m]=w.useState("#8b5cf6"),[h,p]=w.useState(""),[x,b]=w.useState(""),[y,g]=w.useState(""),v=C=>{C.preventDefault(),r.trim()&&(n({name:r.trim(),description:l.trim(),model:o,mode:d,color:f,tools:[],tags:x.split(",").map(z=>z.trim()).filter(Boolean),category:h,prompt:y}),i(""),s(""),u(""),c("subagent"),m("#8b5cf6"),p(""),b(""),g(""))};return a.jsx(Tn,{open:e,onClose:t,title:"New Agent",actions:a.jsxs("button",{type:"submit",form:"new-agent-form",className:"mobile-btn",style:{width:"100%"},children:[a.jsx(xt,{size:14})," Create"]}),children:a.jsxs("form",{id:"new-agent-form",onSubmit:v,className:"mobile-task-form",children:[a.jsx("label",{className:"mobile-field-label",children:"Name *"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:"my-agent",pattern:"[a-z0-9][a-z0-9-]{0,63}",value:r,onChange:C=>i(C.target.value),autoFocus:!0,required:!0}),a.jsx("label",{className:"mobile-field-label",children:"Description"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:"What does this agent do?",value:l,onChange:C=>s(C.target.value)}),a.jsx("label",{className:"mobile-field-label",children:"Model"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:"(provider default)",value:o,onChange:C=>u(C.target.value)}),a.jsx("label",{className:"mobile-field-label",children:"Category"}),a.jsxs("select",{className:"mobile-input",value:h,onChange:C=>p(C.target.value),children:[a.jsx("option",{value:"",children:"None"}),ug.map(C=>a.jsx("option",{value:C,children:C},C))]}),a.jsx("label",{className:"mobile-field-label",children:"Tags (comma-separated)"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:"tag1, tag2",value:x,onChange:C=>b(C.target.value)})]})})}function eC({sessions:e,opencodeSessions:t,activeSessionId:n,activeOpencodeSessionId:r,activeProject:i,creating:l,onCreateSession:s,onSelectSession:o,onSelectOpencodeSession:u}){const[d,c]=w.useState("all"),[f,m]=w.useState(!1),h=30,p=d==="all"?[...e,...t].sort((g,v)=>Number(v.mtime)-Number(g.mtime)):e,x=f?p:p.slice(0,h),b=t.length,y=g=>{if(g.source==="opencode"){u(g);return}o(g.id)};return a.jsxs("div",{className:"chat-sessions",children:[a.jsxs("div",{className:"chat-sessions-header",children:[a.jsx("span",{className:"chat-sessions-header-title",children:"Sessions"}),a.jsx("span",{className:"chat-sessions-count",children:x.length})]}),b>0&&a.jsxs("div",{className:"chat-sessions-toggle",children:[a.jsx("button",{type:"button",className:`chat-sessions-toggle-btn ${d==="bizar"?"active":""}`,onClick:()=>c("bizar"),children:"Bizar"}),a.jsxs("button",{type:"button",className:`chat-sessions-toggle-btn ${d==="all"?"active":""}`,onClick:()=>c("all"),children:["All (",b," opencode)"]})]}),a.jsxs("button",{type:"button",className:"chat-sessions-new",onClick:s,disabled:l||!i,title:i?"Create new session":"Pick a project first","aria-label":"Create new session",children:[l?a.jsx(Wm,{size:"sm"}):a.jsx(xt,{size:14}),a.jsx("span",{children:l?"Creating…":"New session"})]}),e.length===0?a.jsx("div",{className:"chat-sessions-empty",children:a.jsx(Ix,{icon:a.jsx(Jl,{size:20}),title:i?"No sessions yet":"No project",message:i?"Create your first session to start chatting.":"Pick a project in Overview to scope chat sessions.",action:i?a.jsxs(pr,{variant:"primary",size:"sm",onClick:s,loading:l,children:[a.jsx(xt,{size:12})," New session"]}):a.jsxs(pr,{variant:"secondary",size:"sm",onClick:()=>{window.location.hash="#overview"},children:[a.jsx(Pu,{size:12})," Open Overview"]})})}):a.jsx("ul",{className:"chat-sessions-list",children:x.map(g=>{const v=g.source==="opencode",C=v?r===g.id:n===g.id;return a.jsxs("li",{className:`chat-sessions-item ${C?"active":""} ${v?"chat-sessions-item-opencode":""}`,onClick:()=>y(g),title:v?`Open in dashboard: ${g.title||g.id}`:g.id,children:[v&&a.jsx(Z1,{size:10,className:"chat-sessions-item-icon"}),a.jsx("span",{className:"chat-sessions-item-id",children:g.title||g.id}),a.jsx("span",{className:"chat-sessions-item-meta",children:new Date(Number(g.mtime)).toLocaleDateString()})]},v?`oc-${g.id}`:g.id)})}),p.length>h&&a.jsx("button",{type:"button",className:"chat-sessions-show-more",onClick:()=>m(g=>!g),children:f?`Show less (${p.length-h} hidden)`:`Show all ${p.length} sessions`})]})}function tC(e){const{activeSource:t}=e;return a.jsx("div",{className:`chat-composer-wrap chat-composer-source-${t??"none"} legacy`,children:a.jsx("div",{className:"chat-composer-pill",children:a.jsx(T2,{...e})})})}function nC({sessionId:e,messages:t,pinned:n,agent:r,model:i,agents:l,mcps:s,allCommands:o,activeSource:u="bizar",onRename:d,onDelete:c}){const[f,m]=w.useState(!1),[h,p]=w.useState(!1),x=f?l:l.slice(0,4),b=h?o:o.slice(0,4),y=i.includes("/")?i.split("/")[0]:"";return a.jsxs("div",{className:"chat-info",children:[a.jsxs("div",{className:"chat-info-card",children:[a.jsxs("div",{className:"chat-info-card-title",children:[a.jsx(On,{size:14})," Session",a.jsx("span",{className:`chat-source-badge chat-source-${u??"none"}`,style:{marginLeft:"auto"},children:u==="opencode"?"opencode":"bizar chat"})]}),a.jsxs("dl",{className:"env-table",children:[a.jsx("dt",{children:"id"}),a.jsx("dd",{className:"mono",children:e||"Live"}),a.jsx("dt",{children:"Messages"}),a.jsx("dd",{className:"mono",children:t.length}),a.jsx("dt",{children:"Pinned"}),a.jsx("dd",{className:"mono",children:n.size}),a.jsx("dt",{children:"Agent"}),a.jsx("dd",{className:"mono",children:r||"—"}),a.jsx("dt",{children:"Model"}),a.jsx("dd",{className:"mono ellipsis",title:i,children:i||"—"}),y&&a.jsxs(a.Fragment,{children:[a.jsx("dt",{children:"Provider"}),a.jsx("dd",{className:"mono",children:y})]})]}),(d||c)&&a.jsxs("div",{className:"chat-info-actions",children:[d&&a.jsxs("button",{type:"button",className:"btn btn-ghost btn-sm",onClick:d,children:[a.jsx(Au,{size:12,"aria-hidden":!0})," Rename"]}),c&&a.jsxs("button",{type:"button",className:"btn btn-ghost btn-danger btn-sm",onClick:c,children:[a.jsx(_r,{size:12,"aria-hidden":!0})," Delete"]})]})]}),a.jsxs("div",{className:"chat-info-card",children:[a.jsxs("div",{className:"chat-info-card-title",children:[a.jsx(Dr,{size:14})," Agents",a.jsx("span",{className:"chat-info-card-count",children:l.length})]}),a.jsx("ul",{className:"mod-mini-list",children:x.map(g=>a.jsxs("li",{className:"mod-mini",children:[a.jsxs("span",{className:"mod-mini-name",children:["@",g.name]}),a.jsx("span",{className:"mod-mini-meta",children:g.model||g.mode||""})]},g.name))}),l.length>4&&a.jsx("button",{type:"button",className:"chat-info-card-toggle",onClick:()=>m(g=>!g),children:f?"− Show fewer":`+ ${l.length-4} more`})]}),a.jsxs("div",{className:"chat-info-card",children:[a.jsxs("div",{className:"chat-info-card-title",children:[a.jsx(cx,{size:14})," MCPs",a.jsx("span",{className:"chat-info-card-count",children:s.length})]}),a.jsxs("ul",{className:"mod-mini-list",children:[s.length===0?a.jsx("li",{className:"muted",children:"No MCPs configured."}):null,s.map(g=>a.jsxs("li",{className:"mod-mini",children:[a.jsx("span",{className:"mod-mini-name",children:g.id}),a.jsx("span",{className:`mod-mini-pill ${g.enabled?"on":"off"}`,children:g.enabled?"on":"off"})]},g.id))]})]}),a.jsxs("div",{className:"chat-info-card",children:[a.jsxs("button",{type:"button",className:"chat-info-card-title chat-info-card-title-button",onClick:()=>p(g=>!g),"aria-expanded":h,children:[a.jsx(hx,{size:14})," Slash commands",a.jsx("span",{className:"chat-info-card-count",children:o.length}),a.jsx(Ss,{size:12,className:`chat-info-card-chevron ${h?"open":""}`})]}),h&&a.jsx("ul",{className:"mod-mini-list",children:b.map(g=>a.jsxs("li",{children:[a.jsx("code",{children:g.cmd}),a.jsx("span",{className:"muted",children:g.desc})]},g.cmd))})]})]})}function rC({snapshot:e,settings:t,setActiveTab:n,initialTaskId:r,onClearTaskId:i}){const l=bx(),s=kx(),o=A2(e,t,r??"");w.useEffect(()=>{o.setToast({error:O=>l.error(O),success:O=>l.success(O),info:O=>l.info(O),warning:O=>l.warning(O)})},[o,l]);const[u,d]=w.useState(""),[c,f]=w.useState(t.defaultAgent||"odin"),[m,h]=w.useState(t.defaultModel||""),[p,x]=w.useState([]),[b,y]=w.useState(!1),[g,v]=w.useState(!1),C=w.useRef(null),{allCommands:z,suggestions:E,setQuery:A}=L2(e);w.useEffect(()=>{A(u)},[u,A]);const L=()=>{var O;return(O=C.current)==null?void 0:O.click()},I=O=>{const W=O.target.files;if(!W)return;const de=[];for(let ee=0;ee<W.length;ee++)de.push(W[ee].name);x(ee=>{const R=de.filter(V=>!ee.includes(V));return[...ee,...R]}),C.current&&(C.current.value="")},k=async()=>{const O=u.trim();if(!O)return;d(""),A(""),(await o.onSend(O,c,m,p)).ok&&o.jumpToLatest()},j=async()=>{o.busy.create||(await o.onCreateSession(),y(!1))},P=O=>{s.open({title:"Delete message?",children:a.jsx("p",{style:{margin:0},children:"This action cannot be undone."}),footer:a.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"flex-end"},children:[a.jsx(pr,{variant:"secondary",size:"sm",onClick:()=>s.close(),children:"Cancel"}),a.jsx(pr,{variant:"danger",size:"sm",onClick:()=>{s.close(),o.deleteMessage(O)},children:"Delete"})]})})},B=(O,W)=>{s.open({title:"Delete session?",children:a.jsxs("p",{style:{margin:0},children:["Delete ",a.jsx("strong",{children:W}),"? This cannot be undone."]}),footer:a.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"flex-end"},children:[a.jsx(pr,{variant:"secondary",size:"sm",onClick:()=>s.close(),children:"Cancel"}),a.jsx(pr,{variant:"danger",size:"sm",onClick:async()=>{s.close(),await o.deleteSession(O)},children:"Delete"})]})})};return a.jsxs("div",{className:"chat-shell",children:[a.jsx(Tx,{activeProject:e.activeProject,sessionCount:o.sessions.length,sessionsOpen:b,infoOpen:g,onToggleSessions:()=>y(O=>!O),onToggleInfo:()=>v(O=>!O),onOpenOverview:()=>n==null?void 0:n("overview")}),a.jsxs("div",{className:"chat-body",children:[a.jsx("aside",{className:`chat-sessions ${b?"":"chat-sessions-hidden"}`,children:a.jsx(eC,{sessions:o.sessions,opencodeSessions:o.opencodeSessions,activeSessionId:o.sessionId,activeOpencodeSessionId:o.activeOpencodeSessionId,activeProject:e.activeProject,onCreateSession:j,onSelectSession:o.selectBizarSession,onSelectOpencodeSession:O=>o.loadOpencodeSession(O.id),creating:o.busy.create})}),a.jsxs("main",{className:"chat-main",children:[a.jsx(j2,{messages:o.activeSource==="opencode"?o.opencodeMessages:o.bizarMessages,loading:o.loading,activeProject:e.activeProject,sessionId:o.activeSource==="opencode"?o.activeOpencodeSessionId??o.sessionId:o.sessionId,pinned:o.pinned,activeSource:o.activeSource,onPickSuggestion:O=>d(O),onCopy:O=>o.copyMessage(O),onDelete:P,onTogglePin:o.togglePin,onRegenerate:o.onRegenerate}),a.jsx(tC,{agent:c,setAgent:f,model:m,setModel:h,text:u,setText:d,sending:o.sending,activeSource:o.activeSource,onSend:k,attachments:p,setAttachments:x,suggestions:E,onPickSuggestion:O=>d(`${O.split(" ")[0]} `),agents:e.agents||[],onAttach:L,sessionsOpen:b,infoOpen:g}),a.jsx("input",{ref:C,type:"file",multiple:!0,style:{display:"none"},onChange:I})]}),a.jsx("aside",{className:`chat-info ${g?"":"chat-info-hidden"}`,children:a.jsx(nC,{sessionId:o.activeSource==="opencode"?o.activeOpencodeSessionId??o.sessionId:o.sessionId,messages:o.activeSource==="opencode"?o.opencodeMessages:o.bizarMessages,pinned:o.pinned,agent:c,model:m,agents:e.agents||[],mcps:e.mcps||[],allCommands:z,activeSource:o.activeSource,onDelete:()=>{const O=o.activeSource==="opencode"?o.activeOpencodeSessionId:o.sessionId;O&&B(O,O)}})})]})]})}function iC({onBack:e}){const[t,n]=w.useState([]),[r,i]=w.useState(!0),[l,s]=w.useState({}),[o,u]=w.useState(!1),d=async()=>{try{const x=await q.get("/config"),b=Object.entries(x).map(([y,g])=>({key:y,value:g,type:c(g)}));n(b),s(Object.fromEntries(Object.entries(x).map(([y,g])=>[y,g])))}catch{}finally{i(!1)}};w.useEffect(()=>{d()},[]);const c=x=>typeof x=="boolean"?"boolean":typeof x=="number"?"number":typeof x=="string"?"string":Array.isArray(x)?"array":x&&typeof x=="object"?"object":"unknown",f=(x,b)=>{s(y=>({...y,[x]:b}))},m=async()=>{u(!0);try{await q.patch("/config",l),await d()}catch{}finally{u(!1)}},h=(x,b)=>{s(y=>({...y,[x]:b}))},p=x=>{const b=l[x.key];switch(x.type){case"boolean":return a.jsxs("label",{className:"mobile-toggle",children:[a.jsx("input",{type:"checkbox",checked:!!b,onChange:y=>f(x.key,y.target.checked)}),a.jsx("span",{className:"mobile-toggle-slider"})]});case"number":return a.jsx("input",{className:"mobile-input mobile-input-sm",type:"number",inputMode:"numeric",value:String(b??""),onChange:y=>f(x.key,Number(y.target.value))});case"string":return a.jsx("input",{className:"mobile-input mobile-input-sm",type:"text",value:String(b??""),onChange:y=>f(x.key,y.target.value)});case"object":case"array":return a.jsx("textarea",{className:"mobile-input mobile-input-sm",rows:2,value:JSON.stringify(b??null,null,2),onChange:y=>{try{f(x.key,JSON.parse(y.target.value))}catch{}}});default:return a.jsx("span",{className:"mobile-setting-value mono",children:String(b??"null")})}};return a.jsxs("div",{className:"mobile-view",children:[a.jsxs("div",{className:"mobile-tasks-toolbar",children:[a.jsxs("span",{style:{fontSize:14,color:"var(--text-muted)",flex:1},children:[t.length," config entries"]}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>d(),"aria-label":"Refresh",children:a.jsx(_t,{size:16})}),a.jsxs("button",{type:"button",className:"mobile-btn",disabled:o,onClick:()=>m(),children:[a.jsx(Fm,{size:14})," ",o?"Saving…":"Save all"]})]}),r?a.jsx("div",{className:"mobile-loading",children:a.jsx("p",{children:"Loading…"})}):t.length===0?a.jsxs("div",{className:"mobile-empty",children:[a.jsx(Pr,{size:40}),a.jsx("p",{children:"No config entries."})]}):a.jsx("div",{className:"mobile-config-list",children:t.map(x=>a.jsxs("div",{className:"mobile-config-row",children:[a.jsxs("div",{className:"mobile-config-key",children:[a.jsx("span",{className:"mono",children:x.key}),a.jsx("span",{className:"mobile-config-type",children:x.type})]}),a.jsx("div",{className:"mobile-config-value",children:p(x)}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>h(x.key,x.defaultValue),"aria-label":"Reset to default",title:"Reset",children:a.jsx(ax,{size:14})})]},x.key))})]})}function lC({onBack:e}){const[t,n]=w.useState([]),[r,i]=w.useState(!0),[l,s]=w.useState(null),[o,u]=w.useState(""),d=async()=>{try{const h=await q.get("/history");if(Array.isArray(h.history)){n(h.history);return}if(Array.isArray(h.projects)){const p=new Map;for(const x of h.events||[]){const b=x.projectId;if(!b)continue;const y=p.get(b);(!y||new Date(x.ts).getTime()>new Date(y.ts).getTime())&&p.set(b,x)}n(h.projects.map(x=>{const b=p.get(x.id);return{id:x.id,ts:x.lastAccessed||(b==null?void 0:b.ts)||new Date(0).toISOString(),agent:x.name,taskCount:x.tasks.total,summary:`${x.path} · ${x.tasks.done}/${x.tasks.total} done · ${x.plans} plan${x.plans===1?"":"s"}`,output:b?`${b.kind}${b.text?` — ${b.text}`:""}`:"No recent events."}}));return}n([])}catch{}finally{i(!1)}};w.useEffect(()=>{d()},[]);const c=h=>{if(!h)return"—";const p=Math.floor(h/1e3);if(p<60)return`${p}s`;const x=Math.floor(p/60),b=p%60;return`${x}m ${b}s`},f=h=>new Date(h).toLocaleString(),m=o.trim()?t.filter(h=>{const p=o.toLowerCase();return(h.agent||"session").toLowerCase().includes(p)||(h.summary||"").toLowerCase().includes(p)||(h.output||"").toLowerCase().includes(p)}):t;return a.jsxs("div",{className:"mobile-view",children:[a.jsxs("div",{className:"mobile-tasks-toolbar",children:[a.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search history…",value:o,onChange:h=>u(h.target.value),style:{flex:1}}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>d(),"aria-label":"Refresh",children:a.jsx(_t,{size:16})})]}),r?a.jsx("div",{className:"mobile-loading",children:a.jsx("p",{children:"Loading…"})}):m.length===0?a.jsxs("div",{className:"mobile-empty",children:[a.jsx(ka,{size:40}),a.jsx("p",{children:t.length===0?"No history yet.":"No matching sessions."})]}):a.jsx("div",{className:"mobile-card-list",children:m.map(h=>a.jsxs("button",{type:"button",className:"mobile-list-item mobile-list-item-interactive",onClick:()=>s(h),children:[a.jsx("div",{className:"mobile-list-icon",children:a.jsx(ka,{size:16})}),a.jsxs("div",{className:"mobile-list-content",children:[a.jsx("span",{className:"mobile-list-title",children:h.agent||"Session"}),a.jsxs("span",{className:"mobile-list-meta",children:[f(h.ts),h.duration?` · ${c(h.duration)}`:"",h.taskCount?` · ${h.taskCount} tasks`:""]})]})]},h.id))}),l&&a.jsxs(Dt,{open:!0,onClose:()=>s(null),title:"Session Detail",children:[a.jsxs("div",{className:"mobile-agent-detail-meta",children:[a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Agent"}),a.jsx("span",{children:l.agent||"—"})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Started"}),a.jsx("span",{children:f(l.ts)})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Duration"}),a.jsx("span",{children:c(l.duration)})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Tasks"}),a.jsx("span",{children:l.taskCount||0})]})]}),l.summary&&a.jsxs("div",{style:{marginTop:12},children:[a.jsx("h4",{style:{fontSize:12,color:"var(--text-muted)",marginBottom:4},children:"Summary"}),a.jsx("p",{style:{fontSize:13},children:l.summary})]}),l.output&&a.jsxs("div",{style:{marginTop:12},children:[a.jsx("h4",{style:{fontSize:12,color:"var(--text-muted)",marginBottom:4},children:"Output"}),a.jsxs("pre",{className:"mono",style:{fontSize:11,whiteSpace:"pre-wrap",wordBreak:"break-all",background:"var(--bg-elev-2)",padding:8,borderRadius:6},children:[l.output.slice(0,1e3),l.output.length>1e3?"…":""]})]})]})]})}function sC({snapshot:e,onBack:t}){const[n,r]=w.useState(e.mods||[]),[i,l]=w.useState(!e.mods),[s,o]=w.useState(""),[u,d]=w.useState("all"),[c,f]=w.useState(null),m=async()=>{try{const x=await q.get("/mods");r(x.mods||[])}catch{}finally{l(!1)}};w.useEffect(()=>{e.mods?(r(e.mods),l(!1)):m()},[e.mods]);const h=async(x,b)=>{try{await q.patch(`/mods/${encodeURIComponent(x)}`,{enabled:b}),r(y=>y.map(g=>g.id===x?{...g,enabled:b}:g)),(c==null?void 0:c.id)===x&&f(y=>y&&{...y,enabled:b})}catch{}},p=n.filter(x=>{if(u==="enabled"&&!x.enabled||u==="disabled"&&x.enabled)return!1;if(s){const b=s.toLowerCase();return x.name.toLowerCase().includes(b)||x.description.toLowerCase().includes(b)}return!0});return a.jsxs("div",{className:"mobile-view",children:[a.jsxs("div",{className:"mobile-tasks-toolbar",children:[a.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search mods…",value:s,onChange:x=>o(x.target.value),style:{flex:1}}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>m(),"aria-label":"Refresh",children:a.jsx(_t,{size:16})})]}),a.jsx("div",{className:"mobile-search-scopes",children:["all","enabled","disabled"].map(x=>a.jsx("button",{type:"button",className:`mobile-scope-chip ${u===x?"active":""}`,onClick:()=>d(x),children:x.charAt(0).toUpperCase()+x.slice(1)},x))}),i?a.jsx("div",{className:"mobile-loading",children:a.jsx("p",{children:"Loading…"})}):p.length===0?a.jsxs("div",{className:"mobile-empty",children:[a.jsx(Pr,{size:40}),a.jsx("p",{children:"No mods found."})]}):a.jsx("div",{className:"mobile-card-list",children:p.map(x=>a.jsxs("button",{type:"button",className:"mobile-list-item mobile-list-item-interactive",onClick:()=>f(x),children:[a.jsx("div",{className:"mobile-list-icon",children:a.jsx(Pr,{size:16})}),a.jsxs("div",{className:"mobile-list-content",children:[a.jsx("span",{className:"mobile-list-title",children:x.name}),a.jsxs("span",{className:"mobile-list-meta",children:["v",x.version," · ",x.author]})]}),a.jsx("span",{className:`mobile-list-badge ${x.enabled?"badge-on":"badge-off"}`,children:x.enabled?"on":"off"})]},x.id))}),c&&a.jsx(Dt,{open:!0,onClose:()=>f(null),title:c.name,actions:a.jsx("div",{className:"mobile-task-detail-actions",children:a.jsxs("button",{type:"button",className:"mobile-btn",style:{flex:1},onClick:()=>{c&&h(c.id,!c.enabled)},children:[a.jsx(Om,{size:14})," ",c.enabled?"Disable":"Enable"]})}),children:a.jsxs("div",{className:"mobile-agent-detail",children:[a.jsx("p",{className:"mobile-agent-detail-desc",children:c.description||"No description."}),a.jsxs("div",{className:"mobile-agent-detail-meta",children:[a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Version"}),a.jsx("span",{className:"mono",children:c.version})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Author"}),a.jsx("span",{children:c.author})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Bizar"}),a.jsx("span",{className:"mono",children:c.bizar})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Type"}),a.jsx("span",{children:c.type})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Permissions"}),a.jsx("span",{children:c.permissions.length})]}),c.installedAt&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Installed"}),a.jsx("span",{children:new Date(c.installedAt).toLocaleDateString()})]})]})]})})]})}function oC({snapshot:e,onNavigate:t}){var s,o,u;const[n,r]=w.useState(""),i=[{id:"artifacts",icon:qn,label:"Plans",count:e.artifacts.length||0,desc:"Visual artifacts with elements & comments"},{id:"agents",icon:Dr,label:"Agents",count:((s=e.agents)==null?void 0:s.length)||0,desc:"The Norse pantheon"},{id:"skills",icon:Pr,label:"Skills",count:null,desc:"Agent capabilities & tools"},{id:"mods",icon:Pr,label:"Mods",count:((o=e.mods)==null?void 0:o.length)||0,desc:"Installed modifications"},{id:"schedules",icon:va,label:"Schedules",count:((u=e.schedules)==null?void 0:u.length)||0,desc:"Cron jobs & automated tasks"},{id:"history",icon:ka,label:"History",count:null,desc:"Past sessions & outputs"},{id:"config",icon:Bm,label:"Config",count:null,desc:"Key-value configuration editor"}],l=n.trim()?i.filter(d=>d.label.toLowerCase().includes(n.toLowerCase())||d.desc.toLowerCase().includes(n.toLowerCase())):i;return a.jsxs("div",{className:"mobile-view",children:[a.jsx("div",{className:"mobile-tasks-toolbar",children:a.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search…",value:n,onChange:d=>r(d.target.value),style:{flex:1}})}),a.jsx("div",{className:"mobile-card-list",children:l.map(d=>{const c=d.icon;return a.jsxs("button",{type:"button",className:"mobile-more-nav-item",onClick:()=>t(d.id),children:[a.jsx("div",{className:"mobile-more-nav-icon",children:a.jsx(c,{size:20})}),a.jsxs("div",{className:"mobile-more-nav-content",children:[a.jsxs("span",{className:"mobile-more-nav-label",children:[d.label,d.count!=null&&a.jsx("span",{className:"mobile-more-nav-count",children:d.count})]}),a.jsx("span",{className:"mobile-more-nav-desc",children:d.desc})]}),a.jsx(dd,{size:16,className:"mobile-more-nav-arrow"})]},d.id)})}),a.jsx("div",{className:"mobile-more-footer",children:a.jsxs("a",{href:"/?desktop=1",className:"mobile-more-link",children:["Switch to Desktop ",a.jsx(dd,{size:14})]})})]})}const Ju=[{id:"task",label:"Task",color:"var(--info)"},{id:"note",label:"Note",color:"var(--text-dim)"},{id:"decision",label:"Decision",color:"var(--accent)"},{id:"question",label:"Question",color:"var(--warning)"}];function jo(e){var t;return((t=Ju.find(n=>n.id===e))==null?void 0:t.color)||"var(--text-dim)"}function aC({type:e,size:t=12}){switch(e){case"task":return a.jsx(es,{size:t,style:{color:"var(--info)"}});case"note":return a.jsx(md,{size:t,style:{color:"var(--text-dim)"}});case"decision":return a.jsx(es,{size:t,style:{color:"var(--accent)"}});case"question":return a.jsx(K1,{size:t,style:{color:"var(--warning)"}});default:return a.jsx(md,{size:t})}}function uC({slug:e,onBack:t}){const[n,r]=w.useState(null),[i,l]=w.useState(null),[s,o]=w.useState(!0),[u,d]=w.useState(!1),[c,f]=w.useState(null),[m,h]=w.useState(!1),[p,x]=w.useState(!1),[b,y]=w.useState(!1),[g,v]=w.useState(""),C=async()=>{o(!0);try{const I=await q.get(`/plans/${encodeURIComponent(e)}`);r(I.canvas),l(I.meta)}catch{}finally{o(!1)}};w.useEffect(()=>{C()},[e]);const z=async(I,k,j)=>{try{const P=((n==null?void 0:n.elements)||[]).reduce((O,W)=>Math.max(O,W.x||0),40),B=((n==null?void 0:n.elements)||[]).reduce((O,W)=>Math.max(O,W.y||0),40);await q.post(`/plans/${encodeURIComponent(e)}/elements`,{type:I,title:k,content:j,x:20+P,y:20+B,width:240,height:120}),await C(),x(!1)}catch{}},E=async(I,k)=>{try{await q.put(`/plans/${encodeURIComponent(e)}/elements/${encodeURIComponent(I)}`,k),await C(),f(null)}catch{}},A=async I=>{if(confirm("Delete this element?"))try{await q.del(`/plans/${encodeURIComponent(e)}/elements/${encodeURIComponent(I)}`),f(null),await C()}catch{}},L=async(I,k)=>{try{const j=k?`/plans/${encodeURIComponent(e)}/elements/${encodeURIComponent(k)}/comments`:`/plans/${encodeURIComponent(e)}/comments`;await q.post(j,{text:I,elementId:k}),await C(),v(""),y(!1)}catch{}};return s||!n||!i?a.jsx("div",{className:"mobile-view",children:a.jsx("div",{className:"mobile-loading",children:a.jsx("p",{children:"Loading canvas…"})})}):a.jsxs("div",{className:"mobile-view mobile-view-canvas",children:[a.jsxs("div",{className:"mobile-canvas-bar",children:[a.jsxs("div",{className:"mobile-canvas-meta",children:[a.jsx("span",{className:"mobile-canvas-title",children:i.title||e}),a.jsx("span",{className:"mobile-canvas-status","data-status":i.status,children:i.status})]}),a.jsxs("div",{className:"mobile-canvas-actions",children:[a.jsx("button",{type:"button",className:`mobile-icon-btn ${u?"active":""}`,onClick:()=>d(I=>!I),"aria-label":u?"Done editing":"Edit",children:a.jsx(Au,{size:16})}),a.jsxs("button",{type:"button",className:"mobile-icon-btn",onClick:()=>h(I=>!I),"aria-label":"Comments",children:[a.jsx(On,{size:16}),n.comments.length>0&&a.jsx("span",{className:"mobile-canvas-comment-count",children:n.comments.length})]}),u&&a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>x(!0),"aria-label":"Add element",children:a.jsx(xt,{size:16})})]})]}),a.jsxs("div",{className:"mobile-canvas-elements",children:[n.elements.length===0&&a.jsxs("div",{className:"mobile-empty",children:[a.jsx("p",{children:"No elements yet."}),u&&a.jsxs("button",{type:"button",className:"mobile-btn",onClick:()=>x(!0),children:[a.jsx(xt,{size:14})," Add Element"]})]}),n.elements.map(I=>a.jsxs("button",{type:"button",className:`mobile-canvas-element ${(c==null?void 0:c.id)===I.id?"selected":""}`,style:{borderColor:jo(I.type)},onClick:()=>{u&&f(I)},"aria-pressed":(c==null?void 0:c.id)===I.id,children:[a.jsxs("div",{className:"mobile-canvas-el-header",style:{background:`${jo(I.type)}18`},children:[a.jsx(aC,{type:I.type,size:12}),a.jsx("span",{className:"mobile-canvas-el-type",style:{color:jo(I.type)},children:I.type}),I.status&&I.status!=="open"&&a.jsx("span",{className:"mobile-canvas-el-status",children:I.status})]}),a.jsx("div",{className:"mobile-canvas-el-title",children:I.title||"Untitled"}),I.content&&a.jsxs("div",{className:"mobile-canvas-el-content",children:[I.content.slice(0,120),I.content.length>120?"…":""]}),a.jsxs("div",{className:"mobile-canvas-el-comments",children:[a.jsx(On,{size:10}),n.comments.filter(k=>k.elementId===I.id).length]})]},I.id))]}),m&&a.jsxs("div",{className:"mobile-canvas-comments",children:[a.jsxs("div",{className:"mobile-canvas-comments-header",children:[a.jsxs("h4",{children:["Comments (",n.comments.length,")"]}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>h(!1),children:a.jsx(Zn,{size:16})})]}),a.jsxs("div",{className:"mobile-canvas-comment-list",children:[n.comments.length===0&&a.jsx("p",{className:"mobile-empty-inline",children:"No comments yet."}),n.comments.map(I=>a.jsxs("div",{className:"mobile-canvas-comment",children:[a.jsxs("div",{className:"mobile-canvas-comment-head",children:[a.jsx("span",{className:"mono",children:I.author}),a.jsx("span",{className:"muted",children:Sr(I.created)})]}),a.jsx("div",{className:"mobile-canvas-comment-text",children:I.text})]},I.id))]}),a.jsxs("div",{className:"mobile-canvas-comment-input",children:[a.jsx("textarea",{className:"mobile-input",rows:2,placeholder:"Add a comment…",value:g,onChange:I=>v(I.target.value)}),a.jsx("button",{type:"button",className:"mobile-btn",disabled:!g.trim(),onClick:()=>{L(g.trim(),null)},children:"Post"})]})]}),c&&a.jsx(Dt,{open:!0,onClose:()=>f(null),title:`Edit ${c.title||c.type}`,actions:a.jsxs("div",{className:"mobile-task-detail-actions",children:[a.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-danger",onClick:()=>A(c.id),children:[a.jsx(_r,{size:14})," Delete"]}),a.jsxs("button",{type:"button",className:"mobile-btn",onClick:()=>y(!0),children:[a.jsx(On,{size:14})," Comment"]})]}),children:a.jsx(cC,{element:c,onSave:I=>E(c.id,I),onClose:()=>f(null)})}),a.jsx(dC,{open:p,onClose:()=>x(!1),onAdd:z}),a.jsx(Tn,{open:b,onClose:()=>y(!1),title:"Add Comment",actions:a.jsxs("button",{type:"button",className:"mobile-btn",style:{width:"100%"},disabled:!g.trim(),onClick:()=>{L(g.trim(),(c==null?void 0:c.id)||null),y(!1)},children:[a.jsx(On,{size:14})," Post"]}),children:a.jsx("textarea",{className:"mobile-input",rows:3,placeholder:"Your comment…",value:g,onChange:I=>v(I.target.value),autoFocus:!0})})]})}function cC({element:e,onSave:t,onClose:n}){const[r,i]=w.useState(e.type),[l,s]=w.useState(e.title||""),[o,u]=w.useState(e.content||""),[d,c]=w.useState(e.status||"open");return a.jsxs("form",{className:"mobile-task-form",onSubmit:f=>{f.preventDefault(),t({type:r,title:l,content:o,status:d}),n()},children:[a.jsx("label",{className:"mobile-field-label",children:"Type"}),a.jsx("select",{className:"mobile-input",value:r,onChange:f=>i(f.target.value),children:Ju.map(f=>a.jsx("option",{value:f.id,children:f.label},f.id))}),a.jsx("label",{className:"mobile-field-label",children:"Title"}),a.jsx("input",{className:"mobile-input",type:"text",value:l,onChange:f=>s(f.target.value)}),a.jsx("label",{className:"mobile-field-label",children:"Status"}),a.jsx("input",{className:"mobile-input",type:"text",value:d,onChange:f=>c(f.target.value),placeholder:"open / done / blocked"}),a.jsx("label",{className:"mobile-field-label",children:"Content (markdown)"}),a.jsx("textarea",{className:"mobile-input",rows:4,value:o,onChange:f=>u(f.target.value)}),a.jsx("button",{type:"submit",className:"mobile-btn",style:{width:"100%",marginTop:8},children:"Save"})]})}function dC({open:e,onClose:t,onAdd:n}){const[r,i]=w.useState("task"),[l,s]=w.useState(""),[o,u]=w.useState(""),d=c=>{c.preventDefault(),l.trim()&&(n(r,l.trim(),o.trim()),s(""),u(""))};return a.jsx(Tn,{open:e,onClose:t,title:"Add Element",actions:a.jsxs("button",{type:"submit",form:"add-el-form",className:"mobile-btn",style:{width:"100%"},children:[a.jsx(xt,{size:14})," Add"]}),children:a.jsxs("form",{id:"add-el-form",onSubmit:d,className:"mobile-task-form",children:[a.jsx("label",{className:"mobile-field-label",children:"Type"}),a.jsx("select",{className:"mobile-input",value:r,onChange:c=>i(c.target.value),children:Ju.map(c=>a.jsx("option",{value:c.id,children:c.label},c.id))}),a.jsx("label",{className:"mobile-field-label",children:"Title *"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:"Element title",value:l,onChange:c=>s(c.target.value),autoFocus:!0,required:!0}),a.jsx("label",{className:"mobile-field-label",children:"Content (markdown)"}),a.jsx("textarea",{className:"mobile-input",rows:3,placeholder:"Description…",value:o,onChange:c=>u(c.target.value)})]})})}function fC({snapshot:e,onBack:t,onOpenArtifact:n}){const[r,i]=w.useState(e.artifacts||[]),[l,s]=w.useState(!e.artifacts),[o,u]=w.useState(""),[d,c]=w.useState(!1),[f,m]=w.useState(""),[h,p]=w.useState(""),x=async()=>{try{const g=await q.get("/artifacts");i(g.artifacts||[])}catch{}finally{s(!1)}},b=async()=>{if(f.trim())try{const g=await q.post("/artifacts",{slug:f.trim(),title:h.trim()||void 0});c(!1),m(""),p(""),n(g.slug)}catch{}},y=o.trim()?r.filter(g=>(g.title||g.slug||"").toLowerCase().includes(o.toLowerCase())):r;return a.jsxs("div",{className:"mobile-view",children:[a.jsxs("div",{className:"mobile-tasks-toolbar",children:[a.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search artifacts…",value:o,onChange:g=>u(g.target.value),style:{flex:1}}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>x(),"aria-label":"Refresh",children:a.jsx(_t,{size:16})})]}),a.jsx("div",{style:{marginBottom:12},children:a.jsxs("button",{type:"button",className:"mobile-btn",style:{width:"100%"},onClick:()=>c(!0),children:[a.jsx(xt,{size:14})," New Artifact"]})}),l?a.jsx("div",{className:"mobile-loading",children:a.jsx("p",{children:"Loading…"})}):y.length===0?a.jsxs("div",{className:"mobile-empty",children:[a.jsx(qn,{size:40}),a.jsx("p",{children:"No artifacts yet."})]}):a.jsx("div",{className:"mobile-card-list",children:y.map(g=>a.jsxs("button",{type:"button",className:"mobile-list-item mobile-list-item-interactive",onClick:()=>n(g.slug),children:[a.jsx("div",{className:"mobile-list-icon",children:a.jsx(qn,{size:16})}),a.jsxs("div",{className:"mobile-list-content",children:[a.jsx("span",{className:"mobile-list-title",children:g.title||g.slug}),a.jsxs("span",{className:"mobile-list-meta",children:[g.status," · ",g.source,g.elementCount!=null?` · ${g.elementCount} elements`:"",g.commentCount!=null?` · ${g.commentCount} comments`:""]})]}),a.jsx("span",{className:"mobile-list-badge","data-status":g.status,children:g.status})]},g.slug))}),a.jsx(Tn,{open:d,onClose:()=>c(!1),title:"New Artifact",actions:a.jsxs("button",{type:"submit",form:"new-plan-form",className:"mobile-btn",style:{width:"100%"},children:[a.jsx(xt,{size:14})," Create"]}),children:a.jsxs("form",{id:"new-plan-form",onSubmit:g=>{g.preventDefault(),b()},className:"mobile-task-form",children:[a.jsx("label",{className:"mobile-field-label",children:"Slug *"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:"my-plan",pattern:"[a-z0-9][a-z0-9-]{0,63}",value:f,onChange:g=>m(g.target.value),autoFocus:!0,required:!0}),a.jsx("label",{className:"mobile-field-label",children:"Title (optional)"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:"My Artifact",value:h,onChange:g=>p(g.target.value)})]})})]})}const hC=["cron","interval","once"],mC=["command","agent","webhook"],xf=["UTC","America/New_York","America/Los_Angeles","Europe/London","Europe/Berlin","Asia/Tokyo"],cg=Array.from({length:24},(e,t)=>({value:t,label:t===0?"12 AM":t<12?`${t} AM`:t===12?"12 PM":`${t-12} PM`})),pC=Array.from({length:12},(e,t)=>t*5),dg=[{value:"*",label:"Every day"},{value:"0",label:"Sun"},{value:"1",label:"Mon"},{value:"2",label:"Tue"},{value:"3",label:"Wed"},{value:"4",label:"Thu"},{value:"5",label:"Fri"},{value:"6",label:"Sat"}],gC=[{value:"s",label:"sec"},{value:"m",label:"min"},{value:"h",label:"hr"},{value:"d",label:"day"}];function yC({snapshot:e}){var b;const[t,n]=w.useState(e.schedules||[]),[r,i]=w.useState(!e.schedules),[l,s]=w.useState(""),[o,u]=w.useState(null),[d,c]=w.useState({open:!1}),f=async()=>{try{const y=await q.get("/schedules");n(y.schedules||[])}catch{}finally{i(!1)}};w.useEffect(()=>{e.schedules?(n(e.schedules),i(!1)):f()},[e.schedules]);const m=async(y,g)=>{try{await q.patch(`/schedules/${encodeURIComponent(y)}`,{enabled:g}),n(v=>v.map(C=>C.id===y?{...C,enabled:g}:C)),(o==null?void 0:o.id)===y&&u(v=>v&&{...v,enabled:g})}catch{}},h=async y=>{if(confirm("Delete this schedule?"))try{await q.del(`/schedules/${encodeURIComponent(y)}`),n(g=>g.filter(v=>v.id!==y)),(o==null?void 0:o.id)===y&&u(null)}catch{}},p=async y=>{try{await q.post(`/schedules/${encodeURIComponent(y)}/trigger`)}catch{}},x=l.trim()?t.filter(y=>y.name.toLowerCase().includes(l.toLowerCase())):t;return a.jsxs("div",{className:"mobile-view",children:[a.jsxs("div",{className:"mobile-tasks-toolbar",children:[a.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search schedules…",value:l,onChange:y=>s(y.target.value),style:{flex:1}}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>f(),"aria-label":"Refresh",children:a.jsx(_t,{size:16})}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>c({open:!0}),"aria-label":"New schedule",children:a.jsx(xt,{size:16})})]}),r?a.jsx("div",{className:"mobile-loading",children:a.jsx("p",{children:"Loading…"})}):x.length===0?a.jsxs("div",{className:"mobile-empty",children:[a.jsx(va,{size:40}),a.jsx("p",{children:"No schedules found."})]}):a.jsx("div",{className:"mobile-card-list",children:x.map(y=>a.jsxs("button",{type:"button",className:"mobile-list-item mobile-list-item-interactive",onClick:()=>u(y),children:[a.jsx("div",{className:"mobile-list-icon",children:a.jsx(va,{size:16})}),a.jsxs("div",{className:"mobile-list-content",children:[a.jsx("span",{className:"mobile-list-title",children:y.name}),a.jsxs("span",{className:"mobile-list-meta",children:[wf(y)," ·"," ",y.nextRun?`next ${kf(y.nextRun,y.timezone)}`:"no next run"]})]}),a.jsx("span",{className:`mobile-list-badge ${y.enabled?"badge-on":"badge-off"}`,children:y.enabled?"on":"off"})]},y.id))}),o&&a.jsx(Dt,{open:!0,onClose:()=>u(null),title:o.name,actions:a.jsxs("div",{className:"mobile-task-detail-actions",children:[a.jsxs("button",{type:"button",className:"mobile-btn",onClick:()=>{o&&p(o.id)},children:[a.jsx(Zl,{size:14})," Trigger now"]}),a.jsx("button",{type:"button",className:`mobile-btn ${o.enabled?"mobile-btn-secondary":""}`,onClick:()=>{o&&m(o.id,!o.enabled)},children:o.enabled?"Disable":"Enable"}),a.jsxs("button",{type:"button",className:"mobile-btn",onClick:()=>{o&&(c({open:!0,initial:o}),u(null))},children:[a.jsx(Au,{size:14})," Edit"]}),a.jsx("button",{type:"button",className:"mobile-btn mobile-btn-danger",onClick:()=>{o&&h(o.id)},children:a.jsx(_r,{size:14})})]}),children:a.jsx("div",{className:"mobile-agent-detail",children:a.jsxs("div",{className:"mobile-agent-detail-meta",children:[a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Type"}),a.jsx("span",{children:o.type})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Schedule"}),a.jsx("span",{className:"mono",children:wf(o)||o.schedule})]}),o.timezone&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Timezone"}),a.jsx("span",{className:"mono",children:o.timezone})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Action"}),a.jsxs("span",{children:[o.action.type,": ",o.action.target]})]}),o.action.type==="agent"&&o.action.prompt&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Prompt"}),a.jsx("span",{style:{fontSize:12},children:o.action.prompt})]}),((b=o.budgetCheck)==null?void 0:b.skipIfBudgetLow)&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Budget gate"}),a.jsxs("span",{children:["skip if ≥ ",o.budgetCheck.maxConcurrent??6," concurrent"]})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Next run"}),a.jsx("span",{children:o.nextRun?kf(o.nextRun,o.timezone):"—"})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Last run"}),a.jsx("span",{children:o.lastRun?kC(o.lastRun):"—"})]}),o.lastResult&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Last result"}),a.jsx("span",{style:{fontSize:12},children:o.lastResult})]}),o.lastError&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Last error"}),a.jsx("span",{style:{fontSize:12},children:o.lastError})]})]})})}),a.jsx(vC,{open:d.open,initial:d.initial,onClose:()=>c({open:!1}),onSaved:()=>{c({open:!1}),f()}})]})}function vf(e){var r,i;if(!e)return{name:"",type:"cron",cronMinute:0,cronHour:13,cronDow:"0",intervalN:30,intervalUnit:"m",onceAt:"",timezone:"UTC",actionType:"agent",actionTarget:"",actionPrompt:"",skipIfBudgetLow:!1,maxConcurrent:6,enabled:!0};const t=e.type==="cron"?fg(e.schedule):null,n=e.type==="interval"?wC(e.schedule):null;return{name:e.name||"",type:e.type,cronMinute:(t==null?void 0:t.minute)??0,cronHour:(t==null?void 0:t.hour)??9,cronDow:(t==null?void 0:t.dow)??"*",intervalN:(n==null?void 0:n.n)??30,intervalUnit:(n==null?void 0:n.unit)??"m",onceAt:e.type==="once"?bC(e.schedule):"",timezone:e.timezone||"UTC",actionType:e.action.type,actionTarget:e.action.target||"",actionPrompt:e.action.prompt||"",skipIfBudgetLow:!!((r=e.budgetCheck)!=null&&r.skipIfBudgetLow),maxConcurrent:Number.isFinite((i=e.budgetCheck)==null?void 0:i.maxConcurrent)?e.budgetCheck.maxConcurrent:6,enabled:e.enabled!==!1}}function xC(e){if(e.type==="cron")return`${e.cronMinute} ${e.cronHour} * * ${e.cronDow}`;if(e.type==="interval")return`${e.intervalN}${e.intervalUnit}`;if(!e.onceAt)return"";try{return new Date(e.onceAt).toISOString()}catch{return e.onceAt}}function vC({open:e,initial:t,onClose:n,onSaved:r}){const[i,l]=w.useState(()=>vf(t)),[s,o]=w.useState(!1);w.useEffect(()=>{e&&l(vf(t))},[e,t]);const u=(c,f)=>{l(m=>({...m,[c]:f}))},d=async c=>{if(c.preventDefault(),!i.name.trim())return;const f=xC(i);if(f){o(!0);try{const m={name:i.name.trim(),type:i.type,schedule:f,timezone:i.timezone,action:{type:i.actionType,target:i.actionTarget.trim(),...i.actionType==="agent"&&i.actionPrompt.trim()?{prompt:i.actionPrompt.trim()}:{}},budgetCheck:{maxConcurrent:i.maxConcurrent,skipIfBudgetLow:i.skipIfBudgetLow},enabled:i.enabled};t?await q.put(`/schedules/${encodeURIComponent(t.id)}`,m):await q.post("/schedules",m),r()}catch{}finally{o(!1)}}};return a.jsx(Tn,{open:e,onClose:n,title:t?`Edit ${t.name}`:"New schedule",actions:a.jsxs("button",{type:"submit",form:"mobile-schedule-form",className:"mobile-btn",style:{width:"100%"},disabled:s,children:[a.jsx(xt,{size:14})," ",t?"Save":"Create"]}),children:a.jsxs("form",{id:"mobile-schedule-form",onSubmit:d,className:"mobile-task-form",children:[a.jsx("label",{className:"mobile-field-label",children:"Name *"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:"Weekly review",value:i.name,onChange:c=>u("name",c.target.value),autoFocus:!0,required:!0}),a.jsx("label",{className:"mobile-field-label",children:"Type"}),a.jsx("select",{className:"mobile-input",value:i.type,onChange:c=>u("type",c.target.value),children:hC.map(c=>a.jsx("option",{value:c,children:c},c))}),i.type==="cron"&&a.jsxs(a.Fragment,{children:[a.jsx("label",{className:"mobile-field-label",children:"Day of week"}),a.jsx("select",{className:"mobile-input",value:i.cronDow,onChange:c=>u("cronDow",c.target.value),children:dg.map(c=>a.jsx("option",{value:c.value,children:c.label},c.value))}),a.jsxs("div",{className:"mobile-form-row",children:[a.jsxs("div",{style:{flex:1},children:[a.jsx("label",{className:"mobile-field-label",children:"Hour"}),a.jsx("select",{className:"mobile-input",value:String(i.cronHour),onChange:c=>u("cronHour",parseInt(c.target.value,10)),children:cg.map(c=>a.jsx("option",{value:String(c.value),children:c.label},c.value))})]}),a.jsxs("div",{style:{flex:1},children:[a.jsx("label",{className:"mobile-field-label",children:"Minute"}),a.jsx("select",{className:"mobile-input",value:String(i.cronMinute),onChange:c=>u("cronMinute",parseInt(c.target.value,10)),children:pC.map(c=>a.jsx("option",{value:String(c),children:String(c).padStart(2,"0")},c))})]})]})]}),i.type==="interval"&&a.jsxs("div",{className:"mobile-form-row",children:[a.jsxs("div",{style:{flex:1},children:[a.jsx("label",{className:"mobile-field-label",children:"Every"}),a.jsx("input",{className:"mobile-input",type:"number",min:1,value:i.intervalN,onChange:c=>u("intervalN",parseInt(c.target.value,10)||1)})]}),a.jsxs("div",{style:{flex:1},children:[a.jsx("label",{className:"mobile-field-label",children:"Unit"}),a.jsx("select",{className:"mobile-input",value:i.intervalUnit,onChange:c=>u("intervalUnit",c.target.value),children:gC.map(c=>a.jsx("option",{value:c.value,children:c.label},c.value))})]})]}),i.type==="once"&&a.jsxs(a.Fragment,{children:[a.jsx("label",{className:"mobile-field-label",children:"Run at"}),a.jsx("input",{className:"mobile-input",type:"datetime-local",value:i.onceAt,onChange:c=>u("onceAt",c.target.value)})]}),a.jsx("label",{className:"mobile-field-label",children:"Timezone"}),a.jsx("select",{className:"mobile-input",value:xf.includes(i.timezone)?i.timezone:"UTC",onChange:c=>u("timezone",c.target.value),children:xf.map(c=>a.jsx("option",{value:c,children:c},c))}),a.jsx("label",{className:"mobile-field-label",children:"Action type"}),a.jsx("select",{className:"mobile-input",value:i.actionType,onChange:c=>u("actionType",c.target.value),children:mC.map(c=>a.jsx("option",{value:c,children:c},c))}),a.jsx("label",{className:"mobile-field-label",children:"Target"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:i.actionType==="webhook"?"https://...":i.actionType==="agent"?"agent or task ref":"echo hello",value:i.actionTarget,onChange:c=>u("actionTarget",c.target.value)}),i.actionType==="agent"&&a.jsxs(a.Fragment,{children:[a.jsx("label",{className:"mobile-field-label",children:"Prompt"}),a.jsx("textarea",{className:"mobile-input",rows:3,placeholder:"What should the agent do?",value:i.actionPrompt,onChange:c=>u("actionPrompt",c.target.value)})]}),a.jsxs("fieldset",{className:"mobile-budget-card",children:[a.jsx("legend",{children:"Budget pre-flight"}),a.jsxs("label",{className:"mobile-checkbox-row",children:[a.jsx("input",{type:"checkbox",checked:i.skipIfBudgetLow,onChange:c=>u("skipIfBudgetLow",c.target.checked)}),a.jsx("span",{children:"Skip if too many bg tasks are running"})]}),a.jsx("label",{className:"mobile-field-label",children:"Cap"}),a.jsx("input",{className:"mobile-input",type:"number",min:1,max:64,value:i.maxConcurrent,onChange:c=>u("maxConcurrent",parseInt(c.target.value,10)||6),disabled:!i.skipIfBudgetLow})]}),a.jsxs("label",{className:"mobile-checkbox-row",children:[a.jsx("input",{type:"checkbox",checked:i.enabled,onChange:c=>u("enabled",c.target.checked)}),a.jsx("span",{children:"Enabled"})]})]})})}function kC(e){const t=Date.now()-new Date(e).getTime();return t<6e4?"just now":t<36e5?`${Math.floor(t/6e4)}m ago`:t<864e5?`${Math.floor(t/36e5)}h ago`:new Date(e).toLocaleDateString()}function kf(e,t){try{return new Date(e).toLocaleString(void 0,{timeZone:t||void 0,weekday:"short",hour:"numeric",minute:"2-digit",month:"short",day:"numeric"})}catch{return new Date(e).toLocaleString()}}function fg(e){if(typeof e!="string")return null;const t=e.trim().split(/\s+/);if(t.length!==5)return null;const[n,r,,,i]=t,l=parseInt(n,10),s=parseInt(r,10);return!Number.isFinite(l)||!Number.isFinite(s)||n!==String(l)||r!==String(s)?null:{minute:l,hour:s,dow:i==="*"?"*":Number.isFinite(parseInt(i,10))?i:"*"}}function wC(e){if(typeof e!="string")return null;const t=/^(\d+)([smhd])$/i.exec(e.trim());return t?{n:parseInt(t[1],10),unit:t[2].toLowerCase()}:null}function bC(e){if(!e)return"";try{const t=new Date(e);if(Number.isNaN(t.getTime()))return"";const n=r=>String(r).padStart(2,"0");return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}T${n(t.getHours())}:${n(t.getMinutes())}`}catch{return""}}function wf(e){var l,s;if(e.type!=="cron")return e.schedule;const t=fg(e.schedule);if(!t)return e.schedule;const n=((l=dg.find(o=>o.value===t.dow))==null?void 0:l.label)||t.dow,r=((s=cg.find(o=>o.value===t.hour))==null?void 0:s.label)||`${t.hour}`,i=String(t.minute).padStart(2,"0");return n==="Every day"?`Every day ${r} :${i}`:`Every ${n} ${r} :${i}`}const SC=["all","tasks","agents","artifacts","projects","settings"],CC={tasks:es,agents:Dr,plans:qn,projects:Pu,settings:Pr};function jC({open:e,onClose:t,onNavigate:n}){const[r,i]=w.useState(""),[l,s]=w.useState("all"),[o,u]=w.useState([]),[d,c]=w.useState(!1),f=w.useRef(null);w.useEffect(()=>{e&&(i(""),u([]),requestAnimationFrame(()=>{var p;return(p=f.current)==null?void 0:p.focus()}))},[e]),w.useEffect(()=>{if(!r.trim()){u([]);return}const p=setTimeout(async()=>{c(!0);try{const x=await q.get(`/search?q=${encodeURIComponent(r)}&scope=${l}`);u(x.results||[])}catch{u([])}finally{c(!1)}},250);return()=>clearTimeout(p)},[r,l]);const m=p=>{const x=p.item,b=x.id||x.slug||x.name||"";n(p.type,b),t()},h=o.reduce((p,x)=>(p[x.type]||(p[x.type]=[]),p[x.type].push(x),p),{});return a.jsx(Tn,{open:e,onClose:t,title:"Search",children:a.jsxs("div",{className:"mobile-search-container",children:[a.jsxs("div",{className:"mobile-search-input-row",children:[a.jsx(hd,{size:16,style:{color:"var(--text-muted)",flexShrink:0}}),a.jsx("input",{ref:f,className:"mobile-search-field",type:"text",placeholder:"Search…",value:r,onChange:p=>i(p.target.value),enterKeyHint:"search",onKeyDown:p=>{p.key==="Escape"&&t(),p.key==="Enter"&&o.length>0&&m(o[0])}}),r&&a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>i(""),"aria-label":"Clear",children:a.jsx(Zn,{size:16})})]}),a.jsx("div",{className:"mobile-search-scopes",children:SC.map(p=>a.jsx("button",{type:"button",className:`mobile-scope-chip ${l===p?"active":""}`,onClick:()=>s(p),children:p==="all"?"All":p.charAt(0).toUpperCase()+p.slice(1)},p))}),a.jsxs("div",{className:"mobile-search-results",children:[d&&a.jsx("div",{className:"mobile-search-loading",children:"Searching…"}),!d&&r&&o.length===0&&a.jsxs("div",{className:"mobile-empty",children:[a.jsx(hd,{size:32}),a.jsx("p",{children:"No results found"})]}),!d&&!r&&a.jsx("div",{className:"mobile-empty",children:a.jsx("p",{children:"Type to search across tasks, agents, plans, and more."})}),Object.entries(h).map(([p,x])=>{const b=CC[p]||qn;return a.jsxs("div",{className:"mobile-search-group",children:[a.jsxs("h4",{className:"mobile-search-group-title",children:[a.jsx(b,{size:12})," ",p.charAt(0).toUpperCase()+p.slice(1)," (",x.length,")"]}),x.map((y,g)=>{const v=y.item;return a.jsxs("button",{type:"button",className:"mobile-search-result-item",onClick:()=>m(y),children:[a.jsx("span",{className:"mobile-search-result-title",children:v.title||v.name||v.slug||"(unnamed)"}),v.description&&a.jsx("span",{className:"mobile-search-result-meta",children:v.description.slice(0,80)})]},g)})]},p)})]})]})})}const NC=[{id:"dark",label:"Dark",Icon:ix},{id:"light",label:"Light",Icon:fx},{id:"system",label:"System",Icon:rx}],EC=[{name:"Purple",accent:"#8b5cf6"},{name:"Blue",accent:"#3b82f6"},{name:"Green",accent:"#10b981"},{name:"Orange",accent:"#f97316"},{name:"Red",accent:"#ef4444"},{name:"Pink",accent:"#ec4899"},{name:"Cyan",accent:"#06b6d4"},{name:"Mono",accent:"#6b7280"}];function TC(e){if(e<=0)return"expired";const t=Math.floor(e/1e3),n=Math.floor(t/60),r=t%60;return`${n}:${String(r).padStart(2,"0")}`}function IC({settings:e,snapshot:t,onRefresh:n}){var z,E,A,L,I,k;const[r,i]=w.useState(e),[l,s]=w.useState(!1),[o,u]=w.useState(!1),[d,c]=w.useState(null),[f,m]=w.useState(!1),[h,p]=w.useState(Date.now());w.useEffect(()=>{i(e),s(!1),e.theme&&ui(e.theme)},[e]),w.useEffect(()=>{if(!d)return;const j=setInterval(()=>p(Date.now()),1e3);return()=>clearInterval(j)},[d]);const x=j=>{i(P=>{const B={...P,theme:{...P.theme,...j}};return ts(B.theme),ui(B.theme),B}),s(!0)},b=(j,P)=>{i(B=>({...B,[j]:P})),s(!0)},y=async()=>{u(!0);try{const j=await q.put("/settings",r);i(j.data),s(!1),ts(j.data.theme),ui(j.data.theme),n()}catch{}finally{u(!1)}},g=async()=>{m(!0);try{const j=await q.post("/pair/start");c(j)}catch{}finally{m(!1)}},v=d?d.expiresAt-h:0,C=d!=null&&v<=0;return a.jsxs("div",{className:"mobile-view",children:[l&&a.jsxs("div",{className:"mobile-settings-save-bar",children:[a.jsx("span",{children:"Unsaved changes"}),a.jsxs("button",{type:"button",className:"mobile-btn",disabled:o,onClick:y,children:[a.jsx(Fm,{size:14})," ",o?"Saving…":"Save"]})]}),a.jsxs("section",{className:"mobile-section",children:[a.jsx("h3",{className:"mobile-section-title",children:"Appearance"}),a.jsxs("div",{className:"mobile-card",children:[a.jsxs("div",{className:"mobile-setting-row",children:[a.jsx("span",{className:"mobile-setting-label",children:"Theme"}),a.jsx("div",{className:"mobile-theme-btns",children:NC.map(({id:j,label:P,Icon:B})=>a.jsxs("button",{type:"button",className:`mobile-theme-btn ${r.theme.mode===j?"active":""}`,onClick:()=>x({mode:j}),children:[a.jsx(B,{size:14})," ",P]},j))})]}),a.jsxs("div",{className:"mobile-setting-row",style:{flexDirection:"column",alignItems:"flex-start",gap:8},children:[a.jsx("span",{className:"mobile-setting-label",children:"Accent color"}),a.jsx("div",{className:"mobile-accent-swatches",children:EC.map(j=>a.jsx("button",{type:"button",className:`mobile-accent-swatch ${r.theme.accent===j.accent?"active":""}`,style:{background:j.accent},onClick:()=>x({accent:j.accent}),title:j.name},j.name))})]}),a.jsxs("div",{className:"mobile-setting-row",style:{flexDirection:"column",alignItems:"flex-start",gap:8},children:[a.jsxs("span",{className:"mobile-setting-label",children:["Font size: ",r.theme.fontSize,"px"]}),a.jsx("input",{type:"range",min:12,max:20,value:r.theme.fontSize,onChange:j=>x({fontSize:Number(j.target.value)}),style:{width:"100%"}})]}),a.jsxs("div",{className:"mobile-setting-row",children:[a.jsx("span",{className:"mobile-setting-label",children:"Compact mode"}),a.jsxs("label",{className:"mobile-toggle",children:[a.jsx("input",{type:"checkbox",checked:r.theme.compactMode,onChange:j=>x({compactMode:j.target.checked})}),a.jsx("span",{className:"mobile-toggle-slider"})]})]}),a.jsxs("div",{className:"mobile-setting-row",children:[a.jsx("span",{className:"mobile-setting-label",children:"Animations"}),a.jsxs("label",{className:"mobile-toggle",children:[a.jsx("input",{type:"checkbox",checked:r.theme.animations,onChange:j=>x({animations:j.target.checked})}),a.jsx("span",{className:"mobile-toggle-slider"})]})]})]})]}),a.jsxs("section",{className:"mobile-section",children:[a.jsx("h3",{className:"mobile-section-title",children:"Chat Defaults"}),a.jsxs("div",{className:"mobile-card",children:[a.jsx("label",{className:"mobile-field-label",children:"Default Agent"}),a.jsx("select",{className:"mobile-input",value:r.defaultAgent||"odin",onChange:j=>b("defaultAgent",j.target.value),children:((t==null?void 0:t.agents)||[]).map(j=>a.jsxs("option",{value:j.name,children:["@",j.name]},j.name))}),a.jsx("label",{className:"mobile-field-label",style:{marginTop:8},children:"Default Model"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:"(auto)",value:r.defaultModel||"",onChange:j=>b("defaultModel",j.target.value)})]})]}),a.jsxs("section",{className:"mobile-section",children:[a.jsx("h3",{className:"mobile-section-title",children:"Notifications"}),a.jsxs("div",{className:"mobile-card",children:[a.jsxs("div",{className:"mobile-setting-row",children:[a.jsx("span",{className:"mobile-setting-label",children:"Agent completion"}),a.jsxs("label",{className:"mobile-toggle",children:[a.jsx("input",{type:"checkbox",checked:!!r.notifications.onAgentComplete,onChange:j=>{i(P=>({...P,notifications:{...P.notifications,onAgentComplete:j.target.checked}})),s(!0)}}),a.jsx("span",{className:"mobile-toggle-slider"})]})]}),a.jsxs("div",{className:"mobile-setting-row",children:[a.jsx("span",{className:"mobile-setting-label",children:"Plan approval"}),a.jsxs("label",{className:"mobile-toggle",children:[a.jsx("input",{type:"checkbox",checked:!!r.notifications.onPlanApproval,onChange:j=>{i(P=>({...P,notifications:{...P.notifications,onPlanApproval:j.target.checked}})),s(!0)}}),a.jsx("span",{className:"mobile-toggle-slider"})]})]})]})]}),a.jsxs("section",{className:"mobile-section",children:[a.jsx("h3",{className:"mobile-section-title",children:"Agent Behavior"}),a.jsxs("div",{className:"mobile-card",children:[a.jsx("label",{className:"mobile-field-label",children:"Max parallel agents"}),a.jsx("input",{className:"mobile-input",type:"number",inputMode:"numeric",min:1,max:20,value:((z=r.agents)==null?void 0:z.maxParallel)??6,onChange:j=>{i(P=>({...P,agents:{...P.agents,maxParallel:Math.max(1,Math.min(20,parseInt(j.target.value,10)||6))}})),s(!0)}}),a.jsx("label",{className:"mobile-field-label",style:{marginTop:8},children:"Stuck threshold (ms)"}),a.jsx("input",{className:"mobile-input",type:"number",inputMode:"numeric",min:6e4,max:36e5,step:6e4,value:((E=r.agents)==null?void 0:E.stuckThresholdMs)??6e5,onChange:j=>{i(P=>({...P,agents:{...P.agents,stuckThresholdMs:Math.max(6e4,parseInt(j.target.value,10)||6e5)}})),s(!0)}}),a.jsxs("div",{className:"mobile-setting-row",style:{marginTop:8},children:[a.jsx("span",{className:"mobile-setting-label",children:"Auto-restart stuck agents"}),a.jsxs("label",{className:"mobile-toggle",children:[a.jsx("input",{type:"checkbox",checked:!!((A=r.agents)!=null&&A.autoRestart),onChange:j=>{i(P=>({...P,agents:{...P.agents,autoRestart:j.target.checked}})),s(!0)}}),a.jsx("span",{className:"mobile-toggle-slider"})]})]})]})]}),a.jsxs("section",{className:"mobile-section",children:[a.jsx("h3",{className:"mobile-section-title",children:"Tailscale Serve"}),a.jsx("div",{className:"mobile-card",children:a.jsxs("p",{className:"muted",style:{fontSize:13},children:["Use ",a.jsx("code",{children:"bizar service"})," commands in the terminal to configure Tailscale serve."]})})]}),a.jsxs("section",{className:"mobile-section",children:[a.jsxs("h3",{className:"mobile-section-title",children:[a.jsx(dx,{size:14})," Companion App"]}),a.jsxs("div",{className:"mobile-card",children:[!d&&a.jsxs("button",{type:"button",className:"mobile-btn",onClick:g,disabled:f,style:{width:"100%"},children:[a.jsx(ox,{size:14})," ",f?"Generating…":"Generate QR Code"]}),d&&!C&&a.jsxs("div",{style:{textAlign:"center"},children:[a.jsx("div",{style:{background:"#fff",padding:12,borderRadius:12,display:"inline-block"},children:a.jsx(ag,{value:d.qrPayload,size:180,level:"M"})}),a.jsxs("div",{style:{marginTop:8,fontSize:12},children:["Expires in ",a.jsx("strong",{children:TC(v)})]}),a.jsx("div",{className:"mono",style:{fontSize:10,wordBreak:"break-all",marginTop:4},children:d.publicUrl})]}),d&&C&&a.jsxs("button",{type:"button",className:"mobile-btn",onClick:g,style:{width:"100%"},children:[a.jsx(_t,{size:14})," Generate new QR"]})]})]}),a.jsxs("section",{className:"mobile-section",children:[a.jsx("h3",{className:"mobile-section-title",children:"About"}),a.jsxs("div",{className:"mobile-card",children:[a.jsxs("div",{className:"mobile-setting-row",children:[a.jsx("span",{className:"mobile-setting-label",children:"Version"}),a.jsx("span",{className:"mobile-setting-value mono",children:((L=r.about)==null?void 0:L.version)||"—"})]}),a.jsxs("div",{className:"mobile-setting-row",children:[a.jsx("span",{className:"mobile-setting-label",children:"Agents"}),a.jsx("span",{className:"mobile-setting-value",children:((I=t==null?void 0:t.agents)==null?void 0:I.length)||0})]}),a.jsxs("div",{className:"mobile-setting-row",children:[a.jsx("span",{className:"mobile-setting-label",children:"Tasks"}),a.jsx("span",{className:"mobile-setting-value",children:((k=t==null?void 0:t.tasks)==null?void 0:k.length)||0})]}),a.jsxs("div",{className:"mobile-setting-row",children:[a.jsx("span",{className:"mobile-setting-label",children:"Plans"}),a.jsx("span",{className:"mobile-setting-value",children:(t==null?void 0:t.artifacts.length)||0})]})]})]}),a.jsx("div",{className:"mobile-view-footer",children:a.jsx("a",{href:"/?desktop=1",className:"mobile-btn mobile-btn-secondary",children:"Switch to Desktop"})})]})}const zC=["languages","framework","design","testing","devops","data","security","integration"];function PC({snapshot:e,onBack:t}){const[n,r]=w.useState([]),[i,l]=w.useState(!0),[s,o]=w.useState(""),[u,d]=w.useState(""),[c,f]=w.useState(null),m=async()=>{try{const x=await q.get("/skills");r(x.skills||[])}catch{}finally{l(!1)}};w.useEffect(()=>{m()},[]);const h=async(x,b)=>{try{await q.patch(`/skills/${encodeURIComponent(x)}`,{enabled:b}),r(y=>y.map(g=>g.id===x?{...g,enabled:b}:g)),(c==null?void 0:c.id)===x&&f(y=>y&&{...y,enabled:b})}catch{}},p=n.filter(x=>{if(u&&x.category!==u)return!1;if(s){const b=s.toLowerCase();return x.name.toLowerCase().includes(b)||x.description.toLowerCase().includes(b)}return!0});return a.jsxs("div",{className:"mobile-view",children:[a.jsxs("div",{className:"mobile-tasks-toolbar",children:[a.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search skills…",value:s,onChange:x=>o(x.target.value),style:{flex:1}}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>m(),"aria-label":"Refresh",children:a.jsx(_t,{size:16})})]}),a.jsxs("div",{className:"mobile-search-scopes",children:[a.jsx("button",{type:"button",className:`mobile-scope-chip ${u?"":"active"}`,onClick:()=>d(""),children:"All"}),zC.map(x=>a.jsx("button",{type:"button",className:`mobile-scope-chip ${u===x?"active":""}`,onClick:()=>d(x),children:x},x))]}),i?a.jsx("div",{className:"mobile-loading",children:a.jsx("p",{children:"Loading…"})}):p.length===0?a.jsxs("div",{className:"mobile-empty",children:[a.jsx(Jl,{size:40}),a.jsx("p",{children:"No skills found."})]}):a.jsx("div",{className:"mobile-card-list",children:p.map(x=>a.jsxs("button",{type:"button",className:"mobile-list-item mobile-list-item-interactive",onClick:()=>f(x),children:[a.jsx("div",{className:"mobile-list-icon",children:a.jsx(Jl,{size:16})}),a.jsxs("div",{className:"mobile-list-content",children:[a.jsx("span",{className:"mobile-list-title",children:x.name}),a.jsxs("span",{className:"mobile-list-meta",children:[x.category," · v",x.version]})]}),a.jsx("span",{className:`mobile-list-badge ${x.enabled?"badge-on":"badge-off"}`,children:x.enabled?"on":"off"})]},x.id))}),c&&a.jsx(Dt,{open:!0,onClose:()=>f(null),title:c.name,actions:a.jsxs("button",{type:"button",className:`mobile-btn ${c.enabled?"mobile-btn-secondary":""}`,style:{width:"100%"},onClick:()=>{c&&h(c.id,!c.enabled)},children:[a.jsx(Om,{size:14})," ",c.enabled?"Disable":"Enable"]}),children:a.jsxs("div",{className:"mobile-agent-detail",children:[a.jsx("p",{className:"mobile-agent-detail-desc",children:c.description||"No description."}),a.jsxs("div",{className:"mobile-agent-detail-meta",children:[a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Category"}),a.jsx("span",{children:c.category})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Version"}),a.jsx("span",{className:"mono",children:c.version})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Source"}),a.jsx("span",{children:c.source})]}),c.tags.length>0&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Tags"}),a.jsx("span",{children:c.tags.join(", ")})]})]})]})})]})}const AC=["queued","doing","blocked","done"],dl={queued:"Queued",doing:"Doing",blocked:"Blocked",done:"Done"},bf={queued:"doing",doing:"done",blocked:"queued",done:"queued"};function MC(e){const t=e.metadata??{};return!!(t.sessionId||t.bgInstanceId)}function LC(e){var n;const t=e.metadata??{};return!!((n=t.artifactIds)!=null&&n.length||t.artifactId)}function Sf({snapshot:e,onRefresh:t,selectedTaskId:n,onCloseDetail:r,onOpenChat:i,onOpenArtifact:l}){var oe,Ne;const[s,o]=w.useState(e.tasks||[]),[u,d]=w.useState(!e.tasks),[c,f]=w.useState(""),[m,h]=w.useState("queued"),[p,x]=w.useState(null),[b,y]=w.useState(!1),[g,v]=w.useState(null),[C,z]=w.useState([]),[E,A]=w.useState(""),[L,I]=w.useState(null),[k,j]=w.useState(!1),[P,B]=w.useState(""),[O,W]=w.useState("updated");w.useEffect(()=>{var H;if(e.tasks&&(o(e.tasks),d(!1)),n){const te=(H=e.tasks)==null?void 0:H.find(re=>re.id===n);te&&x(te)}},[e.tasks,n]),w.useEffect(()=>{if(n){const H=s.find(te=>te.id===n);H&&x(H)}},[n,s]);const de=async()=>{try{const H=await q.get("/tasks");o(Array.isArray(H)?H:[])}catch{}finally{d(!1)}},ee=async(H,te)=>{o(re=>re.map(Se=>Se.id===H?{...Se,status:te}:Se)),(p==null?void 0:p.id)===H&&x(re=>re&&{...re,status:te});try{await q.patch(`/tasks/${encodeURIComponent(H)}/status`,{status:te})}catch{await de()}},R=async H=>{if(confirm("Delete this task?"))try{await q.del(`/tasks/${encodeURIComponent(H)}`),o(te=>te.filter(re=>re.id!==H)),(p==null?void 0:p.id)===H&&x(null)}catch{await de()}},V=async H=>{try{await q.post(`/tasks/${encodeURIComponent(H)}/archive`),o(te=>te.filter(re=>re.id!==H)),(p==null?void 0:p.id)===H&&x(null)}catch{}},Y=[...s.filter(H=>{var te,re;if(c.trim()){const Se=c.toLowerCase();if(!(H.title||"").toLowerCase().includes(Se)&&!(H.description||"").toLowerCase().includes(Se))return!1}if(P.trim()){const Se=P==="mine"?((re=(te=e.settings)==null?void 0:te.data)==null?void 0:re.defaultAgent)||RC(e):P.replace(/^@/,"");if((H.assignee||"").toLowerCase()!==Se.toLowerCase())return!1}return!0})].sort((H,te)=>{switch(O){case"priority":{const re={high:0,normal:1,low:2};return(re[H.priority]??1)-(re[te.priority]??1)}case"created":return new Date(te.createdAt).getTime()-new Date(H.createdAt).getTime();case"updated":default:return new Date(te.updatedAt).getTime()-new Date(H.updatedAt).getTime()}}),ie=Y.filter(H=>H.status===m),N=e.agents||[],ge=async(H,te,re,Se)=>{try{const Ot=await q.post("/tasks",{title:H,description:te,assignee:re||null,priority:Se});o(ln=>[Ot,...ln]),y(!1)}catch{}},Le=async H=>{j(!0),A(""),I(null),v(H);try{const re=((await q.get(`/tasks/${encodeURIComponent(H)}/artifacts`)).artifacts||[]).map(Se=>Se.id);if(z(re),re.length>0){const[Se,Ot]=await Promise.all([q.get(`/artifacts/${encodeURIComponent(re[0])}`),fetch(q.urlWithToken(`/artifacts/${encodeURIComponent(re[0])}/content`)).then(ln=>ln.text())]);I(Se),A(Ot)}}catch{}finally{j(!1)}};return u?a.jsx("div",{className:"mobile-loading",children:a.jsx("p",{children:"Loading…"})}):a.jsxs("div",{className:"mobile-view mobile-view-tasks",children:[a.jsxs("div",{className:"mobile-tasks-toolbar",children:[a.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search tasks…",value:c,onChange:H=>f(H.target.value),style:{flex:1}}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>de(),"aria-label":"Refresh",children:a.jsx(_t,{size:16})})]}),a.jsxs("div",{className:"mobile-tasks-filters",children:[a.jsxs("select",{className:"mobile-filter-select",value:P,onChange:H=>B(H.target.value),children:[a.jsx("option",{value:"",children:"All"}),a.jsx("option",{value:"mine",children:"Mine"}),N.map(H=>a.jsxs("option",{value:`@${H.name}`,children:["@",H.name]},H.name))]}),a.jsxs("select",{className:"mobile-filter-select",value:O,onChange:H=>W(H.target.value),children:[a.jsx("option",{value:"updated",children:"Updated"}),a.jsx("option",{value:"created",children:"Created"}),a.jsx("option",{value:"priority",children:"Priority"})]})]}),a.jsx("div",{className:"mobile-kanban-tabs",children:AC.map(H=>{const te=Y.filter(re=>re.status===H).length;return a.jsxs("button",{type:"button",className:`mobile-kanban-tab ${m===H?"active":""}`,onClick:()=>h(H),children:[dl[H]," (",te,")"]},H)})}),a.jsxs("div",{className:"mobile-card-list",children:[ie.length===0&&a.jsxs("div",{className:"mobile-empty mobile-empty-compact",children:[a.jsxs("p",{children:["No ",dl[m].toLowerCase()," tasks."]}),a.jsx("p",{className:"muted",children:"Create one or switch columns."})]}),ie.map(H=>{var te;return a.jsxs("button",{type:"button",className:"mobile-task-card",onClick:()=>x(H),children:[a.jsx("div",{className:"priority-dot",style:{background:gx[H.priority]||"var(--info)"}}),a.jsxs("div",{className:"task-content",children:[a.jsx("div",{className:"task-title",children:H.title}),a.jsxs("div",{className:"task-meta",children:[H.assignee?`@${H.assignee}`:"unassigned"," · ",Sr(H.updatedAt||H.createdAt),(te=H.dependencies)!=null&&te.length?` · ${H.dependencies.length} deps`:""]})]})]},H.id)})]}),a.jsx("button",{type:"button",className:"mobile-fab",onClick:()=>y(!0),"aria-label":"Add task",children:a.jsx(xt,{size:24})}),a.jsx(Dt,{open:!!p,onClose:()=>{x(null),r==null||r()},title:"Task Detail",actions:p&&a.jsxs("div",{className:"mobile-task-detail-actions",children:[p.status!=="done"&&a.jsxs("button",{type:"button",className:"mobile-btn",style:{flex:1},onClick:()=>{p&&ee(p.id,bf[p.status])},children:["Move to ",dl[bf[p.status]||"queued"]]}),a.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-secondary",onClick:()=>{p&&V(p.id)},children:[a.jsx(V1,{size:14})," Archive"]}),MC(p)&&a.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-secondary",onClick:()=>{i==null||i(p.id)},children:[a.jsx(On,{size:14})," Chat"]}),LC(p)&&a.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-secondary",onClick:()=>{Le(p.id)},children:[a.jsx(qn,{size:14})," Artifact"]}),a.jsx("button",{type:"button",className:"mobile-btn mobile-btn-danger",onClick:()=>{p&&R(p.id)},children:a.jsx(_r,{size:14})})]}),children:p&&a.jsxs("div",{className:"mobile-task-detail",children:[a.jsxs("div",{className:"mobile-task-detail-header",children:[a.jsx("span",{className:`mobile-task-status-badge status-${p.status}`,children:dl[p.status]||p.status}),a.jsx("span",{className:`mobile-task-priority priority-${p.priority}`,children:p.priority})]}),a.jsx("h3",{className:"mobile-task-detail-title",children:p.title}),p.description&&a.jsx("p",{className:"mobile-task-detail-desc",children:p.description}),a.jsxs("div",{className:"mobile-task-detail-meta",children:[p.assignee&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Assignee"}),a.jsxs("span",{children:["@",p.assignee]})]}),p.dueDate&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Due"}),a.jsx("span",{children:new Date(p.dueDate).toLocaleDateString()})]}),p.timeSpent!=null&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Time spent"}),a.jsxs("span",{children:[Math.round(p.timeSpent/6e4),"min"]})]}),(oe=p.dependencies)!=null&&oe.length?a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Dependencies"}),a.jsx("span",{children:p.dependencies.length})]}):null,(Ne=p.comments)!=null&&Ne.length?a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Comments"}),a.jsx("span",{children:p.comments.length})]}):null,a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Created"}),a.jsx("span",{children:Sr(p.createdAt)})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Updated"}),a.jsx("span",{children:Sr(p.updatedAt)})]})]})]})}),a.jsx(DC,{open:b,onClose:()=>y(!1),onCreate:ge,agents:N}),a.jsx(Dt,{open:!!g,onClose:()=>{v(null),A(""),I(null)},title:(L==null?void 0:L.name)||"Artifact",actions:C.length>1?a.jsx("div",{className:"mobile-task-detail-actions",children:C.map((H,te)=>a.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-secondary",style:{flex:1},onClick:()=>{j(!0),Promise.all([q.get(`/artifacts/${encodeURIComponent(H)}`),fetch(q.urlWithToken(`/artifacts/${encodeURIComponent(H)}/content`)).then(re=>re.text())]).then(([re,Se])=>{I(re),A(Se),j(!1)}).catch(()=>j(!1))},children:["Artifact ",te+1]},H))}):null,children:a.jsx("div",{className:"mobile-artifact-viewer",children:k?a.jsx("div",{className:"mobile-loading",children:a.jsx("p",{children:"Loading artifact…"})}):E?a.jsx("iframe",{srcDoc:E,className:"mobile-artifact-iframe",sandbox:"allow-scripts allow-forms allow-popups allow-same-origin",title:(L==null?void 0:L.name)||"Artifact",loading:"lazy"}):a.jsxs("div",{className:"mobile-empty",children:[a.jsx(qn,{size:32}),a.jsx("p",{className:"muted",children:"No artifact content available."})]})})})]})}function RC(e){var t,n;return((n=(t=e.settings)==null?void 0:t.data)==null?void 0:n.defaultAgent)||"odin"}function DC({open:e,onClose:t,onCreate:n,agents:r}){const[i,l]=w.useState(""),[s,o]=w.useState(""),[u,d]=w.useState(""),[c,f]=w.useState("normal"),m=h=>{h.preventDefault(),i.trim()&&(n(i.trim(),s.trim(),u,c),l(""),o(""),d(""),f("normal"))};return a.jsx(Tn,{open:e,onClose:t,title:"New Task",actions:a.jsxs("button",{type:"submit",form:"new-task-form",className:"mobile-btn",style:{width:"100%"},children:[a.jsx(xt,{size:14})," Create Task"]}),children:a.jsxs("form",{id:"new-task-form",onSubmit:m,className:"mobile-task-form",children:[a.jsx("label",{className:"mobile-field-label",children:"Title *"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:"Task title",value:i,onChange:h=>l(h.target.value),autoFocus:!0,required:!0}),a.jsx("label",{className:"mobile-field-label",children:"Description"}),a.jsx("textarea",{className:"mobile-input",rows:3,placeholder:"Optional description",value:s,onChange:h=>o(h.target.value)}),a.jsx("label",{className:"mobile-field-label",children:"Assignee"}),a.jsxs("select",{className:"mobile-input",value:u,onChange:h=>d(h.target.value),children:[a.jsx("option",{value:"",children:"Unassigned"}),r.map(h=>a.jsxs("option",{value:h.name,children:["@",h.name]},h.name))]}),a.jsx("label",{className:"mobile-field-label",children:"Priority"}),a.jsxs("select",{className:"mobile-input",value:c,onChange:h=>f(h.target.value),children:[a.jsx("option",{value:"low",children:"Low"}),a.jsx("option",{value:"normal",children:"Normal"}),a.jsx("option",{value:"high",children:"High"})]})]})})}const _C=[{id:"activity",label:"Activity",icon:xa},{id:"chat",label:"Chat",icon:On},{id:"tasks",label:"Tasks",icon:es},{id:"settings",label:"Settings",icon:Bm},{id:"more",label:"More",icon:J1}];function OC(e){const t=e.meta??{},n=typeof t.taskId=="string"?t.taskId:null,r=typeof t.slug=="string"?t.slug:null,i=typeof t.agent=="string"?t.agent:null;if(n)return{id:"task-detail",taskId:n};if(r)return{id:"artifacts?-detail",slug:r};if(i)return{id:"agent-detail",name:i};const l=e.link??"";return l.startsWith("/artifacts?/")?{id:"artifacts?-detail",slug:decodeURIComponent(l.slice(12))}:l.startsWith("/tasks/")?{id:"task-detail",taskId:decodeURIComponent(l.slice(7))}:l.startsWith("/agents/")?{id:"agent-detail",name:decodeURIComponent(l.slice(8))}:null}function WC(){const[e,t]=w.useState("activity"),[n,r]=w.useState([]),[i,l]=w.useState(!1),[s,o]=w.useState(null),[u,d]=w.useState(null),[c,f]=w.useState(null),[m,h]=w.useState(null),[p,x]=w.useState(!0),[b,y]=w.useState(0),g=w.useMemo(()=>n[n.length-1]??{id:e},[e,n]),v=w.useCallback(k=>{r(j=>[...j,k])},[]),C=w.useCallback(()=>{r(k=>k.slice(0,-1))},[]),z=w.useCallback(k=>{r([]),t(k)},[]),E=w.useCallback(async()=>{var k;try{const j=await q.get("/snapshot");d(j),(k=j.settings)!=null&&k.data&&f(j.settings.data),h(null)}catch(j){throw h(j.message||"Dashboard server unreachable."),j}},[]);w.useEffect(()=>{let k=!1;return Promise.all([q.get("/snapshot").catch(()=>null),q.get("/settings").catch(()=>null),q.probeAuthStatus().catch(()=>null)]).then(([j,P])=>{var O;if(k)return;const B=(P==null?void 0:P.data)??((O=j==null?void 0:j.settings)==null?void 0:O.data)??null;j&&d(j),B&&f(B),h(!j&&!B?"Dashboard server unreachable.":null)}).catch(j=>{k||h(j.message||"Dashboard server unreachable.")}).finally(()=>{k||x(!1)}),()=>{k=!0}},[]),w.useEffect(()=>{c!=null&&c.theme&&(ts(c.theme),ui(c.theme))},[c==null?void 0:c.theme]),w.useEffect(()=>{var P;if(((P=c==null?void 0:c.theme)==null?void 0:P.mode)!=="system")return;const k=window.matchMedia("(prefers-color-scheme: light)"),j=()=>{c!=null&&c.theme&&(ts(c.theme),ui(c.theme))};return k.addEventListener("change",j),()=>k.removeEventListener("change",j)},[c==null?void 0:c.theme]),w.useEffect(()=>{const k=()=>{y(P=>P+1),E().catch(()=>{})},j=()=>{document.visibilityState==="visible"&&k()};return window.addEventListener("online",k),window.addEventListener("pageshow",k),document.addEventListener("visibilitychange",j),()=>{window.removeEventListener("online",k),window.removeEventListener("pageshow",k),document.removeEventListener("visibilitychange",j)}},[E]),w.useEffect(()=>{const k=new Vm,j=k.on(P=>{if(P.type==="snapshot"&&"data"in P&&P.data)d(B=>({...B??{},...P.data}));else if(P.type==="change")E().catch(()=>{});else if(P.type==="tasks:change"){const B=P.task;d(O=>{if(!O)return O;const W=(O.tasks||[]).map(ee=>ee.id===B.id?B:ee),de=W.some(ee=>ee.id===B.id);return{...O,tasks:de?W:[B,...W]}})}else P.type==="tasks:delete"?d(B=>B&&{...B,tasks:(B.tasks||[]).filter(O=>O.id!==P.id)}):P.type==="settings:change"?P.settings&&f(P.settings):P.type==="project:change"||P.type==="agents:change"||P.type==="schedules:change"||P.type==="artifact:change"?E().catch(()=>{}):(P.type==="agent:status"||P.type==="agent:restarted")&&d(B=>{if(!B)return B;const O=(B.agents||[]).map(W=>W.name===P.agent.name?P.agent:W);return{...B,agents:O}})});return()=>{j(),k.close()}},[E,b]);const A=w.useCallback(k=>{(k==="activity"||k==="chat"||k==="tasks"||k==="settings"||k==="more")&&z(k)},[z]),L=w.useCallback((k,j,P)=>{if(k==="notification"){const B=OC({link:j||null,meta:P??null});B&&v(B);return}if(k==="task"&&j){v({id:"task-detail",taskId:j});return}if(k==="artifacts?"&&j){v({id:"artifacts?-detail",slug:j});return}if(k==="agent"&&j){v({id:"agent-detail",name:j});return}if(k==="project"){z("activity");return}k==="setting"&&z("settings")},[z,v]),I=()=>{if(!u||!c)return null;if(n.length>0){const k=n[n.length-1];switch(k.id){case"artifacts?":return a.jsx(fC,{snapshot:u,onBack:C,onOpenArtifact:j=>v({id:"artifacts?-detail",slug:j})});case"agents":return a.jsx(yf,{snapshot:u,onBack:C,onOpenAgent:j=>v({id:"agent-detail",name:j}),onRefresh:E});case"skills":return a.jsx(PC,{snapshot:u,onBack:C});case"mods":return a.jsx(sC,{snapshot:u,onBack:C});case"schedules":return a.jsx(yC,{snapshot:u,onBack:C});case"history":return a.jsx(lC,{onBack:C});case"config":return a.jsx(iC,{onBack:C});case"artifacts?-detail":return a.jsx(uC,{slug:k.slug,onBack:C});case"agent-detail":return a.jsx(yf,{snapshot:u,onBack:C,onOpenAgent:()=>{},onRefresh:E,selectedAgent:k.name});case"task-detail":return a.jsx(Sf,{snapshot:u,onRefresh:E,selectedTaskId:k.taskId,onCloseDetail:C,onOpenChat:j=>{o(j),z("chat")}});default:return null}}switch(e){case"activity":return a.jsx(X2,{snapshot:u,onRefresh:E});case"chat":return a.jsx(rC,{snapshot:u,settings:c,initialTaskId:s,onClearTaskId:()=>o(null)});case"tasks":return a.jsx(Sf,{snapshot:u,onRefresh:E,onOpenChat:k=>{o(k),z("chat")}});case"settings":return a.jsx(IC,{settings:c,snapshot:u,onRefresh:E});case"more":return a.jsx(oC,{snapshot:u,onNavigate:k=>{(k==="artifacts?"||k==="agents"||k==="skills"||k==="mods"||k==="schedules"||k==="history"||k==="config")&&v({id:k})}});default:return null}};return p?a.jsxs("div",{className:"mobile-loading",children:[a.jsx(Wm,{size:"lg"}),a.jsx("p",{children:"Loading Bizar…"})]}):m||!u||!c?a.jsxs("div",{className:"mobile-loading",children:[a.jsx("h2",{children:"Dashboard unavailable"}),a.jsx("p",{children:m||"Dashboard server unreachable."}),a.jsx("p",{className:"muted",children:"Make sure the Bizar dashboard server is running."})]}):a.jsxs("div",{className:"mobile-app",children:[a.jsx(K2,{activeTab:g.id,snapshot:u,onSearch:()=>l(!0),onNavigate:L}),a.jsx("main",{className:"mobile-content",children:I()}),n.length===0&&a.jsx(V2,{tabs:_C,activeTab:e,onChange:A}),n.length>0&&a.jsx("button",{type:"button",className:"mobile-back-btn",onClick:C,"aria-label":"Go back",children:"← Back"}),a.jsx(jC,{open:i,onClose:()=>l(!1),onNavigate:L})]})}export{V1 as $,xa as A,Dr as B,q1 as C,hx as D,Ix as E,Pu as F,Au as G,ka as H,tx as I,A2 as J,L2 as K,Tx as L,On as M,j2 as N,Fm as O,xt as P,$C as Q,_t as R,es as S,mx as T,Zl as U,ux as V,md as W,Zn as X,cb as Y,S2 as Z,_e as _,q as a,xx as a0,gx as a1,lx as a2,qn as a3,ui as a4,ax as a5,ix as a6,fx as a7,rx as a8,X1 as a9,ts as aa,Vm as ab,dx as ac,ag as ad,ox as ae,W1 as af,P2 as ag,UC as ah,BC as ai,wa as aj,$1 as ak,WC as al,Ss as b,J as c,dd as d,Jl as e,va as f,Pr as g,hd as h,Mu as i,a as j,pr as k,bx as l,cd as m,Y1 as n,Sr as o,Wm as p,$m as q,w as r,px as s,_r as t,kx as u,Om as v,Dm as w,Z1 as x,T2 as y,cx as z};
352
- //# sourceMappingURL=mobile-OgRp8VIb.js.map
351
+ */var D2={L:gr.QrCode.Ecc.LOW,M:gr.QrCode.Ecc.MEDIUM,Q:gr.QrCode.Ecc.QUARTILE,H:gr.QrCode.Ecc.HIGH},Jp=128,eg="L",tg="#FFFFFF",ng="#000000",rg=!1,ig=1,_2=4,O2=0,F2=.1;function lg(e,t=0){const n=[];return e.forEach(function(r,i){let l=null;r.forEach(function(s,o){if(!s&&l!==null){n.push(`M${l+t} ${i+t}h${o-l}v1H${l+t}z`),l=null;return}if(o===r.length-1){if(!s)return;l===null?n.push(`M${o+t},${i+t} h1v1H${o+t}z`):n.push(`M${l+t},${i+t} h${o+1-l}v1H${l+t}z`);return}s&&l===null&&(l=o)})}),n.join("")}function sg(e,t){return e.slice().map((n,r)=>r<t.y||r>=t.y+t.h?n:n.map((i,l)=>l<t.x||l>=t.x+t.w?i:!1))}function $2(e,t,n,r){if(r==null)return null;const i=e.length+n*2,l=Math.floor(t*F2),s=i/t,o=(r.width||l)*s,u=(r.height||l)*s,d=r.x==null?e.length/2-o/2:r.x*s,c=r.y==null?e.length/2-u/2:r.y*s,f=r.opacity==null?1:r.opacity;let m=null;if(r.excavate){let p=Math.floor(d),x=Math.floor(c),b=Math.ceil(o+d-p),y=Math.ceil(u+c-x);m={x:p,y:x,w:b,h:y}}const h=r.crossOrigin;return{x:d,y:c,h:u,w:o,excavation:m,opacity:f,crossOrigin:h}}function B2(e,t){return t!=null?Math.max(Math.floor(t),0):e?_2:O2}function og({value:e,level:t,minVersion:n,includeMargin:r,marginSize:i,imageSettings:l,size:s,boostLevel:o}){let u=_e.useMemo(()=>{const p=(Array.isArray(e)?e:[e]).reduce((x,b)=>(x.push(...gr.QrSegment.makeSegments(b)),x),[]);return gr.QrCode.encodeSegments(p,D2[t],n,void 0,void 0,o)},[e,t,n,o]);const{cells:d,margin:c,numCells:f,calculatedImageSettings:m}=_e.useMemo(()=>{let h=u.getModules();const p=B2(r,i),x=h.length+p*2,b=$2(h,s,p,l);return{cells:h,margin:p,numCells:x,calculatedImageSettings:b}},[u,s,l,r,i]);return{qrcode:u,margin:c,cells:d,numCells:f,calculatedImageSettings:m}}var U2=function(){try{new Path2D().addPath(new Path2D)}catch{return!1}return!0}(),H2=_e.forwardRef(function(t,n){const r=t,{value:i,size:l=Jp,level:s=eg,bgColor:o=tg,fgColor:u=ng,includeMargin:d=rg,minVersion:c=ig,boostLevel:f,marginSize:m,imageSettings:h}=r,x=Ra(r,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","marginSize","imageSettings"]),{style:b}=x,y=Ra(x,["style"]),g=h==null?void 0:h.src,v=_e.useRef(null),C=_e.useRef(null),z=_e.useCallback(O=>{v.current=O,typeof n=="function"?n(O):n&&(n.current=O)},[n]),[E,A]=_e.useState(!1),{margin:L,cells:I,numCells:k,calculatedImageSettings:j}=og({value:i,level:s,minVersion:c,boostLevel:f,includeMargin:d,marginSize:m,imageSettings:h,size:l});_e.useEffect(()=>{if(v.current!=null){const O=v.current,W=O.getContext("2d");if(!W)return;let de=I;const ee=C.current,R=j!=null&&ee!==null&&ee.complete&&ee.naturalHeight!==0&&ee.naturalWidth!==0;R&&j.excavation!=null&&(de=sg(I,j.excavation));const V=window.devicePixelRatio||1;O.height=O.width=l*V;const S=l/k*V;W.scale(S,S),W.fillStyle=o,W.fillRect(0,0,k,k),W.fillStyle=u,U2?W.fill(new Path2D(lg(de,L))):I.forEach(function(Y,ie){Y.forEach(function(N,ge){N&&W.fillRect(ge+L,ie+L,1,1)})}),j&&(W.globalAlpha=j.opacity),R&&W.drawImage(ee,j.x+L,j.y+L,j.w,j.h)}}),_e.useEffect(()=>{A(!1)},[g]);const P=La({height:l,width:l},b);let B=null;return g!=null&&(B=_e.createElement("img",{src:g,key:g,style:{display:"none"},onLoad:()=>{A(!0)},ref:C,crossOrigin:j==null?void 0:j.crossOrigin})),_e.createElement(_e.Fragment,null,_e.createElement("canvas",La({style:P,height:l,width:l,ref:z,role:"img"},y)),B)});H2.displayName="QRCodeCanvas";var ag=_e.forwardRef(function(t,n){const r=t,{value:i,size:l=Jp,level:s=eg,bgColor:o=tg,fgColor:u=ng,includeMargin:d=rg,minVersion:c=ig,boostLevel:f,title:m,marginSize:h,imageSettings:p}=r,x=Ra(r,["value","size","level","bgColor","fgColor","includeMargin","minVersion","boostLevel","title","marginSize","imageSettings"]),{margin:b,cells:y,numCells:g,calculatedImageSettings:v}=og({value:i,level:s,minVersion:c,boostLevel:f,includeMargin:d,marginSize:h,imageSettings:p,size:l});let C=y,z=null;p!=null&&v!=null&&(v.excavation!=null&&(C=sg(y,v.excavation)),z=_e.createElement("image",{href:p.src,height:v.h,width:v.w,x:v.x+b,y:v.y+b,preserveAspectRatio:"none",opacity:v.opacity,crossOrigin:v.crossOrigin}));const E=lg(C,b);return _e.createElement("svg",La({height:l,width:l,viewBox:`0 0 ${g} ${g}`,ref:n,role:"img"},x),!!m&&_e.createElement("title",null,m),_e.createElement("path",{fill:o,d:`M0,0 h${g}v${g}H0z`,shapeRendering:"crispEdges"}),_e.createElement("path",{fill:u,d:E,shapeRendering:"crispEdges"}),z)});ag.displayName="QRCodeSVG";function V2({tabs:e,activeTab:t,onChange:n}){return a.jsx("nav",{className:"mobile-bottom-nav",role:"navigation","aria-label":"Mobile navigation",children:e.map(r=>{const i=r.icon;return a.jsxs("button",{type:"button",className:Mu("mobile-nav-btn",t===r.id&&"mobile-nav-btn-active"),onClick:()=>n(r.id),"aria-label":r.label,"aria-current":t===r.id?"page":void 0,children:[a.jsx(i,{size:22}),a.jsx("span",{className:"mobile-nav-label",children:r.label})]},r.id)})})}function Dt({open:e,onClose:t,title:n,children:r,actions:i,maxHeight:l="85vh"}){const s=w.useRef(null),o=w.useRef(null),u=w.useId(),d=w.useRef(null),c=w.useRef(null),f=w.useRef(0),m=w.useRef(0),h=()=>{var y;return((y=s.current)==null?void 0:y.querySelectorAll('button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])'))??[]};if(w.useEffect(()=>{if(!e)return;d.current=document.activeElement instanceof HTMLElement?document.activeElement:null;const y=g=>{var A;if(g.key==="Escape"&&t(),g.key!=="Tab")return;const v=Array.from(h());if(v.length===0){g.preventDefault(),(A=s.current)==null||A.focus();return}const C=v[0],z=v[v.length-1],E=document.activeElement;if(g.shiftKey){(!E||E===C||E===s.current)&&(g.preventDefault(),z==null||z.focus());return}E===z&&(g.preventDefault(),C==null||C.focus())};return window.addEventListener("keydown",y),requestAnimationFrame(()=>{var g,v;((g=o.current)==null?void 0:g.focus())??((v=s.current)==null||v.focus())}),()=>{var g;window.removeEventListener("keydown",y),(g=d.current)==null||g.focus()}},[e,t]),w.useEffect(()=>(e?(m.current=window.scrollY,document.documentElement.style.overflow="hidden",document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.top=`-${m.current}px`,document.body.style.left="0",document.body.style.right="0",document.body.style.width="100%"):(document.documentElement.style.overflow="",document.body.style.overflow="",document.body.style.position="",document.body.style.top="",document.body.style.left="",document.body.style.right="",document.body.style.width=""),()=>{document.documentElement.style.overflow="",document.body.style.overflow="",document.body.style.position="",document.body.style.top="",document.body.style.left="",document.body.style.right="",document.body.style.width="",window.scrollTo(0,m.current)}),[e]),!e)return null;const p=y=>{var g;y.isPrimary&&(c.current=y.clientY,f.current=0,(g=s.current)==null||g.setPointerCapture(y.pointerId))},x=y=>{if(c.current==null||!s.current)return;const g=Math.max(0,y.clientY-c.current);f.current=g,s.current.style.transform=`translateY(${g}px)`},b=y=>{if(!s.current)return;y&&s.current.hasPointerCapture(y.pointerId)&&s.current.releasePointerCapture(y.pointerId);const g=f.current;s.current.style.transform="",c.current=null,f.current=0,g>72&&t()};return a.jsx("div",{className:"mobile-sheet-overlay",onClick:t,children:a.jsxs("div",{ref:s,className:"mobile-sheet",style:{maxHeight:l},onClick:y=>y.stopPropagation(),role:"dialog","aria-modal":!0,"aria-label":n?void 0:"Sheet","aria-labelledby":n?u:void 0,tabIndex:-1,children:[a.jsx("div",{className:"mobile-sheet-handle",onPointerDown:p,onPointerMove:x,onPointerUp:b,onPointerCancel:b,"aria-hidden":"true"}),a.jsxs("div",{className:"mobile-sheet-header",children:[n?a.jsx("h3",{id:u,className:"mobile-sheet-title",children:n}):a.jsx("div",{}),a.jsx("button",{ref:o,type:"button",className:"mobile-icon-btn",onClick:t,"aria-label":"Close",children:a.jsx(Zn,{size:18})})]}),a.jsx("div",{className:"mobile-sheet-content",children:r}),i&&a.jsx("div",{className:"mobile-sheet-actions",children:i})]})})}function W2(e){switch(e){case"success":return"✓";case"error":return"✗";case"warning":return"⚠";default:return"ℹ"}}function Q2(e){const t=new Date(e),r=Date.now()-t.getTime();return r<6e4?"just now":r<36e5?`${Math.floor(r/6e4)}m ago`:r<864e5?`${Math.floor(r/36e5)}h ago`:t.toLocaleDateString()}function q2({onSelect:e}){const[t,n]=w.useState(!1),[r,i]=w.useState([]),[l,s]=w.useState(0),o=async()=>{var c;try{const f=await q.get("/notifications");i(f.notifications||[]),s(((c=f.stats)==null?void 0:c.unread)||0)}catch{}};w.useEffect(()=>{o()},[]),w.useEffect(()=>{t&&o()},[t]);const u=async()=>{try{await q.post("/notifications/read-all"),i(c=>c.map(f=>({...f,read:!0}))),s(0)}catch{}},d=async c=>{try{await q.post(`/notifications/${encodeURIComponent(c)}/read`),i(f=>f.map(m=>m.id===c?{...m,read:!0}:m)),s(f=>Math.max(0,f-1))}catch{}};return a.jsxs(a.Fragment,{children:[a.jsxs("button",{type:"button",className:"mobile-icon-btn mobile-notif-btn",onClick:()=>n(!0),"aria-label":`Notifications${l>0?` (${l} unread)`:""}`,children:[a.jsx(cd,{size:20}),l>0&&a.jsx("span",{className:"mobile-notif-badge",children:l>9?"9+":l})]}),a.jsx(Dt,{open:t,onClose:()=>n(!1),title:"Notifications",actions:l>0?a.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-secondary",style:{width:"100%"},onClick:u,children:[a.jsx(Q1,{size:14})," Mark all read"]}):void 0,children:a.jsxs("div",{className:"mobile-notif-list",children:[r.length===0&&a.jsxs("div",{className:"mobile-empty",children:[a.jsx(cd,{size:32}),a.jsx("p",{children:"No notifications"})]}),r.map(c=>a.jsxs("button",{type:"button",className:`mobile-notif-item ${c.read?"read":"unread"}`,onClick:()=>{c.read||d(c.id),e(c),n(!1)},children:[a.jsx("span",{className:`mobile-notif-icon severity-${c.severity}`,children:W2(c.severity)}),a.jsxs("div",{className:"mobile-notif-body",children:[a.jsx("span",{className:"mobile-notif-title",children:c.title||c.message}),c.message&&c.title&&a.jsx("span",{className:"mobile-notif-text",children:c.message}),a.jsx("span",{className:"mobile-notif-time",children:Q2(c.ts)})]}),!c.read&&a.jsx("span",{className:"mobile-notif-dot"})]},c.id))]})})]})}const Y2={activity:"Activity",chat:"Chat",tasks:"Tasks",settings:"Settings",more:"More",plans:"Plans",agents:"Agents",skills:"Skills",mods:"Mods",schedules:"Schedules",history:"History",config:"Config","plan-detail":"Plan","agent-detail":"Agent","task-detail":"Task"};function K2({activeTab:e,snapshot:t,onSearch:n,onNavigate:r}){const[i,l]=w.useState(!1),s=async o=>{try{await q.post(`/projects/${encodeURIComponent(o)}/activate`),l(!1),window.location.reload()}catch{}};return a.jsxs("header",{className:"mobile-topbar",children:[a.jsxs("div",{className:"mobile-topbar-left",children:[a.jsx("span",{className:"mobile-logo",children:"ᛒ"}),(t==null?void 0:t.activeProject)&&a.jsxs("button",{type:"button",className:"mobile-project-btn",onClick:()=>l(!0),"aria-label":"Select project",children:[a.jsx("span",{className:"mobile-project-name",children:t.activeProject.name}),a.jsx(Ss,{size:14})]}),a.jsx("span",{className:"mobile-title",children:Y2[e]||"Bizar"})]}),a.jsxs("div",{className:"mobile-topbar-right",children:[a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:n,"aria-label":"Search",children:a.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[a.jsx("circle",{cx:"11",cy:"11",r:"8"}),a.jsx("path",{d:"m21 21-4.35-4.35"})]})}),a.jsx(q2,{onSelect:o=>{r("notification",o.link||"",o.meta??null)}}),(t==null?void 0:t.activeProject)&&a.jsx(Dt,{open:i,onClose:()=>l(!1),title:"Projects",children:a.jsx("div",{className:"mobile-project-list",children:(t.projects||[]).map(o=>{var u,d;return a.jsxs("button",{type:"button",className:`mobile-project-item ${o.id===((u=t.activeProject)==null?void 0:u.id)?"active":""}`,onClick:()=>s(o.id),children:[a.jsx("div",{className:"mobile-project-status","data-status":o.status}),a.jsxs("div",{className:"mobile-project-info",children:[a.jsx("span",{className:"mobile-project-item-name",children:o.name}),a.jsx("span",{className:"mobile-project-item-path",children:o.path})]}),o.id===((d=t.activeProject)==null?void 0:d.id)&&a.jsx("span",{className:"mobile-active-badge",children:"active"})]},o.id)})})})]})]})}const G2=["all","tasks","agents","bg","artifacts","mods"],Co={all:"All",tasks:"Tasks",agents:"Agents",bg:"Background",artifacts:"Plans",mods:"Mods"};function X2({snapshot:e,onRefresh:t}){var L;const[n,r]=w.useState(((L=e.overview)==null?void 0:L.recentActivity)||[]),[i,l]=w.useState(!0),[s,o]=w.useState("all"),[u,d]=w.useState(!1),[c,f]=w.useState(null),[m,h]=w.useState(""),[p,x]=w.useState(!1);w.useEffect(()=>{var I;(I=e.overview)!=null&&I.recentActivity?(r(e.overview.recentActivity),l(!1)):b()},[e.overview]);const b=async()=>{var I;try{const k=await q.get("/snapshot");r(((I=k.overview)==null?void 0:I.recentActivity)||[])}catch{}finally{l(!1)}},y=s==="all"?n:n.filter(I=>{var k,j,P,B,O,W;return s==="tasks"?(k=I.kind)==null?void 0:k.startsWith("task"):s==="agents"?(j=I.kind)==null?void 0:j.startsWith("agent"):s==="bg"?((P=I.kind)==null?void 0:P.includes("bg"))||((B=I.kind)==null?void 0:B.includes("schedule")):s==="artifacts"?(O=I.kind)==null?void 0:O.includes("artifacts"):s==="mods"?(W=I.kind)==null?void 0:W.includes("mod"):!0}),g=e.agents||[],v=e.tasks||[],C=v.filter(I=>I.status==="doing"||I.status==="queued"),z=v.filter(I=>I.status==="done"),E=async()=>{if(!(!m.trim()||p)){x(!0);try{await q.post("/chat",{message:m.trim(),agent:"odin"}),h(""),await t().catch(()=>{}),await b()}catch{}finally{x(!1)}}},A=async()=>{await t().catch(()=>{}),await b()};return a.jsxs("div",{className:"mobile-view",children:[a.jsxs("div",{className:"mobile-submit-hero",children:[a.jsx("textarea",{className:"mobile-submit-input",placeholder:"What needs to be done? Describe a task, bug, or refactor for Odin to artifacts…",value:m,onChange:I=>h(I.target.value),rows:2}),a.jsxs("div",{className:"mobile-submit-actions",children:[a.jsx("div",{className:"mobile-submit-chips",children:["Implement feature","Fix bug","Refactor","Investigate","Write tests"].map(I=>a.jsx("button",{type:"button",className:"mobile-submit-chip",onClick:()=>h(k=>k?`${k} ${I}`:I),children:I},I))}),a.jsxs("button",{type:"button",className:"mobile-btn",disabled:!m.trim()||p,onClick:E,children:[a.jsx($m,{size:14})," Submit to Odin"]})]})]}),a.jsxs("div",{className:"mobile-stats",children:[a.jsxs("div",{className:"mobile-stat",children:[a.jsx("div",{className:"mobile-stat-value",children:g.length}),a.jsx("div",{className:"mobile-stat-label",children:"Agents"})]}),a.jsxs("div",{className:"mobile-stat",children:[a.jsx("div",{className:"mobile-stat-value",children:C.length}),a.jsx("div",{className:"mobile-stat-label",children:"Active"})]}),a.jsxs("div",{className:"mobile-stat",children:[a.jsx("div",{className:"mobile-stat-value",children:z.length}),a.jsx("div",{className:"mobile-stat-label",children:"Done"})]}),a.jsxs("div",{className:"mobile-stat",children:[a.jsx("div",{className:"mobile-stat-value",children:e.artifacts.length||0}),a.jsx("div",{className:"mobile-stat-label",children:"Plans"})]})]}),i&&n.length===0&&a.jsx("div",{className:"mobile-loading mobile-loading-inline",children:a.jsx("p",{children:"Loading activity…"})}),a.jsxs("div",{className:"mobile-activity-header",children:[a.jsx("h3",{className:"mobile-section-title",style:{margin:0},children:"Recent Activity"}),a.jsxs("div",{style:{display:"flex",gap:4},children:[a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>d(I=>!I),"aria-label":u?"Resume":"Pause",children:u?a.jsx(Zl,{size:14}):a.jsx(lx,{size:14})}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:A,"aria-label":"Refresh",children:a.jsx(_t,{size:14})})]})]}),a.jsx("div",{className:"mobile-search-scopes",children:G2.map(I=>a.jsx("button",{type:"button",className:`mobile-scope-chip ${s===I?"active":""}`,onClick:()=>o(I),children:Co[I]},I))}),g.length>0&&a.jsxs("section",{className:"mobile-section",children:[a.jsxs("h3",{className:"mobile-section-title",children:[a.jsx(Dr,{size:14})," Agents"]}),a.jsx("div",{className:"mobile-card-list",children:g.slice(0,6).map(I=>a.jsxs("div",{className:"mobile-agent-card",children:[a.jsx("div",{className:"mobile-agent-dot","data-status":I.status||"idle"}),a.jsxs("div",{className:"mobile-agent-info",children:[a.jsx("span",{className:"mobile-agent-name",children:I.name}),a.jsx("span",{className:"mobile-agent-meta",children:I.status||"idle"})]})]},I.name))})]}),!u&&y.length>0&&a.jsx("section",{className:"mobile-section",children:a.jsx("div",{className:"mobile-card-list",children:y.slice(0,30).map((I,k)=>a.jsxs("button",{type:"button",className:"mobile-event-item",onClick:()=>f(I),children:[a.jsx("span",{className:"mobile-event-kind","data-kind":I.kind,children:Co[I.kind]||I.kind}),a.jsx("span",{className:"mobile-event-msg",children:Z2(I)}),a.jsx("span",{className:"mobile-event-time",children:Sr(I.ts)})]},`${I.ts}-${I.kind}-${k}`))})}),!u&&y.length===0&&n.length>0&&a.jsxs("div",{className:"mobile-empty",children:[a.jsx(xa,{size:40}),a.jsx("p",{children:"No matching activity."}),a.jsx("p",{className:"muted",children:"Try a different filter."})]}),c&&a.jsx(Dt,{open:!0,onClose:()=>f(null),title:Co[c.kind]||c.kind,children:a.jsxs("div",{className:"mobile-agent-detail-meta",children:[a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Kind"}),a.jsx("span",{children:c.kind})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Time"}),a.jsx("span",{children:new Date(c.ts).toLocaleString()})]}),Object.entries(c).filter(([I])=>!["ts","kind"].includes(I)).map(([I,k])=>a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:I}),a.jsx("span",{style:{fontSize:12,maxWidth:200,wordBreak:"break-all"},children:typeof k=="object"?JSON.stringify(k):String(k)})]},I))]})}),g.length===0&&C.length===0&&a.jsxs("div",{className:"mobile-empty",children:[a.jsx(xa,{size:40}),a.jsx("p",{children:"No activity yet."}),a.jsx("p",{className:"muted",children:"Start a task or chat to see things here."})]})]})}function Z2(e){const t=e.kind||"";return t.includes("task")?`Task: ${e.title||e.id||"updated"}`:t.includes("agent")?`Agent: ${e.name||"status changed"}`:t.includes("artifacts")?`Plan: ${e.slug||"changed"}`:t.includes("mod")?`Mod: ${e.name||"changed"}`:t.includes("schedule")?`Schedule: ${e.name||"triggered"}`:JSON.stringify(e).slice(0,80)}function Tn({open:e,onClose:t,title:n,children:r,actions:i}){const l=w.useRef(null),s=w.useRef(null),o=w.useRef(null),u=w.useId(),d=w.useRef(0);return w.useEffect(()=>{if(!e)return;o.current=document.activeElement instanceof HTMLElement?document.activeElement:null;const c='button:not([disabled]), [href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])',f=m=>{var y,g;if(m.key==="Escape"&&t(),m.key!=="Tab")return;const h=Array.from(((y=l.current)==null?void 0:y.querySelectorAll(c))??[]);if(h.length===0){m.preventDefault(),(g=l.current)==null||g.focus();return}const p=h[0],x=h[h.length-1],b=document.activeElement;if(m.shiftKey){(!b||b===p||b===l.current)&&(m.preventDefault(),x==null||x.focus());return}b===x&&(m.preventDefault(),p==null||p.focus())};return window.addEventListener("keydown",f),d.current=window.scrollY,document.documentElement.style.overflow="hidden",document.body.style.overflow="hidden",document.body.style.position="fixed",document.body.style.top=`-${d.current}px`,document.body.style.left="0",document.body.style.right="0",document.body.style.width="100%",requestAnimationFrame(()=>{var m,h;((m=s.current)==null?void 0:m.focus())??((h=l.current)==null||h.focus())}),()=>{var m;window.removeEventListener("keydown",f),document.documentElement.style.overflow="",document.body.style.overflow="",document.body.style.position="",document.body.style.top="",document.body.style.left="",document.body.style.right="",document.body.style.width="",window.scrollTo(0,d.current),(m=o.current)==null||m.focus()}},[e,t]),e?a.jsx("div",{className:"mobile-modal-overlay",onClick:c=>{c.target===c.currentTarget&&t()},children:a.jsxs("div",{ref:l,className:"mobile-modal",onClick:c=>c.stopPropagation(),role:"dialog","aria-modal":!0,"aria-label":n?void 0:"Modal","aria-labelledby":n?u:void 0,tabIndex:-1,children:[a.jsxs("div",{className:"mobile-modal-header",children:[n?a.jsx("h2",{id:u,className:"mobile-modal-title",children:n}):a.jsx("div",{}),a.jsx("button",{ref:s,type:"button",className:"mobile-icon-btn",onClick:t,"aria-label":"Close",children:a.jsx(Zn,{size:20})})]}),a.jsx("div",{className:"mobile-modal-content",children:r}),i&&a.jsx("div",{className:"mobile-modal-actions",children:i})]})}):null}const ug=["reasoning","code","design","planning","gitops","analysis"],gf={reasoning:"var(--accent)",code:"var(--info)",design:"var(--success)",planning:"var(--warning)",gitops:"var(--error)",analysis:"var(--text-dim)"};function yf({snapshot:e,onBack:t,onOpenAgent:n,selectedAgent:r,onRefresh:i}){const[l,s]=w.useState(e.agents||[]),[o,u]=w.useState(!e.agents),[d,c]=w.useState(""),[f,m]=w.useState(""),[h,p]=w.useState(null),[x,b]=w.useState(!1),[y,g]=w.useState(""),[v,C]=w.useState(!1);w.useEffect(()=>{if(r){const j=l.find(P=>P.name===r);j&&p(j)}},[r,l]);const z=async()=>{try{const j=await q.get("/agents");s(j.agents||[])}catch{}finally{u(!1)}},E=l.filter(j=>{if(d&&j.category!==d)return!1;if(f){const P=f.toLowerCase();if(!j.name.toLowerCase().includes(P)&&!(j.description||"").toLowerCase().includes(P))return!1}return!0}),A=async(j,P)=>{try{await q.post(`/agents/${encodeURIComponent(j)}/invoke`,{prompt:P}),C(!1),g("")}catch{}},L=async j=>{try{await q.post(`/agents/${encodeURIComponent(j)}/restart`),await z()}catch{}},I=async j=>{if(confirm(`Delete agent "${j}"?`))try{await q.del(`/agents/${encodeURIComponent(j)}`),s(P=>P.filter(B=>B.name!==j)),p(null),i==null||i()}catch{}},k=async j=>{try{const P=await q.post("/agents",j);s(B=>[...B,P]),b(!1),i==null||i()}catch{}};return a.jsxs("div",{className:"mobile-view",children:[a.jsxs("div",{className:"mobile-tasks-toolbar",children:[a.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search agents…",value:f,onChange:j=>m(j.target.value),style:{flex:1}}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>z(),"aria-label":"Refresh",children:a.jsx(_t,{size:16})}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>b(!0),"aria-label":"New agent",children:a.jsx(xt,{size:16})})]}),a.jsxs("div",{className:"mobile-search-scopes",children:[a.jsx("button",{type:"button",className:`mobile-scope-chip ${d?"":"active"}`,onClick:()=>c(""),children:"All"}),ug.map(j=>a.jsx("button",{type:"button",className:`mobile-scope-chip ${d===j?"active":""}`,onClick:()=>c(j),children:j},j))]}),o?a.jsx("div",{className:"mobile-loading",children:a.jsx("p",{children:"Loading…"})}):E.length===0?a.jsxs("div",{className:"mobile-empty",children:[a.jsx(Dr,{size:40}),a.jsx("p",{children:"No agents found."})]}):a.jsx("div",{className:"mobile-card-list",children:E.map(j=>a.jsxs("button",{type:"button",className:"mobile-list-item mobile-list-item-interactive",onClick:()=>{p(j),n(j.name)},children:[a.jsx("div",{className:"mobile-agent-dot","data-status":j.status||"idle"}),a.jsxs("div",{className:"mobile-list-content",children:[a.jsx("span",{className:"mobile-list-title",children:j.name}),a.jsx("span",{className:"mobile-list-meta",children:j.model||j.mode||"—"})]}),j.category&&a.jsx("span",{className:"mobile-list-badge",style:{color:gf[j.category]||"var(--text-dim)"},children:j.category}),a.jsx("span",{className:"mobile-list-badge","data-status":j.status||"idle",children:j.status||"idle"})]},j.name))}),h&&a.jsx(Dt,{open:!0,onClose:()=>p(null),title:h.name,actions:a.jsxs("div",{className:"mobile-task-detail-actions",children:[a.jsxs("button",{type:"button",className:"mobile-btn",onClick:()=>{g(""),C(!0)},children:[a.jsx(Zl,{size:14})," Invoke"]}),(h.isStuck||h.status==="error"||h.status==="working")&&a.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-secondary",onClick:()=>L(h.name),children:[a.jsx(ux,{size:14})," Restart"]}),a.jsx("button",{type:"button",className:"mobile-btn mobile-btn-danger",onClick:()=>I(h.name),children:a.jsx(_r,{size:14})})]}),children:a.jsxs("div",{className:"mobile-agent-detail",children:[a.jsxs("div",{className:"mobile-agent-detail-status",children:[a.jsx("span",{className:"mobile-agent-dot","data-status":h.status||"idle"}),a.jsx("span",{className:"mobile-agent-detail-status-text",children:h.status||"idle"}),h.category&&a.jsx("span",{className:"mobile-list-badge",style:{color:gf[h.category]},children:h.category})]}),a.jsx("p",{className:"mobile-agent-detail-desc",children:h.description||"No description."}),a.jsxs("div",{className:"mobile-agent-detail-meta",children:[a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Model"}),a.jsx("span",{className:"mono",children:h.model||"—"})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Mode"}),a.jsx("span",{children:h.mode||"subagent"})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Path"}),a.jsx("span",{className:"mono",style:{fontSize:11},children:h.path})]}),h.lastError&&a.jsxs("div",{className:"mobile-task-detail-row",style:{color:"var(--error)"},children:[a.jsx("span",{children:"Last error"}),a.jsx("span",{children:h.lastError.message})]}),h.tasksTotal!=null&&h.tasksTotal>0&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Success rate"}),a.jsxs("span",{children:[Math.round((h.successRate||0)*100),"%"]})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Last modified"}),a.jsx("span",{children:Sr(h.mtime)})]})]})]})}),a.jsxs(Tn,{open:v,onClose:()=>C(!1),title:`Invoke ${h==null?void 0:h.name}`,actions:a.jsxs("button",{type:"button",className:"mobile-btn",style:{width:"100%"},disabled:!y.trim(),onClick:()=>{h&&A(h.name,y.trim())},children:[a.jsx(Zl,{size:14})," Invoke"]}),children:[a.jsxs("p",{className:"muted",style:{marginBottom:12},children:["Model: ",a.jsx("span",{className:"mono",children:(h==null?void 0:h.model)||"—"})]}),a.jsx("textarea",{className:"mobile-input",rows:5,placeholder:"What should this agent do?",value:y,onChange:j=>g(j.target.value),autoFocus:!0})]}),a.jsx(J2,{open:x,onClose:()=>b(!1),onCreate:k})]})}function J2({open:e,onClose:t,onCreate:n}){const[r,i]=w.useState(""),[l,s]=w.useState(""),[o,u]=w.useState(""),[d,c]=w.useState("subagent"),[f,m]=w.useState("#8b5cf6"),[h,p]=w.useState(""),[x,b]=w.useState(""),[y,g]=w.useState(""),v=C=>{C.preventDefault(),r.trim()&&(n({name:r.trim(),description:l.trim(),model:o,mode:d,color:f,tools:[],tags:x.split(",").map(z=>z.trim()).filter(Boolean),category:h,prompt:y}),i(""),s(""),u(""),c("subagent"),m("#8b5cf6"),p(""),b(""),g(""))};return a.jsx(Tn,{open:e,onClose:t,title:"New Agent",actions:a.jsxs("button",{type:"submit",form:"new-agent-form",className:"mobile-btn",style:{width:"100%"},children:[a.jsx(xt,{size:14})," Create"]}),children:a.jsxs("form",{id:"new-agent-form",onSubmit:v,className:"mobile-task-form",children:[a.jsx("label",{className:"mobile-field-label",children:"Name *"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:"my-agent",pattern:"[a-z0-9][a-z0-9-]{0,63}",value:r,onChange:C=>i(C.target.value),autoFocus:!0,required:!0}),a.jsx("label",{className:"mobile-field-label",children:"Description"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:"What does this agent do?",value:l,onChange:C=>s(C.target.value)}),a.jsx("label",{className:"mobile-field-label",children:"Model"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:"(provider default)",value:o,onChange:C=>u(C.target.value)}),a.jsx("label",{className:"mobile-field-label",children:"Category"}),a.jsxs("select",{className:"mobile-input",value:h,onChange:C=>p(C.target.value),children:[a.jsx("option",{value:"",children:"None"}),ug.map(C=>a.jsx("option",{value:C,children:C},C))]}),a.jsx("label",{className:"mobile-field-label",children:"Tags (comma-separated)"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:"tag1, tag2",value:x,onChange:C=>b(C.target.value)})]})})}function eC({sessions:e,opencodeSessions:t,activeSessionId:n,activeOpencodeSessionId:r,activeProject:i,creating:l,onCreateSession:s,onSelectSession:o,onSelectOpencodeSession:u}){const[d,c]=w.useState("all"),[f,m]=w.useState(!1),h=30,p=d==="all"?[...e,...t].sort((g,v)=>Number(v.mtime)-Number(g.mtime)):e,x=f?p:p.slice(0,h),b=t.length,y=g=>{if(g.source==="opencode"){u(g);return}o(g.id)};return a.jsxs("div",{className:"chat-sessions",children:[a.jsxs("div",{className:"chat-sessions-header",children:[a.jsx("span",{className:"chat-sessions-header-title",children:"Sessions"}),a.jsx("span",{className:"chat-sessions-count",children:x.length})]}),b>0&&a.jsxs("div",{className:"chat-sessions-toggle",children:[a.jsx("button",{type:"button",className:`chat-sessions-toggle-btn ${d==="bizar"?"active":""}`,onClick:()=>c("bizar"),children:"Bizar"}),a.jsxs("button",{type:"button",className:`chat-sessions-toggle-btn ${d==="all"?"active":""}`,onClick:()=>c("all"),children:["All (",b," opencode)"]})]}),a.jsxs("button",{type:"button",className:"chat-sessions-new",onClick:s,disabled:l||!i,title:i?"Create new session":"Pick a project first","aria-label":"Create new session",children:[l?a.jsx(Wm,{size:"sm"}):a.jsx(xt,{size:14}),a.jsx("span",{children:l?"Creating…":"New session"})]}),e.length===0?a.jsx("div",{className:"chat-sessions-empty",children:a.jsx(Ix,{icon:a.jsx(Jl,{size:20}),title:i?"No sessions yet":"No project",message:i?"Create your first session to start chatting.":"Pick a project in Overview to scope chat sessions.",action:i?a.jsxs(pr,{variant:"primary",size:"sm",onClick:s,loading:l,children:[a.jsx(xt,{size:12})," New session"]}):a.jsxs(pr,{variant:"secondary",size:"sm",onClick:()=>{window.location.hash="#overview"},children:[a.jsx(Pu,{size:12})," Open Overview"]})})}):a.jsx("ul",{className:"chat-sessions-list",children:x.map(g=>{const v=g.source==="opencode",C=v?r===g.id:n===g.id;return a.jsxs("li",{className:`chat-sessions-item ${C?"active":""} ${v?"chat-sessions-item-opencode":""}`,onClick:()=>y(g),title:v?`Open in dashboard: ${g.title||g.id}`:g.id,children:[v&&a.jsx(Z1,{size:10,className:"chat-sessions-item-icon"}),a.jsx("span",{className:"chat-sessions-item-id",children:g.title||g.id}),a.jsx("span",{className:"chat-sessions-item-meta",children:new Date(Number(g.mtime)).toLocaleDateString()})]},v?`oc-${g.id}`:g.id)})}),p.length>h&&a.jsx("button",{type:"button",className:"chat-sessions-show-more",onClick:()=>m(g=>!g),children:f?`Show less (${p.length-h} hidden)`:`Show all ${p.length} sessions`})]})}function tC(e){const{activeSource:t}=e;return a.jsx("div",{className:`chat-composer-wrap chat-composer-source-${t??"none"} legacy`,children:a.jsx("div",{className:"chat-composer-pill",children:a.jsx(T2,{...e})})})}function nC({sessionId:e,messages:t,pinned:n,agent:r,model:i,agents:l,mcps:s,allCommands:o,activeSource:u="bizar",onRename:d,onDelete:c}){const[f,m]=w.useState(!1),[h,p]=w.useState(!1),x=f?l:l.slice(0,4),b=h?o:o.slice(0,4),y=i.includes("/")?i.split("/")[0]:"";return a.jsxs("div",{className:"chat-info",children:[a.jsxs("div",{className:"chat-info-card",children:[a.jsxs("div",{className:"chat-info-card-title",children:[a.jsx(On,{size:14})," Session",a.jsx("span",{className:`chat-source-badge chat-source-${u??"none"}`,style:{marginLeft:"auto"},children:u==="opencode"?"opencode":"bizar chat"})]}),a.jsxs("dl",{className:"env-table",children:[a.jsx("dt",{children:"id"}),a.jsx("dd",{className:"mono",children:e||"Live"}),a.jsx("dt",{children:"Messages"}),a.jsx("dd",{className:"mono",children:t.length}),a.jsx("dt",{children:"Pinned"}),a.jsx("dd",{className:"mono",children:n.size}),a.jsx("dt",{children:"Agent"}),a.jsx("dd",{className:"mono",children:r||"—"}),a.jsx("dt",{children:"Model"}),a.jsx("dd",{className:"mono ellipsis",title:i,children:i||"—"}),y&&a.jsxs(a.Fragment,{children:[a.jsx("dt",{children:"Provider"}),a.jsx("dd",{className:"mono",children:y})]})]}),(d||c)&&a.jsxs("div",{className:"chat-info-actions",children:[d&&a.jsxs("button",{type:"button",className:"btn btn-ghost btn-sm",onClick:d,children:[a.jsx(Au,{size:12,"aria-hidden":!0})," Rename"]}),c&&a.jsxs("button",{type:"button",className:"btn btn-ghost btn-danger btn-sm",onClick:c,children:[a.jsx(_r,{size:12,"aria-hidden":!0})," Delete"]})]})]}),a.jsxs("div",{className:"chat-info-card",children:[a.jsxs("div",{className:"chat-info-card-title",children:[a.jsx(Dr,{size:14})," Agents",a.jsx("span",{className:"chat-info-card-count",children:l.length})]}),a.jsx("ul",{className:"mod-mini-list",children:x.map(g=>a.jsxs("li",{className:"mod-mini",children:[a.jsxs("span",{className:"mod-mini-name",children:["@",g.name]}),a.jsx("span",{className:"mod-mini-meta",children:g.model||g.mode||""})]},g.name))}),l.length>4&&a.jsx("button",{type:"button",className:"chat-info-card-toggle",onClick:()=>m(g=>!g),children:f?"− Show fewer":`+ ${l.length-4} more`})]}),a.jsxs("div",{className:"chat-info-card",children:[a.jsxs("div",{className:"chat-info-card-title",children:[a.jsx(cx,{size:14})," MCPs",a.jsx("span",{className:"chat-info-card-count",children:s.length})]}),a.jsxs("ul",{className:"mod-mini-list",children:[s.length===0?a.jsx("li",{className:"muted",children:"No MCPs configured."}):null,s.map(g=>a.jsxs("li",{className:"mod-mini",children:[a.jsx("span",{className:"mod-mini-name",children:g.id}),a.jsx("span",{className:`mod-mini-pill ${g.enabled?"on":"off"}`,children:g.enabled?"on":"off"})]},g.id))]})]}),a.jsxs("div",{className:"chat-info-card",children:[a.jsxs("button",{type:"button",className:"chat-info-card-title chat-info-card-title-button",onClick:()=>p(g=>!g),"aria-expanded":h,children:[a.jsx(hx,{size:14})," Slash commands",a.jsx("span",{className:"chat-info-card-count",children:o.length}),a.jsx(Ss,{size:12,className:`chat-info-card-chevron ${h?"open":""}`})]}),h&&a.jsx("ul",{className:"mod-mini-list",children:b.map(g=>a.jsxs("li",{children:[a.jsx("code",{children:g.cmd}),a.jsx("span",{className:"muted",children:g.desc})]},g.cmd))})]})]})}function rC({snapshot:e,settings:t,setActiveTab:n,initialTaskId:r,onClearTaskId:i}){const l=bx(),s=kx(),o=A2(e,t,r??"");w.useEffect(()=>{o.setToast({error:O=>l.error(O),success:O=>l.success(O),info:O=>l.info(O),warning:O=>l.warning(O)})},[o,l]);const[u,d]=w.useState(""),[c,f]=w.useState(t.defaultAgent||"odin"),[m,h]=w.useState(t.defaultModel||""),[p,x]=w.useState([]),[b,y]=w.useState(!1),[g,v]=w.useState(!1),C=w.useRef(null),{allCommands:z,suggestions:E,setQuery:A}=L2(e);w.useEffect(()=>{A(u)},[u,A]);const L=()=>{var O;return(O=C.current)==null?void 0:O.click()},I=O=>{const W=O.target.files;if(!W)return;const de=[];for(let ee=0;ee<W.length;ee++)de.push(W[ee].name);x(ee=>{const R=de.filter(V=>!ee.includes(V));return[...ee,...R]}),C.current&&(C.current.value="")},k=async()=>{const O=u.trim();if(!O)return;d(""),A(""),(await o.onSend(O,c,m,p)).ok&&o.jumpToLatest()},j=async()=>{o.busy.create||(await o.onCreateSession(),y(!1))},P=O=>{s.open({title:"Delete message?",children:a.jsx("p",{style:{margin:0},children:"This action cannot be undone."}),footer:a.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"flex-end"},children:[a.jsx(pr,{variant:"secondary",size:"sm",onClick:()=>s.close(),children:"Cancel"}),a.jsx(pr,{variant:"danger",size:"sm",onClick:()=>{s.close(),o.deleteMessage(O)},children:"Delete"})]})})},B=(O,W)=>{s.open({title:"Delete session?",children:a.jsxs("p",{style:{margin:0},children:["Delete ",a.jsx("strong",{children:W}),"? This cannot be undone."]}),footer:a.jsxs("div",{style:{display:"flex",gap:8,justifyContent:"flex-end"},children:[a.jsx(pr,{variant:"secondary",size:"sm",onClick:()=>s.close(),children:"Cancel"}),a.jsx(pr,{variant:"danger",size:"sm",onClick:async()=>{s.close(),await o.deleteSession(O)},children:"Delete"})]})})};return a.jsxs("div",{className:"chat-shell",children:[a.jsx(Tx,{activeProject:e.activeProject,sessionCount:o.sessions.length,sessionsOpen:b,infoOpen:g,onToggleSessions:()=>y(O=>!O),onToggleInfo:()=>v(O=>!O),onOpenOverview:()=>n==null?void 0:n("overview")}),a.jsxs("div",{className:"chat-body",children:[a.jsx("aside",{className:`chat-sessions ${b?"":"chat-sessions-hidden"}`,children:a.jsx(eC,{sessions:o.sessions,opencodeSessions:o.opencodeSessions,activeSessionId:o.sessionId,activeOpencodeSessionId:o.activeOpencodeSessionId,activeProject:e.activeProject,onCreateSession:j,onSelectSession:o.selectBizarSession,onSelectOpencodeSession:O=>o.loadOpencodeSession(O.id),creating:o.busy.create})}),a.jsxs("main",{className:"chat-main",children:[a.jsx(j2,{messages:o.activeSource==="opencode"?o.opencodeMessages:o.bizarMessages,loading:o.loading,activeProject:e.activeProject,sessionId:o.activeSource==="opencode"?o.activeOpencodeSessionId??o.sessionId:o.sessionId,pinned:o.pinned,activeSource:o.activeSource,onPickSuggestion:O=>d(O),onCopy:O=>o.copyMessage(O),onDelete:P,onTogglePin:o.togglePin,onRegenerate:o.onRegenerate}),a.jsx(tC,{agent:c,setAgent:f,model:m,setModel:h,text:u,setText:d,sending:o.sending,activeSource:o.activeSource,onSend:k,attachments:p,setAttachments:x,suggestions:E,onPickSuggestion:O=>d(`${O.split(" ")[0]} `),agents:e.agents||[],onAttach:L,sessionsOpen:b,infoOpen:g}),a.jsx("input",{ref:C,type:"file",multiple:!0,style:{display:"none"},onChange:I})]}),a.jsx("aside",{className:`chat-info ${g?"":"chat-info-hidden"}`,children:a.jsx(nC,{sessionId:o.activeSource==="opencode"?o.activeOpencodeSessionId??o.sessionId:o.sessionId,messages:o.activeSource==="opencode"?o.opencodeMessages:o.bizarMessages,pinned:o.pinned,agent:c,model:m,agents:e.agents||[],mcps:e.mcps||[],allCommands:z,activeSource:o.activeSource,onDelete:()=>{const O=o.activeSource==="opencode"?o.activeOpencodeSessionId:o.sessionId;O&&B(O,O)}})})]})]})}function iC({onBack:e}){const[t,n]=w.useState([]),[r,i]=w.useState(!0),[l,s]=w.useState({}),[o,u]=w.useState(!1),d=async()=>{try{const x=await q.get("/config"),b=Object.entries(x).map(([y,g])=>({key:y,value:g,type:c(g)}));n(b),s(Object.fromEntries(Object.entries(x).map(([y,g])=>[y,g])))}catch{}finally{i(!1)}};w.useEffect(()=>{d()},[]);const c=x=>typeof x=="boolean"?"boolean":typeof x=="number"?"number":typeof x=="string"?"string":Array.isArray(x)?"array":x&&typeof x=="object"?"object":"unknown",f=(x,b)=>{s(y=>({...y,[x]:b}))},m=async()=>{u(!0);try{await q.patch("/config",l),await d()}catch{}finally{u(!1)}},h=(x,b)=>{s(y=>({...y,[x]:b}))},p=x=>{const b=l[x.key];switch(x.type){case"boolean":return a.jsxs("label",{className:"mobile-toggle",children:[a.jsx("input",{type:"checkbox",checked:!!b,onChange:y=>f(x.key,y.target.checked)}),a.jsx("span",{className:"mobile-toggle-slider"})]});case"number":return a.jsx("input",{className:"mobile-input mobile-input-sm",type:"number",inputMode:"numeric",value:String(b??""),onChange:y=>f(x.key,Number(y.target.value))});case"string":return a.jsx("input",{className:"mobile-input mobile-input-sm",type:"text",value:String(b??""),onChange:y=>f(x.key,y.target.value)});case"object":case"array":return a.jsx("textarea",{className:"mobile-input mobile-input-sm",rows:2,value:JSON.stringify(b??null,null,2),onChange:y=>{try{f(x.key,JSON.parse(y.target.value))}catch{}}});default:return a.jsx("span",{className:"mobile-setting-value mono",children:String(b??"null")})}};return a.jsxs("div",{className:"mobile-view",children:[a.jsxs("div",{className:"mobile-tasks-toolbar",children:[a.jsxs("span",{style:{fontSize:14,color:"var(--text-muted)",flex:1},children:[t.length," config entries"]}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>d(),"aria-label":"Refresh",children:a.jsx(_t,{size:16})}),a.jsxs("button",{type:"button",className:"mobile-btn",disabled:o,onClick:()=>m(),children:[a.jsx(Fm,{size:14})," ",o?"Saving…":"Save all"]})]}),r?a.jsx("div",{className:"mobile-loading",children:a.jsx("p",{children:"Loading…"})}):t.length===0?a.jsxs("div",{className:"mobile-empty",children:[a.jsx(Pr,{size:40}),a.jsx("p",{children:"No config entries."})]}):a.jsx("div",{className:"mobile-config-list",children:t.map(x=>a.jsxs("div",{className:"mobile-config-row",children:[a.jsxs("div",{className:"mobile-config-key",children:[a.jsx("span",{className:"mono",children:x.key}),a.jsx("span",{className:"mobile-config-type",children:x.type})]}),a.jsx("div",{className:"mobile-config-value",children:p(x)}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>h(x.key,x.defaultValue),"aria-label":"Reset to default",title:"Reset",children:a.jsx(ax,{size:14})})]},x.key))})]})}function lC({onBack:e}){const[t,n]=w.useState([]),[r,i]=w.useState(!0),[l,s]=w.useState(null),[o,u]=w.useState(""),d=async()=>{try{const h=await q.get("/history");if(Array.isArray(h.history)){n(h.history);return}if(Array.isArray(h.projects)){const p=new Map;for(const x of h.events||[]){const b=x.projectId;if(!b)continue;const y=p.get(b);(!y||new Date(x.ts).getTime()>new Date(y.ts).getTime())&&p.set(b,x)}n(h.projects.map(x=>{const b=p.get(x.id);return{id:x.id,ts:x.lastAccessed||(b==null?void 0:b.ts)||new Date(0).toISOString(),agent:x.name,taskCount:x.tasks.total,summary:`${x.path} · ${x.tasks.done}/${x.tasks.total} done · ${x.plans} plan${x.plans===1?"":"s"}`,output:b?`${b.kind}${b.text?` — ${b.text}`:""}`:"No recent events."}}));return}n([])}catch{}finally{i(!1)}};w.useEffect(()=>{d()},[]);const c=h=>{if(!h)return"—";const p=Math.floor(h/1e3);if(p<60)return`${p}s`;const x=Math.floor(p/60),b=p%60;return`${x}m ${b}s`},f=h=>new Date(h).toLocaleString(),m=o.trim()?t.filter(h=>{const p=o.toLowerCase();return(h.agent||"session").toLowerCase().includes(p)||(h.summary||"").toLowerCase().includes(p)||(h.output||"").toLowerCase().includes(p)}):t;return a.jsxs("div",{className:"mobile-view",children:[a.jsxs("div",{className:"mobile-tasks-toolbar",children:[a.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search history…",value:o,onChange:h=>u(h.target.value),style:{flex:1}}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>d(),"aria-label":"Refresh",children:a.jsx(_t,{size:16})})]}),r?a.jsx("div",{className:"mobile-loading",children:a.jsx("p",{children:"Loading…"})}):m.length===0?a.jsxs("div",{className:"mobile-empty",children:[a.jsx(ka,{size:40}),a.jsx("p",{children:t.length===0?"No history yet.":"No matching sessions."})]}):a.jsx("div",{className:"mobile-card-list",children:m.map(h=>a.jsxs("button",{type:"button",className:"mobile-list-item mobile-list-item-interactive",onClick:()=>s(h),children:[a.jsx("div",{className:"mobile-list-icon",children:a.jsx(ka,{size:16})}),a.jsxs("div",{className:"mobile-list-content",children:[a.jsx("span",{className:"mobile-list-title",children:h.agent||"Session"}),a.jsxs("span",{className:"mobile-list-meta",children:[f(h.ts),h.duration?` · ${c(h.duration)}`:"",h.taskCount?` · ${h.taskCount} tasks`:""]})]})]},h.id))}),l&&a.jsxs(Dt,{open:!0,onClose:()=>s(null),title:"Session Detail",children:[a.jsxs("div",{className:"mobile-agent-detail-meta",children:[a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Agent"}),a.jsx("span",{children:l.agent||"—"})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Started"}),a.jsx("span",{children:f(l.ts)})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Duration"}),a.jsx("span",{children:c(l.duration)})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Tasks"}),a.jsx("span",{children:l.taskCount||0})]})]}),l.summary&&a.jsxs("div",{style:{marginTop:12},children:[a.jsx("h4",{style:{fontSize:12,color:"var(--text-muted)",marginBottom:4},children:"Summary"}),a.jsx("p",{style:{fontSize:13},children:l.summary})]}),l.output&&a.jsxs("div",{style:{marginTop:12},children:[a.jsx("h4",{style:{fontSize:12,color:"var(--text-muted)",marginBottom:4},children:"Output"}),a.jsxs("pre",{className:"mono",style:{fontSize:11,whiteSpace:"pre-wrap",wordBreak:"break-all",background:"var(--bg-elev-2)",padding:8,borderRadius:6},children:[l.output.slice(0,1e3),l.output.length>1e3?"…":""]})]})]})]})}function sC({snapshot:e,onBack:t}){const[n,r]=w.useState(e.mods||[]),[i,l]=w.useState(!e.mods),[s,o]=w.useState(""),[u,d]=w.useState("all"),[c,f]=w.useState(null),m=async()=>{try{const x=await q.get("/mods");r(x.mods||[])}catch{}finally{l(!1)}};w.useEffect(()=>{e.mods?(r(e.mods),l(!1)):m()},[e.mods]);const h=async(x,b)=>{try{await q.patch(`/mods/${encodeURIComponent(x)}`,{enabled:b}),r(y=>y.map(g=>g.id===x?{...g,enabled:b}:g)),(c==null?void 0:c.id)===x&&f(y=>y&&{...y,enabled:b})}catch{}},p=n.filter(x=>{if(u==="enabled"&&!x.enabled||u==="disabled"&&x.enabled)return!1;if(s){const b=s.toLowerCase();return x.name.toLowerCase().includes(b)||x.description.toLowerCase().includes(b)}return!0});return a.jsxs("div",{className:"mobile-view",children:[a.jsxs("div",{className:"mobile-tasks-toolbar",children:[a.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search mods…",value:s,onChange:x=>o(x.target.value),style:{flex:1}}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>m(),"aria-label":"Refresh",children:a.jsx(_t,{size:16})})]}),a.jsx("div",{className:"mobile-search-scopes",children:["all","enabled","disabled"].map(x=>a.jsx("button",{type:"button",className:`mobile-scope-chip ${u===x?"active":""}`,onClick:()=>d(x),children:x.charAt(0).toUpperCase()+x.slice(1)},x))}),i?a.jsx("div",{className:"mobile-loading",children:a.jsx("p",{children:"Loading…"})}):p.length===0?a.jsxs("div",{className:"mobile-empty",children:[a.jsx(Pr,{size:40}),a.jsx("p",{children:"No mods found."})]}):a.jsx("div",{className:"mobile-card-list",children:p.map(x=>a.jsxs("button",{type:"button",className:"mobile-list-item mobile-list-item-interactive",onClick:()=>f(x),children:[a.jsx("div",{className:"mobile-list-icon",children:a.jsx(Pr,{size:16})}),a.jsxs("div",{className:"mobile-list-content",children:[a.jsx("span",{className:"mobile-list-title",children:x.name}),a.jsxs("span",{className:"mobile-list-meta",children:["v",x.version," · ",x.author]})]}),a.jsx("span",{className:`mobile-list-badge ${x.enabled?"badge-on":"badge-off"}`,children:x.enabled?"on":"off"})]},x.id))}),c&&a.jsx(Dt,{open:!0,onClose:()=>f(null),title:c.name,actions:a.jsx("div",{className:"mobile-task-detail-actions",children:a.jsxs("button",{type:"button",className:"mobile-btn",style:{flex:1},onClick:()=>{c&&h(c.id,!c.enabled)},children:[a.jsx(Om,{size:14})," ",c.enabled?"Disable":"Enable"]})}),children:a.jsxs("div",{className:"mobile-agent-detail",children:[a.jsx("p",{className:"mobile-agent-detail-desc",children:c.description||"No description."}),a.jsxs("div",{className:"mobile-agent-detail-meta",children:[a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Version"}),a.jsx("span",{className:"mono",children:c.version})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Author"}),a.jsx("span",{children:c.author})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Bizar"}),a.jsx("span",{className:"mono",children:c.bizar})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Type"}),a.jsx("span",{children:c.type})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Permissions"}),a.jsx("span",{children:c.permissions.length})]}),c.installedAt&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Installed"}),a.jsx("span",{children:new Date(c.installedAt).toLocaleDateString()})]})]})]})})]})}function oC({snapshot:e,onNavigate:t}){var s,o,u;const[n,r]=w.useState(""),i=[{id:"artifacts",icon:qn,label:"Plans",count:e.artifacts.length||0,desc:"Visual artifacts with elements & comments"},{id:"agents",icon:Dr,label:"Agents",count:((s=e.agents)==null?void 0:s.length)||0,desc:"The Norse pantheon"},{id:"skills",icon:Pr,label:"Skills",count:null,desc:"Agent capabilities & tools"},{id:"mods",icon:Pr,label:"Mods",count:((o=e.mods)==null?void 0:o.length)||0,desc:"Installed modifications"},{id:"schedules",icon:va,label:"Schedules",count:((u=e.schedules)==null?void 0:u.length)||0,desc:"Cron jobs & automated tasks"},{id:"history",icon:ka,label:"History",count:null,desc:"Past sessions & outputs"},{id:"config",icon:Bm,label:"Config",count:null,desc:"Key-value configuration editor"}],l=n.trim()?i.filter(d=>d.label.toLowerCase().includes(n.toLowerCase())||d.desc.toLowerCase().includes(n.toLowerCase())):i;return a.jsxs("div",{className:"mobile-view",children:[a.jsx("div",{className:"mobile-tasks-toolbar",children:a.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search…",value:n,onChange:d=>r(d.target.value),style:{flex:1}})}),a.jsx("div",{className:"mobile-card-list",children:l.map(d=>{const c=d.icon;return a.jsxs("button",{type:"button",className:"mobile-more-nav-item",onClick:()=>t(d.id),children:[a.jsx("div",{className:"mobile-more-nav-icon",children:a.jsx(c,{size:20})}),a.jsxs("div",{className:"mobile-more-nav-content",children:[a.jsxs("span",{className:"mobile-more-nav-label",children:[d.label,d.count!=null&&a.jsx("span",{className:"mobile-more-nav-count",children:d.count})]}),a.jsx("span",{className:"mobile-more-nav-desc",children:d.desc})]}),a.jsx(dd,{size:16,className:"mobile-more-nav-arrow"})]},d.id)})}),a.jsx("div",{className:"mobile-more-footer",children:a.jsxs("a",{href:"/?desktop=1",className:"mobile-more-link",children:["Switch to Desktop ",a.jsx(dd,{size:14})]})})]})}const Ju=[{id:"task",label:"Task",color:"var(--info)"},{id:"note",label:"Note",color:"var(--text-dim)"},{id:"decision",label:"Decision",color:"var(--accent)"},{id:"question",label:"Question",color:"var(--warning)"}];function jo(e){var t;return((t=Ju.find(n=>n.id===e))==null?void 0:t.color)||"var(--text-dim)"}function aC({type:e,size:t=12}){switch(e){case"task":return a.jsx(es,{size:t,style:{color:"var(--info)"}});case"note":return a.jsx(md,{size:t,style:{color:"var(--text-dim)"}});case"decision":return a.jsx(es,{size:t,style:{color:"var(--accent)"}});case"question":return a.jsx(K1,{size:t,style:{color:"var(--warning)"}});default:return a.jsx(md,{size:t})}}function uC({slug:e,onBack:t}){const[n,r]=w.useState(null),[i,l]=w.useState(null),[s,o]=w.useState(!0),[u,d]=w.useState(!1),[c,f]=w.useState(null),[m,h]=w.useState(!1),[p,x]=w.useState(!1),[b,y]=w.useState(!1),[g,v]=w.useState(""),C=async()=>{o(!0);try{const I=await q.get(`/plans/${encodeURIComponent(e)}`);r(I.canvas),l(I.meta)}catch{}finally{o(!1)}};w.useEffect(()=>{C()},[e]);const z=async(I,k,j)=>{try{const P=((n==null?void 0:n.elements)||[]).reduce((O,W)=>Math.max(O,W.x||0),40),B=((n==null?void 0:n.elements)||[]).reduce((O,W)=>Math.max(O,W.y||0),40);await q.post(`/plans/${encodeURIComponent(e)}/elements`,{type:I,title:k,content:j,x:20+P,y:20+B,width:240,height:120}),await C(),x(!1)}catch{}},E=async(I,k)=>{try{await q.put(`/plans/${encodeURIComponent(e)}/elements/${encodeURIComponent(I)}`,k),await C(),f(null)}catch{}},A=async I=>{if(confirm("Delete this element?"))try{await q.del(`/plans/${encodeURIComponent(e)}/elements/${encodeURIComponent(I)}`),f(null),await C()}catch{}},L=async(I,k)=>{try{const j=k?`/plans/${encodeURIComponent(e)}/elements/${encodeURIComponent(k)}/comments`:`/plans/${encodeURIComponent(e)}/comments`;await q.post(j,{text:I,elementId:k}),await C(),v(""),y(!1)}catch{}};return s||!n||!i?a.jsx("div",{className:"mobile-view",children:a.jsx("div",{className:"mobile-loading",children:a.jsx("p",{children:"Loading canvas…"})})}):a.jsxs("div",{className:"mobile-view mobile-view-canvas",children:[a.jsxs("div",{className:"mobile-canvas-bar",children:[a.jsxs("div",{className:"mobile-canvas-meta",children:[a.jsx("span",{className:"mobile-canvas-title",children:i.title||e}),a.jsx("span",{className:"mobile-canvas-status","data-status":i.status,children:i.status})]}),a.jsxs("div",{className:"mobile-canvas-actions",children:[a.jsx("button",{type:"button",className:`mobile-icon-btn ${u?"active":""}`,onClick:()=>d(I=>!I),"aria-label":u?"Done editing":"Edit",children:a.jsx(Au,{size:16})}),a.jsxs("button",{type:"button",className:"mobile-icon-btn",onClick:()=>h(I=>!I),"aria-label":"Comments",children:[a.jsx(On,{size:16}),n.comments.length>0&&a.jsx("span",{className:"mobile-canvas-comment-count",children:n.comments.length})]}),u&&a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>x(!0),"aria-label":"Add element",children:a.jsx(xt,{size:16})})]})]}),a.jsxs("div",{className:"mobile-canvas-elements",children:[n.elements.length===0&&a.jsxs("div",{className:"mobile-empty",children:[a.jsx("p",{children:"No elements yet."}),u&&a.jsxs("button",{type:"button",className:"mobile-btn",onClick:()=>x(!0),children:[a.jsx(xt,{size:14})," Add Element"]})]}),n.elements.map(I=>a.jsxs("button",{type:"button",className:`mobile-canvas-element ${(c==null?void 0:c.id)===I.id?"selected":""}`,style:{borderColor:jo(I.type)},onClick:()=>{u&&f(I)},"aria-pressed":(c==null?void 0:c.id)===I.id,children:[a.jsxs("div",{className:"mobile-canvas-el-header",style:{background:`${jo(I.type)}18`},children:[a.jsx(aC,{type:I.type,size:12}),a.jsx("span",{className:"mobile-canvas-el-type",style:{color:jo(I.type)},children:I.type}),I.status&&I.status!=="open"&&a.jsx("span",{className:"mobile-canvas-el-status",children:I.status})]}),a.jsx("div",{className:"mobile-canvas-el-title",children:I.title||"Untitled"}),I.content&&a.jsxs("div",{className:"mobile-canvas-el-content",children:[I.content.slice(0,120),I.content.length>120?"…":""]}),a.jsxs("div",{className:"mobile-canvas-el-comments",children:[a.jsx(On,{size:10}),n.comments.filter(k=>k.elementId===I.id).length]})]},I.id))]}),m&&a.jsxs("div",{className:"mobile-canvas-comments",children:[a.jsxs("div",{className:"mobile-canvas-comments-header",children:[a.jsxs("h4",{children:["Comments (",n.comments.length,")"]}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>h(!1),children:a.jsx(Zn,{size:16})})]}),a.jsxs("div",{className:"mobile-canvas-comment-list",children:[n.comments.length===0&&a.jsx("p",{className:"mobile-empty-inline",children:"No comments yet."}),n.comments.map(I=>a.jsxs("div",{className:"mobile-canvas-comment",children:[a.jsxs("div",{className:"mobile-canvas-comment-head",children:[a.jsx("span",{className:"mono",children:I.author}),a.jsx("span",{className:"muted",children:Sr(I.created)})]}),a.jsx("div",{className:"mobile-canvas-comment-text",children:I.text})]},I.id))]}),a.jsxs("div",{className:"mobile-canvas-comment-input",children:[a.jsx("textarea",{className:"mobile-input",rows:2,placeholder:"Add a comment…",value:g,onChange:I=>v(I.target.value)}),a.jsx("button",{type:"button",className:"mobile-btn",disabled:!g.trim(),onClick:()=>{L(g.trim(),null)},children:"Post"})]})]}),c&&a.jsx(Dt,{open:!0,onClose:()=>f(null),title:`Edit ${c.title||c.type}`,actions:a.jsxs("div",{className:"mobile-task-detail-actions",children:[a.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-danger",onClick:()=>A(c.id),children:[a.jsx(_r,{size:14})," Delete"]}),a.jsxs("button",{type:"button",className:"mobile-btn",onClick:()=>y(!0),children:[a.jsx(On,{size:14})," Comment"]})]}),children:a.jsx(cC,{element:c,onSave:I=>E(c.id,I),onClose:()=>f(null)})}),a.jsx(dC,{open:p,onClose:()=>x(!1),onAdd:z}),a.jsx(Tn,{open:b,onClose:()=>y(!1),title:"Add Comment",actions:a.jsxs("button",{type:"button",className:"mobile-btn",style:{width:"100%"},disabled:!g.trim(),onClick:()=>{L(g.trim(),(c==null?void 0:c.id)||null),y(!1)},children:[a.jsx(On,{size:14})," Post"]}),children:a.jsx("textarea",{className:"mobile-input",rows:3,placeholder:"Your comment…",value:g,onChange:I=>v(I.target.value),autoFocus:!0})})]})}function cC({element:e,onSave:t,onClose:n}){const[r,i]=w.useState(e.type),[l,s]=w.useState(e.title||""),[o,u]=w.useState(e.content||""),[d,c]=w.useState(e.status||"open");return a.jsxs("form",{className:"mobile-task-form",onSubmit:f=>{f.preventDefault(),t({type:r,title:l,content:o,status:d}),n()},children:[a.jsx("label",{className:"mobile-field-label",children:"Type"}),a.jsx("select",{className:"mobile-input",value:r,onChange:f=>i(f.target.value),children:Ju.map(f=>a.jsx("option",{value:f.id,children:f.label},f.id))}),a.jsx("label",{className:"mobile-field-label",children:"Title"}),a.jsx("input",{className:"mobile-input",type:"text",value:l,onChange:f=>s(f.target.value)}),a.jsx("label",{className:"mobile-field-label",children:"Status"}),a.jsx("input",{className:"mobile-input",type:"text",value:d,onChange:f=>c(f.target.value),placeholder:"open / done / blocked"}),a.jsx("label",{className:"mobile-field-label",children:"Content (markdown)"}),a.jsx("textarea",{className:"mobile-input",rows:4,value:o,onChange:f=>u(f.target.value)}),a.jsx("button",{type:"submit",className:"mobile-btn",style:{width:"100%",marginTop:8},children:"Save"})]})}function dC({open:e,onClose:t,onAdd:n}){const[r,i]=w.useState("task"),[l,s]=w.useState(""),[o,u]=w.useState(""),d=c=>{c.preventDefault(),l.trim()&&(n(r,l.trim(),o.trim()),s(""),u(""))};return a.jsx(Tn,{open:e,onClose:t,title:"Add Element",actions:a.jsxs("button",{type:"submit",form:"add-el-form",className:"mobile-btn",style:{width:"100%"},children:[a.jsx(xt,{size:14})," Add"]}),children:a.jsxs("form",{id:"add-el-form",onSubmit:d,className:"mobile-task-form",children:[a.jsx("label",{className:"mobile-field-label",children:"Type"}),a.jsx("select",{className:"mobile-input",value:r,onChange:c=>i(c.target.value),children:Ju.map(c=>a.jsx("option",{value:c.id,children:c.label},c.id))}),a.jsx("label",{className:"mobile-field-label",children:"Title *"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:"Element title",value:l,onChange:c=>s(c.target.value),autoFocus:!0,required:!0}),a.jsx("label",{className:"mobile-field-label",children:"Content (markdown)"}),a.jsx("textarea",{className:"mobile-input",rows:3,placeholder:"Description…",value:o,onChange:c=>u(c.target.value)})]})})}function fC({snapshot:e,onBack:t,onOpenArtifact:n}){const[r,i]=w.useState(e.artifacts||[]),[l,s]=w.useState(!e.artifacts),[o,u]=w.useState(""),[d,c]=w.useState(!1),[f,m]=w.useState(""),[h,p]=w.useState(""),x=async()=>{try{const g=await q.get("/artifacts");i(g.artifacts||[])}catch{}finally{s(!1)}},b=async()=>{if(f.trim())try{const g=await q.post("/artifacts",{slug:f.trim(),title:h.trim()||void 0});c(!1),m(""),p(""),n(g.slug)}catch{}},y=o.trim()?r.filter(g=>(g.title||g.slug||"").toLowerCase().includes(o.toLowerCase())):r;return a.jsxs("div",{className:"mobile-view",children:[a.jsxs("div",{className:"mobile-tasks-toolbar",children:[a.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search artifacts…",value:o,onChange:g=>u(g.target.value),style:{flex:1}}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>x(),"aria-label":"Refresh",children:a.jsx(_t,{size:16})})]}),a.jsx("div",{style:{marginBottom:12},children:a.jsxs("button",{type:"button",className:"mobile-btn",style:{width:"100%"},onClick:()=>c(!0),children:[a.jsx(xt,{size:14})," New Artifact"]})}),l?a.jsx("div",{className:"mobile-loading",children:a.jsx("p",{children:"Loading…"})}):y.length===0?a.jsxs("div",{className:"mobile-empty",children:[a.jsx(qn,{size:40}),a.jsx("p",{children:"No artifacts yet."})]}):a.jsx("div",{className:"mobile-card-list",children:y.map(g=>a.jsxs("button",{type:"button",className:"mobile-list-item mobile-list-item-interactive",onClick:()=>n(g.slug),children:[a.jsx("div",{className:"mobile-list-icon",children:a.jsx(qn,{size:16})}),a.jsxs("div",{className:"mobile-list-content",children:[a.jsx("span",{className:"mobile-list-title",children:g.title||g.slug}),a.jsxs("span",{className:"mobile-list-meta",children:[g.status," · ",g.source,g.elementCount!=null?` · ${g.elementCount} elements`:"",g.commentCount!=null?` · ${g.commentCount} comments`:""]})]}),a.jsx("span",{className:"mobile-list-badge","data-status":g.status,children:g.status})]},g.slug))}),a.jsx(Tn,{open:d,onClose:()=>c(!1),title:"New Artifact",actions:a.jsxs("button",{type:"submit",form:"new-plan-form",className:"mobile-btn",style:{width:"100%"},children:[a.jsx(xt,{size:14})," Create"]}),children:a.jsxs("form",{id:"new-plan-form",onSubmit:g=>{g.preventDefault(),b()},className:"mobile-task-form",children:[a.jsx("label",{className:"mobile-field-label",children:"Slug *"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:"my-plan",pattern:"[a-z0-9][a-z0-9-]{0,63}",value:f,onChange:g=>m(g.target.value),autoFocus:!0,required:!0}),a.jsx("label",{className:"mobile-field-label",children:"Title (optional)"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:"My Artifact",value:h,onChange:g=>p(g.target.value)})]})})]})}const hC=["cron","interval","once"],mC=["command","agent","webhook"],xf=["UTC","America/New_York","America/Los_Angeles","Europe/London","Europe/Berlin","Asia/Tokyo"],cg=Array.from({length:24},(e,t)=>({value:t,label:t===0?"12 AM":t<12?`${t} AM`:t===12?"12 PM":`${t-12} PM`})),pC=Array.from({length:12},(e,t)=>t*5),dg=[{value:"*",label:"Every day"},{value:"0",label:"Sun"},{value:"1",label:"Mon"},{value:"2",label:"Tue"},{value:"3",label:"Wed"},{value:"4",label:"Thu"},{value:"5",label:"Fri"},{value:"6",label:"Sat"}],gC=[{value:"s",label:"sec"},{value:"m",label:"min"},{value:"h",label:"hr"},{value:"d",label:"day"}];function yC({snapshot:e}){var b;const[t,n]=w.useState(e.schedules||[]),[r,i]=w.useState(!e.schedules),[l,s]=w.useState(""),[o,u]=w.useState(null),[d,c]=w.useState({open:!1}),f=async()=>{try{const y=await q.get("/schedules");n(y.schedules||[])}catch{}finally{i(!1)}};w.useEffect(()=>{e.schedules?(n(e.schedules),i(!1)):f()},[e.schedules]);const m=async(y,g)=>{try{await q.patch(`/schedules/${encodeURIComponent(y)}`,{enabled:g}),n(v=>v.map(C=>C.id===y?{...C,enabled:g}:C)),(o==null?void 0:o.id)===y&&u(v=>v&&{...v,enabled:g})}catch{}},h=async y=>{if(confirm("Delete this schedule?"))try{await q.del(`/schedules/${encodeURIComponent(y)}`),n(g=>g.filter(v=>v.id!==y)),(o==null?void 0:o.id)===y&&u(null)}catch{}},p=async y=>{try{await q.post(`/schedules/${encodeURIComponent(y)}/trigger`)}catch{}},x=l.trim()?t.filter(y=>y.name.toLowerCase().includes(l.toLowerCase())):t;return a.jsxs("div",{className:"mobile-view",children:[a.jsxs("div",{className:"mobile-tasks-toolbar",children:[a.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search schedules…",value:l,onChange:y=>s(y.target.value),style:{flex:1}}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>f(),"aria-label":"Refresh",children:a.jsx(_t,{size:16})}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>c({open:!0}),"aria-label":"New schedule",children:a.jsx(xt,{size:16})})]}),r?a.jsx("div",{className:"mobile-loading",children:a.jsx("p",{children:"Loading…"})}):x.length===0?a.jsxs("div",{className:"mobile-empty",children:[a.jsx(va,{size:40}),a.jsx("p",{children:"No schedules found."})]}):a.jsx("div",{className:"mobile-card-list",children:x.map(y=>a.jsxs("button",{type:"button",className:"mobile-list-item mobile-list-item-interactive",onClick:()=>u(y),children:[a.jsx("div",{className:"mobile-list-icon",children:a.jsx(va,{size:16})}),a.jsxs("div",{className:"mobile-list-content",children:[a.jsx("span",{className:"mobile-list-title",children:y.name}),a.jsxs("span",{className:"mobile-list-meta",children:[wf(y)," ·"," ",y.nextRun?`next ${kf(y.nextRun,y.timezone)}`:"no next run"]})]}),a.jsx("span",{className:`mobile-list-badge ${y.enabled?"badge-on":"badge-off"}`,children:y.enabled?"on":"off"})]},y.id))}),o&&a.jsx(Dt,{open:!0,onClose:()=>u(null),title:o.name,actions:a.jsxs("div",{className:"mobile-task-detail-actions",children:[a.jsxs("button",{type:"button",className:"mobile-btn",onClick:()=>{o&&p(o.id)},children:[a.jsx(Zl,{size:14})," Trigger now"]}),a.jsx("button",{type:"button",className:`mobile-btn ${o.enabled?"mobile-btn-secondary":""}`,onClick:()=>{o&&m(o.id,!o.enabled)},children:o.enabled?"Disable":"Enable"}),a.jsxs("button",{type:"button",className:"mobile-btn",onClick:()=>{o&&(c({open:!0,initial:o}),u(null))},children:[a.jsx(Au,{size:14})," Edit"]}),a.jsx("button",{type:"button",className:"mobile-btn mobile-btn-danger",onClick:()=>{o&&h(o.id)},children:a.jsx(_r,{size:14})})]}),children:a.jsx("div",{className:"mobile-agent-detail",children:a.jsxs("div",{className:"mobile-agent-detail-meta",children:[a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Type"}),a.jsx("span",{children:o.type})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Schedule"}),a.jsx("span",{className:"mono",children:wf(o)||o.schedule})]}),o.timezone&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Timezone"}),a.jsx("span",{className:"mono",children:o.timezone})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Action"}),a.jsxs("span",{children:[o.action.type,": ",o.action.target]})]}),o.action.type==="agent"&&o.action.prompt&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Prompt"}),a.jsx("span",{style:{fontSize:12},children:o.action.prompt})]}),((b=o.budgetCheck)==null?void 0:b.skipIfBudgetLow)&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Budget gate"}),a.jsxs("span",{children:["skip if ≥ ",o.budgetCheck.maxConcurrent??6," concurrent"]})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Next run"}),a.jsx("span",{children:o.nextRun?kf(o.nextRun,o.timezone):"—"})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Last run"}),a.jsx("span",{children:o.lastRun?kC(o.lastRun):"—"})]}),o.lastResult&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Last result"}),a.jsx("span",{style:{fontSize:12},children:o.lastResult})]}),o.lastError&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Last error"}),a.jsx("span",{style:{fontSize:12},children:o.lastError})]})]})})}),a.jsx(vC,{open:d.open,initial:d.initial,onClose:()=>c({open:!1}),onSaved:()=>{c({open:!1}),f()}})]})}function vf(e){var r,i;if(!e)return{name:"",type:"cron",cronMinute:0,cronHour:13,cronDow:"0",intervalN:30,intervalUnit:"m",onceAt:"",timezone:"UTC",actionType:"agent",actionTarget:"",actionPrompt:"",skipIfBudgetLow:!1,maxConcurrent:6,enabled:!0};const t=e.type==="cron"?fg(e.schedule):null,n=e.type==="interval"?wC(e.schedule):null;return{name:e.name||"",type:e.type,cronMinute:(t==null?void 0:t.minute)??0,cronHour:(t==null?void 0:t.hour)??9,cronDow:(t==null?void 0:t.dow)??"*",intervalN:(n==null?void 0:n.n)??30,intervalUnit:(n==null?void 0:n.unit)??"m",onceAt:e.type==="once"?bC(e.schedule):"",timezone:e.timezone||"UTC",actionType:e.action.type,actionTarget:e.action.target||"",actionPrompt:e.action.prompt||"",skipIfBudgetLow:!!((r=e.budgetCheck)!=null&&r.skipIfBudgetLow),maxConcurrent:Number.isFinite((i=e.budgetCheck)==null?void 0:i.maxConcurrent)?e.budgetCheck.maxConcurrent:6,enabled:e.enabled!==!1}}function xC(e){if(e.type==="cron")return`${e.cronMinute} ${e.cronHour} * * ${e.cronDow}`;if(e.type==="interval")return`${e.intervalN}${e.intervalUnit}`;if(!e.onceAt)return"";try{return new Date(e.onceAt).toISOString()}catch{return e.onceAt}}function vC({open:e,initial:t,onClose:n,onSaved:r}){const[i,l]=w.useState(()=>vf(t)),[s,o]=w.useState(!1);w.useEffect(()=>{e&&l(vf(t))},[e,t]);const u=(c,f)=>{l(m=>({...m,[c]:f}))},d=async c=>{if(c.preventDefault(),!i.name.trim())return;const f=xC(i);if(f){o(!0);try{const m={name:i.name.trim(),type:i.type,schedule:f,timezone:i.timezone,action:{type:i.actionType,target:i.actionTarget.trim(),...i.actionType==="agent"&&i.actionPrompt.trim()?{prompt:i.actionPrompt.trim()}:{}},budgetCheck:{maxConcurrent:i.maxConcurrent,skipIfBudgetLow:i.skipIfBudgetLow},enabled:i.enabled};t?await q.put(`/schedules/${encodeURIComponent(t.id)}`,m):await q.post("/schedules",m),r()}catch{}finally{o(!1)}}};return a.jsx(Tn,{open:e,onClose:n,title:t?`Edit ${t.name}`:"New schedule",actions:a.jsxs("button",{type:"submit",form:"mobile-schedule-form",className:"mobile-btn",style:{width:"100%"},disabled:s,children:[a.jsx(xt,{size:14})," ",t?"Save":"Create"]}),children:a.jsxs("form",{id:"mobile-schedule-form",onSubmit:d,className:"mobile-task-form",children:[a.jsx("label",{className:"mobile-field-label",children:"Name *"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:"Weekly review",value:i.name,onChange:c=>u("name",c.target.value),autoFocus:!0,required:!0}),a.jsx("label",{className:"mobile-field-label",children:"Type"}),a.jsx("select",{className:"mobile-input",value:i.type,onChange:c=>u("type",c.target.value),children:hC.map(c=>a.jsx("option",{value:c,children:c},c))}),i.type==="cron"&&a.jsxs(a.Fragment,{children:[a.jsx("label",{className:"mobile-field-label",children:"Day of week"}),a.jsx("select",{className:"mobile-input",value:i.cronDow,onChange:c=>u("cronDow",c.target.value),children:dg.map(c=>a.jsx("option",{value:c.value,children:c.label},c.value))}),a.jsxs("div",{className:"mobile-form-row",children:[a.jsxs("div",{style:{flex:1},children:[a.jsx("label",{className:"mobile-field-label",children:"Hour"}),a.jsx("select",{className:"mobile-input",value:String(i.cronHour),onChange:c=>u("cronHour",parseInt(c.target.value,10)),children:cg.map(c=>a.jsx("option",{value:String(c.value),children:c.label},c.value))})]}),a.jsxs("div",{style:{flex:1},children:[a.jsx("label",{className:"mobile-field-label",children:"Minute"}),a.jsx("select",{className:"mobile-input",value:String(i.cronMinute),onChange:c=>u("cronMinute",parseInt(c.target.value,10)),children:pC.map(c=>a.jsx("option",{value:String(c),children:String(c).padStart(2,"0")},c))})]})]})]}),i.type==="interval"&&a.jsxs("div",{className:"mobile-form-row",children:[a.jsxs("div",{style:{flex:1},children:[a.jsx("label",{className:"mobile-field-label",children:"Every"}),a.jsx("input",{className:"mobile-input",type:"number",min:1,value:i.intervalN,onChange:c=>u("intervalN",parseInt(c.target.value,10)||1)})]}),a.jsxs("div",{style:{flex:1},children:[a.jsx("label",{className:"mobile-field-label",children:"Unit"}),a.jsx("select",{className:"mobile-input",value:i.intervalUnit,onChange:c=>u("intervalUnit",c.target.value),children:gC.map(c=>a.jsx("option",{value:c.value,children:c.label},c.value))})]})]}),i.type==="once"&&a.jsxs(a.Fragment,{children:[a.jsx("label",{className:"mobile-field-label",children:"Run at"}),a.jsx("input",{className:"mobile-input",type:"datetime-local",value:i.onceAt,onChange:c=>u("onceAt",c.target.value)})]}),a.jsx("label",{className:"mobile-field-label",children:"Timezone"}),a.jsx("select",{className:"mobile-input",value:xf.includes(i.timezone)?i.timezone:"UTC",onChange:c=>u("timezone",c.target.value),children:xf.map(c=>a.jsx("option",{value:c,children:c},c))}),a.jsx("label",{className:"mobile-field-label",children:"Action type"}),a.jsx("select",{className:"mobile-input",value:i.actionType,onChange:c=>u("actionType",c.target.value),children:mC.map(c=>a.jsx("option",{value:c,children:c},c))}),a.jsx("label",{className:"mobile-field-label",children:"Target"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:i.actionType==="webhook"?"https://...":i.actionType==="agent"?"agent or task ref":"echo hello",value:i.actionTarget,onChange:c=>u("actionTarget",c.target.value)}),i.actionType==="agent"&&a.jsxs(a.Fragment,{children:[a.jsx("label",{className:"mobile-field-label",children:"Prompt"}),a.jsx("textarea",{className:"mobile-input",rows:3,placeholder:"What should the agent do?",value:i.actionPrompt,onChange:c=>u("actionPrompt",c.target.value)})]}),a.jsxs("fieldset",{className:"mobile-budget-card",children:[a.jsx("legend",{children:"Budget pre-flight"}),a.jsxs("label",{className:"mobile-checkbox-row",children:[a.jsx("input",{type:"checkbox",checked:i.skipIfBudgetLow,onChange:c=>u("skipIfBudgetLow",c.target.checked)}),a.jsx("span",{children:"Skip if too many bg tasks are running"})]}),a.jsx("label",{className:"mobile-field-label",children:"Cap"}),a.jsx("input",{className:"mobile-input",type:"number",min:1,max:64,value:i.maxConcurrent,onChange:c=>u("maxConcurrent",parseInt(c.target.value,10)||6),disabled:!i.skipIfBudgetLow})]}),a.jsxs("label",{className:"mobile-checkbox-row",children:[a.jsx("input",{type:"checkbox",checked:i.enabled,onChange:c=>u("enabled",c.target.checked)}),a.jsx("span",{children:"Enabled"})]})]})})}function kC(e){const t=Date.now()-new Date(e).getTime();return t<6e4?"just now":t<36e5?`${Math.floor(t/6e4)}m ago`:t<864e5?`${Math.floor(t/36e5)}h ago`:new Date(e).toLocaleDateString()}function kf(e,t){try{return new Date(e).toLocaleString(void 0,{timeZone:t||void 0,weekday:"short",hour:"numeric",minute:"2-digit",month:"short",day:"numeric"})}catch{return new Date(e).toLocaleString()}}function fg(e){if(typeof e!="string")return null;const t=e.trim().split(/\s+/);if(t.length!==5)return null;const[n,r,,,i]=t,l=parseInt(n,10),s=parseInt(r,10);return!Number.isFinite(l)||!Number.isFinite(s)||n!==String(l)||r!==String(s)?null:{minute:l,hour:s,dow:i==="*"?"*":Number.isFinite(parseInt(i,10))?i:"*"}}function wC(e){if(typeof e!="string")return null;const t=/^(\d+)([smhd])$/i.exec(e.trim());return t?{n:parseInt(t[1],10),unit:t[2].toLowerCase()}:null}function bC(e){if(!e)return"";try{const t=new Date(e);if(Number.isNaN(t.getTime()))return"";const n=r=>String(r).padStart(2,"0");return`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}T${n(t.getHours())}:${n(t.getMinutes())}`}catch{return""}}function wf(e){var l,s;if(e.type!=="cron")return e.schedule;const t=fg(e.schedule);if(!t)return e.schedule;const n=((l=dg.find(o=>o.value===t.dow))==null?void 0:l.label)||t.dow,r=((s=cg.find(o=>o.value===t.hour))==null?void 0:s.label)||`${t.hour}`,i=String(t.minute).padStart(2,"0");return n==="Every day"?`Every day ${r} :${i}`:`Every ${n} ${r} :${i}`}const SC=["all","tasks","agents","artifacts","projects","settings"],CC={tasks:es,agents:Dr,plans:qn,projects:Pu,settings:Pr};function jC({open:e,onClose:t,onNavigate:n}){const[r,i]=w.useState(""),[l,s]=w.useState("all"),[o,u]=w.useState([]),[d,c]=w.useState(!1),f=w.useRef(null);w.useEffect(()=>{e&&(i(""),u([]),requestAnimationFrame(()=>{var p;return(p=f.current)==null?void 0:p.focus()}))},[e]),w.useEffect(()=>{if(!r.trim()){u([]);return}const p=setTimeout(async()=>{c(!0);try{const x=await q.get(`/search?q=${encodeURIComponent(r)}&scope=${l}`);u(x.results||[])}catch{u([])}finally{c(!1)}},250);return()=>clearTimeout(p)},[r,l]);const m=p=>{const x=p.item,b=x.id||x.slug||x.name||"";n(p.type,b),t()},h=o.reduce((p,x)=>(p[x.type]||(p[x.type]=[]),p[x.type].push(x),p),{});return a.jsx(Tn,{open:e,onClose:t,title:"Search",children:a.jsxs("div",{className:"mobile-search-container",children:[a.jsxs("div",{className:"mobile-search-input-row",children:[a.jsx(hd,{size:16,style:{color:"var(--text-muted)",flexShrink:0}}),a.jsx("input",{ref:f,className:"mobile-search-field",type:"text",placeholder:"Search…",value:r,onChange:p=>i(p.target.value),enterKeyHint:"search",onKeyDown:p=>{p.key==="Escape"&&t(),p.key==="Enter"&&o.length>0&&m(o[0])}}),r&&a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>i(""),"aria-label":"Clear",children:a.jsx(Zn,{size:16})})]}),a.jsx("div",{className:"mobile-search-scopes",children:SC.map(p=>a.jsx("button",{type:"button",className:`mobile-scope-chip ${l===p?"active":""}`,onClick:()=>s(p),children:p==="all"?"All":p.charAt(0).toUpperCase()+p.slice(1)},p))}),a.jsxs("div",{className:"mobile-search-results",children:[d&&a.jsx("div",{className:"mobile-search-loading",children:"Searching…"}),!d&&r&&o.length===0&&a.jsxs("div",{className:"mobile-empty",children:[a.jsx(hd,{size:32}),a.jsx("p",{children:"No results found"})]}),!d&&!r&&a.jsx("div",{className:"mobile-empty",children:a.jsx("p",{children:"Type to search across tasks, agents, plans, and more."})}),Object.entries(h).map(([p,x])=>{const b=CC[p]||qn;return a.jsxs("div",{className:"mobile-search-group",children:[a.jsxs("h4",{className:"mobile-search-group-title",children:[a.jsx(b,{size:12})," ",p.charAt(0).toUpperCase()+p.slice(1)," (",x.length,")"]}),x.map((y,g)=>{const v=y.item;return a.jsxs("button",{type:"button",className:"mobile-search-result-item",onClick:()=>m(y),children:[a.jsx("span",{className:"mobile-search-result-title",children:v.title||v.name||v.slug||"(unnamed)"}),v.description&&a.jsx("span",{className:"mobile-search-result-meta",children:v.description.slice(0,80)})]},g)})]},p)})]})]})})}const NC=[{id:"dark",label:"Dark",Icon:ix},{id:"light",label:"Light",Icon:fx},{id:"system",label:"System",Icon:rx}],EC=[{name:"Purple",accent:"#8b5cf6"},{name:"Blue",accent:"#3b82f6"},{name:"Green",accent:"#10b981"},{name:"Orange",accent:"#f97316"},{name:"Red",accent:"#ef4444"},{name:"Pink",accent:"#ec4899"},{name:"Cyan",accent:"#06b6d4"},{name:"Mono",accent:"#6b7280"}];function TC(e){if(e<=0)return"expired";const t=Math.floor(e/1e3),n=Math.floor(t/60),r=t%60;return`${n}:${String(r).padStart(2,"0")}`}function IC({settings:e,snapshot:t,onRefresh:n}){var z,E,A,L,I,k;const[r,i]=w.useState(e),[l,s]=w.useState(!1),[o,u]=w.useState(!1),[d,c]=w.useState(null),[f,m]=w.useState(!1),[h,p]=w.useState(Date.now());w.useEffect(()=>{i(e),s(!1),e.theme&&ui(e.theme)},[e]),w.useEffect(()=>{if(!d)return;const j=setInterval(()=>p(Date.now()),1e3);return()=>clearInterval(j)},[d]);const x=j=>{i(P=>{const B={...P,theme:{...P.theme,...j}};return ts(B.theme),ui(B.theme),B}),s(!0)},b=(j,P)=>{i(B=>({...B,[j]:P})),s(!0)},y=async()=>{u(!0);try{const j=await q.put("/settings",r);i(j.data),s(!1),ts(j.data.theme),ui(j.data.theme),n()}catch{}finally{u(!1)}},g=async()=>{m(!0);try{const j=await q.post("/pair/start");c(j)}catch{}finally{m(!1)}},v=d?d.expiresAt-h:0,C=d!=null&&v<=0;return a.jsxs("div",{className:"mobile-view",children:[l&&a.jsxs("div",{className:"mobile-settings-save-bar",children:[a.jsx("span",{children:"Unsaved changes"}),a.jsxs("button",{type:"button",className:"mobile-btn",disabled:o,onClick:y,children:[a.jsx(Fm,{size:14})," ",o?"Saving…":"Save"]})]}),a.jsxs("section",{className:"mobile-section",children:[a.jsx("h3",{className:"mobile-section-title",children:"Appearance"}),a.jsxs("div",{className:"mobile-card",children:[a.jsxs("div",{className:"mobile-setting-row",children:[a.jsx("span",{className:"mobile-setting-label",children:"Theme"}),a.jsx("div",{className:"mobile-theme-btns",children:NC.map(({id:j,label:P,Icon:B})=>a.jsxs("button",{type:"button",className:`mobile-theme-btn ${r.theme.mode===j?"active":""}`,onClick:()=>x({mode:j}),children:[a.jsx(B,{size:14})," ",P]},j))})]}),a.jsxs("div",{className:"mobile-setting-row",style:{flexDirection:"column",alignItems:"flex-start",gap:8},children:[a.jsx("span",{className:"mobile-setting-label",children:"Accent color"}),a.jsx("div",{className:"mobile-accent-swatches",children:EC.map(j=>a.jsx("button",{type:"button",className:`mobile-accent-swatch ${r.theme.accent===j.accent?"active":""}`,style:{background:j.accent},onClick:()=>x({accent:j.accent}),title:j.name},j.name))})]}),a.jsxs("div",{className:"mobile-setting-row",style:{flexDirection:"column",alignItems:"flex-start",gap:8},children:[a.jsxs("span",{className:"mobile-setting-label",children:["Font size: ",r.theme.fontSize,"px"]}),a.jsx("input",{type:"range",min:12,max:20,value:r.theme.fontSize,onChange:j=>x({fontSize:Number(j.target.value)}),style:{width:"100%"}})]}),a.jsxs("div",{className:"mobile-setting-row",children:[a.jsx("span",{className:"mobile-setting-label",children:"Compact mode"}),a.jsxs("label",{className:"mobile-toggle",children:[a.jsx("input",{type:"checkbox",checked:r.theme.compactMode,onChange:j=>x({compactMode:j.target.checked})}),a.jsx("span",{className:"mobile-toggle-slider"})]})]}),a.jsxs("div",{className:"mobile-setting-row",children:[a.jsx("span",{className:"mobile-setting-label",children:"Animations"}),a.jsxs("label",{className:"mobile-toggle",children:[a.jsx("input",{type:"checkbox",checked:r.theme.animations,onChange:j=>x({animations:j.target.checked})}),a.jsx("span",{className:"mobile-toggle-slider"})]})]})]})]}),a.jsxs("section",{className:"mobile-section",children:[a.jsx("h3",{className:"mobile-section-title",children:"Chat Defaults"}),a.jsxs("div",{className:"mobile-card",children:[a.jsx("label",{className:"mobile-field-label",children:"Default Agent"}),a.jsx("select",{className:"mobile-input",value:r.defaultAgent||"odin",onChange:j=>b("defaultAgent",j.target.value),children:((t==null?void 0:t.agents)||[]).map(j=>a.jsxs("option",{value:j.name,children:["@",j.name]},j.name))}),a.jsx("label",{className:"mobile-field-label",style:{marginTop:8},children:"Default Model"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:"(auto)",value:r.defaultModel||"",onChange:j=>b("defaultModel",j.target.value)})]})]}),a.jsxs("section",{className:"mobile-section",children:[a.jsx("h3",{className:"mobile-section-title",children:"Notifications"}),a.jsxs("div",{className:"mobile-card",children:[a.jsxs("div",{className:"mobile-setting-row",children:[a.jsx("span",{className:"mobile-setting-label",children:"Agent completion"}),a.jsxs("label",{className:"mobile-toggle",children:[a.jsx("input",{type:"checkbox",checked:!!r.notifications.onAgentComplete,onChange:j=>{i(P=>({...P,notifications:{...P.notifications,onAgentComplete:j.target.checked}})),s(!0)}}),a.jsx("span",{className:"mobile-toggle-slider"})]})]}),a.jsxs("div",{className:"mobile-setting-row",children:[a.jsx("span",{className:"mobile-setting-label",children:"Plan approval"}),a.jsxs("label",{className:"mobile-toggle",children:[a.jsx("input",{type:"checkbox",checked:!!r.notifications.onPlanApproval,onChange:j=>{i(P=>({...P,notifications:{...P.notifications,onPlanApproval:j.target.checked}})),s(!0)}}),a.jsx("span",{className:"mobile-toggle-slider"})]})]})]})]}),a.jsxs("section",{className:"mobile-section",children:[a.jsx("h3",{className:"mobile-section-title",children:"Agent Behavior"}),a.jsxs("div",{className:"mobile-card",children:[a.jsx("label",{className:"mobile-field-label",children:"Max parallel agents"}),a.jsx("input",{className:"mobile-input",type:"number",inputMode:"numeric",min:1,max:20,value:((z=r.agents)==null?void 0:z.maxParallel)??6,onChange:j=>{i(P=>({...P,agents:{...P.agents,maxParallel:Math.max(1,Math.min(20,parseInt(j.target.value,10)||6))}})),s(!0)}}),a.jsx("label",{className:"mobile-field-label",style:{marginTop:8},children:"Stuck threshold (ms)"}),a.jsx("input",{className:"mobile-input",type:"number",inputMode:"numeric",min:6e4,max:36e5,step:6e4,value:((E=r.agents)==null?void 0:E.stuckThresholdMs)??6e5,onChange:j=>{i(P=>({...P,agents:{...P.agents,stuckThresholdMs:Math.max(6e4,parseInt(j.target.value,10)||6e5)}})),s(!0)}}),a.jsxs("div",{className:"mobile-setting-row",style:{marginTop:8},children:[a.jsx("span",{className:"mobile-setting-label",children:"Auto-restart stuck agents"}),a.jsxs("label",{className:"mobile-toggle",children:[a.jsx("input",{type:"checkbox",checked:!!((A=r.agents)!=null&&A.autoRestart),onChange:j=>{i(P=>({...P,agents:{...P.agents,autoRestart:j.target.checked}})),s(!0)}}),a.jsx("span",{className:"mobile-toggle-slider"})]})]})]})]}),a.jsxs("section",{className:"mobile-section",children:[a.jsx("h3",{className:"mobile-section-title",children:"Tailscale Serve"}),a.jsx("div",{className:"mobile-card",children:a.jsxs("p",{className:"muted",style:{fontSize:13},children:["Use ",a.jsx("code",{children:"bizar service"})," commands in the terminal to configure Tailscale serve."]})})]}),a.jsxs("section",{className:"mobile-section",children:[a.jsxs("h3",{className:"mobile-section-title",children:[a.jsx(dx,{size:14})," Companion App"]}),a.jsxs("div",{className:"mobile-card",children:[!d&&a.jsxs("button",{type:"button",className:"mobile-btn",onClick:g,disabled:f,style:{width:"100%"},children:[a.jsx(ox,{size:14})," ",f?"Generating…":"Generate QR Code"]}),d&&!C&&a.jsxs("div",{style:{textAlign:"center"},children:[a.jsx("div",{style:{background:"#fff",padding:12,borderRadius:12,display:"inline-block"},children:a.jsx(ag,{value:d.qrPayload,size:180,level:"M"})}),a.jsxs("div",{style:{marginTop:8,fontSize:12},children:["Expires in ",a.jsx("strong",{children:TC(v)})]}),a.jsx("div",{className:"mono",style:{fontSize:10,wordBreak:"break-all",marginTop:4},children:d.publicUrl})]}),d&&C&&a.jsxs("button",{type:"button",className:"mobile-btn",onClick:g,style:{width:"100%"},children:[a.jsx(_t,{size:14})," Generate new QR"]})]})]}),a.jsxs("section",{className:"mobile-section",children:[a.jsx("h3",{className:"mobile-section-title",children:"About"}),a.jsxs("div",{className:"mobile-card",children:[a.jsxs("div",{className:"mobile-setting-row",children:[a.jsx("span",{className:"mobile-setting-label",children:"Version"}),a.jsx("span",{className:"mobile-setting-value mono",children:((L=r.about)==null?void 0:L.version)||"—"})]}),a.jsxs("div",{className:"mobile-setting-row",children:[a.jsx("span",{className:"mobile-setting-label",children:"Agents"}),a.jsx("span",{className:"mobile-setting-value",children:((I=t==null?void 0:t.agents)==null?void 0:I.length)||0})]}),a.jsxs("div",{className:"mobile-setting-row",children:[a.jsx("span",{className:"mobile-setting-label",children:"Tasks"}),a.jsx("span",{className:"mobile-setting-value",children:((k=t==null?void 0:t.tasks)==null?void 0:k.length)||0})]}),a.jsxs("div",{className:"mobile-setting-row",children:[a.jsx("span",{className:"mobile-setting-label",children:"Plans"}),a.jsx("span",{className:"mobile-setting-value",children:(t==null?void 0:t.artifacts.length)||0})]})]})]}),a.jsx("div",{className:"mobile-view-footer",children:a.jsx("a",{href:"/?desktop=1",className:"mobile-btn mobile-btn-secondary",children:"Switch to Desktop"})})]})}const zC=["languages","framework","design","testing","devops","data","security","integration"];function PC({snapshot:e,onBack:t}){const[n,r]=w.useState([]),[i,l]=w.useState(!0),[s,o]=w.useState(""),[u,d]=w.useState(""),[c,f]=w.useState(null),m=async()=>{try{const x=await q.get("/skills");r(x.skills||[])}catch{}finally{l(!1)}};w.useEffect(()=>{m()},[]);const h=async(x,b)=>{try{await q.patch(`/skills/${encodeURIComponent(x)}`,{enabled:b}),r(y=>y.map(g=>g.id===x?{...g,enabled:b}:g)),(c==null?void 0:c.id)===x&&f(y=>y&&{...y,enabled:b})}catch{}},p=n.filter(x=>{if(u&&x.category!==u)return!1;if(s){const b=s.toLowerCase();return x.name.toLowerCase().includes(b)||x.description.toLowerCase().includes(b)}return!0});return a.jsxs("div",{className:"mobile-view",children:[a.jsxs("div",{className:"mobile-tasks-toolbar",children:[a.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search skills…",value:s,onChange:x=>o(x.target.value),style:{flex:1}}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>m(),"aria-label":"Refresh",children:a.jsx(_t,{size:16})})]}),a.jsxs("div",{className:"mobile-search-scopes",children:[a.jsx("button",{type:"button",className:`mobile-scope-chip ${u?"":"active"}`,onClick:()=>d(""),children:"All"}),zC.map(x=>a.jsx("button",{type:"button",className:`mobile-scope-chip ${u===x?"active":""}`,onClick:()=>d(x),children:x},x))]}),i?a.jsx("div",{className:"mobile-loading",children:a.jsx("p",{children:"Loading…"})}):p.length===0?a.jsxs("div",{className:"mobile-empty",children:[a.jsx(Jl,{size:40}),a.jsx("p",{children:"No skills found."})]}):a.jsx("div",{className:"mobile-card-list",children:p.map(x=>a.jsxs("button",{type:"button",className:"mobile-list-item mobile-list-item-interactive",onClick:()=>f(x),children:[a.jsx("div",{className:"mobile-list-icon",children:a.jsx(Jl,{size:16})}),a.jsxs("div",{className:"mobile-list-content",children:[a.jsx("span",{className:"mobile-list-title",children:x.name}),a.jsxs("span",{className:"mobile-list-meta",children:[x.category," · v",x.version]})]}),a.jsx("span",{className:`mobile-list-badge ${x.enabled?"badge-on":"badge-off"}`,children:x.enabled?"on":"off"})]},x.id))}),c&&a.jsx(Dt,{open:!0,onClose:()=>f(null),title:c.name,actions:a.jsxs("button",{type:"button",className:`mobile-btn ${c.enabled?"mobile-btn-secondary":""}`,style:{width:"100%"},onClick:()=>{c&&h(c.id,!c.enabled)},children:[a.jsx(Om,{size:14})," ",c.enabled?"Disable":"Enable"]}),children:a.jsxs("div",{className:"mobile-agent-detail",children:[a.jsx("p",{className:"mobile-agent-detail-desc",children:c.description||"No description."}),a.jsxs("div",{className:"mobile-agent-detail-meta",children:[a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Category"}),a.jsx("span",{children:c.category})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Version"}),a.jsx("span",{className:"mono",children:c.version})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Source"}),a.jsx("span",{children:c.source})]}),c.tags.length>0&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Tags"}),a.jsx("span",{children:c.tags.join(", ")})]})]})]})})]})}const AC=["queued","doing","blocked","done"],dl={queued:"Queued",doing:"Doing",blocked:"Blocked",done:"Done"},bf={queued:"doing",doing:"done",blocked:"queued",done:"queued"};function MC(e){const t=e.metadata??{};return!!(t.sessionId||t.bgInstanceId)}function LC(e){var n;const t=e.metadata??{};return!!((n=t.artifactIds)!=null&&n.length||t.artifactId)}function Sf({snapshot:e,onRefresh:t,selectedTaskId:n,onCloseDetail:r,onOpenChat:i,onOpenArtifact:l}){var oe,Ne;const[s,o]=w.useState(e.tasks||[]),[u,d]=w.useState(!e.tasks),[c,f]=w.useState(""),[m,h]=w.useState("queued"),[p,x]=w.useState(null),[b,y]=w.useState(!1),[g,v]=w.useState(null),[C,z]=w.useState([]),[E,A]=w.useState(""),[L,I]=w.useState(null),[k,j]=w.useState(!1),[P,B]=w.useState(""),[O,W]=w.useState("updated");w.useEffect(()=>{var H;if(e.tasks&&(o(e.tasks),d(!1)),n){const te=(H=e.tasks)==null?void 0:H.find(re=>re.id===n);te&&x(te)}},[e.tasks,n]),w.useEffect(()=>{if(n){const H=s.find(te=>te.id===n);H&&x(H)}},[n,s]);const de=async()=>{try{const H=await q.get("/tasks");o(Array.isArray(H)?H:[])}catch{}finally{d(!1)}},ee=async(H,te)=>{o(re=>re.map(Se=>Se.id===H?{...Se,status:te}:Se)),(p==null?void 0:p.id)===H&&x(re=>re&&{...re,status:te});try{await q.patch(`/tasks/${encodeURIComponent(H)}/status`,{status:te})}catch{await de()}},R=async H=>{if(confirm("Delete this task?"))try{await q.del(`/tasks/${encodeURIComponent(H)}`),o(te=>te.filter(re=>re.id!==H)),(p==null?void 0:p.id)===H&&x(null)}catch{await de()}},V=async H=>{try{await q.post(`/tasks/${encodeURIComponent(H)}/archive`),o(te=>te.filter(re=>re.id!==H)),(p==null?void 0:p.id)===H&&x(null)}catch{}},Y=[...s.filter(H=>{var te,re;if(c.trim()){const Se=c.toLowerCase();if(!(H.title||"").toLowerCase().includes(Se)&&!(H.description||"").toLowerCase().includes(Se))return!1}if(P.trim()){const Se=P==="mine"?((re=(te=e.settings)==null?void 0:te.data)==null?void 0:re.defaultAgent)||RC(e):P.replace(/^@/,"");if((H.assignee||"").toLowerCase()!==Se.toLowerCase())return!1}return!0})].sort((H,te)=>{switch(O){case"priority":{const re={high:0,normal:1,low:2};return(re[H.priority]??1)-(re[te.priority]??1)}case"created":return new Date(te.createdAt).getTime()-new Date(H.createdAt).getTime();case"updated":default:return new Date(te.updatedAt).getTime()-new Date(H.updatedAt).getTime()}}),ie=Y.filter(H=>H.status===m),N=e.agents||[],ge=async(H,te,re,Se)=>{try{const Ot=await q.post("/tasks",{title:H,description:te,assignee:re||null,priority:Se});o(ln=>[Ot,...ln]),y(!1)}catch{}},Le=async H=>{j(!0),A(""),I(null),v(H);try{const re=((await q.get(`/tasks/${encodeURIComponent(H)}/artifacts`)).artifacts||[]).map(Se=>Se.id);if(z(re),re.length>0){const[Se,Ot]=await Promise.all([q.get(`/artifacts/${encodeURIComponent(re[0])}`),fetch(q.urlWithToken(`/artifacts/${encodeURIComponent(re[0])}/content`)).then(ln=>ln.text())]);I(Se),A(Ot)}}catch{}finally{j(!1)}};return u?a.jsx("div",{className:"mobile-loading",children:a.jsx("p",{children:"Loading…"})}):a.jsxs("div",{className:"mobile-view mobile-view-tasks",children:[a.jsxs("div",{className:"mobile-tasks-toolbar",children:[a.jsx("input",{className:"mobile-search-input",type:"text",placeholder:"Search tasks…",value:c,onChange:H=>f(H.target.value),style:{flex:1}}),a.jsx("button",{type:"button",className:"mobile-icon-btn",onClick:()=>de(),"aria-label":"Refresh",children:a.jsx(_t,{size:16})})]}),a.jsxs("div",{className:"mobile-tasks-filters",children:[a.jsxs("select",{className:"mobile-filter-select",value:P,onChange:H=>B(H.target.value),children:[a.jsx("option",{value:"",children:"All"}),a.jsx("option",{value:"mine",children:"Mine"}),N.map(H=>a.jsxs("option",{value:`@${H.name}`,children:["@",H.name]},H.name))]}),a.jsxs("select",{className:"mobile-filter-select",value:O,onChange:H=>W(H.target.value),children:[a.jsx("option",{value:"updated",children:"Updated"}),a.jsx("option",{value:"created",children:"Created"}),a.jsx("option",{value:"priority",children:"Priority"})]})]}),a.jsx("div",{className:"mobile-kanban-tabs",children:AC.map(H=>{const te=Y.filter(re=>re.status===H).length;return a.jsxs("button",{type:"button",className:`mobile-kanban-tab ${m===H?"active":""}`,onClick:()=>h(H),children:[dl[H]," (",te,")"]},H)})}),a.jsxs("div",{className:"mobile-card-list",children:[ie.length===0&&a.jsxs("div",{className:"mobile-empty mobile-empty-compact",children:[a.jsxs("p",{children:["No ",dl[m].toLowerCase()," tasks."]}),a.jsx("p",{className:"muted",children:"Create one or switch columns."})]}),ie.map(H=>{var te;return a.jsxs("button",{type:"button",className:"mobile-task-card",onClick:()=>x(H),children:[a.jsx("div",{className:"priority-dot",style:{background:gx[H.priority]||"var(--info)"}}),a.jsxs("div",{className:"task-content",children:[a.jsx("div",{className:"task-title",children:H.title}),a.jsxs("div",{className:"task-meta",children:[H.assignee?`@${H.assignee}`:"unassigned"," · ",Sr(H.updatedAt||H.createdAt),(te=H.dependencies)!=null&&te.length?` · ${H.dependencies.length} deps`:""]})]})]},H.id)})]}),a.jsx("button",{type:"button",className:"mobile-fab",onClick:()=>y(!0),"aria-label":"Add task",children:a.jsx(xt,{size:24})}),a.jsx(Dt,{open:!!p,onClose:()=>{x(null),r==null||r()},title:"Task Detail",actions:p&&a.jsxs("div",{className:"mobile-task-detail-actions",children:[p.status!=="done"&&a.jsxs("button",{type:"button",className:"mobile-btn",style:{flex:1},onClick:()=>{p&&ee(p.id,bf[p.status])},children:["Move to ",dl[bf[p.status]||"queued"]]}),a.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-secondary",onClick:()=>{p&&V(p.id)},children:[a.jsx(V1,{size:14})," Archive"]}),MC(p)&&a.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-secondary",onClick:()=>{i==null||i(p.id)},children:[a.jsx(On,{size:14})," Chat"]}),LC(p)&&a.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-secondary",onClick:()=>{Le(p.id)},children:[a.jsx(qn,{size:14})," Artifact"]}),a.jsx("button",{type:"button",className:"mobile-btn mobile-btn-danger",onClick:()=>{p&&R(p.id)},children:a.jsx(_r,{size:14})})]}),children:p&&a.jsxs("div",{className:"mobile-task-detail",children:[a.jsxs("div",{className:"mobile-task-detail-header",children:[a.jsx("span",{className:`mobile-task-status-badge status-${p.status}`,children:dl[p.status]||p.status}),a.jsx("span",{className:`mobile-task-priority priority-${p.priority}`,children:p.priority})]}),a.jsx("h3",{className:"mobile-task-detail-title",children:p.title}),p.description&&a.jsx("p",{className:"mobile-task-detail-desc",children:p.description}),a.jsxs("div",{className:"mobile-task-detail-meta",children:[p.assignee&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Assignee"}),a.jsxs("span",{children:["@",p.assignee]})]}),p.dueDate&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Due"}),a.jsx("span",{children:new Date(p.dueDate).toLocaleDateString()})]}),p.timeSpent!=null&&a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Time spent"}),a.jsxs("span",{children:[Math.round(p.timeSpent/6e4),"min"]})]}),(oe=p.dependencies)!=null&&oe.length?a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Dependencies"}),a.jsx("span",{children:p.dependencies.length})]}):null,(Ne=p.comments)!=null&&Ne.length?a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Comments"}),a.jsx("span",{children:p.comments.length})]}):null,a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Created"}),a.jsx("span",{children:Sr(p.createdAt)})]}),a.jsxs("div",{className:"mobile-task-detail-row",children:[a.jsx("span",{children:"Updated"}),a.jsx("span",{children:Sr(p.updatedAt)})]})]})]})}),a.jsx(DC,{open:b,onClose:()=>y(!1),onCreate:ge,agents:N}),a.jsx(Dt,{open:!!g,onClose:()=>{v(null),A(""),I(null)},title:(L==null?void 0:L.name)||"Artifact",actions:C.length>1?a.jsx("div",{className:"mobile-task-detail-actions",children:C.map((H,te)=>a.jsxs("button",{type:"button",className:"mobile-btn mobile-btn-secondary",style:{flex:1},onClick:()=>{j(!0),Promise.all([q.get(`/artifacts/${encodeURIComponent(H)}`),fetch(q.urlWithToken(`/artifacts/${encodeURIComponent(H)}/content`)).then(re=>re.text())]).then(([re,Se])=>{I(re),A(Se),j(!1)}).catch(()=>j(!1))},children:["Artifact ",te+1]},H))}):null,children:a.jsx("div",{className:"mobile-artifact-viewer",children:k?a.jsx("div",{className:"mobile-loading",children:a.jsx("p",{children:"Loading artifact…"})}):E?a.jsx("iframe",{srcDoc:E,className:"mobile-artifact-iframe",sandbox:"allow-scripts allow-forms allow-popups allow-same-origin",title:(L==null?void 0:L.name)||"Artifact",loading:"lazy"}):a.jsxs("div",{className:"mobile-empty",children:[a.jsx(qn,{size:32}),a.jsx("p",{className:"muted",children:"No artifact content available."})]})})})]})}function RC(e){var t,n;return((n=(t=e.settings)==null?void 0:t.data)==null?void 0:n.defaultAgent)||"odin"}function DC({open:e,onClose:t,onCreate:n,agents:r}){const[i,l]=w.useState(""),[s,o]=w.useState(""),[u,d]=w.useState(""),[c,f]=w.useState("normal"),m=h=>{h.preventDefault(),i.trim()&&(n(i.trim(),s.trim(),u,c),l(""),o(""),d(""),f("normal"))};return a.jsx(Tn,{open:e,onClose:t,title:"New Task",actions:a.jsxs("button",{type:"submit",form:"new-task-form",className:"mobile-btn",style:{width:"100%"},children:[a.jsx(xt,{size:14})," Create Task"]}),children:a.jsxs("form",{id:"new-task-form",onSubmit:m,className:"mobile-task-form",children:[a.jsx("label",{className:"mobile-field-label",children:"Title *"}),a.jsx("input",{className:"mobile-input",type:"text",placeholder:"Task title",value:i,onChange:h=>l(h.target.value),autoFocus:!0,required:!0}),a.jsx("label",{className:"mobile-field-label",children:"Description"}),a.jsx("textarea",{className:"mobile-input",rows:3,placeholder:"Optional description",value:s,onChange:h=>o(h.target.value)}),a.jsx("label",{className:"mobile-field-label",children:"Assignee"}),a.jsxs("select",{className:"mobile-input",value:u,onChange:h=>d(h.target.value),children:[a.jsx("option",{value:"",children:"Unassigned"}),r.map(h=>a.jsxs("option",{value:h.name,children:["@",h.name]},h.name))]}),a.jsx("label",{className:"mobile-field-label",children:"Priority"}),a.jsxs("select",{className:"mobile-input",value:c,onChange:h=>f(h.target.value),children:[a.jsx("option",{value:"low",children:"Low"}),a.jsx("option",{value:"normal",children:"Normal"}),a.jsx("option",{value:"high",children:"High"})]})]})})}const _C=[{id:"activity",label:"Activity",icon:xa},{id:"chat",label:"Chat",icon:On},{id:"tasks",label:"Tasks",icon:es},{id:"settings",label:"Settings",icon:Bm},{id:"more",label:"More",icon:J1}];function OC(e){const t=e.meta??{},n=typeof t.taskId=="string"?t.taskId:null,r=typeof t.slug=="string"?t.slug:null,i=typeof t.agent=="string"?t.agent:null;if(n)return{id:"task-detail",taskId:n};if(r)return{id:"artifacts?-detail",slug:r};if(i)return{id:"agent-detail",name:i};const l=e.link??"";return l.startsWith("/artifacts?/")?{id:"artifacts?-detail",slug:decodeURIComponent(l.slice(12))}:l.startsWith("/tasks/")?{id:"task-detail",taskId:decodeURIComponent(l.slice(7))}:l.startsWith("/agents/")?{id:"agent-detail",name:decodeURIComponent(l.slice(8))}:null}function WC(){const[e,t]=w.useState("activity"),[n,r]=w.useState([]),[i,l]=w.useState(!1),[s,o]=w.useState(null),[u,d]=w.useState(null),[c,f]=w.useState(null),[m,h]=w.useState(null),[p,x]=w.useState(!0),[b,y]=w.useState(0),g=w.useMemo(()=>n[n.length-1]??{id:e},[e,n]),v=w.useCallback(k=>{r(j=>[...j,k])},[]),C=w.useCallback(()=>{r(k=>k.slice(0,-1))},[]),z=w.useCallback(k=>{r([]),t(k)},[]),E=w.useCallback(async()=>{var k;try{const j=await q.get("/snapshot");d(j),(k=j.settings)!=null&&k.data&&f(j.settings.data),h(null)}catch(j){throw h(j.message||"Dashboard server unreachable."),j}},[]);w.useEffect(()=>{let k=!1;return Promise.all([q.get("/snapshot").catch(()=>null),q.get("/settings").catch(()=>null),q.probeAuthStatus().catch(()=>null)]).then(([j,P])=>{var O;if(k)return;const B=(P==null?void 0:P.data)??((O=j==null?void 0:j.settings)==null?void 0:O.data)??null;j&&d(j),B&&f(B),h(!j&&!B?"Dashboard server unreachable.":null)}).catch(j=>{k||h(j.message||"Dashboard server unreachable.")}).finally(()=>{k||x(!1)}),()=>{k=!0}},[]),w.useEffect(()=>{c!=null&&c.theme&&(ts(c.theme),ui(c.theme))},[c==null?void 0:c.theme]),w.useEffect(()=>{var P;if(((P=c==null?void 0:c.theme)==null?void 0:P.mode)!=="system")return;const k=window.matchMedia("(prefers-color-scheme: light)"),j=()=>{c!=null&&c.theme&&(ts(c.theme),ui(c.theme))};return k.addEventListener("change",j),()=>k.removeEventListener("change",j)},[c==null?void 0:c.theme]),w.useEffect(()=>{const k=()=>{y(P=>P+1),E().catch(()=>{})},j=()=>{document.visibilityState==="visible"&&k()};return window.addEventListener("online",k),window.addEventListener("pageshow",k),document.addEventListener("visibilitychange",j),()=>{window.removeEventListener("online",k),window.removeEventListener("pageshow",k),document.removeEventListener("visibilitychange",j)}},[E]),w.useEffect(()=>{const k=new Vm,j=k.on(P=>{if(P.type==="snapshot"&&"data"in P&&P.data)d(B=>({...B??{},...P.data}));else if(P.type==="change")E().catch(()=>{});else if(P.type==="tasks:change"){const B=P.task;d(O=>{if(!O)return O;const W=(O.tasks||[]).map(ee=>ee.id===B.id?B:ee),de=W.some(ee=>ee.id===B.id);return{...O,tasks:de?W:[B,...W]}})}else P.type==="tasks:delete"?d(B=>B&&{...B,tasks:(B.tasks||[]).filter(O=>O.id!==P.id)}):P.type==="settings:change"?P.settings&&f(P.settings):P.type==="project:change"||P.type==="agents:change"||P.type==="schedules:change"||P.type==="artifact:change"?E().catch(()=>{}):(P.type==="agent:status"||P.type==="agent:restarted")&&d(B=>{if(!B)return B;const O=(B.agents||[]).map(W=>W.name===P.agent.name?P.agent:W);return{...B,agents:O}})});return()=>{j(),k.close()}},[E,b]);const A=w.useCallback(k=>{(k==="activity"||k==="chat"||k==="tasks"||k==="settings"||k==="more")&&z(k)},[z]),L=w.useCallback((k,j,P)=>{if(k==="notification"){const B=OC({link:j||null,meta:P??null});B&&v(B);return}if(k==="task"&&j){v({id:"task-detail",taskId:j});return}if(k==="artifacts?"&&j){v({id:"artifacts?-detail",slug:j});return}if(k==="agent"&&j){v({id:"agent-detail",name:j});return}if(k==="project"){z("activity");return}k==="setting"&&z("settings")},[z,v]),I=()=>{if(!u||!c)return null;if(n.length>0){const k=n[n.length-1];switch(k.id){case"artifacts?":return a.jsx(fC,{snapshot:u,onBack:C,onOpenArtifact:j=>v({id:"artifacts?-detail",slug:j})});case"agents":return a.jsx(yf,{snapshot:u,onBack:C,onOpenAgent:j=>v({id:"agent-detail",name:j}),onRefresh:E});case"skills":return a.jsx(PC,{snapshot:u,onBack:C});case"mods":return a.jsx(sC,{snapshot:u,onBack:C});case"schedules":return a.jsx(yC,{snapshot:u,onBack:C});case"history":return a.jsx(lC,{onBack:C});case"config":return a.jsx(iC,{onBack:C});case"artifacts?-detail":return a.jsx(uC,{slug:k.slug,onBack:C});case"agent-detail":return a.jsx(yf,{snapshot:u,onBack:C,onOpenAgent:()=>{},onRefresh:E,selectedAgent:k.name});case"task-detail":return a.jsx(Sf,{snapshot:u,onRefresh:E,selectedTaskId:k.taskId,onCloseDetail:C,onOpenChat:j=>{o(j),z("chat")}});default:return null}}switch(e){case"activity":return a.jsx(X2,{snapshot:u,onRefresh:E});case"chat":return a.jsx(rC,{snapshot:u,settings:c,initialTaskId:s,onClearTaskId:()=>o(null)});case"tasks":return a.jsx(Sf,{snapshot:u,onRefresh:E,onOpenChat:k=>{o(k),z("chat")}});case"settings":return a.jsx(IC,{settings:c,snapshot:u,onRefresh:E});case"more":return a.jsx(oC,{snapshot:u,onNavigate:k=>{(k==="artifacts?"||k==="agents"||k==="skills"||k==="mods"||k==="schedules"||k==="history"||k==="config")&&v({id:k})}});default:return null}};return p?a.jsxs("div",{className:"mobile-loading",children:[a.jsx(Wm,{size:"lg"}),a.jsx("p",{children:"Loading Bizar…"})]}):m||!u||!c?a.jsxs("div",{className:"mobile-loading",children:[a.jsx("h2",{children:"Dashboard unavailable"}),a.jsx("p",{children:m||"Dashboard server unreachable."}),a.jsx("p",{className:"muted",children:"Make sure the Bizar dashboard server is running."})]}):a.jsxs("div",{className:"mobile-app",children:[a.jsx(K2,{activeTab:g.id,snapshot:u,onSearch:()=>l(!0),onNavigate:L}),a.jsx("main",{className:"mobile-content",children:I()}),n.length===0&&a.jsx(V2,{tabs:_C,activeTab:e,onChange:A}),n.length>0&&a.jsx("button",{type:"button",className:"mobile-back-btn",onClick:C,"aria-label":"Go back",children:"← Back"}),a.jsx(jC,{open:i,onClose:()=>l(!1),onNavigate:L})]})}export{_e as $,xa as A,Dr as B,q1 as C,cx as D,Z1 as E,Pu as F,hx as G,ka as H,tx as I,Au as J,A2 as K,L2 as L,On as M,Tx as N,j2 as O,xt as P,Fm as Q,_t as R,es as S,mx as T,$C as U,Zl as V,ux as W,Zn as X,md as Y,cb as Z,S2 as _,q as a,V1 as a0,xx as a1,gx as a2,lx as a3,P2 as a4,ui as a5,ax as a6,ix as a7,fx as a8,rx as a9,X1 as aa,ts as ab,Vm as ac,dx as ad,ag as ae,ox as af,W1 as ag,Bm as ah,UC as ai,BC as aj,wa as ak,$1 as al,WC as am,Ss as b,J as c,dd as d,Jl as e,va as f,Pr as g,hd as h,Mu as i,a as j,pr as k,bx as l,cd as m,Y1 as n,Sr as o,qn as p,px as q,w as r,Wm as s,$m as t,kx as u,_r as v,Om as w,Dm as x,Ix as y,T2 as z};
352
+ //# sourceMappingURL=mobile-O6ANdD4W.js.map