bb-app 0.0.11 → 0.0.12

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 (121) hide show
  1. package/app/dist/assets/AppSettingsView-BnxUHmxx.js +1 -0
  2. package/app/dist/assets/InternalReplayListView-csLG2lko.js +1 -0
  3. package/app/dist/assets/{ProjectArchivedThreadsView-o1R22xfj.js → ProjectArchivedThreadsView-CH0nwbDU.js} +1 -1
  4. package/app/dist/assets/ProjectSettingsView-nWbGXc1H.js +1 -0
  5. package/app/dist/assets/ThreadDetailRoute-CO285nQR.js +2642 -0
  6. package/app/dist/assets/ThreadUnarchiveButton-CQaA-gHV.js +1 -0
  7. package/app/dist/assets/{angular-html-CN4B7z8Z.js → angular-html-BOmrr01g.js} +1 -1
  8. package/app/dist/assets/{angular-ts-Be9rCyh7.js → angular-ts-DCM7qcSK.js} +1 -1
  9. package/app/dist/assets/{apl-C-09mkOY.js → apl-DuVJ59sz.js} +1 -1
  10. package/app/dist/assets/{astro-DQR04HMP.js → astro-AQMIDGwi.js} +1 -1
  11. package/app/dist/assets/{blade-CHOb28s9.js → blade-CsPbsxBX.js} +1 -1
  12. package/app/dist/assets/{c-Czi5ZOPg.js → c-D9gG2MMW.js} +1 -1
  13. package/app/dist/assets/{chunk-JZWAC4HX-CmnT162V.js → chunk-JZWAC4HX-vAKkV_Y-.js} +1 -1
  14. package/app/dist/assets/{cobol-C0UrcShI.js → cobol-DD9s4tIq.js} +1 -1
  15. package/app/dist/assets/{coffee-DLCACHKU.js → coffee-6iFiN2xF.js} +1 -1
  16. package/app/dist/assets/{cpp-CKRDyJLk.js → cpp-DyiPD7p1.js} +1 -1
  17. package/app/dist/assets/{crystal-DzdlwfxO.js → crystal-XjoV3Lue.js} +1 -1
  18. package/app/dist/assets/{css-J88DqgyO.js → css-DJovgfNT.js} +1 -1
  19. package/app/dist/assets/dialog-BvotBFA0.js +22 -0
  20. package/app/dist/assets/{edge-BiusF5O8.js → edge-DYu9rQsg.js} +1 -1
  21. package/app/dist/assets/effective-hosts-CgZiG_wS.js +68 -0
  22. package/app/dist/assets/{elixir-DVV1N8WB.js → elixir-CGc4gb59.js} +1 -1
  23. package/app/dist/assets/{elm-ZwoouJdM.js → elm-DfNAAF5X.js} +1 -1
  24. package/app/dist/assets/{erb-6WVNn8lP.js → erb-CF74Kl7K.js} +1 -1
  25. package/app/dist/assets/{git-rebase-CI6iVcd4.js → git-rebase-2bSFR8VV.js} +1 -1
  26. package/app/dist/assets/{glimmer-js-MU0okVIL.js → glimmer-js-D1yNTSaa.js} +1 -1
  27. package/app/dist/assets/{glimmer-ts-BXJcqrHb.js → glimmer-ts-DVblM7L5.js} +1 -1
  28. package/app/dist/assets/{glsl-CthKK13_.js → glsl-gxzJizaK.js} +1 -1
  29. package/app/dist/assets/{graphql-Cfx6sMIN.js → graphql-BpTTKDqK.js} +1 -1
  30. package/app/dist/assets/{hack-Cfn0L20S.js → hack-DDSUlOik.js} +1 -1
  31. package/app/dist/assets/{haml-DpOUW3De.js → haml-BZNAh4-P.js} +1 -1
  32. package/app/dist/assets/{handlebars-Dq6TUqDg.js → handlebars-DlYJLEcO.js} +1 -1
  33. package/app/dist/assets/{html-CrFhd97J.js → html-MZ0Poiph.js} +1 -1
  34. package/app/dist/assets/{html-derivative-SXrZiT2S.js → html-derivative-ChK_TvO6.js} +1 -1
  35. package/app/dist/assets/{http-BxRXAeum.js → http-CEE8xOHO.js} +1 -1
  36. package/app/dist/assets/{hurl-BsAa903H.js → hurl-B5aHyN9a.js} +1 -1
  37. package/app/dist/assets/index-SSlA_QcC.css +2 -0
  38. package/app/dist/assets/index-u9J_LInz.js +1366 -0
  39. package/app/dist/assets/{java-BZRe3u16.js → java-C-CCkGSB.js} +1 -1
  40. package/app/dist/assets/{javascript-YzZUmjcN.js → javascript-CoPUJA8j.js} +1 -1
  41. package/app/dist/assets/{jinja-CkL9mgnB.js → jinja-Ce_R6KUf.js} +1 -1
  42. package/app/dist/assets/{jison-DY01LEsx.js → jison-DxdoAlKK.js} +1 -1
  43. package/app/dist/assets/{json-DeVTS63Q.js → json-PteH9L8Y.js} +1 -1
  44. package/app/dist/assets/{jsx-B73xjEBK.js → jsx-N08PKjBU.js} +1 -1
  45. package/app/dist/assets/{julia-D5UCqxaX.js → julia-D_eVESw1.js} +1 -1
  46. package/app/dist/assets/{just-BfeKX4XX.js → just-BVZ_2gix.js} +1 -1
  47. package/app/dist/assets/{latex-CllT7gYn.js → latex-CvglVjdX.js} +1 -1
  48. package/app/dist/assets/{liquid-Bgz2sjbj.js → liquid-C2RPsEhH.js} +1 -1
  49. package/app/dist/assets/localhost-badge-CHDdiNhq.js +1 -0
  50. package/app/dist/assets/{lua-CKg4_5Yw.js → lua-D9-kqDch.js} +1 -1
  51. package/app/dist/assets/{marko-CSplXaxm.js → marko-jVSfYuio.js} +1 -1
  52. package/app/dist/assets/{mdc-CR1bPJlt.js → mdc-DVHnOYT4.js} +1 -1
  53. package/app/dist/assets/mutation-cache-effects-plW3Wjx9.js +1 -0
  54. package/app/dist/assets/mutation-errors-INqXreOn.js +2 -0
  55. package/app/dist/assets/{nginx-Chba8emm.js → nginx-DfHWE4gw.js} +1 -1
  56. package/app/dist/assets/{nim-BJOCNxTB.js → nim-fW6F-8R_.js} +1 -1
  57. package/app/dist/assets/page-shell-omz5VWqw.js +39 -0
  58. package/app/dist/assets/{perl-DtYnB2VK.js → perl-C916SOdN.js} +1 -1
  59. package/app/dist/assets/{php-Cm6MwVxd.js → php-BDWQ0WnL.js} +1 -1
  60. package/app/dist/assets/{pill-Ds03GLze.js → pill-8eXFxAuz.js} +1 -1
  61. package/app/dist/assets/{pug-Cs95QZUY.js → pug-BTGBL6ey.js} +1 -1
  62. package/app/dist/assets/{qml-DV4H8TeV.js → qml-BB7gtLw5.js} +1 -1
  63. package/app/dist/assets/{r-BOwNWtkP.js → r-4Ktj_4BV.js} +1 -1
  64. package/app/dist/assets/{razor-rzD3KE0N.js → razor-C_Ejzpyk.js} +1 -1
  65. package/app/dist/assets/{regexp-D5UpjLq1.js → regexp-DdimReFO.js} +1 -1
  66. package/app/dist/assets/{rst-nRBldbnW.js → rst-Ba-8orMO.js} +1 -1
  67. package/app/dist/assets/{ruby-DK9_UnsF.js → ruby-DNE0wFLx.js} +1 -1
  68. package/app/dist/assets/{sas-BxxScrc4.js → sas-D6QyIc5Y.js} +1 -1
  69. package/app/dist/assets/{scss-dYaO_Ssw.js → scss-BpYltub1.js} +1 -1
  70. package/app/dist/assets/{settings-section-BgEyrMBV.js → settings-section-BkJbbK-p.js} +1 -1
  71. package/app/dist/assets/{shellscript-BGY92qaj.js → shellscript-B1QZDlVi.js} +1 -1
  72. package/app/dist/assets/{shellsession-DHio1RBs.js → shellsession-C2YSc67H.js} +1 -1
  73. package/app/dist/assets/{soy-CWnh82_C.js → soy-Ba6Otyql.js} +1 -1
  74. package/app/dist/assets/split-button-_uHFVDB-.js +1 -0
  75. package/app/dist/assets/{sql-BgOSYFXh.js → sql-Bnzimrzw.js} +1 -1
  76. package/app/dist/assets/{stata-Di5c1EGu.js → stata-BmWbZaNS.js} +1 -1
  77. package/app/dist/assets/{surrealql-CKgBuPai.js → surrealql-BDEpTym4.js} +1 -1
  78. package/app/dist/assets/{svelte-DGNSQgHP.js → svelte-D3__atge.js} +1 -1
  79. package/app/dist/assets/{templ--mBJoDNy.js → templ-B2QvG8e0.js} +1 -1
  80. package/app/dist/assets/{tex-Drg-gBC1.js → tex-oleGAEAp.js} +1 -1
  81. package/app/dist/assets/thread-queries-DpnZLohh.js +1 -0
  82. package/app/dist/assets/{ts-tags-_EoiaFc_.js → ts-tags-C4rrn99M.js} +1 -1
  83. package/app/dist/assets/{tsx-C3E3ZPo7.js → tsx-5jd1D3TG.js} +1 -1
  84. package/app/dist/assets/{twig-BkmJOmf1.js → twig-BxJeHYNu.js} +1 -1
  85. package/app/dist/assets/{typescript-zC8doK3K.js → typescript-81bZW67U.js} +1 -1
  86. package/app/dist/assets/{vue-Dqnq1uw7.js → vue-DSNd-6Ch.js} +1 -1
  87. package/app/dist/assets/{vue-html-CZNe_SnY.js → vue-html-CQT5rCwO.js} +1 -1
  88. package/app/dist/assets/{vue-vine-ChEJZJ0Y.js → vue-vine-BafaCKEQ.js} +1 -1
  89. package/app/dist/assets/workspace-open-target-preference-yN4DFIsy.js +1 -0
  90. package/app/dist/assets/{xml-DHqUJISw.js → xml-AdWB6zlJ.js} +1 -1
  91. package/app/dist/assets/{xsl-B_xW8s_z.js → xsl-Dy6hQs2F.js} +1 -1
  92. package/app/dist/assets/{yaml-CHAY15k-.js → yaml-BdzELsfc.js} +1 -1
  93. package/app/dist/index.html +10 -10
  94. package/dist/bb-app.js +1 -1
  95. package/dist/bb-host-daemon.js +1 -1
  96. package/host-daemon/dist/bb +325 -563
  97. package/host-daemon/dist/bb-claude-code-bridge.mjs +26 -26
  98. package/host-daemon/dist/daemon-bundle.mjs +337 -342
  99. package/package.json +1 -1
  100. package/server/dist/default-template/apps/status/manifest.json +9 -0
  101. package/server/dist/drizzle/0008_thread_pinning.sql +3 -0
  102. package/server/dist/drizzle/meta/0008_snapshot.json +3285 -0
  103. package/server/dist/drizzle/meta/_journal.json +7 -0
  104. package/server/dist/index.js +3510 -2512
  105. package/app/dist/assets/AppSettingsView-Dh4Od2M3.js +0 -1
  106. package/app/dist/assets/InternalReplayListView-BjzY8fhh.js +0 -1
  107. package/app/dist/assets/ProjectSettingsView-BoH5a1hi.js +0 -1
  108. package/app/dist/assets/ThreadDetailRoute-Caqz8odF.js +0 -2867
  109. package/app/dist/assets/ThreadUnarchiveButton-2shfHri9.js +0 -1
  110. package/app/dist/assets/dialog-JFJupr8S.js +0 -22
  111. package/app/dist/assets/effective-hosts-BS3g3uzj.js +0 -68
  112. package/app/dist/assets/index-DYJoFBAk.css +0 -2
  113. package/app/dist/assets/index-DbhAkEqX.js +0 -1366
  114. package/app/dist/assets/localhost-badge-BESHcXM2.js +0 -1
  115. package/app/dist/assets/mutation-cache-effects-BX02KjBd.js +0 -1
  116. package/app/dist/assets/mutation-errors-DgGC9CkY.js +0 -2
  117. package/app/dist/assets/page-shell-CaMV_G2I.js +0 -39
  118. package/app/dist/assets/split-button-PlurXMEc.js +0 -1
  119. package/app/dist/assets/thread-queries-DI7HoSpk.js +0 -1
  120. package/app/dist/assets/workspace-open-target-preference-Dve5Zih1.js +0 -1
  121. package/server/dist/default-template/STATUS.html +0 -380
