@bivy/bivy 0.20.4-staging.2 → 0.20.4

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 (99) hide show
  1. package/bin/bivy.mjs +56 -41
  2. package/package.json +1 -1
  3. package/web/assets/{AutomationsView-CF3Yde7g.js → AutomationsView-Dmvlsz0Z.js} +1 -1
  4. package/web/assets/{ChangesCard-ChUvrnBi.js → ChangesCard-BwD96uul.js} +1 -1
  5. package/web/assets/{LibraryView-BqtDKX0H.js → LibraryView-B-kxSGdG.js} +1 -1
  6. package/web/assets/{ProviderConnect-BlYYhfdq.js → ProviderConnect-BhOBqv4c.js} +1 -1
  7. package/web/assets/{Settings-Bsv6N5oX.js → Settings-C31Y0zji.js} +3 -3
  8. package/web/assets/{Sheet-BcTCzY9r.js → Sheet-RMf7I6AF.js} +1 -1
  9. package/web/assets/{Terminal-dczoFzd6.js → Terminal-CcT_BiQ-.js} +1 -1
  10. package/web/assets/{VoiceSettings-BBN0TRwk.js → VoiceSettings-wHfTziIV.js} +1 -1
  11. package/web/assets/{abnfDiagram-VCTEODGH-CvfQu37S.js → abnfDiagram-VCTEODGH-DlEmty9N.js} +1 -1
  12. package/web/assets/architecture-7GRP2DOG-CS_AlfFo.js +1 -0
  13. package/web/assets/{architectureDiagram-5GKGNRK7-B5tDXVlv.js → architectureDiagram-5GKGNRK7-CmKHjt00.js} +1 -1
  14. package/web/assets/{blockDiagram-I7D4REHJ-xAPGSDJ4.js → blockDiagram-I7D4REHJ-BXJ9L-Aj.js} +1 -1
  15. package/web/assets/{c4Diagram-7LVT6UL2-eJaT7akB.js → c4Diagram-7LVT6UL2-BMJYfdao.js} +1 -1
  16. package/web/assets/channel-MXlr4vbT.js +1 -0
  17. package/web/assets/{chunk-4HAMMTFA-COnO_bSA.js → chunk-4HAMMTFA-nctntAbh.js} +1 -1
  18. package/web/assets/{chunk-75Z2AOVW-CRSwYgGa.js → chunk-75Z2AOVW-CAeV8UiH.js} +1 -1
  19. package/web/assets/{chunk-DU6HZSFF-DEWchgqz.js → chunk-DU6HZSFF-DAvPXwYN.js} +1 -1
  20. package/web/assets/{chunk-F27PBJKO-o-kQvDMG.js → chunk-F27PBJKO-BXEJvJhW.js} +1 -1
  21. package/web/assets/{chunk-GMAD6QVW-DJhWvb-f.js → chunk-GMAD6QVW-9yquOIER.js} +1 -1
  22. package/web/assets/{chunk-GVQU2GXP-BhL-vgyG.js → chunk-GVQU2GXP-C_TX3OgB.js} +1 -1
  23. package/web/assets/{chunk-IMKFNOWR-CtRgI4Rd.js → chunk-IMKFNOWR-DMGc-mfQ.js} +1 -1
  24. package/web/assets/{chunk-L3NEJ4N5-Dv5wmhCC.js → chunk-L3NEJ4N5-BnOmNMkV.js} +1 -1
  25. package/web/assets/{chunk-OSK3NFVY-BpkFVV5j.js → chunk-OSK3NFVY-CwpoggsE.js} +1 -1
  26. package/web/assets/{chunk-P2QGCYS3-BZp2Gxlg.js → chunk-P2QGCYS3-Dn2CECEw.js} +1 -1
  27. package/web/assets/{chunk-POPQ4Y6H-BymdnjqO.js → chunk-POPQ4Y6H-BCbK4iZ0.js} +1 -1
  28. package/web/assets/{chunk-PWAF6VOD-B6-tqDJ_.js → chunk-PWAF6VOD-C7VQERHF.js} +1 -1
  29. package/web/assets/{chunk-SHT3W25Y-DJNRgkri.js → chunk-SHT3W25Y-DIxYjucE.js} +1 -1
  30. package/web/assets/{chunk-SVP7TREG-C4KhIsre.js → chunk-SVP7TREG-BAZU_moU.js} +1 -1
  31. package/web/assets/{chunk-TICWLB2K-BkR4MokH.js → chunk-TICWLB2K-CM03ArgX.js} +1 -1
  32. package/web/assets/classDiagram-ZZMXUADV-qjzFVZ0A.js +1 -0
  33. package/web/assets/classDiagram-v2-VYDZK3BY-qjzFVZ0A.js +1 -0
  34. package/web/assets/{cynefin-OW5HDTMX-Cx0OANPS.js → cynefin-OW5HDTMX-DdP4-mbh.js} +1 -1
  35. package/web/assets/{cynefinDiagram-5FMLGOSQ-3cqmGzjr.js → cynefinDiagram-5FMLGOSQ-BH3pk8yy.js} +1 -1
  36. package/web/assets/{dagre-GXQ25YYZ-Cf0HouX5.js → dagre-GXQ25YYZ-Mqy0w6Sw.js} +1 -1
  37. package/web/assets/{diagram-S7CK7UJ4-CxJf3pta.js → diagram-S7CK7UJ4-Q4KmhRc8.js} +1 -1
  38. package/web/assets/{diagram-UQ7AKVKN-BkJG0Xun.js → diagram-UQ7AKVKN-ZnwQfDOy.js} +1 -1
  39. package/web/assets/{diagram-VSXAHHWV-DRudDhg4.js → diagram-VSXAHHWV-BMsgdoLT.js} +1 -1
  40. package/web/assets/{diagram-VX7I27RA-DdHda5wF.js → diagram-VX7I27RA-DQbGwF4z.js} +1 -1
  41. package/web/assets/{diagram-Z3DM3KII-DaKysBj7.js → diagram-Z3DM3KII-CasKjZHx.js} +1 -1
  42. package/web/assets/{ebnfDiagram-PWID7BFC-87xjrwDD.js → ebnfDiagram-PWID7BFC-DABDvfAy.js} +1 -1
  43. package/web/assets/{erDiagram-RLTQ6QDP-BEs13f6g.js → erDiagram-RLTQ6QDP-7-YDTqBS.js} +1 -1
  44. package/web/assets/eventmodeling-NTZA5JFV-LA2vbgEu.js +1 -0
  45. package/web/assets/flowDiagram-HODETNUW-B8f97K7O.js +1 -0
  46. package/web/assets/{ganttDiagram-EL5Y4UJY-CP6jitUy.js → ganttDiagram-EL5Y4UJY-yJn7OfqB.js} +1 -1
  47. package/web/assets/{gitGraph-4MIJSDKK-oawlk7I3.js → gitGraph-4MIJSDKK-t1lapCDL.js} +1 -1
  48. package/web/assets/{gitGraphDiagram-WWUBYQGX-3nkYxqZA.js → gitGraphDiagram-WWUBYQGX-CY6KrIoH.js} +1 -1
  49. package/web/assets/{index-zpUyyQNO.js → index-C6e0hvny.js} +2 -2
  50. package/web/assets/{info-A6RAGUB7-D0Ip46Kv.js → info-A6RAGUB7-Zv6ymOtd.js} +1 -1
  51. package/web/assets/{infoDiagram-27XIBGKW-DBo13HEu.js → infoDiagram-27XIBGKW-D6--I4WT.js} +1 -1
  52. package/web/assets/{ishikawaDiagram-5VMMS53U-BCmcQfim.js → ishikawaDiagram-5VMMS53U-_FJNqJMi.js} +1 -1
  53. package/web/assets/{journeyDiagram-3NMN7TZE-DpzLakrl.js → journeyDiagram-3NMN7TZE-BKDN3rs0.js} +1 -1
  54. package/web/assets/{kanban-definition-UXKFOSKX-BxOQN_ez.js → kanban-definition-UXKFOSKX-ByAtJljC.js} +1 -1
  55. package/web/assets/{line-D-_jYPsL.js → line-B7uxhC-5.js} +1 -1
  56. package/web/assets/{mermaid-parser.core-BtiNyzFG.js → mermaid-parser.core-Bwtwh3JB.js} +3 -3
  57. package/web/assets/{mermaid.core-_waZYNe5.js → mermaid.core-CNlq59L5.js} +4 -4
  58. package/web/assets/{mindmap-definition-YA3MSWOX-ab_FtlLX.js → mindmap-definition-YA3MSWOX-Byb-XW76.js} +1 -1
  59. package/web/assets/{mount-DDNxGSlT.js → mount-Bk3Asn6p.js} +5 -5
  60. package/web/assets/{packet-AYTQ26CC-BeMhObKl.js → packet-AYTQ26CC-DWfq_LqS.js} +1 -1
  61. package/web/assets/{pegDiagram-XKGWAZYB-BJbYYKpL.js → pegDiagram-XKGWAZYB-CGOr7yGV.js} +1 -1
  62. package/web/assets/{pie-WAS4IAKB-Ct9lp4qC.js → pie-WAS4IAKB-DnqQhegC.js} +1 -1
  63. package/web/assets/{pieDiagram-E7YTZNPT-D4mOcFkJ.js → pieDiagram-E7YTZNPT-CMH2zfmS.js} +1 -1
  64. package/web/assets/{quadrantDiagram-AXDQQJYC-ByXS4ybb.js → quadrantDiagram-AXDQQJYC-Be1cYqzi.js} +1 -1
  65. package/web/assets/{radar-RG4KPBEZ-BdNCDjZQ.js → radar-RG4KPBEZ-htGF20DN.js} +1 -1
  66. package/web/assets/{railroad-74A4TZTK-BSzEEUjB.js → railroad-74A4TZTK-CtNCGLR-.js} +1 -1
  67. package/web/assets/railroad-abnf-HS5TGJTU-DjCy4lGJ.js +1 -0
  68. package/web/assets/railroad-ebnf-LZEXJU2U-DmUJjk_0.js +1 -0
  69. package/web/assets/railroad-peg-WCYAUIDC-VHMl_0rY.js +1 -0
  70. package/web/assets/{railroadDiagram-O6MQD6OU-DV77PsZ7.js → railroadDiagram-O6MQD6OU-TSnQ-WeS.js} +1 -1
  71. package/web/assets/{requirementDiagram-BXWQKSXE-B-LXjzYe.js → requirementDiagram-BXWQKSXE-CktFQA8z.js} +1 -1
  72. package/web/assets/{sankeyDiagram-P5KCCOFB-5p_xNGOA.js → sankeyDiagram-P5KCCOFB-C08Pyczq.js} +1 -1
  73. package/web/assets/{sequenceDiagram-WJ2MYXX4-CGZy-41j.js → sequenceDiagram-WJ2MYXX4-CJ3ole47.js} +1 -1
  74. package/web/assets/{settingsRoute-DqRzXcAY.js → settingsRoute-2DTdzGYS.js} +1 -1
  75. package/web/assets/{stateDiagram-D77RDMKH-B7NoPezN.js → stateDiagram-D77RDMKH-CErlP_6G.js} +1 -1
  76. package/web/assets/stateDiagram-v2-MP3YSRHH-Ctt10ITo.js +1 -0
  77. package/web/assets/{swimlanes-42K2YHIH-XkAKS_yJ.js → swimlanes-42K2YHIH-CYL4ciqb.js} +1 -1
  78. package/web/assets/swimlanesDiagram-VR7AAH4N-B6qKcB1V.js +8 -0
  79. package/web/assets/{timeline-definition-24CTP7MA-BvzBU07D.js → timeline-definition-24CTP7MA-CqkX1HkI.js} +1 -1
  80. package/web/assets/{treeView-Q6P3EWNA-DeNVZP1c.js → treeView-Q6P3EWNA-C7o62z_s.js} +1 -1
  81. package/web/assets/{treemap-WGGIJYW6-DlqnSUtC.js → treemap-WGGIJYW6-pywCaiIR.js} +1 -1
  82. package/web/assets/{useStore-IOxPOH3e.js → useStore-Dy8Scbhs.js} +1 -1
  83. package/web/assets/{vennDiagram-4TSXK5OY-xbQt0_gL.js → vennDiagram-4TSXK5OY-BgUVPdqY.js} +1 -1
  84. package/web/assets/{wardley-WFR3VGLG-Bv4lsZ4K.js → wardley-WFR3VGLG-DCuI1b_Z.js} +1 -1
  85. package/web/assets/{wardleyDiagram-VM6X3IG4-Cau3ldDa.js → wardleyDiagram-VM6X3IG4-yA2KJnKC.js} +1 -1
  86. package/web/assets/{xychartDiagram-S5SC5T6Z-DkwMFs87.js → xychartDiagram-S5SC5T6Z-BqWBCZTf.js} +1 -1
  87. package/web/index.html +1 -1
  88. package/web/sw.js +1 -1
  89. package/web/assets/architecture-7GRP2DOG-OH85T1yc.js +0 -1
  90. package/web/assets/channel-Bp_C9x8I.js +0 -1
  91. package/web/assets/classDiagram-ZZMXUADV-DzmF27dI.js +0 -1
  92. package/web/assets/classDiagram-v2-VYDZK3BY-DzmF27dI.js +0 -1
  93. package/web/assets/eventmodeling-NTZA5JFV-Dqur4OgF.js +0 -1
  94. package/web/assets/flowDiagram-HODETNUW-Dk2afkpt.js +0 -1
  95. package/web/assets/railroad-abnf-HS5TGJTU-DIiHf8ri.js +0 -1
  96. package/web/assets/railroad-ebnf-LZEXJU2U-4H3Oumru.js +0 -1
  97. package/web/assets/railroad-peg-WCYAUIDC-CDGFsoOg.js +0 -1
  98. package/web/assets/stateDiagram-v2-MP3YSRHH-Bb8mTi-E.js +0 -1
  99. package/web/assets/swimlanesDiagram-VR7AAH4N-B-HNasrk.js +0 -8
@@ -1,11 +1,11 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/common-DvIV9UK2.js","assets/rolldown-runtime-hePW80VL.js","assets/mermaid.core-_waZYNe5.js","assets/index-zpUyyQNO.js","assets/index-DPD-O0uT.css","assets/chunk-Y2CYZVJY-DsF7k-Jl.js","assets/src-B6xuSHsQ.js","assets/chunk-DU6HZSFF-DEWchgqz.js","assets/chunk-75Z2AOVW-CRSwYgGa.js","assets/dist-v5Q1xZ2K.js","assets/chunk-PWAF6VOD-B6-tqDJ_.js","assets/chunk-GMAD6QVW-DJhWvb-f.js","assets/chunk-P2QGCYS3-BZp2Gxlg.js","assets/chunk-4HAMMTFA-COnO_bSA.js","assets/rough.esm-Dy-Kn_BL.js","assets/chunk-GVQU2GXP-BhL-vgyG.js","assets/chunk-OSK3NFVY-BpkFVV5j.js","assets/line-D-_jYPsL.js","assets/path-fybaL0A-.js","assets/array-BifhSqXX.js","assets/graphlib-DS17s2tU.js","assets/chunk-L3NEJ4N5-Dv5wmhCC.js","assets/Terminal-dczoFzd6.js","assets/useStore-IOxPOH3e.js","assets/jsx-runtime-NZYk81nU.js","assets/Sheet-BcTCzY9r.js","assets/ChangesCard-ChUvrnBi.js","assets/StatusDot-dpbztK53.js","assets/Terminal-B1njb2Cr.css","assets/ReadinessChecklist-Bbgq2GQ8.js","assets/Settings-Bsv6N5oX.js","assets/ProviderConnect-BlYYhfdq.js","assets/AutomationsView-CF3Yde7g.js","assets/LibraryView-BqtDKX0H.js"])))=>i.map(i=>d[i]);
2
- import{n as e,t}from"./rolldown-runtime-hePW80VL.js";import{D as n,E as r,I as i,L as a,N as o,R as s,V as c,a as l,b as u,c as d,d as f,f as p,i as m,j as h,l as g,m as _,n as v,o as y,p as b,r as x,s as S,t as C,u as w,z as T}from"./index-zpUyyQNO.js";import{A as E,B as D,C as O,Ct as k,D as ee,Dt as A,E as j,Et as M,F as N,I as P,J as te,L as ne,M as re,Nt as ie,Ot as ae,P as oe,R as se,S as ce,T as le,Tt as ue,U as de,V as fe,W as pe,Y as F,_ as I,a as me,c as he,d as ge,dt as _e,f as ve,ft as L,g as ye,h as be,i as R,j as xe,k as Se,l as Ce,m as we,mt as Te,n as z,o as Ee,p as De,pt as Oe,rt as ke,s as Ae,t as je,u as Me,ut as Ne,v as Pe,vt as Fe,w as Ie,wt as Le,x as Re,xt as ze,y as Be,yt as Ve,z as He}from"./useStore-IOxPOH3e.js";import{A as Ue,C as We,D as Ge,E as Ke,T as qe,_ as Je,a as Ye,b as Xe,c as Ze,f as Qe,g as $e,h as et,i as tt,k as nt,l as rt,n as B,o as it,r as at,t as V,v as ot,w as st,x as ct,y as lt}from"./Sheet-BcTCzY9r.js";import{a as ut,c as dt,f as ft,g as pt,h as mt,i as ht,m as gt,n as _t,o as vt,p as yt,r as bt,s as xt,t as St}from"./ChangesCard-ChUvrnBi.js";import{t as Ct}from"./jsx-runtime-NZYk81nU.js";import{t as wt}from"./StatusDot-dpbztK53.js";import{a as Tt,i as Et,n as Dt,r as Ot,t as kt}from"./settingsRoute-DqRzXcAY.js";import{i as At,n as jt,r as Mt}from"./ProviderConnect-BlYYhfdq.js";var Nt=[{kind:`fork`,pattern:/^I am continuing an existing Bivy session \(forked from (.+?) to .+?\)\./},{kind:`import`,pattern:/^I am continuing an? (.+?) session that was started outside Bivy and imported here\./}];function Pt(e){if(e)for(let t of Nt){let n=t.pattern.exec(e);if(n)return{kind:t.kind,from:n[1]}}}var Ft=[`todos`,`plan`,`entries`,`items`,`steps`,`tasks`],It=[`content`,`step`,`text`,`title`,`subject`,`description`,`task`],Lt={pending:`pending`,todo:`pending`,notstarted:`pending`,open:`pending`,inprogress:`in_progress`,active:`in_progress`,running:`in_progress`,doing:`in_progress`,current:`in_progress`,started:`in_progress`,completed:`completed`,complete:`completed`,done:`completed`,finished:`completed`,success:`completed`,cancelled:`cancelled`,canceled:`cancelled`,skipped:`cancelled`,abandoned:`cancelled`};function Rt(e){return Lt[String(e??``).toLowerCase().replace(/[^a-z]/g,``)]}function zt(e,t){for(let n of t){let t=e[n];if(typeof t==`string`&&t.trim())return t.trim()}}function Bt(e){if(!e||typeof e!=`object`||Array.isArray(e))return;let t=e,n=Ft.map(e=>t[e]).find(Array.isArray);if(!n?.length)return;let r=[];for(let e of n){if(typeof e==`string`){r.push({text:e,status:`pending`});continue}if(!e||typeof e!=`object`)continue;let t=e,n=zt(t,It),i=Rt(t.status??t.state),a=t.id??t.taskId;r.push({...n?{text:n}:{},...i?{status:i}:{},...a!=null&&a!==``?{id:String(a)}:{}})}let i=t.merge===!0;if(i||r.some(e=>e.text))return{entries:r,merge:i}}function Vt(e,t){if(!t.merge)return t.entries.filter(e=>e.text).map(e=>({text:e.text,status:e.status??`pending`,...e.id?{id:e.id}:{}}));let n=e.map(e=>({...e}));for(let e of t.entries){let t=e.id?n.find(t=>t.id===e.id):void 0;t?(e.text&&(t.text=e.text),e.status&&(t.status=e.status)):e.text&&n.push({text:e.text,status:e.status??`pending`,...e.id?{id:e.id}:{}})}return n}function H(e){if(e==null||e===``)return``;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}function Ht(e){let t=String(e||``).trim();if(!t)return``;let n=t.split(`/`).filter(Boolean);return n.length>2?`…/${n.slice(-2).join(`/`)}`:t}function Ut(e){return e?.toolInput??e?.input??e?.args??e?.arguments??e?.toolCall?.arguments??{}}function Wt(e){return String(e?.toolName||e?.name||e?.tool?.name||e?.tool||e?.toolCall?.name||`tool`).toLowerCase()}var Gt={apply_automations:{title:`Apply automations to your account?`,consequence:e=>{let t=Array.isArray(e.changes)?e.changes.length:0;return`The agent wants to make ${t} change${t===1?``:`s`} to your automations.`},severity:e=>Array.isArray(e.changes)&&e.changes.some(e=>String(e).startsWith(`Remove `))?`critical`:`high`,fields:e=>[[`File`,e.file],[`Changes`,Array.isArray(e.changes)?e.changes.join(`
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/common-DvIV9UK2.js","assets/rolldown-runtime-hePW80VL.js","assets/mermaid.core-CNlq59L5.js","assets/index-C6e0hvny.js","assets/index-DPD-O0uT.css","assets/chunk-Y2CYZVJY-DsF7k-Jl.js","assets/src-B6xuSHsQ.js","assets/chunk-DU6HZSFF-DAvPXwYN.js","assets/chunk-75Z2AOVW-CAeV8UiH.js","assets/dist-v5Q1xZ2K.js","assets/chunk-PWAF6VOD-C7VQERHF.js","assets/chunk-GMAD6QVW-9yquOIER.js","assets/chunk-P2QGCYS3-Dn2CECEw.js","assets/chunk-4HAMMTFA-nctntAbh.js","assets/rough.esm-Dy-Kn_BL.js","assets/chunk-GVQU2GXP-C_TX3OgB.js","assets/chunk-OSK3NFVY-CwpoggsE.js","assets/line-B7uxhC-5.js","assets/path-fybaL0A-.js","assets/array-BifhSqXX.js","assets/graphlib-DS17s2tU.js","assets/chunk-L3NEJ4N5-BnOmNMkV.js","assets/Terminal-CcT_BiQ-.js","assets/useStore-Dy8Scbhs.js","assets/jsx-runtime-NZYk81nU.js","assets/Sheet-RMf7I6AF.js","assets/ChangesCard-BwD96uul.js","assets/StatusDot-dpbztK53.js","assets/Terminal-B1njb2Cr.css","assets/ReadinessChecklist-Bbgq2GQ8.js","assets/Settings-C31Y0zji.js","assets/ProviderConnect-BhOBqv4c.js","assets/AutomationsView-Dmvlsz0Z.js","assets/LibraryView-B-kxSGdG.js"])))=>i.map(i=>d[i]);
2
+ import{n as e,t}from"./rolldown-runtime-hePW80VL.js";import{D as n,E as r,I as i,L as a,N as o,R as s,V as c,a as l,b as u,c as d,d as f,f as p,i as m,j as h,l as g,m as _,n as v,o as y,p as b,r as x,s as S,t as C,u as w,z as T}from"./index-C6e0hvny.js";import{A as E,B as D,C as O,Ct as k,D as ee,Dt as A,E as j,Et as M,F as N,I as P,J as te,L as ne,M as re,Nt as ie,Ot as ae,P as oe,R as se,S as ce,T as le,Tt as ue,U as de,V as fe,W as pe,Y as F,_ as I,a as me,c as he,d as ge,dt as _e,f as ve,ft as L,g as ye,h as be,i as R,j as xe,k as Se,l as Ce,m as we,mt as Te,n as z,o as Ee,p as De,pt as Oe,rt as ke,s as Ae,t as je,u as Me,ut as Ne,v as Pe,vt as Fe,w as Ie,wt as Le,x as Re,xt as ze,y as Be,yt as Ve,z as He}from"./useStore-Dy8Scbhs.js";import{A as Ue,C as We,D as Ge,E as Ke,T as qe,_ as Je,a as Ye,b as Xe,c as Ze,f as Qe,g as $e,h as et,i as tt,k as nt,l as rt,n as B,o as it,r as at,t as V,v as ot,w as st,x as ct,y as lt}from"./Sheet-RMf7I6AF.js";import{a as ut,c as dt,f as ft,g as pt,h as mt,i as ht,m as gt,n as _t,o as vt,p as yt,r as bt,s as xt,t as St}from"./ChangesCard-BwD96uul.js";import{t as Ct}from"./jsx-runtime-NZYk81nU.js";import{t as wt}from"./StatusDot-dpbztK53.js";import{a as Tt,i as Et,n as Dt,r as Ot,t as kt}from"./settingsRoute-2DTdzGYS.js";import{i as At,n as jt,r as Mt}from"./ProviderConnect-BhOBqv4c.js";var Nt=[{kind:`fork`,pattern:/^I am continuing an existing Bivy session \(forked from (.+?) to .+?\)\./},{kind:`import`,pattern:/^I am continuing an? (.+?) session that was started outside Bivy and imported here\./}];function Pt(e){if(e)for(let t of Nt){let n=t.pattern.exec(e);if(n)return{kind:t.kind,from:n[1]}}}var Ft=[`todos`,`plan`,`entries`,`items`,`steps`,`tasks`],It=[`content`,`step`,`text`,`title`,`subject`,`description`,`task`],Lt={pending:`pending`,todo:`pending`,notstarted:`pending`,open:`pending`,inprogress:`in_progress`,active:`in_progress`,running:`in_progress`,doing:`in_progress`,current:`in_progress`,started:`in_progress`,completed:`completed`,complete:`completed`,done:`completed`,finished:`completed`,success:`completed`,cancelled:`cancelled`,canceled:`cancelled`,skipped:`cancelled`,abandoned:`cancelled`};function Rt(e){return Lt[String(e??``).toLowerCase().replace(/[^a-z]/g,``)]}function zt(e,t){for(let n of t){let t=e[n];if(typeof t==`string`&&t.trim())return t.trim()}}function Bt(e){if(!e||typeof e!=`object`||Array.isArray(e))return;let t=e,n=Ft.map(e=>t[e]).find(Array.isArray);if(!n?.length)return;let r=[];for(let e of n){if(typeof e==`string`){r.push({text:e,status:`pending`});continue}if(!e||typeof e!=`object`)continue;let t=e,n=zt(t,It),i=Rt(t.status??t.state),a=t.id??t.taskId;r.push({...n?{text:n}:{},...i?{status:i}:{},...a!=null&&a!==``?{id:String(a)}:{}})}let i=t.merge===!0;if(i||r.some(e=>e.text))return{entries:r,merge:i}}function Vt(e,t){if(!t.merge)return t.entries.filter(e=>e.text).map(e=>({text:e.text,status:e.status??`pending`,...e.id?{id:e.id}:{}}));let n=e.map(e=>({...e}));for(let e of t.entries){let t=e.id?n.find(t=>t.id===e.id):void 0;t?(e.text&&(t.text=e.text),e.status&&(t.status=e.status)):e.text&&n.push({text:e.text,status:e.status??`pending`,...e.id?{id:e.id}:{}})}return n}function H(e){if(e==null||e===``)return``;if(typeof e==`string`)return e;try{return JSON.stringify(e)}catch{return String(e)}}function Ht(e){let t=String(e||``).trim();if(!t)return``;let n=t.split(`/`).filter(Boolean);return n.length>2?`…/${n.slice(-2).join(`/`)}`:t}function Ut(e){return e?.toolInput??e?.input??e?.args??e?.arguments??e?.toolCall?.arguments??{}}function Wt(e){return String(e?.toolName||e?.name||e?.tool?.name||e?.tool||e?.toolCall?.name||`tool`).toLowerCase()}var Gt={apply_automations:{title:`Apply automations to your account?`,consequence:e=>{let t=Array.isArray(e.changes)?e.changes.length:0;return`The agent wants to make ${t} change${t===1?``:`s`} to your automations.`},severity:e=>Array.isArray(e.changes)&&e.changes.some(e=>String(e).startsWith(`Remove `))?`critical`:`high`,fields:e=>[[`File`,e.file],[`Changes`,Array.isArray(e.changes)?e.changes.join(`
3
3
  `):``]]}};function Kt(e){let t=Ut(e),n=Wt(e),r=Gt[n];if(r)return r.severity(t);let i=`${n} ${Object.values(t).map(H).join(` `)}`.toLowerCase();return/\b(rm\s+-rf|rm\s+-r|delete|unlink|drop\s+table|shutdown|reboot|format|wipe)\b/.test(i)?`critical`:/\b(send|email|mail|post|publish|deploy|push|scp|curl|wget|ssh|chmod|chown|sudo)\b/.test(i)?`high`:/\b(write|edit|mv|move|cp|copy|install|update|create)\b/.test(i)?`medium`:`low`}function qt(e){let t=Ut(e),n=Wt(e);if(Gt[n])return Gt[n].title;let r=t.path||t.file||t.filePath||t.pathname;return n.includes(`bash`)||n.includes(`shell`)?`Run this command?`:n.includes(`mail`)||n.includes(`email`)||n.includes(`send`)?`Agent wants to send a message`:n.includes(`edit`)?`Edit ${Ht(r)||`a file`}?`:n.includes(`write`)?`Write ${Ht(r)||`a file`}?`:`Allow ${n}?`}function Jt(e,t=Kt(e)){let n=Ut(e),r=Wt(e);if(Gt[r])return Gt[r].consequence(n);let i=String(n.command||n.cmd||n.shell||``).trim(),a=n.path||n.file||n.filePath||n.pathname||n.cwd||n.directory,o=n.to||n.recipients||n.recipient,s=Array.isArray(o)?o.length:o?String(o).split(`,`).filter(Boolean).length:0,c=`${r} ${i}`.toLowerCase();return s||r.includes(`mail`)||r.includes(`email`)||/\b(sendmail|mail)\b/.test(c)?s?`This sends a message to ${s} recipient${s===1?``:`s`} immediately.`:`This sends a message immediately.`:t===`critical`?a?`This can permanently change or delete data in ${a}. This may not be undoable.`:`This can permanently change or delete data. This may not be undoable.`:/\b(curl|wget|ssh|scp|git\s+push|deploy)\b/.test(c)?`This connects to an external service or publishes data outside this machine.`:/\b(npm|bun|pnpm|yarn)\s+(install|add|update)\b/.test(c)?`This changes project dependencies on this machine.`:r.includes(`write`)||r.includes(`edit`)||/\b(write|edit|mv|cp)\b/.test(c)?a?`This changes files at ${a}.`:`This changes files in the workspace.`:`The agent is paused until you approve this action.`}function Yt(e){let t=Ut(e),n=Wt(e);return n.includes(`bash`)||n.includes(`shell`)?String(t.command||t.cmd||t.shell||``).trim():``}function Xt(e){let t=Ut(e),n=Wt(e),r=[],i=(e,t,n=420)=>{let i=String(t??``).trim();i&&r.push([e,i.length>n?`${i.slice(0,n)}…`:i])};if(Gt[n]){for(let[e,r]of Gt[n].fields(t))i(e,r,1/0);return r}return i(`Tool`,n),i(`File`,t.path||t.file||t.filePath||t.pathname),i(`Command`,n.includes(`bash`)||n.includes(`shell`)?``:t.command),i(`Find`,t.oldText||t.search||t.find),i(`Replace`,t.newText||t.replace),i(`Text`,t.content||t.text),r}function Zt(e){let t=Kt(e),n=Ut(e),r=``;try{r=JSON.stringify(n,null,2)}catch{r=String(n)}return{severity:t,title:qt(e),consequence:Jt(e,t),command:Yt(e),fields:Xt(e),rawInput:r,canRemember:t!==`critical`}}var Qt=`receipt.v1`,$t={id:200,text:240,ref:500,list:100,checks:50},en=/prompt|transcript|reasoning|diff|secret|token|stdout|stderr|raw.?output|raw.?input|raw.?command|raw.?tool|file.?content|repository.?content/i;function tn(e,t=new Set){if(e&&typeof e==`object`){if(t.has(e))throw Error(`cyclic Receipt evidence rejected`);t.add(e);for(let[n,r]of Object.entries(e)){if(en.test(n))throw Error(`prohibited Receipt field rejected: ${n}`);tn(r,t)}t.delete(e)}}function U(e,t,n=$t.text){if(e!=null&&e!==``){if(typeof e!=`string`||e.length>n)throw Error(`${t} must be a string of at most ${n} characters`);return e}}function W(e,t,n=$t.id){let r=U(e,t,n)?.trim();if(!r)throw Error(`${t} is required`);return r}function nn(e,t){let n=U(e,t,40);if(n){if(!Number.isFinite(Date.parse(n)))throw Error(`${t} must be an ISO date-time`);return n}}function rn(e,t){e.includes(t)||e.push(t)}var an={run_in_progress:`The Run has no evidence-backed terminal outcome yet.`,session_not_correlated:`Run evidence was not correlated to an underlying Session.`,machine_identity_not_reported:`A customer-readable Machine identity was not reported with this Run.`,execution_identity_not_reported:`Provider, runtime, or model version evidence was not fully reported.`,effective_protection_not_observed:`Requested protection is visible, but its effective settings were not observed.`,approval_decisions_not_correlated:`Approval and denial decisions were not durably correlated to this Run.`,governance_events_not_correlated:`Governance audit events were not durably correlated to this Run.`,change_metadata_not_reported:`A bounded file/change summary or explicit no-change evidence was not reported.`,check_metadata_incomplete:`One or more checks lack required, timeout, or other deterministic metadata.`,audit_health_unknown:`Audit storage health or successful writes could not be confirmed.`,audit_write_failed:`At least one required audit write or readable-storage check is missing.`};function on(e){if(tn(e),!e||typeof e!=`object`||!e.run||typeof e.run!=`object`)throw Error(`Receipt evidence is required`);let t=W(e.receiptId,`receiptId`),n=W(e.run.id,`run.id`),r=W(nn(e.createdAt,`createdAt`),`createdAt`,40),i=U(e.run.output?.sessionId,`sessionId`,$t.id),a=nn(e.run.startedAt??e.run.claimedAt,`run.startedAt`),o=nn(e.run.completedAt,`run.completedAt`),s=a&&o?Date.parse(o)-Date.parse(a):void 0;if(s!==void 0&&s<0)throw Error(`Run end precedes start`);let c=(e.run.checks??[]).slice(0,$t.checks).map((e,t)=>({name:W(e.name,`checks[${t}].name`,120),...U(e.commandHash,`checks[${t}].commandHash`,128)?{commandHash:e.commandHash}:{},status:e.status,...typeof e.durationMs==`number`?{durationMs:e.durationMs}:{},...typeof e.exitCode==`number`?{exitCode:e.exitCode}:{}})),l=[`succeeded`,`failed`,`cancelled`,`done`].includes(e.run.status),u,d;e.run.status===`cancelled`?(u=`cancelled`,d=`run_cancelled`):l&&c.some(e=>e.status===`failed`)?(u=`checks_failed`,d=`check_failed`):e.run.status===`failed`?(u=`failed`,d=`run_failed`):l&&(e.run.output?.branch||e.run.output?.commit||e.run.output?.prUrl||e.run.output?.checkpoint||e.run.output?.artifactUrl)?(u=`changes_ready`,d=`artifact_recorded`):e.run.status===`succeeded`&&c.length>0&&c.every(e=>e.status===`passed`)&&(u=`succeeded`,d=`checks_passed`);let f=e.run.repo?`${W(e.run.repo,`run.repo`,200)}${Number.isInteger(e.run.issueNumber)?`#${e.run.issueNumber}`:``}`:U(e.run.externalId,`run.externalId`,200),p=(e.run.events??[]).filter(e=>e.kind===`retry`||e.kind===`fallback`).slice(-$t.list).map(e=>e.kind),m=e.protection?.effective,h=(e.protection?.capabilities??[]).slice(0,20).map((e,t)=>({capability:W(e.capability,`capabilities[${t}].capability`,40),evidenceClass:e.evidenceClass,...U(e.mechanism,`capabilities[${t}].mechanism`,120)?{mechanism:e.mechanism}:{}})),g=e.auditHealth??{correlation:`unknown`,readableStorage:`unknown`,successfulWrites:`unknown`},_=e.governance,v={...U(e.run.output?.branch,`changes.branch`,$t.ref)?{branch:e.run.output.branch}:{},...U(e.run.output?.commit,`changes.commit`,200)?{commit:e.run.output.commit}:{},...U(e.run.output?.prUrl,`changes.pullRequest`,$t.ref)?{pullRequest:e.run.output.prUrl}:{},...U(e.run.output?.checkpoint,`changes.checkpoint`,$t.ref)?{checkpoint:e.run.output.checkpoint}:{},...U(e.run.output?.artifactUrl,`changes.artifact`,$t.ref)?{artifact:e.run.output.artifactUrl}:{},files:(_?.fileChanges.files??[]).slice(0,$t.list).map((e,t)=>({path:W(e.path,`changes.files[${t}].path`,$t.ref),...U(e.op,`changes.files[${t}].op`,20)?{op:e.op}:{},...typeof e.added==`number`?{added:e.added}:{},...typeof e.removed==`number`?{removed:e.removed}:{}})),added:_?.fileChanges.added??0,removed:_?.fileChanges.removed??0},y=[];(!a||!o)&&rn(y,`run_timing`),u||rn(y,`terminal_outcome`),i||rn(y,`session_correlation`),(!e.run.claimedByNodeId||!e.execution?.machineName)&&rn(y,`machine_identity`),(!e.execution?.profile||!e.execution.controller||!e.run.runtimeId||!e.run.model||!e.execution.modelVersionStatus)&&rn(y,`execution_identity`),m||rn(y,`effective_protection`),h.length||rn(y,`protection_evidence`),_||rn(y,`approval_decisions`),!v.branch&&!v.commit&&!v.pullRequest&&!v.checkpoint&&!v.artifact&&!v.files.length&&rn(y,`change_evidence`),_||rn(y,`file_change_summary`),c.some(e=>!e.commandHash||typeof e.durationMs!=`number`||e.status!==`skipped`&&typeof e.exitCode!=`number`)&&rn(y,`check_details`),g.correlation!==`healthy`&&rn(y,`audit_correlation`),g.readableStorage!==`healthy`&&rn(y,`audit_storage`),g.successfulWrites!==`healthy`&&rn(y,`audit_writes`);let b=[];return u||b.push(`run_in_progress`),i||b.push(`session_not_correlated`),y.includes(`machine_identity`)&&b.push(`machine_identity_not_reported`),y.includes(`execution_identity`)&&b.push(`execution_identity_not_reported`),y.includes(`effective_protection`)&&b.push(`effective_protection_not_observed`),y.includes(`approval_decisions`)&&b.push(`approval_decisions_not_correlated`),y.includes(`audit_correlation`)&&b.push(`governance_events_not_correlated`),(y.includes(`change_evidence`)||y.includes(`file_change_summary`))&&b.push(`change_metadata_not_reported`),y.includes(`check_details`)&&b.push(`check_metadata_incomplete`),[g.correlation,g.readableStorage,g.successfulWrites].includes(`unknown`)&&b.push(`audit_health_unknown`),[g.readableStorage,g.successfulWrites].includes(`missing`)&&b.push(`audit_write_failed`),{schemaVersion:Qt,receiptId:t,runId:n,...i?{sessionId:i}:{},createdAt:r,completeness:y.length?`partial`:`complete`,run:{...a?{startedAt:a}:{},...o?{endedAt:o}:{},...s===void 0?{}:{durationMs:s},...u?{terminalOutcome:u,outcomeReason:d}:{},attempts:Math.max(1,Math.min(100,Math.trunc(e.run.attempt??1))),retryFallbackReasons:p,source:{kind:W(e.run.source,`run.source`,40),...f?{reference:f}:{}}},execution:{...e.run.claimedByNodeId?{machineId:W(e.run.claimedByNodeId,`machineId`)}:{},...e.execution?.machineName?{machineName:W(e.execution.machineName,`machineName`,120)}:{},...e.execution?.profile?{profile:e.execution.profile}:{},...e.execution?.controller?{controller:e.execution.controller}:{},...e.execution?.provider?{provider:W(e.execution.provider,`provider`,80)}:{},...e.execution?.region?{region:W(e.execution.region,`region`,80)}:{},...e.execution?.image?{image:W(e.execution.image,`image`,160)}:{},...e.run.runtimeId?{agentId:W(e.run.runtimeId,`agentId`,120)}:{},...e.execution?.agentVersion?{agentVersion:W(e.execution.agentVersion,`agentVersion`,80)}:{},...e.run.model?{modelId:W(e.run.model,`modelId`,160)}:{},...e.execution?.modelVersionStatus?{modelVersionStatus:e.execution.modelVersionStatus}:{}},protection:{requested:{...e.run.sandbox?{sandboxTier:e.run.sandbox}:{},...e.run.approvalMode?{approvalMode:e.run.approvalMode}:{}},effective:m?{...m,...m.trustModes?{trustModes:m.trustModes.slice(0,20).map((e,t)=>W(e,`trustModes[${t}]`,80))}:{}}:{},capabilities:h},approvals:_?.approvals??{requests:0,approved:0,denied:0},changes:v,checks:c,auditHealth:g,missingEvidence:y,observationLimitations:b.map(e=>({code:e,message:an[e]}))}}function sn(e,t){let n=e.source.kind||`unknown`,[,r,i]=n.length>40&&n.match(/^([^:]{1,40}):(.+)$/)||[],a=r??n.slice(0,40),o=e.source.reference||i?.slice(0,200),s=o?.match(/^([^#]+)#(\d+)$/);return on({receiptId:`receipt-${e.id}`,createdAt:t,run:{id:e.id,source:a,status:e.origin.status,createdAt:e.timestamps.createdAt,claimedAt:e.timestamps.claimedAt,startedAt:e.timestamps.startedAt,completedAt:e.timestamps.completedAt,attempt:e.attempt,...s?{repo:s[1],issueNumber:Number(s[2])}:o?{externalId:o}:{},...e.machine?.id?{claimedByNodeId:e.machine.id}:{},...e.requested.runtimeId?{runtimeId:e.requested.runtimeId}:{},...e.requested.model?{model:e.requested.model}:{},...e.requested.approvalMode?{approvalMode:e.requested.approvalMode}:{},...e.requested.sandbox?{sandbox:e.requested.sandbox}:{},output:{...e.sessionId?{sessionId:e.sessionId}:{},...e.references.branch?{branch:e.references.branch}:{},...e.references.commit?{commit:e.references.commit}:{},...e.references.pullRequest?{prUrl:e.references.pullRequest}:{},...e.references.checkpoint?{checkpoint:e.references.checkpoint}:{},...e.references.artifact?{artifactUrl:e.references.artifact}:{}},checks:e.checks,events:e.events},...e.machine?.name||e.receiptEvidence?.execution?{execution:{...e.receiptEvidence?.execution??{},...e.machine?.name?{machineName:e.machine.name}:{}}}:{},...e.receiptEvidence?.protection?{protection:e.receiptEvidence.protection}:{},...e.receiptEvidence?{governance:e.receiptEvidence,auditHealth:e.receiptEvidence.auditHealth}:{}})}function cn(e){tn(e);let t={schemaVersion:Qt,receiptId:W(e.receiptId,`receiptId`),runId:W(e.runId,`runId`),...U(e.sessionId,`sessionId`,$t.id)?{sessionId:e.sessionId}:{},createdAt:W(nn(e.createdAt,`createdAt`),`createdAt`,40),completeness:e.completeness,run:{...nn(e.run.startedAt,`run.startedAt`)?{startedAt:e.run.startedAt}:{},...nn(e.run.endedAt,`run.endedAt`)?{endedAt:e.run.endedAt}:{},...typeof e.run.durationMs==`number`?{durationMs:e.run.durationMs}:{},...e.run.terminalOutcome?{terminalOutcome:e.run.terminalOutcome}:{},...e.run.outcomeReason?{outcomeReason:e.run.outcomeReason}:{},attempts:e.run.attempts,retryFallbackReasons:e.run.retryFallbackReasons.slice(0,$t.list),source:{kind:W(e.run.source.kind,`run.source.kind`,40),...U(e.run.source.reference,`run.source.reference`,200)?{reference:e.run.source.reference}:{}}},execution:{...U(e.execution.machineId,`execution.machineId`,$t.id)?{machineId:e.execution.machineId}:{},...U(e.execution.machineName,`execution.machineName`,120)?{machineName:e.execution.machineName}:{},...e.execution.profile?{profile:e.execution.profile}:{},...e.execution.controller?{controller:e.execution.controller}:{},...U(e.execution.provider,`execution.provider`,80)?{provider:e.execution.provider}:{},...U(e.execution.region,`execution.region`,80)?{region:e.execution.region}:{},...U(e.execution.image,`execution.image`,160)?{image:e.execution.image}:{},...U(e.execution.agentId,`execution.agentId`,120)?{agentId:e.execution.agentId}:{},...U(e.execution.agentVersion,`execution.agentVersion`,80)?{agentVersion:e.execution.agentVersion}:{},...U(e.execution.modelId,`execution.modelId`,160)?{modelId:e.execution.modelId}:{},...e.execution.modelVersionStatus?{modelVersionStatus:e.execution.modelVersionStatus}:{}},protection:{requested:{...e.protection.requested.sandboxTier?{sandboxTier:W(e.protection.requested.sandboxTier,`protection.requested.sandboxTier`,40)}:{},...e.protection.requested.approvalMode?{approvalMode:W(e.protection.requested.approvalMode,`protection.requested.approvalMode`,40)}:{}},effective:{...e.protection.effective.executionProfile?{executionProfile:W(e.protection.effective.executionProfile,`protection.effective.executionProfile`,40)}:{},...e.protection.effective.sandboxTier?{sandboxTier:W(e.protection.effective.sandboxTier,`protection.effective.sandboxTier`,40)}:{},...e.protection.effective.approvalMode?{approvalMode:W(e.protection.effective.approvalMode,`protection.effective.approvalMode`,40)}:{},...e.protection.effective.runtimeEnforcement?{runtimeEnforcement:W(e.protection.effective.runtimeEnforcement,`protection.effective.runtimeEnforcement`,120)}:{},...e.protection.effective.trustModes?{trustModes:e.protection.effective.trustModes.slice(0,20).map((e,t)=>W(e,`trustModes[${t}]`,80))}:{}},capabilities:e.protection.capabilities.slice(0,20).map((e,t)=>({capability:W(e.capability,`capabilities[${t}].capability`,40),evidenceClass:e.evidenceClass,...U(e.mechanism,`capabilities[${t}].mechanism`,120)?{mechanism:e.mechanism}:{}}))},approvals:{requests:e.approvals.requests,approved:e.approvals.approved,denied:e.approvals.denied},changes:{...U(e.changes.branch,`changes.branch`,$t.ref)?{branch:e.changes.branch}:{},...U(e.changes.commit,`changes.commit`,200)?{commit:e.changes.commit}:{},...U(e.changes.pullRequest,`changes.pullRequest`,$t.ref)?{pullRequest:e.changes.pullRequest}:{},...U(e.changes.checkpoint,`changes.checkpoint`,$t.ref)?{checkpoint:e.changes.checkpoint}:{},...U(e.changes.artifact,`changes.artifact`,$t.ref)?{artifact:e.changes.artifact}:{},files:e.changes.files.slice(0,$t.list).map((e,t)=>({path:W(e.path,`changes.files[${t}].path`,$t.ref),...U(e.op,`changes.files[${t}].op`,20)?{op:e.op}:{},...typeof e.added==`number`?{added:e.added}:{},...typeof e.removed==`number`?{removed:e.removed}:{}})),added:e.changes.added,removed:e.changes.removed},checks:e.checks.slice(0,$t.checks).map((e,t)=>({name:W(e.name,`checks[${t}].name`,120),...U(e.commandHash,`checks[${t}].commandHash`,128)?{commandHash:e.commandHash}:{},status:e.status,...typeof e.durationMs==`number`?{durationMs:e.durationMs}:{},...typeof e.exitCode==`number`?{exitCode:e.exitCode}:{}})),auditHealth:{correlation:e.auditHealth.correlation,readableStorage:e.auditHealth.readableStorage,successfulWrites:e.auditHealth.successfulWrites},missingEvidence:e.missingEvidence.slice(0,20),observationLimitations:e.observationLimitations.slice(0,20).map(e=>({code:e.code,message:an[e.code]}))};return JSON.stringify(t,null,2)}function ln(e,t){return t.hash?{id:`${e.id}:${t.hash}`,hash:t.hash,name:t.name,mimeType:t.mimeType,kind:t.kind,size:t.size,caption:e.role===`assistant`&&e.text?e.text:void 0,createdAt:t.createdAt,artifact:!!t.artifact,origin:e.role===`assistant`?`agent`:`user`,entryId:e.id}:null}function un(e,t){return{id:`${e.id}:${t.hash}`,hash:t.hash,name:t.name,mimeType:t.mimeType,kind:t.kind,size:t.size,artifact:!1,origin:`inline`,entryId:e.id}}function dn(e,t){return e&&e.artifact&&!t.artifact?{...t,artifact:!0}:t}function fn(e){let t=new Map;for(let n of e){for(let e of n.attachments??[]){let r=ln(n,e);r&&t.set(r.hash,dn(t.get(r.hash),r))}for(let e of Object.values(n.imageRefs??{}))e?.hash&&!t.has(e.hash)&&t.set(e.hash,un(n,e))}return[...t.values()].sort((e,t)=>(t.createdAt??-1)-(e.createdAt??-1)).slice(0,500)}function pn(e){let t=new Map;for(let n of e)n.app&&!t.has(n.app.appId)&&t.set(n.app.appId,n.app);return[...t.values()]}var G=ie();function mn(e){return e.needsAction||e.status===`needs_action`?`needs-action`:e.status===`working`?`working`:e.status===`failed`?`failed`:e.status===`saved`?`saved`:`idle`}function hn(e){return gn(e)?`unseen`:mn(e)}function gn(e){return e.status!==`idle`||e.finishedAt==null?!1:e.lastSeenAt==null||e.finishedAt>e.lastSeenAt}function _n(e){return e.needsAction||e.status===`needs_action`?3:e.status===`failed`?2:+!!gn(e)}function vn(e){return e.needsAction||e.status===`needs_action`?`Waiting for you`:e.status===`working`?`Working`:e.status===`failed`?`Failed`:e.finishedAt==null?e.status===`saved`?`Saved`:`Open`:`Finished`}function yn(e){return e.needsAction||e.status===`needs_action`?`Needs your response`:e.state?.agent===`waiting`?`Waiting for background tasks`:e.status===`working`?`Agent working`:e.status===`failed`?`Last turn failed`:e.status===`saved`?`Saved`:gn(e)?`Finished · new`:`Open`}function bn(e){let t=new Map;for(let n of e??[]){let e=n.output?.sessionId;if(!e||n.targetKind===`existing_session`||n.targetSessionId===e)continue;let r=t.get(e);(!r||n.createdAt<r.createdAt)&&t.set(e,n)}return new Map([...t].map(([e,t])=>[e,wn(t.source)]))}var xn={kind:`cli`,label:`Terminal · bivy run`,automation:!1};function Sn(e){return(e.source??``).trim()===`cli`&&e.status===`working`}function Cn(e){return(e.source??``).trim()===`cli:log`}function wn(e){let t=(e??``).trim();return t.startsWith(`issue:`)||t===`queue:github:issue`||t.startsWith(`github:issue`)?{kind:`github-issue`,label:`GitHub · labelled issue`,automation:!0}:t===`queue:github:comment`||t===`github:comment`?{kind:`github-mention`,label:`GitHub · @-mention`,automation:!0}:t===`queue:slack`||t===`slack`?{kind:`slack`,label:`Slack request`,automation:!0}:t===`queue:linear:issue`||t===`linear:issue`?{kind:`linear`,label:`Linear issue`,automation:!0}:t===`queue:schedule`||t===`schedule`?{kind:`schedule`,label:`Scheduled run`,automation:!0}:t===`queue:webhook`||t===`webhook`||t.startsWith(`automation:`)||t.startsWith(`queue:automation:`)?{kind:`webhook`,label:`Webhook`,automation:!0}:t===`queue:manual`||t===`manual`?{kind:`manual`,label:`Manual run`,automation:!0}:t===`cli`||t===`cli:log`?xn:{kind:`app`,label:`App session`,automation:!1}}function Tn(e){switch(e){case`github-issue`:case`github-mention`:return`GitHub`;case`slack`:return`Slack`;case`linear`:return`Linear`;case`schedule`:return`Schedule`;case`webhook`:return`Webhook`;case`manual`:return`Manual`;case`cli`:return`CLI`;case`app`:return`App`}}var K=Ct();function En({kind:e}){switch(e){case`github-issue`:case`github-mention`:return(0,K.jsx)(`svg`,{viewBox:`0 0 16 16`,fill:`currentColor`,"aria-hidden":!0,children:(0,K.jsx)(`path`,{d:`M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0016 8c0-4.42-3.58-8-8-8z`})});case`slack`:return(0,K.jsx)(`svg`,{viewBox:`0 0 24 24`,fill:`currentColor`,"aria-hidden":!0,children:(0,K.jsx)(`path`,{d:`M5.042 15.165a2.528 2.528 0 0 1-2.52 2.523A2.528 2.528 0 0 1 0 15.165a2.528 2.528 0 0 1 2.522-2.52h2.52v2.52zM6.313 15.165a2.527 2.527 0 0 1 2.521-2.52 2.527 2.527 0 0 1 2.521 2.52v6.313A2.528 2.528 0 0 1 8.834 24a2.528 2.528 0 0 1-2.521-2.522v-6.313zM8.834 5.042a2.528 2.528 0 0 1-2.521-2.52A2.528 2.528 0 0 1 8.834 0a2.528 2.528 0 0 1 2.521 2.522v2.52H8.834zM8.834 6.313a2.528 2.528 0 0 1 2.521 2.521 2.528 2.528 0 0 1-2.521 2.521H2.522A2.528 2.528 0 0 1 0 8.834a2.528 2.528 0 0 1 2.522-2.521h6.312zM18.956 8.834a2.528 2.528 0 0 1 2.522-2.521A2.528 2.528 0 0 1 24 8.834a2.528 2.528 0 0 1-2.522 2.521h-2.522V8.834zM17.688 8.834a2.528 2.528 0 0 1-2.523 2.521 2.527 2.527 0 0 1-2.52-2.521V2.522A2.527 2.527 0 0 1 15.165 0a2.528 2.528 0 0 1 2.523 2.522v6.312zM15.165 18.956a2.528 2.528 0 0 1 2.523 2.522A2.528 2.528 0 0 1 15.165 24a2.528 2.528 0 0 1-2.52-2.522v-2.522h2.52zM15.165 17.688a2.527 2.527 0 0 1-2.52-2.523 2.526 2.526 0 0 1 2.52-2.52h6.313A2.527 2.527 0 0 1 24 15.165a2.528 2.528 0 0 1-2.522 2.523h-6.313z`})});case`linear`:return(0,K.jsx)(`svg`,{viewBox:`0 0 24 24`,fill:`currentColor`,"aria-hidden":!0,children:(0,K.jsx)(`path`,{d:`M.403 13.517c-.06-.213.19-.365.347-.207l9.94 9.94c.157.157.006.407-.207.347C5.24 22.293 1.707 18.76.403 13.517zM.004 10.62a.19.19 0 0 0 .056.148l13.117 13.117a.19.19 0 0 0 .148.056 11.9 11.9 0 0 0 1.951-.324.19.19 0 0 0 .09-.32L.648 8.58a.19.19 0 0 0-.32.089c-.157.636-.266 1.288-.324 1.95zM1.036 6.926a.19.19 0 0 0 .038.22l15.78 15.78a.19.19 0 0 0 .22.038 12 12 0 0 0 1.463-.842.19.19 0 0 0 .03-.297L2.175 5.433a.19.19 0 0 0-.297.03 12 12 0 0 0-.842 1.463zM2.658 4.5a.19.19 0 0 1-.02-.245C4.847 1.203 8.194 0 12 0 18.627 0 24 5.373 24 12c0 3.806-1.203 7.153-4.255 9.362a.19.19 0 0 1-.245-.02L2.658 4.5z`})});case`schedule`:return(0,K.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:[(0,K.jsx)(`circle`,{cx:`12`,cy:`12`,r:`9`}),(0,K.jsx)(`path`,{d:`M12 7.5V12l3 2`})]});case`webhook`:return(0,K.jsxs)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:[(0,K.jsx)(`circle`,{cx:`6`,cy:`6.5`,r:`2.6`}),(0,K.jsx)(`circle`,{cx:`18`,cy:`9.5`,r:`2.6`}),(0,K.jsx)(`circle`,{cx:`9.5`,cy:`18`,r:`2.6`}),(0,K.jsx)(`path`,{d:`M7.6 8.6 8.9 15.4M8.3 6.9 15.4 8.6M16.2 11.8 11.4 16.4`})]});case`manual`:return(0,K.jsx)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:(0,K.jsx)(`path`,{d:`M5.5 3.7 18 11l-5 1.4 2.7 5.6-2.4 1.1-2.7-5.6L5.2 18z`})});case`cli`:return(0,K.jsx)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:(0,K.jsx)(`path`,{d:`M5 7l4 4-4 4M12 16h6`})});case`app`:return(0,K.jsx)(`svg`,{viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:(0,K.jsx)(`path`,{d:`M4 5.5h16v10.5H9l-4 3.5v-3.5H4z`})})}}function Dn({kind:e,size:t=`md`,status:n,title:r}){return(0,K.jsxs)(`span`,{className:`source-mark${t===`md`?``:` ${t}`}${n?` has-status`:``}`,title:r,"aria-hidden":!0,children:[(0,K.jsx)(En,{kind:e}),n&&(0,K.jsx)(wt,{status:n})]})}function On(e){let t=new Map;for(let n of e??[]){let e=n.output?.sessionId;e&&!t.has(e)&&t.set(e,n)}return t}function kn(e){let t=e.checks;if(!t||t.length===0)return null;let n=0,r=0,i=0;for(let e of t)e.status===`passed`?n++:e.status===`failed`?r++:i++;return{passed:n,failed:r,skipped:i,total:t.length}}function An(e){let t=e.startedAt??e.claimedAt,n=e.completedAt;if(!t||!n)return null;let r=new Date(n).getTime()-new Date(t).getTime();if(!Number.isFinite(r)||r<0)return null;let i=Math.round(r/1e3);if(i<60)return`${i}s`;let a=Math.round(i/60);if(a<60)return`${a}m`;let o=Math.floor(a/60),s=a%60;return s?`${o}h ${s}m`:`${o}h`}function jn(e){return[...e.events??[]].reverse().find(e=>e.kind===`retry`||e.kind===`fallback`)?.summary||null}function Mn(e){let t=e.output;return t?t.prUrl?{label:`Pull request`,url:t.prUrl}:t.artifactUrl?{label:`Artifact`,url:t.artifactUrl}:t.branch?{label:`branch ${t.branch}`}:t.commit?{label:`commit ${t.commit.slice(0,12)}`}:null:null}function Nn(e){return(e.checks??[]).filter(e=>e.status===`failed`).map(e=>e.name)}function Pn(e){let t=A(e);return t.terminal?t.kind===`checks_failed`||t.kind===`agent_failed`||t.kind===`timed_out`?[`fix`,`retry`,`fork`]:t.reviewable?[`fork`]:[]:[]}function Fn(e){if(!e)return null;if(e.status===`failed`){let t=(e.checks??[]).find(e=>e.status===`failed`);return t?{text:`${t.name} failed`,tone:`danger`}:{text:e.output?.failure||`run failed`,tone:`danger`}}if(e.status===`needs_attention`){let t=[...e.events??[]].reverse().find(e=>e.kind===`needs_attention`||e.kind===`approval`||e.kind===`policy_denial`);return{text:i(t?.summary||e.routingReason||`needs your input`),tone:`warn`}}return null}function In(e,t=new Date){if(e==null)return`Older`;let n=new Date(e);if(Number.isNaN(n.getTime()))return`Older`;let r=new Date(t.getFullYear(),t.getMonth(),t.getDate()),i=new Date(n.getFullYear(),n.getMonth(),n.getDate()),a=Math.round((r.getTime()-i.getTime())/864e5);return a<=0?`Today`:a===1?`Yesterday`:a<7?`Previous 7 days`:`Older`}function Ln(e){let t=new Set(e.map(e=>e.sessionId)),n=new Map,r=[];for(let i of e){let e=i.delegatedFrom?.sessionId;e&&e!==i.sessionId&&t.has(e)?n.set(e,[...n.get(e)??[],i]):r.push(i)}return r.flatMap(e=>[e,...(n.get(e.sessionId)??[]).map(t=>({...t,nestedUnder:e.sessionId}))])}var Rn=new Set([`working`,`needs-action`,`failed`,`unseen`]);function zn({status:e,srLabel:t}){return(0,K.jsxs)(K.Fragment,{children:[Rn.has(e)&&(0,K.jsx)(`span`,{className:`row-status`,children:(0,K.jsx)(wt,{status:e})}),(0,K.jsx)(`span`,{className:`sr-only`,children:t})]})}function Bn(){return(0,K.jsx)(`svg`,{className:`gh-icon`,viewBox:`0 0 16 16`,fill:`currentColor`,"aria-hidden":!0,children:(0,K.jsx)(`path`,{d:`M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0016 8c0-4.42-3.58-8-8-8z`})})}var Vn={open:{label:`Open pull request`,tone:`ok`,paths:[`M13 6h3a2 2 0 0 1 2 2v7`,`M6 9v12`]},merged:{label:`Merged`,tone:`merged`,paths:[`M6 21V9a9 9 0 0 0 9 9`]},closed:{label:`Closed pull request`,tone:void 0,paths:[`M6 9v12`,`m21 3-6 6`,`m21 9-6-6`,`M18 11.5V15`]}};function Hn({prs:e}){let t=oe(e);if(!t)return null;let n=Vn[t.state===`merged`||t.state===`closed`?t.state:`open`],r=e&&e.length>1?e.length:0,i=r?`${n.label} · ${r} pull requests`:n.label;return(0,K.jsxs)(z,{tone:n.tone,variant:`soft`,className:`session-pr`,title:i,children:[(0,K.jsxs)(`svg`,{className:`pr-glyph`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:[(0,K.jsx)(`circle`,{cx:`6`,cy:`6`,r:`3`}),(0,K.jsx)(`circle`,{cx:`18`,cy:`18`,r:`3`}),n.paths.map(e=>(0,K.jsx)(`path`,{d:e},e))]}),r>0&&(0,K.jsx)(`span`,{className:`session-pr-text`,"aria-hidden":!0,children:r}),(0,K.jsx)(`span`,{className:`sr-only`,children:i})]})}function Un(e){if(e==null)return 0;let t=typeof e==`number`?e:new Date(e).getTime();return Number.isFinite(t)?t:0}function Wn(e){let t=Un(e);if(!t)return``;let n=Math.max(0,Math.round((Date.now()-t)/1e3));if(n<60)return`now`;let r=Math.round(n/60);if(r<60)return`${r}m`;let i=Math.round(r/60);if(i<24)return`${i}h`;let a=Math.round(i/24);return a<7?`${a}d`:`${Math.round(a/7)}w`}function Gn(e){return N(e.source)||re(e.source)?.repo||``}function Kn(e,t){let n=N(e.source)||re(e.source)?.repo||``,r=e.branch||``,i=String(e.name||``).toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-|-$/g,``),a=r.toLowerCase().split(`/`).pop()?.replace(/-[a-f0-9]{5,}$/i,``)||``,o=r&&a!==i?r:``,s=wn(e.source),c=n||(s.automation?``:qn(e.source));return[s.automation?Tn(s.kind):null,e.forkedFrom?`Forked`:null,e.delegatedFrom?`Delegated`:null,e.agentName,t,c,o].filter(Boolean).join(` · `)}function qn(e){let t=re(e);if(t)return`${t.repo} #${t.issueNumber}`;if(typeof e==`string`&&e.startsWith(`queue:`)){let t=e.slice(6);return t===`slack`?`Slack`:t===`github:comment`?`GitHub @-mention`:t===`github:issue`?`GitHub issue`:t.startsWith(`agent-delegation:`)?``:t||`Queue`}return``}var Jn=10,Yn=[{view:`artifacts`,label:`Artifacts`,icon:(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`path`,{d:`M14 3H7a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2V8z`}),(0,K.jsx)(`path`,{d:`M14 3v5h5`}),(0,K.jsx)(`path`,{d:`M9 13h6M9 17h4`})]})},{view:`apps`,label:`Apps`,icon:(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`rect`,{x:`4`,y:`4`,width:`6.5`,height:`6.5`,rx:`1.5`}),(0,K.jsx)(`rect`,{x:`13.5`,y:`4`,width:`6.5`,height:`6.5`,rx:`1.5`}),(0,K.jsx)(`rect`,{x:`4`,y:`13.5`,width:`6.5`,height:`6.5`,rx:`1.5`}),(0,K.jsx)(`rect`,{x:`13.5`,y:`13.5`,width:`6.5`,height:`6.5`,rx:`1.5`})]})}];function Xn({onPick:e,onPickTerminal:t,runEvidence:n,sessionSources:r,onOpenAutomations:i,automationsActive:a,onOpenLibrary:o,libraryActive:s,onOpenTerminal:c,terminalDisabled:l}){let{sessionIndex:{sessions:u,runTerminals:d},activeSession:{activeSessionId:f},connection:{nodes:p,currentNodeId:m}}=je(),[h,g]=(0,G.useState)(``),[_,v]=(0,G.useState)(null),[y,b]=(0,G.useState)(null),[x,S]=(0,G.useState)(``),[C,w]=(0,G.useState)(``),[T,E]=(0,G.useState)(!1),[D,O]=(0,G.useState)(Jn),k=(0,G.useRef)(null);(0,G.useEffect)(()=>{if(!T)return;let e=e=>{k.current&&!k.current.contains(e.target)&&E(!1)},t=e=>{e.key===`Escape`&&E(!1)};return document.addEventListener(`click`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`click`,e),document.removeEventListener(`keydown`,t)}},[T]),(0,G.useEffect)(()=>{let e=setInterval(()=>{document.visibilityState!==`hidden`&&R.refreshSessions()},6e4);return()=>clearInterval(e)},[]),(0,G.useEffect)(()=>{R.refreshSessions()},[]);let ee=e=>R.direct||!e?null:p.find(t=>t.id===e)?.name||e,A=e=>p.length>1?ee(e):null,j=(0,G.useMemo)(()=>Array.from(new Set(u.map(Gn).filter(Boolean))).sort((e,t)=>e.localeCompare(t)),[u]),M=(0,G.useMemo)(()=>{if(x)return[];let e=d;C&&(e=e.filter(e=>(e.nodeId||m)===C));let t=h.trim().toLowerCase();return t&&(e=e.filter(e=>`${e.name??``} ${e.label??``} ${e.agent??``} ${e.workspace??``}`.toLowerCase().includes(t))),[...e].sort((e,t)=>Un(t.lastActivityAt??t.createdAt)-Un(e.lastActivityAt??e.createdAt))},[d,h,x,C,m]),N=(0,G.useMemo)(()=>{let e=h.trim().toLowerCase(),t=new Set(d.map(e=>e.sessionId).filter(Boolean));return Ln([...u.filter(n=>{if(t.has(n.sessionId))return!1;let r=Gn(n);if(C&&n.nodeId!==C||x&&r!==x)return!1;let i=R.direct||!n.nodeId?``:p.find(e=>e.id===n.nodeId)?.name||``,a=[n.name,n.source,n.agentName,r,n.branch,n.nodeId,i].filter(Boolean).join(` `);return!e||a.toLowerCase().includes(e)})].sort((e,t)=>_n(t)-_n(e)||Un(t.updatedAt)-Un(e.updatedAt)))},[u,d,p,h,x,C]),P=x.length>0||C.length>0,te=h.trim().length>0||P?N:N.slice(0,D),ne=N.length-te.length;(0,G.useEffect)(()=>{O(Jn)},[h,x,C]);let re=+!!x+ +!!C,ie=[C?ee(C):R.direct?null:`All machines`,x||null].filter(Boolean).join(` · `),ae=h.trim()||x||C?`No matching sessions.`:`No sessions yet. Start one with New session.`,oe=e=>{let t=String(e.workspace||``).replace(/[\\/]+$/,``).split(/[\\/]/).pop();return[e.label||e.agent,A(e.nodeId||m||void 0),t].filter(Boolean).join(` · `)};return(0,K.jsxs)(`div`,{className:`session-list`,children:[_&&(0,K.jsx)(Ye,{title:`Delete saved session?`,message:`Delete “${_.name}” and its saved Cloud history? This can't be undone.`,confirmLabel:`Delete`,danger:!0,onCancel:()=>v(null),onConfirm:()=>{let e=_.sessionId;v(null),b(e),R.deleteSession(e).catch(()=>R.store.setError(`Couldn't delete the session.`)).finally(()=>b(null))}}),(i||o||c)&&(0,K.jsxs)(`nav`,{className:`sidebar-nav`,"aria-label":`Workspace`,children:[i&&(0,K.jsxs)(`button`,{className:`sidebar-nav-item${a?` active`:``}`,onClick:i,"aria-current":a?`page`:void 0,children:[(0,K.jsx)(`svg`,{viewBox:`0 0 24 24`,width:`20`,height:`20`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:(0,K.jsx)(`path`,{d:`M13 2 3 14h9l-1 8 10-12h-9z`})}),(0,K.jsx)(`span`,{children:`Automations`})]}),o&&Yn.map(({view:e,label:t,icon:n})=>(0,K.jsxs)(`button`,{className:`sidebar-nav-item${s===e?` active`:``}`,onClick:()=>o(e),"aria-current":s===e?`page`:void 0,children:[(0,K.jsx)(`svg`,{viewBox:`0 0 24 24`,width:`20`,height:`20`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:n}),(0,K.jsx)(`span`,{children:t})]},e)),c&&(0,K.jsxs)(`button`,{className:`sidebar-nav-item`,onClick:c,disabled:l,"aria-label":`Open standalone terminal`,children:[(0,K.jsxs)(`svg`,{viewBox:`0 0 24 24`,width:`20`,height:`20`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,K.jsx)(`rect`,{x:`3`,y:`4`,width:`18`,height:`16`,rx:`2`}),(0,K.jsx)(`path`,{d:`m7 9 3 3-3 3`}),(0,K.jsx)(`path`,{d:`M13 15h4`})]}),(0,K.jsx)(`span`,{children:`Terminal`})]})]}),(0,K.jsxs)(`div`,{className:`session-list-tools`,children:[(0,K.jsxs)(`label`,{className:`session-search-wrap`,children:[(0,K.jsx)(Ke,{size:17,"aria-hidden":!0}),(0,K.jsx)(`input`,{className:`field session-search`,type:`search`,"aria-label":`Search sessions`,placeholder:u.length>1?`Search ${u.length} sessions`:`Search sessions`,value:h,onChange:e=>g(e.target.value)})]}),(0,K.jsxs)(`div`,{className:`session-filter`,ref:k,children:[(0,K.jsxs)(`button`,{className:`session-filter-btn${re?` active`:``}`,type:`button`,"aria-label":re?`Filter sessions, ${ie}`:`Filter sessions`,"aria-haspopup":`menu`,"aria-expanded":T,onClick:e=>{e.stopPropagation(),!R.direct&&p.length===0&&R.refreshNodes(),E(e=>!e)},children:[(0,K.jsx)(`svg`,{viewBox:`0 0 24 24`,width:`18`,height:`18`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.8`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:(0,K.jsx)(`path`,{d:`M3 5h18l-7 8v6l-4-2v-4z`})}),re>0&&(0,K.jsx)(z,{tone:`accent`,variant:`solid`,className:`session-filter-count`,children:re})]}),T&&(0,K.jsxs)(`div`,{className:`menu session-filter-menu`,role:`menu`,children:[!R.direct&&(0,K.jsxs)(`div`,{className:`session-filter-section`,children:[(0,K.jsx)(`div`,{className:`session-filter-head`,children:`Machine`}),(0,K.jsxs)(`button`,{className:`menu-item session-filter-item`,role:`menuitemradio`,"aria-checked":!C,onClick:()=>{w(``),E(!1)},children:[(0,K.jsx)(`span`,{children:`All machines`}),!C&&(0,K.jsx)(`span`,{className:`session-filter-check`,children:(0,K.jsx)(rt,{size:15})})]}),p.length===0?(0,K.jsx)(`div`,{className:`session-filter-empty`,children:`No machines`}):p.map(e=>(0,K.jsxs)(`button`,{className:`menu-item session-filter-item`,role:`menuitemradio`,"aria-checked":e.id===C,onClick:()=>{w(e.id),E(!1)},children:[(0,K.jsx)(`span`,{children:e.name||e.id}),e.id===C&&(0,K.jsx)(`span`,{className:`session-filter-check`,children:(0,K.jsx)(rt,{size:15})})]},e.id))]}),(0,K.jsxs)(`div`,{className:`session-filter-section`,children:[(0,K.jsx)(`div`,{className:`session-filter-head`,children:`GitHub repo`}),(0,K.jsxs)(`button`,{className:`menu-item session-filter-item`,role:`menuitemradio`,"aria-checked":!x,onClick:()=>{S(``),E(!1)},children:[(0,K.jsx)(`span`,{children:`All repositories`}),!x&&(0,K.jsx)(`span`,{className:`session-filter-check`,children:(0,K.jsx)(rt,{size:15})})]}),j.length===0&&(0,K.jsx)(`div`,{className:`session-filter-empty`,children:`No GitHub repos`}),j.map(e=>(0,K.jsxs)(`button`,{className:`menu-item session-filter-item`,role:`menuitemradio`,"aria-checked":e===x,onClick:()=>{S(e),E(!1)},children:[(0,K.jsx)(`span`,{children:e}),e===x&&(0,K.jsx)(`span`,{className:`session-filter-check`,children:(0,K.jsx)(rt,{size:15})})]},e))]}),(0,K.jsxs)(`div`,{className:`session-filter-foot`,children:[(0,K.jsx)(`span`,{className:`session-filter-summary`,children:ie}),(x||C)&&(0,K.jsx)(`button`,{className:`session-filter-clear`,onClick:()=>{S(``),w(``)},children:`Clear`})]})]})]})]}),N.length===0&&M.length===0&&(0,K.jsx)(`div`,{className:`session-empty`,children:ae}),(0,K.jsxs)(`ul`,{children:[M.length>0&&(0,K.jsx)(`li`,{className:`session-group-label`,children:`Running`}),M.map(e=>{let n=e.name||e.label||e.agent||`Terminal session`,r=oe(e);return(0,K.jsx)(`li`,{className:`session-row`,children:(0,K.jsx)(`button`,{className:`session-item`,onClick:()=>t(e.termId,e.nodeId),children:(0,K.jsxs)(`span`,{className:`session-body`,children:[(0,K.jsxs)(`span`,{className:`session-title-row`,children:[(0,K.jsx)(zn,{status:`working`,srLabel:`${xn.label} · Running in terminal`}),(0,K.jsx)(`span`,{className:`session-name`,children:n}),Wn(e.lastActivityAt??e.createdAt)&&(0,K.jsx)(`span`,{className:`session-age`,title:`Running in terminal`,children:Wn(e.lastActivityAt??e.createdAt)})]}),r&&(0,K.jsx)(`span`,{className:`session-meta`,children:r})]})})},e.termId)}),te.map((t,i)=>{let a=e=>_n(e)>0?`Needs attention`:In(e.updatedAt),o=t.nestedUnder?null:a(t),s=i>0?te.slice(0,i).reverse().find(e=>!e.nestedUnder):void 0,c=s?a(s):null,l=o&&o!==c?(0,K.jsx)(`li`,{className:`session-group-label`,children:o}):null,u=Kn(t,A(t.nodeId)||t.pendingNodeName||null),d=yn(t),p=r?.get(t.sessionId)??wn(t.source),m=Fn(n?.get(t.sessionId))??(_n(t)>0?{text:yn(t),tone:t.status===`failed`||t.status===`needs_action`||t.needsAction?`danger`:`warn`}:null),h=t.pendingLaunch&&t.status===`failed`;return(0,K.jsxs)(G.Fragment,{children:[l,(0,K.jsxs)(`li`,{className:`session-row${t.nestedUnder?` nested`:``}`,children:[(0,K.jsx)(`button`,{className:`session-item${t.sessionId===f?` active`:``}`,"aria-current":t.sessionId===f?`page`:void 0,onClick:()=>e(t.sessionId,t.path,t.nodeId),children:(0,K.jsxs)(`span`,{className:`session-body`,children:[(0,K.jsxs)(`span`,{className:`session-title-row`,children:[(0,K.jsx)(zn,{status:hn(t),srLabel:`${p.label} · ${d}`}),(0,K.jsx)(`span`,{className:`session-name`,children:t.name}),(0,K.jsx)(Hn,{prs:t.prs}),Wn(t.updatedAt)&&(0,K.jsx)(`span`,{className:`session-age`,title:d,children:Wn(t.updatedAt)})]}),(m||u)&&(0,K.jsxs)(`span`,{className:`session-meta`,children:[p.automation&&(0,K.jsx)(Dn,{kind:p.kind,size:`xs`}),m&&(0,K.jsx)(`span`,{className:`row-hint ${m.tone}`,children:m.text}),m&&u?` · `:``,u]})]})}),t.rebuildable&&!t.pendingLaunch&&(0,K.jsx)(`span`,{className:`pending-launch-actions`,children:(0,K.jsx)(`button`,{type:`button`,disabled:y===t.sessionId,"aria-label":`Delete ${t.name}`,onClick:()=>v({sessionId:t.sessionId,name:t.name||`Saved session`}),children:y===t.sessionId?`Deleting…`:`Delete`})}),h&&(0,K.jsxs)(`span`,{className:`pending-launch-actions`,children:[(0,K.jsx)(`button`,{type:`button`,onClick:()=>void R.retryPendingLaunch(t.sessionId),children:`Retry`}),(0,K.jsx)(`button`,{type:`button`,onClick:()=>void R.dismissPendingLaunch(t.sessionId),children:`Dismiss`})]})]})]},t.sessionId)})]}),ne>0&&(0,K.jsxs)(`button`,{className:`session-more`,onClick:()=>O(e=>e+Jn),children:[`Show more (`,ne,`)`]})]})}function Zn({checked:e,onChange:t,disabled:n,label:r}){return(0,K.jsx)(`button`,{type:`button`,role:`switch`,"aria-checked":e,"aria-label":r,disabled:n,className:`settings-toggle${e?` on`:``}`,onClick:()=>t(!e),children:(0,K.jsx)(`span`,{className:`settings-toggle-knob`,"aria-hidden":!0})})}var Qn=Ue(),$n=new Set;function er(){for(let e of $n)e()}function tr(e){return e.kind===`automations`?{section:e.section}:null}var nr=tr(le()),rr=null;typeof window<`u`&&window.addEventListener(`popstate`,()=>{nr=tr(le()),er()});function ir(e){return $n.add(e),()=>$n.delete(e)}function ar(){return nr}function or(e){rr=e?.setup??null;let t=e?.section??null;Ie({kind:`automations`,section:t}),nr={section:t},er()}function sr(e){Ie({kind:`automations`,section:e},{replace:!0}),nr={section:e},er()}function cr(){let e=rr;return rr=null,e}function lr(e){Ie(e,{replace:!0}),nr=null,rr=null,er()}var ur=new Set,dr=!1;function fr(){for(let e of ur)e()}function pr(e){return ur.add(e),()=>ur.delete(e)}function mr(){return dr}function hr(){dr=!0,fr()}function gr(){dr=!1,fr()}var _r=`curl -fsSL https://bivy.sh/install.sh | bash`;function vr(e){try{let t=new URL(e).hostname;return t===`bivy.sh`||t.endsWith(`.bivy.sh`)}catch{return!1}}function yr(e,t,n){let r=e.replace(/\/$/,``),i=t?.replace(/\/$/,``),a=[`BIVY_CONTROL_PLANE_URL=${br(r)}`,...i?[`BIVY_RELAY_URL=${br(i)}`]:[]],o=n?[`BIVY_SESSION_TOKEN=${br(n)}`,...a]:a,s=vr(e),c=e=>e.length?`curl -fsSL https://bivy.sh/install.sh | ${e.join(` `)} bash`:_r,l=s?_r:c(a);return{command:n?c(o):l,plainCommand:l,hosted:s,authenticated:!!n}}function br(e){return/^[A-Za-z0-9_.:/=@%+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function xr({onEnrolled:e}){let[t,n]=(0,G.useState)(null),[r,i]=(0,G.useState)(!0),[a,o]=(0,G.useState)(null),[s,c]=(0,G.useState)(null),[l,d]=(0,G.useState)(0),f=(0,G.useRef)(null),p=(0,G.useRef)(null),m=(0,G.useRef)(e);m.current=e;let h=yr(u(),R.local.relay);(0,G.useEffect)(()=>{let e=!1;return i(!0),o(null),f.current??=R.createNodeClaim(),f.current.then(t=>{if(!t.command)throw Error(`This server did not return an install command.`);e||n(t)}).catch(t=>{e||o(t instanceof Error?t.message:String(t))}).finally(()=>{e||i(!1)}),()=>{e=!0}},[l]),(0,G.useEffect)(()=>{if(!t||t.status!==`pending`)return;let e=!1,r,i=async()=>{try{if(Date.parse(t.expiresAt)<=Date.now()){e||n({...t,status:`expired`,command:void 0});return}let r=await R.listNodeClaims();if(e)return;let i=r.find(e=>e.id===t.id);if(o(null),i&&i.status!==`pending`){n({...i,command:void 0}),i.status===`used`&&i.nodeId&&m.current?.(i.nodeId);return}}catch{e||o(`Could not check installation progress. Retrying automatically…`)}e||(r=setTimeout(i,3e3))};return i(),()=>{e=!0,clearTimeout(r)}},[t]),(0,G.useEffect)(()=>()=>{p.current&&clearTimeout(p.current)},[]);let g=async(e,t)=>{if(!await tt(e)){o(`Could not copy. Select and copy the command manually.`);return}c(t),p.current&&clearTimeout(p.current),p.current=setTimeout(()=>c(null),1500)};return(0,K.jsxs)(`div`,{className:`settings-form machine-install-instructions`,children:[(0,K.jsx)(`h3`,{children:`Run this on your machine`}),(0,K.jsx)(`p`,{className:`muted`,children:`On your Mac or Linux computer, open a terminal in your repository and paste this command. It installs Bivy and connects your machine to this account.`}),r&&(0,K.jsx)(`p`,{className:`muted`,role:`status`,children:`Preparing your one-time install command…`}),a&&(0,K.jsx)(`p`,{className:`banner inline`,"data-tone":`danger`,role:`alert`,children:a}),t?.status===`pending`&&t.command&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`div`,{className:`connect-command`,children:[(0,K.jsx)(`code`,{tabIndex:0,"aria-label":`One-time install command`,children:t.command}),(0,K.jsx)(`button`,{type:`button`,className:`btn sm ghost icon-only${s===`claim`?` is-copied`:``}`,onClick:()=>void g(t.command,`claim`),"aria-label":s===`claim`?`Install command copied`:`Copy install command`,title:s===`claim`?`Copied`:`Copy install command`,children:s===`claim`?(0,K.jsx)(rt,{size:16}):(0,K.jsx)($e,{size:16})})]}),(0,K.jsx)(`p`,{className:`muted`,children:`Single-use · expires in 10 minutes. Paste only on a machine you trust. No second Bivy sign-in required.`})]}),t?.status===`used`&&(0,K.jsxs)(`div`,{role:`status`,children:[(0,K.jsx)(`p`,{children:`Machine enrolled. Waiting for it to come online…`}),(0,K.jsx)(`p`,{className:`muted`,children:`Keep the installer running until it finishes. If it reports a service error, follow its recovery instructions on the machine.`})]}),(t?.status===`expired`||t?.status===`revoked`)&&(0,K.jsxs)(`p`,{role:`status`,children:[`This install command has `,t.status===`expired`?`expired`:`been revoked`,`. Create a new one to continue.`]}),!r&&t?.status!==`pending`&&t?.status!==`used`&&(0,K.jsx)(`button`,{type:`button`,className:`btn primary`,onClick:()=>{f.current=null,n(null),c(null),d(e=>e+1)},children:t?`Create new install command`:`Retry install command`}),(0,K.jsx)(`p`,{className:`muted`,children:`Bivy runs in the background and detects available agents. Existing agent logins are reused where supported. Keep this machine awake and online while work runs.`}),(0,K.jsxs)(`details`,{children:[(0,K.jsx)(`summary`,{children:`Other ways to install`}),(0,K.jsxs)(`p`,{className:`muted`,children:[`Use this command if you prefer to sign in on the machine.`,!h.hosted&&` It connects to your self-hosted server.`]}),(0,K.jsxs)(`div`,{className:`connect-command`,children:[(0,K.jsx)(`code`,{tabIndex:0,children:h.plainCommand}),(0,K.jsx)(`button`,{type:`button`,className:`btn sm ghost icon-only${s===`plain`?` is-copied`:``}`,onClick:()=>void g(h.plainCommand,`plain`),"aria-label":s===`plain`?`Regular sign-in command copied`:`Copy regular sign-in command`,children:s===`plain`?(0,K.jsx)(rt,{size:16}):(0,K.jsx)($e,{size:16})})]})]})]})}function Sr({onClose:e}){return(0,K.jsx)(B,{title:`Add a Machine`,onClose:e,variant:`centered`,children:(0,K.jsx)(xr,{})})}function Cr({label:e,items:t,onOpen:n}){let[r,i]=(0,G.useState)(!1),a=(0,G.useRef)(null),o=()=>{i(!1),a.current?.querySelector(`[aria-haspopup=menu]`)?.focus()};return nt(o,r),(0,G.useEffect)(()=>{if(!r)return;a.current?.querySelector(`[role^=menuitem]:not(:disabled)`)?.focus();let e=e=>{a.current?.contains(e.target)||i(!1)};return document.addEventListener(`click`,e),()=>document.removeEventListener(`click`,e)},[r]),(0,K.jsxs)(`div`,{className:`apps-more`,ref:a,children:[(0,K.jsx)(`button`,{type:`button`,className:`btn ghost icon`,"aria-label":e,title:`More`,"aria-haspopup":`menu`,"aria-expanded":r,onClick:e=>{e.stopPropagation(),r||n?.(),i(e=>!e)},children:(0,K.jsx)(We,{size:18})}),r&&(0,K.jsx)(`div`,{className:`menu apps-more-menu`,role:`menu`,"aria-label":e,children:t.map(e=>`heading`in e?(0,K.jsx)(`div`,{className:`menu-heading`,role:`presentation`,children:e.heading},e.heading):(0,K.jsxs)(`button`,{type:`button`,role:e.checked===void 0?`menuitem`:e.toggle?`menuitemcheckbox`:`menuitemradio`,"aria-checked":e.checked,className:`menu-item${e.danger?` danger`:``}${e.separated?` separated`:``}`,disabled:e.disabled,onClick:()=>{o(),e.onSelect()},children:[(0,K.jsx)(`span`,{className:`menu-item-label`,children:e.label}),e.checked&&(0,K.jsx)(rt,{size:15,"aria-hidden":!0})]},e.label))})]})}function wr(e){let t=e.setups.filter(e=>e.active&&e.id!==`local`);return t.length?t.map(e=>e.label).join(` + `):e.setups.find(e=>e.id===`local`)?.label??`This machine only`}function Tr(e,t){let n=e.setups.filter(e=>e.gives[t]===2).map(e=>e.label);return n.length>1?`${n.slice(0,-1).join(`, `)} or ${n.at(-1).replace(/^Your/,`your`)}`:n[0]??``}var Er=[``,`on your tailnet`,`from anywhere`];function Dr(e=!0){let[t,n]=(0,G.useState)(null),[r,i]=(0,G.useState)(``);return(0,G.useEffect)(()=>{if(!e)return;let t=!0;return R.getAccess().then(e=>{t&&n(e)}).catch(e=>{t&&i(String(e?.message||e))}),()=>{t=!1}},[e]),{report:t,error:r}}function Or({command:e}){let[t,n]=(0,G.useState)(!1);return(0,K.jsxs)(`div`,{className:`repo-connect-command`,children:[(0,K.jsx)(`code`,{children:e}),(0,K.jsx)(`button`,{type:`button`,className:`btn sm ghost${t?` is-copied`:``}`,"aria-label":`Copy ${e}`,onClick:()=>{navigator.clipboard.writeText(e).then(()=>{n(!0),window.setTimeout(()=>n(!1),1500)})},children:t?`Copied`:`Copy`})]})}function kr(){let{report:e,error:t}=Dr();return(0,K.jsxs)(`section`,{className:`settings-section`,"aria-labelledby":`access-title`,children:[(0,K.jsx)(`h4`,{className:`settings-subhead`,id:`access-title`,children:`How you reach this machine`}),e?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`div`,{className:`small`,children:[(0,K.jsx)(`strong`,{children:wr(e)}),e.tailscaleUrl?(0,K.jsxs)(`span`,{className:`muted`,children:[` · `,e.tailscaleUrl]}):null]}),(0,K.jsx)(`ul`,{className:`readiness-checks`,children:e.features.map(t=>{let n=e.reach[t.id];return(0,K.jsxs)(`li`,{className:`readiness-check${n?``:` state-pending`}`,children:[(0,K.jsx)(`span`,{className:`readiness-mark${n?` mark-passed`:``}`,"aria-hidden":!0,children:n?`✓`:`–`}),(0,K.jsx)(`span`,{className:`readiness-label`,children:t.label}),(0,K.jsx)(`span`,{className:`readiness-detail`,"aria-hidden":!0,children:n?Er[n]:`not with this setup`}),(0,K.jsx)(`span`,{className:`sr-only`,children:n?`: yes, ${Er[n]}`:`: not with this setup`})]},t.id)})}),e.next.length>0&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`h4`,{className:`settings-subhead`,children:`Next`}),e.next.map(t=>{let n=e.setups.find(e=>e.id===t.id);return n?(0,K.jsxs)(`div`,{className:`settings-section`,children:[(0,K.jsxs)(`div`,{className:`small`,children:[(0,K.jsx)(`strong`,{children:n.label}),` `,(0,K.jsxs)(`span`,{className:`muted`,children:[`adds `,t.addsText,`. `,n.summary]})]}),n.command&&(0,K.jsx)(Or,{command:n.command})]},t.id):null}),(0,K.jsx)(`div`,{className:`muted small`,children:`Run these on the machine. Setups stack: adding one never takes away another.`})]})]}):(0,K.jsx)(`p`,{className:`muted small`,role:t?`alert`:`status`,children:t?`Couldn't ask the machine: ${t}`:`Checking…`})]})}function Ar({feature:e,inSettings:t=!1}){let{report:n}=Dr(R.direct);if(!n||n.reach[e]>0)return null;let r=n.features.find(t=>t.id===e)?.label??e;return(0,K.jsxs)(`div`,{className:`banner inline`,"data-tone":`accent`,children:[(0,K.jsxs)(`span`,{className:`banner-text`,role:`status`,children:[r,` need `,Tr(n,e),`.`]}),(0,K.jsx)(`span`,{className:`banner-actions`,children:(0,K.jsx)(`button`,{type:`button`,className:`btn sm`,onClick:()=>t?Et(`nodes`):Ot(`nodes`),children:`See options`})})]})}var jr=`bivy.app-share`;function Mr(){try{let e=JSON.parse(localStorage.getItem(jr)??`{}`);return{duration:xe.some(t=>t.id===e.duration)?e.duration:`1d`,controls:e.controls!==!1}}catch{return{duration:`1d`,controls:!0}}}var Nr=e=>new Date(e).toLocaleString([],{weekday:`short`,hour:`numeric`,minute:`2-digit`});function Pr({sessionId:e,appId:t,viewId:n,name:r,nodeId:i,address:a,disabled:o,onRevoked:s}){let{connection:c}=je(),l=!!i&&!R.direct&&i!==c.currentNodeId||c.status===`online`,[u,d]=(0,G.useState)(!1),[f,p]=(0,G.useState)(!1),[m,h]=(0,G.useState)(!1),[g,_]=(0,G.useState)(!1),[v,y]=(0,G.useState)(``),[b,x]=(0,G.useState)(``),[S,C]=(0,G.useState)(``),[w,T]=(0,G.useState)(Mr),[E,D]=(0,G.useState)(null),[O,k]=(0,G.useState)(!1),ee=e=>T(t=>{let n={...t,...e};try{localStorage.setItem(jr,JSON.stringify(n))}catch{}return n}),A=async()=>{let r=(await R.appCommand(`apps.list`,e,{},i)).apps.find(e=>e.id===t)?.views.find(e=>e.id===n);return r?.kind===`web`?r:void 0},j=()=>A().then(e=>D(e?.sharing??null)).catch(()=>{});(0,G.useEffect)(()=>{u&&l&&j()},[u,l]);let M=async e=>{p(!0),_(!1),x(``),y(``),C(``);try{await e()}catch(e){x(e instanceof Error?e.message:`Could not update app access.`)}finally{p(!1)}},N=async(e,t=!1)=>{let n=new URL(e);if(n.protocol!==`https:`||n.username||n.password||n.origin===location.origin)throw Error(`Machine returned an unsafe preview URL.`);let r=await tt(n.href);t?y(r?`Address copied. Only works when signed in to Bivy.`:`Your address · Bivy sign-in required.`):r?_(!0):y(`Copy this link to share.`),r||C(n.href)},P=()=>M(async()=>{let e=a??(await A())?.address;if(!e)throw Error(`Address unavailable. Try republishing the app.`);await N(e,!0)});return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`button`,{className:`btn sm ghost`,disabled:o,onClick:()=>d(!0),"aria-label":`Share ${r}`,children:[(0,K.jsx)(Xe,{size:15}),`Share`]}),u&&(0,K.jsxs)(B,{title:`Share ${r}`,onClose:()=>{d(!1),_(!1),y(``),x(``),C(``)},autoFocusSearch:!1,headExtra:(0,K.jsx)(Cr,{label:`Sharing options`,items:[{label:`Copy personal address`,disabled:f||!a&&!l,onSelect:()=>void P()},{label:`Revoke all access…`,danger:!0,separated:!0,disabled:f||!l||o,onSelect:()=>h(!0)}]}),children:[(0,K.jsxs)(`div`,{className:`apps-sheet`,children:[(0,K.jsx)(Ar,{feature:`sharing`}),E&&(0,K.jsxs)(`div`,{className:`banner`,"data-tone":`accent`,children:[(0,K.jsxs)(`span`,{className:`banner-text`,role:`status`,children:[`Shared · `,E.links===1?`1 link`:`${E.links} links`,` until `,Nr(E.expiresAt)]}),(0,K.jsx)(`span`,{className:`banner-actions`,children:(0,K.jsx)(`button`,{className:`btn sm danger-ghost`,disabled:f||!l,onClick:()=>k(!0),children:`Stop sharing`})})]}),(0,K.jsxs)(`div`,{className:`apps-group`,children:[(0,K.jsx)(`p`,{className:`apps-group-title`,id:`share-for-${n}`,children:`Link works for`}),(0,K.jsx)(`div`,{className:`segmented`,role:`radiogroup`,"aria-labelledby":`share-for-${n}`,children:xe.map(e=>(0,K.jsx)(`button`,{type:`button`,role:`radio`,className:`seg-btn`,"aria-checked":w.duration===e.id,onClick:()=>ee({duration:e.id}),children:e.label},e.id))})]}),(0,K.jsxs)(`div`,{className:`settings-toggle-row`,children:[(0,K.jsxs)(`div`,{className:`settings-toggle-text`,children:[(0,K.jsx)(`span`,{className:`settings-toggle-title`,children:`Feedback tools`}),(0,K.jsx)(`span`,{className:`muted small`,children:w.controls?`People can point, draw and leave you notes.`:`People see only the app.`})]}),(0,K.jsx)(Zn,{checked:w.controls,onChange:e=>ee({controls:e}),label:`Feedback tools`})]}),(0,K.jsx)(`p`,{className:`apps-foot`,children:`Anyone with the link can use this app, including its live backend, until it expires or you stop sharing.`}),(0,K.jsxs)(`button`,{className:`btn primary`,disabled:f||!l||o,"aria-label":`Copy share link`,onClick:()=>void M(async()=>{let r=await R.appCommand(`apps.share`,e,{appId:t,viewId:n,duration:w.duration,controls:w.controls},i);await N(r.url),j()}),children:[g?(0,K.jsx)(rt,{size:16}):(0,K.jsx)(Xe,{size:16}),(0,K.jsx)(`span`,{role:`status`,children:f?`Preparing…`:g?`Copied`:`Copy link`})]}),b&&(0,K.jsx)(`p`,{className:`apps-foot`,role:`alert`,children:b}),v&&(0,K.jsx)(`p`,{className:`apps-foot`,role:`status`,children:v}),S&&(0,K.jsx)(`input`,{className:`field`,readOnly:!0,value:S,"aria-label":`Link to ${r}`,onFocus:e=>e.currentTarget.select()})]}),O&&(0,K.jsx)(Ye,{title:`Stop sharing?`,message:`Every share link stops working, and people who have the app open lose it. Your own previews keep working.`,confirmLabel:`Stop sharing`,danger:!0,onCancel:()=>k(!1),onConfirm:()=>{k(!1),M(async()=>{await R.appCommand(`apps.unshare`,e,{appId:t,viewId:n},i),D(null),y(`Sharing stopped.`)})}}),m&&(0,K.jsx)(Ye,{title:`Revoke all access?`,message:`Share links and every open preview, including yours, stop working. The app stays available.`,confirmLabel:`Revoke access`,danger:!0,onCancel:()=>h(!1),onConfirm:()=>{h(!1),M(async()=>{await R.appCommand(`apps.revoke`,e,{appId:t,viewId:n},i),D(null),y(`Access revoked.`),s?.()})}})]})]})}var Fr=`Picture: retaken on the machine, so it may not show this page’s state (a cart, a sign-in, an open menu). The marks and elements are exact.`,Ir=`bivy.previewPeekBlocked`,Lr=6048e5;function Rr(){try{let e=JSON.parse(localStorage.getItem(Ir)??`null`);return e?.agent===navigator.userAgent&&typeof e.at==`number`&&Date.now()-e.at<Lr}catch{return!1}}function zr(){try{localStorage.setItem(Ir,JSON.stringify({agent:navigator.userAgent,at:Date.now()}))}catch{}}function Br({url:e,name:t,sessionId:n,appId:r,viewId:i,onClose:a,onOpenInTab:o,access:s,onManage:c,revoked:l}){let u=(0,G.useRef)(null),[f,p]=(0,G.useState)(!1),{settings:{sttConfig:m}}=je(),h=dt(m),[g,_]=(0,G.useState)(null),v=new URL(e).origin,[y,b]=(0,G.useState)(null),x=(0,G.useCallback)(e=>{u.current?.contentWindow?.postMessage({source:`bivy`,...e},v)},[v]),S=!!(r&&i),C=(0,G.useCallback)(()=>{x({type:`voice`,available:!!h}),x({type:`draw`,available:S})},[h,S,x]);(0,G.useEffect)(()=>{C()},[C]);let w=(0,G.useCallback)((e,t=[],o=!1)=>{R.prefillComposer(e,t)||d(localStorage,n,e),o&&r&&i&&R.stagePin({sessionId:n,appId:r,viewId:i,context:e.trim().slice(-80)}),b(null),a()},[n,r,i,a]),T=(0,G.useCallback)(async(e,t)=>{if(!r||!i)return w(e);b({state:`working`});try{let a=await R.appCommand(`apps.annotate`,n,{appId:r,viewId:i,...t});if(a.screenshotsOff||!a.image){b({state:`off`,text:e,mark:t});return}let o=a.image,s={kind:`image`,mimeType:o.mimeType,data:o.data,size:Math.round(o.data.length*3/4),name:a.approximate?o.name.replace(/\.png$/,` (approximate).png`):o.name};w(a.approximate?`${e}\n${Fr}`:e,[s],!0)}catch(n){b({state:`failed`,text:e,mark:t,message:n instanceof Error?n.message:`Couldn’t take the picture.`})}},[r,i,n,w]),E=async(e,t)=>{b({state:`working`});try{await R.setNodeSettings({appScreenshots:!0}),await T(e,t)}catch(n){b({state:`failed`,text:e,mark:t,message:n instanceof Error?n.message:`Couldn’t turn on screenshots.`})}};return(0,G.useEffect)(()=>{let e=e=>{if(e.origin!==v||e.source!==u.current?.contentWindow)return;let t=e.data;if(t?.source===`bivy-preview`){if(t.type===`draft`&&typeof t.text==`string`){let e=t.text.slice(0,8e3);R.prefillComposer(e)||d(localStorage,n,e),a()}else t.type===`blocked`?(zr(),p(!0)):t.type===`hello`?C():t.type===`annotation`&&typeof t.text==`string`&&t.mark?T(t.text.slice(0,8e3),t.mark):t.type===`listen`&&(t.state===`start`?h?_(e=>e??{stop:0}):x({type:`transcript`,error:xt}):t.state===`stop`?_(e=>e&&{stop:e.stop+1}):t.state===`cancel`&&_(null))}};return addEventListener(`message`,e),()=>removeEventListener(`message`,e)},[v,n,a,h,x,C,T]),(0,K.jsx)(B,{title:t,ariaLabel:`Preview: ${t}`,onClose:a,size:`full`,autoFocusSearch:!1,headExtra:(0,K.jsxs)(`div`,{className:`preview-head-actions`,children:[(0,K.jsx)(`button`,{className:`btn ghost icon`,onClick:o,"aria-label":`Open in tab ↗`,title:`Open in tab · Only you`,children:(0,K.jsx)(`span`,{"aria-hidden":!0,children:`↗`})}),s,c&&(0,K.jsx)(`button`,{className:`btn ghost icon`,onClick:c,"aria-label":`App options`,title:`App options`,children:(0,K.jsx)(We,{size:18})})]}),children:l?(0,K.jsx)(`div`,{className:`changes-binary`,role:`status`,children:`Access revoked. Open a new preview to continue.`}):f?(0,K.jsxs)(`div`,{className:`changes-binary`,role:`status`,children:[`This browser doesn’t allow app previews inside Bivy, so previews will open in a tab on this device. `,(0,K.jsx)(`button`,{className:`btn sm`,onClick:o,children:`Open in tab ↗`})]}):(0,K.jsxs)(`div`,{className:`preview-peek-stage`,children:[g&&h&&(0,K.jsx)(`div`,{className:`preview-voice`,children:(0,K.jsx)(vt,{engine:h,stop:g.stop,onResult:e=>x({type:`transcript`,text:e.slice(0,4e3)}),onCancel:()=>{_(null),x({type:`listening`,on:!1})},onError:e=>x({type:`transcript`,error:e})})}),(0,K.jsx)(`iframe`,{ref:u,className:`preview-peek`,src:e,title:t,referrerPolicy:`no-referrer`,sandbox:`allow-scripts allow-same-origin allow-forms allow-downloads allow-popups`,allow:`clipboard-read; clipboard-write`,onLoad:C}),y&&(0,K.jsx)(`div`,{className:`preview-marking`,role:y.state===`working`?`status`:`alert`,children:y.state===`working`?(0,K.jsxs)(`div`,{className:`banner inline`,"data-tone":`neutral`,children:[(0,K.jsx)(ft,{size:`sm`}),(0,K.jsx)(`span`,{className:`banner-text`,children:`Adding a picture of what you marked…`})]}):(0,K.jsxs)(`div`,{className:`banner inline`,"data-tone":y.state===`off`?`neutral`:`danger`,children:[(0,K.jsx)(`span`,{className:`banner-text`,children:y.state===`off`?`Screenshots are off on this machine, so there’s no picture. Your marks and the elements you marked still go with your words.`:`Couldn’t add the picture: ${y.message}`}),(0,K.jsxs)(`span`,{className:`banner-actions`,children:[y.state===`off`?(0,K.jsx)(`button`,{className:`btn primary`,onClick:()=>void E(y.text,y.mark),children:`Turn on and add picture`}):(0,K.jsx)(`button`,{className:`btn`,onClick:()=>void T(y.text,y.mark),children:`Try again`}),(0,K.jsx)(`button`,{className:`btn ghost`,onClick:()=>w(y.text,[],!0),children:`Add without picture`})]})]})})]})})}var Vr=e=>`bivy:notes-seen:${e}`,Hr=`bivy:notes-seen`;function Ur(e){return Number(localStorage.getItem(Vr(e)))||0}function Wr(e,t){t<=Ur(e)||(localStorage.setItem(Vr(e),String(t)),window.dispatchEvent(new CustomEvent(Hr,{detail:e})))}function Gr(e,t){let[n,r]=(0,G.useState)(()=>e?Ur(e):0);return(0,G.useEffect)(()=>{if(!e)return;r(Ur(e));let t=t=>{t.detail===e&&r(Ur(e))};return window.addEventListener(Hr,t),()=>window.removeEventListener(Hr,t)},[e]),t.filter(e=>e>n).length}var Kr=new Set;function qr(e){for(let t of Kr)t(e)}function Jr(e){return Kr.add(e),()=>{Kr.delete(e)}}function Yr(e){return e.trim().charAt(0).toUpperCase()||`A`}function Xr({tile:e,name:t,meta:n,detail:r,action:i,small:a=!1}){return(0,K.jsxs)(`div`,{className:`app-row${a?` small`:``}`,children:[(0,K.jsx)(`span`,{className:`app-tile`,"aria-hidden":!0,children:e}),(0,K.jsxs)(`div`,{className:`app-row-text`,children:[(0,K.jsx)(`strong`,{className:`app-row-name`,children:t}),n&&(0,K.jsx)(`span`,{className:`app-row-meta`,children:n}),r]}),i&&(0,K.jsx)(`div`,{className:`app-row-action`,children:i})]})}function Zr({app:e}){return(0,K.jsx)(`div`,{className:`apps-card app-message`,children:(0,K.jsx)(Xr,{tile:Yr(e.name),name:e.name,meta:`App · opens over the chat`,action:(0,K.jsx)(`button`,{className:`btn sm primary`,onClick:()=>qr({sessionId:e.sessionId,appId:e.appId}),"aria-label":`Open app: ${e.name}`,children:`Open`})})})}function Qr(e){return e.flatMap(e=>e.shot?[{kind:`image`,name:`Reviewer note (approximate).png`,mimeType:`image/png`,hash:e.shot.hash,size:e.shot.size,createdAt:e.at,description:`Retaken on the machine; may differ from the reviewer's browser.`}]:[])}async function $r(e){return Promise.all(Qr(e).map(async e=>{let t=await R.fetchAttachment(e.hash,e.createdAt);if(!t)throw Error(`A reviewer picture is no longer available. The notes have not been added.`);return{...e,...t}}))}var ei={present:`Ready to review`,run:`Changed in this run`,asked:`As it looks now`,notes:`Reviewer notes`};function ti(e){let[t,n]=(0,G.useState)({url:null,missing:!1});return(0,G.useEffect)(()=>{if(!e)return;let t=!0,r=null;return R.fetchAttachment(e.hash).then(i=>{if(t){if(i){let e=Uint8Array.from(atob(i.data),e=>e.charCodeAt(0));r=URL.createObjectURL(new Blob([e],{type:i.mimeType||`image/png`}))}n({hash:e.hash,url:r,missing:!i})}},()=>{t&&n({hash:e.hash,url:null,missing:!0})}),()=>{t=!1,r&&URL.revokeObjectURL(r)}},[e?.hash]),e?t.hash===e.hash?{url:t.url,state:t.missing?`missing`:`ready`}:{url:null,state:`loading`}:{url:null,state:`none`}}function ni({review:e}){let{connection:t,activeSession:n}=je(),r=n.activeSessionId===e.sessionId&&n.working,i=t.status===`online`,a=(0,G.useRef)(null),[o,s]=(0,G.useState)(!1);(0,G.useEffect)(()=>{let e=new IntersectionObserver(([t])=>{t?.isIntersecting&&(s(!0),e.disconnect())},{rootMargin:`300px`});return a.current&&e.observe(a.current),()=>e.disconnect()},[]);let c=ti(!o||e.expired?void 0:e.shot),l=ti(!o||e.expired?void 0:e.before),[u,f]=(0,G.useState)(`now`),[p,m]=(0,G.useState)(null),[h,g]=(0,G.useState)(``),[_,v]=(0,G.useState)(!1),y=l.state===`ready`&&c.state===`ready`,b=u===`before`&&y?l:c,x=()=>{p||R.appCommand(`apps.list`,e.sessionId).then(t=>{let n=t.apps?.find(t=>t.id===e.appId);m(n?.reviewMode??`ready`)},()=>{})},S=async(e,t,n)=>{v(!0),g(``);try{await t(),n&&g(n)}catch(t){g(t instanceof Error?t.message:`Could not ${e}.`)}finally{v(!1)}},C=()=>S(`take a screenshot`,()=>R.appCommand(`apps.showMe`,e.sessionId,{appId:e.appId})),w=t=>S(`change preview cards`,async()=>{await R.appCommand(`apps.reviewMode`,e.sessionId,{appId:e.appId,mode:t}),m(t)},t===`off`?`No more cards for ${e.name}. Show me still works.`:`Preview cards: ${Wa[t].toLowerCase()}.`),T=()=>S(`read the notes`,async()=>{let t=(await R.appCommand(`apps.list`,e.sessionId)).apps?.find(t=>t.id===e.appId)?.views.find(t=>t.id===e.viewId),n=t?.kind===`web`?t.notes??[]:[];if(!n.length){g(`These notes were cleared.`);return}let r=Ga(t.name,n),i=await $r(n);if(!R.prefillComposer(r,i)){if(i.length)throw Error(`Open this session’s chat before adding reviewer pictures.`);d(localStorage,e.sessionId,r)}},`Added to your message. Nothing is sent until you send it.`),E=()=>S(`turn on screenshots`,async()=>{await R.setNodeSettings({appScreenshots:!0}),await R.appCommand(`apps.showMe`,e.sessionId,{appId:e.appId})}),D=t=>qr({sessionId:e.sessionId,appId:e.appId,...t?{openView:{viewId:e.viewId,path:e.path}}:{}}),O=`${e.name}${e.view&&e.view!==e.name?` · ${e.view}`:``}`,k=`${ei[e.trigger]} · ${e.path}`;return(0,K.jsxs)(`section`,{ref:a,className:`apps-card review-card`,"aria-label":`${e.name}: ${ei[e.trigger].toLowerCase()}`,children:[(0,K.jsx)(Xr,{tile:Yr(e.name),name:O,meta:k,action:(0,K.jsx)(Cr,{label:`Preview card options for ${e.name}`,onOpen:x,items:[{label:`App options`,onSelect:()=>D(!1)},{heading:`Preview cards`},...[`ready`,`every`,`off`].map(e=>({label:Wa[e],checked:p?p===e:void 0,disabled:_||!i||!p,onSelect:()=>void w(e)})),...r?[{label:`Mute for this run`,disabled:_||!i,separated:!0,onSelect:()=>void S(`mute`,()=>R.appCommand(`apps.mute`,e.sessionId),`Muted until the agent’s next run.`)}]:[],{label:`Show me now`,disabled:_||!i,separated:!r,onSelect:()=>void C()}]})}),e.trigger===`notes`?null:e.screenshotsOff&&!e.shot?(0,K.jsxs)(`div`,{className:`banner inline review-banner`,"data-tone":`neutral`,role:`status`,children:[(0,K.jsx)(`span`,{className:`banner-text`,children:`Turn on agent screenshots to see the app here. Bivy takes them with Chrome on this machine.`}),(0,K.jsx)(`span`,{className:`banner-actions`,children:(0,K.jsx)(`button`,{className:`btn`,disabled:_||!i,onClick:()=>void E(),children:`Turn on`})})]}):(0,K.jsxs)(`div`,{className:`review-stage`,children:[e.expired||b.state===`missing`||!e.shot?(0,K.jsx)(`p`,{className:`review-gone`,children:e.expired||b.state===`missing`?`Screenshot no longer stored`:`No screenshot this time`}):(0,K.jsx)(`button`,{type:`button`,className:`review-shot`,style:e.shot?{aspectRatio:`${e.shot.width} / ${e.shot.height}`,blockSize:`var(--review-shot-height)`,maxInlineSize:`100%`}:void 0,onClick:()=>D(!0),"aria-label":`Open preview of ${e.name} at ${e.path}`,children:b.url?(0,K.jsx)(`img`,{src:b.url,alt:`${e.name} at ${e.path}, ${u===`before`&&y?`before this run`:`now`}`,width:e.shot?.width,height:e.shot?.height}):(0,K.jsxs)(`span`,{className:`review-loading`,children:[(0,K.jsx)(ft,{size:`sm`}),(0,K.jsx)(`span`,{className:`sr-only`,children:`Loading screenshot…`})]})}),e.before&&!e.expired&&(0,K.jsx)(`div`,{className:`segmented review-side`,role:`radiogroup`,"aria-label":`Show the app`,children:[`before`,`now`].map(e=>(0,K.jsx)(`button`,{type:`button`,role:`radio`,className:`seg-btn`,disabled:!y,"aria-checked":u===e,onClick:()=>f(e),children:e===`before`?`Before`:`Now`},e))})]}),e.note&&(0,K.jsx)(`p`,{className:`review-note`,children:e.note}),e.notes?(0,K.jsxs)(`div`,{className:`banner inline review-banner`,"data-tone":`neutral`,role:`group`,"aria-label":`Reviewer notes on ${O}`,children:[(0,K.jsxs)(`span`,{className:`banner-text`,children:[e.notes===1?`1 note`:`${e.notes} notes`,` from people with a shared link. They reach the agent only if you send them.`]}),(0,K.jsxs)(`span`,{className:`banner-actions`,children:[(0,K.jsx)(`button`,{className:`btn sm`,disabled:_||!i,onClick:()=>void T(),children:`Add to message`}),(0,K.jsx)(`button`,{className:`btn sm ghost`,disabled:!i,onClick:()=>D(!1),children:`Open in Apps`})]})]}):null,h&&(0,K.jsx)(`p`,{className:`review-status`,role:`status`,children:h}),(0,K.jsxs)(`div`,{className:`review-actions`,children:[(0,K.jsx)(`button`,{className:`btn${e.trigger===`notes`?``:` primary`}`,disabled:!i,onClick:()=>D(!0),children:`Open preview`}),(0,K.jsx)(Pr,{sessionId:e.sessionId,appId:e.appId,viewId:e.viewId,name:e.view||e.name,disabled:!i})]})]})}var ri={open:{label:`Open`,detail:`Nothing has changed here yet.`},changed:{label:`Changed`,tone:`ok`,detail:`A later run changed what you marked. Have a look.`},gone:{label:`Element gone`,tone:`warn`,detail:`What you marked is no longer on the page.`},done:{label:`Done`,tone:`ok`,detail:`You marked this done.`}};function ii({pin:e}){let{connection:t}=je(),n=t.status===`online`,r=(0,G.useRef)(null),[i,a]=(0,G.useState)(!1),[o,s]=(0,G.useState)(null),[c,l]=(0,G.useState)(!1),[u,d]=(0,G.useState)(!1),[f,p]=(0,G.useState)(``);(0,G.useEffect)(()=>{let e=new IntersectionObserver(([t])=>{t?.isIntersecting&&(a(!0),e.disconnect())},{rootMargin:`300px`});return r.current&&e.observe(r.current),()=>e.disconnect()},[]),(0,G.useEffect)(()=>{if(!i||!e.shot)return;let t=!0,n=null;return R.fetchAttachment(e.shot.hash).then(e=>{if(!t)return;if(!e){l(!0);return}let r=Uint8Array.from(atob(e.data),e=>e.charCodeAt(0));n=URL.createObjectURL(new Blob([r],{type:e.mimeType||`image/png`})),s(n)},()=>{t&&l(!0)}),()=>{t=!1,n&&URL.revokeObjectURL(n)}},[i,e.shot?.hash]);let m=ri[e.state],h=async t=>{d(!0),p(``);try{await R.appCommand(`apps.pinState`,e.sessionId,{pinId:e.id,state:t})}catch(e){p(e instanceof Error?e.message:`Could not update this pin.`)}finally{d(!1)}},g=()=>qr({sessionId:e.sessionId,appId:e.appId,openView:{viewId:e.viewId,path:e.path}});return(0,K.jsxs)(`section`,{ref:r,className:`apps-card review-card pin-card`,"aria-label":`${e.number?`Note ${e.number} p`:`P`}inned on ${e.name}: ${m.label.toLowerCase()}`,children:[(0,K.jsx)(Xr,{tile:Yr(e.name),name:`${e.name}${e.view&&e.view!==e.name?` · ${e.view}`:``}`,meta:`${e.number?`Note ${e.number} · `:``}Pinned · ${e.path}`,action:(0,K.jsx)(z,{tone:m.tone,children:m.label})}),e.shot&&!c?(0,K.jsx)(`div`,{className:`review-stage`,children:(0,K.jsx)(`button`,{type:`button`,className:`review-shot`,style:{aspectRatio:`${e.shot.width} / ${e.shot.height}`,blockSize:`var(--review-shot-height)`,maxInlineSize:`100%`},onClick:g,"aria-label":`Open the preview of ${e.name} at ${e.path}`,children:o?(0,K.jsx)(`img`,{src:o,alt:`What you marked on ${e.name} at ${e.path}${e.number?`, note ${e.number}`:``}`,width:e.shot.width,height:e.shot.height}):(0,K.jsxs)(`span`,{className:`review-loading`,children:[(0,K.jsx)(ft,{size:`sm`}),(0,K.jsx)(`span`,{className:`sr-only`,children:`Loading what you marked…`})]})})}):(0,K.jsx)(`p`,{className:`review-gone`,children:c?`Picture no longer stored`:`Marked without a picture`}),e.words&&(0,K.jsx)(`p`,{className:`review-note`,children:e.words}),(0,K.jsx)(`p`,{className:`review-status`,children:m.detail}),f&&(0,K.jsx)(`p`,{className:`review-status`,role:`alert`,children:f}),(0,K.jsxs)(`div`,{className:`review-actions`,children:[(0,K.jsx)(`button`,{className:`btn primary`,disabled:!n,onClick:g,children:`Open preview`}),e.state===`done`?(0,K.jsx)(`button`,{className:`btn ghost`,disabled:u||!n,onClick:()=>void h(`open`),children:`Reopen`}):(0,K.jsx)(`button`,{className:`btn`,disabled:u||!n,onClick:()=>void h(`done`),children:`Mark done`})]})]})}var ai=e=>`bivy:suggestion:${e}`,oi=()=>window.dispatchEvent(new Event(`bivy:suggestions`));function si(e){try{return JSON.parse(localStorage.getItem(ai(e))??`null`)}catch{return null}}function ci(e,t){localStorage.setItem(ai(e),JSON.stringify(t)),oi()}var li=new Set;function ui(e,t){t?li.delete(e):li.add(e),oi()}function di(e,t){let n=e.findIndex(e=>e.suggestion?.id===t);if(n<0)return{run:[],last:!1};let r=n,i=n;for(;r>0&&e[r-1]?.suggestion;)r--;for(;e[i+1]?.suggestion;)i++;return{run:e.slice(r,i+1).map(e=>e.suggestion),last:n===i}}var fi=e=>e.map((e,t)=>`${t+1}. ${e.title?`${e.title}: `:``}${e.text}`).join(`
4
4
 
5
- `),pi={here:{label:e=>e>1?`Do ${e} here`:`Do it here`,hint:e=>e>1?`this session’s agent does them one after another.`:`this session’s agent does it next.`,prompt:e=>e.length>1?`Please do these ${e.length} tasks, one after another:\n\n${fi(e)}`:e[0].text,done:`✓ Sent to this session`},subagents:{label:e=>e>1?`Run ${e} as sub-agents`:`Use a sub-agent`,hint:()=>`this session’s agent hands the work to its sub-agents and reports back.`,prompt:e=>e.length>1?`Please do these ${e.length} tasks in parallel, one sub-agent per task, then report back on each:\n\n${fi(e)}`:`Please hand this task to a sub-agent, then report back:\n\n${e[0].text}`,done:`✓ Sent to this session’s sub-agents`},new:{label:e=>e>1?`Start ${e} new sessions`:`Start in new session`,hint:e=>e>1?`each task gets its own agent, running side by side.`:`it gets its own agent, running side by side with this one.`,done:`✓ Started in a new session`}},mi=Object.keys(pi),hi=(e,t)=>e.run??(t?`new`:`here`);function gi({suggestion:e}){let t=je(),n=t.activeSession.activeSessionId??``,r=t.connection.status===`online`,[i,a]=(0,G.useState)(()=>si(e.id)),[o,s]=(0,G.useState)(!1),[c,l]=(0,G.useState)(null),[,u]=(0,G.useState)(0);(0,G.useEffect)(()=>{let t=()=>{a(si(e.id)),u(e=>e+1)};return window.addEventListener(`bivy:suggestions`,t),()=>window.removeEventListener(`bivy:suggestions`,t)},[e.id]);let{run:d,last:f}=di(t.activeSession.transcript,e.id),p=d.length>1,m=d.filter(e=>!si(e.id)),h=p?m.filter(e=>!li.has(e.id)):[e],g=e.title||e.text,_=o||!r||!n||h.length===0,v=new Set(h.map(e=>hi(e,p))),y=v.size===1?[...v][0]:`new`,b=[y,...mi.filter(e=>e!==`subagents`||d.some(e=>e.run===`subagents`)).filter(e=>e!==y)],x=async e=>{let t=pi[e].prompt;if(t){R.sendPrompt(t(h));for(let t of h)ci(t.id,{where:e});return}s(!0),l(null);try{for(let e of h){let t=await R.startSessionLike(n,e.text);ci(e.id,{where:`new`,sessionId:t})}}catch(e){l(e instanceof Error?e.message:String(e))}finally{s(!1)}},S=p?f&&m.length>0:!i,C=h.length;return(0,K.jsxs)(`section`,{className:`card suggestion-card`,"aria-label":`Suggested task: ${g}`,children:[(0,K.jsx)(`p`,{className:`suggestion-eyebrow`,children:`Suggested task`}),p&&!i?(0,K.jsxs)(`label`,{className:`suggestion-pick`,children:[(0,K.jsx)(`input`,{type:`checkbox`,checked:!li.has(e.id),disabled:o,onChange:t=>ui(e.id,t.target.checked)}),(0,K.jsx)(`span`,{className:`suggestion-title`,children:g})]}):(0,K.jsx)(`p`,{className:`suggestion-title`,children:g}),e.title&&(0,K.jsx)(`p`,{className:`suggestion-text`,children:e.text}),c&&(0,K.jsx)(`div`,{className:`banner inline`,"data-tone":`danger`,role:`alert`,children:c}),i&&(0,K.jsxs)(`p`,{className:`suggestion-status`,role:`status`,children:[pi[i.where].done,i.where===`new`&&(0,K.jsx)(`button`,{type:`button`,className:`btn sm ghost`,onClick:()=>R.openSession(i.sessionId),children:`Open`})]}),S&&(0,K.jsxs)(`div`,{className:p?`suggestion-all`:`suggestion-bar`,children:[p&&(0,K.jsx)(`p`,{className:`suggestion-hint`,role:`status`,children:C===0?`Select the tasks to start.`:`${C} of ${m.length} selected`}),(0,K.jsx)(`div`,{className:`suggestion-actions`,children:b.map(e=>(0,K.jsx)(`button`,{type:`button`,className:`btn sm ${e===y?`primary`:`ghost`}`,disabled:_,onClick:()=>void x(e),children:o&&e===`new`?`Starting…`:pi[e].label(Math.max(C,1))},e))}),(0,K.jsxs)(`p`,{className:`suggestion-hint`,children:[`Recommended: `,pi[y].hint(C)]})]})]})}function _i({notice:e}){return(0,K.jsxs)(`section`,{className:`card notice-card`,"data-tone":e.urgent?`warn`:`accent`,"aria-label":e.urgent?`Urgent message from the agent`:`Message from the agent`,children:[(0,K.jsxs)(`p`,{className:`notice-eyebrow`,children:[`Message for you`,e.urgent&&(0,K.jsx)(z,{tone:`warn`,variant:`soft`,children:`Urgent`})]}),(0,K.jsx)(`p`,{className:`notice-text`,children:e.text})]})}var vi={pending:{label:`Queued`,tone:`accent`},claimed:{label:`Starting`,tone:`accent`},running:{label:`Working`,tone:`accent`},waiting:{label:`Waiting`,tone:`accent`},needs_attention:{label:`Needs attention`,tone:`warn`},succeeded:{label:`Done`,tone:`ok`},failed:{label:`Failed`,tone:`danger`},cancelled:{label:`Cancelled`}};function yi(e){let t=je(),n=e.agent?t.catalogs.runtimes.find(t=>t.id===e.agent)?.displayName||e.agent:`Default agent`;return{agent:n,label:e.machine?`${n} @ ${e.machine}`:n}}function bi({status:e}){let t=vi[e]??{label:e};return(0,K.jsx)(`span`,{className:`badge`,"data-tone":t.tone,children:t.label})}function xi({card:e,target:t,compact:n}){return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`div`,{className:`delegation-head`,children:[(0,K.jsxs)(`span`,{className:`delegation-target`,children:[t.agent,e.machine&&(0,K.jsxs)(`span`,{className:`delegation-machine`,children:[`on `,e.machine]})]}),(0,K.jsx)(bi,{status:e.status})]}),!n&&(0,K.jsx)(`p`,{className:`delegation-task`,children:e.task}),e.failure&&(0,K.jsx)(`p`,{className:`delegation-failure`,children:e.failure}),e.answer&&(0,K.jsxs)(`details`,{className:`delegation-answer`,open:n,children:[(0,K.jsx)(`summary`,{children:`Answer`}),(0,K.jsx)(`p`,{children:e.answer})]}),(e.branch||e.prUrl)&&(0,K.jsxs)(`p`,{className:`delegation-refs`,children:[e.branch&&(0,K.jsx)(`code`,{children:e.branch}),e.prUrl&&(0,K.jsx)(`a`,{href:e.prUrl,target:`_blank`,rel:`noreferrer`,children:`Pull request`})]}),e.childSessionId&&(0,K.jsx)(`div`,{className:`delegation-actions`,children:(0,K.jsx)(`button`,{type:`button`,className:`btn sm ghost`,onClick:()=>e.childSessionId&&R.openSessionOnNode(e.childSessionId,void 0,e.nodeId),children:`Open session`})})]})}function Si({card:e}){let t=yi(e),n=e.status===`succeeded`;return(0,K.jsxs)(`section`,{className:`card delegation-member`,"aria-label":`${t.label}: ${vi[e.status]?.label??e.status}`,children:[(0,K.jsx)(xi,{card:e,target:t,compact:!0}),n&&(0,K.jsx)(`button`,{type:`button`,className:`btn sm primary`,onClick:()=>R.sendPrompt(`Go with ${t.label}'s result (delegated run ${e.id})${e.branch?`. Its work is on branch \`${e.branch}\`: fetch it and merge it into the current branch`:``}.`),children:`Use this`})]})}function Ci({delegation:e}){let t=je(),n=yi(e);if(e.group){let n=t.activeSession.transcript.flatMap(t=>t.delegation&&t.delegation.group===e.group?[t.delegation]:[]);if(n[0]?.id!==e.id)return null;let r=n.filter(e=>[`succeeded`,`failed`,`cancelled`].includes(e.status)).length;return(0,K.jsxs)(`section`,{className:`delegation-group`,"aria-label":`Compared across ${n.length} agents`,children:[(0,K.jsxs)(`p`,{className:`delegation-eyebrow`,children:[`Compared across `,n.length,` agents · `,r,`/`,n.length,` finished`]}),(0,K.jsx)(`p`,{className:`delegation-task`,children:e.task}),(0,K.jsx)(`div`,{className:`delegation-grid`,children:n.map(e=>(0,K.jsx)(Si,{card:e},e.id))})]})}return(0,K.jsxs)(`section`,{className:`card delegation-card`,"aria-label":`Delegated to ${n.label}`,children:[(0,K.jsx)(`p`,{className:`delegation-eyebrow`,children:`Delegated`}),(0,K.jsx)(xi,{card:e,target:n})]})}function wi(e){let t=new Map(e.map(e=>[e.callId,e])),n=new Map,r=e=>!!(e.parentToolUseId&&e.parentToolUseId!==e.callId&&t.has(e.parentToolUseId));for(let t of e)if(r(t)){let e=n.get(t.parentToolUseId)??[];e.push(t),n.set(t.parentToolUseId,e)}let i=[],a=new Set,o=(e,t)=>{if(!a.has(e.callId)){a.add(e.callId),i.push({tool:e,depth:t});for(let r of n.get(e.callId)??[])o(r,t+1)}};for(let t of e)r(t)||o(t,0);for(let t of e)a.has(t.callId)||o(t,0);return i}function Ti(e,t){let n=new Map;for(let e of t){let t=e.parentToolUseId;if(!t||t===e.callId)continue;let r=n.get(t)??[];r.push(e),n.set(t,r)}let r=new Set([e]),i=[...n.get(e)??[]],a=0;for(;i.length;){let e=i.pop();if(!r.has(e.callId)){r.add(e.callId),a+=1;for(let t of n.get(e.callId)??[])i.push(t)}}return a}function Ei({glyph:e}){let t={width:16,height:16,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`};switch(e){case`terminal`:return(0,K.jsxs)(`svg`,{...t,children:[(0,K.jsx)(`polyline`,{points:`4 17 10 11 4 5`}),(0,K.jsx)(`line`,{x1:`12`,y1:`19`,x2:`20`,y2:`19`})]});case`pencil`:case`create`:return(0,K.jsxs)(`svg`,{...t,children:[(0,K.jsx)(`path`,{d:`M12 20h9`}),(0,K.jsx)(`path`,{d:`M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z`})]});case`search`:return(0,K.jsxs)(`svg`,{...t,children:[(0,K.jsx)(`circle`,{cx:`11`,cy:`11`,r:`7`}),(0,K.jsx)(`line`,{x1:`21`,y1:`21`,x2:`16.65`,y2:`16.65`})]});case`list`:return(0,K.jsxs)(`svg`,{...t,children:[(0,K.jsx)(`line`,{x1:`8`,y1:`6`,x2:`21`,y2:`6`}),(0,K.jsx)(`line`,{x1:`8`,y1:`12`,x2:`21`,y2:`12`}),(0,K.jsx)(`line`,{x1:`8`,y1:`18`,x2:`21`,y2:`18`}),(0,K.jsx)(`line`,{x1:`3`,y1:`6`,x2:`3.01`,y2:`6`}),(0,K.jsx)(`line`,{x1:`3`,y1:`12`,x2:`3.01`,y2:`12`}),(0,K.jsx)(`line`,{x1:`3`,y1:`18`,x2:`3.01`,y2:`18`})]});case`globe`:return(0,K.jsxs)(`svg`,{...t,children:[(0,K.jsx)(`circle`,{cx:`12`,cy:`12`,r:`9`}),(0,K.jsx)(`line`,{x1:`3`,y1:`12`,x2:`21`,y2:`12`}),(0,K.jsx)(`path`,{d:`M12 3a15 15 0 0 1 0 18a15 15 0 0 1 0-18Z`})]});case`agent`:return(0,K.jsxs)(`svg`,{...t,children:[(0,K.jsx)(`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`}),(0,K.jsx)(`circle`,{cx:`9`,cy:`7`,r:`4`}),(0,K.jsx)(`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`}),(0,K.jsx)(`path`,{d:`M16 3.13a4 4 0 0 1 0 7.75`})]});default:return(0,K.jsxs)(`svg`,{...t,children:[(0,K.jsx)(`path`,{d:`M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7Z`}),(0,K.jsx)(`circle`,{cx:`12`,cy:`12`,r:`3`})]})}}function Di({added:e,removed:t}){return!e&&!t?null:(0,K.jsxs)(`span`,{className:`tool-stat`,children:[e>0&&(0,K.jsxs)(`span`,{className:`add`,children:[`+`,e]}),t>0&&(0,K.jsxs)(`span`,{className:`del`,children:[`−`,t]})]})}function Oi(e){if(e.detail?.kind!==`delegation`)return``;let t=Number(e.input?.elapsedSeconds);return!Number.isFinite(t)||t<1?``:t<60?`${Math.floor(t)}s`:`${Math.floor(t/60)}m ${Math.floor(t%60)}s`}function ki({tool:e,f:t,depth:n=0,onSelect:r}){let i=Oi(e),a=pt(t),o=i?`${a||`Sub-agent`} · ${i}`:a,s=e.status===`running`,c=n>1?{paddingLeft:`${28+(n-1)*16}px`}:void 0;return(0,K.jsx)(`div`,{className:`activity${s?` is-running`:``}${t.isError?` is-error`:``}${n>0?` is-subagent-step`:``}`,"data-depth":n||void 0,children:(0,K.jsxs)(`button`,{className:`activity-row`,style:c,onClick:()=>r(e.callId),children:[(0,K.jsx)(`span`,{className:`activity-ic`,children:(0,K.jsx)(Ei,{glyph:t.glyph})}),(0,K.jsx)(`span`,{className:`activity-verb`,children:t.verb}),(0,K.jsx)(`span`,{className:`activity-desc`,children:o}),t.isError&&(0,K.jsx)(z,{tone:`danger`,variant:`soft`,upper:!0,title:typeof t.exitCode==`number`?`exit ${t.exitCode}`:`failed`,children:`Failed`}),(0,K.jsx)(Di,{added:t.added,removed:t.removed}),(0,K.jsx)(`span`,{className:`tool-chevron`,children:(0,K.jsx)(Qe,{size:14})})]})})}function Ai({tool:e,f:t,subSteps:n=0}){let r=e.result||t.output||``,i=r&&(t.diffs.length===0||t.command||t.verb===`Agent output`),a=Oi(e);return(0,K.jsxs)(`div`,{className:`activity-detail`,children:[e.detail?.kind===`delegation`&&e.status===`running`&&(0,K.jsxs)(`div`,{className:`tool-detail-block`,children:[(0,K.jsx)(`div`,{className:`tool-detail-label`,children:`Status`}),(0,K.jsxs)(`div`,{className:`tool-detail-value`,children:[`Sub-agent active`,a?` · ${a} elapsed`:``]})]}),e.detail?.kind===`delegation`&&n>0&&(0,K.jsxs)(`div`,{className:`tool-detail-block`,children:[(0,K.jsx)(`div`,{className:`tool-detail-label`,children:`Sub-agent work`}),(0,K.jsxs)(`div`,{className:`tool-detail-value`,children:[n,` step`,n===1?``:`s`,` nested below this delegation`]})]}),(t.isError||t.truncated)&&(0,K.jsxs)(`div`,{className:`tool-detail-block`,children:[(0,K.jsx)(`div`,{className:`tool-detail-label`,children:`Outcome`}),(0,K.jsxs)(`div`,{className:`tool-detail-value${t.isError?` is-error`:``}`,children:[t.isError?`Failed`:`Completed`,typeof t.exitCode==`number`?` · exit ${t.exitCode}`:``,t.truncated?` · output truncated`:``]})]}),t.path&&(0,K.jsxs)(`div`,{className:`tool-detail-block`,children:[(0,K.jsx)(`div`,{className:`tool-detail-label`,children:`File`}),(0,K.jsx)(`div`,{className:`tool-detail-value`,children:t.path})]}),t.command&&(0,K.jsxs)(`div`,{className:`tool-detail-block`,children:[(0,K.jsx)(`div`,{className:`tool-detail-label`,children:`Command`}),(0,K.jsx)(`div`,{className:`tool-detail-value`,children:t.command})]}),t.query&&(0,K.jsxs)(`div`,{className:`tool-detail-block`,children:[(0,K.jsx)(`div`,{className:`tool-detail-label`,children:`Query`}),(0,K.jsx)(`div`,{className:`tool-detail-value`,children:t.query})]}),t.diffs.length>0&&(0,K.jsxs)(`div`,{className:`tool-detail-block`,children:[(0,K.jsx)(`div`,{className:`tool-detail-label`,children:`Diff`}),(0,K.jsx)(ut,{hunks:t.diffs,single:t.path})]}),t.diffs.length===0&&t.edits?(0,K.jsx)(`div`,{className:`tool-detail-block`,children:(0,K.jsxs)(`div`,{className:`tool-detail-value output`,children:[t.edits,` targeted edits`]})}):null,i&&(0,K.jsxs)(`div`,{className:`tool-detail-block`,children:[(0,K.jsx)(`div`,{className:`tool-detail-label`,children:e.status===`running`?`Live output`:`Output`}),(0,K.jsx)(`div`,{className:`tool-detail-value output`,dangerouslySetInnerHTML:{__html:ae(r)}})]}),!t.path&&!t.command&&!t.query&&!t.diffs.length&&!i&&(0,K.jsx)(`div`,{className:`tool-detail-value output`,children:e.status===`running`?`Still working. Details will appear here when the agent streams them.`:`No further details.`})]})}function ji(e){let t=yt(e.name,e.input,e.detail,{diffStats:!1});if(t.verb===`Agent output`)return`Reading agent output…`;if(e.detail?.kind===`delegation`){let t=e.detail.label?`${e.detail.label} sub-agent`:`Sub-agent`,n=Oi(e);return`${t} working${n?` · ${n}`:``}…`}let n=pt(t);return t.command?`Running ${n||`command`}…`:n?`${t.verb} ${n}…`:`Agent is working…`}function Mi({tools:e,summary:t,onClose:n}){let[r,i]=(0,G.useState)(null),a=r?e.find(e=>e.callId===r):void 0,o=a?yt(a.name,a.input,a.detail):void 0,s=a?Ti(a.callId,e):0,c=(0,G.useRef)(null);return(0,G.useEffect)(()=>{c.current?.closest(`.sheet-content`)?.scrollTo(0,0)},[r]),(0,K.jsx)(B,{title:a&&o?o.title:t,onClose:n,headExtra:a?(0,K.jsx)(`button`,{className:`sheet-back`,onClick:()=>i(null),"aria-label":`Back`,children:`‹`}):void 0,children:(0,K.jsx)(`div`,{ref:c,children:a&&o?(0,K.jsx)(Ai,{tool:a,f:o,subSteps:s}):e.length?wi(e).map(({tool:e,depth:t})=>(0,K.jsx)(ki,{tool:e,depth:t,f:yt(e.name,e.input,e.detail),onSelect:i},e.callId)):(0,K.jsx)(`div`,{className:`tool-detail-value output`,children:`No tool activity.`})})})}var Ni=(0,G.memo)(function({tools:e}){let[t,n]=(0,G.useState)(!1),r=(0,G.useCallback)(()=>n(!1),[]),i=e.some(e=>e.status===`running`),a=e.some(e=>mt(e.detail)),o=e.filter(e=>e.status===`running`&&e.detail?.kind===`delegation`),s=o.length>1?`${o.length} sub-agents working…`:o.length===1?ji(o[0]):i&&e.every(e=>e.status===`running`)&&e.length===1?ji(e[0]):gt(e),c=i?`Working`:`Worked`,l=s,u=`${i?`Work in progress`:`Work log`} · ${e.length} action${e.length===1?``:`s`}`;return(0,K.jsxs)(`div`,{className:`tool-group`,children:[(0,K.jsxs)(`button`,{className:`tool-group-line${i?` is-running`:``}${a?` is-error`:``}`,onClick:()=>n(!0),"aria-label":`${c}: ${l}. Open work details`,children:[(0,K.jsx)(`span`,{className:`tool-group-state`,"aria-hidden":!0}),(0,K.jsx)(`span`,{className:`tool-group-label`,children:c}),(0,K.jsx)(`span`,{className:`tool-group-summary`,children:l}),(0,K.jsx)(`span`,{className:`tool-chevron`,children:(0,K.jsx)(Qe,{size:14})})]}),t&&(0,K.jsx)(Mi,{tools:e,summary:u,onClose:r})]})},(e,t)=>e.tools.length===t.tools.length&&e.tools.every((e,n)=>e===t.tools[n])),Pi={completed:`Done`,in_progress:`In progress`,pending:`To do`,cancelled:`Cancelled`},Fi=(0,G.memo)(function({plan:e}){let t=e.filter(e=>e.status===`completed`||e.status===`cancelled`).length,n=e.filter(e=>e.status===`completed`).length,r=e.find(e=>e.status===`in_progress`),[i,a]=(0,G.useState)(null),o=i??t<e.length,s=`${n} of ${e.length} done${r&&!o?` · ${r.text}`:``}`;return(0,K.jsxs)(`div`,{className:`tool-group plan-card`,children:[(0,K.jsxs)(`button`,{className:`tool-group-line`,onClick:()=>a(!o),"aria-expanded":o,children:[(0,K.jsx)(`span`,{className:`tool-group-label`,children:`Plan`}),(0,K.jsx)(`span`,{className:`tool-group-summary`,children:s}),(0,K.jsx)(`span`,{className:`tool-chevron plan-chevron`,children:(0,K.jsx)(Qe,{size:14})})]}),o&&(0,K.jsx)(`ol`,{className:`plan-steps`,children:e.map((e,t)=>(0,K.jsxs)(`li`,{className:`plan-step is-${e.status}`,children:[(0,K.jsx)(`span`,{className:`plan-mark`,"aria-hidden":!0}),(0,K.jsx)(`span`,{className:`plan-text`,children:e.text}),(0,K.jsxs)(`span`,{className:`sr-only`,children:[`, `,Pi[e.status]]})]},e.id??t))})]})});function Ii(e){let t=R.store.getState().catalogs.runtimes.find(t=>t.id===e);return String(t?.displayName||t?.name||e)}function Li(){let{activeSession:{activeSessionId:e},sessionIndex:{sessions:t}}=je(),n=t.find(t=>t.sessionId===e)?.forkedFrom,r=n?t.find(e=>e.sessionId===n):void 0;if(r)return{sessionId:r.sessionId,name:r.name||`Session ${r.sessionId.slice(0,8)}`,nodeId:r.nodeId}}var Ri=(0,G.memo)(function({seed:e,text:t}){let[n,r]=(0,G.useState)(!1),i=(0,G.useCallback)(()=>r(!1),[]),a=Li(),o=e.kind===`fork`?`Handed over`:`Imported`,s=`from ${Ii(e.from)}`,c=`${o} ${s}. Show what was sent`;return(0,K.jsxs)(`div`,{className:`tool-group handoff-line`,children:[(0,K.jsxs)(`button`,{className:`tool-group-line`,onClick:()=>r(!0),"aria-label":c,children:[(0,K.jsx)(`span`,{className:`tool-group-label`,children:o}),(0,K.jsx)(`span`,{className:`tool-group-summary`,children:s})]}),e.kind===`fork`&&a&&(0,K.jsx)(`button`,{type:`button`,className:`handoff-source`,onClick:()=>R.openSessionOnNode(a.sessionId,void 0,a.nodeId),"aria-label":`Open the original session: ${a.name}`,children:a.name}),(0,K.jsx)(`button`,{className:`tool-group-line handoff-open`,onClick:()=>r(!0),tabIndex:-1,"aria-hidden":`true`,children:(0,K.jsx)(`span`,{className:`tool-chevron`,children:(0,K.jsx)(Qe,{size:14})})}),n&&(0,K.jsx)(B,{title:`Context sent to the agent`,onClose:i,children:(0,K.jsx)(`div`,{className:`tool-detail-value output handoff-seed-text`,children:t})})]})});function zi(e,t){let n=[],r=null,i=null,a=[],o=[],s=()=>{let e=i??r;if(e){if(a.length===0)n.push(e);else{let t=new Set,r=a.filter(e=>{let n=e.hash||`${e.kind}:${e.name}:${e.size}`;return!t.has(n)&&(t.add(n),!0)});n.push({...e,attachments:r})}}n.push(...o.filter(t=>t.id!==e?.id)),r=null,i=null,a=[],o=[]};for(let t of e)if(!(t.tool||t.role===`thinking`)){if(t.role===`assistant`){r=t,(t.app||t.review||t.suggestion||t.notice)&&o.push(t),(t.text||t.streaming)&&(i=t),t.attachments?.length&&a.push(...t.attachments);continue}s(),n.push(t)}if(s(),!t)return n;let c=n.findLastIndex(e=>e.role===`user`);return n.flatMap((e,t)=>e.role===`assistant`&&(c<0||t>c)?e.app||e.review||e.suggestion||e.notice||e.attachments?.length?[{...e,text:``,html:void 0,streaming:!1}]:[]:[e])}var Bi=3e4,Vi=null;function Hi(e,t){Vi={sessionId:e,target:t,at:Date.now()}}var Ui=(e,t)=>`hash`in t?!!e.attachments?.some(e=>e.hash===t.hash):`reviewId`in t?e.review?.id===t.reviewId:e.app?.appId===t.appId;function Wi(e,t){if(!Vi||Vi.sessionId!==e)return null;if(Date.now()-Vi.at>Bi)return Vi=null,null;let{target:n}=Vi,r=t.findLastIndex(e=>Ui(e,n));return r>=0?r:null}function Gi(){Vi=null}var Ki=null;function qi(e){return Array.from(e.classList).some(e=>e.toLowerCase()===`language-mermaid`)}var Ji=`<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>`,Yi=`<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden><polyline points="20 6 9 17 4 12"/></svg>`;function Xi(e){if(!e)return;let t=Array.from(e.querySelectorAll(`pre`)).filter(e=>{let t=e.querySelector(`code`);return t&&!qi(t)&&!e.parentElement?.classList.contains(`code-block-wrap`)});for(let e of t){let t=document.createElement(`div`);t.className=`code-block-wrap`,e.parentNode?.insertBefore(t,e),t.appendChild(e);let n=document.createElement(`button`);n.type=`button`,n.className=`code-copy-btn`,n.title=`Copy code`,n.setAttribute(`aria-label`,`Copy code`),n.innerHTML=Ji;let r=null;n.addEventListener(`click`,()=>{let t=e.querySelector(`code`)?.textContent??``;tt(t).then(e=>{e&&(n.classList.add(`copied`),n.innerHTML=Yi,r&&clearTimeout(r),r=setTimeout(()=>{n.classList.remove(`copied`),n.innerHTML=Ji},1200))})}),t.appendChild(n)}}function q(e){if(!e)return;let t=Array.from(e.querySelectorAll(`pre code`)).filter(e=>!qi(e)&&e.dataset.highlighted!==`yes`);t.length!==0&&(Ki??=C(()=>import(`./common-DvIV9UK2.js`).then(e=>e.default),__vite__mapDeps([0,1])),Ki.then(e=>{for(let n of t){if(!n.isConnected||n.dataset.highlighted===`yes`)continue;let t=Array.from(n.classList).find(e=>e.startsWith(`language-`))?.slice(9);t&&!e.getLanguage(t)&&n.classList.remove(`language-${t}`),e.highlightElement(n)}}))}var Zi=null,Qi=Promise.resolve(),$i=0;function ea(){return Zi??=C(async()=>{let{default:e}=await import(`./mermaid.core-_waZYNe5.js`);return{default:e}},__vite__mapDeps([2,3,4,5,6,1,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21])).then(({default:e})=>(e.initialize({startOnLoad:!1,securityLevel:`strict`,suppressErrorRendering:!0,theme:`base`,fontFamily:`inherit`}),e)),Zi}function ta(e){return e instanceof HTMLElement&&Array.from(e.classList).some(e=>e.toLowerCase()===`language-mermaid`)}function na(e){if(!e)return;let t=Array.from(e.querySelectorAll(`pre > code`)).filter(ta);for(let n of t){let t=n.parentElement;if(!t||t.dataset.mermaidState)continue;t.dataset.mermaidState=`queued`;let r=n.textContent??``;Qi=Qi.then(async()=>{if(t.isConnected&&e.contains(t))try{let n=await ea();if(!t.isConnected||!e.contains(t))return;let i=`bivy-mermaid-${++$i}`,{svg:a,bindFunctions:o}=await n.render(i,r);if(!t.isConnected||!e.contains(t))return;let s=document.createElement(`div`);s.className=`mermaid-diagram`,s.setAttribute(`role`,`img`),s.setAttribute(`aria-label`,`Mermaid diagram`),s.innerHTML=a,t.replaceWith(s),o?.(s)}catch{t.dataset.mermaidState=`error`,t.title=`This Mermaid diagram could not be rendered`}})}}var ra=`bivy.speech.preferences.v1`,ia={reader:`browser`,browserVoice:``,rate:1,openaiVoice:`coral`,tone:`natural`},aa=[`alloy`,`ash`,`ballad`,`coral`,`echo`,`fable`,`nova`,`onyx`,`sage`,`shimmer`,`verse`],oa=[{id:`natural`,label:`Natural`,instructions:`Speak naturally and conversationally, with clear phrasing and subtle expression.`},{id:`calm`,label:`Calm`,instructions:`Speak calmly and evenly at a relaxed pace, with a reassuring tone.`},{id:`warm`,label:`Warm`,instructions:`Speak with a warm, friendly, empathetic tone.`},{id:`energetic`,label:`Energetic`,instructions:`Speak with upbeat energy and engaging emphasis, without sounding exaggerated.`},{id:`professional`,label:`Professional`,instructions:`Speak clearly and confidently in a polished, professional tone.`}];function sa(){try{let e=JSON.parse(localStorage.getItem(ra)||`{}`);return{reader:e.reader===`openai`?`openai`:`browser`,browserVoice:typeof e.browserVoice==`string`?e.browserVoice:``,rate:typeof e.rate==`number`&&e.rate>=.7&&e.rate<=1.5?e.rate:1,openaiVoice:aa.includes(e.openaiVoice||``)?e.openaiVoice:ia.openaiVoice,tone:oa.some(t=>t.id===e.tone)?e.tone:ia.tone}}catch{return{...ia}}}function ca(e){localStorage.setItem(ra,JSON.stringify(e))}function la(e){return oa.find(t=>t.id===e)?.instructions??`Speak naturally and conversationally.`}function ua(){return typeof window<`u`&&`speechSynthesis`in window&&typeof SpeechSynthesisUtterance<`u`}function da(){return typeof window<`u`&&(ua()||typeof Audio<`u`)}function fa(e){return e.replace(/```[\s\S]*?```/g,` `).replace(/`([^`]+)`/g,`$1`).replace(/!\[([^\]]*)\]\([^)]*\)/g,`$1`).replace(/\[([^\]]+)\]\([^)]*\)/g,`$1`).replace(/^\s{0,3}#{1,6}\s+/gm,``).replace(/^\s{0,3}>\s?/gm,``).replace(/^\s{0,3}([-*+]|\d+\.)\s+/gm,``).replace(/^\s{0,3}([-*_])\s*\1\s*\1[\s\S]*?$/gm,``).replace(/(\*\*|__)(.*?)\1/g,`$2`).replace(/(\*|_)(.*?)\1/g,`$2`).replace(/~~(.*?)~~/g,`$2`).replace(/\|/g,` `).replace(/[ \t]+/g,` `).replace(/\n{2,}/g,`
5
+ `),pi={here:{label:e=>e>1?`Do ${e} here`:`Do it here`,hint:e=>e>1?`this session’s agent does them one after another.`:`this session’s agent does it next.`,prompt:e=>e.length>1?`Please do these ${e.length} tasks, one after another:\n\n${fi(e)}`:e[0].text,done:`✓ Sent to this session`},subagents:{label:e=>e>1?`Run ${e} as sub-agents`:`Use a sub-agent`,hint:()=>`this session’s agent hands the work to its sub-agents and reports back.`,prompt:e=>e.length>1?`Please do these ${e.length} tasks in parallel, one sub-agent per task, then report back on each:\n\n${fi(e)}`:`Please hand this task to a sub-agent, then report back:\n\n${e[0].text}`,done:`✓ Sent to this session’s sub-agents`},new:{label:e=>e>1?`Start ${e} new sessions`:`Start in new session`,hint:e=>e>1?`each task gets its own agent, running side by side.`:`it gets its own agent, running side by side with this one.`,done:`✓ Started in a new session`}},mi=Object.keys(pi),hi=(e,t)=>e.run??(t?`new`:`here`);function gi({suggestion:e}){let t=je(),n=t.activeSession.activeSessionId??``,r=t.connection.status===`online`,[i,a]=(0,G.useState)(()=>si(e.id)),[o,s]=(0,G.useState)(!1),[c,l]=(0,G.useState)(null),[,u]=(0,G.useState)(0);(0,G.useEffect)(()=>{let t=()=>{a(si(e.id)),u(e=>e+1)};return window.addEventListener(`bivy:suggestions`,t),()=>window.removeEventListener(`bivy:suggestions`,t)},[e.id]);let{run:d,last:f}=di(t.activeSession.transcript,e.id),p=d.length>1,m=d.filter(e=>!si(e.id)),h=p?m.filter(e=>!li.has(e.id)):[e],g=e.title||e.text,_=o||!r||!n||h.length===0,v=new Set(h.map(e=>hi(e,p))),y=v.size===1?[...v][0]:`new`,b=[y,...mi.filter(e=>e!==`subagents`||d.some(e=>e.run===`subagents`)).filter(e=>e!==y)],x=async e=>{let t=pi[e].prompt;if(t){R.sendPrompt(t(h));for(let t of h)ci(t.id,{where:e});return}s(!0),l(null);try{for(let e of h){let t=await R.startSessionLike(n,e.text);ci(e.id,{where:`new`,sessionId:t})}}catch(e){l(e instanceof Error?e.message:String(e))}finally{s(!1)}},S=p?f&&m.length>0:!i,C=h.length;return(0,K.jsxs)(`section`,{className:`card suggestion-card`,"aria-label":`Suggested task: ${g}`,children:[(0,K.jsx)(`p`,{className:`suggestion-eyebrow`,children:`Suggested task`}),p&&!i?(0,K.jsxs)(`label`,{className:`suggestion-pick`,children:[(0,K.jsx)(`input`,{type:`checkbox`,checked:!li.has(e.id),disabled:o,onChange:t=>ui(e.id,t.target.checked)}),(0,K.jsx)(`span`,{className:`suggestion-title`,children:g})]}):(0,K.jsx)(`p`,{className:`suggestion-title`,children:g}),e.title&&(0,K.jsx)(`p`,{className:`suggestion-text`,children:e.text}),c&&(0,K.jsx)(`div`,{className:`banner inline`,"data-tone":`danger`,role:`alert`,children:c}),i&&(0,K.jsxs)(`p`,{className:`suggestion-status`,role:`status`,children:[pi[i.where].done,i.where===`new`&&(0,K.jsx)(`button`,{type:`button`,className:`btn sm ghost`,onClick:()=>R.openSession(i.sessionId),children:`Open`})]}),S&&(0,K.jsxs)(`div`,{className:p?`suggestion-all`:`suggestion-bar`,children:[p&&(0,K.jsx)(`p`,{className:`suggestion-hint`,role:`status`,children:C===0?`Select the tasks to start.`:`${C} of ${m.length} selected`}),(0,K.jsx)(`div`,{className:`suggestion-actions`,children:b.map(e=>(0,K.jsx)(`button`,{type:`button`,className:`btn sm ${e===y?`primary`:`ghost`}`,disabled:_,onClick:()=>void x(e),children:o&&e===`new`?`Starting…`:pi[e].label(Math.max(C,1))},e))}),(0,K.jsxs)(`p`,{className:`suggestion-hint`,children:[`Recommended: `,pi[y].hint(C)]})]})]})}function _i({notice:e}){return(0,K.jsxs)(`section`,{className:`card notice-card`,"data-tone":e.urgent?`warn`:`accent`,"aria-label":e.urgent?`Urgent message from the agent`:`Message from the agent`,children:[(0,K.jsxs)(`p`,{className:`notice-eyebrow`,children:[`Message for you`,e.urgent&&(0,K.jsx)(z,{tone:`warn`,variant:`soft`,children:`Urgent`})]}),(0,K.jsx)(`p`,{className:`notice-text`,children:e.text})]})}var vi={pending:{label:`Queued`,tone:`accent`},claimed:{label:`Starting`,tone:`accent`},running:{label:`Working`,tone:`accent`},waiting:{label:`Waiting`,tone:`accent`},needs_attention:{label:`Needs attention`,tone:`warn`},succeeded:{label:`Done`,tone:`ok`},failed:{label:`Failed`,tone:`danger`},cancelled:{label:`Cancelled`}};function yi(e){let t=je(),n=e.agent?t.catalogs.runtimes.find(t=>t.id===e.agent)?.displayName||e.agent:`Default agent`;return{agent:n,label:e.machine?`${n} @ ${e.machine}`:n}}function bi({status:e}){let t=vi[e]??{label:e};return(0,K.jsx)(`span`,{className:`badge`,"data-tone":t.tone,children:t.label})}function xi({card:e,target:t,compact:n}){return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`div`,{className:`delegation-head`,children:[(0,K.jsxs)(`span`,{className:`delegation-target`,children:[t.agent,e.machine&&(0,K.jsxs)(`span`,{className:`delegation-machine`,children:[`on `,e.machine]})]}),(0,K.jsx)(bi,{status:e.status})]}),!n&&(0,K.jsx)(`p`,{className:`delegation-task`,children:e.task}),e.failure&&(0,K.jsx)(`p`,{className:`delegation-failure`,children:e.failure}),e.answer&&(0,K.jsxs)(`details`,{className:`delegation-answer`,open:n,children:[(0,K.jsx)(`summary`,{children:`Answer`}),(0,K.jsx)(`p`,{children:e.answer})]}),(e.branch||e.prUrl)&&(0,K.jsxs)(`p`,{className:`delegation-refs`,children:[e.branch&&(0,K.jsx)(`code`,{children:e.branch}),e.prUrl&&(0,K.jsx)(`a`,{href:e.prUrl,target:`_blank`,rel:`noreferrer`,children:`Pull request`})]}),e.childSessionId&&(0,K.jsx)(`div`,{className:`delegation-actions`,children:(0,K.jsx)(`button`,{type:`button`,className:`btn sm ghost`,onClick:()=>e.childSessionId&&R.openSessionOnNode(e.childSessionId,void 0,e.nodeId),children:`Open session`})})]})}function Si({card:e}){let t=yi(e),n=e.status===`succeeded`;return(0,K.jsxs)(`section`,{className:`card delegation-member`,"aria-label":`${t.label}: ${vi[e.status]?.label??e.status}`,children:[(0,K.jsx)(xi,{card:e,target:t,compact:!0}),n&&(0,K.jsx)(`button`,{type:`button`,className:`btn sm primary`,onClick:()=>R.sendPrompt(`Go with ${t.label}'s result (delegated run ${e.id})${e.branch?`. Its work is on branch \`${e.branch}\`: fetch it and merge it into the current branch`:``}.`),children:`Use this`})]})}function Ci({delegation:e}){let t=je(),n=yi(e);if(e.group){let n=t.activeSession.transcript.flatMap(t=>t.delegation&&t.delegation.group===e.group?[t.delegation]:[]);if(n[0]?.id!==e.id)return null;let r=n.filter(e=>[`succeeded`,`failed`,`cancelled`].includes(e.status)).length;return(0,K.jsxs)(`section`,{className:`delegation-group`,"aria-label":`Compared across ${n.length} agents`,children:[(0,K.jsxs)(`p`,{className:`delegation-eyebrow`,children:[`Compared across `,n.length,` agents · `,r,`/`,n.length,` finished`]}),(0,K.jsx)(`p`,{className:`delegation-task`,children:e.task}),(0,K.jsx)(`div`,{className:`delegation-grid`,children:n.map(e=>(0,K.jsx)(Si,{card:e},e.id))})]})}return(0,K.jsxs)(`section`,{className:`card delegation-card`,"aria-label":`Delegated to ${n.label}`,children:[(0,K.jsx)(`p`,{className:`delegation-eyebrow`,children:`Delegated`}),(0,K.jsx)(xi,{card:e,target:n})]})}function wi(e){let t=new Map(e.map(e=>[e.callId,e])),n=new Map,r=e=>!!(e.parentToolUseId&&e.parentToolUseId!==e.callId&&t.has(e.parentToolUseId));for(let t of e)if(r(t)){let e=n.get(t.parentToolUseId)??[];e.push(t),n.set(t.parentToolUseId,e)}let i=[],a=new Set,o=(e,t)=>{if(!a.has(e.callId)){a.add(e.callId),i.push({tool:e,depth:t});for(let r of n.get(e.callId)??[])o(r,t+1)}};for(let t of e)r(t)||o(t,0);for(let t of e)a.has(t.callId)||o(t,0);return i}function Ti(e,t){let n=new Map;for(let e of t){let t=e.parentToolUseId;if(!t||t===e.callId)continue;let r=n.get(t)??[];r.push(e),n.set(t,r)}let r=new Set([e]),i=[...n.get(e)??[]],a=0;for(;i.length;){let e=i.pop();if(!r.has(e.callId)){r.add(e.callId),a+=1;for(let t of n.get(e.callId)??[])i.push(t)}}return a}function Ei({glyph:e}){let t={width:16,height:16,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`};switch(e){case`terminal`:return(0,K.jsxs)(`svg`,{...t,children:[(0,K.jsx)(`polyline`,{points:`4 17 10 11 4 5`}),(0,K.jsx)(`line`,{x1:`12`,y1:`19`,x2:`20`,y2:`19`})]});case`pencil`:case`create`:return(0,K.jsxs)(`svg`,{...t,children:[(0,K.jsx)(`path`,{d:`M12 20h9`}),(0,K.jsx)(`path`,{d:`M16.5 3.5a2.12 2.12 0 0 1 3 3L7 19l-4 1 1-4Z`})]});case`search`:return(0,K.jsxs)(`svg`,{...t,children:[(0,K.jsx)(`circle`,{cx:`11`,cy:`11`,r:`7`}),(0,K.jsx)(`line`,{x1:`21`,y1:`21`,x2:`16.65`,y2:`16.65`})]});case`list`:return(0,K.jsxs)(`svg`,{...t,children:[(0,K.jsx)(`line`,{x1:`8`,y1:`6`,x2:`21`,y2:`6`}),(0,K.jsx)(`line`,{x1:`8`,y1:`12`,x2:`21`,y2:`12`}),(0,K.jsx)(`line`,{x1:`8`,y1:`18`,x2:`21`,y2:`18`}),(0,K.jsx)(`line`,{x1:`3`,y1:`6`,x2:`3.01`,y2:`6`}),(0,K.jsx)(`line`,{x1:`3`,y1:`12`,x2:`3.01`,y2:`12`}),(0,K.jsx)(`line`,{x1:`3`,y1:`18`,x2:`3.01`,y2:`18`})]});case`globe`:return(0,K.jsxs)(`svg`,{...t,children:[(0,K.jsx)(`circle`,{cx:`12`,cy:`12`,r:`9`}),(0,K.jsx)(`line`,{x1:`3`,y1:`12`,x2:`21`,y2:`12`}),(0,K.jsx)(`path`,{d:`M12 3a15 15 0 0 1 0 18a15 15 0 0 1 0-18Z`})]});case`agent`:return(0,K.jsxs)(`svg`,{...t,children:[(0,K.jsx)(`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`}),(0,K.jsx)(`circle`,{cx:`9`,cy:`7`,r:`4`}),(0,K.jsx)(`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`}),(0,K.jsx)(`path`,{d:`M16 3.13a4 4 0 0 1 0 7.75`})]});default:return(0,K.jsxs)(`svg`,{...t,children:[(0,K.jsx)(`path`,{d:`M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7Z`}),(0,K.jsx)(`circle`,{cx:`12`,cy:`12`,r:`3`})]})}}function Di({added:e,removed:t}){return!e&&!t?null:(0,K.jsxs)(`span`,{className:`tool-stat`,children:[e>0&&(0,K.jsxs)(`span`,{className:`add`,children:[`+`,e]}),t>0&&(0,K.jsxs)(`span`,{className:`del`,children:[`−`,t]})]})}function Oi(e){if(e.detail?.kind!==`delegation`)return``;let t=Number(e.input?.elapsedSeconds);return!Number.isFinite(t)||t<1?``:t<60?`${Math.floor(t)}s`:`${Math.floor(t/60)}m ${Math.floor(t%60)}s`}function ki({tool:e,f:t,depth:n=0,onSelect:r}){let i=Oi(e),a=pt(t),o=i?`${a||`Sub-agent`} · ${i}`:a,s=e.status===`running`,c=n>1?{paddingLeft:`${28+(n-1)*16}px`}:void 0;return(0,K.jsx)(`div`,{className:`activity${s?` is-running`:``}${t.isError?` is-error`:``}${n>0?` is-subagent-step`:``}`,"data-depth":n||void 0,children:(0,K.jsxs)(`button`,{className:`activity-row`,style:c,onClick:()=>r(e.callId),children:[(0,K.jsx)(`span`,{className:`activity-ic`,children:(0,K.jsx)(Ei,{glyph:t.glyph})}),(0,K.jsx)(`span`,{className:`activity-verb`,children:t.verb}),(0,K.jsx)(`span`,{className:`activity-desc`,children:o}),t.isError&&(0,K.jsx)(z,{tone:`danger`,variant:`soft`,upper:!0,title:typeof t.exitCode==`number`?`exit ${t.exitCode}`:`failed`,children:`Failed`}),(0,K.jsx)(Di,{added:t.added,removed:t.removed}),(0,K.jsx)(`span`,{className:`tool-chevron`,children:(0,K.jsx)(Qe,{size:14})})]})})}function Ai({tool:e,f:t,subSteps:n=0}){let r=e.result||t.output||``,i=r&&(t.diffs.length===0||t.command||t.verb===`Agent output`),a=Oi(e);return(0,K.jsxs)(`div`,{className:`activity-detail`,children:[e.detail?.kind===`delegation`&&e.status===`running`&&(0,K.jsxs)(`div`,{className:`tool-detail-block`,children:[(0,K.jsx)(`div`,{className:`tool-detail-label`,children:`Status`}),(0,K.jsxs)(`div`,{className:`tool-detail-value`,children:[`Sub-agent active`,a?` · ${a} elapsed`:``]})]}),e.detail?.kind===`delegation`&&n>0&&(0,K.jsxs)(`div`,{className:`tool-detail-block`,children:[(0,K.jsx)(`div`,{className:`tool-detail-label`,children:`Sub-agent work`}),(0,K.jsxs)(`div`,{className:`tool-detail-value`,children:[n,` step`,n===1?``:`s`,` nested below this delegation`]})]}),(t.isError||t.truncated)&&(0,K.jsxs)(`div`,{className:`tool-detail-block`,children:[(0,K.jsx)(`div`,{className:`tool-detail-label`,children:`Outcome`}),(0,K.jsxs)(`div`,{className:`tool-detail-value${t.isError?` is-error`:``}`,children:[t.isError?`Failed`:`Completed`,typeof t.exitCode==`number`?` · exit ${t.exitCode}`:``,t.truncated?` · output truncated`:``]})]}),t.path&&(0,K.jsxs)(`div`,{className:`tool-detail-block`,children:[(0,K.jsx)(`div`,{className:`tool-detail-label`,children:`File`}),(0,K.jsx)(`div`,{className:`tool-detail-value`,children:t.path})]}),t.command&&(0,K.jsxs)(`div`,{className:`tool-detail-block`,children:[(0,K.jsx)(`div`,{className:`tool-detail-label`,children:`Command`}),(0,K.jsx)(`div`,{className:`tool-detail-value`,children:t.command})]}),t.query&&(0,K.jsxs)(`div`,{className:`tool-detail-block`,children:[(0,K.jsx)(`div`,{className:`tool-detail-label`,children:`Query`}),(0,K.jsx)(`div`,{className:`tool-detail-value`,children:t.query})]}),t.diffs.length>0&&(0,K.jsxs)(`div`,{className:`tool-detail-block`,children:[(0,K.jsx)(`div`,{className:`tool-detail-label`,children:`Diff`}),(0,K.jsx)(ut,{hunks:t.diffs,single:t.path})]}),t.diffs.length===0&&t.edits?(0,K.jsx)(`div`,{className:`tool-detail-block`,children:(0,K.jsxs)(`div`,{className:`tool-detail-value output`,children:[t.edits,` targeted edits`]})}):null,i&&(0,K.jsxs)(`div`,{className:`tool-detail-block`,children:[(0,K.jsx)(`div`,{className:`tool-detail-label`,children:e.status===`running`?`Live output`:`Output`}),(0,K.jsx)(`div`,{className:`tool-detail-value output`,dangerouslySetInnerHTML:{__html:ae(r)}})]}),!t.path&&!t.command&&!t.query&&!t.diffs.length&&!i&&(0,K.jsx)(`div`,{className:`tool-detail-value output`,children:e.status===`running`?`Still working. Details will appear here when the agent streams them.`:`No further details.`})]})}function ji(e){let t=yt(e.name,e.input,e.detail,{diffStats:!1});if(t.verb===`Agent output`)return`Reading agent output…`;if(e.detail?.kind===`delegation`){let t=e.detail.label?`${e.detail.label} sub-agent`:`Sub-agent`,n=Oi(e);return`${t} working${n?` · ${n}`:``}…`}let n=pt(t);return t.command?`Running ${n||`command`}…`:n?`${t.verb} ${n}…`:`Agent is working…`}function Mi({tools:e,summary:t,onClose:n}){let[r,i]=(0,G.useState)(null),a=r?e.find(e=>e.callId===r):void 0,o=a?yt(a.name,a.input,a.detail):void 0,s=a?Ti(a.callId,e):0,c=(0,G.useRef)(null);return(0,G.useEffect)(()=>{c.current?.closest(`.sheet-content`)?.scrollTo(0,0)},[r]),(0,K.jsx)(B,{title:a&&o?o.title:t,onClose:n,headExtra:a?(0,K.jsx)(`button`,{className:`sheet-back`,onClick:()=>i(null),"aria-label":`Back`,children:`‹`}):void 0,children:(0,K.jsx)(`div`,{ref:c,children:a&&o?(0,K.jsx)(Ai,{tool:a,f:o,subSteps:s}):e.length?wi(e).map(({tool:e,depth:t})=>(0,K.jsx)(ki,{tool:e,depth:t,f:yt(e.name,e.input,e.detail),onSelect:i},e.callId)):(0,K.jsx)(`div`,{className:`tool-detail-value output`,children:`No tool activity.`})})})}var Ni=(0,G.memo)(function({tools:e}){let[t,n]=(0,G.useState)(!1),r=(0,G.useCallback)(()=>n(!1),[]),i=e.some(e=>e.status===`running`),a=e.some(e=>mt(e.detail)),o=e.filter(e=>e.status===`running`&&e.detail?.kind===`delegation`),s=o.length>1?`${o.length} sub-agents working…`:o.length===1?ji(o[0]):i&&e.every(e=>e.status===`running`)&&e.length===1?ji(e[0]):gt(e),c=i?`Working`:`Worked`,l=s,u=`${i?`Work in progress`:`Work log`} · ${e.length} action${e.length===1?``:`s`}`;return(0,K.jsxs)(`div`,{className:`tool-group`,children:[(0,K.jsxs)(`button`,{className:`tool-group-line${i?` is-running`:``}${a?` is-error`:``}`,onClick:()=>n(!0),"aria-label":`${c}: ${l}. Open work details`,children:[(0,K.jsx)(`span`,{className:`tool-group-state`,"aria-hidden":!0}),(0,K.jsx)(`span`,{className:`tool-group-label`,children:c}),(0,K.jsx)(`span`,{className:`tool-group-summary`,children:l}),(0,K.jsx)(`span`,{className:`tool-chevron`,children:(0,K.jsx)(Qe,{size:14})})]}),t&&(0,K.jsx)(Mi,{tools:e,summary:u,onClose:r})]})},(e,t)=>e.tools.length===t.tools.length&&e.tools.every((e,n)=>e===t.tools[n])),Pi={completed:`Done`,in_progress:`In progress`,pending:`To do`,cancelled:`Cancelled`},Fi=(0,G.memo)(function({plan:e}){let t=e.filter(e=>e.status===`completed`||e.status===`cancelled`).length,n=e.filter(e=>e.status===`completed`).length,r=e.find(e=>e.status===`in_progress`),[i,a]=(0,G.useState)(null),o=i??t<e.length,s=`${n} of ${e.length} done${r&&!o?` · ${r.text}`:``}`;return(0,K.jsxs)(`div`,{className:`tool-group plan-card`,children:[(0,K.jsxs)(`button`,{className:`tool-group-line`,onClick:()=>a(!o),"aria-expanded":o,children:[(0,K.jsx)(`span`,{className:`tool-group-label`,children:`Plan`}),(0,K.jsx)(`span`,{className:`tool-group-summary`,children:s}),(0,K.jsx)(`span`,{className:`tool-chevron plan-chevron`,children:(0,K.jsx)(Qe,{size:14})})]}),o&&(0,K.jsx)(`ol`,{className:`plan-steps`,children:e.map((e,t)=>(0,K.jsxs)(`li`,{className:`plan-step is-${e.status}`,children:[(0,K.jsx)(`span`,{className:`plan-mark`,"aria-hidden":!0}),(0,K.jsx)(`span`,{className:`plan-text`,children:e.text}),(0,K.jsxs)(`span`,{className:`sr-only`,children:[`, `,Pi[e.status]]})]},e.id??t))})]})});function Ii(e){let t=R.store.getState().catalogs.runtimes.find(t=>t.id===e);return String(t?.displayName||t?.name||e)}function Li(){let{activeSession:{activeSessionId:e},sessionIndex:{sessions:t}}=je(),n=t.find(t=>t.sessionId===e)?.forkedFrom,r=n?t.find(e=>e.sessionId===n):void 0;if(r)return{sessionId:r.sessionId,name:r.name||`Session ${r.sessionId.slice(0,8)}`,nodeId:r.nodeId}}var Ri=(0,G.memo)(function({seed:e,text:t}){let[n,r]=(0,G.useState)(!1),i=(0,G.useCallback)(()=>r(!1),[]),a=Li(),o=e.kind===`fork`?`Handed over`:`Imported`,s=`from ${Ii(e.from)}`,c=`${o} ${s}. Show what was sent`;return(0,K.jsxs)(`div`,{className:`tool-group handoff-line`,children:[(0,K.jsxs)(`button`,{className:`tool-group-line`,onClick:()=>r(!0),"aria-label":c,children:[(0,K.jsx)(`span`,{className:`tool-group-label`,children:o}),(0,K.jsx)(`span`,{className:`tool-group-summary`,children:s})]}),e.kind===`fork`&&a&&(0,K.jsx)(`button`,{type:`button`,className:`handoff-source`,onClick:()=>R.openSessionOnNode(a.sessionId,void 0,a.nodeId),"aria-label":`Open the original session: ${a.name}`,children:a.name}),(0,K.jsx)(`button`,{className:`tool-group-line handoff-open`,onClick:()=>r(!0),tabIndex:-1,"aria-hidden":`true`,children:(0,K.jsx)(`span`,{className:`tool-chevron`,children:(0,K.jsx)(Qe,{size:14})})}),n&&(0,K.jsx)(B,{title:`Context sent to the agent`,onClose:i,children:(0,K.jsx)(`div`,{className:`tool-detail-value output handoff-seed-text`,children:t})})]})});function zi(e,t){let n=[],r=null,i=null,a=[],o=[],s=()=>{let e=i??r;if(e){if(a.length===0)n.push(e);else{let t=new Set,r=a.filter(e=>{let n=e.hash||`${e.kind}:${e.name}:${e.size}`;return!t.has(n)&&(t.add(n),!0)});n.push({...e,attachments:r})}}n.push(...o.filter(t=>t.id!==e?.id)),r=null,i=null,a=[],o=[]};for(let t of e)if(!(t.tool||t.role===`thinking`)){if(t.role===`assistant`){r=t,(t.app||t.review||t.suggestion||t.notice)&&o.push(t),(t.text||t.streaming)&&(i=t),t.attachments?.length&&a.push(...t.attachments);continue}s(),n.push(t)}if(s(),!t)return n;let c=n.findLastIndex(e=>e.role===`user`);return n.flatMap((e,t)=>e.role===`assistant`&&(c<0||t>c)?e.app||e.review||e.suggestion||e.notice||e.attachments?.length?[{...e,text:``,html:void 0,streaming:!1}]:[]:[e])}var Bi=3e4,Vi=null;function Hi(e,t){Vi={sessionId:e,target:t,at:Date.now()}}var Ui=(e,t)=>`hash`in t?!!e.attachments?.some(e=>e.hash===t.hash):`reviewId`in t?e.review?.id===t.reviewId:e.app?.appId===t.appId;function Wi(e,t){if(!Vi||Vi.sessionId!==e)return null;if(Date.now()-Vi.at>Bi)return Vi=null,null;let{target:n}=Vi,r=t.findLastIndex(e=>Ui(e,n));return r>=0?r:null}function Gi(){Vi=null}var Ki=null;function qi(e){return Array.from(e.classList).some(e=>e.toLowerCase()===`language-mermaid`)}var Ji=`<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden><rect x="9" y="9" width="13" height="13" rx="2" ry="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>`,Yi=`<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden><polyline points="20 6 9 17 4 12"/></svg>`;function Xi(e){if(!e)return;let t=Array.from(e.querySelectorAll(`pre`)).filter(e=>{let t=e.querySelector(`code`);return t&&!qi(t)&&!e.parentElement?.classList.contains(`code-block-wrap`)});for(let e of t){let t=document.createElement(`div`);t.className=`code-block-wrap`,e.parentNode?.insertBefore(t,e),t.appendChild(e);let n=document.createElement(`button`);n.type=`button`,n.className=`code-copy-btn`,n.title=`Copy code`,n.setAttribute(`aria-label`,`Copy code`),n.innerHTML=Ji;let r=null;n.addEventListener(`click`,()=>{let t=e.querySelector(`code`)?.textContent??``;tt(t).then(e=>{e&&(n.classList.add(`copied`),n.innerHTML=Yi,r&&clearTimeout(r),r=setTimeout(()=>{n.classList.remove(`copied`),n.innerHTML=Ji},1200))})}),t.appendChild(n)}}function q(e){if(!e)return;let t=Array.from(e.querySelectorAll(`pre code`)).filter(e=>!qi(e)&&e.dataset.highlighted!==`yes`);t.length!==0&&(Ki??=C(()=>import(`./common-DvIV9UK2.js`).then(e=>e.default),__vite__mapDeps([0,1])),Ki.then(e=>{for(let n of t){if(!n.isConnected||n.dataset.highlighted===`yes`)continue;let t=Array.from(n.classList).find(e=>e.startsWith(`language-`))?.slice(9);t&&!e.getLanguage(t)&&n.classList.remove(`language-${t}`),e.highlightElement(n)}}))}var Zi=null,Qi=Promise.resolve(),$i=0;function ea(){return Zi??=C(async()=>{let{default:e}=await import(`./mermaid.core-CNlq59L5.js`);return{default:e}},__vite__mapDeps([2,3,4,5,6,1,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21])).then(({default:e})=>(e.initialize({startOnLoad:!1,securityLevel:`strict`,suppressErrorRendering:!0,theme:`base`,fontFamily:`inherit`}),e)),Zi}function ta(e){return e instanceof HTMLElement&&Array.from(e.classList).some(e=>e.toLowerCase()===`language-mermaid`)}function na(e){if(!e)return;let t=Array.from(e.querySelectorAll(`pre > code`)).filter(ta);for(let n of t){let t=n.parentElement;if(!t||t.dataset.mermaidState)continue;t.dataset.mermaidState=`queued`;let r=n.textContent??``;Qi=Qi.then(async()=>{if(t.isConnected&&e.contains(t))try{let n=await ea();if(!t.isConnected||!e.contains(t))return;let i=`bivy-mermaid-${++$i}`,{svg:a,bindFunctions:o}=await n.render(i,r);if(!t.isConnected||!e.contains(t))return;let s=document.createElement(`div`);s.className=`mermaid-diagram`,s.setAttribute(`role`,`img`),s.setAttribute(`aria-label`,`Mermaid diagram`),s.innerHTML=a,t.replaceWith(s),o?.(s)}catch{t.dataset.mermaidState=`error`,t.title=`This Mermaid diagram could not be rendered`}})}}var ra=`bivy.speech.preferences.v1`,ia={reader:`browser`,browserVoice:``,rate:1,openaiVoice:`coral`,tone:`natural`},aa=[`alloy`,`ash`,`ballad`,`coral`,`echo`,`fable`,`nova`,`onyx`,`sage`,`shimmer`,`verse`],oa=[{id:`natural`,label:`Natural`,instructions:`Speak naturally and conversationally, with clear phrasing and subtle expression.`},{id:`calm`,label:`Calm`,instructions:`Speak calmly and evenly at a relaxed pace, with a reassuring tone.`},{id:`warm`,label:`Warm`,instructions:`Speak with a warm, friendly, empathetic tone.`},{id:`energetic`,label:`Energetic`,instructions:`Speak with upbeat energy and engaging emphasis, without sounding exaggerated.`},{id:`professional`,label:`Professional`,instructions:`Speak clearly and confidently in a polished, professional tone.`}];function sa(){try{let e=JSON.parse(localStorage.getItem(ra)||`{}`);return{reader:e.reader===`openai`?`openai`:`browser`,browserVoice:typeof e.browserVoice==`string`?e.browserVoice:``,rate:typeof e.rate==`number`&&e.rate>=.7&&e.rate<=1.5?e.rate:1,openaiVoice:aa.includes(e.openaiVoice||``)?e.openaiVoice:ia.openaiVoice,tone:oa.some(t=>t.id===e.tone)?e.tone:ia.tone}}catch{return{...ia}}}function ca(e){localStorage.setItem(ra,JSON.stringify(e))}function la(e){return oa.find(t=>t.id===e)?.instructions??`Speak naturally and conversationally.`}function ua(){return typeof window<`u`&&`speechSynthesis`in window&&typeof SpeechSynthesisUtterance<`u`}function da(){return typeof window<`u`&&(ua()||typeof Audio<`u`)}function fa(e){return e.replace(/```[\s\S]*?```/g,` `).replace(/`([^`]+)`/g,`$1`).replace(/!\[([^\]]*)\]\([^)]*\)/g,`$1`).replace(/\[([^\]]+)\]\([^)]*\)/g,`$1`).replace(/^\s{0,3}#{1,6}\s+/gm,``).replace(/^\s{0,3}>\s?/gm,``).replace(/^\s{0,3}([-*+]|\d+\.)\s+/gm,``).replace(/^\s{0,3}([-*_])\s*\1\s*\1[\s\S]*?$/gm,``).replace(/(\*\*|__)(.*?)\1/g,`$2`).replace(/(\*|_)(.*?)\1/g,`$2`).replace(/~~(.*?)~~/g,`$2`).replace(/\|/g,` `).replace(/[ \t]+/g,` `).replace(/\n{2,}/g,`
6
6
  `).trim()}function pa(e,t,n){return{distanceFromBottom:Math.max(0,e.scrollHeight-e.scrollTop-e.clientHeight),pinned:t,limit:n}}function ma(e,t){return!t||t.pinned?e.scrollHeight:Math.max(0,e.scrollHeight-e.clientHeight-t.distanceFromBottom)}function ha(e){return e<1024?`${e} B`:e<1048576?`${Math.round(e/1024)} KB`:`${(e/1024/1024).toFixed(1)} MB`}function ga(e,t){try{let n=atob(e),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return URL.createObjectURL(new Blob([r],{type:t||`application/octet-stream`}))}catch{return null}}function _a(e){let t=(0,G.useMemo)(()=>{if(!e||e.omitted)return null;if(e.data)return ga(e.data,e.mimeType);if(e.text!==void 0)try{return URL.createObjectURL(new Blob([e.text],{type:e.mimeType||`text/plain`}))}catch{return null}return null},[e]);(0,G.useEffect)(()=>()=>{t&&URL.revokeObjectURL(t)},[t]);let[n,r]=(0,G.useState)(null);return(0,G.useEffect)(()=>{if(r(null),t||!e||e.omitted||!e.hash)return;let n=e.mimeType,i=!1,a=null;return R.fetchAttachment(e.hash,e.createdAt).then(e=>{!i&&e&&(a=ga(e.data,e.mimeType||n),a&&r(a))}),()=>{i=!0,a&&URL.revokeObjectURL(a)}},[t,e]),t??n}function va({attachment:e,onOpenImage:t}){let n=_a(e);return(0,K.jsxs)(`div`,{className:`msg-attachment`,children:[e.kind===`image`&&n&&(0,K.jsx)(`a`,{className:`attach-preview`,href:n,target:`_blank`,rel:`noopener`,title:e.name,onClick:t?e=>{e.metaKey||e.ctrlKey||e.shiftKey||e.button!==0||(e.preventDefault(),t())}:void 0,children:(0,K.jsx)(`img`,{src:n,alt:e.description||e.name})}),(0,K.jsxs)(`div`,{className:`attach-details`,children:[(0,K.jsxs)(`div`,{className:`attach-copy`,children:[(0,K.jsx)(`div`,{className:`attach-name`,children:e.name}),(0,K.jsx)(`div`,{className:`attach-description`,children:e.description||`${e.mimeType||(e.kind===`image`?`Image`:`File`)} · ${ha(e.size)}`})]}),n?(0,K.jsx)(`a`,{className:`btn icon attach-download`,href:n,download:e.name,"aria-label":`Download ${e.name}`,title:`Download ${e.name}`,children:(0,K.jsx)(ya,{})}):(0,K.jsx)(`button`,{className:`btn icon attach-download`,disabled:!0,"aria-label":`Download ${e.name} unavailable`,title:`Content unavailable or still loading`,children:(0,K.jsx)(ya,{})})]})]})}function ya(){return(0,K.jsx)(`svg`,{width:`20`,height:`20`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.5`,"aria-hidden":`true`,children:(0,K.jsx)(`path`,{d:`M12 3v12m-5-5 5 5 5-5M4 15v5h16v-5`})})}function ba({attachments:e}){let t=(0,G.useMemo)(()=>e.filter(e=>e.kind===`image`&&!e.omitted),[e]),[n,r]=(0,G.useState)(null);return(0,K.jsxs)(`div`,{className:`msg-attachments`,children:[e.map((e,n)=>{let i=t.indexOf(e);return(0,K.jsx)(va,{attachment:e,onOpenImage:i>=0?()=>r(i):void 0},`${e.name}-${n}`)}),n!==null&&(0,K.jsx)(Va,{images:t,index:n,onClose:()=>r(null)})]})}function xa(e){return e===`/new`?`New session`:e===`/resume`?`Resume`:e===`fork`?`Fork to another agent`:e===`cancel-resume`?`Cancel auto-retry`:e===`fix-auth`||e.startsWith(`fix-auth:`)?`Fix sign-in`:e===`retry-auth`?`Refresh and retry`:e.startsWith(`connect-provider:`)?`Connect a provider`:e.startsWith(`retry-at-reset:`)?`Retry automatically at ${Sa(e.slice(15))}`:`Run ${e}`}function Sa(e){let t=new Date(e);if(Number.isNaN(t.getTime()))return`reset`;let n=t.toDateString()===new Date().toDateString();return t.toLocaleString(void 0,n?{hour:`numeric`,minute:`2-digit`}:{weekday:`short`,hour:`numeric`,minute:`2-digit`})}function Ca({actions:e,onAction:t,size:n}){return!e?.length||!t?null:(0,K.jsx)(`div`,{className:`entry-actions`,children:e.map((e,r)=>(0,K.jsx)(`button`,{type:`button`,className:[`btn`,n,r===0?`primary`:``].filter(Boolean).join(` `),onClick:()=>t(e),children:xa(e)},e))})}function wa(){return(0,K.jsxs)(`svg`,{width:`15`,height:`15`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:[(0,K.jsx)(`rect`,{x:`9`,y:`9`,width:`13`,height:`13`,rx:`2`,ry:`2`}),(0,K.jsx)(`path`,{d:`M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1`})]})}function Ta(){return(0,K.jsx)(`svg`,{width:`15`,height:`15`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:(0,K.jsx)(`polyline`,{points:`20 6 9 17 4 12`})})}function Ea({text:e}){let[t,n]=(0,G.useState)(!1),r=(0,G.useCallback)(()=>{tt(e).then(e=>{e&&(n(!0),setTimeout(()=>n(!1),1200))})},[e]);return(0,K.jsx)(`button`,{type:`button`,className:`msg-copy-btn${t?` copied`:``}`,onClick:r,title:t?`Copied`:`Copy message`,"aria-label":`Copy message`,children:t?(0,K.jsx)(Ta,{}):(0,K.jsx)(wa,{})})}function Da(){return(0,K.jsxs)(`svg`,{width:`15`,height:`15`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:[(0,K.jsx)(`polygon`,{points:`11 5 6 9 2 9 2 15 6 15 11 19 11 5`}),(0,K.jsx)(`path`,{d:`M15.54 8.46a5 5 0 0 1 0 7.07`}),(0,K.jsx)(`path`,{d:`M19.07 4.93a10 10 0 0 1 0 14.14`})]})}function Oa(){return(0,K.jsx)(`svg`,{width:`15`,height:`15`,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:(0,K.jsx)(`rect`,{x:`6`,y:`6`,width:`12`,height:`12`,rx:`1.5`})})}var ka=null;function Aa({text:e}){let[t,n]=(0,G.useState)(!1),r=(0,G.useRef)(null),i=(0,G.useRef)(null),a=(0,G.useRef)(0),o=(0,G.useCallback)(()=>{a.current+=1;let e=r.current;e&&(e.onend=null,e.onerror=null,r.current=null),window.speechSynthesis.cancel();let t=i.current;t&&(t.audio.pause(),URL.revokeObjectURL(t.url),i.current=null),n(!1),ka===o&&(ka=null)},[]);(0,G.useEffect)(()=>o,[o]);let s=(0,G.useCallback)(async()=>{if(t){o();return}let s=fa(e);if(!s)return;ka?.(),ka=o,n(!0);let c=sa();if(c.reader===`openai`){let e=++a.current;try{let t=await R.synthesize(s,c.openaiVoice,la(c.tone));if(a.current!==e)return;let n=ga(t.audio,t.mimeType);if(!n)throw Error(`The generated speech audio was invalid.`);let r=new Audio(n);i.current={audio:r,url:n},r.onended=o,r.onerror=()=>{R.store.setError(`Could not play the generated speech.`),o()},await r.play()}catch(t){a.current===e&&(R.store.setError(t instanceof Error?t.message:String(t)),o())}return}if(!ua()){R.store.setError(`Browser speech is not supported on this device. Choose OpenAI under Settings → Voice.`),o();return}let l=window.speechSynthesis;l.cancel();let u=new SpeechSynthesisUtterance(s);u.rate=c.rate,c.browserVoice&&(u.voice=l.getVoices().find(e=>e.voiceURI===c.browserVoice||e.name===c.browserVoice)??null);let d=()=>{r.current===u&&o()};u.onend=d,u.onerror=d,r.current=u,l.speak(u)},[t,o,e]);return(0,K.jsx)(`button`,{type:`button`,className:`msg-speak-btn${t?` speaking`:``}`,onClick:s,title:t?`Stop`:`Read aloud`,"aria-label":t?`Stop reading`:`Read message aloud`,children:t?(0,K.jsx)(Oa,{}):(0,K.jsx)(Da,{})})}var ja=(0,G.memo)(function({entry:e,onAction:t,authAction:n}){let r=(0,G.useMemo)(()=>e.role===`assistant`&&!e.streaming?e.html??ae(e.text):``,[e.role,e.streaming,e.html,e.text]),i=(0,G.useRef)(null);if((0,G.useEffect)(()=>{if(e.role!==`assistant`)return;na(i.current),q(i.current),Xi(i.current);let t=i.current;if(!t||!e.imageRefs)return;let n=!1,r=[];return t.querySelectorAll(`img.md-image[data-remote-src]`).forEach(t=>{let i=t.dataset.remoteSrc;if(!i||t.dataset.hydrated===`1`)return;let a=e.imageRefs?.[i];a&&(t.dataset.hydrated=`1`,R.fetchAttachment(a.hash).then(e=>{if(n||!e)return;let i=ga(e.data,e.mimeType||a.mimeType);i&&(t.src=i,r.push(i))}))}),()=>{n=!0,r.forEach(e=>URL.revokeObjectURL(e))}},[e.role,r,e.imageRefs]),e.role===`system`)return(0,K.jsxs)(`div`,{className:`msg system`,children:[(0,K.jsx)(`span`,{className:`system-text`,dangerouslySetInnerHTML:{__html:ae(e.text)}}),(0,K.jsx)(Ca,{actions:e.actions,onAction:t,size:`sm`})]});if(e.role===`thinking`)return(0,K.jsx)(`div`,{className:`msg thinking${e.streaming?` streaming`:``}`,children:e.text});if(e.role===`error`){let[r=`The agent hit an error`,...i]=e.text.split(`
7
7
  `),a=i.join(`
8
- `).trim(),o=e.actions?.length?e.actions:n&&M(e.text)?[n,`retry-auth`]:void 0;return(0,K.jsxs)(`div`,{className:`card`,"data-tone":`danger`,role:`alert`,children:[(0,K.jsx)(`strong`,{children:r}),(0,K.jsx)(Ca,{actions:o,onAction:t}),a&&(0,K.jsxs)(`details`,{className:`settings-disclosure`,children:[(0,K.jsx)(`summary`,{className:`settings-disclosure-summary`,children:`Details`}),(0,K.jsx)(`pre`,{className:`settings-disclosure-body`,children:a})]})]})}if(e.role===`user`){let t=Pt(e.text);if(t)return(0,K.jsx)(Ri,{seed:t,text:e.text});let n=!!e.attachments&&e.attachments.length>0,r=n?E(e.text):e.text;return(0,K.jsxs)(`div`,{className:`msg user`,id:n?`msg-${e.id}`:void 0,children:[n&&(0,K.jsx)(ba,{attachments:e.attachments}),r]})}if(e.streaming)return(0,K.jsx)(`div`,{className:`assistant-row`,children:(0,K.jsx)(`div`,{ref:i,className:`msg assistant streaming streaming-text`,children:e.text})});let a=!!e.attachments&&e.attachments.length>0,o=e.attachments?.length===1&&e.attachments[0]?.description===e.text;return(0,K.jsxs)(`div`,{className:`assistant-row`,id:a||e.app||e.review||e.pin||e.suggestion||e.notice||e.delegation?`msg-${e.id}`:void 0,children:[e.app&&(0,K.jsx)(Zr,{app:e.app}),e.review&&(0,K.jsx)(ni,{review:e.review}),e.pin&&(0,K.jsx)(ii,{pin:e.pin}),e.suggestion&&(0,K.jsx)(gi,{suggestion:e.suggestion}),e.notice&&(0,K.jsx)(_i,{notice:e.notice}),e.delegation&&(0,K.jsx)(Ci,{delegation:e.delegation}),a&&(0,K.jsx)(ba,{attachments:e.attachments}),(e.text&&!o||!a&&!e.app&&!e.review&&!e.pin&&!e.suggestion&&!e.notice&&!e.delegation)&&(0,K.jsx)(`div`,{ref:i,className:`msg assistant`,dangerouslySetInnerHTML:{__html:r}}),e.text&&!o&&(0,K.jsxs)(`div`,{className:`msg-actions`,children:[(0,K.jsx)(Ea,{text:e.text}),da()&&(0,K.jsx)(Aa,{text:e.text})]})]})});function Ma(e){let t=[],n=null;for(let r of e){if(r.kind===`entry`&&r.entry.role===`user`){n={kind:`turn`,key:`turn-${r.key}`,user:r,response:[]},t.push(n);continue}if(r.kind===`entry`&&(r.entry.role===`system`||r.entry.role===`error`)){t.push({kind:`standalone`,key:`standalone-${r.key}`,item:r}),n=null;continue}n||(n={kind:`turn`,key:`turn-${r.key}`,response:[]},t.push(n)),n.response.push(r)}for(let e of t)e.kind===`turn`&&(e.response=Fa(e.response,e.key));return t}function Na(e){return e.detail?.kind===`plan`&&!e.parentToolUseId&&Bt(e.input)!==void 0}function Pa(e){let t=new Map,n=[];for(let r of e)r.tool&&Na(r.tool)&&(n=Vt(n,Bt(r.tool.input)),t.set(r.tool.callId,n));return t}function Fa(e,t){let n=-1;if(e.forEach((e,t)=>{e.kind===`plan`&&(n=t)}),n<0)return e;let r=[];return e.forEach((e,i)=>{if(e.kind===`plan`&&i!==n)return;let a=r[r.length-1];if(e.kind===`tools`&&a?.kind===`tools`){r[r.length-1]={...a,tools:[...a.tools,...e.tools]};return}r.push(e.kind===`plan`?{...e,key:`plan-${t}`}:e)}),r}function Ia(e){let t=[],n=[],r=``,i=()=>{n.length&&t.push({kind:`tools`,key:r,tools:n}),n=[]};for(let a of e)a.tool&&Na(a.tool)?(i(),t.push({kind:`plan`,key:`plan-${a.tool.callId}`,callId:a.tool.callId})):a.tool?(n.length||(r=`tools-${a.tool.callId||a.id}`),n.push(a.tool)):(i(),t.push({kind:`entry`,key:a.id,entry:a}));return i(),t}var La=20,Ra=40;function za({entries:e,working:t,workingLabel:n,draftRoute:r,opening:i,sessionKey:a,focusView:o,onAction:s,authAction:c,header:l,footer:u,greeting:d}){let f=(0,G.useRef)(null),p=(0,G.useRef)(null),[m,h]=(0,G.useState)(!0),g=(0,G.useMemo)(()=>o?zi(e,t):e,[e,o,t]),_=g.length,v=(0,G.useRef)(new Map),[y,b]=(0,G.useState)(()=>({sessionKey:a,focusView:o,initialized:_>0,start:Math.max(0,_-La)})),x=Math.max(0,_-La),S=Math.min(y.start,x);if(y.sessionKey!==a||y.focusView!==o||!y.initialized&&_>0){let e=v.current.get(a??`new`);S=Math.max(0,_-Math.max(La,e?.limit??La)),b({sessionKey:a,focusView:o,initialized:_>0,start:S})}else(S!==y.start||y.initialized&&_===0)&&b({...y,initialized:_>0,start:S});let C=Wi(a,g);C!==null&&C<S&&(S=C,b({sessionKey:a,focusView:o,initialized:!0,start:S}));let w=(0,G.useRef)(_-S);(0,G.useLayoutEffect)(()=>{w.current=_-S},[_,S]);let T=(0,G.useRef)(!0),E=(0,G.useCallback)(e=>{T.current=e,h(e)},[]),D=(0,G.useCallback)(()=>{let e=f.current;return!e||e.scrollHeight-e.scrollTop-e.clientHeight<80},[]),O=(0,G.useCallback)(()=>{let e=f.current;e&&(e.scrollTop=e.scrollHeight)},[]),k=(0,G.useCallback)(()=>{let e=f.current;e&&e.scrollTo({top:e.scrollHeight,behavior:`smooth`}),E(!0)},[E]);(0,G.useLayoutEffect)(()=>{let e=v.current.get(a??`new`);E(e?.pinned??!0);let t=requestAnimationFrame(()=>{let t=f.current;t&&(t.scrollTop=ma(t,e))});return()=>cancelAnimationFrame(t)},[a,E]),(0,G.useLayoutEffect)(()=>{let e=Wi(a,g);if(e===null||e<S)return;let t=`msg-${g[e].id}`;Gi(),E(!1),requestAnimationFrame(()=>{let e=document.getElementById(t);e&&(e.scrollIntoView({block:`center`}),e.classList.add(`is-jump-target`),setTimeout(()=>e.classList.remove(`is-jump-target`),2400))})},[a,g,S,E]);let ee=(0,G.useCallback)(()=>{let e=f.current;if(!e)return;let t=D();E(t),v.current.set(a??`new`,pa(e,t,w.current))},[D,a,E]),A=(0,G.useCallback)(()=>{b(e=>({...e,start:Math.max(0,e.start-Ra)}))},[]);(0,G.useLayoutEffect)(()=>{T.current&&O()}),(0,G.useEffect)(()=>{let e=p.current;if(!e||typeof ResizeObserver>`u`)return;let t=new ResizeObserver(()=>{T.current&&O()});return t.observe(e),()=>t.disconnect()},[O]);let j=(0,G.useMemo)(()=>Pa(g),[g]),M=S>0?g.slice(S):g,N=Ma(Ia(M)),P=M.at(-1),te=!!(P?.role===`assistant`||P?.tool),ne=e=>e.kind===`tools`?(0,K.jsx)(Ni,{tools:e.tools},e.key):e.kind===`plan`?j.get(e.callId)?.length?(0,K.jsx)(Fi,{plan:j.get(e.callId)},e.key):null:(0,K.jsx)(ja,{entry:e.entry,onAction:s,authAction:c},e.key);return(0,K.jsxs)(`div`,{className:`chat-wrap`,children:[(0,K.jsx)(`div`,{className:`chat`,ref:f,onScroll:ee,children:(0,K.jsxs)(`div`,{className:`chat-inner`,ref:p,children:[l,_===0&&!l&&!r&&i&&(0,K.jsxs)(`div`,{className:`chat-loading`,role:`status`,"aria-live":`polite`,children:[(0,K.jsx)(ft,{size:`lg`}),(0,K.jsx)(`p`,{children:`Fetching transcript…`})]}),_===0&&!l&&r&&d&&(0,K.jsx)(`div`,{className:`chat-greeting`,children:(0,K.jsx)(`h2`,{children:d})}),_===0&&!l&&!r&&!i&&(0,K.jsxs)(`div`,{className:`chat-empty`,children:[(0,K.jsx)(`p`,{className:`chat-empty-title`,children:`No messages yet`}),(0,K.jsx)(`p`,{className:`chat-empty-sub`,children:`This session has no transcript so far. Send a message below to continue, or open the terminal if it is running there.`})]}),S>0&&(0,K.jsxs)(`button`,{className:`load-earlier`,onClick:A,children:[`↑ Show earlier messages (`,S,` more)`]}),N.map(e=>e.kind===`standalone`?(0,K.jsx)(`div`,{className:`transcript-standalone`,children:ne(e.item)},e.key):(0,K.jsxs)(`div`,{className:`transcript-turn`,children:[e.user?.kind===`entry`&&(0,K.jsx)(ja,{entry:e.user.entry,onAction:s}),e.response.length>0&&(0,K.jsx)(`div`,{className:`turn-response-body`,children:e.response.map(ne)})]},e.key)),t&&!te&&(0,K.jsxs)(`div`,{className:`working-row`,children:[(0,K.jsxs)(`span`,{className:`working-dots`,"aria-hidden":!0,children:[(0,K.jsx)(`i`,{}),(0,K.jsx)(`i`,{}),(0,K.jsx)(`i`,{})]}),(0,K.jsx)(`span`,{className:`working-label`,children:n||`working…`})]}),u]})}),!m&&_>0&&(0,K.jsx)(`button`,{className:`jump-latest`,onClick:k,"aria-label":`Jump to latest`,children:`↓ Latest`})]})}var Ba=48;function Va({images:e,index:t,onClose:n}){let[r,i]=(0,G.useState)(t),a=e.length;(0,G.useEffect)(()=>i(t),[t]);let o=(0,G.useCallback)(e=>i(t=>a?(t+e+a)%a:0),[a]);nt(n),(0,G.useEffect)(()=>{let e=e=>{e.key===`ArrowLeft`?(e.preventDefault(),o(-1)):e.key===`ArrowRight`&&(e.preventDefault(),o(1))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[o]);let s=(0,G.useRef)(null),c=e=>{let t=e.touches[0];t&&(s.current={x:t.clientX,y:t.clientY})},l=e=>{let t=s.current;s.current=null;let n=e.changedTouches[0];if(!t||!n)return;let r=n.clientX-t.x,i=n.clientY-t.y;Math.abs(r)<Ba||Math.abs(r)<=Math.abs(i)||o(r<0?1:-1)},u=e[r],d=_a(u);return(0,Qn.createPortal)((0,K.jsxs)(`div`,{className:`image-viewer`,role:`dialog`,"aria-modal":`true`,"aria-label":`Image ${r+1} of ${a}`,onClick:n,onTouchStart:c,onTouchEnd:l,children:[d?(0,K.jsx)(`img`,{className:`image-viewer-img`,src:d,alt:u?.name??`Image`,onClick:e=>e.stopPropagation()}):(0,K.jsx)(ft,{size:`lg`,tone:`inverse`}),a>1&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`button`,{type:`button`,className:`image-viewer-nav prev`,onClick:e=>{e.stopPropagation(),o(-1)},"aria-label":`Previous image`,children:`‹`}),(0,K.jsx)(`button`,{type:`button`,className:`image-viewer-nav next`,onClick:e=>{e.stopPropagation(),o(1)},"aria-label":`Next image`,children:`›`}),(0,K.jsxs)(`div`,{className:`image-viewer-count`,onClick:e=>e.stopPropagation(),children:[r+1,` / `,a]})]}),(0,K.jsx)(`button`,{type:`button`,className:`image-viewer-close`,onClick:n,"aria-label":`Close`,children:`×`})]}),document.body)}var Ha=(0,G.lazy)(()=>C(()=>import(`./Terminal-dczoFzd6.js`).then(e=>({default:e.TerminalOverlay})),__vite__mapDeps([22,1,23,3,4,24,25,26,27,28]))),Ua={terminal:`Terminal · starts when opened`,static:`Snapshot · refreshed after each turn`,service:`Live server`,managed:`Live server · run by Bivy`,display:`Desktop app · own display`},Wa={ready:`When ready`,every:`Every change`,off:`Off`};function Ga(e,t){return`Notes from people reviewing "${e}":\n`+t.map(e=>`- "${e.note}" on ${e.selector}${e.text?` ("${e.text}")`:``}, page ${e.path}, viewport ${e.viewport.width}×${e.viewport.height}${e.context?`\n${e.context}`:``}${e.shot?`
8
+ `).trim(),o=e.actions?.length?e.actions:n&&M(e.text)?[n,`retry-auth`]:void 0;return(0,K.jsxs)(`div`,{className:`card`,"data-tone":`danger`,role:`alert`,children:[(0,K.jsx)(`strong`,{children:r}),(0,K.jsx)(Ca,{actions:o,onAction:t}),a&&(0,K.jsxs)(`details`,{className:`settings-disclosure`,children:[(0,K.jsx)(`summary`,{className:`settings-disclosure-summary`,children:`Details`}),(0,K.jsx)(`pre`,{className:`settings-disclosure-body`,children:a})]})]})}if(e.role===`user`){let t=Pt(e.text);if(t)return(0,K.jsx)(Ri,{seed:t,text:e.text});let n=!!e.attachments&&e.attachments.length>0,r=n?E(e.text):e.text;return(0,K.jsxs)(`div`,{className:`msg user`,id:n?`msg-${e.id}`:void 0,children:[n&&(0,K.jsx)(ba,{attachments:e.attachments}),r]})}if(e.streaming)return(0,K.jsx)(`div`,{className:`assistant-row`,children:(0,K.jsx)(`div`,{ref:i,className:`msg assistant streaming streaming-text`,children:e.text})});let a=!!e.attachments&&e.attachments.length>0,o=e.attachments?.length===1&&e.attachments[0]?.description===e.text;return(0,K.jsxs)(`div`,{className:`assistant-row`,id:a||e.app||e.review||e.pin||e.suggestion||e.notice||e.delegation?`msg-${e.id}`:void 0,children:[e.app&&(0,K.jsx)(Zr,{app:e.app}),e.review&&(0,K.jsx)(ni,{review:e.review}),e.pin&&(0,K.jsx)(ii,{pin:e.pin}),e.suggestion&&(0,K.jsx)(gi,{suggestion:e.suggestion}),e.notice&&(0,K.jsx)(_i,{notice:e.notice}),e.delegation&&(0,K.jsx)(Ci,{delegation:e.delegation}),a&&(0,K.jsx)(ba,{attachments:e.attachments}),(e.text&&!o||!a&&!e.app&&!e.review&&!e.pin&&!e.suggestion&&!e.notice&&!e.delegation)&&(0,K.jsx)(`div`,{ref:i,className:`msg assistant`,dangerouslySetInnerHTML:{__html:r}}),e.text&&!o&&(0,K.jsxs)(`div`,{className:`msg-actions`,children:[(0,K.jsx)(Ea,{text:e.text}),da()&&(0,K.jsx)(Aa,{text:e.text})]})]})});function Ma(e){let t=[],n=null;for(let r of e){if(r.kind===`entry`&&r.entry.role===`user`){n={kind:`turn`,key:`turn-${r.key}`,user:r,response:[]},t.push(n);continue}if(r.kind===`entry`&&(r.entry.role===`system`||r.entry.role===`error`)){t.push({kind:`standalone`,key:`standalone-${r.key}`,item:r}),n=null;continue}n||(n={kind:`turn`,key:`turn-${r.key}`,response:[]},t.push(n)),n.response.push(r)}for(let e of t)e.kind===`turn`&&(e.response=Fa(e.response,e.key));return t}function Na(e){return e.detail?.kind===`plan`&&!e.parentToolUseId&&Bt(e.input)!==void 0}function Pa(e){let t=new Map,n=[];for(let r of e)r.tool&&Na(r.tool)&&(n=Vt(n,Bt(r.tool.input)),t.set(r.tool.callId,n));return t}function Fa(e,t){let n=-1;if(e.forEach((e,t)=>{e.kind===`plan`&&(n=t)}),n<0)return e;let r=[];return e.forEach((e,i)=>{if(e.kind===`plan`&&i!==n)return;let a=r[r.length-1];if(e.kind===`tools`&&a?.kind===`tools`){r[r.length-1]={...a,tools:[...a.tools,...e.tools]};return}r.push(e.kind===`plan`?{...e,key:`plan-${t}`}:e)}),r}function Ia(e){let t=[],n=[],r=``,i=()=>{n.length&&t.push({kind:`tools`,key:r,tools:n}),n=[]};for(let a of e)a.tool&&Na(a.tool)?(i(),t.push({kind:`plan`,key:`plan-${a.tool.callId}`,callId:a.tool.callId})):a.tool?(n.length||(r=`tools-${a.tool.callId||a.id}`),n.push(a.tool)):(i(),t.push({kind:`entry`,key:a.id,entry:a}));return i(),t}var La=20,Ra=40;function za({entries:e,working:t,workingLabel:n,draftRoute:r,opening:i,sessionKey:a,focusView:o,onAction:s,authAction:c,header:l,footer:u,greeting:d}){let f=(0,G.useRef)(null),p=(0,G.useRef)(null),[m,h]=(0,G.useState)(!0),g=(0,G.useMemo)(()=>o?zi(e,t):e,[e,o,t]),_=g.length,v=(0,G.useRef)(new Map),[y,b]=(0,G.useState)(()=>({sessionKey:a,focusView:o,initialized:_>0,start:Math.max(0,_-La)})),x=Math.max(0,_-La),S=Math.min(y.start,x);if(y.sessionKey!==a||y.focusView!==o||!y.initialized&&_>0){let e=v.current.get(a??`new`);S=Math.max(0,_-Math.max(La,e?.limit??La)),b({sessionKey:a,focusView:o,initialized:_>0,start:S})}else(S!==y.start||y.initialized&&_===0)&&b({...y,initialized:_>0,start:S});let C=Wi(a,g);C!==null&&C<S&&(S=C,b({sessionKey:a,focusView:o,initialized:!0,start:S}));let w=(0,G.useRef)(_-S);(0,G.useLayoutEffect)(()=>{w.current=_-S},[_,S]);let T=(0,G.useRef)(!0),E=(0,G.useCallback)(e=>{T.current=e,h(e)},[]),D=(0,G.useCallback)(()=>{let e=f.current;return!e||e.scrollHeight-e.scrollTop-e.clientHeight<80},[]),O=(0,G.useCallback)(()=>{let e=f.current;e&&(e.scrollTop=e.scrollHeight)},[]),k=(0,G.useCallback)(()=>{let e=f.current;e&&e.scrollTo({top:e.scrollHeight,behavior:`smooth`}),E(!0)},[E]);(0,G.useLayoutEffect)(()=>{let e=v.current.get(a??`new`);E(e?.pinned??!0);let t=requestAnimationFrame(()=>{let t=f.current;t&&(t.scrollTop=ma(t,e))});return()=>cancelAnimationFrame(t)},[a,E]),(0,G.useLayoutEffect)(()=>{let e=Wi(a,g);if(e===null||e<S)return;let t=`msg-${g[e].id}`;Gi(),E(!1),requestAnimationFrame(()=>{let e=document.getElementById(t);e&&(e.scrollIntoView({block:`center`}),e.classList.add(`is-jump-target`),setTimeout(()=>e.classList.remove(`is-jump-target`),2400))})},[a,g,S,E]);let ee=(0,G.useCallback)(()=>{let e=f.current;if(!e)return;let t=D();E(t),v.current.set(a??`new`,pa(e,t,w.current))},[D,a,E]),A=(0,G.useCallback)(()=>{b(e=>({...e,start:Math.max(0,e.start-Ra)}))},[]);(0,G.useLayoutEffect)(()=>{T.current&&O()}),(0,G.useEffect)(()=>{let e=p.current;if(!e||typeof ResizeObserver>`u`)return;let t=new ResizeObserver(()=>{T.current&&O()});return t.observe(e),()=>t.disconnect()},[O]);let j=(0,G.useMemo)(()=>Pa(g),[g]),M=S>0?g.slice(S):g,N=Ma(Ia(M)),P=M.at(-1),te=!!(P?.role===`assistant`||P?.tool),ne=e=>e.kind===`tools`?(0,K.jsx)(Ni,{tools:e.tools},e.key):e.kind===`plan`?j.get(e.callId)?.length?(0,K.jsx)(Fi,{plan:j.get(e.callId)},e.key):null:(0,K.jsx)(ja,{entry:e.entry,onAction:s,authAction:c},e.key);return(0,K.jsxs)(`div`,{className:`chat-wrap`,children:[(0,K.jsx)(`div`,{className:`chat`,ref:f,onScroll:ee,children:(0,K.jsxs)(`div`,{className:`chat-inner`,ref:p,children:[l,_===0&&!l&&!r&&i&&(0,K.jsxs)(`div`,{className:`chat-loading`,role:`status`,"aria-live":`polite`,children:[(0,K.jsx)(ft,{size:`lg`}),(0,K.jsx)(`p`,{children:`Fetching transcript…`})]}),_===0&&!l&&r&&d&&(0,K.jsx)(`div`,{className:`chat-greeting`,children:(0,K.jsx)(`h2`,{children:d})}),_===0&&!l&&!r&&!i&&(0,K.jsxs)(`div`,{className:`chat-empty`,children:[(0,K.jsx)(`p`,{className:`chat-empty-title`,children:`No messages yet`}),(0,K.jsx)(`p`,{className:`chat-empty-sub`,children:`This session has no transcript so far. Send a message below to continue, or open the terminal if it is running there.`})]}),S>0&&(0,K.jsxs)(`button`,{className:`load-earlier`,onClick:A,children:[`↑ Show earlier messages (`,S,` more)`]}),N.map(e=>e.kind===`standalone`?(0,K.jsx)(`div`,{className:`transcript-standalone`,children:ne(e.item)},e.key):(0,K.jsxs)(`div`,{className:`transcript-turn`,children:[e.user?.kind===`entry`&&(0,K.jsx)(ja,{entry:e.user.entry,onAction:s}),e.response.length>0&&(0,K.jsx)(`div`,{className:`turn-response-body`,children:e.response.map(ne)})]},e.key)),t&&!te&&(0,K.jsxs)(`div`,{className:`working-row`,children:[(0,K.jsxs)(`span`,{className:`working-dots`,"aria-hidden":!0,children:[(0,K.jsx)(`i`,{}),(0,K.jsx)(`i`,{}),(0,K.jsx)(`i`,{})]}),(0,K.jsx)(`span`,{className:`working-label`,children:n||`working…`})]}),u]})}),!m&&_>0&&(0,K.jsx)(`button`,{className:`jump-latest`,onClick:k,"aria-label":`Jump to latest`,children:`↓ Latest`})]})}var Ba=48;function Va({images:e,index:t,onClose:n}){let[r,i]=(0,G.useState)(t),a=e.length;(0,G.useEffect)(()=>i(t),[t]);let o=(0,G.useCallback)(e=>i(t=>a?(t+e+a)%a:0),[a]);nt(n),(0,G.useEffect)(()=>{let e=e=>{e.key===`ArrowLeft`?(e.preventDefault(),o(-1)):e.key===`ArrowRight`&&(e.preventDefault(),o(1))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[o]);let s=(0,G.useRef)(null),c=e=>{let t=e.touches[0];t&&(s.current={x:t.clientX,y:t.clientY})},l=e=>{let t=s.current;s.current=null;let n=e.changedTouches[0];if(!t||!n)return;let r=n.clientX-t.x,i=n.clientY-t.y;Math.abs(r)<Ba||Math.abs(r)<=Math.abs(i)||o(r<0?1:-1)},u=e[r],d=_a(u);return(0,Qn.createPortal)((0,K.jsxs)(`div`,{className:`image-viewer`,role:`dialog`,"aria-modal":`true`,"aria-label":`Image ${r+1} of ${a}`,onClick:n,onTouchStart:c,onTouchEnd:l,children:[d?(0,K.jsx)(`img`,{className:`image-viewer-img`,src:d,alt:u?.name??`Image`,onClick:e=>e.stopPropagation()}):(0,K.jsx)(ft,{size:`lg`,tone:`inverse`}),a>1&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`button`,{type:`button`,className:`image-viewer-nav prev`,onClick:e=>{e.stopPropagation(),o(-1)},"aria-label":`Previous image`,children:`‹`}),(0,K.jsx)(`button`,{type:`button`,className:`image-viewer-nav next`,onClick:e=>{e.stopPropagation(),o(1)},"aria-label":`Next image`,children:`›`}),(0,K.jsxs)(`div`,{className:`image-viewer-count`,onClick:e=>e.stopPropagation(),children:[r+1,` / `,a]})]}),(0,K.jsx)(`button`,{type:`button`,className:`image-viewer-close`,onClick:n,"aria-label":`Close`,children:`×`})]}),document.body)}var Ha=(0,G.lazy)(()=>C(()=>import(`./Terminal-CcT_BiQ-.js`).then(e=>({default:e.TerminalOverlay})),__vite__mapDeps([22,1,23,3,4,24,25,26,27,28]))),Ua={terminal:`Terminal · starts when opened`,static:`Snapshot · refreshed after each turn`,service:`Live server`,managed:`Live server · run by Bivy`,display:`Desktop app · own display`},Wa={ready:`When ready`,every:`Every change`,off:`Off`};function Ga(e,t){return`Notes from people reviewing "${e}":\n`+t.map(e=>`- "${e.note}" on ${e.selector}${e.text?` ("${e.text}")`:``}, page ${e.path}, viewport ${e.viewport.width}×${e.viewport.height}${e.context?`\n${e.context}`:``}${e.shot?`
9
9
  Attached picture is approximate: retaken on the machine, not the reviewer’s browser.`:``}`).join(`
10
10
  `)}function Ka({sessionId:e,appId:t,nodeId:n,openView:r,onOpenInChat:i,onClose:a}){let{connection:o,activeSession:s}=je(),[c,l]=(0,G.useState)(null),f=!!n&&!R.direct&&n!==o.currentNodeId,p=f?n:o.currentNodeId,[m,h]=(0,G.useState)(null),[g,_]=(0,G.useState)([]),[v,y]=(0,G.useState)(``),[b,x]=(0,G.useState)(!1),[S,C]=(0,G.useState)(0),[w,T]=(0,G.useState)(null),[E,D]=(0,G.useState)(null),[O,k]=(0,G.useState)(!1),[ee,A]=(0,G.useState)(null),[j,M]=(0,G.useState)(null),N=(0,G.useRef)(0),P=f||o.status===`online`;(0,G.useEffect)(()=>{T(null)},[e,o.currentNodeId]),(0,G.useEffect)(()=>{let r=++N.current;return x(!0),y(``),h(null),A(null),M(null),_([]),t||R.appCommand(`apps.offers`,e,{},n).then(e=>{N.current===r&&_(e.offers??[])},()=>{}),R.appCommand(`apps.list`,e,{},n).then(e=>{N.current===r&&h(e)}).catch(e=>{N.current===r&&y(e instanceof Error?e.message:`Could not load apps.`)}).finally(()=>{N.current===r&&x(!1)}),()=>{N.current=r+1}},[e,p,P,S,n,t]),(0,G.useEffect)(()=>R.onAppsChanged(t=>{if(t!==e)return;let r=N.current;R.appCommand(`apps.list`,e,{},n).then(e=>{N.current===r&&h(e)},()=>{})}),[e,n]),(0,G.useEffect)(()=>{let t=m?.apps.flatMap(e=>e.views.flatMap(e=>e.kind===`web`?(e.notes??[]).map(e=>e.at):[]))??[];t.length&&Wr(e,Math.max(...t))},[m,e]),(0,G.useEffect)(()=>{if(!ee)return;let e=setTimeout(()=>A(null),55e3);return()=>clearTimeout(e)},[ee]);let te=async(t,r=`peek`,i)=>{let o=N.current;x(!0),y(``),A(null),M(null);let s=(`offer`in t||t.view.kind===`web`)&&(r===`tab`||Rr()),c=s?window.open(`about:blank`,`_blank`):null;try{if(c){c.opener=null,c.document.title=`Bivy · Opening app`;let e=c.document.createElement(`p`);e.setAttribute(`role`,`status`),e.textContent=`Opening app…`,c.document.body?.append(e)}let r,l;if(`offer`in t){if(r=(await R.appCommand(`apps.adopt`,e,{port:t.offer.port},n)).app,l=r.views[0],N.current===o){let e=r;h(t=>t&&{...t,apps:[...t.apps,e]}),_(e=>e.filter(e=>e.port!==t.offer.port))}}else({app:r,view:l}=t);let d=await R.appCommand(`apps.open`,e,{appId:r.id,viewId:l.id,returnTo:`${u()}/sessions/${encodeURIComponent(e)}`,...i?{path:i}:{}},n);if(N.current!==o){c?.close();return}if(d.kind===`terminal`)T(d.termId);else if(d.kind===`web`){let e=ne(d.url);s?c&&!c.closed?(c.location.replace(e),a()):A({viewId:l.id,url:e}):(k(!1),D({url:e,app:r,view:l}))}else throw Error(`This app view is not supported by this client.`)}catch(e){c?.close(),N.current===o&&y(e instanceof Error?e.message:`Could not open view.`)}finally{N.current===o&&x(!1)}},ne=e=>{let t=new URL(e);if(t.protocol!==`https:`||t.origin===location.origin||t.username||t.password)throw Error(`Machine returned an unsafe preview URL.`);return t.href},re=(0,G.useRef)(!1);(0,G.useEffect)(()=>{if(!r||re.current||!m)return;let e=m.apps.find(e=>e.views.some(e=>e.id===r.viewId)),t=e?.views.find(e=>e.id===r.viewId);e&&t&&(re.current=!0,te({app:e,view:t},`peek`,r.path))},[r,m]);let ie=async(t,r)=>{y(``);try{await R.appCommand(`apps.reviewMode`,e,{appId:t.id,mode:r},n),h(e=>e&&{...e,apps:e.apps.map(e=>e.id===t.id?{...e,reviewMode:r}:e)})}catch(e){y(e instanceof Error?e.message:`Could not change preview cards.`)}},ae=async(t,r)=>{let i=N.current;x(!0),y(``);try{let a=await R.appCommand(`apps.logs`,e,{appId:t.id,viewId:r.id},n);N.current===i&&a.kind===`terminal`&&T(a.termId)}catch(e){N.current===i&&y(e instanceof Error?e.message:`Could not open the server logs.`)}finally{N.current===i&&x(!1)}},oe=async t=>{x(!0),y(``);try{let n=t.notes??[],r=Ga(t.name,n),i=await $r(n);if(f||s.activeSessionId!==e||!R.prefillComposer(r,i)){if(i.length)throw Error(`Open this session’s chat before adding reviewer pictures.`);d(localStorage,e,r)}a()}catch(e){y(e instanceof Error?e.message:`Could not add notes.`)}finally{x(!1)}},se=async(t,r)=>{y(``);try{await R.appCommand(`apps.agentNotes`,e,{appId:t.id,enabled:r},n),h(e=>e&&{...e,apps:e.apps.map(e=>e.id===t.id?{...e,agentNotes:r||void 0}:e)})}catch(e){y(e instanceof Error?e.message:`Could not change who can read notes.`)}},ce=async(t,r)=>{let i=N.current;x(!0),y(``);try{await R.appCommand(`apps.clearNotes`,e,{appId:t.id,viewId:r.id},n),N.current===i&&C(e=>e+1)}catch(e){N.current===i&&y(e instanceof Error?e.message:`Could not clear notes.`)}finally{N.current===i&&x(!1)}},le=async t=>{let r=N.current;x(!0),y(``),M(null);try{await R.appCommand(`apps.remove`,e,{appId:t.id},n),N.current===r&&C(e=>e+1)}catch(e){N.current===r&&y(e instanceof Error?e.message:`Could not remove app.`)}finally{N.current===r&&x(!1)}};if(E)return(0,K.jsx)(Br,{url:E.url,name:E.app.name,sessionId:e,appId:E.app.id,viewId:E.view.id,onClose:a,access:(0,K.jsx)(Pr,{sessionId:e,appId:E.app.id,viewId:E.view.id,name:E.view.name,nodeId:n,disabled:!P||!m?.previewAvailable,onRevoked:()=>k(!0)}),revoked:O,onManage:()=>D(null),onOpenInTab:()=>{let{app:e,view:t}=E;D(null),te({app:e,view:t},`tab`)}});if(w)return(0,K.jsx)(G.Suspense,{fallback:(0,K.jsx)(B,{title:`App terminal`,onClose:()=>T(null),children:(0,K.jsx)(`p`,{role:`status`,children:`Loading terminal…`})}),children:(0,K.jsx)(Ha,{sessionId:e,attachTermId:w,attachOnly:!0,onClose:()=>T(null)})});let ue=!!m?.previewAvailable,de=m?.apps.filter(e=>!t||e.id===t)??[];return(0,K.jsxs)(B,{title:`Apps`,ariaLabel:`Session apps`,onClose:a,autoFocusSearch:!1,size:`large`,headExtra:(0,K.jsx)(`button`,{className:`btn ghost icon`,onClick:()=>C(e=>e+1),disabled:b||!P,"aria-label":`Refresh`,title:`Refresh`,children:b&&m?(0,K.jsx)(ft,{size:`xs`}):(0,K.jsx)(qe,{size:18})}),children:[(0,K.jsxs)(`div`,{className:`apps-sheet`,children:[b&&!m&&(0,K.jsxs)(`div`,{className:`apps-state`,role:`status`,children:[(0,K.jsx)(ft,{size:`sm`}),(0,K.jsx)(`span`,{children:`Loading apps…`})]}),b&&m&&(0,K.jsx)(`span`,{className:`sr-only`,role:`status`,children:`Preparing…`}),v&&(0,K.jsx)(`div`,{className:`banner inline`,"data-tone":`danger`,role:`alert`,children:v}),m&&!ue&&(0,K.jsx)(`div`,{className:`banner inline`,"data-tone":`warn`,role:`status`,children:`Bivy’s preview service is unavailable. Try Refresh shortly. Terminal views still work.`}),m&&t&&!m.apps.some(e=>e.id===t)&&(0,K.jsx)(`div`,{className:`banner inline`,"data-tone":`neutral`,role:`status`,children:`This app is no longer available. Ask the agent to republish it; previews expire when the machine restarts.`}),m?.apps.length===0&&g.length===0&&(0,K.jsxs)(`div`,{className:`apps-empty`,children:[(0,K.jsx)(`span`,{className:`app-tile`,"aria-hidden":!0,children:(0,K.jsx)(lt,{size:20})}),(0,K.jsx)(`strong`,{children:`No apps yet`}),(0,K.jsxs)(`p`,{children:[`When the agent starts a web server in this session’s workspace, it shows up here. Agents can also publish views with `,(0,K.jsx)(`code`,{children:`bivy app publish`}),`.`]})]}),!t&&g.length>0&&(0,K.jsxs)(`section`,{className:`apps-group`,"aria-label":`Running in this workspace`,children:[(0,K.jsx)(`h3`,{className:`apps-group-title`,children:`Running in this workspace`}),g.map(e=>(0,K.jsxs)(`div`,{className:`apps-card`,children:[(0,K.jsx)(Xr,{tile:(0,K.jsx)(`span`,{className:`app-tile-port`,children:e.port}),name:`Port ${e.port}`,meta:`Live server · not previewed yet`,action:(0,K.jsx)(`button`,{className:`btn sm primary`,disabled:b||!P||!ue,onClick:()=>void te({offer:e}),"aria-label":`Preview port ${e.port}`,children:`Preview`})}),(0,K.jsx)(`code`,{className:`apps-cmd`,children:e.command})]},e.port))]}),de.map(t=>(0,K.jsxs)(`section`,{className:`apps-card`,"aria-label":t.name,children:[(0,K.jsx)(Xr,{tile:Yr(t.name),name:t.name,meta:`${t.views.length===1?`1 view`:`${t.views.length} views`}${t.createdAt?` · published ${Wn(t.createdAt)} ago`:``}`,action:(0,K.jsx)(Cr,{label:`More actions for ${t.name}`,items:[{heading:`Preview cards in chat`},...[`ready`,`every`,`off`].map(e=>({label:Wa[e],checked:(t.reviewMode??`ready`)===e,disabled:b||!P,onSelect:()=>void ie(t,e)})),...t.views.some(e=>e.kind===`web`)?[{heading:`Reviewer notes`},{label:`Agents can read notes`,toggle:!0,checked:t.agentNotes===!0,disabled:b||!P,onSelect:()=>void se(t,t.agentNotes!==!0)}]:[],{label:`Remove app…`,danger:!0,disabled:b||!P,onSelect:()=>M({app:t}),separated:!0}]})}),t.views.map(r=>{let o=r.kind===`terminal`?`terminal`:r.source===`service`&&r.managed?`managed`:r.source,s=r.kind===`terminal`?Ge:r.source===`display`?Je:lt;return(0,K.jsxs)(`article`,{className:`apps-view`,"aria-label":r.name,children:[(0,K.jsx)(Xr,{small:!0,tile:(0,K.jsx)(s,{size:18}),name:r.name,meta:Ua[o],action:ee?.viewId===r.id?(0,K.jsx)(`a`,{className:`btn sm primary`,href:ee.url,target:`_blank`,rel:`noopener noreferrer`,onClick:()=>setTimeout(a,0),children:`Open preview ↗`}):r.kind===`terminal`&&f?(0,K.jsx)(`button`,{className:`btn sm`,onClick:()=>{a(),i?.()},children:`Open in chat`}):(0,K.jsx)(`button`,{className:`btn sm${r.kind===`web`?` primary`:``}`,disabled:b||!P||r.kind===`web`&&!ue,onClick:()=>r.kind===`terminal`?M({app:t,view:r}):void te({app:t,view:r}),children:r.kind===`terminal`?`Open terminal`:`Open preview`})}),r.kind===`terminal`&&(0,K.jsx)(`code`,{className:`apps-cmd`,children:qa(r.command,r.args)}),r.kind===`web`&&(0,K.jsxs)(`div`,{className:`apps-view-tools`,children:[(0,K.jsx)(Pr,{sessionId:e,appId:t.id,viewId:r.id,name:r.name,nodeId:n,address:r.address,disabled:b||!P||!ue,onRevoked:()=>A(null)}),r.managed&&!f&&(0,K.jsxs)(`button`,{className:`btn sm ghost`,disabled:b||!P,onClick:()=>void ae(t,r),"aria-label":`${r.source===`display`?`App`:`Server`} logs for ${r.name}`,children:[(0,K.jsx)(ct,{size:15}),`Logs`]})]}),r.kind===`web`&&r.notes?.length?(0,K.jsxs)(`div`,{className:`apps-notes`,role:`group`,"aria-label":`Reviewer notes on ${r.name}`,children:[(0,K.jsxs)(`div`,{className:`apps-notes-head`,children:[(0,K.jsx)(`span`,{children:`Reviewer notes`}),(0,K.jsx)(`span`,{className:`apps-count`,"aria-label":`${r.notes.length} from people with a shared link`,children:r.notes.length})]}),(0,K.jsx)(`ul`,{children:r.notes.map(e=>(0,K.jsxs)(`li`,{className:`apps-note`,children:[(0,K.jsxs)(`span`,{className:`apps-note-text`,children:[`“`,e.note,`”`]}),` `,(0,K.jsxs)(`span`,{className:`app-row-meta`,children:[e.text?`on “${e.text}”`:e.selector,` · `,e.path,` · `,e.viewport.width,`×`,e.viewport.height]}),e.shot&&(0,K.jsx)(`button`,{className:`btn sm ghost`,onClick:()=>l(e),children:`View approximate picture`})]},e.id))}),(0,K.jsxs)(`div`,{className:`apps-notes-actions`,children:[(0,K.jsx)(`button`,{className:`btn sm`,disabled:b||!P,onClick:()=>void oe(r),children:`Add to message`}),(0,K.jsx)(`button`,{className:`btn sm ghost`,disabled:b||!P,onClick:()=>void ce(t,r),children:`Clear`})]})]}):null]},r.id)})]},t.id)),(de.length>0||g.length>0)&&(0,K.jsx)(`p`,{className:`apps-foot`,children:`Apps stay available while this machine runs. Removing an app keeps your project files.`})]}),c&&(0,K.jsx)(Va,{images:Qr([c]),index:0,onClose:()=>l(null)}),j&&(0,K.jsx)(Ye,{title:j.view?`Open ${j.view.name}?`:`Remove ${j.app.name}?`,message:j.view?.kind===`terminal`?`This starts or reconnects to “${qa(j.view.command,j.view.args)}”. It runs with the machine user’s permissions, not in a new sandbox. Only run code you trust.`:`Preview access will be revoked and this app’s terminals stopped. Project files and externally started servers are not removed.`,confirmLabel:j.view?`Open terminal`:`Remove app`,danger:!j.view,onCancel:()=>M(null),onConfirm:()=>{j.view?te({app:j.app,view:j.view}):le(j.app)}})]})}function qa(e,t=[]){return[e,...t].map(e=>/^[\w@%+=:,./-]+$/.test(e)?e:JSON.stringify(e)).join(` `)}function Ja(e){let t={name:``,path:``,type:`dir`,children:[]};for(let n of e){let e=n.path.split(`/`).filter(Boolean),r=t;for(let t=0;t<e.length;t++){let i=t===e.length-1,a=e[t],o=e.slice(0,t+1).join(`/`);r.children??=[];let s=r.children.find(e=>e.name===a&&e.type===(i?`file`:`dir`));s||(s=i?{name:a,path:o,type:`file`,file:n}:{name:a,path:o,type:`dir`,children:[]},r.children.push(s)),r=s}}let n=e=>{e.sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`dir`?-1:1);for(let t of e)t.children&&=r(n(t.children));return e},r=e=>e.map(e=>{let t=e;for(;t.type===`dir`&&t.children?.length===1&&t.children[0].type===`dir`;){let e=t.children[0];t={...e,name:`${t.name}/${e.name}`}}return t});return r(n(t.children??[]))}function Ya(e){return e<1024?`${e} B`:e<1048576?`${Math.round(e/1024)} KB`:`${(e/1024/1024).toFixed(1)} MB`}function Xa(e,t){try{let n=atob(e),r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e);return URL.createObjectURL(new Blob([r],{type:t||`application/octet-stream`}))}catch{return null}}function Za(e){return{kind:e.kind,name:e.name,size:e.size,mimeType:e.mimeType,hash:e.hash,createdAt:e.createdAt,artifact:e.artifact}}function Qa(e){let[t,n]=(0,G.useState)({status:`loading`});return(0,G.useEffect)(()=>{let t=!1,r=null;return n({status:`loading`}),R.fetchAttachment(e.hash,e.createdAt).then(i=>{if(t)return;let a=i&&Xa(i.data,i.mimeType||e.mimeType);a?(r=a,n({status:`ready`,url:a})):n({status:`unavailable`})}),()=>{t=!0,r&&URL.revokeObjectURL(r)}},[e.hash,e.mimeType,e.createdAt]),t}async function $a(e){let t=await R.fetchAttachment(e.hash,2**53-1),n=t&&Xa(t.data,t.mimeType||e.mimeType);if(!n)return!1;let r=document.createElement(`a`);return r.href=n,r.download=e.name,r.click(),URL.revokeObjectURL(n),!0}function eo({artifact:e,onOpen:t}){let n=Qa(e);return n.status===`ready`?(0,K.jsx)(`button`,{type:`button`,className:`artifact-thumb-button`,onClick:t,"aria-label":`View ${e.name}`,children:(0,K.jsx)(`img`,{className:`artifact-thumb`,src:n.url,alt:``})}):(0,K.jsx)(`span`,{className:`artifact-thumb artifact-thumb-${n.status}`,"aria-hidden":!0,children:n.status===`unavailable`?`⚠`:``})}function to({artifact:e,onJump:t,onOpenImage:n}){let[r,i]=(0,G.useState)(!1),[a,o]=(0,G.useState)(!1),s=async()=>{i(!0),o(!1);let t=await $a(e);i(!1),t||o(!0)},c=[Ya(e.size),e.createdAt?bt(e.createdAt):null].filter(Boolean).join(` · `);return(0,K.jsxs)(`div`,{className:`artifact-row`,children:[e.kind===`image`&&n?(0,K.jsx)(eo,{artifact:e,onOpen:n}):(0,K.jsx)(`span`,{className:`artifact-thumb artifact-glyph`,"aria-hidden":!0,children:`📄`}),(0,K.jsxs)(`div`,{className:`artifact-main`,children:[(0,K.jsxs)(`div`,{className:`artifact-name-line`,children:[(0,K.jsx)(`span`,{className:`artifact-name`,title:e.name,children:e.name}),e.artifact&&(0,K.jsx)(z,{tone:`accent`,variant:`solid`,upper:!0,children:`Artifact`})]}),(0,K.jsx)(`div`,{className:`artifact-meta`,children:c}),e.caption&&(0,K.jsx)(`div`,{className:`artifact-caption`,children:e.caption.split(/\r?\n/,1)[0]}),a&&(0,K.jsx)(`div`,{className:`artifact-unavailable`,children:`Not available right now — the Machine may be offline, or this file was pruned.`})]}),(0,K.jsxs)(`div`,{className:`artifact-actions`,children:[(0,K.jsx)(`button`,{type:`button`,className:`btn sm`,onClick:()=>void s(),disabled:r,"aria-busy":r,children:r?`Downloading…`:`Download`}),(0,K.jsx)(`button`,{type:`button`,className:`btn sm ghost`,onClick:()=>t(e.entryId),children:`Jump to turn`})]})]})}function no({artifacts:e,onClose:t}){let n=(0,G.useMemo)(()=>e.filter(e=>e.kind===`image`),[e]),r=(0,G.useMemo)(()=>n.map(Za),[n]),[i,a]=(0,G.useState)(null),o=e=>{t(),requestAnimationFrame(()=>{document.getElementById(`msg-${e}`)?.scrollIntoView({behavior:`smooth`,block:`center`})})},s=e.filter(e=>e.kind===`file`),c=e.length>0?`${e.length} artifact${e.length===1?``:`s`}`:`Artifacts`;return(0,K.jsxs)(B,{title:c,onClose:t,autoFocusSearch:!1,children:[e.length===0&&(0,K.jsx)(`div`,{className:`changes-binary`,children:`No artifacts yet this session.`}),n.length>0&&(0,K.jsxs)(`div`,{className:`artifacts-group`,children:[(0,K.jsx)(`div`,{className:`artifacts-group-title`,children:`Images`}),n.map((e,t)=>(0,K.jsx)(to,{artifact:e,onJump:o,onOpenImage:()=>a(t)},e.id))]}),s.length>0&&(0,K.jsxs)(`div`,{className:`artifacts-group`,children:[(0,K.jsx)(`div`,{className:`artifacts-group-title`,children:`Files`}),s.map(e=>(0,K.jsx)(to,{artifact:e,onJump:o},e.id))]}),i!=null&&(0,K.jsx)(Va,{images:r,index:i,onClose:()=>a(null)})]})}var ro=`bivy.appIconBadge.enabled`,io=`bivy.notificationPreferences.snapshot`,ao=`bivy-notification-settings-change`,oo,so=null;function co(){window.dispatchEvent(new Event(ao))}function lo(){return localStorage.getItem(ro)!==`0`}function uo(e){localStorage.setItem(ro,e?`1`:`0`),co()}function fo(e){let t=t=>{(t.key===ro||t.key===io)&&e()};return window.addEventListener(ao,e),window.addEventListener(`storage`,t),()=>{window.removeEventListener(ao,e),window.removeEventListener(`storage`,t)}}function po(){let e=localStorage.getItem(io);if(e===oo)return so;if(oo=e,!e)return so=null,so;try{so=_e(JSON.parse(e))}catch{so=null}return so}function mo(e){localStorage.setItem(io,JSON.stringify(e)),co()}function ho(e){let t=e.activeSession.activeSessionId,n=e.sessionIndex.sessions.find(e=>e.sessionId===t);return t?n?.worktree||n?.workspace||e.activeSession.github.repo:e.draft.repo}function go(e,t,n,r){let i=r?`project:${r}`:n?.active||`default`;if(!n)return{preset:i};let a=n.presets??{},o=r?.split(/[/\\]/).filter(Boolean)??[],s=(r?.startsWith(`/`)?[r,o.at(-1),...o.filter(e=>e.includes(`__`)).map(e=>e.replace(`__`,`/`))]:[r]).filter(Boolean).map(t=>a[`project:${t}`]?.[e]).find(Boolean)||(n.active?a[n.active]?.[e]:void 0);return s?{preset:i,label:t.find(e=>e.label===s)?.label}:{preset:i,label:(t.find(t=>t.label===a.default?.[e])??t.find(e=>e.label==="default")??(t.length===1?t[0]:void 0))?.label}}function _o({state:e,model:t,onClose:n}){let[r,i]=(0,G.useState)(!1),[a,o]=(0,G.useState)(null),s=(0,G.useRef)(!0);(0,G.useEffect)(()=>(s.current=!0,()=>{s.current=!1}),[]);let c=String(t.provider||``),l=e.settings.credentialRecords.filter(e=>e.provider===c),u=e.settings.credentialPresets,d=ho(e),f=go(c,l,u,d),p=e.catalogs.providers.find(e=>e.id===c)?.name||c,m=`${t.label||t.id} account`;return(0,K.jsx)(B,{title:(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`button`,{type:`button`,className:`btn ghost icon`,onClick:n,"aria-label":`Back to models`,children:`‹`}),` `,m]}),ariaLabel:m,onClose:n,size:`large`,autoFocusSearch:!1,children:(0,K.jsxs)(`div`,{className:`picker-list`,children:[(0,K.jsxs)(`div`,{className:`settings-form`,children:[(0,K.jsx)(`p`,{className:`settings-hint`,children:d?`Applies to all ${p} models in ${d} on this machine.`:`Applies to all ${p} models using this machine’s active credential preset, including other sessions.`}),r&&(0,K.jsx)(`p`,{className:`muted`,role:`status`,children:`Switching account…`}),!u&&(0,K.jsx)(`p`,{className:`muted`,role:`status`,children:`Loading accounts…`}),a&&(0,K.jsx)(`p`,{className:`settings-error`,role:`alert`,children:a})]}),l.length===0&&(0,K.jsx)(`div`,{className:`picker-empty`,children:`No saved accounts available on this machine.`}),l.map(t=>(0,K.jsx)(V,{title:(0,K.jsxs)(K.Fragment,{children:[t.label,f.label===t.label&&(0,K.jsx)(`span`,{className:`sr-only`,children:` (selected)`})]}),meta:t.kind===`oauth`?`Subscription sign-in`:t.kind===`reference`?`Password-manager reference`:`API key`,active:f.label===t.label,disabled:r||!u||e.connection.status!==`online`,onClick:async()=>{i(!0),o(null);try{await R.setPresetMapping(f.preset,c,t.label),R.listModels(),s.current&&n()}catch(e){s.current&&o(e instanceof Error?e.message:String(e))}finally{s.current&&i(!1)}}},t.label))]})})}var vo=new Set([`claude-code-sdk`,`codex-approvals`,`grok`,`opencode`,`pi`]);function yo(e){return String(e.displayName||e.name||e.id||`Agent`)}function bo(e){return vo.has(e.id)}function xo(e,t){let n=t.trim().toLocaleLowerCase();return[...n?e.filter(e=>yo(e).toLocaleLowerCase().includes(n)):e].sort((e,t)=>yo(e).localeCompare(yo(t),void 0,{sensitivity:`base`}))}var So=yo,Co={off:`Fastest`,minimal:`Minimal`,low:`Light`,medium:`Default`,high:`Deep`,xhigh:`Deeper`,max:`Deepest`};function wo(e){let t=e.capabilities||{},n=e.authOwner;return ze({now:new Date().toISOString(),preview:!0,agentId:e.id,agentDisplayName:So(e),detectedVersion:e.testedVersion,versionSource:e.testedVersion?`tested-pin`:void 0,supportTier:e.supportTier,certification:e.certification,executionMode:e.executionMode,authOrigin:n===`bivy`?`bivy`:n===`agent`?`agent-native`:`unknown`,resumeAdvertised:t.resume===!0,resumeRefIsPath:t.sessionRefIsPath===!0,toolInterceptionEnforced:t.toolInterception===!0,mcpToolApprovalsOnly:t.mcpToolApprovals===!0,runtimeEnforcement:e.protectionLevel})}function To({state:e,onSetup:t}){let n=e.catalogs.githubConnect;(0,G.useEffect)(()=>{if(n.status!==`waiting`)return;let e=n.intervalMs&&n.intervalMs>0?n.intervalMs:5e3,t=setInterval(()=>R.githubConnectPoll(),e);return()=>clearInterval(t)},[n.status,n.intervalMs]),(0,G.useEffect)(()=>{n.status===`connected`&&R.listRepos()},[n.status]),(0,G.useEffect)(()=>()=>R.githubConnectReset(),[]);let r=n.status===`denied`?`Authorization was denied. Try again.`:n.status===`expired`?`That code expired before you authorized. Try again.`:n.status===`error`?n.error||`Couldn't connect. Try again.`:null;return(0,K.jsxs)(`div`,{className:`repo-connect`,children:[(0,K.jsx)(`p`,{className:`repo-connect-lead`,children:`Connect GitHub to list your repos.`}),n.status===`waiting`?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`p`,{className:`repo-connect-sub`,children:[`Open`,` `,(0,K.jsx)(`a`,{href:n.verificationUri||`https://github.com/login/device`,target:`_blank`,rel:`noopener`,children:(n.verificationUri||`github.com/login/device`).replace(/^https?:\/\//,``)}),` `,`and enter this code:`]}),(0,K.jsx)(`div`,{className:`repo-connect-code`,"aria-label":`Device code`,children:n.userCode||`…`}),(0,K.jsx)(`p`,{className:`repo-connect-waiting muted`,children:`Waiting for you to authorize on GitHub…`}),(0,K.jsx)(`button`,{type:`button`,className:`btn link`,onClick:()=>R.githubConnectReset(),children:`Cancel`})]}):n.status===`connected`?(0,K.jsx)(`p`,{className:`repo-connect-sub`,children:`Connected — loading your repos…`}):n.status===`unconfigured`?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`p`,{className:`repo-connect-sub`,children:`Already installed the GitHub App? Connect its key to this machine in GitHub settings. No reinstall needed.`}),(0,K.jsx)(`button`,{type:`button`,className:`btn primary block`,onClick:t,children:`Connect GitHub App to this machine`}),e.catalogs.reposReason===`gh-unauthed`&&(0,K.jsxs)(`p`,{className:`repo-connect-alt`,children:[`The GitHub CLI is installed but signed out — you can also run `,(0,K.jsx)(`code`,{children:`gh auth login`}),`.`]})]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`p`,{className:`repo-connect-sub`,children:`Connect an existing GitHub App to this machine, or set up a new App.`}),(0,K.jsx)(`button`,{type:`button`,className:`btn primary block`,onClick:t,children:`Connect GitHub App to this machine`}),(0,K.jsx)(`button`,{type:`button`,className:`btn link`,disabled:n.status===`starting`,onClick:()=>R.githubConnectStart(),children:n.status===`starting`?`Starting…`:`Use GitHub device login instead`}),r&&(0,K.jsx)(`p`,{className:`repo-connect-alt`,children:r}),e.catalogs.reposReason===`gh-unauthed`&&(0,K.jsxs)(`p`,{className:`repo-connect-alt`,children:[`The GitHub CLI is installed but signed out — you can also run `,(0,K.jsx)(`code`,{children:`gh auth login`}),`.`]})]}),(0,K.jsxs)(`p`,{className:`repo-connect-note muted`,children:[`You don't need a repo to start — pick `,(0,K.jsx)(`strong`,{children:`Default workspace`}),` above to work in the machine's default workspace.`]})]})}function Eo({error:e}){let[t,n]=(0,G.useState)(null),[r,i]=(0,G.useState)(!1),[a,o]=(0,G.useState)(null),[s,c]=(0,G.useState)(!1),[l,u]=(0,G.useState)(``),[d,f]=(0,G.useState)(``),[p,m]=(0,G.useState)(``);(0,G.useEffect)(()=>{R.centralGithubApp().then(n).catch(e=>o(String(e?.message||e))),R.fetchGithubApp().then(e=>{let t=e.apps.find(e=>e.appId&&!e.hosted);t?.appId&&u(t.appId)}).catch(()=>{})},[]);let h=async()=>{i(!0),o(null);try{let e=await R.createCentralGithubInstall(`/`);window.location.assign(e.installUrl)}catch(e){o(String(e?.message||e)),i(!1)}},g=async()=>{i(!0),o(null);try{await R.setHostedProvisioning({githubIdentity:`central-app`}),R.listRepos()}catch(e){o(String(e?.message||e))}finally{i(!1)}},_=async()=>{i(!0),o(null);try{await R.connectHostedGithubApp({appId:l.trim(),privateKeyPem:p.trim(),...d.trim()?{installationId:d.trim()}:{}}),m(``),R.listRepos()}catch(e){o(String(e?.message||e))}finally{i(!1)}},v=!!t?.installations.length;return(0,K.jsxs)(`div`,{className:`repo-connect`,children:[(0,K.jsx)(`p`,{className:`repo-connect-lead`,children:`Connect the Bivy GitHub App for hosted Machines.`}),(0,K.jsx)(`p`,{className:`repo-connect-sub`,children:`Choose which repositories Bivy Cloud may access. This is separate from any custom GitHub App connected to a personal Machine.`}),t&&!t.configured?(0,K.jsx)(`p`,{className:`repo-connect-alt`,children:`The hosted GitHub App is not available on this deployment.`}):v?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`button`,{type:`button`,className:`btn primary block`,disabled:r,onClick:()=>void g(),children:r?`Connecting…`:`Use Bivy GitHub App`}),(0,K.jsx)(`button`,{type:`button`,className:`btn link`,disabled:r,onClick:()=>void h(),children:`Add another GitHub account or organization…`})]}):(0,K.jsx)(`button`,{type:`button`,className:`btn primary block`,disabled:r||t===null,onClick:()=>void h(),children:r?`Opening GitHub…`:t===null?`Checking GitHub App…`:`Install Bivy GitHub App`}),(0,K.jsx)(`button`,{type:`button`,className:`btn link`,disabled:r,onClick:()=>c(e=>!e),children:s?`Cancel custom App setup`:`Use my GitHub App`}),s&&(0,K.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),_()},children:[(0,K.jsx)(`p`,{className:`repo-connect-note muted`,children:`Hosted Machines need an encrypted server-side copy of this App key to mint short-lived, repository-scoped tokens. Your personal Machine's copy is unchanged.`}),(0,K.jsx)(`label`,{className:`field-label`,htmlFor:`hosted-own-app-id`,children:`GitHub App ID`}),(0,K.jsx)(`input`,{id:`hosted-own-app-id`,className:`picker-search`,inputMode:`numeric`,required:!0,value:l,onChange:e=>u(e.target.value)}),(0,K.jsx)(`label`,{className:`field-label`,htmlFor:`hosted-own-app-key`,children:`Private key (.pem contents)`}),(0,K.jsx)(`textarea`,{id:`hosted-own-app-key`,className:`picker-search`,required:!0,rows:4,value:p,onChange:e=>m(e.target.value)}),(0,K.jsx)(`label`,{className:`field-label`,htmlFor:`hosted-own-installation-id`,children:`Installation ID (only when the App has multiple installations)`}),(0,K.jsx)(`input`,{id:`hosted-own-installation-id`,className:`picker-search`,inputMode:`numeric`,value:d,onChange:e=>f(e.target.value)}),(0,K.jsx)(`button`,{type:`submit`,className:`btn primary block`,disabled:r||!l.trim()||!p.trim(),children:r?`Connecting…`:`Use this App on hosted Machines`})]}),(a||e)&&(0,K.jsx)(`p`,{className:`repo-connect-alt`,children:a||e})]})}function Do(){let[e,t]=(0,G.useState)(!1),[n,r]=(0,G.useState)(null),i=async()=>{t(!0),r(null);try{let e=await R.createCentralGithubInstall(`/`);window.location.assign(e.installUrl)}catch(e){r(String(e?.message||e)),t(!1)}};return(0,K.jsxs)(`div`,{className:`repo-connect-note`,children:[(0,K.jsx)(`button`,{type:`button`,className:`btn link`,disabled:e,onClick:()=>void i(),children:e?`Opening GitHub…`:`Add another GitHub account or organization…`}),n&&(0,K.jsx)(`p`,{className:`repo-connect-alt`,children:n})]})}function Oo({state:e,onClose:t}){let[n,r]=(0,G.useState)(``),[i,a]=(0,G.useState)(null),o=e.draft.ephemeralConfig?.computeSource===`managed`;(0,G.useEffect)(()=>{R.listRepos();let t=e.draft.repo;t&&R.listBranches(t)},[]);let{repos:s,repoTotal:c}=(0,G.useMemo)(()=>{let t=n.trim().toLowerCase(),r=t?e.catalogs.repos.filter(e=>`${e.slug} ${e.description||``}`.toLowerCase().includes(t)):e.catalogs.repos;return{repos:r.slice(0,60),repoTotal:r.length}},[e.catalogs.repos,n]);return i?(0,K.jsx)(ko,{state:e,repo:i,onBack:()=>a(null),onClose:t}):(0,K.jsxs)(B,{title:`Repository`,onClose:t,children:[(0,K.jsx)(`input`,{className:`picker-search`,placeholder:`Search repos…`,value:n,onChange:e=>r(e.target.value)}),(0,K.jsxs)(`div`,{className:`picker-list`,children:[(0,K.jsx)(`div`,{className:`picker-section-label`,children:`This Machine`}),(0,K.jsx)(V,{active:!e.draft.repo,title:`Default workspace`,meta:`Work in the machine's default workspace`,onClick:()=>{R.chooseRepo(null),t()}}),e.catalogs.reposLoading&&(0,K.jsx)(`div`,{className:`picker-empty`,children:`Loading repos…`}),!e.catalogs.reposLoading&&!e.catalogs.reposAuthed&&o&&(0,K.jsx)(Eo,{error:e.catalogs.reposError}),!e.catalogs.reposLoading&&!e.catalogs.reposAuthed&&!o&&!e.catalogs.reposError&&(0,K.jsx)(To,{state:e,onSetup:()=>{t(),Ot(`github`)}}),!e.catalogs.reposLoading&&e.catalogs.reposError&&!o&&(0,K.jsxs)(`div`,{className:`picker-empty`,role:`alert`,children:[e.catalogs.reposError,(0,K.jsx)(`button`,{type:`button`,className:`btn link`,onClick:()=>R.listRepos(),children:`Retry`}),(0,K.jsx)(`button`,{type:`button`,className:`btn link`,onClick:()=>{t(),Ot(`github`)},children:`GitHub settings`})]}),!e.catalogs.reposLoading&&e.catalogs.reposAuthed&&!e.catalogs.reposError&&s.length===0&&(0,K.jsxs)(`div`,{className:`picker-empty`,children:[n?`No repositories match your search.`:`No repositories available. Check the App’s repository access on GitHub.`,!n&&(0,K.jsx)(`button`,{type:`button`,className:`btn link`,onClick:()=>{t(),Ot(`github`)},children:`GitHub settings`})]}),s.length>0&&(0,K.jsx)(`div`,{className:`picker-section-label`,children:`GitHub repositories`}),s.map(n=>{let r=n.slug===e.draft.repo;return(0,K.jsx)(V,{active:r,title:n.slug,meta:[n.private?`private`:null,r?e.draft.branch?`branch: ${e.draft.branch}`:`default branch`:null,n.description].filter(Boolean).join(` · `),right:(0,K.jsx)(`button`,{type:`button`,className:`btn ghost icon repo-branch-arrow`,title:`Choose a branch of ${n.slug}`,"aria-label":`Choose a branch of ${n.slug}`,onClick:e=>{e.stopPropagation(),R.listBranches(n.slug),a(n.slug)},children:`›`}),onClick:()=>{R.chooseRepo(n.slug),t()}},n.slug)}),c>s.length&&(0,K.jsxs)(`div`,{className:`picker-empty`,children:[`Showing first `,s.length,` of `,c,` — search to narrow.`]}),o&&e.catalogs.reposAuthed&&(0,K.jsx)(Do,{})]})]})}function ko({state:e,repo:t,onBack:n,onClose:r}){let[i,a]=(0,G.useState)(``),o=e.catalogs.branchesLoading||e.catalogs.branchesRepo!==t,{branches:s,branchTotal:c}=(0,G.useMemo)(()=>{let t=i.trim().toLowerCase(),n=t?e.catalogs.branches.filter(e=>e.name.toLowerCase().includes(t)):e.catalogs.branches;return{branches:n.slice(0,200),branchTotal:n.length}},[e.catalogs.branches,i]),l=e.catalogs.repos.find(e=>e.slug===t)?.defaultBranch??(e.catalogs.branchesRepo===t?e.catalogs.branchesDefault:null)??null,u=e.draft.repo===t?e.draft.branch:null,d=e=>{R.chooseRepoBranch(t,e&&e!==l?e:null),r()};return(0,K.jsxs)(B,{title:t,onClose:r,headExtra:(0,K.jsx)(`button`,{className:`sheet-back`,onClick:n,"aria-label":`Back to repositories`,children:`‹`}),children:[(0,K.jsx)(`input`,{className:`picker-search`,placeholder:`Search branches…`,value:i,onChange:e=>a(e.target.value)}),(0,K.jsxs)(`div`,{className:`picker-list`,children:[(0,K.jsx)(V,{active:!u,title:`Default branch${l?` (${l})`:``}`,meta:`Clone and start from the repo's default branch`,onClick:()=>d(null)}),o&&(0,K.jsx)(`div`,{className:`picker-empty`,children:`Loading branches…`}),!o&&e.catalogs.branchesError&&(0,K.jsx)(`div`,{className:`picker-empty`,children:e.catalogs.branchesError}),!o&&!e.catalogs.branchesError&&s.length===0&&i&&(0,K.jsxs)(`div`,{className:`picker-empty`,children:[`No branches match “`,i,`”.`]}),!o&&s.map(e=>(0,K.jsx)(V,{active:e.name===u,title:e.name,meta:e.name===l?`Default`:void 0,onClick:()=>d(e.name)},e.name)),!o&&c>s.length&&(0,K.jsxs)(`div`,{className:`picker-empty`,children:[`Showing first `,s.length,` of `,c,` — search to narrow.`]})]})]})}function Ao({state:e,onClose:t}){let n=e.settings.nodeSettings?.defaultSandbox,[r,i]=(0,G.useState)(!1),a=e.catalogs.runtimes.find(t=>t.id===e.catalogs.selectedAgentId),o=At(a),s=e.catalogs.currentAgentName||`This agent`;return(0,K.jsxs)(B,{title:`Protection`,onClose:t,autoFocusSearch:!1,children:[!o&&(0,K.jsxs)(`div`,{className:`banner`,"data-tone":`warn`,role:`note`,children:[s,` can't ask for approval — protection choices are treated as full access.`]}),(0,K.jsxs)(`div`,{className:`picker-list`,children:[(0,K.jsx)(V,{active:!e.draft.sandbox,title:`Machine default${n?` (${n})`:``}`,meta:`Use this machine's configured protection`,onClick:()=>{R.setSessionSandbox(null),t()}}),Mt.map(n=>{let a=n.id===`danger-full-access`,o=a&&r;return(0,K.jsx)(V,{active:e.draft.sandbox===n.id,title:o?`Confirm full computer access`:n.label,meta:o?`This agent can access anything your OS user can. Bivy is not an isolation boundary. Select again to continue.`:n.hint,onClick:()=>{if(a&&!r){i(!0);return}R.setSessionSandbox(n.id),t()}},n.id)})]})]})}function jo({state:e,currentNodeId:t,onPick:n,onClose:r}){return(0,K.jsx)(B,{title:`Open terminal on`,onClose:r,autoFocusSearch:!1,children:(0,K.jsxs)(`div`,{className:`picker-list`,children:[e.connection.nodes.length===0&&(0,K.jsx)(`div`,{className:`picker-empty`,children:`No machines available.`}),e.connection.nodes.map(e=>(0,K.jsx)(V,{active:e.id===t,title:e.name||e.id,meta:e.online?`Online`:`Offline`,onClick:()=>n(e.id)},e.id))]})})}function Mo({state:e,onClose:t}){let n=!!e.activeSession.activeSessionId&&e.activeSession.transcript.some(e=>e.role===`user`),r=n?e.activeSession.activeRuntimeId??e.sessionIndex.sessions.find(t=>t.sessionId===e.activeSession.activeSessionId)?.runtimeId??null:e.catalogs.selectedAgentId??(e.catalogs.runtimes.find(e=>e.current)?.id||null),[i,a]=(0,G.useState)(``),[o,s]=(0,G.useState)(!1),[c,l]=(0,G.useState)(null),u=(0,G.useRef)(null),d=(0,G.useRef)(null);(0,G.useEffect)(()=>{R.listRuntimes(),R.prefetchModels()},[]);let f=(0,G.useMemo)(()=>xo(e.catalogs.runtimes,i),[e.catalogs.runtimes,i]),p=f.filter(bo),m=f.filter(e=>!bo(e)),h=e.catalogs.runtimes.find(e=>e.id===r);(0,G.useEffect)(()=>{h&&!bo(h)&&s(!0)},[h]),(0,G.useEffect)(()=>{if(!r||d.current===r)return;let e=u.current?.querySelector(`.picker-item-row.active`);e&&(e.scrollIntoView({block:`center`}),d.current=r)},[r,f.length,o]);let g=c?e.catalogs.runtimes.find(e=>e.id===c):void 0,_=(e,t)=>{(n?void 0:wo(e))?.requiresAcknowledgement&&R.acknowledgeSessionAgentReducedProtections(!0),n?R.chooseAgent(e,()=>new Promise(e=>t(e))):t(()=>R.chooseAgent(e))},v=(t,i)=>{let a=String(t.status||`available`)===`available`,o=!a&&!!t.install,s=e.catalogs.installingRuntimeId===t.id,c=t.id===r,u=n?void 0:wo(t),d=!n&&!!u?.requiresAcknowledgement,f=String(t.description||``);return(0,K.jsx)(V,{active:c,title:So(t),meta:[s?`Setting up…`:a?n?`Fork and hand off`:null:o?`Install required`:`Needs sign-in`,f].filter(Boolean).join(` · `),disabled:s||!a&&!o,right:o&&!s?(0,K.jsx)(`button`,{type:`button`,className:`btn sm ghost`,onClick:e=>{e.stopPropagation(),R.installAgent(t.id)},children:`Install`}):void 0,onClick:()=>{if(o){R.installAgent(t.id);return}if(a){if(d){l(t.id);return}_(t,i)}}},t.id)};return(0,K.jsx)(B,{title:n?`Hand off to agent`:`Agent`,onClose:t,autoFocusSearch:!1,size:`large`,children:e=>(0,K.jsxs)(K.Fragment,{children:[n&&(0,K.jsx)(`div`,{className:`picker-empty`,children:`Choosing an agent forks this session with its transcript and working files, then opens the fork in that agent.`}),(0,K.jsx)(`input`,{className:`picker-search`,placeholder:`Search agents…`,value:i,onChange:e=>{a(e.target.value),l(null)}}),(0,K.jsxs)(`div`,{className:`picker-list`,ref:u,children:[f.length===0&&(0,K.jsx)(`div`,{className:`picker-empty`,children:`No agents available.`}),p.length>0&&(0,K.jsx)(`div`,{className:`picker-section-label`,children:`Recommended`}),p.map(t=>v(t,e)),m.length>0&&(0,K.jsxs)(`button`,{type:`button`,className:`picker-section-toggle`,onClick:()=>s(e=>!e),"aria-expanded":o||!!i.trim(),children:[`More agents `,(0,K.jsx)(`span`,{"aria-hidden":!0,children:o||i.trim()?`▾`:`▸`})]}),(o||!!i.trim())&&m.map(t=>v(t,e))]}),g&&(0,K.jsx)(Ye,{title:`Check how ${So(g)} runs`,message:`Bivy couldn't check which sign-in this agent will use or guarantee its protection level.`,confirmLabel:`Use ${So(g)}`,onCancel:()=>l(null),onConfirm:()=>_(g,e)})]})})}function No({state:e}){let[t,n]=(0,G.useState)(!1),r=(0,G.useRef)(null);nt(()=>n(!1),t),(0,G.useEffect)(()=>{if(!t)return;let e=e=>{r.current&&!r.current.contains(e.target)&&n(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[t]);let i=e.catalogs.thinking;if(!i.supportsThinking||!i.availableThinkingLevels||i.availableThinkingLevels.length<=1)return null;let a=Co[i.thinkingLevel]||i.thinkingLevel;return(0,K.jsxs)(`div`,{className:`reasoning-wrap`,ref:r,children:[(0,K.jsxs)(`button`,{className:`reasoning-pill`,onClick:()=>n(e=>!e),children:[`✦ `,a,` `,t?`▾`:`▸`]}),t&&(0,K.jsx)(`div`,{className:`menu reasoning-menu`,role:`menu`,children:i.availableThinkingLevels.map(e=>(0,K.jsx)(`button`,{className:`menu-item reasoning-opt${e===i.thinkingLevel?` active`:``}`,role:`menuitemradio`,"aria-checked":e===i.thinkingLevel,onClick:()=>{R.setThinkingLevel(e),n(!1)},children:Co[e]||e},e))})]})}function Po(e,t){let n=e.contextWindow;return[e.provider,t,n?`${Math.round(n/1e3)}k ctx`:null].filter(Boolean).join(` · `)}function J({state:e,onClose:t}){let[n,r]=(0,G.useState)(``),[i,a]=(0,G.useState)(null),o=(0,G.useRef)(null),s=(0,G.useRef)(null);(0,G.useEffect)(()=>{i||o.current?.focus()},[i]);let[c,l]=(0,G.useState)(null),u=()=>{R.listModels(),R.listProviders(),R.listCredentialRecords(),R.getCredentialPresets()};(0,G.useEffect)(u,[e.connection.currentNodeId]);let[d,f]=(0,G.useState)(!1),p=`${e.catalogs.modelsRuntimeId??``}:${e.catalogs.models.length}:${e.catalogs.models.map(e=>e.id).join(`,`)}`;(0,G.useEffect)(()=>{d&&f(!1)},[p]),(0,G.useEffect)(()=>{if(!d)return;let e=setTimeout(()=>f(!1),2500);return()=>clearTimeout(e)},[d]),(0,G.useEffect)(()=>{c&&e.catalogs.providers.find(e=>e.id===c)?.configured&&(R.listModels(),l(null))},[c,e.catalogs.providers]);let m=t=>e.catalogs.providers.find(e=>e.id===t)?.name||t,h=(0,G.useMemo)(()=>{let t=n.trim().toLowerCase();return t?e.catalogs.models.filter(e=>`${e.id} ${e.label||``} ${e.provider||``} ${m(String(e.provider||``))}`.toLowerCase().includes(t)):e.catalogs.models},[e.catalogs.models,e.catalogs.providers,n]),g=h.filter(e=>e.configured!==!1),_=h.filter(e=>e.configured===!1),v=t=>e.catalogs.currentModel!=null&&t.id===e.catalogs.currentModel.id&&t.provider===e.catalogs.currentModel.provider;return i?(0,K.jsx)(_o,{state:e,model:i,onClose:()=>a(null)}):c?(0,K.jsx)(B,{title:m(c),onClose:t,size:`large`,headExtra:(0,K.jsx)(`button`,{className:`sheet-back`,onClick:()=>l(null),"aria-label":`Back`,children:`‹`}),children:(0,K.jsx)(jt,{state:e,providerId:c})}):(0,K.jsxs)(B,{title:`Model`,ariaLabel:`Model`,onClose:t,headExtra:(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(No,{state:e}),(0,K.jsx)(`button`,{type:`button`,className:`btn ghost icon`,onClick:()=>{f(!0),u()},disabled:d,"aria-label":`Refresh models`,title:`Refresh models`,children:d?(0,K.jsx)(ft,{size:`xs`}):(0,K.jsx)(qe,{size:18})}),(0,K.jsx)(`button`,{type:`button`,className:`btn ghost icon`,onClick:()=>{t(),Ot(`providers`)},"aria-label":`Model and provider settings`,title:`Model and provider settings`,children:(0,K.jsx)(ot,{size:18})})]}),autoFocusSearch:!1,size:`large`,children:[(0,K.jsx)(`input`,{className:`picker-search`,placeholder:`Search models…`,value:n,onChange:e=>r(e.target.value)}),(0,K.jsxs)(`div`,{className:`picker-list`,children:[g.length===0&&_.length===0&&(0,K.jsx)(`div`,{className:`picker-empty`,children:`No models available.`}),g.map(n=>{let r=String(n.provider||``),i=e.settings.credentialRecords.filter(e=>e.provider===r),c=go(r,i,e.settings.credentialPresets,ho(e)),l=i.length?c.label||(e.settings.credentialPresets?`Choose account`:`Loading account…`):void 0;return(0,K.jsx)(V,{active:v(n),title:n.label||n.id,meta:Po(n,l),right:i.length>1?(0,K.jsx)(`button`,{type:`button`,className:`btn ghost icon`,"aria-label":`Change account for ${n.label||n.id}`,ref:s.current===`${r}:${n.id}`?o:void 0,onClick:()=>{s.current=`${r}:${n.id}`,a(n)},children:(0,K.jsx)(Qe,{})}):void 0,onClick:()=>{R.chooseModel(n),t()}},`${n.provider||``}:${n.id}`)}),_.length>0&&(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`div`,{className:`picker-section-label`,children:`Other models`}),_.map(e=>{let t=String(e.provider||``),n=m(t),r=Number(e.modelCount)||0;return(0,K.jsx)(V,{title:n,meta:`${r} model${r===1?``:`s`} · Not connected`,right:(0,K.jsx)(`button`,{type:`button`,className:`btn sm ghost`,onClick:e=>{e.stopPropagation(),l(t)},children:`Connect`}),onClick:()=>l(t)},`${t}:${e.id}`)})]})]})]})}function Fo(e){return e<1024?`${e} B`:e<1048576?`${Math.round(e/1024)} KB`:`${(e/1024/1024).toFixed(1)} MB`}function Io(e){let t=new Date(e),n=t.toDateString()===new Date().toDateString(),r=t.toLocaleTimeString(void 0,{hour:`numeric`,minute:`2-digit`});return n?`Sends today at ${r}`:`Sends ${t.toLocaleDateString(void 0,{weekday:`short`,month:`short`,day:`numeric`})} at ${r}`}function Lo(e,t){if(e.status===`scheduled`)return e.scheduledAt==null?`Scheduled`:Io(e.scheduledAt);if(e.status===`sending`)return`Sending…`;if(e.status===`failed`)return`Failed — will retry`;let n=`Queued · #${t+1}`;return e.scheduledAutomationId?`${n} · sends on close`:n}function Ro(e){return String(e).padStart(2,`0`)}function zo(e){return`${e.getFullYear()}-${Ro(e.getMonth()+1)}-${Ro(e.getDate())}T${Ro(e.getHours())}:${Ro(e.getMinutes())}`}function Bo({sessionId:e,item:t,position:n,count:r,canSteer:i,busy:a,onError:o}){let[s,c]=(0,G.useState)(!1),[l,u]=(0,G.useState)(t.text),[d,f]=(0,G.useState)(t.attachments??[]),[p,m]=(0,G.useState)(!1),[h,g]=(0,G.useState)(()=>t.scheduledAt==null?zo(new Date):zo(new Date(t.scheduledAt))),_=t.status===`scheduled`,v=t.status!==`queued`&&!_,[y,b]=(0,G.useState)(!1),x=async()=>{b(!0);try{await R.startSessionLike(e,t.text,t.attachments),R.removeFollowup(e,t.id)}catch(e){o?.(e instanceof Error?e.message:String(e)),b(!1)}};function S(){v||(u(t.text),f(t.attachments??[]),c(!0))}function C(){c(!1)}function w(){let n=l.trim();if(!n&&d.length===0){o?.(`A follow-up needs some text or an attachment.`);return}let r=R.editFollowup(e,t.id,{text:n,attachments:d.length?d:void 0},t.version);if(!r.ok){let e=r.reason===`stale`?`This follow-up changed elsewhere — refresh and try again.`:r.reason===`not_queued`?`This follow-up is already sending — it can no longer be edited.`:`This follow-up is gone — it may have already been sent.`;o?.(e)}c(!1)}function T(e){f(t=>t.filter((t,n)=>n!==e))}function E(){_&&(g(t.scheduledAt==null?zo(new Date):zo(new Date(t.scheduledAt))),m(!0))}function D(){m(!1)}function O(){let n=new Date(h);if(!Number.isFinite(n.getTime())||n.getTime()<=Date.now()){o?.(`Pick a time in the future.`);return}(async()=>{let r=await R.editScheduledFollowup(e,t.id,n);r?o?.(r):m(!1)})()}let k=a&&i?`Steer now`:`Send next`;return(0,K.jsx)(`div`,{className:`card followup-card${s||p?` editing`:``}${v?` locked`:``}`,"data-tone":`muted`,role:`listitem`,children:s||p?(0,K.jsxs)(`div`,{className:`followup-edit`,children:[p?(0,K.jsxs)(`label`,{className:`schedule-field`,children:[(0,K.jsx)(`span`,{className:`schedule-label`,children:`Send at`}),(0,K.jsx)(`input`,{type:`datetime-local`,className:`field`,value:h,min:zo(new Date),autoFocus:!0,onChange:e=>g(e.target.value),onKeyDown:e=>{e.key===`Escape`?(e.preventDefault(),D()):e.key===`Enter`&&(e.preventDefault(),O())}})]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`textarea`,{className:`field followup-edit-input`,value:l,autoFocus:!0,rows:2,onChange:e=>u(e.target.value),onKeyDown:e=>{e.key===`Escape`?(e.preventDefault(),C()):e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),w())}}),d.length>0&&(0,K.jsx)(`div`,{className:`attach-chips`,children:d.map((e,t)=>(0,K.jsxs)(`span`,{className:`attach-chip`,title:e.name,children:[(0,K.jsx)(`span`,{className:`attach-glyph`,children:e.kind===`image`?`🖼`:`📄`}),(0,K.jsx)(`span`,{className:`attach-name`,children:e.name}),(0,K.jsx)(`button`,{type:`button`,className:`attach-remove`,onClick:()=>T(t),"aria-label":`Remove ${e.name}`,children:`✕`})]},`${e.name}-${t}`))})]}),(0,K.jsxs)(`div`,{className:`followup-edit-actions`,children:[(0,K.jsx)(`button`,{type:`button`,className:`queue-action-btn`,onClick:p?D:C,children:`Cancel`}),(0,K.jsx)(`button`,{type:`button`,className:`queue-action-btn active`,onClick:p?O:w,children:`Save`})]})]}):(0,K.jsxs)(`div`,{className:`followup-card-row`,tabIndex:v?-1:0,role:`group`,"aria-label":_?`Scheduled message`:`Follow-up ${n+1} of ${r}`,onKeyDown:r=>{if(!v){if(_){r.key===`Enter`?(r.preventDefault(),E()):(r.key===`Delete`||r.key===`Backspace`)&&(r.preventDefault(),R.removeFollowup(e,t.id));return}r.key===`ArrowUp`?(r.preventDefault(),R.reorderFollowup(e,t.id,n-1)):r.key===`ArrowDown`?(r.preventDefault(),R.reorderFollowup(e,t.id,n+1)):r.key===`Enter`?(r.preventDefault(),S()):(r.key===`Delete`||r.key===`Backspace`)&&(r.preventDefault(),R.removeFollowup(e,t.id))}},children:[!_&&(0,K.jsxs)(`div`,{className:`followup-reorder`,children:[(0,K.jsx)(`button`,{type:`button`,className:`queue-action-btn icon`,disabled:v||n===0,onClick:()=>R.reorderFollowup(e,t.id,n-1),"aria-label":`Move earlier`,title:`Move earlier`,children:`▲`}),(0,K.jsx)(`button`,{type:`button`,className:`queue-action-btn icon`,disabled:v||n===r-1,onClick:()=>R.reorderFollowup(e,t.id,n+1),"aria-label":`Move later`,title:`Move later`,children:`▼`})]}),(0,K.jsxs)(`div`,{className:`followup-body`,children:[(0,K.jsx)(`div`,{className:`followup-status`,children:Lo(t,n)}),(0,K.jsx)(`div`,{className:`followup-text`,children:t.text||`(attachment only)`}),t.attachments&&t.attachments.length>0&&(0,K.jsx)(`div`,{className:`followup-attachments`,children:t.attachments.map((e,t)=>(0,K.jsxs)(`span`,{className:`attach-chip`,title:e.name,children:[(0,K.jsx)(`span`,{className:`attach-glyph`,children:e.kind===`image`?`🖼`:`📄`}),(0,K.jsx)(`span`,{className:`attach-name`,children:e.name}),(0,K.jsx)(`span`,{className:`attach-size`,children:Fo(e.size)})]},`${e.name}-${t}`))})]}),(0,K.jsx)(`div`,{className:`followup-card-actions`,children:_?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`button`,{type:`button`,className:`queue-action-btn icon`,onClick:E,"aria-label":`Change scheduled time`,title:`Change time`,children:`✎`}),(0,K.jsx)(`button`,{type:`button`,className:`queue-action-btn icon danger`,onClick:()=>R.removeFollowup(e,t.id),"aria-label":`Cancel scheduled message`,title:`Cancel`,children:`✕`})]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`button`,{type:`button`,className:`queue-action-btn icon`,disabled:v,onClick:S,"aria-label":`Edit follow-up`,title:`Edit`,children:`✎`}),(0,K.jsx)(`button`,{type:`button`,className:`queue-action-btn icon danger`,disabled:v,onClick:()=>R.removeFollowup(e,t.id),"aria-label":`Remove follow-up`,title:`Remove`,children:`✕`}),(0,K.jsx)(`button`,{type:`button`,className:`queue-action-btn`,disabled:v||y,onClick:()=>void x(),title:`Start this now in its own session; this one keeps working`,children:y?`Starting…`:`Run in new session`}),(0,K.jsx)(`button`,{type:`button`,className:`queue-action-btn`,disabled:v||y,onClick:()=>R.sendFollowupNow(e,t.id),title:k,children:k})]})})]})})}function Vo({sessionId:e,items:t,canSteer:n,busy:r,onError:i}){if(!t.length)return null;let a=t.filter(e=>e.status===`queued`).length,o=t.filter(e=>e.status===`scheduled`).length,s=a>0?`${a} follow-up${a>1?`s`:``} queued${o?` · ${o} scheduled`:``}`:`${o} scheduled message${o>1?`s`:``}`;return(0,K.jsxs)(`div`,{className:`followup-queue`,children:[(0,K.jsx)(`div`,{className:`followup-queue-head`,children:(0,K.jsx)(`span`,{children:s})}),(0,K.jsx)(`div`,{className:`followup-list`,role:`list`,children:t.map((a,o)=>(0,K.jsx)(Bo,{sessionId:e,item:a,position:o,count:t.length,canSteer:n,busy:r,onError:i},a.id))})]})}function Ho(e,t,n,r){let i=e?.draft;if(i&&i.device.id!==t.id&&n&&r-i.at<18e5)return{from:i.device.label,text:i.text,at:i.at}}function Uo(e){let{connection:t}=je(),n=t.status===`online`,[r,i]=(0,G.useState)();return(0,G.useEffect)(()=>{if(i(void 0),!e||!n)return;let t=!0,r=()=>R.getPresence(e).then(e=>{t&&i(e)},()=>{});r();let a=()=>{document.visibilityState===`visible`&&r()};document.addEventListener(`visibilitychange`,a);let o=R.onPresence(n=>{t&&n.sessionId===e&&i(n)});return()=>{t=!1,o(),document.removeEventListener(`visibilitychange`,a)}},[e,n,t.currentNodeId]),r}function Wo(e){let t=e.trim().split(`
11
11
  `)[0]??``;return t.length>80?`${t.slice(0,79)}…`:t}function Go({handoff:e,onContinue:t}){return(0,K.jsxs)(`div`,{className:`banner handoff-banner`,"data-tone":`neutral`,role:`status`,children:[(0,K.jsxs)(`span`,{className:`banner-text`,children:[(0,K.jsxs)(`strong`,{children:[`Unsent draft from `,e.from,` · `,bt(e.at)]}),(0,K.jsx)(`span`,{className:`handoff-preview`,children:Wo(e.text)})]}),(0,K.jsx)(`button`,{type:`button`,className:`btn sm banner-action`,onClick:t,children:`Continue draft`})]})}function Ko({sessionId:e,composerEmpty:t,onUseDraft:n}){let r=Uo(e),[i,a]=(0,G.useState)(``),o=Ho(r,me(),t,Date.now());if(!o)return null;let s=`${e}:${o.at}`;return i===s?null:(0,K.jsx)(Go,{handoff:o,onContinue:()=>{n(o.text),a(s)}})}function qo({standby:e,onContinueHere:t,onOpenOnOwner:n}){let[r,i]=(0,G.useState)(!1);return e.ownerOnline?(0,K.jsxs)(`div`,{className:`banner handoff-banner`,"data-tone":`neutral`,role:`status`,children:[(0,K.jsx)(`span`,{className:`banner-text`,children:(0,K.jsxs)(`strong`,{children:[`Standby copy. This session is live on `,e.ownerName,`.`]})}),(0,K.jsxs)(`button`,{type:`button`,className:`btn sm banner-action`,onClick:n,children:[`Open on `,e.ownerName]})]}):(0,K.jsxs)(`div`,{className:`banner handoff-banner`,"data-tone":`warn`,role:`status`,children:[(0,K.jsxs)(`span`,{className:`banner-text`,children:[(0,K.jsxs)(`strong`,{children:[e.ownerName,` is offline.`]}),(0,K.jsx)(`span`,{children:`This machine has a standby copy, up to its last finished turn.`})]}),(0,K.jsx)(`button`,{type:`button`,className:`btn sm banner-action`,disabled:r,"aria-busy":r,onClick:()=>{i(!0),t().finally(()=>i(!1))},children:r?`Continuing…`:`Continue here`})]})}function Jo(e,t){if(!e?.startsWith(`replica`))return;let n=e.slice(8),r=n?t.find(e=>e.id===n):void 0;return{ownerId:n,ownerName:r?.name||`another machine`,ownerOnline:!!r?.online}}var Yo=10485760,Xo=12,Zo=41943040,Qo=524288,$o=1500,es=/\.(md|txt|json|ya?ml|csv|ts|tsx|js|jsx|css|html|xml|py|rb|go|rs|java|c|cpp|h|hpp|sh|sql)$/i;function ts(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(String(r.result||``)),r.onerror=()=>n(r.error),r.readAsDataURL(e)})}function ns(e){return new Promise((t,n)=>{let r=new FileReader;r.onload=()=>t(String(r.result||``)),r.onerror=()=>n(r.error),r.readAsText(e)})}function rs(){return typeof window<`u`&&window.matchMedia(`(max-width: 720px)`).matches}function is(e){if(typeof document>`u`)return!0;let t=document.activeElement;if(!t||t===document.body||t===e)return!0;let n=t.tagName;return!(n===`INPUT`||n===`TEXTAREA`||n===`SELECT`||t.isContentEditable||t.closest?.(`[role="dialog"], .settings-modal`))}function as(e){return e<1024?`${e} B`:e<1048576?`${Math.round(e/1024)} KB`:`${(e/1024/1024).toFixed(1)} MB`}function os(e){return e.kind!==`image`||!e.data?null:`data:${e.mimeType||`image/png`};base64,${e.data}`}function ss(e){return!!(e&&Array.from(e.types||[]).includes(`Files`))}function cs(){return(0,K.jsx)(`svg`,{className:`pill-gh`,viewBox:`0 0 16 16`,width:`14`,height:`14`,fill:`currentColor`,"aria-hidden":!0,children:(0,K.jsx)(`path`,{d:`M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0016 8c0-4.42-3.58-8-8-8z`})})}function ls(){return(0,K.jsxs)(`svg`,{viewBox:`0 0 24 24`,width:`19`,height:`19`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.7`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:[(0,K.jsx)(`path`,{d:`M12 15.5a3 3 0 003-3V6a3 3 0 10-6 0v6.5a3 3 0 003 3z`}),(0,K.jsx)(`path`,{d:`M6 11.5v1a6 6 0 0012 0v-1M12 18.5V21M9 21h6`})]})}function us(){return(0,K.jsx)(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.7`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:(0,K.jsx)(`path`,{d:`M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48`})})}function ds(){return(0,K.jsxs)(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.7`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:[(0,K.jsx)(`circle`,{cx:`12`,cy:`8`,r:`3`}),(0,K.jsx)(`path`,{d:`M5.5 20a6.5 6.5 0 0 1 13 0`})]})}function fs(){return(0,K.jsxs)(`svg`,{viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.7`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:[(0,K.jsx)(`path`,{d:`m12 3 1.4 4.1L17.5 8.5l-4.1 1.4L12 14l-1.4-4.1-4.1-1.4 4.1-1.4L12 3Z`}),(0,K.jsx)(`path`,{d:`m18.5 14 .8 2.2 2.2.8-2.2.8-.8 2.2-.8-2.2-2.2-.8 2.2-.8.8-2.2Z`})]})}function ps(e,t){let[n,...r]=e.split(` `),i=t.split(` `)[0];return r.length&&n&&i&&n.toLowerCase()===i.toLowerCase()?r.join(` `):e}function ms({state:e,disabled:t,disabledHint:n,working:r,onSend:i,onAbort:a,onError:o}){let s=(0,G.useRef)(null);s.current||=p(localStorage,e.activeSession.activeSessionId);let[c,l]=(0,G.useState)(()=>s.current?.text??``),[u,d]=(0,G.useState)(null),[m,h]=(0,G.useState)(()=>s.current?.attachments??[]),[_,v]=(0,G.useState)(()=>s.current?.recovered??[]),[y,x]=(0,G.useState)(0),[S,C]=(0,G.useState)(!1),[T,E]=(0,G.useState)(null),[D,O]=(0,G.useState)(!1),[k,ee]=(0,G.useState)(!1),[A,j]=(0,G.useState)(!1),[M,N]=(0,G.useState)(0),[te,re]=(0,G.useState)(null),ie=(0,G.useRef)(0);(0,G.useEffect)(()=>{if(!r){ee(!1),j(!1);return}if(!k)return;let e=window.setTimeout(()=>j(!0),1e4);return()=>window.clearTimeout(e)},[k,r]);let ae=()=>{k||(ee(!0),j(!1),a())},oe=e.catalogs.runtimes.find(t=>t.id===(e.activeSession.activeRuntimeId??e.catalogs.selectedAgentId)),ce=oe?.capabilities,le=!!e.sessionIndex.sessions.find(t=>t.sessionId===e.activeSession.activeSessionId)?.pendingLaunch,ue=!le&&ce?.modelSelection!==!1,de=e.activeSession.activeSessionId?e.sessionIndex.commandsBySession[e.activeSession.activeSessionId]:void 0,fe=Array.isArray(ce?.commands)?ce.commands:[],pe=de??(e.activeSession.activeSessionId?[]:fe),F=e.activeSession.activeSessionId?e.sessionIndex.followupsBySession[e.activeSession.activeSessionId]??[]:[],I=R.supportsSteering(),me=(0,G.useRef)(null),he=(0,G.useRef)(null),ge=(0,G.useRef)(null),_e=!e.activeSession.activeSessionId,ve=Jo(e.sessionIndex.sessions.find(t=>t.sessionId===e.activeSession.activeSessionId)?.source,e.connection.nodes),L=(0,G.useRef)(w(e.activeSession.activeSessionId)),ye=(0,G.useRef)(e.activeSession.activeSessionId),be=(0,G.useRef)(c),xe=(0,G.useRef)(m),Se=(0,G.useRef)(_);(0,G.useEffect)(()=>{be.current=c},[c]),(0,G.useEffect)(()=>{xe.current=m},[m]),(0,G.useEffect)(()=>{Se.current=_},[_]),(0,G.useEffect)(()=>{let t=w(e.activeSession.activeSessionId);if(L.current===t)return;b(localStorage,ye.current,be.current,[...xe.current,...Se.current]),f(ye.current,xe.current);let n=p(localStorage,e.activeSession.activeSessionId);l(n.text),h(n.attachments),v(n.recovered),C(!1),x(0),requestAnimationFrame(ke),L.current=t,ye.current=e.activeSession.activeSessionId},[e.activeSession.activeSessionId]),(0,G.useEffect)(()=>{b(localStorage,ye.current,c,[...m,..._]),f(ye.current,m),we({hasDraft:!!c.trim(),pendingAttachments:m.length+_.length,readingAttachments:M>0})},[c,m,_,M]),(0,G.useEffect)(()=>()=>we({hasDraft:!1,pendingAttachments:0,readingAttachments:!1}),[]);let Ce=(0,G.useRef)(new Map);(0,G.useEffect)(()=>{let t=e.activeSession.activeSessionId;if(!t)return;let n=setTimeout(()=>{(Ce.current.get(t)??``)!==c&&(Ce.current.set(t,c),R.publishDraft(t,c))},$o);return()=>clearTimeout(n)},[c,e.activeSession.activeSessionId]),(0,G.useLayoutEffect)(()=>{ke()},[c]),(0,G.useEffect)(()=>{let e=ge.current;if(!e||typeof ResizeObserver>`u`)return;let t=document.documentElement,n=()=>t.style.setProperty(`--composer-h`,`${Math.round(e.offsetHeight)}px`);n();let r=new ResizeObserver(n);return r.observe(e),()=>{r.disconnect(),t.style.removeProperty(`--composer-h`)}},[]);let Te=(0,G.useRef)(!1);(0,G.useEffect)(()=>{!t&&Te.current&&is(me.current)&&me.current?.focus()},[t]),(0,G.useEffect)(()=>R.onComposerFocus(()=>{Te.current=!0,requestAnimationFrame(()=>{is(me.current)&&me.current?.focus()})}),[]),(0,G.useEffect)(()=>R.onComposerPrefill((e,t)=>{let n=e.trim();t.length&&h(e=>[...e,...t]),(n||t.length)&&(n&&l(e=>e.trim()?`${e.trimEnd()}\n\n${n}`:n),C(!1),Te.current=!0,requestAnimationFrame(()=>{ke();let e=me.current;is(e)&&(e?.focus(),e?.setSelectionRange(e.value.length,e.value.length))}))}),[]),(0,G.useEffect)(()=>R.onOpenSlash(()=>{l(e=>e.trimStart().startsWith(`/`)?e:`/`),C(!1),x(0),Te.current=!0,requestAnimationFrame(()=>{ke(),is(me.current)&&me.current?.focus()})}),[]),nt(()=>re(null),!!te),(0,G.useEffect)(()=>{!t&&!e.settings.sttConfig&&R.getSttConfig()},[t,e.settings.sttConfig]);function z(){if(t)return;let n=dt(e.settings.sttConfig);n?E(n):o?.(xt)}function Ee(e){let t=e.trim();t&&(l(e=>`${e}${e&&!/\s$/.test(e)?` `:``}${t}`),requestAnimationFrame(()=>{ke(),me.current?.focus()}))}let De=!t&&!S?ne(c,pe):[],Oe=(()=>{if(t||S)return!1;let e=c.trimStart();return e.startsWith(`/`)&&!/\s/.test(e)})()&&De.length===0;function ke(){let e=me.current;e&&(e.style.height=`auto`,e.style.height=Math.min(e.scrollHeight,200)+`px`)}async function Ae(e){if(e&&e.length){N(e=>e+1);try{let t=[],n=m.reduce((e,t)=>e+Number(t.size||0),0),r=m.length;for(let i of Array.from(e)){if(r>=Xo){o?.(`A message can include at most ${Xo} attachments.`);break}if(i.size>Yo){o?.(`${i.name} is larger than ${as(Yo)} and was not attached.`);continue}if(n+i.size>Zo){o?.(`Attachments are limited to ${as(Zo)} per message.`);continue}n+=i.size,r+=1;try{if(i.type.startsWith(`image/`)){let e=await ts(i),n=e.includes(`,`)?e.split(`,`).pop()||``:e;t.push({kind:`image`,name:i.name,size:i.size,mimeType:i.type||`image/png`,data:n});continue}if(!(i.type.startsWith(`text/`)||es.test(i.name))){let e=await ts(i),n=e.includes(`,`)?e.split(`,`).pop()||``:e;t.push({kind:`file`,name:i.name,size:i.size,mimeType:i.type||`application/octet-stream`,data:n});continue}let e=await ns(i);t.push({kind:`file`,name:i.name,size:i.size,mimeType:i.type||`text/plain`,text:e.slice(0,Qo),truncated:e.length>Qo})}catch{n-=i.size,--r,o?.(`Could not read ${i.name}.`)}}t.length&&(h(e=>[...e,...t]),v(e=>e.filter(e=>!t.some(t=>t.name===e.name)))),he.current&&(he.current.value=``)}finally{N(e=>Math.max(0,e-1))}}}function je(e){h(t=>t.filter((t,n)=>n!==e))}function Me(){g(localStorage,ye.current),l(``),h([]),v([]),C(!1),x(0),requestAnimationFrame(ke)}function Ne(e,t){e.mode===`protocol`?R.invokeAgentCommand(e.name,t):i(t?`${e.name} ${t}`:e.name)}function Pe(e){l(`${e.name} `),C(!0),x(0),requestAnimationFrame(()=>{ke(),me.current?.focus()})}function Fe(){let n=c.trim();if(!n&&!m.length||t)return;let r=e.catalogs.currentModel?.id||e.catalogs.currentModelId;if(_e&&ue&&(!r||r===`unknown`)){d(`model`);return}if(P(n)){let e=se(n);if(e){let t=He(e,pe);if(t.kind===`agent`){Ne(t.command,t.args),Me();return}if(t.hasCatalog){o?.(`Unknown command ${t.name}. Type / to see this agent's commands.`);return}}}i(n,m.length?m:void 0),l(``),h([]),requestAnimationFrame(ke)}let Ie=le?`Choose model`:e.catalogs.currentModel?.label||e.catalogs.currentModel?.id||`Choose a model`,Le=String(oe?.displayName||oe?.name||oe?.id||e.catalogs.currentAgentName||`Choose an agent`),Re=e.draft.repo?e.draft.branch?`${e.draft.repo} @ ${e.draft.branch}`:e.draft.repo:`Choose repository`,ze=e.draft.repo?e.draft.branch?`Repository ${e.draft.repo} (branch ${e.draft.branch})`:`Repository ${e.draft.repo} (default branch)`:`Choose repository`,Be=Mt.find(t=>t.id===e.draft.sandbox),Ve=Mt.find(t=>t.id===e.settings.nodeSettings?.defaultSandbox),Ue=Be?Be.label:Ve?Ve.label:e.settings.nodeSettings?.defaultSandbox??`Default`,We=e.catalogs.runtimes.find(t=>t.id===e.catalogs.selectedAgentId),Ge=At(We)?Be?Be.hint:`Protection for this session (machine default)`:`${e.catalogs.currentAgentName||`This agent`} can't ask for approval — treated as full access`,Ke=!t&&(!!c.trim()||m.length>0),qe=_e&&!!e.draft.ephemeralConfig;return(0,K.jsxs)(K.Fragment,{children:[_e&&(0,K.jsxs)(`div`,{className:`composer-lead`,"aria-label":`Session setup`,children:[(0,K.jsxs)(`button`,{type:`button`,className:`btn sm ghost repo-pill`,onClick:()=>d(`repo`),title:ze,children:[(0,K.jsx)(cs,{}),(0,K.jsx)(`span`,{className:`pill-label`,children:Re})]}),(0,K.jsxs)(`button`,{type:`button`,className:`btn sm ghost sandbox-pill`,onClick:()=>d(`sandbox`),title:Ge,"aria-label":`Protection: ${Ue}`,children:[(0,K.jsx)(`span`,{className:`pill-glyph`,children:`◈`}),(0,K.jsx)(`span`,{className:`pill-label`,children:Ue})]})]}),ve&&e.activeSession.activeSessionId&&(()=>{let t=e.activeSession.activeSessionId;return(0,K.jsx)(qo,{standby:ve,onOpenOnOwner:()=>R.openSessionOnNode(t,void 0,ve.ownerId),onContinueHere:async()=>{try{await R.promoteSession(t,e.connection.currentNodeId??``),R.store.setNotice(`Continuing this session on this machine.`)}catch(e){R.store.setError(e instanceof Error?e.message:String(e))}}})})(),e.activeSession.activeSessionId&&(0,K.jsx)(Ko,{sessionId:e.activeSession.activeSessionId,composerEmpty:!c.trim(),onUseDraft:e=>{l(e),requestAnimationFrame(()=>{ke(),me.current?.focus()})}}),e.activeSession.activeSessionId&&(0,K.jsx)(Vo,{sessionId:e.activeSession.activeSessionId,items:F,canSteer:I,busy:r,onError:o}),A&&(0,K.jsxs)(`div`,{className:`banner`,"data-tone":`warn`,role:`alert`,children:[(0,K.jsx)(`span`,{className:`banner-text`,children:`The agent didn't confirm it stopped.`}),(0,K.jsx)(`button`,{type:`button`,className:`btn sm banner-action`,onClick:()=>location.reload(),children:`Reload`})]}),(0,K.jsx)(`form`,{ref:ge,className:`composer`,onSubmit:e=>{e.preventDefault(),Fe()},children:(0,K.jsxs)(`div`,{className:`composer-card${D?` dragging`:``}`,onDragEnter:e=>{!t&&ss(e.dataTransfer)&&(e.preventDefault(),ie.current+=1,O(!0))},onDragOver:e=>{!t&&ss(e.dataTransfer)&&e.preventDefault()},onDragLeave:()=>{ie.current!==0&&(--ie.current,ie.current===0&&O(!1))},onDrop:e=>{!t&&ss(e.dataTransfer)&&(e.preventDefault(),ie.current=0,O(!1),Ae(e.dataTransfer.files))},children:[D&&(0,K.jsx)(`div`,{className:`composer-drop`,"aria-hidden":!0,children:(0,K.jsx)(`span`,{children:`Drop files to attach`})}),De.length>0&&(0,K.jsx)(`div`,{className:`menu slash-menu`,role:`listbox`,"aria-label":`Commands`,children:De.map((e,t)=>{let n=Math.min(y,De.length-1);return(0,K.jsxs)(`button`,{type:`button`,className:`menu-item slash-item${t===n?` active`:``}`,role:`option`,"aria-selected":t===n,onMouseDown:t=>{t.preventDefault(),Pe(e)},children:[(0,K.jsx)(`span`,{className:`slash-name`,children:e.name}),(0,K.jsx)(`span`,{className:`slash-desc`,children:e.description})]},e.name)})}),Oe&&(0,K.jsx)(`div`,{className:`menu slash-menu slash-empty`,role:`status`,children:pe.length===0?`This agent has no slash commands.`:`No matching command — press Esc to send as a message.`}),_.length>0&&(0,K.jsxs)(`div`,{className:`attachment-recovery`,role:`status`,children:[(0,K.jsxs)(`span`,{children:[`Reload preserved metadata for `,_.map(e=>e.name).join(`, `),`, not file contents. Re-select before sending.`]}),(0,K.jsx)(`button`,{type:`button`,className:`btn ghost`,onClick:()=>v([]),children:`Clear`})]}),(m.length>0||M>0)&&(0,K.jsxs)(`div`,{className:`attach-chips`,children:[M>0&&(0,K.jsxs)(`span`,{className:`attach-chip reading`,"aria-live":`polite`,children:[(0,K.jsx)(ft,{size:`xs`}),`Reading file`,M>1?`s`:``,`…`]}),m.map((e,t)=>{let n=os(e);return(0,K.jsxs)(`span`,{className:`attach-chip${e.omitted?` omitted`:``}${n?` has-thumb`:``}`,title:e.omitted?`File could not be read — not attached`:e.name,children:[n?(0,K.jsx)(`button`,{type:`button`,className:`attach-thumb-btn`,onClick:()=>re(n),"aria-label":`View ${e.name}`,title:`View ${e.name}`,children:(0,K.jsx)(`img`,{className:`attach-thumb`,src:n,alt:e.name})}):(0,K.jsx)(`span`,{className:`attach-glyph`,children:e.kind===`image`?`🖼`:`📄`}),(0,K.jsx)(`span`,{className:`attach-name`,children:e.name}),(0,K.jsx)(`button`,{type:`button`,className:`attach-remove`,onClick:()=>je(t),"aria-label":`Remove ${e.name}`,children:`✕`})]},`${e.name}-${t}`)})]}),T&&(0,K.jsx)(vt,{engine:T,onResult:Ee,onCancel:()=>E(null),onError:e=>o?.(e)}),(0,K.jsx)(`textarea`,{ref:me,className:`composer-input`,placeholder:t?n||`Connecting…`:qe?`Describe your first task…`:`Message your agent…`,rows:2,hidden:!!T,value:c,disabled:t,onFocus:()=>{Te.current=!0},onBlur:()=>{t||(Te.current=!1)},onPaste:e=>{let t=e.clipboardData?.files;t&&t.length&&Array.from(t).some(e=>e.type.startsWith(`image/`))&&(e.preventDefault(),Ae(t))},onChange:e=>{l(e.target.value),C(!1),x(0),ke()},onKeyDown:e=>{if(De.length>0){if(e.key===`ArrowDown`){e.preventDefault(),x(e=>Math.min(e+1,De.length-1));return}if(e.key===`ArrowUp`){e.preventDefault(),x(e=>Math.max(e-1,0));return}if(e.key===`Escape`){e.preventDefault(),C(!0);return}if(e.key===`Enter`&&!e.shiftKey||e.key===`Tab`){e.preventDefault();let t=De[Math.min(y,De.length-1)];t&&Pe(t);return}}e.key!==`Enter`||e.shiftKey||rs()||(e.preventDefault(),Fe())}}),(0,K.jsxs)(`div`,{className:`composer-actions`,hidden:!!T,children:[(0,K.jsx)(`input`,{ref:he,type:`file`,multiple:!0,hidden:!0,onChange:e=>void Ae(e.target.files)}),(0,K.jsxs)(`div`,{className:`composer-meta`,children:[(0,K.jsx)(`button`,{type:`button`,className:`btn sm ghost attach-pill`,onClick:()=>he.current?.click(),disabled:t,title:`Attach files`,"aria-label":`Attach files`,children:(0,K.jsx)(`span`,{className:`pill-glyph`,children:(0,K.jsx)(us,{})})}),(0,K.jsxs)(`button`,{type:`button`,className:`btn sm ghost agent-pill`,onClick:()=>d(`agent`),title:`Agent: ${Le}`,children:[(0,K.jsx)(`span`,{className:`pill-glyph`,children:(0,K.jsx)(ds,{})}),(0,K.jsx)(`span`,{className:`pill-label`,children:Le})]}),(0,K.jsxs)(`button`,{type:`button`,className:`btn sm ghost model-pill`,"data-pending-model":le||void 0,onClick:()=>{ue&&d(`model`)},disabled:!ue,title:ue?`Model: ${Ie}`:le?`Choose a model after startup, before your saved first message is sent`:`This agent uses its own default model`,children:[(0,K.jsx)(`span`,{className:`pill-glyph`,children:(0,K.jsx)(fs,{})}),(0,K.jsx)(`span`,{className:`pill-label`,children:e.catalogs.currentModel&&!le?ps(Ie,Le):Ie})]})]}),(0,K.jsx)(`button`,{type:`button`,className:`composer-btn mic`,onClick:z,disabled:t,title:`Voice input`,"aria-label":`Voice input`,children:(0,K.jsx)(ls,{})}),r&&Ke&&I&&(0,K.jsx)(`button`,{type:`button`,className:`composer-btn steer`,onClick:()=>{R.steerNow(c,m.length?m:void 0)&&Me()},title:`Steer current turn — inject this now instead of queueing it`,"aria-label":`Steer current turn`,children:`⚡`}),r&&!c.trim()&&(0,K.jsx)(`button`,{type:`button`,className:`composer-btn stop${k?` is-stopping`:``}`,onClick:ae,title:k?`Stopping`:`Stop`,"aria-label":k?`Stopping current turn`:`Stop current turn`,disabled:k,children:k?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`span`,{className:`working-dots`,"aria-hidden":!0,children:[(0,K.jsx)(`i`,{}),(0,K.jsx)(`i`,{}),(0,K.jsx)(`i`,{})]}),(0,K.jsx)(`span`,{children:`Stopping…`})]}):(0,K.jsx)(`svg`,{viewBox:`0 0 24 24`,width:`14`,height:`14`,"aria-hidden":!0,children:(0,K.jsx)(`rect`,{x:`4`,y:`4`,width:`16`,height:`16`,rx:`3`,fill:`currentColor`})})}),(!r||Ke)&&(0,K.jsx)(`button`,{type:`submit`,className:`composer-btn send`,disabled:!Ke,title:r?`Queue follow-up`:qe?`Launch Machine and send task`:`Send`,"aria-label":qe?`Launch Machine and send task`:r?`Queue follow-up`:`Send`,children:(0,K.jsxs)(`svg`,{viewBox:`0 0 24 24`,width:`20`,height:`20`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.4`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:[(0,K.jsx)(`path`,{d:`M12 19V5`}),(0,K.jsx)(`path`,{d:`m5 12 7-7 7 7`})]})})]})]})}),u===`repo`&&(0,K.jsx)(Oo,{state:e,onClose:()=>d(null)}),u===`sandbox`&&(0,K.jsx)(Ao,{state:e,onClose:()=>d(null)}),u===`agent`&&(0,K.jsx)(Mo,{state:e,onClose:()=>d(null)}),u===`model`&&ue&&(0,K.jsx)(J,{state:e,onClose:()=>d(null)}),te&&(0,Qn.createPortal)((0,K.jsxs)(`div`,{className:`image-viewer`,role:`dialog`,"aria-modal":`true`,onClick:()=>re(null),children:[(0,K.jsx)(`img`,{className:`image-viewer-img`,src:te,alt:`Attachment preview`,onClick:e=>e.stopPropagation()}),(0,K.jsx)(`button`,{type:`button`,className:`image-viewer-close`,onClick:()=>re(null),"aria-label":`Close preview`,children:`×`})]}),document.body)]})}function hs(e,t){let n=String(e||``);return!!t.find(e=>e.id===n||e.id===`${n}-approvals`||e.id===`${n}-code-sdk`)?.capabilities?.sessionDiscovery}var gs=t((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0<n;){var r=n-1>>>1,a=e[r];if(0<i(a,t))e[r]=t,e[n]=a,n=r;else break a}}function n(e){return e.length===0?null:e[0]}function r(e){if(e.length===0)return null;var t=e[0],n=e.pop();if(n!==t){e[0]=n;a:for(var r=0,a=e.length,o=a>>>1;r<o;){var s=2*(r+1)-1,c=e[s],l=s+1,u=e[l];if(0>i(c,n))l<a&&0>i(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(l<a&&0>i(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m){if(n(c)!==null)m=!0,S||(S=!0,O());else{var t=n(l);t!==null&&A(x,t.startTime-e)}}}var S=!1,C=-1,w=5,T=-1;function E(){return g?!0:!(e.unstable_now()-T<w)}function D(){if(g=!1,S){var t=e.unstable_now();T=t;var i=!0;try{a:{m=!1,h&&(h=!1,v(C),C=-1),p=!0;var a=f;try{b:{for(b(t),d=n(c);d!==null&&!(d.expirationTime>t&&E());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&A(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?O():S=!1}}}var O;if(typeof y==`function`)O=function(){y(D)};else if(typeof MessageChannel<`u`){var k=new MessageChannel,ee=k.port2;k.port1.onmessage=D,O=function(){ee.postMessage(null)}}else O=function(){_(D,0)};function A(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125<e?console.error(`forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported`):w=0<e?Math.floor(1e3/e):5},e.unstable_getCurrentPriorityLevel=function(){return f},e.unstable_next=function(e){switch(f){case 1:case 2:case 3:var t=3;break;default:t=f}var n=f;f=t;try{return e()}finally{f=n}},e.unstable_requestPaint=function(){g=!0},e.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=f;f=e;try{return t()}finally{f=n}},e.unstable_scheduleCallback=function(r,i,a){var o=e.unstable_now();switch(typeof a==`object`&&a?(a=a.delay,a=typeof a==`number`&&0<a?o+a:o):a=o,r){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return s=a+s,r={id:u++,callback:i,priorityLevel:r,startTime:a,expirationTime:s,sortIndex:-1},a>o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,A(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,O()))),r},e.unstable_shouldYield=E,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),_s=t(((e,t)=>{t.exports=gs()})),vs=t((e=>{var t=_s(),n=ie(),r=Ue();function i(e){var t=`https://react.dev/errors/`+e;if(1<arguments.length){t+=`?args[]=`+encodeURIComponent(arguments[1]);for(var n=2;n<arguments.length;n++)t+=`&args[]=`+encodeURIComponent(arguments[n])}return`Minified React error #`+e+`; visit `+t+` for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`}function a(e){return!(!e||e.nodeType!==1&&e.nodeType!==9&&e.nodeType!==11)}function o(e){for(var t=e,n=t;n&&!n.alternate;)t=n,t.flags&4098&&(e=t.return),n=t.return;for(;t.return;)t=t.return;return t.tag===3?e:null}function s(e){if(e.tag===13){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function c(e){if(e.tag===31){var t=e.memoizedState;if(t===null&&(e=e.alternate,e!==null&&(t=e.memoizedState)),t!==null)return t.dehydrated}return null}function l(e){if(o(e)!==e)throw Error(i(188))}function u(e){var t=e.alternate;if(!t){if(t=o(e),t===null)throw Error(i(188));return t===e?e:null}for(var n=e,r=t;;){var a=n.return;if(a===null)break;var s=a.alternate;if(s===null){if(r=a.return,r!==null){n=r;continue}break}if(a.child===s.child){for(s=a.child;s;){if(s===n)return l(a),e;if(s===r)return l(a),t;s=s.sibling}throw Error(i(188))}if(n.return!==r.return)n=a,r=s;else{for(var c=!1,u=a.child;u;){if(u===n){c=!0,n=a,r=s;break}if(u===r){c=!0,r=a,n=s;break}u=u.sibling}if(!c){for(u=s.child;u;){if(u===n){c=!0,n=s,r=a;break}if(u===r){c=!0,r=s,n=a;break}u=u.sibling}if(!c)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(n.tag!==3)throw Error(i(188));return n.stateNode.current===n?e:t}function d(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e;for(e=e.child;e!==null;){if(t=d(e),t!==null)return t;e=e.sibling}return null}function f(e,t,n,r,i,a){for(;e!==null;){if((e.tag===5||e.tag===27||e.tag===6)&&n(e,r,i,a)||(e.tag!==22||e.memoizedState===null)&&(t||e.tag!==5&&e.tag!==27)&&f(e.child,t,n,r,i,a))return!0;e=e.sibling}return!1}function p(e){for(e=e.return;e!==null;){if(e.tag===3||e.tag===5||e.tag===27)return e;e=e.return}return null}function m(e){var t=!1;for(e=e.return;e!==null&&(e.tag===4&&(t=!0),e.tag!==3&&e.tag!==5&&e.tag!==27);)e=e.return;return t}function h(e){var t=[null,null],n=p(e);return n===null||g(t,e,n.child,{foundSelf:!1}),t}function g(e,t,n,r){for(;n!==null;){if(n===t)r.foundSelf=!0;else if(n.tag===5||n.tag===27||n.tag===6){if(r.foundSelf)return e[1]=n,!0;e[0]=n}else if((n.tag!==22||n.memoizedState===null)&&g(e,t,n.child,r))return!0;n=n.sibling}return!1}function _(e){switch(e.tag){case 5:case 27:case 6:return e.stateNode;case 3:return e.stateNode.containerInfo;default:throw Error(i(559))}}var v=null,y=null;function b(e,t,n){return e===n||e===t&&(v=e,!0)}function x(e,t,n){return e===n?(y=e,!1):e===t&&(y!==null&&(v=e),!0)}function S(e){if(e===null)return null;do e=e===null?null:e.return;while(e&&e.tag!==5&&e.tag!==27&&e.tag!==3);return e||null}function C(e,t,n){for(var r=0,i=e;i;i=n(i))r++;i=0;for(var a=t;a;a=n(a))i++;for(;0<r-i;)e=n(e),r--;for(;0<i-r;)t=n(t),i--;for(;r--;){if(e===t||t!==null&&e===t.alternate)return e;e=n(e),t=n(t)}return null}var w=Object.assign,T=Symbol.for(`react.element`),E=Symbol.for(`react.transitional.element`),D=Symbol.for(`react.portal`),O=Symbol.for(`react.fragment`),k=Symbol.for(`react.strict_mode`),ee=Symbol.for(`react.profiler`),A=Symbol.for(`react.consumer`),j=Symbol.for(`react.context`),M=Symbol.for(`react.forward_ref`),N=Symbol.for(`react.suspense`),P=Symbol.for(`react.suspense_list`),te=Symbol.for(`react.memo`),ne=Symbol.for(`react.lazy`),re=Symbol.for(`react.activity`),ae=Symbol.for(`react.legacy_hidden`),oe=Symbol.for(`react.memo_cache_sentinel`),se=Symbol.for(`react.view_transition`),ce=Symbol.for(`react.recoverable`),le=Symbol.iterator;function ue(e){return typeof e!=`object`||!e?null:(e=le&&e[le]||e[`@@iterator`],typeof e==`function`?e:null)}var de=Symbol.for(`react.client.reference`);function fe(e){if(e==null)return null;if(typeof e==`function`)return e.$$typeof===de?null:e.displayName||e.name||null;if(typeof e==`string`)return e;switch(e){case O:return`Fragment`;case ee:return`Profiler`;case k:return`StrictMode`;case N:return`Suspense`;case P:return`SuspenseList`;case re:return`Activity`;case se:return`ViewTransition`}if(typeof e==`object`)switch(e.$$typeof){case D:return`Portal`;case j:return e.displayName||`Context`;case A:return(e._context.displayName||`Context`)+`.Consumer`;case M:var t=e.render;return e=e.displayName,e||=(e=t.displayName||t.name||``,e===``?`ForwardRef`:`ForwardRef(`+e+`)`),e;case te:return t=e.displayName||null,t===null?fe(e.type)||`Memo`:t;case ne:t=e._payload,e=e._init;try{return fe(e(t))}catch{}}return null}var pe=Array.isArray,F=n.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,I=r.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,me={pending:!1,data:null,method:null,action:null},he=[],ge=-1;function _e(e){return{current:e}}function ve(e){0>ge||(e.current=he[ge],he[ge]=null,ge--)}function L(e,t){ge++,he[ge]=e.current,e.current=t}var ye=_e(null),be=_e(null),R=_e(null),xe=_e(null);function Se(e,t){switch(L(R,t),L(be,e),L(ye,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?up(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=up(t),e=dp(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}ve(ye),L(ye,e)}function Ce(){ve(ye),ve(be),ve(R)}function we(e){var t=e.memoizedState;t!==null&&(sh._currentValue=t.memoizedState,L(xe,e)),t=ye.current;var n=dp(t,e.type);t!==n&&(L(be,e),L(ye,n))}function Te(e){be.current===e&&(ve(ye),ve(be)),xe.current===e&&(ve(xe),sh._currentValue=me)}var z,Ee;function De(e){if(z===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);z=t&&t[1]||``,Ee=-1<e.stack.indexOf(`
@@ -20,7 +20,7 @@ Error generating stack: `+e.message+`
20
20
  `),attachments:i}}async function ol(e,t=globalThis.caches){if(!nl.test(e)||!t)return;let n=await t.open(tl);for(let t of await n.keys())new URL(t.url).pathname.startsWith(`/__share-inbox/${e}/`)&&await n.delete(t)}function sl(){let{connection:e,activeSession:t}=je(),[n]=(0,G.useState)(x),[r,i]=(0,G.useState)(n?`Opening your app preview…`:null),a=!!n&&e.status===`online`&&t.activeSessionId===n?.sessionId;return(0,G.useEffect)(()=>{n&&a&&(v(),R.appCommand(`apps.open`,n.sessionId,{appId:n.appId,viewId:n.viewId,direct:!0}).then(e=>{let t=e,r=t.kind===`web`?new URL(t.url):null;if(!r||r.protocol!==`https:`||r.origin===location.origin)throw Error(`Unexpected preview link.`);location.replace(`${r.href}~${encodeURIComponent(n.path)}`)}).catch(e=>i(`Couldn’t reopen the preview: ${e instanceof Error?e.message:`try again from Apps`}.`)))},[n,a]),r}function cl({progress:e,onClose:t}){let n=(0,G.useRef)(null),r=(0,G.useId)(),i=(0,G.useId)(),a=e.status===`working`;return nt(()=>{a||t()}),(0,G.useEffect)(()=>{let e=n.current;return e.showModal(),()=>e.close()},[]),(0,Qn.createPortal)((0,K.jsxs)(`dialog`,{ref:n,tabIndex:-1,className:`app-dialog-body fork-progress-dialog`,"aria-labelledby":r,"aria-describedby":i,onKeyDown:e=>{a&&e.key===`Tab`&&(e.preventDefault(),n.current?.focus())},onCancel:e=>{e.preventDefault(),a||t()},children:[(0,K.jsxs)(`h3`,{id:r,className:`run-sheet-title`,children:[a&&(0,K.jsx)(ft,{size:`sm`}),a?`Forking session`:`Fork needs attention`]}),(0,K.jsx)(`p`,{id:i,role:a?`status`:`alert`,children:e.message}),a?(0,K.jsx)(`p`,{children:`You’ll be taken to the new session when it’s ready.`}):(0,K.jsx)(`div`,{className:`app-dialog-actions`,children:(0,K.jsx)(`button`,{className:`btn primary`,onClick:t,children:`Close`})})]}),document.body)}var ll=1e4,ul={published:null,offers:[],noteTimes:[]};function dl(e,t){let{connection:n}=je(),r=n.status===`online`,i=`${n.currentNodeId??``}:${e??``}`,[a,o]=(0,G.useState)({key:``,...ul});return(0,G.useEffect)(()=>{if(!e||!r)return;let n=!0,a=0,s=()=>{let t=++a,r=R.appCommand(`apps.offers`,e).then(e=>e.offers??[],()=>[]),s=R.appCommand(`apps.list`,e).then(e=>e.apps??null,()=>null);Promise.all([s,r]).then(([e,r])=>{let s=(e??[]).flatMap(e=>e.views.flatMap(e=>e.kind===`web`?(e.notes??[]).map(e=>e.at):[]));n&&t===a&&o({key:i,published:e?.length??null,offers:r,noteTimes:s})})};s();let c=t?setInterval(s,ll):void 0,l=()=>{document.visibilityState===`visible`&&s()};document.addEventListener(`visibilitychange`,l);let u=R.onAppsChanged(t=>{t===e&&s()});return()=>{n=!1,c&&clearInterval(c),document.removeEventListener(`visibilitychange`,l),u()}},[i,e,r,t]),r&&a.key===i?a:ul}function fl(e){return Math.min(3e4,Math.max(6e3,e.trim().length*45))}function pl(){let{presentation:{error:e,errorActions:t}}=je(),[n,r]=(0,G.useState)(!1),[o,s]=(0,G.useState)(null);if((0,G.useEffect)(()=>{if(r(!1),!e||c()&&t.length>0)return;let n=setTimeout(()=>R.store.setError(``),fl(e));return()=>clearTimeout(n)},[e,t]),!e)return null;let l=!c()&&t.length>0?a():i(e.trim()),u=l.includes(`
21
21
  `)||l.length>240;return(0,K.jsxs)(Hs,{tone:`danger`,className:`error-toast${n?` expanded`:``}`,role:`alert`,children:[(0,K.jsx)(Us,{tone:`danger`,children:`!`}),(0,K.jsxs)(`div`,{className:`error-toast-content`,children:[(0,K.jsx)(`span`,{className:`error-toast-text`,children:l}),u&&(0,K.jsx)(`button`,{className:`error-toast-details`,type:`button`,onClick:()=>r(e=>!e),"aria-expanded":n,children:n?`Hide details`:`Show details`}),c()&&t.length>0&&(0,K.jsx)(`div`,{className:`error-toast-actions`,children:t.map(e=>(0,K.jsx)(`button`,{className:`btn small${e.kind===`primary`?` primary`:``}`,type:`button`,disabled:o!==null,onClick:()=>{s(e.id),R.invokeAccountExtensionAction(e.id).then(async({url:e})=>{e?await h(e):R.store.setError(``)}).catch(e=>R.store.setError(e instanceof Error?e.message:String(e))).finally(()=>s(null))},children:o===e.id?`Opening…`:e.label},e.id))})]}),(0,K.jsx)(`button`,{className:`error-toast-close`,onClick:()=>R.store.setError(``),"aria-label":`Dismiss`,children:`×`})]})}function ml(e){return Math.min(3e4,Math.max(6e3,e.trim().length*45))}function hl(){let{presentation:{notice:e}}=je();return(0,G.useEffect)(()=>{if(!e)return;let t=setTimeout(()=>R.store.setNotice(``),ml(e));return()=>clearTimeout(t)},[e]),e?(0,K.jsxs)(Hs,{tone:`ok`,className:`notice-toast`,role:`status`,children:[(0,K.jsx)(Us,{tone:`ok`,children:`✓`}),(0,K.jsx)(`span`,{className:`notice-toast-text`,children:e.trim()}),(0,K.jsx)(`button`,{className:`notice-toast-close`,onClick:()=>R.store.setNotice(``),"aria-label":`Dismiss`,children:`×`})]}):null}function gl({onClose:e,firstRun:t=!1}){let[n,r]=(0,G.useState)([]),[i,a]=(0,G.useState)(null),[o,s]=(0,G.useState)(!1),c=()=>R.listEphemeralKeys().then(r).catch(()=>{}),l=D.find(e=>e.id===`fly`)??D[0],u=D.filter(e=>e.id!==l?.id);(0,G.useEffect)(()=>{c()},[]);let d=D.find(e=>e.id===i);return(0,K.jsx)(B,{title:d?d.name:`Connect a cloud provider`,onClose:e,headExtra:i?(0,K.jsx)(`button`,{className:`sheet-back`,onClick:()=>a(null),"aria-label":`Back`,children:`‹`}):void 0,children:i?(0,K.jsx)(_l,{providerId:i,onKeysChanged:c,onDone:e}):(0,K.jsxs)(`div`,{className:`picker-list`,children:[(0,K.jsx)(`p`,{className:`muted settings-intro`,children:t?`Connect your own cloud account to run agents on temporary servers. Pick a provider, paste a token, and you're ready — your first message launches the machine.`:`Pick a provider and paste a token. Connecting one adds an isolated machine profile you can pick in the machine menu.`}),l&&(()=>{let e=n.find(e=>e.id===l.id);return(0,K.jsx)(V,{title:`${l.name} · Recommended`,meta:l.blurb,right:e?.configured?(0,K.jsx)(z,{tone:`ok`,children:`Connected`}):(0,K.jsx)(z,{children:`Stable`}),onClick:()=>a(l.id)},l.id)})(),(0,K.jsx)(`button`,{type:`button`,className:`btn ghost block`,"aria-expanded":o,onClick:()=>s(e=>!e),children:o?`Hide other cloud providers`:`Other cloud providers`}),o&&u.map(e=>{let t=n.find(t=>t.id===e.id);return(0,K.jsx)(V,{title:e.name,meta:e.blurb,right:t?.configured?(0,K.jsx)(z,{tone:`ok`,children:`Connected`}):e.hostedOnly?(0,K.jsx)(z,{tone:`accent`,children:`Server-managed`}):(0,K.jsx)(z,{children:`Available`}),onClick:()=>a(e.id)},e.id)})]})})}function _l({providerId:e,onKeysChanged:t,onDone:n}){let r=D.find(t=>t.id===e),[i,a]=(0,G.useState)(``),[o,s]=(0,G.useState)(!1),[c,l]=(0,G.useState)(!1),[u,d]=(0,G.useState)(!1),[f,p]=(0,G.useState)(null),[m,h]=(0,G.useState)(null),[g,_]=(0,G.useState)(null),[v,y]=(0,G.useState)(()=>R.getDeviceVaultSyncState());return(0,G.useEffect)(()=>{R.getEphemeralToken(e).then(e=>s(!!e)).catch(()=>{}),y(R.getDeviceVaultSyncState())},[e]),r.hostedOnly?(0,K.jsxs)(`div`,{className:`settings-form`,children:[(0,K.jsx)(z,{tone:`accent`,children:`Server-managed provider`}),(0,K.jsxs)(`p`,{className:`muted`,children:[r.name,` must be managed by Bivy's server so the machine is always deleted and billing stops.`]}),(0,K.jsx)(`p`,{className:`muted small`,children:`Add it in Settings → Cloud machine profiles, then turn on “Run automations while I'm offline” inside the profile.`})]}):(0,K.jsxs)(`div`,{className:`settings-form`,children:[o?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(z,{tone:`ok`,children:[`✓ `,r.name,` connected`]}),(0,K.jsx)(`p`,{className:`muted small`,children:`Your cloud profile is ready. Pick it and send your first message; Bivy starts the machine automatically. Adjust its region, size, or lifetime in Settings → Cloud machine profiles.`}),v.phase!==`idle`&&(0,K.jsxs)(z,{role:`status`,tone:v.phase===`failed`?`danger`:v.phase===`synced`?`ok`:void 0,children:[v.phase===`failed`?`Credential sync pending: ${v.failure??`retry needed`}`:v.phase===`synced`?`Credentials synced`:`Credential sync pending`,v.phase===`failed`&&(0,K.jsx)(`button`,{className:`btn ghost`,onClick:()=>R.syncDeviceVault().then(()=>y(R.getDeviceVaultSyncState())).catch(()=>y(R.getDeviceVaultSyncState())),children:`Retry`})]}),(0,K.jsxs)(`div`,{className:`row-actions`,children:[(0,K.jsx)(`button`,{className:`btn primary`,disabled:u||r.hostedOnly,onClick:async()=>{if(!u){d(!0),p(null);try{let t=await R.defaultEphemeralRunner(e);t&&_(t)}catch(e){p(String(e.message||e))}finally{d(!1)}}},children:u?`…`:r.hostedOnly?`Device launch unavailable`:`Use this profile`}),(0,K.jsx)(`button`,{className:`btn danger-ghost`,onClick:()=>h({title:`Remove provider token?`,message:`Forget the ${r.name} token on this device?`,action:()=>R.removeEphemeralToken(e).then(()=>{s(!1),t()})}),children:`Remove token`})]})]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`p`,{className:`muted`,children:r.blurb}),(0,K.jsx)(`ol`,{className:`eph-steps`,children:r.steps.map((e,t)=>(0,K.jsx)(`li`,{children:e},t))}),(0,K.jsx)(`div`,{className:`row-actions`,children:r.links.map(e=>(0,K.jsx)(`a`,{className:`btn ghost`,href:e.url,target:`_blank`,rel:`noopener`,children:e.label},e.url))}),(0,K.jsx)(`label`,{className:`field-label`,children:r.tokenLabel}),(0,K.jsx)(`input`,{className:`picker-search`,type:`password`,value:i,onChange:e=>a(e.target.value),placeholder:`Paste token`}),(0,K.jsx)(`button`,{className:`btn primary`,disabled:!i.trim()||c,onClick:async()=>{if(!c){l(!0),p(null);try{let n=await R.connectEphemeralProvider(e,i.trim());a(``),s(!0),t(),y(R.getDeviceVaultSyncState()),n&&_(n)}catch(e){p(String(e.message||e))}finally{l(!1)}}},children:c?`Connecting…`:`Connect`}),(0,K.jsx)(`p`,{className:`muted small`,children:`The token is end-to-end encrypted in your key vault, synced to your signed-in devices, and sent only to the selected provider. To run automations while you're offline, opt in from the profile in Settings → Cloud machine profiles — it reuses this token, nothing to paste twice.`})]}),g&&(()=>{let e=de(g.provider),t=e?.sizes.find(e=>e.id===g.size),i=pe(t,g.ttlMinutes,e?.currency),a=g.region||e?.defaultRegion||`provider default`,o=g.teardownOnAgentFinish?`It will be destroyed when the agent finishes; the TTL remains a backstop.`:`It will remain billable until its ${g.ttlMinutes??`provider-default`}-minute TTL or manual teardown.`;return(0,K.jsx)(Ye,{title:`Use this billable machine profile?`,message:`${r.name} will launch an isolated machine in ${a}${t?` (${t.label})`:``} when you send your first message. ${i||`The provider's live rate applies.`} ${o}`,confirmLabel:`Use profile`,onCancel:()=>_(null),onConfirm:()=>{R.pickDraftEphemeralRunner(g),_(null),n()}})})(),m&&(0,K.jsx)(Ye,{title:m.title,message:m.message,confirmLabel:`Remove`,danger:!0,onCancel:()=>h(null),onConfirm:()=>{m.action(),h(null)}}),f&&(0,K.jsx)(z,{tone:`danger`,children:f})]})}function vl({state:e}){let t=e.presentation.needsModelAuth;if(!t||t.nodeId!==e.connection.currentNodeId)return null;let n=e.catalogs.providers.find(e=>e.id===t.provider)?.name||t.provider,r=!!t.reason;return(0,K.jsx)(B,{title:`Sign in to your model`,onClose:()=>R.dismissModelAuthPrompt(),children:(0,K.jsxs)(`div`,{className:`settings-form`,children:[(0,K.jsx)(`p`,{className:`muted settings-intro`,children:r?`Your agent couldn't reach ${n} — its credential is missing or expired. Sign in again to keep going.`:`This temporary Machine needs a model before it can run your task. Sign in once with ${n}. The credential is encrypted for reuse by future isolated Machines; on Bivy Cloud this optional unattended path uses hosted credential custody.`}),(0,K.jsx)(jt,{state:e,providerId:t.provider,apiKeyProvider:Se(t.provider)})]})})}function yl(e){return[`I'm new to Bivy. My app runs with \`${e.command}\` on port ${e.port}; I want to open it in a preview and mark what's wrong.`,`Publish it with \`bivy app publish\` so the preview shows your edits: if you're working in the folder it already runs in, publish port ${e.port}; otherwise have Bivy run it from your folder on a free port (a "start" command in the manifest).`,`Don't change anything else yet; once it's published, reply in one short line that it's ready.`,"When my marks arrive, fix them and check your fix. Then make a share link with `bivy app share` and send it to me with `bivy notify`, so it reaches my phone if I've closed the app."].join(`
22
22
  `)}var bl=[`I'm new to Bivy. Make one small, useful change in this workspace that I'd keep: a few minutes of work, not a chore like running the tests. If the workspace is empty, build something small I can open.`,"Pick it yourself. If you really need a decision from me, ask with `bivy ask`.","If it's something I can see, run it and publish a preview with `bivy app publish`.","Last step, always: send me the result in one line with `bivy notify`, since I may have closed the app. Keep replies short, I'm probably on my phone."].join(`
23
- `),xl=4e3,Sl=e=>e.split(/[\\/]/).filter(Boolean).pop()||e;function Cl({machineName:e,onOpenApp:t,onFirstChange:n}){let r=e||`your machine`,[i,a]=(0,G.useState)(null),[o,s]=(0,G.useState)(!1),[c,l]=(0,G.useState)(!1);(0,G.useEffect)(()=>{let e=!0,t=setTimeout(()=>{e&&a(e=>e??[])},xl);return R.appCommand(`apps.offers`,void 0).then(t=>{let n=t.offers??[];e&&a(e=>e??n.filter(e=>typeof e.project==`string`))},()=>{e&&a([])}),R.direct||R.pushStatus().then(t=>{e&&s(t.supported&&!t.subscribed&&t.permission!==`denied`)},()=>{}),()=>{e=!1,clearTimeout(t)}},[]);let u=async e=>{l(!0),o&&await R.enablePush().catch(()=>{}),e()},[d,...f]=i??[];return(0,K.jsxs)(`section`,{className:`card readiness`,"aria-labelledby":`get-started-title`,"aria-busy":i===null,children:[(0,K.jsx)(`p`,{className:`readiness-passed`,role:`status`,children:`✓ Setup complete`}),i===null?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`h2`,{id:`get-started-title`,className:`card-title`,children:`Your agent's first task`}),(0,K.jsxs)(`p`,{className:`card-sub get-started-scan`,role:`status`,children:[(0,K.jsx)(ft,{size:`xs`}),`Looking for apps running on `,r,`…`]})]}):d?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`h2`,{id:`get-started-title`,className:`card-title`,children:[`Mark what's wrong in `,Sl(d.project)]}),(0,K.jsxs)(`p`,{className:`card-sub`,children:[`It's running on `,r,`. The agent opens it here, you tap what's off, and it fixes it and sends you a link to share. It keeps working when you close this app.`]}),(0,K.jsxs)(`p`,{className:`get-started-app card-sub`,children:[(0,K.jsx)(`code`,{children:d.command}),` · port `,d.port]}),(0,K.jsxs)(`div`,{className:`get-started-actions`,children:[(0,K.jsxs)(`button`,{type:`button`,className:`btn sm primary`,disabled:c,onClick:()=>void u(()=>t(d)),children:[`Open `,Sl(d.project),` and mark what's wrong`]}),(0,K.jsx)(`span`,{className:`card-sub`,children:`or type your own task below`})]}),f.length>0&&(0,K.jsxs)(`div`,{className:`get-started-more`,role:`group`,"aria-label":`Other running apps`,children:[(0,K.jsx)(`span`,{className:`card-sub`,children:`Also running:`}),f.slice(0,3).map(e=>(0,K.jsxs)(`button`,{type:`button`,className:`btn sm ghost`,disabled:c,onClick:()=>void u(()=>t(e)),"aria-label":`Open ${Sl(e.project)} on port ${e.port} and mark what's wrong`,children:[Sl(e.project),` · `,e.port]},e.port))]})]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`h2`,{id:`get-started-title`,className:`card-title`,children:`Give your agent a first task`}),(0,K.jsxs)(`p`,{className:`card-sub`,children:[`It runs on `,r,` and keeps working when you close this app. It'll make one small, useful change here and tell your phone when it's done.`]}),(0,K.jsxs)(`div`,{className:`get-started-actions`,children:[(0,K.jsx)(`button`,{type:`button`,className:`btn sm primary`,disabled:c,onClick:()=>void u(n),children:`Make one small improvement`}),(0,K.jsx)(`span`,{className:`card-sub`,children:`or type your own task below`})]})]})]})}var wl=`bivy:notify-offer`;function Tl({working:e,machineName:t,onOpenChange:n}){let[r,i]=(0,G.useState)(()=>localStorage.getItem(wl)===`done`),[a,o]=(0,G.useState)(!1),[s,c]=(0,G.useState)(!1),[l,u]=(0,G.useState)(!1),[d,f]=(0,G.useState)(null);(0,G.useEffect)(()=>{if(r||a||!e||R.direct)return;let t=!0;return R.pushStatus().then(e=>{t&&o(e.supported&&!e.subscribed&&e.permission!==`denied`)}).catch(()=>{}),()=>{t=!1}},[r,a,e]),(0,G.useEffect)(()=>{if(!l)return;let e=setTimeout(()=>i(!0),5e3);return()=>clearTimeout(e)},[l]);let p=!r&&a;(0,G.useEffect)(()=>n?.(p),[p]);let m=()=>{localStorage.setItem(wl,`done`),i(!0)},h=async()=>{c(!0),f(null);try{await R.enablePush(),localStorage.setItem(wl,`done`),u(!0)}catch(e){f(e instanceof Error?e.message:String(e))}finally{c(!1)}};return p?l?(0,K.jsx)(`section`,{className:`card next-step`,"aria-label":`Notifications`,children:(0,K.jsx)(`p`,{className:`next-step-ok`,role:`status`,children:`✓ Notifications are on. You can close the app; Bivy will let you know.`})}):(0,K.jsxs)(`section`,{className:`card next-step`,"aria-labelledby":`notify-offer-title`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{id:`notify-offer-title`,children:`Get a notification when it's done?`}),(0,K.jsxs)(`p`,{children:[`The agent keeps working on `,t||`your machine`,` if you close this app. Bivy can tell you when it finishes or needs you.`]}),d&&(0,K.jsx)(`div`,{className:`banner inline`,"data-tone":`danger`,role:`alert`,children:d})]}),(0,K.jsxs)(`div`,{className:`next-step-actions`,children:[(0,K.jsx)(`button`,{type:`button`,className:`btn sm primary`,disabled:s,onClick:()=>void h(),children:s?`Turning on…`:`Turn on notifications`}),(0,K.jsx)(`button`,{type:`button`,className:`btn sm ghost`,disabled:s,onClick:m,children:`Not now`})]})]}):null}function El({nodes:e,ephemeralEnabled:t,onPickNode:n,onEphemeral:r,onRefresh:i}){let a=e.filter(e=>!e.id.startsWith(`eph-`)),[o,s]=(0,G.useState)(null),c=(0,G.useRef)(a.length===0),l=(0,G.useRef)(!1);return(0,G.useEffect)(()=>{let t=o??(c.current&&e.length===1?e[0]?.id:void 0),r=e.find(e=>e.id===t&&e.online&&!e.id.startsWith(`eph-`));r&&!l.current&&(l.current=!0,n(r.id))},[e,o,n]),(0,K.jsxs)(`section`,{className:`connect-runner`,"aria-labelledby":`connect-runner-title`,children:[(0,K.jsxs)(`div`,{className:`connect-hero compact`,children:[(0,K.jsx)(`h2`,{className:`connect-title`,id:`connect-runner-title`,children:a.length>0?`Choose a Machine`:`Connect a Machine`}),(0,K.jsx)(`p`,{className:`connect-sub`,children:a.length>0?`Pick an online machine to start, or add another machine.`:t?`Use a machine with your real repository, services, and warm caches, or launch an isolated machine. Any hosted credential custody is disclosed before enablement.`:`Your agents run here, using your existing environment. Keep your repositories, tools, and agent logins.`})]}),(0,K.jsxs)(`div`,{className:`connect-waiting`,role:`status`,children:[(0,K.jsx)(ft,{size:`sm`}),(0,K.jsx)(`span`,{className:`connect-waiting-text`,children:a.length>0?`Checking for connected machines automatically…`:`Waiting for your machine. This page updates automatically.`}),(0,K.jsx)(`button`,{type:`button`,className:`btn sm ghost`,onClick:i,children:`Check now`})]}),a.length>0&&(0,K.jsxs)(`div`,{className:`connect-nodes`,children:[(0,K.jsx)(`div`,{className:`connect-nodes-head`,children:`Your machines`}),(0,K.jsx)(`div`,{className:`connect-nodes-list`,children:a.map(e=>(0,K.jsxs)(`button`,{type:`button`,className:`connect-node`,onClick:()=>n(e.id),title:e.online?`Start on this Machine`:`This Machine is offline — selecting it will try to reconnect`,children:[(0,K.jsx)(wt,{status:e.online?`online`:`idle`}),(0,K.jsx)(`span`,{className:`connect-node-name`,children:e.name||e.id}),(0,K.jsx)(`span`,{className:`connect-node-status${e.online?` is-online`:``}`,children:e.online?`Online`:`Offline`}),(0,K.jsx)(`svg`,{className:`connect-node-caret`,viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:(0,K.jsx)(`path`,{d:`m9 6 6 6-6 6`})})]},e.id))})]}),(0,K.jsxs)(`div`,{className:`connect-options`,children:[(0,K.jsx)(`div`,{className:`connect-option machine-install-card`,children:(0,K.jsx)(xr,{onEnrolled:s})}),t&&(0,K.jsxs)(`div`,{className:`connect-option`,children:[(0,K.jsxs)(`div`,{className:`connect-option-head`,children:[(0,K.jsx)(`span`,{className:`connect-option-badge`,"aria-hidden":!0,children:(0,K.jsxs)(`svg`,{viewBox:`0 0 24 24`,width:`18`,height:`18`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.7`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,K.jsx)(`path`,{d:`M17.5 19a4.5 4.5 0 0 0 .5-8.97A6 6 0 0 0 6.34 9.2 4 4 0 0 0 7 17`}),(0,K.jsx)(`path`,{d:`M12 12v6m0 0-2.5-2.5M12 18l2.5-2.5`})]})}),(0,K.jsxs)(`div`,{className:`connect-option-copy`,children:[(0,K.jsx)(`h3`,{children:`Launch an isolated Machine`}),(0,K.jsx)(`p`,{children:`Fastest if you don't want to install locally. Start with the recommended cloud, review its estimated cost and teardown policy, then launch explicitly with your first task. Bivy adds no fee.`})]})]}),(0,K.jsx)(`button`,{type:`button`,className:`btn primary connect-option-cta`,onClick:r,children:`Launch isolated Machine`})]})]}),(0,K.jsx)(`p`,{className:`connect-sub`,children:`Next: choose a repository, send your first task, and review the result right here.`})]})}function Dl({status:e,hasCachedTranscript:t,machineName:r}){let i=(0,G.useSyncExternalStore)(Pe,Me),[a,o]=(0,G.useState)(!1),[s,c]=(0,G.useState)(()=>typeof navigator<`u`&&!navigator.onLine);(0,G.useEffect)(()=>{let e=()=>c(!0),t=()=>c(!1);return window.addEventListener(`offline`,e),window.addEventListener(`online`,t),()=>{window.removeEventListener(`offline`,e),window.removeEventListener(`online`,t)}},[]);let l=he(s?`offline`:e,t,i,r),u=l.kind!==`live-control`,d=!n&&i.installChoice!==null&&!i.standalone;return!u&&!d?null:(0,K.jsxs)(K.Fragment,{children:[u&&(0,K.jsx)(`aside`,{className:`pwa-lifecycle`,"aria-label":`App availability`,children:(0,K.jsxs)(`div`,{className:`pwa-lifecycle-copy`,"data-availability":l.kind,children:[(0,K.jsx)(`strong`,{children:l.label}),(0,K.jsx)(`span`,{children:l.detail})]})}),d&&(0,K.jsxs)(`aside`,{className:`pwa-install`,"aria-label":`Install Bivy`,children:[(0,K.jsx)(`button`,{type:`button`,className:`pwa-install-dismiss`,onClick:Ce,"aria-label":`Dismiss install suggestion`,title:`Don't show again`,children:`×`}),(0,K.jsxs)(`div`,{className:`pwa-install-copy`,children:[(0,K.jsx)(`strong`,{children:`Install Bivy`}),(0,K.jsx)(`span`,{children:`Open Bivy in a dedicated window and return to this device more reliably.`})]}),(0,K.jsx)(`div`,{className:`pwa-install-actions`,children:i.installChoice===`native`?(0,K.jsx)(`button`,{type:`button`,className:`btn ghost`,onClick:()=>void De(),children:`Install`}):(0,K.jsx)(`button`,{type:`button`,className:`btn ghost`,onClick:()=>o(e=>!e),children:`How to install`})}),a&&i.installChoice===`ios`&&(0,K.jsxs)(`p`,{role:`status`,children:[`In Safari, tap Share, then `,(0,K.jsx)(`strong`,{children:`Add to Home Screen`}),`, then Add. Other iOS browsers cannot install Bivy directly.`]}),a&&i.installChoice===`safari`&&(0,K.jsxs)(`p`,{role:`status`,children:[`On macOS Sonoma or later, choose `,(0,K.jsx)(`strong`,{children:`File → Add to Dock`}),` in Safari 17 or later. Older macOS Safari versions cannot install Bivy as a web app.`]})]})]})}function Ol(e,t=document,n=window){let r=()=>{t.visibilityState===`visible`&&e()};return t.addEventListener(`visibilitychange`,r),n.addEventListener(`pageshow`,r),n.addEventListener(`focus`,r),()=>{t.removeEventListener(`visibilitychange`,r),n.removeEventListener(`pageshow`,r),n.removeEventListener(`focus`,r)}}function kl({onOpen:e,onClose:t,isOpen:n,maxWidth:r=720,edge:i=28,threshold:a=60}){let o=(0,G.useRef)(e),s=(0,G.useRef)(t);o.current=e,s.current=t,(0,G.useEffect)(()=>{let e=0,t=0,c=!1,l=!1,u=!1,d=a=>{if(u=!1,a.touches.length!==1||window.innerWidth>r){c=!1;return}let o=a.touches[0];if(!o){c=!1;return}e=o.clientX,t=o.clientY,l=e<=i,c=l||n},f=r=>{if(!c||r.touches.length!==1)return;let i=r.touches[0];if(!i)return;let a=i.clientX-e,o=i.clientY-t;if(!u){if(Math.abs(o)>Math.abs(a)&&Math.abs(o)>6){c=!1;return}Math.abs(a)>Math.abs(o)&&Math.abs(a)>2&&(!n&&l||n&&a<0)&&(u=!0)}u&&r.cancelable&&r.preventDefault()},p=r=>{if(!c)return;c=!1,u=!1;let i=r.changedTouches[0];if(!i)return;let d=i.clientX-e,f=i.clientY-t;Math.abs(d)<=Math.abs(f)||Math.abs(d)<a||(!n&&l&&d>0?o.current():n&&d<0&&s.current())};return window.addEventListener(`touchstart`,d,{passive:!0}),window.addEventListener(`touchmove`,f,{passive:!1}),window.addEventListener(`touchend`,p,{passive:!0}),()=>{window.removeEventListener(`touchstart`,d),window.removeEventListener(`touchmove`,f),window.removeEventListener(`touchend`,p)}},[n,r,i,a])}var Al=[{id:`chat`,label:`Chat`},{id:`terminal`,label:`Terminal`}],jl=`bivy.sessionView`,Ml=50;function Nl(e){try{let t=JSON.parse(e.getItem(jl)||`{}`);return t&&typeof t==`object`?t:{}}catch{return{}}}function Pl(e,t){return t&&Nl(e)[t]===`terminal`?`terminal`:`chat`}function Fl(e,t,n){let r=Nl(e);delete r[t],n!==`chat`&&(r[t]=n);let i=Object.keys(r);for(let e of i.slice(0,Math.max(0,i.length-Ml)))delete r[e];try{e.setItem(jl,JSON.stringify(r))}catch{}}var Il={chat:Ze,terminal:Ge};function Ll({value:e,onChange:t}){let n=(0,G.useRef)([]),r=(e,r)=>{let i=e.key===`ArrowRight`?1:e.key===`ArrowLeft`?-1:0;if(!i)return;e.preventDefault();let a=(r+i+Al.length)%Al.length,o=Al[a];o&&(t(o.id),n.current[a]?.focus())};return(0,K.jsx)(`div`,{className:`segmented session-view-toggle`,role:`radiogroup`,"aria-label":`Session view`,children:Al.map((i,a)=>(0,K.jsxs)(`button`,{ref:e=>{n.current[a]=e},type:`button`,role:`radio`,className:`seg-btn`,"aria-checked":e===i.id,tabIndex:e===i.id?0:-1,onClick:()=>t(i.id),onKeyDown:e=>r(e,a),"aria-label":i.label,title:i.label,children:[(()=>{let e=Il[i.id];return(0,K.jsx)(e,{size:14,"aria-hidden":`true`})})(),(0,K.jsx)(`span`,{className:`session-view-label`,children:i.label})]},i.id))})}var Rl=(0,G.lazy)(()=>C(()=>import(`./Terminal-dczoFzd6.js`).then(e=>({default:e.TerminalOverlay})),__vite__mapDeps([22,1,23,3,4,24,25,26,27,28]))),zl=(0,G.lazy)(()=>C(()=>import(`./ReadinessChecklist-Bbgq2GQ8.js`).then(e=>({default:e.ReadinessChecklist})),__vite__mapDeps([29,24,1]))),Bl=(0,G.lazy)(()=>C(()=>import(`./Settings-Bsv6N5oX.js`).then(e=>({default:e.Settings})),__vite__mapDeps([30,3,4,23,1,24,25,31]))),Vl=(0,G.lazy)(()=>C(()=>import(`./AutomationsView-CF3Yde7g.js`).then(e=>({default:e.AutomationsView})),__vite__mapDeps([32,1,3,4,23,24,25]))),Hl=(0,G.lazy)(()=>C(()=>import(`./LibraryView-BqtDKX0H.js`).then(e=>({default:e.LibraryView})),__vite__mapDeps([33,23,1,3,4,24,25,26,27]))),Ul=`a[href],button:not(:disabled),textarea:not(:disabled),input:not(:disabled),select:not(:disabled),[tabindex]:not([tabindex="-1"])`;function Wl(e,t){return t?e.needsAction||e.status===`needs_action`?t.question_asked||t.approval_requested:e.status===`failed`?t.session_error:gn(e)?t.session_done:!1:!0}function Gl(){let e=je(),t=sl(),n=(0,G.useSyncExternalStore)(fo,lo),r=(0,G.useSyncExternalStore)(fo,po),[i,a]=(0,G.useState)(!1),o=(0,G.useRef)(null),s=(0,G.useRef)(null),c=(0,G.useRef)(null),[u,f]=(0,G.useState)(()=>localStorage.getItem(`bivy:automation-next-step`)===`done`),p=(0,G.useSyncExternalStore)(Tt,Dt),h=(0,G.useSyncExternalStore)(ir,ar),g=(0,G.useSyncExternalStore)(ec,tc),_=(0,G.useSyncExternalStore)(cc,lc),v=e.presentation.githubApp?.returning;(0,G.useEffect)(()=>{v&&or({setup:`github`})},[v]);let b=Re(),x=ce&&b,[C,w]=(0,G.useState)(!1),[T,E]=(0,G.useState)(!1),[D,A]=(0,G.useState)(!1),[j,M]=(0,G.useState)(null);(0,G.useEffect)(()=>Jr(M),[]),(0,G.useEffect)(()=>M(null),[e.activeSession.activeSessionId]);let N=(0,G.useRef)(!1);(0,G.useEffect)(()=>{let t=e.activeSession.activeSessionId;if(!N.current||!t)return;N.current=!1;let n=!1;return R.onAppsChanged(e=>{n||e!==t||R.appCommand(`apps.list`,t).then(e=>{let r=e.apps.find(e=>e.views.some(e=>e.kind===`web`)),i=r?.views.find(e=>e.kind===`web`);!n&&r&&i&&(n=!0,M({sessionId:t,appId:r.id,openView:{viewId:i.id}}))},()=>{})})},[e.activeSession.activeSessionId]);let[P,te]=(0,G.useState)(!1),[ne,re]=(0,G.useState)(()=>l(sessionStorage)),ie=(0,G.useCallback)(()=>R.listMachineApps(),[]),[ae,oe]=(0,G.useState)(null);(0,G.useEffect)(()=>{let e=y(sessionStorage);e&&al(e).then(t=>{t?oe({id:e,items:t}):m(sessionStorage)},()=>m(sessionStorage))},[]);let[se,le]=(0,G.useState)(null);(0,G.useEffect)(()=>{if(!se||(e.activeSession.activeSessionId??null)!==se.sessionId)return;let t=0,n,r=()=>{R.prefillComposer(se.text,se.attachments)?(ol(se.inbox),le(null)):++t<50&&(n=setTimeout(r,100))};return n=setTimeout(r,0),()=>clearTimeout(n)},[se,e.activeSession.activeSessionId]);let de=(0,G.useMemo)(()=>fn(e.activeSession.transcript),[e.activeSession.transcript]),fe=(0,G.useMemo)(()=>pn(e.activeSession.transcript),[e.activeSession.transcript]),pe=e.sessionIndex.sessions.find(t=>t.sessionId===e.activeSession.activeSessionId),I=dl(pe?.sessionId,pe?mn(pe)===`working`:!1),me=Gr(pe?.sessionId,I.noteTimes),[he,ge]=(0,G.useState)(!1),[_e,L]=(0,G.useState)(null),[xe,Se]=(0,G.useState)(!1),[Ce,we]=(0,G.useState)(!1),[z,Ee]=(0,G.useState)(null),[De,Me]=(0,G.useState)(!1),[Ne,Pe]=(0,G.useState)(null),[Fe,Ie]=(0,G.useState)(()=>new Set),Le=(0,G.useCallback)(()=>{!R.direct&&e.connection.signedIn&&R.fetchGithubQueue().then(Pe).catch(()=>{})},[e.connection.signedIn]);(0,G.useEffect)(()=>{if(R.direct||!e.connection.signedIn)return;let t=Le;t();let n=Ol(t),r=setInterval(()=>{document.visibilityState!==`hidden`&&t()},3e4);return()=>{clearInterval(r),n()}},[Le,e.connection.signedIn]),(0,G.useEffect)(()=>{!R.direct&&e.connection.signedIn&&R.getNotificationPreferences().then(mo).catch(()=>{})},[e.connection.signedIn]);let ze=(0,G.useMemo)(()=>On(Ne),[Ne]),Be=(0,G.useMemo)(()=>bn(Ne),[Ne]),Ve=(0,G.useMemo)(()=>e.sessionIndex.sessions.filter(e=>_n(e)>0),[e.sessionIndex.sessions]),He=(0,G.useMemo)(()=>n?Ve.filter(e=>Wl(e,r)).length:0,[n,Ve,r]),Ue=Ve.some(e=>!Fe.has(e.sessionId)),We=(0,G.useCallback)(()=>{a(!0),Ie(new Set(Ve.map(e=>e.sessionId)))},[Ve]),Ge=(0,G.useCallback)(()=>a(!1),[]);(0,G.useEffect)(()=>{let e=Ve.length,t=He;document.title=e>0?`(${e}) Bivy`:`Bivy`;let n=navigator,r=()=>{(t>0?n.setAppBadge?.(t):n.clearAppBadge?.())?.catch(()=>{})};r();let i=Ol(r);return()=>{i(),document.title=`Bivy`}},[He,Ve.length]);let Ke=!R.direct&&e.connection.signedIn&&!e.connection.currentNodeId;(0,G.useEffect)(()=>{if(!Ke)return;let e=()=>{document.visibilityState!==`hidden`&&R.refreshNodes()};e();let t=setInterval(e,4e3),n=Ol(e);return()=>{clearInterval(t),n()}},[Ke]);let[qe,Je]=(0,G.useState)(()=>localStorage.getItem(`bivy.focusView`)===`1`),Ye=(0,G.useCallback)(()=>{Je(e=>{let t=!e;return localStorage.setItem(`bivy.focusView`,t?`1`:`0`),t})},[]),Xe=e.connection.status===`online`;(0,G.useEffect)(()=>ye(e.activeSession.working),[e.activeSession.working]),(0,G.useEffect)(()=>{Xe&&Ae()},[Xe]);let Ze=Object.values(e.sessionIndex.followupsBySession).reduce((e,t)=>e+t.length,0);(0,G.useEffect)(()=>be(Ze),[Ze]);let Qe=(0,G.useMemo)(()=>k({direct:R.direct,signedIn:e.connection.signedIn,status:e.connection.status,runtimes:e.catalogs.runtimes,readiness:e.catalogs.activationReadiness}),[e.catalogs.activationReadiness,e.catalogs.runtimes,e.connection.signedIn,e.connection.status]),$e=e.activeSession.transcript.some(e=>e.role===`assistant`&&!!e.text&&!e.tool);(0,G.useEffect)(()=>{$e&&e.activeSession.activeSessionId&&!u&&localStorage.setItem(`bivy:automation-next-step`,`done`)},[$e,e.activeSession.activeSessionId,u]);let[tt,rt]=(0,G.useState)(!1),B=(0,G.useRef)(!1);Xe&&(B.current=!0);let it=e.connection.status===`reconnecting`||B.current&&(e.connection.status===`connecting`||e.connection.status===`linking`||e.connection.status===`pairing`),at=!!(e.activeSession.activeSessionId&&e.sessionIndex.tuiSessions.includes(e.activeSession.activeSessionId)),V=e.sessionIndex.sessions.find(t=>t.sessionId===e.activeSession.activeSessionId),ot=V?.runtimeId??e.activeSession.activeRuntimeId,st=e.catalogs.runtimes.find(e=>e.id===ot)?.capabilities,ct=Xe&&!!st?.interactiveTui,lt=e.activeSession.activeSessionId,[ut,dt]=(0,G.useState)(()=>({id:lt,view:Pl(sessionStorage,lt)})),pt=ut.view;ut.id!==lt&&(pt=Pl(sessionStorage,lt),dt({id:lt,view:pt}));let mt=(0,G.useCallback)(t=>{lt&&Fl(sessionStorage,lt,t),t===`chat`&&lt&&e.sessionIndex.tuiSessions.includes(lt)&&R.closeSessionTui(lt),dt({id:lt,view:t})},[lt,e.sessionIndex.tuiSessions]),ht=!!lt&&ct&&!z,gt=ht&&pt===`terminal`,_t=R.direct&&O(`directNode`,!1),vt=!R.direct&&!R.solo||_t,yt=(Xe||it||R.isCurrentNodeResumable()||!!e.draft.ephemeralConfig)&&!at;kl({isOpen:i,onOpen:We,onClose:Ge,maxWidth:900}),nt(Ge,i),(0,G.useEffect)(()=>{if(!i)return;let e=o.current,t=s.current,n=c.current;t?.setAttribute(`inert`,``);let r=()=>e?Array.from(e.querySelectorAll(Ul)):[],a=requestAnimationFrame(()=>{(e?.querySelector(`.sidebar-close`)??e)?.focus()}),l=t=>{if(t.key!==`Tab`)return;let n=r();if(!n.length)return;let i=n[0],a=n[n.length-1],o=document.activeElement;t.shiftKey&&(o===i||!e?.contains(o))?(t.preventDefault(),a.focus()):!t.shiftKey&&(o===a||!e?.contains(o))&&(t.preventDefault(),i.focus())};return window.addEventListener(`keydown`,l),()=>{cancelAnimationFrame(a),window.removeEventListener(`keydown`,l),t?.removeAttribute(`inert`),n?.focus()}},[i]);let bt=(0,G.useCallback)((t,n)=>{if(t.startsWith(`connect-provider:`)){let n=t.slice(17),r=e.connection.currentNodeId;n&&r&&R.store.setNeedsModelAuth({nodeId:r,provider:n});return}if(t===`fix-auth`||t.startsWith(`fix-auth:`)){let n=t.startsWith(`fix-auth:`)?t.slice(9):``,r=e.connection.currentNodeId;n&&r?R.store.setNeedsModelAuth({nodeId:r,provider:n}):Ot(`providers`);return}if(t===`retry-auth`){R.sendPrompt(`Continue — your previous request failed to authenticate. Pick up exactly where you left off.`);return}if(t.startsWith(`retry-at-reset:`)){R.setLimitRetry(!0);return}switch(t){case`/new`:R.newSession();break;case`fork`:te(!0);break;case`cancel-resume`:R.setLimitRetry(!1);break;case`/resume`:R.sendPrompt(`Please continue — your previous turn was interrupted by a restart before it finished. Pick up exactly where you left off and finish what you were doing.`)}},[e.connection.currentNodeId]),xt=(0,G.useMemo)(()=>{let t=e.activeSession.activeRuntimeId??e.catalogs.selectedAgentId,n=e.catalogs.currentModel?.provider,r=ue(t,typeof n==`string`?n:void 0);return r?`fix-auth:${r}`:`fix-auth`},[e.activeSession.activeRuntimeId,e.catalogs.selectedAgentId,e.catalogs.currentModel]),St=(0,G.useCallback)(()=>{if(a(!1),!R.direct&&e.connection.nodes.length===0&&R.refreshNodes(),R.direct||e.connection.nodes.length<=1){L(null),Se(!0),we(!1),ge(!0);return}Me(!0)},[e.connection.nodes]),Ct=(0,G.useCallback)(t=>{Me(!1),!R.direct&&t!==e.connection.currentNodeId&&R.switchNode(t),L(null),Se(!0),we(!1),ge(!0),a(!1)},[e.connection.currentNodeId]),At=(0,G.useCallback)((t,n,r,i)=>{let o=()=>{(!r||R.isCurrentSessionTarget(r,i))&&(Ee({termId:t,nodeId:n}),ge(!1),L(null),Se(!1),we(!1))};if(a(!1),!R.direct&&n&&n!==e.connection.currentNodeId){R.connectToNode(n).then(o).catch(e=>{(!r||R.isCurrentSessionTarget(r,i))&&R.store.setError(e instanceof Error?e.message:String(e))});return}o()},[e.connection.currentNodeId]),jt=(0,G.useCallback)((t,n,r)=>{let i=()=>{R.isCurrentSessionTarget(t,r)&&(Ee(null),L(t),Se(!0),we(!1),ge(!0))};if(a(!1),!R.direct&&n&&n!==e.connection.currentNodeId){R.connectToNode(n).then(i).catch(e=>{R.store.setError(e instanceof Error?e.message:String(e))});return}i()},[e.connection.currentNodeId]),Mt=(0,G.useCallback)(()=>{z&&(L(z.termId),Se(!1),we(!1),ge(!0))},[z]),Nt=(0,G.useCallback)(()=>{if(!z)return;let e=z.termId;Ee(null),R.sendTerminal({kind:`terminal.takeover`,termId:e})},[z]);(0,G.useEffect)(()=>{z&&(e.sessionIndex.runTerminals.some(e=>e.termId===z.termId)||Ee(null))},[z,e.sessionIndex.runTerminals]);let Pt=(0,G.useCallback)(()=>{L(null),Se(!1),we(!0),ge(!0)},[]),Ft=(0,G.useCallback)(()=>{e.activeSession.activeSessionId&&R.closeSessionTui(e.activeSession.activeSessionId)},[e.activeSession.activeSessionId]);(0,G.useEffect)(()=>{let t=new URLSearchParams(location.search).get(`review`);t&&e.activeSession.activeSessionId&&Hi(e.activeSession.activeSessionId,{reviewId:t})},[e.activeSession.activeSessionId]),(0,G.useEffect)(()=>{let t=new URLSearchParams(location.search),n=t.get(`review`);if(!n||!e.activeSession.activeSessionId||e.connection.status!==`online`)return;let r=e.activeSession.transcript.find(e=>e.review?.id===n)?.review;r&&(t.delete(`review`),history.replaceState(history.state,``,`${location.pathname}${t.size?`?${t}`:``}${location.hash}`),M({sessionId:r.sessionId,appId:r.appId,openView:{viewId:r.viewId,path:r.path}}))},[e.activeSession.activeSessionId,e.activeSession.transcript,e.connection.status]),(0,G.useEffect)(()=>{let t=new URLSearchParams(location.search),n=t.get(`apps`);n&&e.activeSession.activeSessionId&&(t.delete(`apps`),history.replaceState(history.state,``,`${location.pathname}${t.size?`?${t}`:``}${location.hash}`),/^[a-f0-9]{32}$/.test(n)&&M({sessionId:e.activeSession.activeSessionId,appId:n}))},[e.activeSession.activeSessionId]),(0,G.useEffect)(()=>{let t=new URLSearchParams(location.search),n=e.activeSession.activeSessionId;t.get(`show`)===`1`&&n&&e.connection.status===`online`&&(t.delete(`show`),history.replaceState(history.state,``,`${location.pathname}${t.size?`?${t}`:``}${location.hash}`),R.appCommand(`apps.showMe`,n).catch(e=>R.store.setError(e instanceof Error?e.message:`Couldn't show the app`)))},[e.activeSession.activeSessionId,e.connection.status]),(0,G.useEffect)(()=>{let t=new URLSearchParams(location.search).get(`attention`);if(!t||!e.activeSession.activeSessionId)return;let n=document.getElementById(`attention-${encodeURIComponent(t)}`);n&&(n.scrollIntoView({block:`center`}),n.setAttribute(`tabindex`,`-1`),n.focus({preventScroll:!0}))},[e.activeSession.activeSessionId,e.activeSession.approvals,e.activeSession.questions,e.activeSession.turnAttentions]);let It=e.activeSession.approvals.filter(t=>!t.sessionId||t.sessionId===e.activeSession.activeSessionId),Lt=e.activeSession.questions.filter(t=>!t.sessionId||t.sessionId===e.activeSession.activeSessionId),Rt=e.activeSession.turnAttentions.find(t=>t.sessionId===e.activeSession.activeSessionId),zt=(0,G.useRef)(null),Bt=[It[0]?.id,Lt[0]?.id,Rt?.sessionId].filter(Boolean).join(`:`);(0,G.useEffect)(()=>{Bt&&requestAnimationFrame(()=>zt.current?.querySelector(`[data-attention-card]`)?.focus())},[Bt]);let Vt=!R.direct&&!R.solo&&!e.connection.signedIn,H=(0,G.useSyncExternalStore)(pr,mr),Ht=!R.direct&&e.connection.signedIn&&!e.connection.currentNodeId;if(Vt||H)return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(qs,{onDismiss:Vt?void 0:gr}),(0,K.jsxs)(`div`,{className:`toast-stack`,children:[(0,K.jsx)(hl,{}),(0,K.jsx)(Ws,{})]})]});let Ut=V?Be.get(V.sessionId)??wn(V.source):null,Wt=V?.forkedFrom?(()=>{let t=e.sessionIndex.sessions.find(e=>e.sessionId===V.forkedFrom);return{sessionId:V.forkedFrom,name:t?.name,nodeId:t?.nodeId,openable:!!t}})():void 0,Gt=V?.nodeId||e.connection.currentNodeId||void 0,Kt=e.connection.nodes.find(e=>e.id===Gt),qt=Kt?`${Kt.name||Kt.id} (${Kt.id})`:Gt,Jt=!!(V?.source&&String(V.source).startsWith(`repo:`));return(0,K.jsxs)(`div`,{className:`app`,children:[(0,K.jsxs)(`div`,{ref:o,className:`sidebar${i?` open`:``}`,role:i?`dialog`:`complementary`,"aria-modal":i?`true`:void 0,"aria-label":`Sessions and workspace`,tabIndex:i?-1:void 0,children:[(0,K.jsxs)(`div`,{className:`sidebar-head`,children:[(0,K.jsx)(`span`,{className:`brand`,children:`Bivy`}),(0,K.jsx)(`div`,{className:`sidebar-head-actions`,children:(0,K.jsx)(`button`,{className:`btn ghost icon only-mobile sidebar-close`,onClick:Ge,"aria-label":`Close sessions`,children:(0,K.jsx)(et,{})})})]}),(0,K.jsx)(Xn,{runEvidence:ze,sessionSources:Be,automationsActive:!!h,onOpenTerminal:St,terminalDisabled:!Xe,onOpenAutomations:()=>{or(),Ge()},libraryActive:g,onOpenLibrary:e=>{nc(e),Ge()},onPick:(t,n,r)=>{let i=R.selectSessionTarget(t);Ee(null),Ge();let a=e.sessionIndex.sessions.find(e=>e.sessionId===t);if(a&&Cn(a)){jt(t,r,i);return}if(a&&Sn(a)){R.findLiveRunTerminal(t,r).then(e=>{R.isCurrentSessionTarget(t,i)&&(e?At(e.termId,e.nodeId??r,t,i):R.openSessionOnNode(t,n,r))}).catch(e=>{R.isCurrentSessionTarget(t,i)&&R.store.setError(e instanceof Error?e.message:String(e))});return}R.openSessionOnNode(t,n,r)},onPickTerminal:At}),(0,K.jsxs)(`div`,{className:`sidebar-foot`,children:[(0,K.jsxs)(`button`,{className:`btn primary new-session-btn`,onClick:()=>{Ee(null),R.newSession(),Ge()},children:[(0,K.jsxs)(`svg`,{viewBox:`0 0 24 24`,width:`18`,height:`18`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,K.jsx)(`path`,{d:`M12 20h9`}),(0,K.jsx)(`path`,{d:`M16.4 3.6a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4Z`})]}),(0,K.jsx)(`span`,{children:`New session`})]}),(0,K.jsx)(`button`,{className:`btn icon settings-gear`,onClick:()=>{Ot(),Ge()},title:`Settings`,"aria-label":`Settings`,children:(0,K.jsxs)(`svg`,{viewBox:`0 0 24 24`,width:`20`,height:`20`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.7`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,K.jsx)(`circle`,{cx:`12`,cy:`12`,r:`3`}),(0,K.jsx)(`path`,{d:`M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z`})]})})]})]}),i&&(0,K.jsx)(`div`,{className:`scrim`,onClick:Ge}),(0,K.jsxs)(`main`,{ref:s,className:`main${Ht?` needs-node`:``}`,children:[(0,K.jsxs)(`header`,{className:`topbar`,children:[(0,K.jsxs)(`button`,{ref:c,className:`btn ghost icon only-mobile burger-btn`,onClick:We,"aria-label":Ue?`Open sessions — something needs your attention`:`Open sessions`,children:[`☰`,Ue&&(0,K.jsx)(`span`,{className:`attn-indicator`,"aria-hidden":!0,children:(0,K.jsx)(wt,{status:`needs-action`})})]}),(0,K.jsxs)(`div`,{className:`topbar-title`,children:[(0,K.jsx)(`div`,{className:`topbar-title-row`,children:(0,K.jsx)(`h1`,{className:`title`,title:Ht?`Connect a Machine`:e.activeSession.activeTitle,children:Ht?`Connect a Machine`:e.activeSession.activeTitle})}),(vt||ht)&&(0,K.jsxs)(`div`,{className:`topbar-subline`,children:[vt&&(_t?(0,K.jsx)(Ys,{}):(0,K.jsx)(Js,{})),ht&&(0,K.jsx)(Ll,{value:pt,onChange:mt})]})]}),(0,K.jsxs)(`div`,{className:`topbar-actions`,children:[e.activeSession.activeSessionId&&!gt&&(0,K.jsxs)(`button`,{className:`btn ghost focus-view-btn`,onClick:Ye,title:qe?`Focus view on — show full transcript`:`Focus view — show only prompts and final answers`,"aria-label":qe?`Show full transcript`:`Show only prompts and final answers`,"aria-pressed":qe,children:[qe?(0,K.jsxs)(`svg`,{viewBox:`0 0 24 24`,width:`18`,height:`18`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,K.jsx)(`path`,{d:`M9.88 9.88a3 3 0 1 0 4.24 4.24`}),(0,K.jsx)(`path`,{d:`M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68`}),(0,K.jsx)(`path`,{d:`M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61`}),(0,K.jsx)(`line`,{x1:`2`,x2:`22`,y1:`2`,y2:`22`})]}):(0,K.jsxs)(`svg`,{viewBox:`0 0 24 24`,width:`18`,height:`18`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,K.jsx)(`path`,{d:`M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7z`}),(0,K.jsx)(`circle`,{cx:`12`,cy:`12`,r:`3`})]}),(0,K.jsx)(`span`,{className:`focus-view-label`,children:qe?`Focused`:`Focus`})]}),e.activeSession.activeSessionId&&(0,K.jsx)(Dc,{sessionId:e.activeSession.activeSessionId,name:e.activeSession.activeTitle,isRepo:Jt,node:qt,agent:V?.agentName||V?.runtimeId,workspace:V?.workspace,worktree:V?.worktree,branch:V?.branch,sessionFile:V?.path,auditHealth:V?.auditHealth,eventLogHealth:V?.eventLogHealth})]})]}),(e.connection.status===`pairing`||e.connection.status===`linking`)&&(0,K.jsxs)(`div`,{className:`banner`,"data-tone":`neutral`,role:`status`,children:[(0,K.jsx)(ft,{size:`xs`}),`Linking this device…`]}),e.connection.nodeUpdate&&!V?.pendingLaunch&&(0,K.jsxs)(`div`,{className:`banner`,"data-tone":`accent`,role:`status`,children:[(0,K.jsxs)(`span`,{className:`banner-text`,children:[`This machine runs Bivy `,e.connection.nodeUpdate.current,` — `,e.connection.nodeUpdate.latest,` is available.`]}),(0,K.jsx)(`button`,{className:`btn sm primary banner-action`,onClick:()=>R.updateNode(),disabled:e.connection.nodeUpdating,children:e.connection.nodeUpdating?`Updating…`:`Update this machine`})]}),!Ht&&!e.draft.ephemeralConfig&&!e.activeSession.activeSessionId&&e.activeSession.transcript.length===0&&e.sessionIndex.sessions.length===0&&(0,K.jsx)(G.Suspense,{fallback:null,children:Qe.activated?(0,K.jsx)(Cl,{machineName:e.connection.nodes.find(t=>t.id===e.connection.currentNodeId)?.name||void 0,onOpenApp:e=>{N.current=!0,ye(!0),R.sendPrompt(yl(e),void 0,{workspace:e.project,repo:void 0,branch:void 0})},onFirstChange:()=>{ye(!0),R.sendPrompt(bl)}}):(0,K.jsx)(zl,{activation:Qe,onRemediate:{connect_machine:()=>document.querySelector(`.node-switcher-btn`)?.click(),install_agent:()=>document.querySelector(`.agent-pill`)?.click(),authenticate_credential:()=>document.querySelector(`.model-pill`)?.click(),grant_repository:()=>document.querySelector(`.repo-pill`)?.click()}})}),Ht&&(0,K.jsx)(`div`,{className:`connect-runner-scroll`,children:(0,K.jsx)(El,{nodes:e.connection.nodes,ephemeralEnabled:!1,onPickNode:e=>R.switchNode(e),onEphemeral:()=>w(!0),onRefresh:()=>R.refreshNodes()})}),z&&!he?(()=>{let t=e.sessionIndex.runTerminals.find(e=>e.termId===z.termId),n=t?.name||t?.label||t?.agent||`Terminal session`,r=e.connection.nodes.find(e=>e.id===(t?.nodeId||z.nodeId)),i=!!t?.sessionId||hs(t?.agent,e.catalogs.runtimes);return(0,K.jsx)(Oc,{sessionId:t?.sessionId,sessionName:n,nodeLabel:r?.name,online:e.connection.status!==`offline`,onOpenTerminal:Mt,onUseChat:i?Nt:void 0})})():gt?(0,K.jsx)(G.Suspense,{fallback:null,children:(0,K.jsx)(Rl,{embedded:!0,tui:!0,sessionId:lt,onClose:()=>mt(`chat`)},lt)}):at?(0,K.jsx)(Oc,{sessionId:e.activeSession.activeSessionId??void 0,sessionName:e.activeSession.activeTitle,nodeLabel:Kt?.name,online:e.connection.status!==`offline`,onOpenTerminal:Pt,onUseChat:Ft}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(za,{entries:e.activeSession.transcript,working:e.activeSession.working,workingLabel:e.activeSession.workingLabel,draftRoute:!e.activeSession.activeSessionId,greeting:e.sessionIndex.sessions.length>0?`What should we work on?`:void 0,opening:e.activeSession.opening,sessionKey:e.activeSession.activeSessionId,focusView:qe,onAction:bt,authAction:xt,header:V?.launchProgress?(0,K.jsx)(Cs,{progress:V.launchProgress,onChooseModel:e=>R.chooseLaunchModel(V.sessionId,e),onRefreshModels:()=>R.refreshLaunchModels(V.sessionId),onSetupCredentials:async()=>{try{await R.setupManagedCredentials()}catch(e){R.store.setError(e instanceof Error?e.message:String(e))}},onRetryLaunch:V.pendingLaunch?async()=>{try{await R.retryPendingLaunch(V.sessionId)}catch(e){R.store.setError(e instanceof Error?e.message:String(e))}}:void 0,onRetryFreshMachine:V.pendingLaunch?async()=>{try{await R.retryPendingLaunchOnFreshMachine(V.sessionId)}catch(e){R.store.setError(e instanceof Error?e.message:String(e))}}:void 0}):void 0,footer:(0,K.jsxs)(`div`,{className:`attention-footer`,ref:zt,role:`region`,"aria-live":`polite`,"aria-label":`Agent needs your response`,children:[(0,K.jsx)(Es,{approvals:It,onResolve:(e,t,n)=>R.resolveApproval(e,t,n)}),(0,K.jsx)(ks,{questions:Lt,onAnswer:(e,t,n)=>R.answerQuestion(e,t,n),onCancel:(e,t)=>R.cancelQuestion(e,t)}),Rt&&(0,K.jsx)(As,{attention:Rt,onResolve:(e,t)=>R.resolveTurnAttention(e,t)})]})}),V&&(0,K.jsx)(Tl,{working:e.activeSession.working,machineName:Kt?.name||void 0,onOpenChange:rt}),$e&&V&&!u&&!tt&&(0,K.jsxs)(`section`,{className:`card next-step`,"aria-label":`Next step`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`Make this repeatable`}),(0,K.jsx)(`p`,{children:`Create an automation to run work without you.`})]}),(0,K.jsxs)(`div`,{className:`next-step-actions`,children:[(0,K.jsx)(`button`,{type:`button`,className:`btn sm primary`,onClick:()=>{localStorage.setItem(`bivy:automation-next-step`,`done`),f(!0),or()},children:`Open Automations`}),(0,K.jsx)(`button`,{type:`button`,className:`btn sm ghost`,"aria-label":`Dismiss`,onClick:()=>{localStorage.setItem(`bivy:automation-next-step`,`done`),f(!0)},children:`Dismiss`})]})]}),T&&(0,K.jsx)(Jc,{history:e.activeSession.changesHistory,checks:V?ze.get(V.sessionId)?.checks?.map(e=>({name:e.name,status:e.status})):void 0,onClose:()=>E(!1)}),D&&(0,K.jsx)(no,{artifacts:de,onClose:()=>A(!1)}),j&&j.sessionId===V?.sessionId&&(0,K.jsx)(Ka,{...j,onClose:()=>M(null)},`${j.sessionId}:${j.appId??``}:${j.openView?.viewId??``}`),P&&V&&(0,K.jsx)(wc,{sessionId:V.sessionId,onClose:()=>te(!1)}),(0,K.jsxs)(`div`,{className:`composer-gh`,children:[V&&Ut?(0,K.jsx)(Wc,{anchorId:`attention-${V.sessionId}`,source:Ut,statusClass:mn(V),statusLabel:vn(V),gh:e.activeSession.github,evidence:ze.get(V.sessionId),finishedAt:V.finishedAt,usage:e.activeSession.usage,forkedFrom:Wt,delegatedFrom:V?.delegatedFrom,filesEdited:qc(e.activeSession.changesHistory),onOpenChanges:()=>E(!0),artifactsCount:de.length,onOpenArtifacts:()=>A(!0),onOpenRun:e=>uc(e),onRecover:e=>{let t=V.sessionId,n=ze.get(t),r=n?Nn(n):[];if(e===`fork`){R.forkSession(t);return}if(e===`fix`){R.sendPrompt(r.length?`The deterministic checks failed (${r.join(`, `)}). Please investigate the failures and fix them, then confirm the checks pass.`:`This run did not finish cleanly. Please investigate what went wrong and fix it.`);return}R.sendPrompt(r.length?`Please re-run the ${r.join(`, `)} check(s) and address anything that still fails.`:`Please re-run the project checks and address anything that fails.`)}}):(0,K.jsx)(Mc,{gh:e.activeSession.github}),V&&(0,K.jsx)(Gc,{apps:I.published??fe.length,serverPorts:I.offers.map(e=>e.port),newNotes:me,onOpen:()=>M({sessionId:V.sessionId})})]}),(0,K.jsx)(Dl,{status:e.connection.status,hasCachedTranscript:e.activeSession.transcript.length>0,machineName:Kt?.name||void 0}),(0,K.jsx)(ms,{state:e,disabled:!yt,disabledHint:e.connection.status===`offline`?Kt?.name?`${Kt.name} is offline — run \`bivy status\` there`:"Machine offline — run `bivy status` on it":Kt?.name?`Connecting to ${Kt.name}…`:`Connecting…`,working:e.activeSession.working,onSend:(t,n)=>{e.connection.status!==`online`&&ve(),ye(!0),R.sendPrompt(t,n)},onAbort:()=>R.abort(),onError:e=>R.store.setError(e)})]})]}),h&&(0,K.jsx)(G.Suspense,{fallback:null,children:(0,K.jsx)(Vl,{state:e,section:h.section,onSectionChange:sr,githubQueue:Ne,onRefreshGithubQueue:Le,onOpenRun:t=>{lr(e.activeSession.activeSessionId?{kind:`session`,id:e.activeSession.activeSessionId}:{kind:`new`}),uc(t)},onClose:()=>lr(e.activeSession.activeSessionId?{kind:`session`,id:e.activeSession.activeSessionId}:{kind:`new`}),onOpenSession:t=>{let n=e.sessionIndex.sessions.find(e=>e.sessionId===t);R.openSessionOnNode(t,n?.path,n?.nodeId),lr({kind:`session`,id:t}),Ge()}})}),g&&(0,K.jsx)(G.Suspense,{fallback:null,children:(0,K.jsx)(Hl,{view:g,onClose:()=>rc(e.activeSession.activeSessionId?{kind:`session`,id:e.activeSession.activeSessionId}:{kind:`new`}),onShowInChat:(t,n,r)=>{Hi(t,n),rc({kind:`session`,id:t});let i=e.sessionIndex.sessions.filter(e=>e.sessionId===t),a=i.find(e=>e.nodeId===r)??i[0];R.openSessionOnNode(t,a?.path,r??a?.nodeId),Ge()}})}),_&&(0,K.jsx)(xc,{runId:_.runId,load:e=>ke(R.local,e),onCancel:async e=>{await F(R.local,e),Le()},onRetry:async e=>{await Te(R.local,e),Le()},onReauthenticate:async(t,n,r)=>{let i=n||e.connection.currentNodeId;if(!i)throw Error(`The Machine for this Run is not available.`);await R.connectToNode(i),R.store.setNeedsModelAuth({nodeId:i,provider:t,reason:r})},resolveMachineName:t=>e.connection.nodes.find(e=>e.id===t)?.name||void 0,isSessionResolvable:t=>e.sessionIndex.sessions.some(e=>e.sessionId===t),onReceiptReviewed:()=>{Oe(R.local,`receipt_reviewed`,matchMedia(`(max-width: 700px)`).matches?`mobile`:`desktop`).catch(()=>{})},onOpenSession:t=>{let n=e.sessionIndex.sessions.find(e=>e.sessionId===t);R.openSessionOnNode(t,n?.path,n?.nodeId),dc({kind:`session`,id:t}),Ge()},onClose:()=>dc(e.activeSession.activeSessionId?{kind:`session`,id:e.activeSession.activeSessionId}:{kind:`new`})}),p&&(0,K.jsx)(G.Suspense,{fallback:null,children:(0,K.jsx)(Bl,{state:e,view:p.view,onViewChange:Et,onImported:e=>{kt({kind:`session`,id:e}),Ge()},onRedirectToAutomations:t=>{kt(e.activeSession.activeSessionId?{kind:`session`,id:e.activeSession.activeSessionId}:{kind:`new`}),t===`github`||t===`linear`||t===`slack`?or({setup:t}):t===`queue`||t===`rulesets`?or({section:t===`queue`?`runs`:t}):or(),Ge()},onClose:()=>kt(e.activeSession.activeSessionId?{kind:`session`,id:e.activeSession.activeSessionId}:{kind:`new`})})}),C&&x&&(0,K.jsx)(gl,{onClose:()=>w(!1),firstRun:Ht}),e.presentation.forkProgress&&(0,K.jsx)(cl,{progress:e.presentation.forkProgress,onClose:()=>R.store.setForkProgress(null)}),e.presentation.needsModelAuth&&(0,K.jsx)(vl,{state:e}),De&&(0,K.jsx)(jo,{state:e,currentNodeId:e.connection.currentNodeId,onPick:Ct,onClose:()=>Me(!1)}),he&&(0,K.jsx)(G.Suspense,{fallback:null,children:(0,K.jsx)(Rl,{sessionId:xe?null:e.activeSession.activeSessionId,attachTermId:_e,standalone:xe,tui:Ce,onClose:()=>{ge(!1),L(null),Se(!1),we(!1)}})}),t&&(0,K.jsx)(`div`,{className:`banner`,"data-tone":`accent`,role:`status`,children:t}),(ne||ae)&&(0,K.jsx)(el,{text:[ae?.items.text,ne].filter(Boolean).join(`
23
+ `),xl=4e3,Sl=e=>e.split(/[\\/]/).filter(Boolean).pop()||e;function Cl({machineName:e,onOpenApp:t,onFirstChange:n}){let r=e||`your machine`,[i,a]=(0,G.useState)(null),[o,s]=(0,G.useState)(!1),[c,l]=(0,G.useState)(!1);(0,G.useEffect)(()=>{let e=!0,t=setTimeout(()=>{e&&a(e=>e??[])},xl);return R.appCommand(`apps.offers`,void 0).then(t=>{let n=t.offers??[];e&&a(e=>e??n.filter(e=>typeof e.project==`string`))},()=>{e&&a([])}),R.direct||R.pushStatus().then(t=>{e&&s(t.supported&&!t.subscribed&&t.permission!==`denied`)},()=>{}),()=>{e=!1,clearTimeout(t)}},[]);let u=async e=>{l(!0),o&&await R.enablePush().catch(()=>{}),e()},[d,...f]=i??[];return(0,K.jsxs)(`section`,{className:`card readiness`,"aria-labelledby":`get-started-title`,"aria-busy":i===null,children:[(0,K.jsx)(`p`,{className:`readiness-passed`,role:`status`,children:`✓ Setup complete`}),i===null?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`h2`,{id:`get-started-title`,className:`card-title`,children:`Your agent's first task`}),(0,K.jsxs)(`p`,{className:`card-sub get-started-scan`,role:`status`,children:[(0,K.jsx)(ft,{size:`xs`}),`Looking for apps running on `,r,`…`]})]}):d?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`h2`,{id:`get-started-title`,className:`card-title`,children:[`Mark what's wrong in `,Sl(d.project)]}),(0,K.jsxs)(`p`,{className:`card-sub`,children:[`It's running on `,r,`. The agent opens it here, you tap what's off, and it fixes it and sends you a link to share. It keeps working when you close this app.`]}),(0,K.jsxs)(`p`,{className:`get-started-app card-sub`,children:[(0,K.jsx)(`code`,{children:d.command}),` · port `,d.port]}),(0,K.jsxs)(`div`,{className:`get-started-actions`,children:[(0,K.jsxs)(`button`,{type:`button`,className:`btn sm primary`,disabled:c,onClick:()=>void u(()=>t(d)),children:[`Open `,Sl(d.project),` and mark what's wrong`]}),(0,K.jsx)(`span`,{className:`card-sub`,children:`or type your own task below`})]}),f.length>0&&(0,K.jsxs)(`div`,{className:`get-started-more`,role:`group`,"aria-label":`Other running apps`,children:[(0,K.jsx)(`span`,{className:`card-sub`,children:`Also running:`}),f.slice(0,3).map(e=>(0,K.jsxs)(`button`,{type:`button`,className:`btn sm ghost`,disabled:c,onClick:()=>void u(()=>t(e)),"aria-label":`Open ${Sl(e.project)} on port ${e.port} and mark what's wrong`,children:[Sl(e.project),` · `,e.port]},e.port))]})]}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(`h2`,{id:`get-started-title`,className:`card-title`,children:`Give your agent a first task`}),(0,K.jsxs)(`p`,{className:`card-sub`,children:[`It runs on `,r,` and keeps working when you close this app. It'll make one small, useful change here and tell your phone when it's done.`]}),(0,K.jsxs)(`div`,{className:`get-started-actions`,children:[(0,K.jsx)(`button`,{type:`button`,className:`btn sm primary`,disabled:c,onClick:()=>void u(n),children:`Make one small improvement`}),(0,K.jsx)(`span`,{className:`card-sub`,children:`or type your own task below`})]})]})]})}var wl=`bivy:notify-offer`;function Tl({working:e,machineName:t,onOpenChange:n}){let[r,i]=(0,G.useState)(()=>localStorage.getItem(wl)===`done`),[a,o]=(0,G.useState)(!1),[s,c]=(0,G.useState)(!1),[l,u]=(0,G.useState)(!1),[d,f]=(0,G.useState)(null);(0,G.useEffect)(()=>{if(r||a||!e||R.direct)return;let t=!0;return R.pushStatus().then(e=>{t&&o(e.supported&&!e.subscribed&&e.permission!==`denied`)}).catch(()=>{}),()=>{t=!1}},[r,a,e]),(0,G.useEffect)(()=>{if(!l)return;let e=setTimeout(()=>i(!0),5e3);return()=>clearTimeout(e)},[l]);let p=!r&&a;(0,G.useEffect)(()=>n?.(p),[p]);let m=()=>{localStorage.setItem(wl,`done`),i(!0)},h=async()=>{c(!0),f(null);try{await R.enablePush(),localStorage.setItem(wl,`done`),u(!0)}catch(e){f(e instanceof Error?e.message:String(e))}finally{c(!1)}};return p?l?(0,K.jsx)(`section`,{className:`card next-step`,"aria-label":`Notifications`,children:(0,K.jsx)(`p`,{className:`next-step-ok`,role:`status`,children:`✓ Notifications are on. You can close the app; Bivy will let you know.`})}):(0,K.jsxs)(`section`,{className:`card next-step`,"aria-labelledby":`notify-offer-title`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{id:`notify-offer-title`,children:`Get a notification when it's done?`}),(0,K.jsxs)(`p`,{children:[`The agent keeps working on `,t||`your machine`,` if you close this app. Bivy can tell you when it finishes or needs you.`]}),d&&(0,K.jsx)(`div`,{className:`banner inline`,"data-tone":`danger`,role:`alert`,children:d})]}),(0,K.jsxs)(`div`,{className:`next-step-actions`,children:[(0,K.jsx)(`button`,{type:`button`,className:`btn sm primary`,disabled:s,onClick:()=>void h(),children:s?`Turning on…`:`Turn on notifications`}),(0,K.jsx)(`button`,{type:`button`,className:`btn sm ghost`,disabled:s,onClick:m,children:`Not now`})]})]}):null}function El({nodes:e,ephemeralEnabled:t,onPickNode:n,onEphemeral:r,onRefresh:i}){let a=e.filter(e=>!e.id.startsWith(`eph-`)),[o,s]=(0,G.useState)(null),c=(0,G.useRef)(a.length===0),l=(0,G.useRef)(!1);return(0,G.useEffect)(()=>{let t=o??(c.current&&e.length===1?e[0]?.id:void 0),r=e.find(e=>e.id===t&&e.online&&!e.id.startsWith(`eph-`));r&&!l.current&&(l.current=!0,n(r.id))},[e,o,n]),(0,K.jsxs)(`section`,{className:`connect-runner`,"aria-labelledby":`connect-runner-title`,children:[(0,K.jsxs)(`div`,{className:`connect-hero compact`,children:[(0,K.jsx)(`h2`,{className:`connect-title`,id:`connect-runner-title`,children:a.length>0?`Choose a Machine`:`Connect a Machine`}),(0,K.jsx)(`p`,{className:`connect-sub`,children:a.length>0?`Pick an online machine to start, or add another machine.`:t?`Use a machine with your real repository, services, and warm caches, or launch an isolated machine. Any hosted credential custody is disclosed before enablement.`:`Your agents run here, using your existing environment. Keep your repositories, tools, and agent logins.`})]}),(0,K.jsxs)(`div`,{className:`connect-waiting`,role:`status`,children:[(0,K.jsx)(ft,{size:`sm`}),(0,K.jsx)(`span`,{className:`connect-waiting-text`,children:a.length>0?`Checking for connected machines automatically…`:`Waiting for your machine. This page updates automatically.`}),(0,K.jsx)(`button`,{type:`button`,className:`btn sm ghost`,onClick:i,children:`Check now`})]}),a.length>0&&(0,K.jsxs)(`div`,{className:`connect-nodes`,children:[(0,K.jsx)(`div`,{className:`connect-nodes-head`,children:`Your machines`}),(0,K.jsx)(`div`,{className:`connect-nodes-list`,children:a.map(e=>(0,K.jsxs)(`button`,{type:`button`,className:`connect-node`,onClick:()=>n(e.id),title:e.online?`Start on this Machine`:`This Machine is offline — selecting it will try to reconnect`,children:[(0,K.jsx)(wt,{status:e.online?`online`:`idle`}),(0,K.jsx)(`span`,{className:`connect-node-name`,children:e.name||e.id}),(0,K.jsx)(`span`,{className:`connect-node-status${e.online?` is-online`:``}`,children:e.online?`Online`:`Offline`}),(0,K.jsx)(`svg`,{className:`connect-node-caret`,viewBox:`0 0 24 24`,width:`16`,height:`16`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":!0,children:(0,K.jsx)(`path`,{d:`m9 6 6 6-6 6`})})]},e.id))})]}),(0,K.jsxs)(`div`,{className:`connect-options`,children:[(0,K.jsx)(`div`,{className:`connect-option machine-install-card`,children:(0,K.jsx)(xr,{onEnrolled:s})}),t&&(0,K.jsxs)(`div`,{className:`connect-option`,children:[(0,K.jsxs)(`div`,{className:`connect-option-head`,children:[(0,K.jsx)(`span`,{className:`connect-option-badge`,"aria-hidden":!0,children:(0,K.jsxs)(`svg`,{viewBox:`0 0 24 24`,width:`18`,height:`18`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.7`,strokeLinecap:`round`,strokeLinejoin:`round`,children:[(0,K.jsx)(`path`,{d:`M17.5 19a4.5 4.5 0 0 0 .5-8.97A6 6 0 0 0 6.34 9.2 4 4 0 0 0 7 17`}),(0,K.jsx)(`path`,{d:`M12 12v6m0 0-2.5-2.5M12 18l2.5-2.5`})]})}),(0,K.jsxs)(`div`,{className:`connect-option-copy`,children:[(0,K.jsx)(`h3`,{children:`Launch an isolated Machine`}),(0,K.jsx)(`p`,{children:`Fastest if you don't want to install locally. Start with the recommended cloud, review its estimated cost and teardown policy, then launch explicitly with your first task. Bivy adds no fee.`})]})]}),(0,K.jsx)(`button`,{type:`button`,className:`btn primary connect-option-cta`,onClick:r,children:`Launch isolated Machine`})]})]}),(0,K.jsx)(`p`,{className:`connect-sub`,children:`Next: choose a repository, send your first task, and review the result right here.`})]})}function Dl({status:e,hasCachedTranscript:t,machineName:r}){let i=(0,G.useSyncExternalStore)(Pe,Me),[a,o]=(0,G.useState)(!1),[s,c]=(0,G.useState)(()=>typeof navigator<`u`&&!navigator.onLine);(0,G.useEffect)(()=>{let e=()=>c(!0),t=()=>c(!1);return window.addEventListener(`offline`,e),window.addEventListener(`online`,t),()=>{window.removeEventListener(`offline`,e),window.removeEventListener(`online`,t)}},[]);let l=he(s?`offline`:e,t,i,r),u=l.kind!==`live-control`,d=!n&&i.installChoice!==null&&!i.standalone;return!u&&!d?null:(0,K.jsxs)(K.Fragment,{children:[u&&(0,K.jsx)(`aside`,{className:`pwa-lifecycle`,"aria-label":`App availability`,children:(0,K.jsxs)(`div`,{className:`pwa-lifecycle-copy`,"data-availability":l.kind,children:[(0,K.jsx)(`strong`,{children:l.label}),(0,K.jsx)(`span`,{children:l.detail})]})}),d&&(0,K.jsxs)(`aside`,{className:`pwa-install`,"aria-label":`Install Bivy`,children:[(0,K.jsx)(`button`,{type:`button`,className:`pwa-install-dismiss`,onClick:Ce,"aria-label":`Dismiss install suggestion`,title:`Don't show again`,children:`×`}),(0,K.jsxs)(`div`,{className:`pwa-install-copy`,children:[(0,K.jsx)(`strong`,{children:`Install Bivy`}),(0,K.jsx)(`span`,{children:`Open Bivy in a dedicated window and return to this device more reliably.`})]}),(0,K.jsx)(`div`,{className:`pwa-install-actions`,children:i.installChoice===`native`?(0,K.jsx)(`button`,{type:`button`,className:`btn ghost`,onClick:()=>void De(),children:`Install`}):(0,K.jsx)(`button`,{type:`button`,className:`btn ghost`,onClick:()=>o(e=>!e),children:`How to install`})}),a&&i.installChoice===`ios`&&(0,K.jsxs)(`p`,{role:`status`,children:[`In Safari, tap Share, then `,(0,K.jsx)(`strong`,{children:`Add to Home Screen`}),`, then Add. Other iOS browsers cannot install Bivy directly.`]}),a&&i.installChoice===`safari`&&(0,K.jsxs)(`p`,{role:`status`,children:[`On macOS Sonoma or later, choose `,(0,K.jsx)(`strong`,{children:`File → Add to Dock`}),` in Safari 17 or later. Older macOS Safari versions cannot install Bivy as a web app.`]})]})]})}function Ol(e,t=document,n=window){let r=()=>{t.visibilityState===`visible`&&e()};return t.addEventListener(`visibilitychange`,r),n.addEventListener(`pageshow`,r),n.addEventListener(`focus`,r),()=>{t.removeEventListener(`visibilitychange`,r),n.removeEventListener(`pageshow`,r),n.removeEventListener(`focus`,r)}}function kl({onOpen:e,onClose:t,isOpen:n,maxWidth:r=720,edge:i=28,threshold:a=60}){let o=(0,G.useRef)(e),s=(0,G.useRef)(t);o.current=e,s.current=t,(0,G.useEffect)(()=>{let e=0,t=0,c=!1,l=!1,u=!1,d=a=>{if(u=!1,a.touches.length!==1||window.innerWidth>r){c=!1;return}let o=a.touches[0];if(!o){c=!1;return}e=o.clientX,t=o.clientY,l=e<=i,c=l||n},f=r=>{if(!c||r.touches.length!==1)return;let i=r.touches[0];if(!i)return;let a=i.clientX-e,o=i.clientY-t;if(!u){if(Math.abs(o)>Math.abs(a)&&Math.abs(o)>6){c=!1;return}Math.abs(a)>Math.abs(o)&&Math.abs(a)>2&&(!n&&l||n&&a<0)&&(u=!0)}u&&r.cancelable&&r.preventDefault()},p=r=>{if(!c)return;c=!1,u=!1;let i=r.changedTouches[0];if(!i)return;let d=i.clientX-e,f=i.clientY-t;Math.abs(d)<=Math.abs(f)||Math.abs(d)<a||(!n&&l&&d>0?o.current():n&&d<0&&s.current())};return window.addEventListener(`touchstart`,d,{passive:!0}),window.addEventListener(`touchmove`,f,{passive:!1}),window.addEventListener(`touchend`,p,{passive:!0}),()=>{window.removeEventListener(`touchstart`,d),window.removeEventListener(`touchmove`,f),window.removeEventListener(`touchend`,p)}},[n,r,i,a])}var Al=[{id:`chat`,label:`Chat`},{id:`terminal`,label:`Terminal`}],jl=`bivy.sessionView`,Ml=50;function Nl(e){try{let t=JSON.parse(e.getItem(jl)||`{}`);return t&&typeof t==`object`?t:{}}catch{return{}}}function Pl(e,t){return t&&Nl(e)[t]===`terminal`?`terminal`:`chat`}function Fl(e,t,n){let r=Nl(e);delete r[t],n!==`chat`&&(r[t]=n);let i=Object.keys(r);for(let e of i.slice(0,Math.max(0,i.length-Ml)))delete r[e];try{e.setItem(jl,JSON.stringify(r))}catch{}}var Il={chat:Ze,terminal:Ge};function Ll({value:e,onChange:t}){let n=(0,G.useRef)([]),r=(e,r)=>{let i=e.key===`ArrowRight`?1:e.key===`ArrowLeft`?-1:0;if(!i)return;e.preventDefault();let a=(r+i+Al.length)%Al.length,o=Al[a];o&&(t(o.id),n.current[a]?.focus())};return(0,K.jsx)(`div`,{className:`segmented session-view-toggle`,role:`radiogroup`,"aria-label":`Session view`,children:Al.map((i,a)=>(0,K.jsxs)(`button`,{ref:e=>{n.current[a]=e},type:`button`,role:`radio`,className:`seg-btn`,"aria-checked":e===i.id,tabIndex:e===i.id?0:-1,onClick:()=>t(i.id),onKeyDown:e=>r(e,a),"aria-label":i.label,title:i.label,children:[(()=>{let e=Il[i.id];return(0,K.jsx)(e,{size:14,"aria-hidden":`true`})})(),(0,K.jsx)(`span`,{className:`session-view-label`,children:i.label})]},i.id))})}var Rl=(0,G.lazy)(()=>C(()=>import(`./Terminal-CcT_BiQ-.js`).then(e=>({default:e.TerminalOverlay})),__vite__mapDeps([22,1,23,3,4,24,25,26,27,28]))),zl=(0,G.lazy)(()=>C(()=>import(`./ReadinessChecklist-Bbgq2GQ8.js`).then(e=>({default:e.ReadinessChecklist})),__vite__mapDeps([29,24,1]))),Bl=(0,G.lazy)(()=>C(()=>import(`./Settings-C31Y0zji.js`).then(e=>({default:e.Settings})),__vite__mapDeps([30,3,4,23,1,24,25,31]))),Vl=(0,G.lazy)(()=>C(()=>import(`./AutomationsView-Dmvlsz0Z.js`).then(e=>({default:e.AutomationsView})),__vite__mapDeps([32,1,3,4,23,24,25]))),Hl=(0,G.lazy)(()=>C(()=>import(`./LibraryView-B-kxSGdG.js`).then(e=>({default:e.LibraryView})),__vite__mapDeps([33,23,1,3,4,24,25,26,27]))),Ul=`a[href],button:not(:disabled),textarea:not(:disabled),input:not(:disabled),select:not(:disabled),[tabindex]:not([tabindex="-1"])`;function Wl(e,t){return t?e.needsAction||e.status===`needs_action`?t.question_asked||t.approval_requested:e.status===`failed`?t.session_error:gn(e)?t.session_done:!1:!0}function Gl(){let e=je(),t=sl(),n=(0,G.useSyncExternalStore)(fo,lo),r=(0,G.useSyncExternalStore)(fo,po),[i,a]=(0,G.useState)(!1),o=(0,G.useRef)(null),s=(0,G.useRef)(null),c=(0,G.useRef)(null),[u,f]=(0,G.useState)(()=>localStorage.getItem(`bivy:automation-next-step`)===`done`),p=(0,G.useSyncExternalStore)(Tt,Dt),h=(0,G.useSyncExternalStore)(ir,ar),g=(0,G.useSyncExternalStore)(ec,tc),_=(0,G.useSyncExternalStore)(cc,lc),v=e.presentation.githubApp?.returning;(0,G.useEffect)(()=>{v&&or({setup:`github`})},[v]);let b=Re(),x=ce&&b,[C,w]=(0,G.useState)(!1),[T,E]=(0,G.useState)(!1),[D,A]=(0,G.useState)(!1),[j,M]=(0,G.useState)(null);(0,G.useEffect)(()=>Jr(M),[]),(0,G.useEffect)(()=>M(null),[e.activeSession.activeSessionId]);let N=(0,G.useRef)(!1);(0,G.useEffect)(()=>{let t=e.activeSession.activeSessionId;if(!N.current||!t)return;N.current=!1;let n=!1;return R.onAppsChanged(e=>{n||e!==t||R.appCommand(`apps.list`,t).then(e=>{let r=e.apps.find(e=>e.views.some(e=>e.kind===`web`)),i=r?.views.find(e=>e.kind===`web`);!n&&r&&i&&(n=!0,M({sessionId:t,appId:r.id,openView:{viewId:i.id}}))},()=>{})})},[e.activeSession.activeSessionId]);let[P,te]=(0,G.useState)(!1),[ne,re]=(0,G.useState)(()=>l(sessionStorage)),ie=(0,G.useCallback)(()=>R.listMachineApps(),[]),[ae,oe]=(0,G.useState)(null);(0,G.useEffect)(()=>{let e=y(sessionStorage);e&&al(e).then(t=>{t?oe({id:e,items:t}):m(sessionStorage)},()=>m(sessionStorage))},[]);let[se,le]=(0,G.useState)(null);(0,G.useEffect)(()=>{if(!se||(e.activeSession.activeSessionId??null)!==se.sessionId)return;let t=0,n,r=()=>{R.prefillComposer(se.text,se.attachments)?(ol(se.inbox),le(null)):++t<50&&(n=setTimeout(r,100))};return n=setTimeout(r,0),()=>clearTimeout(n)},[se,e.activeSession.activeSessionId]);let de=(0,G.useMemo)(()=>fn(e.activeSession.transcript),[e.activeSession.transcript]),fe=(0,G.useMemo)(()=>pn(e.activeSession.transcript),[e.activeSession.transcript]),pe=e.sessionIndex.sessions.find(t=>t.sessionId===e.activeSession.activeSessionId),I=dl(pe?.sessionId,pe?mn(pe)===`working`:!1),me=Gr(pe?.sessionId,I.noteTimes),[he,ge]=(0,G.useState)(!1),[_e,L]=(0,G.useState)(null),[xe,Se]=(0,G.useState)(!1),[Ce,we]=(0,G.useState)(!1),[z,Ee]=(0,G.useState)(null),[De,Me]=(0,G.useState)(!1),[Ne,Pe]=(0,G.useState)(null),[Fe,Ie]=(0,G.useState)(()=>new Set),Le=(0,G.useCallback)(()=>{!R.direct&&e.connection.signedIn&&R.fetchGithubQueue().then(Pe).catch(()=>{})},[e.connection.signedIn]);(0,G.useEffect)(()=>{if(R.direct||!e.connection.signedIn)return;let t=Le;t();let n=Ol(t),r=setInterval(()=>{document.visibilityState!==`hidden`&&t()},3e4);return()=>{clearInterval(r),n()}},[Le,e.connection.signedIn]),(0,G.useEffect)(()=>{!R.direct&&e.connection.signedIn&&R.getNotificationPreferences().then(mo).catch(()=>{})},[e.connection.signedIn]);let ze=(0,G.useMemo)(()=>On(Ne),[Ne]),Be=(0,G.useMemo)(()=>bn(Ne),[Ne]),Ve=(0,G.useMemo)(()=>e.sessionIndex.sessions.filter(e=>_n(e)>0),[e.sessionIndex.sessions]),He=(0,G.useMemo)(()=>n?Ve.filter(e=>Wl(e,r)).length:0,[n,Ve,r]),Ue=Ve.some(e=>!Fe.has(e.sessionId)),We=(0,G.useCallback)(()=>{a(!0),Ie(new Set(Ve.map(e=>e.sessionId)))},[Ve]),Ge=(0,G.useCallback)(()=>a(!1),[]);(0,G.useEffect)(()=>{let e=Ve.length,t=He;document.title=e>0?`(${e}) Bivy`:`Bivy`;let n=navigator,r=()=>{(t>0?n.setAppBadge?.(t):n.clearAppBadge?.())?.catch(()=>{})};r();let i=Ol(r);return()=>{i(),document.title=`Bivy`}},[He,Ve.length]);let Ke=!R.direct&&e.connection.signedIn&&!e.connection.currentNodeId;(0,G.useEffect)(()=>{if(!Ke)return;let e=()=>{document.visibilityState!==`hidden`&&R.refreshNodes()};e();let t=setInterval(e,4e3),n=Ol(e);return()=>{clearInterval(t),n()}},[Ke]);let[qe,Je]=(0,G.useState)(()=>localStorage.getItem(`bivy.focusView`)===`1`),Ye=(0,G.useCallback)(()=>{Je(e=>{let t=!e;return localStorage.setItem(`bivy.focusView`,t?`1`:`0`),t})},[]),Xe=e.connection.status===`online`;(0,G.useEffect)(()=>ye(e.activeSession.working),[e.activeSession.working]),(0,G.useEffect)(()=>{Xe&&Ae()},[Xe]);let Ze=Object.values(e.sessionIndex.followupsBySession).reduce((e,t)=>e+t.length,0);(0,G.useEffect)(()=>be(Ze),[Ze]);let Qe=(0,G.useMemo)(()=>k({direct:R.direct,signedIn:e.connection.signedIn,status:e.connection.status,runtimes:e.catalogs.runtimes,readiness:e.catalogs.activationReadiness}),[e.catalogs.activationReadiness,e.catalogs.runtimes,e.connection.signedIn,e.connection.status]),$e=e.activeSession.transcript.some(e=>e.role===`assistant`&&!!e.text&&!e.tool);(0,G.useEffect)(()=>{$e&&e.activeSession.activeSessionId&&!u&&localStorage.setItem(`bivy:automation-next-step`,`done`)},[$e,e.activeSession.activeSessionId,u]);let[tt,rt]=(0,G.useState)(!1),B=(0,G.useRef)(!1);Xe&&(B.current=!0);let it=e.connection.status===`reconnecting`||B.current&&(e.connection.status===`connecting`||e.connection.status===`linking`||e.connection.status===`pairing`),at=!!(e.activeSession.activeSessionId&&e.sessionIndex.tuiSessions.includes(e.activeSession.activeSessionId)),V=e.sessionIndex.sessions.find(t=>t.sessionId===e.activeSession.activeSessionId),ot=V?.runtimeId??e.activeSession.activeRuntimeId,st=e.catalogs.runtimes.find(e=>e.id===ot)?.capabilities,ct=Xe&&!!st?.interactiveTui,lt=e.activeSession.activeSessionId,[ut,dt]=(0,G.useState)(()=>({id:lt,view:Pl(sessionStorage,lt)})),pt=ut.view;ut.id!==lt&&(pt=Pl(sessionStorage,lt),dt({id:lt,view:pt}));let mt=(0,G.useCallback)(t=>{lt&&Fl(sessionStorage,lt,t),t===`chat`&&lt&&e.sessionIndex.tuiSessions.includes(lt)&&R.closeSessionTui(lt),dt({id:lt,view:t})},[lt,e.sessionIndex.tuiSessions]),ht=!!lt&&ct&&!z,gt=ht&&pt===`terminal`,_t=R.direct&&O(`directNode`,!1),vt=!R.direct&&!R.solo||_t,yt=(Xe||it||R.isCurrentNodeResumable()||!!e.draft.ephemeralConfig)&&!at;kl({isOpen:i,onOpen:We,onClose:Ge,maxWidth:900}),nt(Ge,i),(0,G.useEffect)(()=>{if(!i)return;let e=o.current,t=s.current,n=c.current;t?.setAttribute(`inert`,``);let r=()=>e?Array.from(e.querySelectorAll(Ul)):[],a=requestAnimationFrame(()=>{(e?.querySelector(`.sidebar-close`)??e)?.focus()}),l=t=>{if(t.key!==`Tab`)return;let n=r();if(!n.length)return;let i=n[0],a=n[n.length-1],o=document.activeElement;t.shiftKey&&(o===i||!e?.contains(o))?(t.preventDefault(),a.focus()):!t.shiftKey&&(o===a||!e?.contains(o))&&(t.preventDefault(),i.focus())};return window.addEventListener(`keydown`,l),()=>{cancelAnimationFrame(a),window.removeEventListener(`keydown`,l),t?.removeAttribute(`inert`),n?.focus()}},[i]);let bt=(0,G.useCallback)((t,n)=>{if(t.startsWith(`connect-provider:`)){let n=t.slice(17),r=e.connection.currentNodeId;n&&r&&R.store.setNeedsModelAuth({nodeId:r,provider:n});return}if(t===`fix-auth`||t.startsWith(`fix-auth:`)){let n=t.startsWith(`fix-auth:`)?t.slice(9):``,r=e.connection.currentNodeId;n&&r?R.store.setNeedsModelAuth({nodeId:r,provider:n}):Ot(`providers`);return}if(t===`retry-auth`){R.sendPrompt(`Continue — your previous request failed to authenticate. Pick up exactly where you left off.`);return}if(t.startsWith(`retry-at-reset:`)){R.setLimitRetry(!0);return}switch(t){case`/new`:R.newSession();break;case`fork`:te(!0);break;case`cancel-resume`:R.setLimitRetry(!1);break;case`/resume`:R.sendPrompt(`Please continue — your previous turn was interrupted by a restart before it finished. Pick up exactly where you left off and finish what you were doing.`)}},[e.connection.currentNodeId]),xt=(0,G.useMemo)(()=>{let t=e.activeSession.activeRuntimeId??e.catalogs.selectedAgentId,n=e.catalogs.currentModel?.provider,r=ue(t,typeof n==`string`?n:void 0);return r?`fix-auth:${r}`:`fix-auth`},[e.activeSession.activeRuntimeId,e.catalogs.selectedAgentId,e.catalogs.currentModel]),St=(0,G.useCallback)(()=>{if(a(!1),!R.direct&&e.connection.nodes.length===0&&R.refreshNodes(),R.direct||e.connection.nodes.length<=1){L(null),Se(!0),we(!1),ge(!0);return}Me(!0)},[e.connection.nodes]),Ct=(0,G.useCallback)(t=>{Me(!1),!R.direct&&t!==e.connection.currentNodeId&&R.switchNode(t),L(null),Se(!0),we(!1),ge(!0),a(!1)},[e.connection.currentNodeId]),At=(0,G.useCallback)((t,n,r,i)=>{let o=()=>{(!r||R.isCurrentSessionTarget(r,i))&&(Ee({termId:t,nodeId:n}),ge(!1),L(null),Se(!1),we(!1))};if(a(!1),!R.direct&&n&&n!==e.connection.currentNodeId){R.connectToNode(n).then(o).catch(e=>{(!r||R.isCurrentSessionTarget(r,i))&&R.store.setError(e instanceof Error?e.message:String(e))});return}o()},[e.connection.currentNodeId]),jt=(0,G.useCallback)((t,n,r)=>{let i=()=>{R.isCurrentSessionTarget(t,r)&&(Ee(null),L(t),Se(!0),we(!1),ge(!0))};if(a(!1),!R.direct&&n&&n!==e.connection.currentNodeId){R.connectToNode(n).then(i).catch(e=>{R.store.setError(e instanceof Error?e.message:String(e))});return}i()},[e.connection.currentNodeId]),Mt=(0,G.useCallback)(()=>{z&&(L(z.termId),Se(!1),we(!1),ge(!0))},[z]),Nt=(0,G.useCallback)(()=>{if(!z)return;let e=z.termId;Ee(null),R.sendTerminal({kind:`terminal.takeover`,termId:e})},[z]);(0,G.useEffect)(()=>{z&&(e.sessionIndex.runTerminals.some(e=>e.termId===z.termId)||Ee(null))},[z,e.sessionIndex.runTerminals]);let Pt=(0,G.useCallback)(()=>{L(null),Se(!1),we(!0),ge(!0)},[]),Ft=(0,G.useCallback)(()=>{e.activeSession.activeSessionId&&R.closeSessionTui(e.activeSession.activeSessionId)},[e.activeSession.activeSessionId]);(0,G.useEffect)(()=>{let t=new URLSearchParams(location.search).get(`review`);t&&e.activeSession.activeSessionId&&Hi(e.activeSession.activeSessionId,{reviewId:t})},[e.activeSession.activeSessionId]),(0,G.useEffect)(()=>{let t=new URLSearchParams(location.search),n=t.get(`review`);if(!n||!e.activeSession.activeSessionId||e.connection.status!==`online`)return;let r=e.activeSession.transcript.find(e=>e.review?.id===n)?.review;r&&(t.delete(`review`),history.replaceState(history.state,``,`${location.pathname}${t.size?`?${t}`:``}${location.hash}`),M({sessionId:r.sessionId,appId:r.appId,openView:{viewId:r.viewId,path:r.path}}))},[e.activeSession.activeSessionId,e.activeSession.transcript,e.connection.status]),(0,G.useEffect)(()=>{let t=new URLSearchParams(location.search),n=t.get(`apps`);n&&e.activeSession.activeSessionId&&(t.delete(`apps`),history.replaceState(history.state,``,`${location.pathname}${t.size?`?${t}`:``}${location.hash}`),/^[a-f0-9]{32}$/.test(n)&&M({sessionId:e.activeSession.activeSessionId,appId:n}))},[e.activeSession.activeSessionId]),(0,G.useEffect)(()=>{let t=new URLSearchParams(location.search),n=e.activeSession.activeSessionId;t.get(`show`)===`1`&&n&&e.connection.status===`online`&&(t.delete(`show`),history.replaceState(history.state,``,`${location.pathname}${t.size?`?${t}`:``}${location.hash}`),R.appCommand(`apps.showMe`,n).catch(e=>R.store.setError(e instanceof Error?e.message:`Couldn't show the app`)))},[e.activeSession.activeSessionId,e.connection.status]),(0,G.useEffect)(()=>{let t=new URLSearchParams(location.search).get(`attention`);if(!t||!e.activeSession.activeSessionId)return;let n=document.getElementById(`attention-${encodeURIComponent(t)}`);n&&(n.scrollIntoView({block:`center`}),n.setAttribute(`tabindex`,`-1`),n.focus({preventScroll:!0}))},[e.activeSession.activeSessionId,e.activeSession.approvals,e.activeSession.questions,e.activeSession.turnAttentions]);let It=e.activeSession.approvals.filter(t=>!t.sessionId||t.sessionId===e.activeSession.activeSessionId),Lt=e.activeSession.questions.filter(t=>!t.sessionId||t.sessionId===e.activeSession.activeSessionId),Rt=e.activeSession.turnAttentions.find(t=>t.sessionId===e.activeSession.activeSessionId),zt=(0,G.useRef)(null),Bt=[It[0]?.id,Lt[0]?.id,Rt?.sessionId].filter(Boolean).join(`:`);(0,G.useEffect)(()=>{Bt&&requestAnimationFrame(()=>zt.current?.querySelector(`[data-attention-card]`)?.focus())},[Bt]);let Vt=!R.direct&&!R.solo&&!e.connection.signedIn,H=(0,G.useSyncExternalStore)(pr,mr),Ht=!R.direct&&e.connection.signedIn&&!e.connection.currentNodeId;if(Vt||H)return(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(qs,{onDismiss:Vt?void 0:gr}),(0,K.jsxs)(`div`,{className:`toast-stack`,children:[(0,K.jsx)(hl,{}),(0,K.jsx)(Ws,{})]})]});let Ut=V?Be.get(V.sessionId)??wn(V.source):null,Wt=V?.forkedFrom?(()=>{let t=e.sessionIndex.sessions.find(e=>e.sessionId===V.forkedFrom);return{sessionId:V.forkedFrom,name:t?.name,nodeId:t?.nodeId,openable:!!t}})():void 0,Gt=V?.nodeId||e.connection.currentNodeId||void 0,Kt=e.connection.nodes.find(e=>e.id===Gt),qt=Kt?`${Kt.name||Kt.id} (${Kt.id})`:Gt,Jt=!!(V?.source&&String(V.source).startsWith(`repo:`));return(0,K.jsxs)(`div`,{className:`app`,children:[(0,K.jsxs)(`div`,{ref:o,className:`sidebar${i?` open`:``}`,role:i?`dialog`:`complementary`,"aria-modal":i?`true`:void 0,"aria-label":`Sessions and workspace`,tabIndex:i?-1:void 0,children:[(0,K.jsxs)(`div`,{className:`sidebar-head`,children:[(0,K.jsx)(`span`,{className:`brand`,children:`Bivy`}),(0,K.jsx)(`div`,{className:`sidebar-head-actions`,children:(0,K.jsx)(`button`,{className:`btn ghost icon only-mobile sidebar-close`,onClick:Ge,"aria-label":`Close sessions`,children:(0,K.jsx)(et,{})})})]}),(0,K.jsx)(Xn,{runEvidence:ze,sessionSources:Be,automationsActive:!!h,onOpenTerminal:St,terminalDisabled:!Xe,onOpenAutomations:()=>{or(),Ge()},libraryActive:g,onOpenLibrary:e=>{nc(e),Ge()},onPick:(t,n,r)=>{let i=R.selectSessionTarget(t);Ee(null),Ge();let a=e.sessionIndex.sessions.find(e=>e.sessionId===t);if(a&&Cn(a)){jt(t,r,i);return}if(a&&Sn(a)){R.findLiveRunTerminal(t,r).then(e=>{R.isCurrentSessionTarget(t,i)&&(e?At(e.termId,e.nodeId??r,t,i):R.openSessionOnNode(t,n,r))}).catch(e=>{R.isCurrentSessionTarget(t,i)&&R.store.setError(e instanceof Error?e.message:String(e))});return}R.openSessionOnNode(t,n,r)},onPickTerminal:At}),(0,K.jsxs)(`div`,{className:`sidebar-foot`,children:[(0,K.jsxs)(`button`,{className:`btn primary new-session-btn`,onClick:()=>{Ee(null),R.newSession(),Ge()},children:[(0,K.jsxs)(`svg`,{viewBox:`0 0 24 24`,width:`18`,height:`18`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,K.jsx)(`path`,{d:`M12 20h9`}),(0,K.jsx)(`path`,{d:`M16.4 3.6a2.1 2.1 0 0 1 3 3L7 19l-4 1 1-4Z`})]}),(0,K.jsx)(`span`,{children:`New session`})]}),(0,K.jsx)(`button`,{className:`btn icon settings-gear`,onClick:()=>{Ot(),Ge()},title:`Settings`,"aria-label":`Settings`,children:(0,K.jsxs)(`svg`,{viewBox:`0 0 24 24`,width:`20`,height:`20`,fill:`none`,stroke:`currentColor`,strokeWidth:`1.7`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,K.jsx)(`circle`,{cx:`12`,cy:`12`,r:`3`}),(0,K.jsx)(`path`,{d:`M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 1 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 1 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 1 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 1 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z`})]})})]})]}),i&&(0,K.jsx)(`div`,{className:`scrim`,onClick:Ge}),(0,K.jsxs)(`main`,{ref:s,className:`main${Ht?` needs-node`:``}`,children:[(0,K.jsxs)(`header`,{className:`topbar`,children:[(0,K.jsxs)(`button`,{ref:c,className:`btn ghost icon only-mobile burger-btn`,onClick:We,"aria-label":Ue?`Open sessions — something needs your attention`:`Open sessions`,children:[`☰`,Ue&&(0,K.jsx)(`span`,{className:`attn-indicator`,"aria-hidden":!0,children:(0,K.jsx)(wt,{status:`needs-action`})})]}),(0,K.jsxs)(`div`,{className:`topbar-title`,children:[(0,K.jsx)(`div`,{className:`topbar-title-row`,children:(0,K.jsx)(`h1`,{className:`title`,title:Ht?`Connect a Machine`:e.activeSession.activeTitle,children:Ht?`Connect a Machine`:e.activeSession.activeTitle})}),(vt||ht)&&(0,K.jsxs)(`div`,{className:`topbar-subline`,children:[vt&&(_t?(0,K.jsx)(Ys,{}):(0,K.jsx)(Js,{})),ht&&(0,K.jsx)(Ll,{value:pt,onChange:mt})]})]}),(0,K.jsxs)(`div`,{className:`topbar-actions`,children:[e.activeSession.activeSessionId&&!gt&&(0,K.jsxs)(`button`,{className:`btn ghost focus-view-btn`,onClick:Ye,title:qe?`Focus view on — show full transcript`:`Focus view — show only prompts and final answers`,"aria-label":qe?`Show full transcript`:`Show only prompts and final answers`,"aria-pressed":qe,children:[qe?(0,K.jsxs)(`svg`,{viewBox:`0 0 24 24`,width:`18`,height:`18`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,K.jsx)(`path`,{d:`M9.88 9.88a3 3 0 1 0 4.24 4.24`}),(0,K.jsx)(`path`,{d:`M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68`}),(0,K.jsx)(`path`,{d:`M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61`}),(0,K.jsx)(`line`,{x1:`2`,x2:`22`,y1:`2`,y2:`22`})]}):(0,K.jsxs)(`svg`,{viewBox:`0 0 24 24`,width:`18`,height:`18`,fill:`none`,stroke:`currentColor`,strokeWidth:`2`,strokeLinecap:`round`,strokeLinejoin:`round`,"aria-hidden":`true`,children:[(0,K.jsx)(`path`,{d:`M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7z`}),(0,K.jsx)(`circle`,{cx:`12`,cy:`12`,r:`3`})]}),(0,K.jsx)(`span`,{className:`focus-view-label`,children:qe?`Focused`:`Focus`})]}),e.activeSession.activeSessionId&&(0,K.jsx)(Dc,{sessionId:e.activeSession.activeSessionId,name:e.activeSession.activeTitle,isRepo:Jt,node:qt,agent:V?.agentName||V?.runtimeId,workspace:V?.workspace,worktree:V?.worktree,branch:V?.branch,sessionFile:V?.path,auditHealth:V?.auditHealth,eventLogHealth:V?.eventLogHealth})]})]}),(e.connection.status===`pairing`||e.connection.status===`linking`)&&(0,K.jsxs)(`div`,{className:`banner`,"data-tone":`neutral`,role:`status`,children:[(0,K.jsx)(ft,{size:`xs`}),`Linking this device…`]}),e.connection.nodeUpdate&&!V?.pendingLaunch&&(0,K.jsxs)(`div`,{className:`banner`,"data-tone":`accent`,role:`status`,children:[(0,K.jsxs)(`span`,{className:`banner-text`,children:[`This machine runs Bivy `,e.connection.nodeUpdate.current,` — `,e.connection.nodeUpdate.latest,` is available.`]}),(0,K.jsx)(`button`,{className:`btn sm primary banner-action`,onClick:()=>R.updateNode(),disabled:e.connection.nodeUpdating,children:e.connection.nodeUpdating?`Updating…`:`Update this machine`})]}),!Ht&&!e.draft.ephemeralConfig&&!e.activeSession.activeSessionId&&e.activeSession.transcript.length===0&&e.sessionIndex.sessions.length===0&&(0,K.jsx)(G.Suspense,{fallback:null,children:Qe.activated?(0,K.jsx)(Cl,{machineName:e.connection.nodes.find(t=>t.id===e.connection.currentNodeId)?.name||void 0,onOpenApp:e=>{N.current=!0,ye(!0),R.sendPrompt(yl(e),void 0,{workspace:e.project,repo:void 0,branch:void 0})},onFirstChange:()=>{ye(!0),R.sendPrompt(bl)}}):(0,K.jsx)(zl,{activation:Qe,onRemediate:{connect_machine:()=>document.querySelector(`.node-switcher-btn`)?.click(),install_agent:()=>document.querySelector(`.agent-pill`)?.click(),authenticate_credential:()=>document.querySelector(`.model-pill`)?.click(),grant_repository:()=>document.querySelector(`.repo-pill`)?.click()}})}),Ht&&(0,K.jsx)(`div`,{className:`connect-runner-scroll`,children:(0,K.jsx)(El,{nodes:e.connection.nodes,ephemeralEnabled:!1,onPickNode:e=>R.switchNode(e),onEphemeral:()=>w(!0),onRefresh:()=>R.refreshNodes()})}),z&&!he?(()=>{let t=e.sessionIndex.runTerminals.find(e=>e.termId===z.termId),n=t?.name||t?.label||t?.agent||`Terminal session`,r=e.connection.nodes.find(e=>e.id===(t?.nodeId||z.nodeId)),i=!!t?.sessionId||hs(t?.agent,e.catalogs.runtimes);return(0,K.jsx)(Oc,{sessionId:t?.sessionId,sessionName:n,nodeLabel:r?.name,online:e.connection.status!==`offline`,onOpenTerminal:Mt,onUseChat:i?Nt:void 0})})():gt?(0,K.jsx)(G.Suspense,{fallback:null,children:(0,K.jsx)(Rl,{embedded:!0,tui:!0,sessionId:lt,onClose:()=>mt(`chat`)},lt)}):at?(0,K.jsx)(Oc,{sessionId:e.activeSession.activeSessionId??void 0,sessionName:e.activeSession.activeTitle,nodeLabel:Kt?.name,online:e.connection.status!==`offline`,onOpenTerminal:Pt,onUseChat:Ft}):(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(za,{entries:e.activeSession.transcript,working:e.activeSession.working,workingLabel:e.activeSession.workingLabel,draftRoute:!e.activeSession.activeSessionId,greeting:e.sessionIndex.sessions.length>0?`What should we work on?`:void 0,opening:e.activeSession.opening,sessionKey:e.activeSession.activeSessionId,focusView:qe,onAction:bt,authAction:xt,header:V?.launchProgress?(0,K.jsx)(Cs,{progress:V.launchProgress,onChooseModel:e=>R.chooseLaunchModel(V.sessionId,e),onRefreshModels:()=>R.refreshLaunchModels(V.sessionId),onSetupCredentials:async()=>{try{await R.setupManagedCredentials()}catch(e){R.store.setError(e instanceof Error?e.message:String(e))}},onRetryLaunch:V.pendingLaunch?async()=>{try{await R.retryPendingLaunch(V.sessionId)}catch(e){R.store.setError(e instanceof Error?e.message:String(e))}}:void 0,onRetryFreshMachine:V.pendingLaunch?async()=>{try{await R.retryPendingLaunchOnFreshMachine(V.sessionId)}catch(e){R.store.setError(e instanceof Error?e.message:String(e))}}:void 0}):void 0,footer:(0,K.jsxs)(`div`,{className:`attention-footer`,ref:zt,role:`region`,"aria-live":`polite`,"aria-label":`Agent needs your response`,children:[(0,K.jsx)(Es,{approvals:It,onResolve:(e,t,n)=>R.resolveApproval(e,t,n)}),(0,K.jsx)(ks,{questions:Lt,onAnswer:(e,t,n)=>R.answerQuestion(e,t,n),onCancel:(e,t)=>R.cancelQuestion(e,t)}),Rt&&(0,K.jsx)(As,{attention:Rt,onResolve:(e,t)=>R.resolveTurnAttention(e,t)})]})}),V&&(0,K.jsx)(Tl,{working:e.activeSession.working,machineName:Kt?.name||void 0,onOpenChange:rt}),$e&&V&&!u&&!tt&&(0,K.jsxs)(`section`,{className:`card next-step`,"aria-label":`Next step`,children:[(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`strong`,{children:`Make this repeatable`}),(0,K.jsx)(`p`,{children:`Create an automation to run work without you.`})]}),(0,K.jsxs)(`div`,{className:`next-step-actions`,children:[(0,K.jsx)(`button`,{type:`button`,className:`btn sm primary`,onClick:()=>{localStorage.setItem(`bivy:automation-next-step`,`done`),f(!0),or()},children:`Open Automations`}),(0,K.jsx)(`button`,{type:`button`,className:`btn sm ghost`,"aria-label":`Dismiss`,onClick:()=>{localStorage.setItem(`bivy:automation-next-step`,`done`),f(!0)},children:`Dismiss`})]})]}),T&&(0,K.jsx)(Jc,{history:e.activeSession.changesHistory,checks:V?ze.get(V.sessionId)?.checks?.map(e=>({name:e.name,status:e.status})):void 0,onClose:()=>E(!1)}),D&&(0,K.jsx)(no,{artifacts:de,onClose:()=>A(!1)}),j&&j.sessionId===V?.sessionId&&(0,K.jsx)(Ka,{...j,onClose:()=>M(null)},`${j.sessionId}:${j.appId??``}:${j.openView?.viewId??``}`),P&&V&&(0,K.jsx)(wc,{sessionId:V.sessionId,onClose:()=>te(!1)}),(0,K.jsxs)(`div`,{className:`composer-gh`,children:[V&&Ut?(0,K.jsx)(Wc,{anchorId:`attention-${V.sessionId}`,source:Ut,statusClass:mn(V),statusLabel:vn(V),gh:e.activeSession.github,evidence:ze.get(V.sessionId),finishedAt:V.finishedAt,usage:e.activeSession.usage,forkedFrom:Wt,delegatedFrom:V?.delegatedFrom,filesEdited:qc(e.activeSession.changesHistory),onOpenChanges:()=>E(!0),artifactsCount:de.length,onOpenArtifacts:()=>A(!0),onOpenRun:e=>uc(e),onRecover:e=>{let t=V.sessionId,n=ze.get(t),r=n?Nn(n):[];if(e===`fork`){R.forkSession(t);return}if(e===`fix`){R.sendPrompt(r.length?`The deterministic checks failed (${r.join(`, `)}). Please investigate the failures and fix them, then confirm the checks pass.`:`This run did not finish cleanly. Please investigate what went wrong and fix it.`);return}R.sendPrompt(r.length?`Please re-run the ${r.join(`, `)} check(s) and address anything that still fails.`:`Please re-run the project checks and address anything that fails.`)}}):(0,K.jsx)(Mc,{gh:e.activeSession.github}),V&&(0,K.jsx)(Gc,{apps:I.published??fe.length,serverPorts:I.offers.map(e=>e.port),newNotes:me,onOpen:()=>M({sessionId:V.sessionId})})]}),(0,K.jsx)(Dl,{status:e.connection.status,hasCachedTranscript:e.activeSession.transcript.length>0,machineName:Kt?.name||void 0}),(0,K.jsx)(ms,{state:e,disabled:!yt,disabledHint:e.connection.status===`offline`?Kt?.name?`${Kt.name} is offline — run \`bivy status\` there`:"Machine offline — run `bivy status` on it":Kt?.name?`Connecting to ${Kt.name}…`:`Connecting…`,working:e.activeSession.working,onSend:(t,n)=>{e.connection.status!==`online`&&ve(),ye(!0),R.sendPrompt(t,n)},onAbort:()=>R.abort(),onError:e=>R.store.setError(e)})]})]}),h&&(0,K.jsx)(G.Suspense,{fallback:null,children:(0,K.jsx)(Vl,{state:e,section:h.section,onSectionChange:sr,githubQueue:Ne,onRefreshGithubQueue:Le,onOpenRun:t=>{lr(e.activeSession.activeSessionId?{kind:`session`,id:e.activeSession.activeSessionId}:{kind:`new`}),uc(t)},onClose:()=>lr(e.activeSession.activeSessionId?{kind:`session`,id:e.activeSession.activeSessionId}:{kind:`new`}),onOpenSession:t=>{let n=e.sessionIndex.sessions.find(e=>e.sessionId===t);R.openSessionOnNode(t,n?.path,n?.nodeId),lr({kind:`session`,id:t}),Ge()}})}),g&&(0,K.jsx)(G.Suspense,{fallback:null,children:(0,K.jsx)(Hl,{view:g,onClose:()=>rc(e.activeSession.activeSessionId?{kind:`session`,id:e.activeSession.activeSessionId}:{kind:`new`}),onShowInChat:(t,n,r)=>{Hi(t,n),rc({kind:`session`,id:t});let i=e.sessionIndex.sessions.filter(e=>e.sessionId===t),a=i.find(e=>e.nodeId===r)??i[0];R.openSessionOnNode(t,a?.path,r??a?.nodeId),Ge()}})}),_&&(0,K.jsx)(xc,{runId:_.runId,load:e=>ke(R.local,e),onCancel:async e=>{await F(R.local,e),Le()},onRetry:async e=>{await Te(R.local,e),Le()},onReauthenticate:async(t,n,r)=>{let i=n||e.connection.currentNodeId;if(!i)throw Error(`The Machine for this Run is not available.`);await R.connectToNode(i),R.store.setNeedsModelAuth({nodeId:i,provider:t,reason:r})},resolveMachineName:t=>e.connection.nodes.find(e=>e.id===t)?.name||void 0,isSessionResolvable:t=>e.sessionIndex.sessions.some(e=>e.sessionId===t),onReceiptReviewed:()=>{Oe(R.local,`receipt_reviewed`,matchMedia(`(max-width: 700px)`).matches?`mobile`:`desktop`).catch(()=>{})},onOpenSession:t=>{let n=e.sessionIndex.sessions.find(e=>e.sessionId===t);R.openSessionOnNode(t,n?.path,n?.nodeId),dc({kind:`session`,id:t}),Ge()},onClose:()=>dc(e.activeSession.activeSessionId?{kind:`session`,id:e.activeSession.activeSessionId}:{kind:`new`})}),p&&(0,K.jsx)(G.Suspense,{fallback:null,children:(0,K.jsx)(Bl,{state:e,view:p.view,onViewChange:Et,onImported:e=>{kt({kind:`session`,id:e}),Ge()},onRedirectToAutomations:t=>{kt(e.activeSession.activeSessionId?{kind:`session`,id:e.activeSession.activeSessionId}:{kind:`new`}),t===`github`||t===`linear`||t===`slack`?or({setup:t}):t===`queue`||t===`rulesets`?or({section:t===`queue`?`runs`:t}):or(),Ge()},onClose:()=>kt(e.activeSession.activeSessionId?{kind:`session`,id:e.activeSession.activeSessionId}:{kind:`new`})})}),C&&x&&(0,K.jsx)(gl,{onClose:()=>w(!1),firstRun:Ht}),e.presentation.forkProgress&&(0,K.jsx)(cl,{progress:e.presentation.forkProgress,onClose:()=>R.store.setForkProgress(null)}),e.presentation.needsModelAuth&&(0,K.jsx)(vl,{state:e}),De&&(0,K.jsx)(jo,{state:e,currentNodeId:e.connection.currentNodeId,onPick:Ct,onClose:()=>Me(!1)}),he&&(0,K.jsx)(G.Suspense,{fallback:null,children:(0,K.jsx)(Rl,{sessionId:xe?null:e.activeSession.activeSessionId,attachTermId:_e,standalone:xe,tui:Ce,onClose:()=>{ge(!1),L(null),Se(!1),we(!1)}})}),t&&(0,K.jsx)(`div`,{className:`banner`,"data-tone":`accent`,role:`status`,children:t}),(ne||ae)&&(0,K.jsx)(el,{text:[ae?.items.text,ne].filter(Boolean).join(`
24
24
 
25
25
  `),images:ae?.items.attachments,sessions:e.sessionIndex.sessions,listApps:ie,onDeliver:(t,n)=>{let r=ae,i=[S(r?.items.attachments.length??0,n),r?.items.text,ne].filter(Boolean).join(`
26
26