bb-app 0.0.8 → 0.0.10

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 (112) hide show
  1. package/app/dist/assets/AppSettingsView-H-BJwj9_.js +1 -0
  2. package/app/dist/assets/InternalReplayListView-BTghdJ73.js +1 -0
  3. package/app/dist/assets/{ProjectArchivedThreadsView-65_OMZ83.js → ProjectArchivedThreadsView-Cepv99cw.js} +1 -1
  4. package/app/dist/assets/ProjectSettingsView-BHiTMC3F.js +1 -0
  5. package/app/dist/assets/ThreadDetailRoute-BoiY0PTG.js +2867 -0
  6. package/app/dist/assets/ThreadUnarchiveButton-BjYW-ned.js +1 -0
  7. package/app/dist/assets/{angular-html-BnZNhOVu.js → angular-html-BYHpibq1.js} +1 -1
  8. package/app/dist/assets/{angular-ts-DErpwNhE.js → angular-ts-CvblCwhB.js} +1 -1
  9. package/app/dist/assets/{apl-jktjMWm9.js → apl-Ut09domA.js} +1 -1
  10. package/app/dist/assets/{astro-OyfDR1ll.js → astro-DxF6gUBf.js} +1 -1
  11. package/app/dist/assets/{blade-l0Ufqsdo.js → blade-bddbERIS.js} +1 -1
  12. package/app/dist/assets/{c-Zl_aQ3ky.js → c-DvGcUFpg.js} +1 -1
  13. package/app/dist/assets/{chunk-JZWAC4HX-CIhf07b6.js → chunk-JZWAC4HX-Bl8ic0GS.js} +1 -1
  14. package/app/dist/assets/{cobol-_uRe_arD.js → cobol-NY_aN0B9.js} +1 -1
  15. package/app/dist/assets/{coffee-CfM2Lk3K.js → coffee-BaV26CEE.js} +1 -1
  16. package/app/dist/assets/{cpp-BARm9yzN.js → cpp-Xi-gZwXu.js} +1 -1
  17. package/app/dist/assets/{crystal-DPHSLUHj.js → crystal-DCBHYaw5.js} +1 -1
  18. package/app/dist/assets/{css-CaJEL4gr.js → css-C0Oup6fN.js} +1 -1
  19. package/app/dist/assets/dialog-aN1xTDyE.js +1 -0
  20. package/app/dist/assets/{edge-Dv3pZ6l2.js → edge-IkZjdQbn.js} +1 -1
  21. package/app/dist/assets/effective-hosts-DyMNblil.js +68 -0
  22. package/app/dist/assets/{elixir-5FXX4Nj9.js → elixir-BiI7ssvs.js} +1 -1
  23. package/app/dist/assets/{elm-Dt58k6O0.js → elm--EsAmim6.js} +1 -1
  24. package/app/dist/assets/{erb-CVKj_0yX.js → erb-C4BhXkcz.js} +1 -1
  25. package/app/dist/assets/{git-rebase-vj4pqTZR.js → git-rebase-BwYFXKg2.js} +1 -1
  26. package/app/dist/assets/{glimmer-js-D-OzgliZ.js → glimmer-js-Cw6GlNl1.js} +1 -1
  27. package/app/dist/assets/{glimmer-ts-DmVVrzIL.js → glimmer-ts-Dtrhen-N.js} +1 -1
  28. package/app/dist/assets/{glsl-B1HRIf6W.js → glsl-CneArfWq.js} +1 -1
  29. package/app/dist/assets/{graphql-CRBPsUaz.js → graphql-XWsR5yIs.js} +1 -1
  30. package/app/dist/assets/{hack-BArcdkL7.js → hack-B_iHa-zR.js} +1 -1
  31. package/app/dist/assets/{haml-De5cSl4E.js → haml--apJL5g3.js} +1 -1
  32. package/app/dist/assets/{handlebars-8Zy2Vs3a.js → handlebars-DjtEJWNG.js} +1 -1
  33. package/app/dist/assets/{html-YVJdK98d.js → html-ByzR__NF.js} +1 -1
  34. package/app/dist/assets/{html-derivative-BT0t4I9A.js → html-derivative-1RBgMeAA.js} +1 -1
  35. package/app/dist/assets/{http-DC0GH0Bs.js → http-iGjydcO_.js} +1 -1
  36. package/app/dist/assets/{hurl-D2fUFTSB.js → hurl-BgevzdCh.js} +1 -1
  37. package/app/dist/assets/index-BikEVw-C.css +2 -0
  38. package/app/dist/assets/index-DERhWKi1.js +1364 -0
  39. package/app/dist/assets/{java-BQoJICeR.js → java-DlVWVy_H.js} +1 -1
  40. package/app/dist/assets/{javascript-Ct_DN1X8.js → javascript-CWg9eGcp.js} +1 -1
  41. package/app/dist/assets/{jinja-C1ngEoTP.js → jinja-cQnCNhMP.js} +1 -1
  42. package/app/dist/assets/{jison-C5ZNVS2c.js → jison-BqLsni6f.js} +1 -1
  43. package/app/dist/assets/{json-DVa2wY6T.js → json-f_cDSIBu.js} +1 -1
  44. package/app/dist/assets/{jsx-BJqlX6qV.js → jsx-Dddo5A0y.js} +1 -1
  45. package/app/dist/assets/{julia-Btw_zR3T.js → julia-BAHRDZhd.js} +1 -1
  46. package/app/dist/assets/{just-CbiU0D8M.js → just-C7Svdo3e.js} +1 -1
  47. package/app/dist/assets/{latex-VgwkhkD-.js → latex-DiP8QMOq.js} +1 -1
  48. package/app/dist/assets/{liquid-D6T8WtC6.js → liquid-Dlxvb4YZ.js} +1 -1
  49. package/app/dist/assets/localhost-badge-EX9hMqNt.js +22 -0
  50. package/app/dist/assets/{lua-CuA24JSE.js → lua-CYFMiD7T.js} +1 -1
  51. package/app/dist/assets/{marko-CdDxo3xN.js → marko-BmLsqAhT.js} +1 -1
  52. package/app/dist/assets/{mdc-BJBOg0pF.js → mdc-BbryJmmE.js} +1 -1
  53. package/app/dist/assets/mutation-cache-effects-Dhc8bhPi.js +1 -0
  54. package/app/dist/assets/{nginx-tsneJbc1.js → nginx-CkaxUV85.js} +1 -1
  55. package/app/dist/assets/{nim-Uh4_TEhl.js → nim-CMthB9Um.js} +1 -1
  56. package/app/dist/assets/page-shell-Cm6ORlc1.js +39 -0
  57. package/app/dist/assets/{perl-Cvf95oTY.js → perl-1j__vNSI.js} +1 -1
  58. package/app/dist/assets/{php-B83K9nvD.js → php-BgGf6vLq.js} +1 -1
  59. package/app/dist/assets/{pill-T3MuOnWq.js → pill-CxDd2TL9.js} +1 -1
  60. package/app/dist/assets/{pug-DgUV-atw.js → pug-CrMx1oZj.js} +1 -1
  61. package/app/dist/assets/{qml-DSVs6hjq.js → qml-DQlcMuCA.js} +1 -1
  62. package/app/dist/assets/{r-SJZNyiX3.js → r-BHAxDsuN.js} +1 -1
  63. package/app/dist/assets/{razor-CT_zg6et.js → razor-DH_SJCeW.js} +1 -1
  64. package/app/dist/assets/{regexp-CPrDWy5-.js → regexp-Ux97qEA5.js} +1 -1
  65. package/app/dist/assets/{rst-B9Z3vumO.js → rst-C8K66ASd.js} +1 -1
  66. package/app/dist/assets/{ruby-C4G9wCRV.js → ruby-Bgv5vCSb.js} +1 -1
  67. package/app/dist/assets/{sas-DtD9kPDC.js → sas-BJuZWbIi.js} +1 -1
  68. package/app/dist/assets/{scss-DcJY8Ckr.js → scss-CPH2TlnJ.js} +1 -1
  69. package/app/dist/assets/{settings-section-CckkqJNV.js → settings-section-BlOBCLDd.js} +1 -1
  70. package/app/dist/assets/{shellscript-CpA00qMx.js → shellscript-DTAdkLLb.js} +1 -1
  71. package/app/dist/assets/{shellsession-DFkHMqry.js → shellsession-CjAj2gkp.js} +1 -1
  72. package/app/dist/assets/{soy-DEEx3Rib.js → soy-wiaUs069.js} +1 -1
  73. package/app/dist/assets/split-button-DKl9pCWu.js +1 -0
  74. package/app/dist/assets/{sql-CnuL_wU6.js → sql-QcEXm8Az.js} +1 -1
  75. package/app/dist/assets/{stata-TDxB0qbw.js → stata-C48TsyCk.js} +1 -1
  76. package/app/dist/assets/{surrealql-GfZLB7-R.js → surrealql-gygGBtDy.js} +1 -1
  77. package/app/dist/assets/{svelte-C1vkmr9X.js → svelte-DzJ1bjdK.js} +1 -1
  78. package/app/dist/assets/{templ-i1836R3s.js → templ-DiTphmEM.js} +1 -1
  79. package/app/dist/assets/{tex-DHz9nFDC.js → tex-C6QfjVdh.js} +1 -1
  80. package/app/dist/assets/thread-queries-BZIo9kT6.js +1 -0
  81. package/app/dist/assets/{ts-tags-CsR619BC.js → ts-tags-Dg7FL61U.js} +1 -1
  82. package/app/dist/assets/{tsx-CXRf_lPc.js → tsx-BG30q5NW.js} +1 -1
  83. package/app/dist/assets/{twig-B_nSkJZb.js → twig-CWCr-AmW.js} +1 -1
  84. package/app/dist/assets/{typescript-Cu2naiFK.js → typescript-BR3EjqlG.js} +1 -1
  85. package/app/dist/assets/{vue-D3uT4E2F.js → vue-CkJ_ptKH.js} +1 -1
  86. package/app/dist/assets/{vue-html-Dv_PI5xi.js → vue-html-CFKVnnyc.js} +1 -1
  87. package/app/dist/assets/{vue-vine-CTHIuOTa.js → vue-vine-clps1P0S.js} +1 -1
  88. package/app/dist/assets/{xml-CWWC84Is.js → xml-BHYwmP79.js} +1 -1
  89. package/app/dist/assets/{xsl-CXHXpU_z.js → xsl-CbEJKtIJ.js} +1 -1
  90. package/app/dist/assets/{yaml-MdGg4yLc.js → yaml-C-71NFj-.js} +1 -1
  91. package/app/dist/index.html +11 -11
  92. package/host-daemon/dist/bb +53 -53
  93. package/host-daemon/dist/daemon-bundle.mjs +430 -426
  94. package/package.json +1 -1
  95. package/server/dist/drizzle/0005_strong_exodus.sql +29 -0
  96. package/server/dist/drizzle/meta/0005_snapshot.json +3227 -0
  97. package/server/dist/drizzle/meta/_journal.json +7 -0
  98. package/server/dist/index.js +10694 -12049
  99. package/app/dist/assets/AppSettingsView-6Zzy6BfL.js +0 -1
  100. package/app/dist/assets/InternalReplayListView-Cxndg0Hg.js +0 -1
  101. package/app/dist/assets/ProjectSettingsView-GUrHZAv8.js +0 -1
  102. package/app/dist/assets/ThreadDetailRoute-DpnTShJQ.js +0 -2871
  103. package/app/dist/assets/ThreadUnarchiveButton-D_xRAhIX.js +0 -1
  104. package/app/dist/assets/dialog-CuU6GHxh.js +0 -1
  105. package/app/dist/assets/effective-hosts-DNH4ZZMO.js +0 -68
  106. package/app/dist/assets/index-BRo1YnbF.js +0 -1360
  107. package/app/dist/assets/index-BYWUZ2en.css +0 -2
  108. package/app/dist/assets/localhost-badge-CSYdoqAD.js +0 -22
  109. package/app/dist/assets/mutation-cache-effects-xpqBLSkL.js +0 -1
  110. package/app/dist/assets/page-shell-BdV9dDbP.js +0 -39
  111. package/app/dist/assets/split-button-CDmbOtUR.js +0 -1
  112. package/app/dist/assets/thread-queries-DBgy7tqz.js +0 -1