@@ -1 +0,0 @@
1
- import{Bi as e,Pi as t,Ta as n,Vi as r,ja as i,na as a}from"./page-shell-CaMV_G2I.js";import{Ut as o,c as s,f as c,h as l,m as u,p as d,u as f}from"./effective-hosts-BS3g3uzj.js";var p=a(),m=`grid grid-cols-[var(--detail-label-width,96px)_minmax(0,1fr)] gap-x-3`,h=`m-0 text-xs leading-5 text-muted-foreground`,g=`m-0 min-w-0 text-xs leading-5 text-foreground`;function _(e){if(e)return{"--detail-label-width":e}}var v=`flex flex-col gap-1`,y=`rounded-md border border-border bg-surface-raised px-2 py-1`;function b({children:e,className:t,labelWidth:n,appearance:i=`card`}){return(0,p.jsx)(`dl`,{className:r(v,i===`card`&&y,t),style:_(n),children:e})}function x({label:e,children:t,className:n,labelClassName:i,valueClassName:a,align:o=`center`,orientation:s=`horizontal`}){return s===`vertical`?(0,p.jsxs)(`div`,{className:r(`flex flex-col gap-1 py-0.5`,n),children:[(0,p.jsx)(`dt`,{className:r(h,i),children:e}),(0,p.jsx)(`dd`,{className:r(g,a),children:t})]}):(0,p.jsxs)(`div`,{className:r(m,o===`center`?`items-center py-0.5`:`py-0.5`,n),children:[(0,p.jsx)(`dt`,{className:r(h,i),children:e}),(0,p.jsx)(`dd`,{className:r(g,a),children:t})]})}var S=i(n(),1),C=o;function w({primaryAction:n,secondaryActions:i,disabled:a=!1,className:o,triggerLabel:m=`More actions`,mobileTitle:h,defaultOpen:g,modal:_}){let v=r(t({variant:`outline`,size:`sm`}),C,o);return(0,p.jsxs)(`div`,{className:`inline-flex items-center`,children:[(0,p.jsx)(`button`,{type:`button`,disabled:a,className:r(v,`rounded-r-none border-r-0 pr-1 focus-visible:z-10`),"aria-label":n.label,title:n.label,onClick:n.onSelect,children:n.content??n.label}),(0,p.jsxs)(s,{defaultOpen:g,modal:_,children:[(0,p.jsx)(l,{asChild:!0,children:(0,p.jsx)(`button`,{type:`button`,disabled:a,className:r(v,`rounded-l-none border-l-0 px-1 pl-0 focus-visible:z-10`,`data-[state=open]:bg-state-active data-[state=open]:text-foreground`),"aria-label":m,title:m,children:(0,p.jsx)(e,{name:`ChevronDown`,className:`size-3`})})}),(0,p.jsx)(f,{align:`end`,sideOffset:2,mobileTitle:h,children:i.map((e,t)=>{let n=i[t-1];return(0,p.jsxs)(S.Fragment,{children:[e.groupLabel!==void 0&&e.groupLabel!==n?.groupLabel?(0,p.jsxs)(p.Fragment,{children:[t>0?(0,p.jsx)(u,{}):null,(0,p.jsx)(d,{children:e.groupLabel})]}):null,(0,p.jsx)(c,{onSelect:e.onSelect,textValue:e.label,children:e.content??e.label})]},e.label)})})]})]})}export{b as n,x as r,w as t};
@@ -1 +0,0 @@
1
- import{$n as e,Cn as t,Ct as n,Dt as r,Et as i,Fn as a,G as o,H as s,Hi as c,It as l,K as u,Ln as d,Mn as f,Mt as ee,N as te,Nn as p,Ot as m,P as h,Pn as ne,Pt as re,Rn as ie,Rt as g,Sn as _,St as v,Ta as y,Tt as b,Ui as x,Ut as ae,Wi as oe,_n as se,_t as S,bn as C,bt as ce,ct as w,da as le,en as ue,fa as de,gn as T,ia as fe,ir as pe,ja as me,jn as he,kt as ge,la as _e,mn as ve,pt as ye,ta as E,ua as D,vn as O,vt as k,xn as A,xt as j,yn as M,yt as N,zn as P}from"./page-shell-CaMV_G2I.js";import{H as be,I as F,L as I,N as L,O as xe,U as Se,_ as R,b as z,d as Ce,l as we,u as B}from"./mutation-cache-effects-BX02KjBd.js";function V(e){return{onFetch:(t,n)=>{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{_e(e,()=>t.signal,()=>n=!0)},u=de(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject();if(r==null&&e.pages.length)return Promise.resolve(e);let a=await u((()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})()),{maxPages:o}=t.options,s=i?le:D;return{pages:s(e.pages,a,o),pageParams:s(e.pageParams,r,o)}};if(i&&a.length){let e=i===`backward`,t=e?U:H,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:H(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(c<t)}return s};t.options.persister?t.fetchFn=()=>t.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):t.fetchFn=l}}}function H(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function U(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}function Te(e,t){return t?H(e,t)!=null:!1}function Ee(e,t){return!t||!e.getPreviousPageParam?!1:U(e,t)!=null}var De=class extends fe{constructor(e,t){super(e,t)}bindMethods(){super.bindMethods(),this.fetchNextPage=this.fetchNextPage.bind(this),this.fetchPreviousPage=this.fetchPreviousPage.bind(this)}setOptions(e){super.setOptions({...e,behavior:V()})}getOptimisticResult(e){return e.behavior=V(),super.getOptimisticResult(e)}fetchNextPage(e){return this.fetch({...e,meta:{fetchMore:{direction:`forward`}}})}fetchPreviousPage(e){return this.fetch({...e,meta:{fetchMore:{direction:`backward`}}})}createResult(e,t){let{state:n}=e,r=super.createResult(e,t),{isFetching:i,isRefetching:a,isError:o,isRefetchError:s}=r,c=n.fetchMeta?.fetchMore?.direction,l=o&&c===`forward`,u=i&&c===`forward`,d=o&&c===`backward`,f=i&&c===`backward`;return{...r,fetchNextPage:this.fetchNextPage,fetchPreviousPage:this.fetchPreviousPage,hasNextPage:Te(t,n.data),hasPreviousPage:Ee(t,n.data),isFetchNextPageError:l,isFetchingNextPage:u,isFetchPreviousPageError:d,isFetchingPreviousPage:f,isRefetchError:s&&!l&&!d,isRefetching:a&&!u&&!f}}};function Oe(e,t){return oe(e,De,t)}function ke(e){return e.title&&e.title.trim().length>0?e.title:e.titleFallback&&e.titleFallback.trim().length>0?e.titleFallback:`Thread ${e.id.slice(0,8)}`}function Ae(e){return e===`manager`?`manager`:`thread`}function W(e,t){L(e,{queryKey:g(),mapper:e=>e.filter(e=>e.id!==t)})}function G({queryClient:e,thread:t}){L(e,{queryKey:g(),mapper:e=>e.map(e=>e.id===t.id?{...e,...t}:e)})}function je(e){let t=E();return c({meta:{errorMessage:e?.errorMessage??`Failed to update thread.`,...e?.lifecycleOperation?{lifecycleOperation:e.lifecycleOperation}:{}},mutationFn:({id:e,...t})=>pe(e,t),onSuccess:e=>{t.setQueryData(b(e.id),e),Ce({queryClient:t})}})}function Me(){let e=E();return c({meta:{errorMessage:`Failed to archive thread.`,lifecycleOperation:`archive_thread`,showErrorToast:!1},mutationFn:({id:e})=>ae(e),onMutate:async({id:t})=>{await e.cancelQueries({queryKey:b(t)}),await e.cancelQueries({queryKey:g()});let n=e.getQueryData(b(t)),r=I(e,{queryKey:g()}),i=Date.now();return e.setQueryData(b(t),e=>e&&{...e,archivedAt:i}),W(e,t),{previousThread:n,previousThreadLists:r}},onError:(t,n,r)=>{r&&(e.setQueryData(b(n.id),r.previousThread),F(e,r.previousThreadLists))},onSettled:(t,n,r)=>{B({queryClient:e,threadId:r.id})}})}function Ne(){let t=E();return c({meta:{errorMessage:`Failed to unarchive thread.`},mutationFn:({id:t})=>e(t),onMutate:async({id:e})=>{await t.cancelQueries({queryKey:b(e)}),await t.cancelQueries({queryKey:g()});let n=t.getQueryData(b(e)),r=I(t,{queryKey:g()});return t.setQueryData(b(e),e=>e&&{...e,archivedAt:null}),W(t,e),{previousThread:n,previousThreadLists:r}},onError:(e,n,r)=>{r&&(t.setQueryData(b(n.id),r.previousThread),F(t,r.previousThreadLists))},onSettled:(e,n,r)=>{B({queryClient:t,threadId:r.id})}})}function Pe(){let e=E();return c({meta:{errorMessage:`Failed to delete thread.`},mutationFn:({id:e,managerChildThreadsConfirmed:t})=>ue(e,{managerChildThreadsConfirmed:t}),onMutate:async({id:t})=>{await e.cancelQueries({queryKey:b(t)}),await e.cancelQueries({queryKey:g()}),await e.cancelQueries({queryKey:w()});let n=e.getQueryData(b(t)),r=I(e,{queryKey:g()}),i=e.getQueryData(w()),a=n?.environmentId;return R({queryClient:e,threadId:t}),z({environmentId:a,queryClient:e}),W(e,t),{previousThread:n,previousThreadLists:r,previousProjects:i,environmentId:a}},onError:(t,n,r)=>{r&&(e.setQueryData(b(n.id),r.previousThread),F(e,r.previousThreadLists),e.setQueryData(w(),r.previousProjects))},onSettled:(t,n,r,i)=>{R({queryClient:e,threadId:r.id}),z({environmentId:i?.environmentId,queryClient:e}),we({queryClient:e})}})}function Fe(){let e=E();return c({meta:{errorMessage:`Failed to mark thread read.`,showErrorToast:!1},mutationFn:e=>ie(e),onSuccess:t=>{e.setQueryData(b(t.id),t),G({queryClient:e,thread:t})}})}function Ie(){let e=E();return c({meta:{errorMessage:`Failed to mark thread unread.`,showErrorToast:!1},mutationFn:e=>P(e),onSuccess:t=>{e.setQueryData(b(t.id),t),G({queryClient:e,thread:t})}})}var Le=me(y(),1),K=`STATUS`,q=`STATUS.md`;function J(e){return e===`STATUS`||e===`STATUS/index.html`||e===`STATUS.md`||e===`STATUS.html`}function Re(e){return J(e)?K:e}function ze(e){return K}var Y=1e4,Be=2e3;function X(e,t){if(!e)throw Error(`${t}: thread id is required when query is enabled`);return e}function Ve({filters:e,projectId:t}){let n={archived:!1,projectId:t};return e.parentThreadId!==void 0&&(n.parentThreadId=e.parentThreadId),e.type!==void 0&&(n.type=e.type),n}function He(e,t){return!(t.parentThreadId!==void 0&&e.parentThreadId!==t.parentThreadId||t.type!==void 0&&e.type!==t.type)}function Ue(e,t){return e.filter(e=>He(e,t))}function We(e){return e===`manager`?{type:`manager`}:e===`managed`?{managed:!0,type:`standard`}:e===`unmanaged`?{managed:!1,type:`standard`}:{}}function Ge(e,t){let{projectId:n,kind:r}=e,i=(t?.enabled??!0)&&!!n,a=We(r);return Oe({queryKey:te({projectId:n??``,kind:r}),queryFn:({pageParam:e,signal:t})=>d({projectId:X(n??``,`useArchivedThreads`),archived:!0,...a,limit:100,offset:e},t),initialPageParam:0,getNextPageParam:(e,t)=>{if(!(e.length<100))return t.reduce((e,t)=>e+t.length,0)},enabled:i,staleTime:Y})}function Z(e,t){let{projectId:n,...r}=e,i=(t?.enabled??!0)&&!!n;return x({queryKey:i&&n?j({...r,projectId:n}):h(n?{...r,projectId:n}:r),queryFn:({signal:e})=>d({...r,projectId:X(n??``,`useThreads`)},e),enabled:i,staleTime:Y})}function Ke({enabled:e,filters:t,projectId:n}){let r=E(),i=(e??!0)&&!!n,{parentThreadId:a,type:o}=t,s=i&&n?j({archived:!1,projectId:n}):h(n?{archived:!1,projectId:n}:{archived:!1}),c=i&&n!==void 0&&r.getQueryData(j({archived:!1,projectId:n}))!==void 0,l=x({queryKey:s,queryFn:({signal:e})=>d({archived:!1,projectId:X(n??``,`useProjectThreadSubset`)},e),enabled:i&&c,staleTime:Y}),u=l.data!==void 0,f=Z(Ve({filters:t,projectId:n}),{enabled:i&&!u});return{data:(0,Le.useMemo)(()=>l.data?Ue(l.data,{parentThreadId:a,type:o}):void 0,[l.data,a,o])??f.data,isError:u?l.isError:f.isError,isFetching:u?l.isFetching:f.isFetching,isLoading:u?l.isLoading:f.isLoading}}function qe(e,t){let n=E();return x({queryKey:b(e),queryFn:()=>ve(X(e,`useThread`)),enabled:(t?.enabled??!0)&&!!e,staleTime:5e3,refetchOnMount:t?.refetchOnMount??!0,placeholderData:(t,r)=>be(t,r?.queryKey,e)??xe(n,e)})}function Je(e){let{environment:t,host:n,...r}=e;return r}function Ye({host:e,hosts:t}){if(!t)return[e];let n=!1,r=t.map(t=>t.id===e.id?(n=!0,e):t);return n?r:[...t,e]}function Q({bootstrap:e,environmentId:t,providerId:r,queryClient:a,threadId:o}){a.setQueryData(k(o),e.defaultExecutionOptions),a.setQueryData(i(o),e.queuedMessages),a.setQueryData(n(o),e.promptHistory),a.setQueryData(v(o),e.pendingInteractions);let s=r??e.executionOptions.providers[0]?.id;s&&a.setQueryData(ye({environmentId:t,providerId:s}),e.executionOptions)}function Xe(e,n){let r=E();return x({queryKey:N(e),queryFn:async()=>{let i=await t(X(e,`useThreadDetailBootstrap`));if(r.setQueryData(b(i.id),Je(i)),i.environment&&r.setQueryData(s(i.environment.id),i.environment),i.host){let e=i.host;r.setQueryData(o(e.id),e),r.setQueryData(u(),t=>Ye({host:e,hosts:t}))}if(n?.timelinePrefetch){let e=i.type===`manager`?n.timelinePrefetch.managerTimelineView:void 0;r.prefetchQuery({queryKey:l(i.id,e),queryFn:()=>A({id:i.id,managerTimelineView:e})})}if(n?.composerBootstrapPrefetch){let e=i.environmentId??null,t=i.providerId??null;r.prefetchQuery({queryKey:S(i.id,e),queryFn:async()=>{let n=await T(i.id);return Q({bootstrap:n,environmentId:e,providerId:t,queryClient:r,threadId:i.id}),n}})}return i},enabled:(n?.enabled??!0)&&!!e,staleTime:1/0})}function Ze(e,t){let n=E(),r=t?.environmentId??null,i=t?.providerId??null;return x({queryKey:S(e,r),queryFn:async()=>{let t=await T(X(e,`useThreadComposerBootstrap`));return Q({bootstrap:t,environmentId:r,providerId:i,queryClient:n,threadId:e}),t},enabled:(t?.enabled??!0)&&!!e,refetchOnMount:t?.refetchOnMount??!0,refetchOnWindowFocus:!1,...t?.staleTime===void 0?{}:{staleTime:t.staleTime}})}function $(e,t){return x({queryKey:k(e),queryFn:()=>se(X(e,`useThreadDefaultExecutionOptions`)),enabled:(t?.enabled??!0)&&!!e,refetchOnMount:t?.refetchOnMount??!0,refetchOnWindowFocus:!1,staleTime:t?.staleTime})}function Qe(e,t){return x({queryKey:i(e),queryFn:()=>p(X(e,`useThreadQueuedMessages`)),enabled:(t?.enabled??!0)&&!!e,refetchOnMount:t?.refetchOnMount??!0,refetchOnWindowFocus:!1,staleTime:t?.staleTime})}function $e(e,t){return x({queryKey:n(e),queryFn:({signal:t})=>f(X(e,`useThreadPromptHistory`),t),enabled:(t?.enabled??!0)&&!!e,refetchOnMount:t?.refetchOnMount??!0,staleTime:t?.staleTime??1e4})}function et(e,t){return x({queryKey:v(e),queryFn:({signal:t})=>he(X(e,`useThreadPendingInteractions`),t),enabled:(t?.enabled??!0)&&!!e,refetchOnMount:t?.refetchOnMount??!0,refetchOnWindowFocus:!1,staleTime:t?.staleTime})}function tt(e,t,n){return x({queryKey:ee(e,t),queryFn:({signal:n})=>ne({id:X(e,`useThreadStorageFiles`),options:t,signal:n}),enabled:(n?.enabled??!0)&&!!e,refetchOnWindowFocus:!1})}function nt(e,t,n){return x({queryKey:re(e,t),queryFn:({signal:n})=>a({id:X(e,`useThreadStoragePaths`),options:t,signal:n}),enabled:(n?.enabled??!0)&&!!e,refetchOnWindowFocus:!1,placeholderData:e=>e})}function rt(e,t,n){return x({queryKey:ge(e,t),queryFn:({signal:n})=>C(X(e,`useThreadStorageFilePreview`),t??``,n),enabled:(n?.enabled??!0)&&!!e&&!!t,refetchOnWindowFocus:!1})}function it(e,t){return x({queryKey:m(e),queryFn:({signal:t})=>M(X(e,`useThreadStatusVersion`),t),enabled:(t?.enabled??!0)&&!!e,refetchInterval:Be,refetchIntervalInBackground:!1,refetchOnWindowFocus:!0,staleTime:t?.staleTime})}function at(e,t,n){return x({queryKey:r(e,t),queryFn:({signal:t})=>C(X(e,`useThreadStatusMarkdownPreview`),q,t),enabled:(n?.enabled??!0)&&!!e&&!!t,refetchOnWindowFocus:!1,staleTime:n?.staleTime})}function ot(e,t,n,r){return x({queryKey:ce(e,t,n),queryFn:({signal:t})=>O(X(e,`useThreadHostFilePreview`),n??``,t),enabled:(r?.enabled??!0)&&!!e&&!!t&&!!n,refetchOnWindowFocus:!1})}function st(e,t){let n=t?.managerTimelineView;return x({queryKey:l(e,n),queryFn:()=>A({id:X(e,`useThreadTimeline`),managerTimelineView:n}),enabled:(t?.enabled??!0)&&!!e,refetchOnMount:t?.refetchOnMount??!0,...t?.staleTime===void 0?{}:{staleTime:t.staleTime},placeholderData:(t,r)=>Se(t,r?.queryKey,e,n)})}function ct(){return c({meta:{errorMessage:`Failed to load turn summary details.`,showErrorToast:!1},mutationFn:e=>_(e)})}function lt(e){if(!e||e.length===0)return null;let[t,...n]=e;return n.reduce((e,t)=>t.createdAt>e.createdAt?t:e,t)}export{ke as A,ze as C,Ie as D,Fe as E,V as M,Ne as O,Re as S,Pe as T,st as _,Ze as a,q as b,ot as c,Qe as d,at as f,nt as g,tt as h,qe as i,Ae as j,je as k,et as l,rt as m,Ge as n,$ as o,it as p,Ke as r,Xe as s,lt as t,$e as u,ct as v,Me as w,J as x,Z as y};
@@ -1 +0,0 @@
1
- import{Bi as e,Ta as t,Vi as n,ja as r,na as i}from"./page-shell-CaMV_G2I.js";import{at as a,rt as o}from"./effective-hosts-BS3g3uzj.js";import{d as s,h as c,l,m as u,u as d,v as f}from"./dialog-JFJupr8S.js";import{E as p,b as m}from"./mutation-errors-DgGC9CkY.js";var h=`data:image/png;base64,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`,g=`data:image/png;base64,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`,_=`/assets/finder-BYyfd7HG.png`,v=`/assets/ghostty-D5T950Nz.png`,y=`data:image/png;base64,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`,b=`data:image/png;base64,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`,x=`data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAeGVYSWZNTQAqAAAACAAEARoABQAAAAEAAAA+ARsABQAAAAEAAABGASgAAwAAAAEAAgAAh2kABAAAAAEAAABOAAAAAAAAAJAAAAABAAAAkAAAAAEAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAQKADAAQAAAABAAAAQAAAAACU3PoRAAAACXBIWXMAABYlAAAWJQFJUiTwAAABnWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4yNTY8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MjU2PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cl6wHhsAAAq/SURBVHgB7VtrbFTHFT779Pu5xhgw2IANuBaIuPRBUkoCpKUWVYsatUpDkRJaSn4gfrT8QfygtKpUfqDKiESlCDlFSaNAgyJZbSrjildDIAUT83AwuMGv4Cdee9drr3fvnZ7vLnd9d72zi9fGj8ZHup7ZufM455tzzsydOSaapVkEZhGYRWAWgS8vAqbxiP7hhf/MS81xFJjt1kwzmTPJRMkWs8mmcqcmk+Csxaqq+PWYTCa7hUtJMZTp75BazCQEqaqi+PRis9lMqhB+IYRi5kLkSSgeVZicqk9xPup1Nn//2dVf8CuhtxlLOmYA3v/3p7mFi+b9xGKzbbWYzCstVkuOzW4ni8VCYJZB0MjEaXjnKBtVGM4ti8EghBB+Bsv4h6oKUhSFfL5hUv1KjyKU28Pe4Q+6O1v+unnNmochjWP8COcxWnXTR/daXktNS92fnpFR6B0aoqbG+9Ta9IC6uzrJ3d9PvmFmSFW0PsBkID8yBM8sCxImXdiIJkbJzGCOkGBgAW6gH+QBeEpaGuXMyaUFBYVUsLSIkpKSqd/Z2zrgdv9+bfGiP3F7iZqN9PzEud0VFQlXGlvf+KzXI2519onDxyvFs99+QaSnpWmTwx1NWZqakiq+8dw68Yc3/yxutveKBueg+Lix9cSBAweSn1jAGBUtHzV8/ua9fq+4cOe+eLF8S1BYnhPBczWlD3jQJ+CF72wWZ6/fEvddw+Jyw4MTzz9/wBpDttivq6/d+sXtrn5x/laDKPva17XB2NKDQiM/lY9xAgBE8bLlovraTVHf4xY112/vjiXhiIFGqHn4rbcWPPetjR8nJCbm/+q17VTzz7+Tbp1Awsq2mpySQvyerFYre36T9vCfCL1NQBH7D/gQPH6/n+CHPAMD5Gffoo8ID7R+44v0x8q32Un6Oq6dv/DN1199+YFs9KgqsqJk1cuZWVn5H7z7zijh09gJOebMIZvNhjWPsQckk0iPx2Qhqae7m1zshAECJuh8TTVVnXqXfvzqz+cuWVm6jYt+J+OMtTcyFRUVJaSmpP1w0OOhv52sDFaCmGnp6ZQ3f7629Hm9XtK9uz47k5Ly/gLjYALm5uVpPBmn4Mw7J2nA1U+JiUk/WLt2bVJQgLCMFICXduxYYLNaSx403qM7dTeCKga1z8nJ4SVOpczMTFq3bp2WH+YlcCoIIMD0wBN4A0ETPrt1k/7bcJcSEuzLvvujnxZoLyL8kQKwtGB5odVmzWprbiI32xkqAmHYvJVRBwCpqalUWVlJx44do9WrVxO0AbY52QQQwBN4A4/g1cP+ofXB5/BN6YsKF44dALPdlMU7O1NPZ6fWqS4UHB5sHru+jo4OqqiooLKyMjpz5gwdOnSICgsLaXBwUFNPvc2kpMyTxpthsO6uLo1Pk9XmMBSHZKUaYDFb0zHnHrcrpAG8PRwe1A4O6PDhw1ReXk5HjhyhTZs20enTp2nv3r2segmTCwK0ALwZyONyaXzaLJYsQ3FIVg6AxaLp0xCrkpEguE7IJyUl0cOHD+ngwYO0bds2crvdtHv3bsrPz9f263rdyUiNvGE8rzegiWarJU02fihkhlrsY+2qUMnPs2wk4yCwPQA0d+5c2rVrF23fvp1S2A6PHz9ObW1t2iphbPu080beMJbfxx+OLINZCLtsbCkAFrPZLviDxu8PBQD2D9IcD6scBN+xY4cGQlVVFR09epTu3LmjmUA4QzImJqzcoJ3oE45a8Ke3X1X1/duooaQAsJgJ3IOG4qhWjzvHzO/bt48uX75Me/bsoStXrmg2lwhHOQ0Is489Cs+ilBspAIrPZ1ZUViEGIRJhdj28Sdq5cyedO3eOsA+A4wsnLIvQlkikb58jvZuIMmgwZAg5lAnrWAoAGqmsPkAxEmEZ7O3tperqam03Fkl4gLR8+XKy8/d7JGpubtac5tMylYAGsBySSQRPUgDYbjQvzkdQkXjXysC4TDjMOkA5ceIE5fFWNRLBd9TU1ETUnEj1x1oG3nFyBFlkJAUgoAFyE5B1qJcDHOwT9u/fry2Verkxra+vD3xMGQsnMA/zVZU4TQCOQ//IiZcngHj27FmpD4D2aOeI8Q4Qox20MG4nCOahPjInGGPs4OtIviH48ilnwDtkiOYDpDvBgAnEPsR8yjKMq3tdA+ICwM/LhxLDfsbF3SQ0Dmixn52gfB8g1QBuFfABrEYzlQJOEBshuQxSAFRsIOADoiyD0x2YEROIQwP0fYBsIzTdhQd/4D3WPkCuAaw2CraxvJ2cqaRthbGcx2MCbDi8fIx/GZxK8DQfgKu6eJyg4lP80IDgaehUShLn2DjPgB+LdxnktjPfCfI0Rv0WkPoAhg1Xz+PeCcY5eRPSLLAThCnHsQrw7Cv4kJjJpC+Dce0D/D5AID/MmAnA6E4wLh+A+AJGQHogMiMAeOwERTwmoHvP/4+doHy6pE6Qz/IYA/YB4Vvh8N/yvif/TRhvmDxoMZ8LSj8GpAAIRRnGKhB+XjedNWL0npUD0ngvw5MpvbmVAsCnvB6c6CL6y0jTGoCwL1fcFkMGPuF2G2Uw5uUA+Hz9QC/80BMd6pcjxo6mPM9nkBpvBkbsdhtrgI+GvF6noTgkKwVg0O128bWYSEpODtkNIyxllF8I6XKKfrC9a7wZhsd1OQ5mhwYGxg5AU1NTi9c71JeZkUGJfHgJ+8KlmBaTw52G+wbDuJOeBS+4wwRv4BG8JvC1HYf30LDX6+bL2xYZUzINMF2/fv0LVp172Y5smr9gQTDqEAFJ3RyTA18wHUAAD+AFPIE3EFz+PA7hyXE4oBWNFy9ebOWiwKUmKhhIBoDo6+tzOXt7/2HhyMyvrlkTbIJeEJDUwVfiUC8wYOJbIi1FfrKex2OCh4729mCQlM5oGfPMES7k7Ov70OVywQRGLxJcKL0YQYNrn3zyPpvA6yWlpXNK6uqo/u5dLQpLA4GDDxBANR3D5JYVFdHKVSsByqNPa2tPyYTn8ugAXL16taG0tLRi8eLFvy3fsoX6eebbeOaxMAIEbDJQxn/Q15QQ+MADggFA7TeXf48DpqzU1txy9NKlS/VcHHH20SZ0kUfJCGl+r6Gh4W5xcXGhw+H4ylJG1vnoEXX19ASdos7AVKVgEjaPtJj527p1K+Xm5iJ+qeqtv5z8DS+NiPEJOAfOhFM0AFBXsI35GIQrS5YsWZidnVWyomQFObKzOTJkUDMBHJ7qDICJyXzAoJ2jw/LZSa9fv542bNhAHM1OnZ1dVRy09Wu+vUbofFiEB1qNkK49IyWjc6iDiIfcn73yyq68+fN+yRHaWcMcq48ITafTSQPuAS1EDiYR7dNzdNdjL8FdInan9gQOmU9J1WIVc3Ic/DuB+XA72zvaj7/33uk3OHSnnXv38iP9DsDoTwKAXg/RDymrVq1aXfbMMy9lZGZs5Hu/Ap4B/i8QC3t/rASo+vRJ0zLWPADOCspL/XBzn9P5rxt1dadqa2tvMAcD/CC6C1Wj0lhZ5sBgDp1hjeAtch6DsYR9w6KUlKSFHBaTCBCeHNOofEV5iWBpFbGI3iHPUPOjnp6W2rq6Rv52wYxDaMw6jrJiCs91nlgDUFcngAbfATCQ4jFKPlZQufmYSBcMKdQbDg4PbB2p/p6zsWm8zOrtker52KNOTA0IqgurpxPT82wvswjMIvClQeB/QMMm6ZCwrokAAAAASUVORK5CYII=`,S=`data:image/png;base64,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`,C=`/assets/windsurf-Do5nbXdF.png`,w=`/assets/xcode-BOSzsT4U.png`,T=`/assets/zed-C-eVD5h3.png`,E=i(),D={antigravity:h,cursor:g,finder:_,ghostty:v,iterm2:y,"sublime-text":b,terminal:x,vscode:S,windsurf:C,xcode:w,zed:T};function O({className:t=`size-4`,targetId:r}){return r===`default-app`?(0,E.jsx)(`span`,{className:n(t,`flex shrink-0 items-center justify-center text-muted-foreground`),children:(0,E.jsx)(e,{name:`ExternalLink`,className:`!size-3.5`,"aria-hidden":!0})}):(0,E.jsx)(`img`,{alt:``,className:n(t,`shrink-0 rounded-[3px]`),draggable:!1,src:D[r]})}var k=r(t(),1),A=f(null),j=f(null),M=f([]);function N(e){let t=c(e.enabled?d:A),n=c(e.enabled?l:j),r=c(e.enabled?s:M);return{openWorkspace:(0,k.useMemo)(()=>{if(!e.enabled||!t||!n||r.length===0)return null;let i=n;return e=>o(i,e)},[e.enabled,t,n,r.length]),workspaceOpenTargets:r}}var P=`bb.workspaceOpenTarget`,F=`bb.fileOpenTarget`;function I(e){return e.target.capabilities[e.capability]}function L(e){return I({capability:`openDirectory`,target:e})}function R(e){return I({capability:`openFile`,target:e})}function z(e,t){return t.find(t=>I({capability:e,target:t}))??null}function B(e){return a.safeParse(e).success}var V=m(B),H=p(P,null,V,{getOnInit:!0}),U=p(F,null,V,{getOnInit:!0});function W(e){if(e.preferredTargetId!==null){let t=e.targets.find(t=>t.id===e.preferredTargetId&&I({capability:e.capability,target:t}));if(t)return t}return z(e.capability,e.targets)}function G(){return u(H)}function K(){return u(U)}export{K as a,O as c,I as i,R as n,G as o,W as r,N as s,L as t};
@@ -1,380 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1" />
6
- <title>Manager Status</title>
7
- <link rel="preconnect" href="https://fonts.googleapis.com" />
8
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
9
- <link
10
- href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Fira+Code:wght@400;500&display=swap"
11
- rel="stylesheet"
12
- />
13
- <style>
14
- /* bb design tokens, mirrored from apps/app/src/components/ui/theme.css.
15
- See also: `bb guide styling`. */
16
- :root {
17
- color-scheme: light;
18
- --background: oklch(0.9551 0 0);
19
- --foreground: oklch(0.3211 0 0);
20
- --card: oklch(0.9702 0 0);
21
- --muted-foreground: oklch(0.5103 0 0);
22
- --secondary: oklch(0.9067 0 0);
23
- --border: oklch(0.8576 0 0);
24
- --success: oklch(0.7 0.15 155);
25
- --attention: oklch(0.74 0.15 80);
26
- --destructive: oklch(0.5594 0.19 25.8625);
27
- --primary: oklch(0.4891 0 0);
28
- --font-sans: "Inter", -apple-system, BlinkMacSystemFont, sans-serif;
29
- --font-mono: "Fira Code", ui-monospace, Menlo, monospace;
30
- --radius: 0.35rem;
31
- --radius-sm: calc(var(--radius) - 4px);
32
- --shadow-sm:
33
- 0px 2px 0px 0px hsl(0 0% 20% / 0.12),
34
- 0px 1px 2px -1px hsl(0 0% 20% / 0.12);
35
- --text-xs: 0.75rem;
36
- --text-sm: 0.8125rem;
37
- --text-base: 0.9375rem;
38
- }
39
- @media (prefers-color-scheme: dark) {
40
- :root {
41
- color-scheme: dark;
42
- --background: oklch(0.195 0 0);
43
- --foreground: oklch(0.8853 0 0);
44
- --card: oklch(0.2435 0 0);
45
- --muted-foreground: oklch(0.66 0 0);
46
- --secondary: oklch(0.3092 0 0);
47
- --border: oklch(0.329 0 0);
48
- --success: oklch(0.74 0.15 155);
49
- --attention: oklch(0.8 0.15 80);
50
- --destructive: oklch(0.56 0.19 22.1703);
51
- --primary: oklch(0.7058 0 0);
52
- }
53
- }
54
-
55
- *,
56
- *::before,
57
- *::after {
58
- box-sizing: border-box;
59
- }
60
-
61
- html {
62
- height: 100%;
63
- overflow-y: auto;
64
- overflow-x: hidden;
65
- scrollbar-width: thin;
66
- scrollbar-color: var(--border) transparent;
67
- }
68
- html::-webkit-scrollbar {
69
- width: 10px;
70
- }
71
- html::-webkit-scrollbar-thumb {
72
- background: var(--border);
73
- border-radius: 999px;
74
- border: 2px solid var(--background);
75
- }
76
- html::-webkit-scrollbar-thumb:hover {
77
- background: var(--muted-foreground);
78
- }
79
-
80
- body {
81
- margin: 0;
82
- padding: 16px 16px 20px;
83
- background: var(--background);
84
- color: var(--foreground);
85
- font-family: var(--font-sans);
86
- font-size: var(--text-base);
87
- line-height: 1.45;
88
- -webkit-font-smoothing: antialiased;
89
- text-rendering: optimizeLegibility;
90
- }
91
-
92
- a {
93
- color: inherit;
94
- text-decoration: none;
95
- }
96
- a:hover {
97
- text-decoration: underline;
98
- text-decoration-thickness: 1px;
99
- text-underline-offset: 2px;
100
- }
101
-
102
- code,
103
- .mono {
104
- font-family: var(--font-mono);
105
- font-size: var(--text-xs);
106
- color: var(--muted-foreground);
107
- }
108
-
109
- /* header */
110
- .header {
111
- display: flex;
112
- align-items: center;
113
- gap: 8px;
114
- padding-bottom: 10px;
115
- border-bottom: 1px solid var(--border);
116
- }
117
- .brand {
118
- width: 20px;
119
- height: 20px;
120
- border: 1px solid var(--border);
121
- background: var(--card);
122
- border-radius: var(--radius-sm);
123
- display: inline-flex;
124
- align-items: center;
125
- justify-content: center;
126
- font-family: var(--font-mono);
127
- font-weight: 500;
128
- font-size: 10px;
129
- }
130
- .title {
131
- font-size: var(--text-sm);
132
- font-weight: 600;
133
- letter-spacing: -0.005em;
134
- flex: 1;
135
- min-width: 0;
136
- }
137
- .ts {
138
- font-family: var(--font-mono);
139
- font-size: 10px;
140
- color: var(--muted-foreground);
141
- }
142
-
143
- /* sections */
144
- section {
145
- margin-top: 16px;
146
- }
147
- .sect-title {
148
- font-size: 10.5px;
149
- font-weight: 600;
150
- letter-spacing: 0.06em;
151
- text-transform: uppercase;
152
- color: var(--muted-foreground);
153
- margin-bottom: 8px;
154
- }
155
-
156
- /* row */
157
- .row {
158
- display: flex;
159
- align-items: flex-start;
160
- justify-content: space-between;
161
- gap: 10px;
162
- padding: 10px 12px;
163
- background: var(--card);
164
- border: 1px solid var(--border);
165
- border-radius: var(--radius);
166
- }
167
- .row + .row {
168
- margin-top: 6px;
169
- }
170
- .row .main {
171
- min-width: 0;
172
- flex: 1;
173
- }
174
- .row .label {
175
- font-family: var(--font-mono);
176
- font-size: 10.5px;
177
- color: var(--muted-foreground);
178
- margin-bottom: 3px;
179
- }
180
- .row .name {
181
- font-size: var(--text-sm);
182
- font-weight: 500;
183
- line-height: 1.35;
184
- color: var(--foreground);
185
- word-break: break-word;
186
- }
187
-
188
- /* pill */
189
- .pill {
190
- display: inline-flex;
191
- align-items: center;
192
- gap: 5px;
193
- font-family: var(--font-mono);
194
- font-size: 9.5px;
195
- font-weight: 500;
196
- line-height: 1;
197
- padding: 3px 7px;
198
- border-radius: 999px;
199
- border: 1px solid var(--border);
200
- background: var(--secondary);
201
- color: var(--muted-foreground);
202
- text-transform: uppercase;
203
- letter-spacing: 0.05em;
204
- white-space: nowrap;
205
- flex-shrink: 0;
206
- }
207
- .pill .dot {
208
- width: 5px;
209
- height: 5px;
210
- border-radius: 999px;
211
- background: currentColor;
212
- }
213
- .pill.open {
214
- color: var(--success);
215
- background: color-mix(in srgb, var(--success) 12%, var(--background));
216
- border-color: color-mix(in srgb, var(--success) 32%, var(--border));
217
- }
218
- .pill.running {
219
- color: var(--attention);
220
- background: color-mix(in srgb, var(--attention) 14%, var(--background));
221
- border-color: color-mix(in srgb, var(--attention) 32%, var(--border));
222
- }
223
- .pill.failed {
224
- color: var(--destructive);
225
- background: color-mix(in srgb, var(--destructive) 12%, var(--background));
226
- border-color: color-mix(in srgb, var(--destructive) 32%, var(--border));
227
- }
228
-
229
- .empty {
230
- padding: 10px 12px;
231
- font-size: var(--text-sm);
232
- color: var(--muted-foreground);
233
- font-style: italic;
234
- border: 1px dashed var(--border);
235
- border-radius: var(--radius);
236
- }
237
- </style>
238
- </head>
239
- <body>
240
- <header class="header">
241
- <span class="brand">bb</span>
242
- <span class="title">Manager status</span>
243
- <span class="ts">—</span>
244
- </header>
245
-
246
- <section>
247
- <div class="sect-title">Open PRs · 0</div>
248
- <div class="empty">No open PRs.</div>
249
- </section>
250
-
251
- <section>
252
- <div class="sect-title">Active workers · 0</div>
253
- <div class="empty">No active workers.</div>
254
- </section>
255
-
256
- <!--
257
- =====================================================================
258
- SNIPPET LIBRARY — copy/paste from these patterns when populating
259
- STATUS.html. Keep them in sync if you change the styles above. For the
260
- design tokens themselves, run `bb guide styling`.
261
- =====================================================================
262
-
263
- ---- Refresh timestamp (header right) ----
264
- Update <span class="ts"> on every refresh:
265
- <span class="ts">YYYY-MM-DD · HH:MM TZ</span>
266
-
267
- ---- Section: open PRs (with count) ----
268
- <section>
269
- <div class="sect-title">Open PRs · 2</div>
270
- <div class="row"> ...PR row... </div>
271
- <div class="row"> ...PR row... </div>
272
- </section>
273
-
274
- ---- PR row ----
275
- <div class="row">
276
- <div class="main">
277
- <div class="label">#42</div>
278
- <div class="name">
279
- <a href="https://github.com/OWNER/REPO/pull/42" target="_blank" rel="noopener">PR title goes here</a>
280
- </div>
281
- </div>
282
- <span class="pill open"><span class="dot"></span>Open</span>
283
- </div>
284
-
285
- ---- Active worker row ----
286
- <div class="row">
287
- <div class="main">
288
- <div class="label">thr_xxxxxxxxxx</div>
289
- <div class="name">One-line description of what the worker is doing</div>
290
- </div>
291
- <span class="pill running"><span class="dot"></span>Running</span>
292
- </div>
293
-
294
- ---- Empty state ----
295
- <div class="empty">No open PRs.</div>
296
- <div class="empty">No active workers.</div>
297
-
298
- ---- Pill variants ----
299
- <span class="pill open"><span class="dot"></span>Open</span> (success / green)
300
- <span class="pill running"><span class="dot"></span>Running</span> (attention / amber)
301
- <span class="pill failed"><span class="dot"></span>Failed</span> (destructive / red)
302
- <span class="pill"><span class="dot"></span>Neutral</span> (muted)
303
-
304
- ---- Inline status annotation on a name (e.g. "Superseded by #99") ----
305
- <span class="pill" style="margin-left:6px; color:var(--destructive); border-color:color-mix(in srgb,var(--destructive) 32%,var(--border)); background:color-mix(in srgb,var(--destructive) 12%,var(--background))">Superseded by #99</span>
306
-
307
- =====================================================================
308
- No-PR landing mode — use these two sections in place of "Open PRs"
309
- when the user has opted out of PRs. "In progress" tracks worker
310
- branches in flight; "Ready for review" tracks validated branches
311
- waiting for the user to push or merge.
312
- =====================================================================
313
-
314
- ---- Section: in-progress work (no-PR mode) ----
315
- <section>
316
- <div class="sect-title">In progress · N</div>
317
- <div class="row">
318
- <div class="main">
319
- <div class="label">branch-name</div>
320
- <div class="name">One-line description of the work in flight</div>
321
- </div>
322
- <span class="pill running"><span class="dot"></span>WIP</span>
323
- </div>
324
- </section>
325
-
326
- ---- Section: ready for review (no-PR mode) ----
327
- <section>
328
- <div class="sect-title">Ready for review · N</div>
329
- <div class="row">
330
- <div class="main">
331
- <div class="label">branch-name</div>
332
- <div class="name">One-line description · validated and waiting for user OK</div>
333
- </div>
334
- <span class="pill open"><span class="dot"></span>Ready</span>
335
- </div>
336
- </section>
337
-
338
- ---- Optional sections you may want later ----
339
-
340
- Active workers entry with provider/base meta (use a card-style row with extra meta block):
341
- <article class="row" style="flex-direction:column; align-items:stretch; gap:6px">
342
- <div style="display:flex; justify-content:space-between; gap:10px; align-items:flex-start">
343
- <span class="label">thr_xxxxxxxxxx</span>
344
- <span class="pill running"><span class="dot"></span>Running</span>
345
- </div>
346
- <div class="name">Description</div>
347
- <div style="display:flex; flex-direction:column; gap:3px; font-family:var(--font-mono); font-size:10.5px; color:var(--muted-foreground)">
348
- <span>provider · codex · xhigh · full perms</span>
349
- <span>base · origin/main</span>
350
- </div>
351
- </article>
352
-
353
- Dev-instance callout:
354
- <section>
355
- <div class="sect-title">Dev instance</div>
356
- <div class="row">
357
- <div class="main">
358
- <div class="label">~/.bb-dev/</div>
359
- <div class="name">Running PR #NN worktree.</div>
360
- </div>
361
- <span class="pill running"><span class="dot"></span>Up</span>
362
- </div>
363
- </section>
364
-
365
- Recently completed feed (compact list — keep short, e.g. last 3):
366
- <section>
367
- <div class="sect-title">Recently completed · 2</div>
368
- <div class="row">
369
- <div class="main">
370
- <div class="label">thr_xxxxxxxxxx</div>
371
- <div class="name">
372
- One-line outcome — <a href="https://github.com/OWNER/REPO/pull/41" target="_blank" rel="noopener">PR #41</a>
373
- <span class="pill" style="margin-left:6px">Merged</span>
374
- </div>
375
- </div>
376
- </div>
377
- </section>
378
- -->
379
- </body>
380
- </html>