@@ -0,0 +1 @@
1
+ import{Bt as e,Ht as t,It as n,Ki as r,Mi as i,Ni as a,Sa as o,Xn as s,dr as ee,ga as c,ji as l,qi as u,qt as d,t as f,wi as p}from"./page-shell-Cm6ORlc1.js";import{Nt as m,c as h,f as g,h as _,n as v,u as y}from"./effective-hosts-DyMNblil.js";import{a as b,g as x,i as S,o as C,r as w,s as T,t as E}from"./dialog-aN1xTDyE.js";import{Sn as D,an as O,rn as k,tn as A,xn as j,z as M}from"./index-DERhWKi1.js";import{i as N,n as P,r as F,t as I}from"./settings-section-BlOBCLDd.js";var L=o(c(),1),R=`size-2 shrink-0 rounded-full ring-1 ring-inset transition-all bg-success ring-success/25 shadow-[0_0_0_4px_color-mix(in_oklch,var(--color-success)_16%,transparent)]`,z=u();function B({target:e,pending:t,onOpenChange:n,onDelete:r}){return(0,z.jsx)(E,{open:e!==null,onOpenChange:n,children:(0,z.jsx)(w,{children:e?(0,z.jsx)(V,{target:e,pending:t,onDelete:r}):null})})}function V({target:e,pending:t,onDelete:n}){return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(C,{children:[(0,z.jsx)(T,{children:`Remove host?`}),(0,z.jsx)(S,{children:`Remove "${e.name}" and all of its project sources? This cannot be undone.`})]}),(0,z.jsx)(b,{children:(0,z.jsx)(p,{type:`button`,variant:`destructive`,disabled:t,onClick:()=>n(e.id),children:`Remove host`})})]})}function H({target:e,pending:t,onOpenChange:n,onRename:r}){return(0,z.jsx)(E,{open:e!==null,onOpenChange:n,children:(0,z.jsx)(w,{children:e?(0,z.jsx)(U,{target:e,pending:t,onRename:r},e.id):null})})}function U({target:e,pending:t,onRename:n}){let r=(0,L.useId)(),[i,a]=(0,L.useState)(e.currentName),[o,s]=(0,L.useState)(null);return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(C,{children:[(0,z.jsx)(T,{children:`Rename host`}),(0,z.jsx)(S,{children:`Choose a new name for this host.`})]}),(0,z.jsxs)(`form`,{className:`space-y-4`,onSubmit:r=>{if(r.preventDefault(),t)return;let a=i.trim();if(!a){s(`Host name cannot be empty.`);return}n(e.id,a)},children:[(0,z.jsxs)(`div`,{className:`space-y-2`,children:[(0,z.jsx)(x,{id:r,"aria-label":`Host name`,value:i,autoFocus:!0,disabled:t,onChange:e=>{a(e.target.value),o&&s(null)}}),o?(0,z.jsx)(`p`,{className:`text-sm text-destructive`,children:o}):null]}),(0,z.jsx)(b,{children:(0,z.jsx)(p,{type:`submit`,disabled:t,children:`Rename host`})})]})]})}function W({open:e,onOpenChange:t}){return(0,z.jsx)(E,{open:e,onOpenChange:t,children:(0,z.jsx)(w,{className:`sm:max-w-2xl`,children:(0,z.jsx)(G,{})})})}function G(){return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(C,{children:[(0,z.jsx)(T,{children:`Unable to add new host`}),(0,z.jsx)(S,{children:`You need to specify the URL that allows the new host to talk to the server.`})]}),(0,z.jsxs)(`div`,{className:`min-w-0 space-y-2 text-sm text-foreground`,children:[(0,z.jsx)(`p`,{children:`Run this on the server machine, then restart bb:`}),(0,z.jsx)(`pre`,{className:`min-w-0 overflow-x-auto rounded-md border border-border bg-surface-recessed px-3 py-2 font-mono text-xs leading-5`,children:(0,z.jsx)(`code`,{children:`npx bb-app config BB_APP_URL http://<your-machine>.<tailnet>.ts.net:38886`})})]})]})}function K(e){return new Date(e).toLocaleTimeString(void 0,{hour:`numeric`,minute:`2-digit`})}function q({host:e,open:t,target:n,onOpenChange:r}){let i=t&&n!==null;return(0,z.jsx)(E,{open:i,onOpenChange:r,children:(0,z.jsx)(w,{className:`sm:max-w-2xl`,children:i&&n?(0,z.jsx)(J,{host:e,target:n}):null})})}function J({host:e,target:t}){let[n,r]=(0,L.useState)(()=>t.expiresAt<=Date.now()),i=e?.status===`connected`,a=!i&&!n,o=i?`Host connected`:n?`Join command expired`:`Waiting for host`;return(0,L.useEffect)(()=>{let e=t.expiresAt-Date.now();if(e<=0){r(!0);return}r(!1);let n=window.setTimeout(()=>r(!0),e);return()=>window.clearTimeout(n)},[t.expiresAt]),(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(C,{children:[(0,z.jsx)(T,{children:`New host`}),(0,z.jsx)(S,{children:`Run this command from the new host.`})]}),(0,z.jsxs)(`div`,{className:`min-w-0 space-y-3`,children:[(0,z.jsxs)(`div`,{className:`relative min-w-0 rounded-md border border-border bg-surface-recessed`,children:[(0,z.jsx)(`pre`,{className:`max-h-56 min-w-0 overflow-y-auto whitespace-pre-wrap break-all px-3 py-2.5 pr-10 text-xs leading-5`,children:(0,z.jsx)(`code`,{children:t.joinCommand})}),(0,z.jsx)(O,{text:t.joinCommand,label:`Copy host command`,className:`absolute right-2 top-2`})]}),(0,z.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2 text-xs text-muted-foreground`,role:`status`,"aria-live":`polite`,"aria-atomic":`true`,children:[i?(0,z.jsx)(l,{name:`CircleCheck`,className:`size-4 text-success`,"aria-hidden":`true`}):n?(0,z.jsx)(l,{name:`AlertCircle`,className:`size-4 text-destructive`,"aria-hidden":`true`}):null,(0,z.jsx)(`span`,{className:a?`animate-shine font-medium`:`font-medium text-foreground`,children:o}),a?(0,z.jsxs)(`span`,{children:[`· Expires at `,K(t.expiresAt)]}):null]})]})]})}var Y=[{label:`System`,value:`system`},{label:`Light`,value:`light`},{label:`Dark`,value:`dark`}],X={dark:`Dark`,light:`Light`,system:`System`};function Z(){let o=k(),{data:c=[],isLoading:u}=v(),b=r(),[x,S]=(0,L.useState)(null),[C,w]=(0,L.useState)(null),[T,E]=(0,L.useState)(null),[O,V]=(0,L.useState)(!1),[U,G]=(0,L.useState)(!1),K=a({meta:{errorMessage:`Failed to rename host.`},mutationFn:({id:e,name:t})=>s(e,{name:t}),onSuccess:()=>{j({queryClient:b}),S(null)}}),J=a({meta:{errorMessage:`Failed to remove host.`},mutationFn:({id:e})=>d(e),onSuccess:()=>{D({queryClient:b}),w(null)}}),Z=a({meta:{errorMessage:`Failed to create host join command`,showErrorToast:!1},mutationFn:()=>t(),onSuccess:e=>{j({queryClient:b}),E(e),V(!0)},onError:e=>{if(e instanceof n&&e.code===`app_url_required`){G(!0);return}M({error:e,fallbackMessage:`Failed to create host join command`})}}),Q=a({meta:{errorMessage:`Failed to cancel host join.`},mutationFn:({id:t})=>e(t),onSuccess:(e,t)=>{j({queryClient:b}),E(e=>e?.hostId===t.id?null:e),V(!1)}}),$=T===null?null:c.find(e=>e.id===T.hostId)??null,te=Z.isPending||Q.isPending;async function ne(){if(T!==null&&T.expiresAt>Date.now()&&$?.status!==`connected`){V(!0);return}if(T!==null&&$?.status!==`connected`)try{await Q.mutateAsync({id:T.hostId})}catch{return}Z.mutate()}(0,L.useEffect)(()=>{if(!O||$?.status!==`connected`)return;let e=window.setTimeout(()=>{E(null),V(!1)},1500);return()=>window.clearTimeout(e)},[O,$?.status]);function re(e){if(e){V(!0);return}T!==null&&$?.status!==`connected`&&Q.mutate({id:T.hostId}),E(null),V(!1)}return(0,z.jsxs)(f,{contentClassName:`pt-4 md:pt-5`,children:[(0,z.jsxs)(`div`,{className:`mx-auto w-full max-w-3xl space-y-6`,children:[(0,z.jsx)(F,{title:`Appearance`,children:(0,z.jsx)(N,{label:`Theme`,children:(0,z.jsxs)(h,{children:[(0,z.jsx)(_,{asChild:!0,children:(0,z.jsxs)(p,{variant:`outline`,size:`sm`,className:`w-full justify-between border-border/60 bg-card sm:w-48`,"aria-label":`Theme`,children:[X[o],(0,z.jsx)(l,{name:`ChevronDown`,className:`size-3.5 text-muted-foreground`})]})}),(0,z.jsx)(y,{align:`end`,className:`w-48`,children:Y.map(e=>(0,z.jsxs)(g,{onSelect:()=>A(e.value),children:[e.label,(0,z.jsx)(l,{name:`Check`,className:i(`ml-auto`,o!==e.value&&`opacity-0`,m)})]},e.value))})]})})}),(0,z.jsxs)(`div`,{className:`space-y-2`,children:[(0,z.jsx)(F,{title:`Hosts`,children:u?(0,z.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Loading…`}):(0,z.jsx)(P,{children:c.length===0?(0,z.jsx)(I,{children:(0,z.jsx)(`span`,{className:`text-sm text-muted-foreground`,children:`No registered hosts.`})}):c.map(e=>{let t=e.status===`connected`;return(0,z.jsxs)(I,{children:[(0,z.jsxs)(`span`,{className:`min-w-0 flex-1 truncate`,children:[e.name,(0,z.jsx)(`span`,{className:`ml-1.5 text-xs text-muted-foreground`,children:e.id})]}),t?(0,z.jsx)(`span`,{className:R,title:`Connected`}):e.lastSeenAt===null?(0,z.jsx)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:`Never connected`}):(0,z.jsxs)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:[`Offline · `,ee(e.lastSeenAt)]}),(0,z.jsxs)(h,{children:[(0,z.jsx)(_,{asChild:!0,children:(0,z.jsx)(p,{variant:`ghost`,size:`icon`,className:`h-7 w-7 shrink-0`,"aria-label":`Host actions`,children:(0,z.jsx)(l,{name:`MoreHorizontal`,className:`size-4`})})}),(0,z.jsxs)(y,{align:`end`,className:`w-40`,children:[(0,z.jsx)(g,{onSelect:()=>S({id:e.id,currentName:e.name}),children:`Rename`}),(0,z.jsx)(g,{className:`text-destructive focus:text-destructive`,onSelect:()=>w({id:e.id,name:e.name}),children:`Remove`})]})]})]},e.id)})})}),u?null:(0,z.jsx)(`div`,{className:`flex justify-start`,children:(0,z.jsxs)(p,{type:`button`,size:`sm`,variant:`ghost`,className:`h-auto justify-start gap-1.5 px-2 py-1 text-muted-foreground`,disabled:te,onClick:()=>{ne()},children:[(0,z.jsx)(l,{name:`Plus`,className:`size-3.5`}),`Add another host`]})})]})]}),(0,z.jsx)(H,{target:x,pending:K.isPending,onOpenChange:e=>{e||S(null)},onRename:(e,t)=>K.mutate({id:e,name:t})}),(0,z.jsx)(B,{target:C,pending:J.isPending,onOpenChange:e=>{e||w(null)},onDelete:e=>J.mutate({id:e})}),(0,z.jsx)(q,{open:O,target:T,host:$,onOpenChange:re}),(0,z.jsx)(W,{open:U,onOpenChange:G})]})}export{Z as AppSettingsView};
@@ -0,0 +1 @@
1
+ import{Gn as e,Ki as t,Mi as n,Ni as r,Pi as i,Sa as a,Tn as o,Yt as s,at as c,ga as l,ji as u,qi as d,t as f,wi as p}from"./page-shell-Cm6ORlc1.js";import{n as m}from"./effective-hosts-DyMNblil.js";import{n as h}from"./chunk-JZWAC4HX-Bl8ic0GS.js";import{Cn as g,E as _,O as v,k as y}from"./index-DERhWKi1.js";import{t as b}from"./pill-CxDd2TL9.js";import{t as x}from"./split-button-DKl9pCWu.js";var S=a(l(),1),C=d(),w=1,T=[.5,1,2,5,10],E=`block min-w-0 truncate text-foreground underline underline-offset-2 transition-colors hover:text-foreground/80`;function D(e){return`${e}×`}function O(e){return new Date(e).toLocaleString()}function k(){let a=t(),[l,d]=(0,S.useState)(()=>new Set),k=e=>{d(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},A=i({queryKey:c(),queryFn:()=>o()}),{data:j=[]}=m(),M=(0,S.useMemo)(()=>new Map(j.map(e=>[e.id,e.name])),[j]),N=r({mutationFn:e=>s(e),onSuccess:()=>{g({queryClient:a})}}),P=r({mutationFn:({captureId:t,speed:n})=>e(t,{speed:n}),onSuccess:e=>{window.open(`/projects/${e.projectId}/threads/${e.replayThreadId}`,`_blank`,`noopener`)}}),F=A.data?.captures??[];return(0,C.jsx)(f,{contentClassName:`pt-4 md:pt-5`,children:(0,C.jsxs)(`div`,{className:`mx-auto w-full max-w-3xl space-y-4`,children:[(0,C.jsxs)(`div`,{className:`flex items-start gap-2 rounded-md border border-border bg-surface-recessed px-3 py-2 text-sm text-muted-foreground`,children:[(0,C.jsx)(u,{name:`Info`,className:`mt-0.5 size-4 shrink-0`}),(0,C.jsxs)(`p`,{className:`m-0`,children:[`Replay previously captured conversations in a fresh thread. To record new captures, create threads with`,` `,(0,C.jsx)(`code`,{className:`font-mono text-xs`,children:`BB_DEV_REPLAY_CAPTURE=true pnpm dev`}),`.`]})]}),A.isLoading?(0,C.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Loading…`}):A.isError?(0,C.jsx)(`p`,{className:`text-sm text-destructive`,children:`Failed to load replay captures.`}):F.length===0?(0,C.jsx)(`p`,{className:`rounded-md border border-dashed border-border px-3 py-4 text-sm text-muted-foreground`,children:`No replay captures found on any connected host.`}):(0,C.jsx)(`div`,{className:`space-y-1`,children:F.map(e=>{let t=e.userInputPreview||e.captureId,r=e.kind===`thread-start`,i=r?`new`:`follow-up`,a=_(e.providerId),o=a?.icon,s=l.has(e.captureId),c=N.isPending&&N.variables===e.captureId,d=P.isPending&&P.variables?.captureId===e.captureId,f=P.isError&&P.variables?.captureId===e.captureId,m=e.eventCounts.rawProviderEvents===0,g={label:`Start replay at ${D(w)}`,onSelect:()=>P.mutate({captureId:e.captureId,speed:w}),content:(0,C.jsxs)(C.Fragment,{children:[d?(0,C.jsx)(u,{name:`Spinner`,className:`size-3 animate-spin`}):null,`Replay`]})},S=T.map(t=>({label:`Start replay at ${D(t)}`,onSelect:()=>P.mutate({captureId:e.captureId,speed:t}),content:(0,C.jsx)(`span`,{children:D(t)})}));return(0,C.jsxs)(`div`,{children:[(0,C.jsxs)(`div`,{className:`flex h-9 items-center gap-3 text-sm`,children:[(0,C.jsxs)(`button`,{type:`button`,onClick:()=>k(e.captureId),"aria-expanded":s,className:`flex min-w-0 flex-1 items-center gap-2 text-left`,children:[(0,C.jsx)(u,{name:`ChevronRight`,className:n(`size-3 shrink-0 text-muted-foreground transition-transform`,s&&`rotate-90`)}),(0,C.jsxs)(`span`,{className:`flex min-w-0 flex-1 items-center gap-2`,children:[(0,C.jsx)(`span`,{className:`min-w-0 max-w-xs truncate`,children:t}),e.title?(0,C.jsx)(`span`,{className:`min-w-0 truncate text-muted-foreground`,children:e.title}):null,(0,C.jsx)(b,{variant:r?`secondary`:`outline`,className:`shrink-0`,children:i}),o?(0,C.jsx)(o,{className:`size-3.5 shrink-0 text-muted-foreground`,"aria-label":a?.ariaLabel}):(0,C.jsx)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:e.providerId})]})]}),(0,C.jsx)(x,{disabled:d||m,primaryAction:g,secondaryActions:S,triggerLabel:`Choose replay speed`,mobileTitle:`Replay speed`}),(0,C.jsx)(p,{type:`button`,variant:`ghost`,size:`icon`,"aria-label":`Delete replay capture`,title:`Delete replay capture`,disabled:c,onClick:()=>N.mutate(e.captureId),className:`size-6`,children:c?(0,C.jsx)(u,{name:`Spinner`,className:`size-3 animate-spin`}):(0,C.jsx)(u,{name:`Trash2`,className:`size-3`})})]}),s?(0,C.jsxs)(`div`,{className:`space-y-2 pb-3 pt-2`,children:[(0,C.jsxs)(v,{children:[(0,C.jsx)(y,{label:`Capture`,valueClassName:`min-w-0 truncate font-mono`,children:e.captureId}),(0,C.jsx)(y,{label:`Host`,valueClassName:`min-w-0 truncate`,children:M.get(e.hostId)??e.hostId}),(0,C.jsx)(y,{label:`Provider`,valueClassName:`min-w-0 truncate`,children:e.providerId}),(0,C.jsx)(y,{label:`Project`,valueClassName:`min-w-0`,children:(0,C.jsx)(h,{to:`/projects/${e.projectId}`,className:E,children:e.projectName??e.projectId})}),(0,C.jsx)(y,{label:`Thread`,valueClassName:`min-w-0`,children:(0,C.jsx)(h,{to:`/projects/${e.projectId}/threads/${e.threadId}`,className:n(E,!e.title&&`font-mono`),children:e.title??e.threadId})}),(0,C.jsx)(y,{label:`Captured`,valueClassName:`min-w-0 truncate`,children:O(e.capturedAt)}),(0,C.jsx)(y,{label:`Raw events`,valueClassName:`min-w-0 truncate`,children:e.eventCounts.rawProviderEvents})]}),f?(0,C.jsx)(`p`,{className:`text-xs text-destructive`,children:`Failed to start replay.`}):null]}):null]},`${e.hostId}:${e.captureId}`)})})]})})}export{k as InternalReplayListView};
@@ -1 +1 @@
1
- import{Fi as e,di as t,fi as n,ia as r,t as i,ua as a}from"./page-shell-BdV9dDbP.js";import{E as o,n as s,w as c}from"./thread-queries-DBgy7tqz.js";import{d as l,n as u}from"./chunk-JZWAC4HX-CIhf07b6.js";import{t as d}from"./pill-T3MuOnWq.js";import{t as f}from"./ThreadUnarchiveButton-D_xRAhIX.js";var p=a(r(),1),m=e(),h=[{value:`all`,label:`All`},{value:`manager`,label:`Managers`},{value:`managed`,label:`Managed`},{value:`unmanaged`,label:`Unmanaged`}];function g(e){return e.type===`manager`?`manager`:e.parentThreadId===null?null:`managed`}function _(){let{projectId:e}=l(),[r,a]=(0,p.useState)(`all`),_=s({projectId:e,kind:r}),v=c(),y=(0,p.useMemo)(()=>(_.data?.pages??[]).flat().filter(e=>e.archivedAt!=null),[_.data]);if(!e)return(0,m.jsx)(i,{contentClassName:`min-h-full items-center justify-center`,children:(0,m.jsx)(`p`,{className:`py-12 text-center text-sm text-muted-foreground`,children:`Project not found`})});let b=_.isPending,x=!b&&y.length===0;return(0,m.jsx)(i,{contentClassName:`pt-0`,children:(0,m.jsxs)(`div`,{className:`mx-auto w-full max-w-3xl`,children:[(0,m.jsxs)(`div`,{className:`sticky top-0 z-10 -mx-4 bg-background px-4 pt-4 md:-mx-5 md:px-5 md:pt-5`,children:[(0,m.jsx)(t,{placement:`below`,tone:`background`}),(0,m.jsx)(`div`,{className:`inline-flex items-center gap-1 rounded-lg border border-border p-0.5`,role:`tablist`,"aria-label":`Filter archived threads`,children:h.map(e=>{let t=r===e.value;return(0,m.jsx)(n,{type:`button`,variant:`ghost`,size:`sm`,role:`tab`,"aria-selected":t,"aria-pressed":t,className:`h-7 rounded-md px-2 text-xs font-medium text-muted-foreground sm:px-3`,onClick:()=>a(e.value),children:e.label},e.value)})})]}),(0,m.jsxs)(`div`,{className:`space-y-3 pt-3`,children:[b?(0,m.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Loading archived threads…`}):x?(0,m.jsx)(`p`,{className:`rounded-md border border-dashed border-border px-3 py-4 text-sm text-muted-foreground`,children:`No archived threads yet.`}):(0,m.jsx)(`div`,{className:`space-y-1`,children:y.map(t=>{let n=g(t);return(0,m.jsxs)(`div`,{className:`group flex h-9 items-center gap-3 rounded-md px-3 text-sm transition-colors hover:bg-state-hover`,children:[(0,m.jsx)(u,{to:`/projects/${e}/threads/${t.id}`,className:`min-w-0 flex-1`,children:(0,m.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,m.jsx)(`span`,{className:`truncate`,children:o(t)}),n?(0,m.jsx)(d,{variant:`outline`,className:`shrink-0`,children:n}):null]})}),(0,m.jsx)(f,{isPending:v.isPending&&v.variables?.id===t.id,onUnarchive:()=>{v.mutate({id:t.id})},threadType:t.type,className:`hover:bg-accent-foreground/15`})]},t.id)})}),_.hasNextPage?(0,m.jsx)(n,{type:`button`,variant:`ghost`,onClick:()=>{_.fetchNextPage()},disabled:_.isFetchingNextPage,className:`h-9 w-full justify-center rounded-md px-3 text-sm font-normal text-muted-foreground`,children:_.isFetchingNextPage?`Loading…`:`Load more`}):null]})]})})}export{_ as ProjectArchivedThreadsView};
1
+ import{Ci as e,Sa as t,ga as n,qi as r,t as i,wi as a}from"./page-shell-Cm6ORlc1.js";import{A as o,M as s,n as c}from"./thread-queries-BZIo9kT6.js";import{d as l,n as u}from"./chunk-JZWAC4HX-Bl8ic0GS.js";import{t as d}from"./pill-CxDd2TL9.js";import{t as f}from"./ThreadUnarchiveButton-BjYW-ned.js";var p=t(n(),1),m=r(),h=[{value:`all`,label:`All`},{value:`manager`,label:`Managers`},{value:`managed`,label:`Managed`},{value:`unmanaged`,label:`Unmanaged`}];function g(e){return e.type===`manager`?`manager`:e.parentThreadId===null?null:`managed`}function _(){let{projectId:t}=l(),[n,r]=(0,p.useState)(`all`),_=c({projectId:t,kind:n}),v=o(),y=(0,p.useMemo)(()=>(_.data?.pages??[]).flat().filter(e=>e.archivedAt!=null),[_.data]);if(!t)return(0,m.jsx)(i,{contentClassName:`min-h-full items-center justify-center`,children:(0,m.jsx)(`p`,{className:`py-12 text-center text-sm text-muted-foreground`,children:`Project not found`})});let b=_.isPending,x=!b&&y.length===0;return(0,m.jsx)(i,{contentClassName:`pt-0`,children:(0,m.jsxs)(`div`,{className:`mx-auto w-full max-w-3xl`,children:[(0,m.jsxs)(`div`,{className:`sticky top-0 z-10 -mx-4 bg-background px-4 pt-4 md:-mx-5 md:px-5 md:pt-5`,children:[(0,m.jsx)(e,{placement:`below`,tone:`background`}),(0,m.jsx)(`div`,{className:`inline-flex items-center gap-1 rounded-lg border border-border p-0.5`,role:`tablist`,"aria-label":`Filter archived threads`,children:h.map(e=>{let t=n===e.value;return(0,m.jsx)(a,{type:`button`,variant:`ghost`,size:`sm`,role:`tab`,"aria-selected":t,"aria-pressed":t,className:`h-7 rounded-md px-2 text-xs font-medium text-muted-foreground sm:px-3`,onClick:()=>r(e.value),children:e.label},e.value)})})]}),(0,m.jsxs)(`div`,{className:`space-y-3 pt-3`,children:[b?(0,m.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Loading archived threads…`}):x?(0,m.jsx)(`p`,{className:`rounded-md border border-dashed border-border px-3 py-4 text-sm text-muted-foreground`,children:`No archived threads yet.`}):(0,m.jsx)(`div`,{className:`space-y-1`,children:y.map(e=>{let n=g(e);return(0,m.jsxs)(`div`,{className:`group flex h-9 items-center gap-3 rounded-md px-3 text-sm transition-colors hover:bg-state-hover`,children:[(0,m.jsx)(u,{to:`/projects/${t}/threads/${e.id}`,className:`min-w-0 flex-1`,children:(0,m.jsxs)(`span`,{className:`flex min-w-0 items-center gap-2`,children:[(0,m.jsx)(`span`,{className:`truncate`,children:s(e)}),n?(0,m.jsx)(d,{variant:`outline`,className:`shrink-0`,children:n}):null]})}),(0,m.jsx)(f,{isPending:v.isPending&&v.variables?.id===e.id,onUnarchive:()=>{v.mutate({id:e.id})},threadType:e.type,className:`hover:bg-accent-foreground/15`})]},e.id)})}),_.hasNextPage?(0,m.jsx)(a,{type:`button`,variant:`ghost`,onClick:()=>{_.fetchNextPage()},disabled:_.isFetchingNextPage,className:`h-9 w-full justify-center rounded-md px-3 text-sm font-normal text-muted-foreground`,children:_.isFetchingNextPage?`Loading…`:`Load more`}):null]})]})})}export{_ as ProjectArchivedThreadsView};
@@ -0,0 +1 @@
1
+ import{Fn as e,Fr as t,Ir as n,Ki as r,Ni as i,Sa as a,ga as o,ji as s,qi as c,t as l,wi as u}from"./page-shell-Cm6ORlc1.js";import{c as d,f,h as p,n as m,u as h}from"./effective-hosts-DyMNblil.js";import{d as g}from"./chunk-JZWAC4HX-Bl8ic0GS.js";import{a as _,i as v,o as y,r as b,s as x,t as S}from"./dialog-aN1xTDyE.js";import{A as C,b as w,k as T,m as E,r as D,t as O}from"./localhost-badge-EX9hMqNt.js";import{a as k}from"./mutation-cache-effects-Dhc8bhPi.js";import{bn as A,mn as j,pn as M,yn as N}from"./index-DERhWKi1.js";import{n as P,r as F,t as I}from"./settings-section-BlOBCLDd.js";import{t as L}from"./pill-CxDd2TL9.js";var R=a(o(),1),z=c();function B({target:e,pending:t,onOpenChange:n,onDelete:r}){return(0,z.jsx)(S,{open:e!==null,onOpenChange:n,children:(0,z.jsx)(b,{children:e?(0,z.jsx)(V,{target:e,pending:t,onDelete:r}):null})})}function V({target:e,pending:t,onDelete:n}){return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(y,{children:[(0,z.jsx)(x,{children:`Remove source?`}),(0,z.jsx)(v,{children:`Remove "${e.label}" from this project? This cannot be undone.`})]}),(0,z.jsx)(_,{children:(0,z.jsx)(u,{type:`button`,variant:`destructive`,disabled:t,onClick:()=>n(e.id),children:`Remove source`})})]})}function H({source:e,isLocalhostSource:t,isLocalPathInvalid:n,hostName:r,isEditPending:i,isOnlySource:a,onEditLocalPath:o,onRemove:c}){return(0,z.jsxs)(I,{children:[(0,z.jsx)(s,{name:D,className:`size-4 shrink-0 text-muted-foreground`}),(0,z.jsxs)(`span`,{className:`flex min-w-0 flex-1 items-baseline gap-1.5`,children:[(0,z.jsx)(`span`,{className:`min-w-0 flex-shrink truncate`,children:e.path}),(0,z.jsx)(`span`,{className:`shrink-0 text-xs text-muted-foreground`,children:r}),t?(0,z.jsx)(`span`,{className:`self-center`,children:(0,z.jsx)(O,{})}):null,n?(0,z.jsx)(L,{variant:`destructive`,children:`Invalid local path`}):null]}),(0,z.jsxs)(d,{children:[(0,z.jsx)(p,{asChild:!0,children:(0,z.jsx)(u,{variant:`ghost`,size:`icon`,className:`h-7 w-7 shrink-0`,"aria-label":`Source actions`,children:(0,z.jsx)(s,{name:`MoreHorizontal`,className:`size-4`})})}),(0,z.jsxs)(h,{align:`end`,className:`w-40`,children:[t?(0,z.jsx)(f,{disabled:i,onSelect:t=>{t.preventDefault(),o(e)},children:`Edit local path`}):null,(0,z.jsx)(f,{className:`text-destructive focus:text-destructive`,disabled:a,onSelect:()=>c(e),children:`Remove`})]})]})]})}function U(e,t){return t.get(e.hostId)??e.hostId}function W(){let{projectId:a}=g(),o=C(),s=T({enabled:o.isSuccess||o.isError}),c=s.data,d=o.isFetching||s.isLoading,{data:f=[]}=m(),p=r(),[h,_]=(0,R.useState)(null),v=i({meta:{errorMessage:`Failed to remove source.`},mutationFn:({sourceId:t})=>a?e(a,t):Promise.resolve(),onSuccess:()=>{k({projectId:a,queryClient:p}),_(null)}}),y=E(),b=w(),x=c?.find(e=>e.id===a),S=x?.sources,D=(0,R.useMemo)(()=>S??[],[S]),O=(0,R.useMemo)(()=>new Map(f.map(e=>[e.id,e.name])),[f]),I=x?.name??``,L=y.isPending||b.isPending,V=j({isPending:L,submit:(0,R.useCallback)(({path:e,hostId:t,target:r,closeDialog:i})=>{if(a){if(r.kind===`add-source`)y.mutate({projectId:a,path:e,hostId:t},{onSuccess:i});else if(r.kind===`update`){let r=D.find(e=>n(e)&&e.hostId===t);if(!r)return;b.mutate({projectId:a,sourceId:r.id,path:e},{onSuccess:i})}}},[y,a,D,b])}),W=(0,R.useCallback)(()=>{a&&V.openPicker({kind:`add-source`,projectId:a,projectName:I})},[V,a,I]),G=(0,R.useCallback)(e=>{a&&V.openPicker({kind:`update`,projectId:a,projectName:I,currentPath:e.path})},[V,a,I]),K=V.localHostId,q=A((0,R.useMemo)(()=>K?D.filter(e=>n(e)&&e.hostId===K).map(e=>e.path):[],[K,D])),J=K!=null&&!t(D,K)?(0,z.jsx)(`div`,{className:`mt-2 flex gap-2`,children:(0,z.jsx)(u,{size:`sm`,variant:`outline`,disabled:y.isPending,onClick:W,children:`Add local path`})}):null;return(0,z.jsxs)(l,{contentClassName:`pt-4 md:pt-5`,children:[(0,z.jsx)(`div`,{className:`mx-auto w-full max-w-3xl space-y-6`,children:(0,z.jsx)(F,{title:`Project Sources`,children:d?(0,z.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`Loading…`}):D.length===0?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`p`,{className:`text-sm text-muted-foreground`,children:`No sources configured.`}),J]}):(0,z.jsxs)(`div`,{children:[(0,z.jsx)(P,{children:D.map(e=>{let t=n(e)&&K!=null&&e.hostId===K;return(0,z.jsx)(H,{source:e,isLocalhostSource:t,isLocalPathInvalid:t&&N(q,e.path),hostName:n(e)?O.get(e.hostId)??e.hostId:``,isEditPending:L,isOnlySource:D.length<=1,onEditLocalPath:G,onRemove:e=>_({id:e.id,label:U(e,O)})},e.id)})}),J]})})}),(0,z.jsx)(M,{target:V.projectPathDialog.target,pending:L,platform:V.platform,onOpenChange:V.projectPathDialog.onOpenChange,onSubmit:V.submitProjectPath}),(0,z.jsx)(B,{target:h,pending:v.isPending,onOpenChange:e=>{e||_(null)},onDelete:e=>v.mutate({sourceId:e})})]})}export{W as ProjectSettingsView};