bazilion 0.6.0 → 0.7.0

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 (136) hide show
  1. package/README.md +4 -4
  2. package/dist/cli.js +25 -19
  3. package/dist/cli.js.map +1 -1
  4. package/dist/daemon.js +206 -6
  5. package/dist/daemon.js.map +1 -1
  6. package/dist/web/client/assets/AgentAvatar-JYijLvZ2.js +1 -0
  7. package/dist/web/client/assets/AgentTabs-DioGqUVR.js +1 -0
  8. package/dist/web/client/assets/Button-ByiV6fpd.js +1 -0
  9. package/dist/web/client/assets/ChatPane-DzEgOEqS.js +74 -0
  10. package/dist/web/client/assets/ConfigTabs-pY-V0Rie.js +1 -0
  11. package/dist/web/client/assets/FieldRow-CNKma5LE.js +1 -0
  12. package/dist/web/client/assets/MembersEditor-C6UpqDdV.js +1 -0
  13. package/dist/web/client/assets/SpawnTeamModal-BEkNCKXm.js +1 -0
  14. package/dist/web/client/assets/TemplatesTabs-Da7mg9FI.js +1 -0
  15. package/dist/web/client/assets/_id-BdKmo0gb.js +1 -0
  16. package/dist/web/client/assets/_id-LT6Ejjr0.js +1 -0
  17. package/dist/web/client/assets/_id-MR2XjWh0.js +1 -0
  18. package/dist/web/client/assets/_id-_6jIt0_-.js +1 -0
  19. package/dist/web/client/assets/agents-0arKbVYG.js +1 -0
  20. package/dist/web/client/assets/config-BSAVT-17.js +3 -0
  21. package/dist/web/client/assets/groups-BqTkhHes.js +1 -0
  22. package/dist/web/client/assets/inbox-ozoCXzr5.js +1 -0
  23. package/dist/web/client/assets/index-iayCEuU2.js +12 -0
  24. package/dist/web/client/assets/jsx-runtime-DGeXAQPT.js +1 -0
  25. package/dist/web/client/assets/login-D8lNr2SX.js +1 -0
  26. package/dist/web/client/assets/mcp-BLnngDsj.js +1 -0
  27. package/dist/web/client/assets/memory-D1GQjEvN.js +1 -0
  28. package/dist/web/client/assets/preload-helper-CvnapA2_.js +1 -0
  29. package/dist/web/client/assets/profile-groups-C2yJPTaE.js +1 -0
  30. package/dist/web/client/assets/profiles-BV7AAZjj.js +1 -0
  31. package/dist/web/client/assets/routes-DSHQLA7K.js +1 -0
  32. package/dist/web/client/assets/services-BbCJe1Du.js +1 -0
  33. package/dist/web/client/assets/skills-C6czKR5I.js +1 -0
  34. package/dist/web/client/assets/styles-C06axZZk.css +2 -0
  35. package/dist/web/client/assets/telegram-gE4j8gte.js +1 -0
  36. package/dist/web/client/assets/tokens-D2_O9ARe.js +1 -0
  37. package/dist/web/client/assets/triggers-WljnfEfJ.js +1 -0
  38. package/dist/web/client/assets/welcome-Dn-zvmBE.js +1 -0
  39. package/dist/web/server/assets/{_id-CvIGhq4U.js → _id-81NrHA5d.js} +2 -2
  40. package/dist/web/server/assets/{_id-C78M9_j9.js → _id-BKev9H1p.js} +2 -2
  41. package/dist/web/server/assets/{_id-Dc8P9sy2.js → _id-BNwlbWHP.js} +1 -1
  42. package/dist/web/server/assets/{_id-CrQbC5L8.js → _id-BqnDy_Ca.js} +2 -2
  43. package/dist/web/server/assets/{_id-CHNm7EAd.js → _id-CRqqi8IE.js} +1 -1
  44. package/dist/web/server/assets/{_id-Bm4-_AP-.js → _id-CXg-Blec.js} +1 -1
  45. package/dist/web/server/assets/{_id-BZ-YCWSw.js → _id-CnQflrRv.js} +2 -2
  46. package/dist/web/server/assets/{_id-GJk3EYTT.js → _id-D0ytyXGY.js} +1 -1
  47. package/dist/web/server/assets/{_id-DF3pfi9M.js → _id-D8duqgd5.js} +1 -1
  48. package/dist/web/server/assets/{_id-pd4S7LTi.js → _id-DDixKEud.js} +1 -1
  49. package/dist/web/server/assets/{_id-CGZbudCl.js → _id-D_Ew11ED.js} +1 -1
  50. package/dist/web/server/assets/{_id-Crcw2HhT.js → _id-Sjw0zhA6.js} +1 -1
  51. package/dist/web/server/assets/{_tanstack-start-manifest_v-CPyKYMJg.js → _tanstack-start-manifest_v-DBlFH2gg.js} +45 -41
  52. package/dist/web/server/assets/{agents-70EwQJR6.js → agents-C7SBPN0M.js} +1 -1
  53. package/dist/web/server/assets/{agents-K4Smhnq3.js → agents-ChcAJUI5.js} +2 -2
  54. package/dist/web/server/assets/{agents-Ds4lcREv.js → agents-k5QURC4I.js} +1 -1
  55. package/dist/web/server/assets/{auth-DpAGLHpA.js → auth-DzRAMwVt.js} +1 -1
  56. package/dist/web/server/assets/{config-DxCGYgR9.js → config-Bq3o924J.js} +2 -2
  57. package/dist/web/server/assets/{config-CMXUx_IF.js → config-CHaCv89D.js} +1 -1
  58. package/dist/web/server/assets/{config-DQbCsY_l.js → config-CdVjqjin.js} +18 -9
  59. package/dist/web/server/assets/{createServerRpc-CBTntoKx.js → createServerRpc-CeKECg65.js} +1 -1
  60. package/dist/web/server/assets/{createSsrRpc-DHBVUN8O.js → createSsrRpc-ZBGxhl8t.js} +1 -1
  61. package/dist/web/server/assets/{empty-plugin-adapters-Bos_V2s-.js → empty-plugin-adapters-DKUlnwwl.js} +1 -1
  62. package/dist/web/server/assets/{groups-Cms8cvH5.js → groups-CbSwND2r.js} +2 -2
  63. package/dist/web/server/assets/{groups-CXVew7BP.js → groups-CeRRlZaZ.js} +1 -1
  64. package/dist/web/server/assets/{groups-Dmcvw5ya.js → groups-pk4CYSuf.js} +1 -1
  65. package/dist/web/server/assets/{inbox-0QfwsrGo.js → inbox-Bxb3W04M.js} +2 -2
  66. package/dist/web/server/assets/{inbox-B7UWoICA.js → inbox-CkiSvD14.js} +1 -1
  67. package/dist/web/server/assets/{inbox-8HybA2Ws.js → inbox-DU27iHv_.js} +1 -1
  68. package/dist/web/server/assets/{mcp-DIa0kIOf.js → mcp-BU_kKENi.js} +1 -1
  69. package/dist/web/server/assets/{mcp-DsTjY3uz.js → mcp-BsFKEoXt.js} +1 -1
  70. package/dist/web/server/assets/{mcp-42BrkI1I.js → mcp-CKqwG4mt.js} +2 -2
  71. package/dist/web/server/assets/{memory-Dr0lOM2y.js → memory-BaYnfm7K.js} +1 -1
  72. package/dist/web/server/assets/{memory-BfrMp8iY.js → memory-CQaqWnyM.js} +1 -1
  73. package/dist/web/server/assets/{memory-EEgLDfCj.js → memory-Ns2-Z31p.js} +2 -2
  74. package/dist/web/server/assets/{profile-groups-C5isDI2t.js → profile-groups-CiU06yN1.js} +1 -1
  75. package/dist/web/server/assets/{profile-groups-B_kIT6BU.js → profile-groups-D21MYoLM.js} +1 -1
  76. package/dist/web/server/assets/{profile-groups-BW5gU-fG.js → profile-groups-aoJleXHP.js} +2 -2
  77. package/dist/web/server/assets/{profiles-BbPTpmyq.js → profiles-C6a3RKgu.js} +1 -1
  78. package/dist/web/server/assets/{profiles-Cy5auEj8.js → profiles-CZ5NkmVw.js} +2 -2
  79. package/dist/web/server/assets/{profiles-BP1v-jna.js → profiles-LxcC_L6n.js} +1 -1
  80. package/dist/web/server/assets/{router-CL100-Ly.js → router-BpBZgRwn.js} +21 -21
  81. package/dist/web/server/assets/{routes-D2H1Hnoh.js → routes-C61gBiXa.js} +1 -1
  82. package/dist/web/server/assets/{routes-Dzk8jvIo.js → routes-Ce2VWrU9.js} +1 -1
  83. package/dist/web/server/assets/{routes-CzJLQxcS.js → routes-V9URcp1v.js} +2 -2
  84. package/dist/web/server/assets/{services-DFenjiw0.js → services-B91w2f-X.js} +1 -1
  85. package/dist/web/server/assets/{services-DEgYsWJ4.js → services-Ccc5s2bS.js} +2 -2
  86. package/dist/web/server/assets/{services-Bgj6M2gC.js → services-DhRiNeq0.js} +1 -1
  87. package/dist/web/server/assets/{skills-BASIP_rT.js → skills-CFIWVg32.js} +1 -1
  88. package/dist/web/server/assets/{skills-C-JPRCHh.js → skills-CpsyR_WA.js} +2 -2
  89. package/dist/web/server/assets/{skills-DZXN680t.js → skills-dLyBZb3B.js} +1 -1
  90. package/dist/web/server/assets/start-CYDpZ6cb.js +4 -0
  91. package/dist/web/server/assets/{telegram-sUckI94O.js → telegram-BdaUIjvs.js} +1 -1
  92. package/dist/web/server/assets/{telegram-BbvqVWxa.js → telegram-DfAddLdv.js} +1 -1
  93. package/dist/web/server/assets/{telegram-Bq49AtnP.js → telegram-T3l9KtiE.js} +2 -2
  94. package/dist/web/server/assets/{tokens-Dwn00iV7.js → tokens-BCz3PSoT.js} +1 -1
  95. package/dist/web/server/assets/{tokens-CImgxhDI.js → tokens-CkKqrtk-.js} +1 -1
  96. package/dist/web/server/assets/{tokens-BERRE0wB.js → tokens-DdpnfV_Y.js} +2 -2
  97. package/dist/web/server/assets/{triggers-TyIjwSYn.js → triggers-BcH_6PW1.js} +1 -1
  98. package/dist/web/server/assets/{triggers-DtexqbNH.js → triggers-BcTTwMfy.js} +2 -2
  99. package/dist/web/server/assets/{triggers-_iSeahif.js → triggers-BzJG1nN5.js} +1 -1
  100. package/dist/web/server/assets/{welcome-BkQ9NC5K.js → welcome-CP4CZ9B6.js} +13 -9
  101. package/dist/web/server/server.js +94 -82
  102. package/dist/worker.js +65 -2
  103. package/dist/worker.js.map +1 -1
  104. package/package.json +17 -17
  105. package/dist/web/client/assets/AgentAvatar-Cq7PVBE_.js +0 -1
  106. package/dist/web/client/assets/AgentTabs-M5K8emJ8.js +0 -1
  107. package/dist/web/client/assets/Button-BefUtjMZ.js +0 -1
  108. package/dist/web/client/assets/ChatPane-C8zQfpzH.js +0 -74
  109. package/dist/web/client/assets/ConfigTabs-DRqAymcN.js +0 -1
  110. package/dist/web/client/assets/FieldRow-BqWnxZiX.js +0 -1
  111. package/dist/web/client/assets/MembersEditor-B-47GLUb.js +0 -1
  112. package/dist/web/client/assets/SpawnTeamModal-DiiC7Nc0.js +0 -1
  113. package/dist/web/client/assets/TemplatesTabs-DB4KERTQ.js +0 -1
  114. package/dist/web/client/assets/_id-B7gv1aPQ.js +0 -1
  115. package/dist/web/client/assets/_id-C7d1AqS0.js +0 -1
  116. package/dist/web/client/assets/_id-DhiwjC8u.js +0 -1
  117. package/dist/web/client/assets/_id-p8lUuNFm.js +0 -1
  118. package/dist/web/client/assets/agents-v8G-wt0M.js +0 -1
  119. package/dist/web/client/assets/config-BdmYpS_y.js +0 -3
  120. package/dist/web/client/assets/groups-DiY_ExGM.js +0 -1
  121. package/dist/web/client/assets/inbox-DtfVx246.js +0 -1
  122. package/dist/web/client/assets/index-BQUL6oyH.js +0 -12
  123. package/dist/web/client/assets/login-CVS70W9g.js +0 -1
  124. package/dist/web/client/assets/mcp-BDLQq8OZ.js +0 -1
  125. package/dist/web/client/assets/memory-6GGuAXwx.js +0 -1
  126. package/dist/web/client/assets/profile-groups-BA8rwZMA.js +0 -1
  127. package/dist/web/client/assets/profiles-C0aAcPZg.js +0 -1
  128. package/dist/web/client/assets/routes-DgAhnKFw.js +0 -1
  129. package/dist/web/client/assets/services-BZ86QEah.js +0 -1
  130. package/dist/web/client/assets/skills-mv_NNNwo.js +0 -1
  131. package/dist/web/client/assets/styles-CmqUskDu.css +0 -2
  132. package/dist/web/client/assets/telegram-5f9WXs3x.js +0 -1
  133. package/dist/web/client/assets/tokens-DHiYsFUh.js +0 -1
  134. package/dist/web/client/assets/triggers-CjC8Ljrz.js +0 -1
  135. package/dist/web/client/assets/welcome-C-Cu-ziL.js +0 -1
  136. package/dist/web/server/assets/start-cOXH7eTI.js +0 -4
@@ -0,0 +1 @@
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,a)=>(a=n==null?{}:e(i(n)),s(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n)),l=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),u=o(((e,t)=>{t.exports=l()}));export{o as n,c as r,u as t};
@@ -0,0 +1 @@
1
+ import{t as e}from"./jsx-runtime-DGeXAQPT.js";import{b as t,x as n,y as r}from"./index-iayCEuU2.js";var i=e();function a(){let{error:e}=r.useSearch();return(0,i.jsxs)(`main`,{className:`relative flex min-h-dvh items-center justify-center bg-cream`,children:[(0,i.jsx)(`div`,{"aria-hidden":`true`,className:`pointer-events-none absolute inset-0`,style:{background:`radial-gradient(circle at 20% 15%, rgba(74,124,155,0.12), transparent 55%), radial-gradient(circle at 80% 85%, rgba(196,135,138,0.10), transparent 55%)`}}),(0,i.jsxs)(`div`,{className:`relative w-full max-w-sm rounded-[16px] border border-frost bg-snow p-8 text-center shadow-baziu-md`,children:[(0,i.jsx)(t,{className:`mx-auto mb-3 h-16 w-16`}),(0,i.jsx)(`h1`,{className:`font-display text-[2rem] tracking-tight text-charcoal`,children:`bazilion`}),e&&(0,i.jsx)(`div`,{className:`err mt-4`,children:`invalid token`}),(0,i.jsxs)(`form`,{method:`POST`,action:`/api/login`,className:`mt-6 text-left`,children:[(0,i.jsx)(`label`,{htmlFor:`token`,className:`block text-[0.85em] font-medium text-mocha`,children:`Token`}),(0,i.jsx)(`input`,{type:`password`,id:`token`,name:`token`,autoFocus:!0,required:!0,placeholder:`paste from auth.json`,className:`mb-5`}),(0,i.jsx)(`button`,{type:`submit`,className:`w-full`,children:`log in`})]}),(0,i.jsxs)(`p`,{className:`mt-5 text-[0.78em] leading-relaxed text-mocha-light`,children:[`Your token is in `,(0,i.jsx)(`code`,{children:`~/.bazilion/auth.json`}),(0,i.jsx)(`br`,{}),`created on first `,(0,i.jsx)(`code`,{children:`bazilion dashboard`}),` or `,(0,i.jsx)(`code`,{children:`bazilion serve`})]})]}),(0,i.jsxs)(`footer`,{className:`absolute bottom-4 left-0 right-0 text-center text-[0.78em] text-fawn`,children:[`dedicated to Baziu`,(0,i.jsx)(n,{className:`ml-1 inline-block h-3 w-3 align-[-1px] opacity-40`})]})]})}export{a as component};
@@ -0,0 +1 @@
1
+ import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{Q as n,u as r}from"./preload-helper-CvnapA2_.js";import{s as i}from"./index-iayCEuU2.js";import{t as a}from"./ConfigTabs-pY-V0Rie.js";var o=e(n()),s=t(),c=[`stdio`,`http`,`sse`];function l(){let{servers:e}=i.useLoaderData(),t=r(),[n,l]=(0,o.useState)(``),[u,d]=(0,o.useState)(`stdio`),[f,p]=(0,o.useState)(``),[m,h]=(0,o.useState)(``),[g,_]=(0,o.useState)(``),[v,y]=(0,o.useState)(``),[b,x]=(0,o.useState)(null),[S,C]=(0,o.useState)(!1),[w,T]=(0,o.useState)({});async function E(e){e.preventDefault(),x(null),C(!0);try{let e={name:n,transport:u,command:u===`stdio`?f:null,args:u===`stdio`?m.split(` `).filter(Boolean):[],url:u===`stdio`?null:g,authToken:v||void 0},r=await fetch(`/api/mcp-servers`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e)});if(!r.ok){let e=await r.json().catch(()=>({}));throw Error(e.error??`${r.status} ${r.statusText}`)}l(``),p(``),h(``),_(``),y(``),await t.invalidate()}catch(e){x(e.message)}finally{C(!1)}}async function D(e){await fetch(`/api/mcp-servers/${e.id}`,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify({enabled:!e.enabled})}),await t.invalidate()}async function O(e){await fetch(`/api/mcp-servers/${e}`,{method:`DELETE`}),await t.invalidate()}async function k(e){T(t=>({...t,[e]:`connecting…`}));let t=await(await fetch(`/api/mcp-servers/${e}/test`,{method:`POST`})).json().catch(()=>({}));T(n=>({...n,[e]:t.ok?`✓ ${t.tools?.length??0} tools: ${(t.tools??[]).map(e=>e.name).join(`, `)}`:`✗ ${t.error??`failed`}`}))}return(0,s.jsxs)(`main`,{className:`mx-auto max-w-5xl px-6 py-8`,children:[(0,s.jsx)(`h1`,{className:`font-serif text-3xl text-foreground mb-2`,children:`config`}),(0,s.jsx)(a,{active:`mcp`}),(0,s.jsxs)(`p`,{className:`text-muted-foreground text-sm mb-6`,children:[`Model Context Protocol servers. Each enabled server's tools are exposed to every agent, namespaced `,(0,s.jsx)(`code`,{className:`font-mono`,children:`mcp__<server>__<tool>`}),`. stdio servers run as local subprocesses and inherit your configured secrets; http/sse servers connect to a remote endpoint with an optional bearer token.`]}),(0,s.jsxs)(`section`,{className:`rounded-lg border bg-card p-5 mb-6`,children:[(0,s.jsx)(`h3`,{className:`font-serif text-xl mb-3`,children:`Add a server`}),(0,s.jsxs)(`form`,{onSubmit:E,className:`space-y-3`,children:[(0,s.jsxs)(`div`,{className:`flex gap-3 flex-wrap items-end`,children:[(0,s.jsxs)(`label`,{className:`text-sm`,children:[`Name`,(0,s.jsx)(`input`,{type:`text`,value:n,onChange:e=>l(e.target.value),required:!0,placeholder:`playwright`,pattern:`[a-zA-Z0-9_]+`,className:`block mt-1 rounded-md border bg-background px-3 py-2 text-sm w-48`})]}),(0,s.jsxs)(`label`,{className:`text-sm`,children:[`Transport`,(0,s.jsx)(`select`,{value:u,onChange:e=>d(e.target.value),className:`block mt-1 rounded-md border bg-background px-3 py-2 text-sm`,children:c.map(e=>(0,s.jsx)(`option`,{value:e,children:e},e))})]})]}),u===`stdio`?(0,s.jsxs)(`div`,{className:`flex gap-3 flex-wrap items-end`,children:[(0,s.jsxs)(`label`,{className:`text-sm`,children:[`Command`,(0,s.jsx)(`input`,{type:`text`,value:f,onChange:e=>p(e.target.value),placeholder:`npx`,className:`block mt-1 rounded-md border bg-background px-3 py-2 text-sm w-48`})]}),(0,s.jsxs)(`label`,{className:`text-sm flex-1`,children:[`Args (space-separated)`,(0,s.jsx)(`input`,{type:`text`,value:m,onChange:e=>h(e.target.value),placeholder:`-y @modelcontextprotocol/server-filesystem /tmp`,className:`block mt-1 rounded-md border bg-background px-3 py-2 text-sm w-full`})]})]}):(0,s.jsxs)(`div`,{className:`flex gap-3 flex-wrap items-end`,children:[(0,s.jsxs)(`label`,{className:`text-sm flex-1`,children:[`URL`,(0,s.jsx)(`input`,{type:`url`,value:g,onChange:e=>_(e.target.value),placeholder:`https://mcp.example.com/sse`,className:`block mt-1 rounded-md border bg-background px-3 py-2 text-sm w-full`})]}),(0,s.jsxs)(`label`,{className:`text-sm`,children:[`Bearer token (optional)`,(0,s.jsx)(`input`,{type:`password`,value:v,onChange:e=>y(e.target.value),autoComplete:`off`,className:`block mt-1 rounded-md border bg-background px-3 py-2 text-sm w-56`})]})]}),(0,s.jsx)(`button`,{type:`submit`,disabled:S,className:`rounded-md bg-primary px-3 py-2 text-sm font-medium text-primary-foreground disabled:opacity-50`,children:S?`adding…`:`add server`}),b&&(0,s.jsx)(`p`,{className:`text-sm text-rose-700`,children:b})]})]}),(0,s.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,s.jsx)(`thead`,{className:`text-left text-muted-foreground border-b`,children:(0,s.jsxs)(`tr`,{children:[(0,s.jsx)(`th`,{className:`py-2`,children:`name`}),(0,s.jsx)(`th`,{children:`transport`}),(0,s.jsx)(`th`,{children:`target`}),(0,s.jsx)(`th`,{children:`state`}),(0,s.jsx)(`th`,{})]})}),(0,s.jsxs)(`tbody`,{children:[e.length===0&&(0,s.jsx)(`tr`,{children:(0,s.jsx)(`td`,{colSpan:5,className:`py-6 text-center text-muted-foreground italic`,children:`no MCP servers yet — add one above`})}),e.map(e=>(0,s.jsxs)(`tr`,{className:`border-b last:border-0 align-top`,children:[(0,s.jsxs)(`td`,{className:`py-2`,children:[e.name,e.hasAuthToken&&(0,s.jsx)(`span`,{className:`ml-2 text-[0.7em] uppercase tracking-wide text-muted-foreground`,children:`auth`}),w[e.id]&&(0,s.jsx)(`div`,{className:`text-xs text-muted-foreground mt-1 break-all`,children:w[e.id]})]}),(0,s.jsx)(`td`,{children:e.transport}),(0,s.jsx)(`td`,{className:`font-mono text-xs break-all`,children:e.transport===`stdio`?`${e.command??``} ${e.args.join(` `)}`.trim():e.url}),(0,s.jsx)(`td`,{children:e.enabled?(0,s.jsx)(`span`,{className:`text-emerald-700`,children:`enabled`}):(0,s.jsx)(`span`,{className:`text-muted-foreground`,children:`disabled`})}),(0,s.jsxs)(`td`,{className:`space-x-2 whitespace-nowrap`,children:[(0,s.jsx)(`button`,{type:`button`,onClick:()=>k(e.id),className:`rounded-md border px-2 py-1 text-xs hover:bg-accent`,children:`test`}),(0,s.jsx)(`button`,{type:`button`,onClick:()=>D(e),className:`rounded-md border px-2 py-1 text-xs hover:bg-accent`,children:e.enabled?`disable`:`enable`}),(0,s.jsx)(`button`,{type:`button`,onClick:()=>O(e.id),className:`rounded-md border px-2 py-1 text-xs text-rose-700 hover:bg-rose-50`,children:`delete`})]})]},e.id))]})]})]})}export{l as component};
@@ -0,0 +1 @@
1
+ import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{Q as n}from"./preload-helper-CvnapA2_.js";import{i as r}from"./index-iayCEuU2.js";var i=e(n()),a=t();function o(e){return e.split(`/`).map(encodeURIComponent).join(`/`)}function s(){let{group:e,memberCount:t,entries:n}=r.useLoaderData(),s=e.id,[c,l]=(0,i.useState)(()=>n.map(e=>({key:e.key,preview:e.content.slice(0,80)}))),[u,d]=(0,i.useState)(!1),[f,p]=(0,i.useState)(``),[m,h]=(0,i.useState)(null),[g,_]=(0,i.useState)(`none`),[v,y]=(0,i.useState)(``),[b,x]=(0,i.useState)(``),[S,C]=(0,i.useState)(null),w=(0,i.useRef)(null);async function T(e){try{let t=e.trim().length>0?`/api/groups/${encodeURIComponent(s)}/memory/search?q=${encodeURIComponent(e)}&limit=50`:`/api/groups/${encodeURIComponent(s)}/memory`,n=await fetch(t);if(!n.ok){let e=await n.json().catch(()=>null);throw Error(e?.error??n.statusText)}let r=await n.json();e.trim().length>0?(l(r.map(e=>({key:e.key,preview:e.snippet,score:e.score}))),d(!0)):(l(r.map(e=>({key:e.key,preview:e.content.slice(0,80)}))),d(!1))}catch(e){C({msg:`error: ${e.message}`,kind:`error`})}}(0,i.useEffect)(()=>(w.current&&clearTimeout(w.current),w.current=setTimeout(()=>{T(f)},200),()=>{w.current&&clearTimeout(w.current)}),[f]);async function E(e){h(e),_(`edit`),C({msg:`loading…`,kind:`info`});try{let t=await fetch(`/api/groups/${encodeURIComponent(s)}/memory/${o(e)}`);if(!t.ok){let e=await t.json().catch(()=>null);throw Error(e?.error??t.statusText)}let n=await t.json();y(n.key),x(n.content??``),C({msg:`loaded ${n.key}`,kind:`info`})}catch(e){C({msg:`error: ${e.message}`,kind:`error`})}}function D(){h(null),_(`new`),y(``),x(``),C({msg:`new entry — type a key and content, then save`,kind:`info`})}async function O(){let e=v.trim();if(!e){C({msg:`key is required`,kind:`error`});return}try{let t=await fetch(`/api/groups/${encodeURIComponent(s)}/memory/${o(e)}`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify({content:b})});if(!t.ok){let e=await t.json().catch(()=>null);throw Error(e?.error??t.statusText)}h(e),_(`edit`),C({msg:`saved`,kind:`info`}),await T(f)}catch(e){C({msg:`error: ${e.message}`,kind:`error`})}}async function k(){if(m&&confirm(`delete ${m}?`))try{let e=await fetch(`/api/groups/${encodeURIComponent(s)}/memory/${o(m)}`,{method:`DELETE`});if(!e.ok&&e.status!==204){let t=await e.json().catch(()=>null);throw Error(t?.error??e.statusText)}h(null),_(`none`),y(``),x(``),C({msg:`deleted`,kind:`info`}),await T(f)}catch(e){C({msg:`error: ${e.message}`,kind:`error`})}}let A=g!==`none`&&v.trim().length>0,j=g===`edit`&&m!==null;return(0,a.jsxs)(`main`,{className:`mx-auto max-w-5xl px-6 py-8`,children:[(0,a.jsxs)(`header`,{className:`mb-6`,children:[(0,a.jsxs)(`h1`,{className:`font-serif text-3xl text-foreground`,children:[e.name,` `,(0,a.jsx)(`span`,{className:`text-muted-foreground text-base`,children:`/ shared memory`})]}),(0,a.jsxs)(`p`,{className:`text-muted-foreground text-sm mt-1`,children:[`BM25-indexed markdown notes shared by every agent in`,` `,(0,a.jsx)(`a`,{href:`/groups/${encodeURIComponent(e.id)}`,className:`font-mono underline`,children:e.id}),` `,`(`,t,` member`,t===1?``:`s`,`). Anything written here is visible to every member; per-agent notes belong in the agent's own`,` `,(0,a.jsx)(`code`,{className:`font-mono`,children:`IDENTITY.md`}),` via `,(0,a.jsx)(`code`,{children:`home_write`}),`.`]})]}),(0,a.jsxs)(`div`,{className:`grid grid-cols-1 gap-6 lg:grid-cols-[320px_1fr]`,children:[(0,a.jsxs)(`div`,{children:[(0,a.jsxs)(`div`,{className:`overflow-hidden rounded-[16px] border border-frost bg-snow`,children:[(0,a.jsx)(`div`,{className:`border-b border-frost p-2`,children:(0,a.jsx)(`input`,{type:`text`,placeholder:`search (BM25)...`,autoComplete:`off`,value:f,onChange:e=>p(e.target.value)})}),(0,a.jsx)(`div`,{className:`max-h-[520px] overflow-y-auto`,children:c.length===0?(0,a.jsx)(`div`,{className:`p-8 text-center text-mocha-light`,children:`no entries`}):c.map(e=>(0,a.jsxs)(`button`,{type:`button`,onClick:()=>E(e.key),className:`unstyled block w-full cursor-pointer border-b border-frost/50 px-3.5 py-2 text-left font-mono text-[0.84em] transition-colors last:border-b-0 hover:bg-sapphire-glow ${e.key===m?`bg-sapphire-glow font-medium text-sapphire-deep`:``}`,children:[u&&e.score!==void 0&&(0,a.jsx)(`span`,{className:`float-right text-[0.75em] text-sapphire`,children:e.score.toFixed(2)}),e.key,e.preview&&(0,a.jsx)(`span`,{className:`mt-1 block text-[0.9em] font-normal text-mocha-light`,children:e.preview})]},e.key))})]}),(0,a.jsx)(`button`,{type:`button`,className:`ghost-btn mt-3 w-full`,onClick:D,children:`+ new entry`})]}),(0,a.jsxs)(`div`,{children:[(0,a.jsx)(`div`,{className:`mb-3 flex items-center gap-2`,children:(0,a.jsx)(`input`,{type:`text`,placeholder:`key (e.g. prefs/hiking.md)`,value:v,onChange:e=>y(e.target.value),disabled:g!==`new`,className:`flex-1 font-mono`})}),(0,a.jsx)(`textarea`,{placeholder:`select an entry on the left, or create a new one.`,value:b,onChange:e=>x(e.target.value),className:`min-h-[360px] w-full font-mono text-[0.9em] leading-[1.55]`}),(0,a.jsxs)(`div`,{className:`mt-3 flex gap-2`,children:[(0,a.jsx)(`button`,{type:`button`,className:`btn-primary`,onClick:O,disabled:!A,children:`save`}),(0,a.jsx)(`button`,{type:`button`,className:`ghost-btn`,onClick:k,disabled:!j,children:`delete`})]}),S&&(0,a.jsx)(`p`,{className:`mt-2 text-[0.9em] ${S.kind===`error`?`text-[#9B3D3D]`:`text-mocha-light`}`,children:S.msg})]})]})]})}export{s as component};
@@ -0,0 +1 @@
1
+ import{n as e,r as t,t as n}from"./jsx-runtime-DGeXAQPT.js";var r=e((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},T=Object.prototype.hasOwnProperty;function E(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function ee(e,t){return E(e.type,t,e.props)}function D(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function O(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var te=/\/+/g;function ne(e,t){return typeof e==`object`&&e&&e.key!=null?O(``+e.key):t.toString(36)}function re(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function k(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,k(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+ne(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(te,`$&/`)+`/`),k(o,r,i,``,function(e){return e})):o!=null&&(D(o)&&(o=ee(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(te,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u<e.length;u++)a=e[u],s=l+ne(a,u),c+=k(a,r,i,s,o);else if(u=m(e),typeof u==`function`)for(e=u.call(e),u=0;!(a=e.next()).done;)a=a.value,s=l+ne(a,u++),c+=k(a,r,i,s,o);else if(s===`object`){if(typeof e.then==`function`)return k(re(e),r,i,a,o);throw r=String(e),Error(`Objects are not valid as a React child (found: `+(r===`[object Object]`?`object with keys {`+Object.keys(e).join(`, `)+`}`:r)+`). If you meant to render a collection of children, use an array instead.`)}return c}function A(e,t,n){if(e==null)return e;var r=[],i=0;return k(e,r,``,``,function(e){return t.call(n,e,i++)}),r}function j(e){if(e._status===-1){var t=e._result;t=t(),t.then(function(t){(e._status===0||e._status===-1)&&(e._status=1,e._result=t)},function(t){(e._status===0||e._status===-1)&&(e._status=2,e._result=t)}),e._status===-1&&(e._status=0,e._result=t)}if(e._status===1)return e._result.default;throw e._result}var M=typeof reportError==`function`?reportError:function(e){if(typeof window==`object`&&typeof window.ErrorEvent==`function`){var t=new window.ErrorEvent(`error`,{bubbles:!0,cancelable:!0,message:typeof e==`object`&&e&&typeof e.message==`string`?String(e.message):String(e),error:e});if(!window.dispatchEvent(t))return}else if(typeof process==`object`&&typeof process.emit==`function`){process.emit(`uncaughtException`,e);return}console.error(e)},ie={map:A,forEach:function(e,t,n){A(e,function(){t.apply(this,arguments)},n)},count:function(e){var t=0;return A(e,function(){t++}),t},toArray:function(e){return A(e,function(e){return e})||[]},only:function(e){if(!D(e))throw Error(`React.Children.only expected to receive a single React element child.`);return e}};e.Activity=f,e.Children=ie,e.Component=v,e.Fragment=r,e.Profiler=a,e.PureComponent=b,e.StrictMode=i,e.Suspense=l,e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=w,e.__COMPILER_RUNTIME={__proto__:null,c:function(e){return w.H.useMemoCache(e)}},e.cache=function(e){return function(){return e.apply(null,arguments)}},e.cacheSignal=function(){return null},e.cloneElement=function(e,t,n){if(e==null)throw Error(`The argument must be a React element, but you passed `+e+`.`);var r=g({},e.props),i=e.key;if(t!=null)for(a in t.key!==void 0&&(i=``+t.key),t)!T.call(t,a)||a===`key`||a===`__self`||a===`__source`||a===`ref`&&t.ref===void 0||(r[a]=t[a]);var a=arguments.length-2;if(a===1)r.children=n;else if(1<a){for(var o=Array(a),s=0;s<a;s++)o[s]=arguments[s+2];r.children=o}return E(e.type,i,r)},e.createContext=function(e){return e={$$typeof:s,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null},e.Provider=e,e.Consumer={$$typeof:o,_context:e},e},e.createElement=function(e,t,n){var r,i={},a=null;if(t!=null)for(r in t.key!==void 0&&(a=``+t.key),t)T.call(t,r)&&r!==`key`&&r!==`__self`&&r!==`__source`&&(i[r]=t[r]);var o=arguments.length-2;if(o===1)i.children=n;else if(1<o){for(var s=Array(o),c=0;c<o;c++)s[c]=arguments[c+2];i.children=s}if(e&&e.defaultProps)for(r in o=e.defaultProps,o)i[r]===void 0&&(i[r]=o[r]);return E(e,a,i)},e.createRef=function(){return{current:null}},e.forwardRef=function(e){return{$$typeof:c,render:e}},e.isValidElement=D,e.lazy=function(e){return{$$typeof:d,_payload:{_status:-1,_result:e},_init:j}},e.memo=function(e,t){return{$$typeof:u,type:e,compare:t===void 0?null:t}},e.startTransition=function(e){var t=w.T,n={};w.T=n;try{var r=e(),i=w.S;i!==null&&i(n,r),typeof r==`object`&&r&&typeof r.then==`function`&&r.then(C,M)}catch(e){M(e)}finally{t!==null&&n.types!==null&&(t.types=n.types),w.T=t}},e.unstable_useCacheRefresh=function(){return w.H.useCacheRefresh()},e.use=function(e){return w.H.use(e)},e.useActionState=function(e,t,n){return w.H.useActionState(e,t,n)},e.useCallback=function(e,t){return w.H.useCallback(e,t)},e.useContext=function(e){return w.H.useContext(e)},e.useDebugValue=function(){},e.useDeferredValue=function(e,t){return w.H.useDeferredValue(e,t)},e.useEffect=function(e,t){return w.H.useEffect(e,t)},e.useEffectEvent=function(e){return w.H.useEffectEvent(e)},e.useId=function(){return w.H.useId()},e.useImperativeHandle=function(e,t,n){return w.H.useImperativeHandle(e,t,n)},e.useInsertionEffect=function(e,t){return w.H.useInsertionEffect(e,t)},e.useLayoutEffect=function(e,t){return w.H.useLayoutEffect(e,t)},e.useMemo=function(e,t){return w.H.useMemo(e,t)},e.useOptimistic=function(e,t){return w.H.useOptimistic(e,t)},e.useReducer=function(e,t,n){return w.H.useReducer(e,t,n)},e.useRef=function(e){return w.H.useRef(e)},e.useState=function(e){return w.H.useState(e)},e.useSyncExternalStore=function(e,t,n){return w.H.useSyncExternalStore(e,t,n)},e.useTransition=function(){return w.H.useTransition()},e.version=`19.2.7`})),i=e(((e,t)=>{t.exports=r()})),a=e((e=>{var t=i();function n(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 r(){}var a={d:{f:r,r:function(){throw Error(n(522))},D:r,C:r,L:r,m:r,X:r,S:r,M:r},p:0,findDOMNode:null},o=Symbol.for(`react.portal`);function s(e,t,n){var r=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:o,key:r==null?null:``+r,children:e,containerInfo:t,implementation:n}}var c=t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function l(e,t){if(e===`font`)return``;if(typeof t==`string`)return t===`use-credentials`?t:``}e.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=a,e.createPortal=function(e,t){var r=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!t||t.nodeType!==1&&t.nodeType!==9&&t.nodeType!==11)throw Error(n(299));return s(e,t,null,r)},e.flushSync=function(e){var t=c.T,n=a.p;try{if(c.T=null,a.p=2,e)return e()}finally{c.T=t,a.p=n,a.d.f()}},e.preconnect=function(e,t){typeof e==`string`&&(t?(t=t.crossOrigin,t=typeof t==`string`?t===`use-credentials`?t:``:void 0):t=null,a.d.C(e,t))},e.prefetchDNS=function(e){typeof e==`string`&&a.d.D(e)},e.preinit=function(e,t){if(typeof e==`string`&&t&&typeof t.as==`string`){var n=t.as,r=l(n,t.crossOrigin),i=typeof t.integrity==`string`?t.integrity:void 0,o=typeof t.fetchPriority==`string`?t.fetchPriority:void 0;n===`style`?a.d.S(e,typeof t.precedence==`string`?t.precedence:void 0,{crossOrigin:r,integrity:i,fetchPriority:o}):n===`script`&&a.d.X(e,{crossOrigin:r,integrity:i,fetchPriority:o,nonce:typeof t.nonce==`string`?t.nonce:void 0})}},e.preinitModule=function(e,t){if(typeof e==`string`)if(typeof t==`object`&&t){if(t.as==null||t.as===`script`){var n=l(t.as,t.crossOrigin);a.d.M(e,{crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0})}}else t??a.d.M(e)},e.preload=function(e,t){if(typeof e==`string`&&typeof t==`object`&&t&&typeof t.as==`string`){var n=t.as,r=l(n,t.crossOrigin);a.d.L(e,n,{crossOrigin:r,integrity:typeof t.integrity==`string`?t.integrity:void 0,nonce:typeof t.nonce==`string`?t.nonce:void 0,type:typeof t.type==`string`?t.type:void 0,fetchPriority:typeof t.fetchPriority==`string`?t.fetchPriority:void 0,referrerPolicy:typeof t.referrerPolicy==`string`?t.referrerPolicy:void 0,imageSrcSet:typeof t.imageSrcSet==`string`?t.imageSrcSet:void 0,imageSizes:typeof t.imageSizes==`string`?t.imageSizes:void 0,media:typeof t.media==`string`?t.media:void 0})}},e.preloadModule=function(e,t){if(typeof e==`string`)if(t){var n=l(t.as,t.crossOrigin);a.d.m(e,{as:typeof t.as==`string`&&t.as!==`script`?t.as:void 0,crossOrigin:n,integrity:typeof t.integrity==`string`?t.integrity:void 0})}else a.d.m(e)},e.requestFormReset=function(e){a.d.r(e)},e.unstable_batchedUpdates=function(e,t){return e(t)},e.useFormState=function(e,t,n){return c.H.useFormState(e,t,n)},e.useFormStatus=function(){return c.H.useHostTransitionStatus()},e.version=`19.2.7`})),o=e(((e,t)=>{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=a()}));function s(e){return e[e.length-1]}function c(e){return typeof e==`function`}function l(e,t){return c(e)?e(t):e}var u=Object.prototype.hasOwnProperty,d=Object.prototype.propertyIsEnumerable;function f(e){for(let t in e)if(u.call(e,t))return!0;return!1}var p=()=>Object.create(null),m=(e,t)=>h(e,t,p);function h(e,t,n=()=>({}),r=0){if(e===t)return e;if(r>500)return t;let i=t,a=y(e)&&y(i);if(!a&&!(_(e)&&_(i)))return i;let o=a?e:g(e);if(!o)return i;let s=a?i:g(i);if(!s)return i;let c=o.length,l=s.length,d=a?Array(l):n(),f=0;for(let t=0;t<l;t++){let o=a?t:s[t],l=e[o],p=i[o];if(l===p){d[o]=l,(a?t<c:u.call(e,o))&&f++;continue}if(l===null||p===null||typeof l!=`object`||typeof p!=`object`){d[o]=p;continue}let m=h(l,p,n,r+1);d[o]=m,m===l&&f++}return c===l&&f===c?e:d}function g(e){let t=Object.getOwnPropertyNames(e);for(let n of t)if(!d.call(e,n))return!1;let n=Object.getOwnPropertySymbols(e);if(n.length===0)return t;let r=t;for(let t of n){if(!d.call(e,t))return!1;r.push(t)}return r}function _(e){if(!v(e))return!1;let t=e.constructor;if(t===void 0)return!0;let n=t.prototype;return!(!v(n)||!n.hasOwnProperty(`isPrototypeOf`))}function v(e){return Object.prototype.toString.call(e)===`[object Object]`}function y(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function b(e,t,n){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return!1;for(let r=0,i=e.length;r<i;r++)if(!b(e[r],t[r],n))return!1;return!0}if(_(e)&&_(t)){let r=n?.ignoreUndefined??!0;if(n?.partial){for(let i in t)if((!r||t[i]!==void 0)&&!b(e[i],t[i],n))return!1;return!0}let i=0;if(!r)i=Object.keys(e).length;else for(let t in e)e[t]!==void 0&&i++;let a=0;for(let o in t)if((!r||t[o]!==void 0)&&(a++,a>i||!b(e[o],t[o],n)))return!1;return i===a}return!1}function x(e){let t,n,r=new Promise((e,r)=>{t=e,n=r});return r.status=`pending`,r.resolve=n=>{r.status=`resolved`,r.value=n,t(n),e?.(n)},r.reject=e=>{r.status=`rejected`,n(e)},r}function S(e){return typeof e?.message==`string`?e.message.startsWith(`Failed to fetch dynamically imported module`)||e.message.startsWith(`error loading dynamically imported module`)||e.message.startsWith(`Importing a module script failed`):!1}function C(e){return!!(e&&typeof e==`object`&&typeof e.then==`function`)}function w(e){return e.replace(/[\x00-\x1f\x7f]/g,``)}function T(e){let t;try{t=decodeURI(e)}catch{t=e.replaceAll(/%[0-9A-F]{2}/gi,e=>{try{return decodeURI(e)}catch{return e}})}return w(t)}var E=[`http:`,`https:`,`mailto:`,`tel:`];function ee(e,t){if(!e)return!1;try{let n=new URL(e);return!t.has(n.protocol)}catch{return!1}}var D={"&":`\\u0026`,">":`\\u003e`,"<":`\\u003c`,"\u2028":`\\u2028`,"\u2029":`\\u2029`},O=/[&><\u2028\u2029]/g;function te(e){return e.replace(O,e=>D[e])}function ne(e){if(!e||!/[%\\\x00-\x1f\x7f]/.test(e)&&!e.startsWith(`//`))return{path:e,handledProtocolRelativeURL:!1};let t=/%25|%5C/gi,n=0,r=``,i;for(;(i=t.exec(e))!==null;)r+=T(e.slice(n,i.index))+i[0],n=t.lastIndex;r+=T(n?e.slice(n):e);let a=!1;return r.startsWith(`//`)&&(a=!0,r=`/`+r.replace(/^\/+/,``)),{path:r,handledProtocolRelativeURL:a}}function re(e){return/\s|[^\u0000-\u007F]/.test(e)?e.replace(/\s|[^\u0000-\u007F]/gu,encodeURIComponent):e}function k(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function A(){throw Error(`Invariant failed`)}function j(e){let t=new Map,n,r,i=e=>{e.next&&(e.prev?(e.prev.next=e.next,e.next.prev=e.prev,e.next=void 0,r&&(r.next=e,e.prev=r)):(e.next.prev=void 0,n=e.next,e.next=void 0,r&&(e.prev=r,r.next=e)),r=e)};return{get(e){let n=t.get(e);if(n)return i(n),n.value},set(a,o){if(t.size>=e&&n){let e=n;t.delete(e.key),e.next&&(n=e.next,e.next.prev=void 0),e===r&&(r=void 0)}let s=t.get(a);if(s)s.value=o,i(s);else{let e={key:a,value:o,prev:r};r&&(r.next=e),r=e,n||=e,t.set(a,e)}},clear(){t.clear(),n=void 0,r=void 0}}}var M=4,ie=5;function ae(e){let t=e.indexOf(`{`);if(t===-1)return null;let n=e.indexOf(`}`,t);return n===-1||t+1>=e.length?null:[t,n]}function oe(e,t,n=new Uint16Array(6)){let r=e.indexOf(`/`,t),i=r===-1?e.length:r,a=e.substring(t,i);if(!a||!a.includes(`$`))return n[0]=0,n[1]=t,n[2]=t,n[3]=i,n[4]=i,n[5]=i,n;if(a===`$`){let r=e.length;return n[0]=2,n[1]=t,n[2]=t,n[3]=r,n[4]=r,n[5]=r,n}if(a.charCodeAt(0)===36)return n[0]=1,n[1]=t,n[2]=t+1,n[3]=i,n[4]=i,n[5]=i,n;let o=ae(a);if(o){let[r,s]=o,c=a.charCodeAt(r+1);if(c===45){if(r+2<a.length&&a.charCodeAt(r+2)===36){let e=r+3,a=s;if(e<a)return n[0]=3,n[1]=t+r,n[2]=t+e,n[3]=t+a,n[4]=t+s+1,n[5]=i,n}}else if(c===36){let a=r+1,o=r+2;return o===s?(n[0]=2,n[1]=t+r,n[2]=t+a,n[3]=t+o,n[4]=t+s+1,n[5]=e.length,n):(n[0]=1,n[1]=t+r,n[2]=t+o,n[3]=t+s,n[4]=t+s+1,n[5]=i,n)}}return n[0]=0,n[1]=t,n[2]=t,n[3]=i,n[4]=i,n[5]=i,n}function N(e,t,n,r,i,a,o){o?.(n);let s=r;{let r=n.fullPath??n.from,o=r.length,c=n.options?.caseSensitive??e,l=n.options?.params?.parse??n.options?.parseParams;for(;s<o;){let e=oe(r,s,t),o,u=s,d=e[5];switch(s=d+1,a++,e[0]){case 0:{let t=r.substring(e[2],e[3]);if(c){let e=i.static?.get(t);if(e)o=e;else{i.static??=new Map;let e=I(n.fullPath??n.from);e.parent=i,e.depth=a,o=e,i.static.set(t,e)}}else{let e=t.toLowerCase(),r=i.staticInsensitive?.get(e);if(r)o=r;else{i.staticInsensitive??=new Map;let t=I(n.fullPath??n.from);t.parent=i,t.depth=a,o=t,i.staticInsensitive.set(e,t)}}break}case 1:{let t=r.substring(u,e[1]),s=r.substring(e[4],d),f=c&&!!(t||s),p=t?f?t:t.toLowerCase():void 0,m=s?f?s:s.toLowerCase():void 0,h=!l&&i.dynamic?.find(e=>!e.parse&&e.caseSensitive===f&&e.prefix===p&&e.suffix===m);if(h)o=h;else{let e=L(1,n.fullPath??n.from,f,p,m);o=e,e.depth=a,e.parent=i,i.dynamic??=[],i.dynamic.push(e)}break}case 3:{let t=r.substring(u,e[1]),s=r.substring(e[4],d),f=c&&!!(t||s),p=t?f?t:t.toLowerCase():void 0,m=s?f?s:s.toLowerCase():void 0,h=!l&&i.optional?.find(e=>!e.parse&&e.caseSensitive===f&&e.prefix===p&&e.suffix===m);if(h)o=h;else{let e=L(3,n.fullPath??n.from,f,p,m);o=e,e.parent=i,e.depth=a,i.optional??=[],i.optional.push(e)}break}case 2:{let t=r.substring(u,e[1]),s=r.substring(e[4],d),l=c&&!!(t||s),f=t?l?t:t.toLowerCase():void 0,p=s?l?s:s.toLowerCase():void 0,m=L(2,n.fullPath??n.from,l,f,p);o=m,m.parent=i,m.depth=a,i.wildcard??=[],i.wildcard.push(m)}}i=o}if(l&&n.children&&!n.isRoot&&n.id&&n.id.charCodeAt(n.id.lastIndexOf(`/`)+1)===95){let e=I(n.fullPath??n.from);e.kind=ie,e.parent=i,a++,e.depth=a,i.pathless??=[],i.pathless.push(e),i=e}let u=(n.path||!n.children)&&!n.isRoot;if(u&&r.endsWith(`/`)){let e=I(n.fullPath??n.from);e.kind=M,e.parent=i,a++,e.depth=a,i.index=e,i=e}i.parse=l??null,i.priority=n.options?.params?.priority??0,u&&!i.route&&(i.route=n,i.fullPath=n.fullPath??n.from)}if(n.children)for(let r of n.children)N(e,t,r,s,i,a,o)}function P(e,t){if(e.parse&&!t.parse)return-1;if(!e.parse&&t.parse)return 1;if(e.parse&&t.parse&&(e.priority||t.priority))return t.priority-e.priority;if(e.prefix&&t.prefix&&e.prefix!==t.prefix){if(e.prefix.startsWith(t.prefix))return-1;if(t.prefix.startsWith(e.prefix))return 1}if(e.suffix&&t.suffix&&e.suffix!==t.suffix){if(e.suffix.endsWith(t.suffix))return-1;if(t.suffix.endsWith(e.suffix))return 1}return e.prefix&&!t.prefix?-1:!e.prefix&&t.prefix?1:e.suffix&&!t.suffix?-1:!e.suffix&&t.suffix?1:e.caseSensitive&&!t.caseSensitive?-1:!e.caseSensitive&&t.caseSensitive?1:0}function F(e){if(e.pathless)for(let t of e.pathless)F(t);if(e.static)for(let t of e.static.values())F(t);if(e.staticInsensitive)for(let t of e.staticInsensitive.values())F(t);if(e.dynamic?.length){e.dynamic.sort(P);for(let t of e.dynamic)F(t)}if(e.optional?.length){e.optional.sort(P);for(let t of e.optional)F(t)}if(e.wildcard?.length){e.wildcard.sort(P);for(let t of e.wildcard)F(t)}}function I(e){return{kind:0,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:e,parent:null,parse:null,priority:0}}function L(e,t,n,r,i){return{kind:e,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:t,parent:null,parse:null,priority:0,caseSensitive:n,prefix:r,suffix:i}}function se(e,t){let n=I(`/`),r=new Uint16Array(6);for(let t of e)N(!1,r,t,1,n,0);F(n),t.masksTree=n,t.flatCache=j(1e3)}function ce(e,t){e||=`/`;let n=t.flatCache.get(e);if(n)return n;let r=V(e,t.masksTree);return t.flatCache.set(e,r),r}function R(e,t,n,r,i){e||=`/`,r||=`/`;let a=t?`case\0${e}`:e,o=i.singleCache.get(a);return o||(o=I(`/`),N(t,new Uint16Array(6),{from:e},1,o,0),i.singleCache.set(a,o)),V(r,o,n)}function z(e,t,n=!1){let r=n?e:`nofuzz\0${e}`,i=t.matchCache.get(r);if(i!==void 0)return i;e||=`/`;let a;try{a=V(e,t.segmentTree,n)}catch(e){if(e instanceof URIError)a=null;else throw e}return a&&(a.branch=H(a.route)),t.matchCache.set(r,a),a}function le(e){return e===`/`?e:e.replace(/\/{1,}$/,``)}function B(e,t=!1,n){let r=I(e.fullPath),i=new Uint16Array(6),a={},o={},s=0;return N(t,i,e,1,r,0,e=>{if(n?.(e,s),e.id in a&&A(),a[e.id]=e,s!==0&&e.path){let t=le(e.fullPath);(!o[t]||e.fullPath.endsWith(`/`))&&(o[t]=e)}s++}),F(r),{processedTree:{segmentTree:r,singleCache:j(1e3),matchCache:j(1e3),flatCache:null,masksTree:null},routesById:a,routesByPath:o}}function V(e,t,n=!1){let r=e.split(`/`),i=fe(e,r,t,n);if(!i)return null;let[a]=ue(e,r,i);return{route:i.node.route,rawParams:a}}function ue(e,t,n){let r=de(n.node),i=null,a=Object.create(null),o=n.extract?.part??0,s=n.extract?.node??0,c=n.extract?.path??0,l=n.extract?.segment??0;for(;s<r.length;o++,s++,c++,l++){let u=r[s];if(u.kind===M)break;if(u.kind===ie){l--,o--,c--;continue}let d=t[o],f=c;if(d&&(c+=d.length),u.kind===1){i??=n.node.fullPath.split(`/`);let e=i[l],t=u.prefix?.length??0;if(e.charCodeAt(t)===123){let n=u.suffix?.length??0,r=e.substring(t+2,e.length-n-1),i=d.substring(t,d.length-n);a[r]=decodeURIComponent(i)}else{let t=e.substring(1);a[t]=decodeURIComponent(d)}}else if(u.kind===3){if(n.skipped&1<<s){o--,c=f-1;continue}i??=n.node.fullPath.split(`/`);let e=i[l],t=u.prefix?.length??0,r=u.suffix?.length??0,p=e.substring(t+3,e.length-r-1),m=u.suffix||u.prefix?d.substring(t,d.length-r):d;m&&(a[p]=decodeURIComponent(m))}else if(u.kind===2){let t=u,n=e.substring(f+(t.prefix?.length??0),e.length-(t.suffix?.length??0)),r=decodeURIComponent(n);a[`*`]=r,a._splat=r;break}}return n.rawParams&&Object.assign(a,n.rawParams),[a,{part:o,node:s,path:c,segment:l}]}function H(e){let t=[e];for(;e.parentRoute;)e=e.parentRoute,t.push(e);return t.reverse(),t}function de(e){let t=Array(e.depth+1);do t[e.depth]=e,e=e.parent;while(e);return t}function fe(e,t,n,r){if(e===`/`&&n.index)return{node:n.index,skipped:0};let i=!s(t),a=i&&e!==`/`,o=t.length-+!!i,c=[{node:n,index:1,skipped:0,depth:1,statics:0,dynamics:0,optionals:0}],l=null,u=null;for(;c.length;){let n=c.pop(),{node:i,index:s,skipped:d,depth:f,statics:p,dynamics:m,optionals:h}=n,{extract:g,rawParams:_}=n;if(i.kind===2&&i.route&&!K(u,n))continue;if(i.parse){if(!G(e,t,n))continue;_=n.rawParams,g=n.extract}r&&i.route&&i.kind!==M&&K(l,n)&&(l=n);let v=s===o;if(v&&(i.route&&(!a||i.kind===M||i.kind===2)&&K(u,n)&&(u=n),!i.optional&&!i.wildcard&&!i.index&&!i.pathless))continue;let y=v?void 0:t[s],b;if(v&&i.index){let n={node:i.index,index:s,skipped:d,depth:f+1,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_},r=!0;if(i.index.parse&&(G(e,t,n)||(r=!1)),r){if(!m&&!h&&!d&&W(p,o))return n;K(u,n)&&(u=n)}}if(i.wildcard)for(let e=i.wildcard.length-1;e>=0;e--){let n=i.wildcard[e],{prefix:r,suffix:a}=n;if(!(r&&(v||!(n.caseSensitive?y:b??=y.toLowerCase()).startsWith(r)))){if(a){if(v)continue;let e=t.slice(s).join(`/`).slice(-a.length);if((n.caseSensitive?e:e.toLowerCase())!==a)continue}c.push({node:n,index:o,skipped:d,depth:f+1,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}}if(i.optional){let e=d|1<<f,t=f+1;for(let n=i.optional.length-1;n>=0;n--){let r=i.optional[n];c.push({node:r,index:s,skipped:e,depth:t,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}if(!v)for(let e=i.optional.length-1;e>=0;e--){let n=i.optional[e],{prefix:r,suffix:a}=n;if(r||a){let e=n.caseSensitive?y:b??=y.toLowerCase();if(r&&!e.startsWith(r)||a&&!e.endsWith(a))continue}c.push({node:n,index:s+1,skipped:d,depth:t,statics:p,dynamics:m,optionals:h+U(o,s),extract:g,rawParams:_})}}if(!v&&i.dynamic&&y)for(let e=i.dynamic.length-1;e>=0;e--){let t=i.dynamic[e],{prefix:n,suffix:r}=t;if(n||r){let e=t.caseSensitive?y:b??=y.toLowerCase();if(n&&!e.startsWith(n)||r&&!e.endsWith(r))continue}c.push({node:t,index:s+1,skipped:d,depth:f+1,statics:p,dynamics:m+U(o,s),optionals:h,extract:g,rawParams:_})}if(!v&&i.staticInsensitive){let e=i.staticInsensitive.get(b??=y.toLowerCase());e&&c.push({node:e,index:s+1,skipped:d,depth:f+1,statics:p+U(o,s),dynamics:m,optionals:h,extract:g,rawParams:_})}if(!v&&i.static){let e=i.static.get(y);e&&c.push({node:e,index:s+1,skipped:d,depth:f+1,statics:p+U(o,s),dynamics:m,optionals:h,extract:g,rawParams:_})}if(i.pathless){let e=f+1;for(let t=i.pathless.length-1;t>=0;t--){let n=i.pathless[t];c.push({node:n,index:s,skipped:d,depth:e,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}}}if(u)return u;if(r&&l){let n=l.index;for(let e=0;e<l.index;e++)n+=t[e].length;let r=n===e.length?`/`:e.slice(n);return l.rawParams??=Object.create(null),l.rawParams[`**`]=decodeURIComponent(r),l}return null}function U(e,t){return 2**(e-t-1)}function W(e,t){return e===2**(t-1)-1}function G(e,t,n){let r,i;try{[r,i]=ue(e,t,n)}catch{return null}if(n.rawParams=r,n.extract=i,!n.node.parse)return!0;try{if(n.node.parse(r)===!1)return null}catch{}return!0}function K(e,t){return e?t.statics>e.statics||t.statics===e.statics&&(t.dynamics>e.dynamics||t.dynamics===e.dynamics&&(t.optionals>e.optionals||t.optionals===e.optionals&&((t.node.kind===M)>(e.node.kind===M)||t.node.kind===M==(e.node.kind===M)&&t.depth>e.depth))):!0}function q(e){return J(e.filter(e=>e!==void 0).join(`/`))}function J(e){return e.replace(/\/{2,}/g,`/`)}function pe(e){return e===`/`?e:e.replace(/^\/{1,}/,``)}function Y(e){let t=e.length;return t>1&&e[t-1]===`/`?e.replace(/\/{1,}$/,``):e}function me(e){return Y(pe(e))}function he(e,t){return e?.endsWith(`/`)&&e!==`/`&&e!==`${t}/`?e.slice(0,-1):e}function ge(e,t,n){return he(e,n)===he(t,n)}function _e({base:e,to:t,trailingSlash:n=`never`,cache:r}){let i=t.startsWith(`/`),a=!i&&t===`.`,o;if(r){o=i?t:a?e:e+`\0`+t;let n=r.get(o);if(n)return n}let c;if(a)c=e.split(`/`);else if(i)c=t.split(`/`);else{for(c=e.split(`/`);c.length>1&&s(c)===``;)c.pop();let n=t.split(`/`);for(let e=0,t=n.length;e<t;e++){let r=n[e];r===``?e?e===t-1&&c.push(r):c=[r]:r===`..`?c.pop():r===`.`||c.push(r)}}c.length>1&&(s(c)===``?n===`never`&&c.pop():n===`always`&&c.push(``));let l=J(c.join(`/`))||`/`;return o&&r&&r.set(o,l),l}function ve(e){let t=new Map(e.map(e=>[encodeURIComponent(e),e])),n=Array.from(t.keys()).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)).join(`|`),r=new RegExp(n,`g`);return e=>e.replace(r,e=>t.get(e)??e)}function ye(e,t,n){let r=t[e];return typeof r==`string`?e===`_splat`?/^[a-zA-Z0-9\-._~!/]*$/.test(r)?r:r.split(`/`).map(e=>xe(e,n)).join(`/`):xe(r,n):r}function be({path:e,params:t,decoder:n,...r}){let i=!1,a=Object.create(null);if(!e||e===`/`)return{interpolatedPath:`/`,usedParams:a,isMissingParams:i};if(!e.includes(`$`))return{interpolatedPath:e,usedParams:a,isMissingParams:i};let o=e.length,s=0,c,l=``;for(;s<o;){let r=s;c=oe(e,r,c);let o=c[5];if(s=o+1,r===o)continue;let u=c[0];if(u===0){l+=`/`+e.substring(r,o);continue}if(u===2){let s=t._splat;a._splat=s,a[`*`]=s;let u=e.substring(r,c[1]),d=e.substring(c[4],o);if(!s){i=!0,(u||d)&&(l+=`/`+u+d);continue}let f=ye(`_splat`,t,n);l+=`/`+u+f+d;continue}if(u===1){let s=e.substring(c[2],c[3]);!i&&!(s in t)&&(i=!0),a[s]=t[s];let u=e.substring(r,c[1]),d=e.substring(c[4],o),f=ye(s,t,n)??`undefined`;l+=`/`+u+f+d;continue}if(u===3){let i=e.substring(c[2],c[3]),s=t[i];if(s==null)continue;a[i]=s;let u=e.substring(r,c[1]),d=e.substring(c[4],o),f=ye(i,t,n)??``;l+=`/`+u+f+d;continue}}return e.endsWith(`/`)&&(l+=`/`),{usedParams:a,interpolatedPath:l||`/`,isMissingParams:i}}function xe(e,t){let n=encodeURIComponent(e);return t?.(n)??n}function Se(e){return e?.isNotFound===!0}var Ce=`__root__`;function we(e){if(e.statusCode=e.statusCode||e.code||307,!e._builtLocation&&!e.reloadDocument&&typeof e.href==`string`)try{new URL(e.href),e.reloadDocument=!0}catch{}let t=new Headers(e.headers);e.href&&t.get(`Location`)===null&&t.set(`Location`,e.href);let n=new Response(null,{status:e.statusCode,headers:t});if(n.options=e,e.throw)throw n;return n}function Te(e){return e instanceof Response&&!!e.options}function Ee(e){if(typeof e==`object`&&e&&e.isSerializedRedirect)return we(e)}var De=`Error preloading route! ☝️`,Oe=class{get to(){return this._to}get id(){return this._id}get path(){return this._path}get fullPath(){return this._fullPath}constructor(e){if(this.init=e=>{this.originalIndex=e.originalIndex;let t=this.options,n=!t?.path&&!t?.id;this.parentRoute=this.options.getParentRoute?.(),n?this._path=Ce:this.parentRoute||A();let r=n?Ce:t?.path;r&&r!==`/`&&(r=pe(r));let i=t?.id||r,a=n?Ce:q([this.parentRoute.id===`__root__`?``:this.parentRoute.id,i]);r===`__root__`&&(r=`/`),a!==`__root__`&&(a=q([`/`,a]));let o=a===`__root__`?`/`:q([this.parentRoute.fullPath,r]);this._path=r,this._id=a,this._fullPath=o,this._to=Y(o)},this.addChildren=e=>this._addFileChildren(e),this._addFileChildren=e=>(Array.isArray(e)&&(this.children=e),typeof e==`object`&&e&&(this.children=Object.values(e)),this),this._addFileTypes=()=>this,this.updateLoader=e=>(Object.assign(this.options,e),this),this.update=e=>(Object.assign(this.options,e),this),this.lazy=e=>(this.lazyFn=e,this),this.redirect=e=>we({from:this.fullPath,...e}),this.options=e||{},this.isRoot=!e?.getParentRoute,e?.id&&e?.path)throw Error(`Route cannot have both an 'id' and a 'path' option.`)}},ke=class extends Oe{constructor(e){super(e)}},X=t(i(),1),Ae=X.use,je=typeof window<`u`?X.useLayoutEffect:X.useEffect;function Me(e){let t=X.useRef({value:e,prev:null}),n=t.current.value;return e!==n&&(t.current={value:e,prev:n}),t.current.prev}function Ne(e,t,n={},r={}){X.useEffect(()=>{if(!e.current||r.disabled||typeof IntersectionObserver!=`function`)return;let i=new IntersectionObserver(([e])=>{t(e)},n);return i.observe(e.current),()=>{i.disconnect()}},[t,n,r.disabled,e])}function Pe(e){let t=X.useRef(null);return X.useImperativeHandle(e,()=>t.current,[]),t}var Fe=n();function Ie({children:e,fallback:t=null}){return Le()?(0,Fe.jsx)(X.Fragment,{children:e}):(0,Fe.jsx)(X.Fragment,{children:t})}function Le(){return X.useSyncExternalStore(Re,()=>!0,()=>!1)}function Re(){return()=>{}}var ze=X.createContext(null);function Be(e){return X.useContext(ze)}var Ve=X.createContext(void 0),He=X.createContext(void 0),Ue=e((e=>{var t=i();function n(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var r=typeof Object.is==`function`?Object.is:n,a=t.useState,o=t.useEffect,s=t.useLayoutEffect,c=t.useDebugValue;function l(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),i=r[0].inst,l=r[1];return s(function(){i.value=n,i.getSnapshot=t,u(i)&&l({inst:i})},[e,n,t]),o(function(){return u(i)&&l({inst:i}),e(function(){u(i)&&l({inst:i})})},[e]),c(n),n}function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!r(e,n)}catch{return!0}}function d(e,t){return t()}var f=typeof window>`u`||window.document===void 0||window.document.createElement===void 0?d:l;e.useSyncExternalStore=t.useSyncExternalStore===void 0?f:t.useSyncExternalStore})),We=e(((e,t)=>{t.exports=Ue()})),Ge=e((e=>{var t=i(),n=We();function r(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var a=typeof Object.is==`function`?Object.is:r,o=n.useSyncExternalStore,s=t.useRef,c=t.useEffect,l=t.useMemo,u=t.useDebugValue;e.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var d=s(null);if(d.current===null){var f={hasValue:!1,value:null};d.current=f}else f=d.current;d=l(function(){function e(e){if(!o){if(o=!0,s=e,e=r(e),i!==void 0&&f.hasValue){var t=f.value;if(i(t,e))return c=t}return c=e}if(t=c,a(s,e))return t;var n=r(e);return i!==void 0&&i(t,n)?(s=e,t):(s=e,c=n)}var o=!1,s,c,l=n===void 0?null:n;return[function(){return e(t())},l===null?void 0:function(){return e(l())}]},[t,n,r,i]);var p=o(e,d[0],d[1]);return c(function(){f.hasValue=!0,f.value=p},[p]),u(p),p}})),Ke=e(((e,t)=>{t.exports=Ge()}))();function qe(e,t){return e===t}function Je(e,t,n=qe){let r=(0,X.useCallback)(t=>{if(!e)return()=>{};let{unsubscribe:n}=e.subscribe(t);return n},[e]),i=(0,X.useCallback)(()=>e?.get(),[e]);return(0,Ke.useSyncExternalStoreWithSelector)(r,i,i,t,n)}var Ye={get(){},subscribe(){return{unsubscribe(){}}}};function Xe(e,t){let n=X.useRef();return r=>{let i=e?.select?e.select(r):r;return e?.structuralSharing??t.options.defaultStructuralSharing?n.current=h(n.current,i):i}}function Z(e){let t=Be(),n=X.useContext(e.from?He:Ve),r=e.from?t.stores.getRouteMatchStore(e.from):t.stores.matchStores.get(n),i=Xe(e,t),a=Je(r??Ye,e=>e?i(e):Ye);if(a!==Ye)return a;(e.shouldThrow??!0)&&A()}function Ze(e){return Z({from:e.from,strict:e.strict,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.loaderData):t.loaderData})}function Qe(e){let{select:t,...n}=e;return Z({...n,select:e=>t?t(e.loaderDeps):e.loaderDeps})}function $e(e){return Z({from:e.from,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,strict:e.strict,select:t=>{let n=e.strict===!1?t.params:t._strictParams;return e.select?e.select(n):n}})}function et(e){return Z({from:e.from,strict:e.strict,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.search):t.search})}function tt(e){let t=Be();return X.useCallback(n=>t.navigate({...n,from:n.from??e?.from}),[e?.from,t])}function nt(e){return Z({...e,select:t=>e.select?e.select(t.context):t.context})}var rt=o();function it(e,t){let n=Be(),r=Pe(t),{activeProps:i,inactiveProps:a,activeOptions:o,to:s,preload:c,preloadDelay:u,preloadIntentProximity:d,hashScrollIntoView:f,replace:p,startTransition:m,resetScroll:h,viewTransition:g,children:_,target:v,disabled:y,style:x,className:S,onClick:C,onBlur:w,onFocus:T,onMouseEnter:E,onMouseLeave:D,onTouchStart:O,ignoreBlocker:te,params:ne,search:re,hash:k,state:A,mask:j,reloadDocument:M,unsafeRelative:ie,from:ae,_fromLocation:oe,...N}=e,P=Le(),F=X.useMemo(()=>e,[n,e.from,e._fromLocation,e.hash,e.to,e.search,e.params,e.state,e.mask,e.unsafeRelative]),I=Je(n.stores.location,e=>e,(e,t)=>e.href===t.href),L=X.useMemo(()=>{let e={_fromLocation:I,...F};return n.buildLocation(e)},[n,I,F]),se=L.maskedLocation?L.maskedLocation.publicHref:L.publicHref,ce=L.maskedLocation?L.maskedLocation.external:L.external,R=X.useMemo(()=>dt(se,ce,n.history,y),[y,ce,se,n.history]),z=X.useMemo(()=>{if(R?.external)return ee(R.href,n.protocolAllowlist)?void 0:R.href;if(!ft(s)&&!(typeof s!=`string`||s.indexOf(`:`)===-1))try{return new URL(s),ee(s,n.protocolAllowlist)?void 0:s}catch{}},[s,R,n.protocolAllowlist]),le=X.useMemo(()=>{if(z)return!1;if(o?.exact){if(!ge(I.pathname,L.pathname,n.basepath))return!1}else{let e=he(I.pathname,n.basepath),t=he(L.pathname,n.basepath);if(!(e.startsWith(t)&&(e.length===t.length||e[t.length]===`/`)))return!1}return(o?.includeSearch??!0)&&!b(I.search,L.search,{partial:!o?.exact,ignoreUndefined:!o?.explicitUndefined})?!1:o?.includeHash?P&&I.hash===L.hash:!0},[o?.exact,o?.explicitUndefined,o?.includeHash,o?.includeSearch,I,z,P,L.hash,L.pathname,L.search,n.basepath]),B=le?l(i,{})??ot:at,V=le?at:l(a,{})??at,ue=[S,B.className,V.className].filter(Boolean).join(` `),H=(x||B.style||V.style)&&{...x,...B.style,...V.style},[de,fe]=X.useState(!1),U=X.useRef(!1),W=e.reloadDocument||z?!1:c??n.options.defaultPreload,G=u??n.options.defaultPreloadDelay??0,K=X.useCallback(()=>{n.preloadRoute({...F,_builtLocation:L}).catch(e=>{console.warn(e),console.warn(De)})},[n,F,L]);Ne(r,X.useCallback(e=>{e?.isIntersecting&&K()},[K]),ut,{disabled:!!y||W!==`viewport`}),X.useEffect(()=>{U.current||!y&&W===`render`&&(K(),U.current=!0)},[y,K,W]);let q=e=>{let t=e.currentTarget.getAttribute(`target`),r=v===void 0?t:v;if(!y&&!mt(e)&&!e.defaultPrevented&&(!r||r===`_self`)&&e.button===0){e.preventDefault(),(0,rt.flushSync)(()=>{fe(!0)});let t=n.subscribe(`onResolved`,()=>{t(),fe(!1)});n.navigate({...F,replace:p,resetScroll:h,hashScrollIntoView:f,startTransition:m,viewTransition:g,ignoreBlocker:te})}};if(z)return{...N,ref:r,href:z,..._&&{children:_},...v&&{target:v},...y&&{disabled:y},...x&&{style:x},...S&&{className:S},...C&&{onClick:C},...w&&{onBlur:w},...T&&{onFocus:T},...E&&{onMouseEnter:E},...D&&{onMouseLeave:D},...O&&{onTouchStart:O}};let J=e=>{if(y||W!==`intent`)return;if(!G){K();return}let t=e.currentTarget;if(Q.has(t))return;let n=setTimeout(()=>{Q.delete(t),K()},G);Q.set(t,n)},pe=e=>{y||W!==`intent`||K()},Y=e=>{if(y||!W||!G)return;let t=e.currentTarget,n=Q.get(t);n&&(clearTimeout(n),Q.delete(t))};return{...N,...B,...V,href:R?.href,ref:r,onClick:$([C,q]),onBlur:$([w,Y]),onFocus:$([T,J]),onMouseEnter:$([E,J]),onMouseLeave:$([D,Y]),onTouchStart:$([O,pe]),disabled:!!y,target:v,...H&&{style:H},...ue&&{className:ue},...y&&st,...le&&ct,...P&&de&&lt}}var at={},ot={className:`active`},st={role:`link`,"aria-disabled":!0},ct={"data-status":`active`,"aria-current":`page`},lt={"data-transitioning":`transitioning`},Q=new WeakMap,ut={rootMargin:`100px`},$=e=>t=>{for(let n of e)if(n){if(t.defaultPrevented)return;n(t)}};function dt(e,t,n,r){if(!r)return t?{href:e,external:!0}:{href:n.createHref(e)||`/`,external:!1}}function ft(e){if(typeof e!=`string`)return!1;let t=e.charCodeAt(0);return t===47?e.charCodeAt(1)!==47:t===46}var pt=X.forwardRef((e,t)=>{let{_asChild:n,...r}=e,{type:i,...a}=it(r,t),o=typeof r.children==`function`?r.children({isActive:a[`data-status`]===`active`}):r.children;if(!n){let{disabled:e,...t}=a;return X.createElement(`a`,t,o)}return X.createElement(n,a,o)});function mt(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}var ht=class extends Oe{constructor(e){super(e),this.useMatch=e=>Z({select:e?.select,from:this.id,structuralSharing:e?.structuralSharing}),this.useRouteContext=e=>nt({...e,from:this.id}),this.useSearch=e=>et({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useParams=e=>$e({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useLoaderDeps=e=>Qe({...e,from:this.id}),this.useLoaderData=e=>Ze({...e,from:this.id}),this.useNavigate=()=>tt({from:this.fullPath}),this.Link=X.forwardRef((e,t)=>(0,Fe.jsx)(pt,{ref:t,from:this.fullPath,...e}))}};function gt(e){return new ht(e)}var _t=class extends ke{constructor(e){super(e),this.useMatch=e=>Z({select:e?.select,from:this.id,structuralSharing:e?.structuralSharing}),this.useRouteContext=e=>nt({...e,from:this.id}),this.useSearch=e=>et({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useParams=e=>$e({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useLoaderDeps=e=>Qe({...e,from:this.id}),this.useLoaderData=e=>Ze({...e,from:this.id}),this.useNavigate=()=>tt({from:this.fullPath}),this.Link=X.forwardRef((e,t)=>(0,Fe.jsx)(pt,{ref:t,from:this.fullPath,...e}))}};function vt(e){return new _t(e)}function yt(e){return new bt(e,{silent:!0}).createRoute}var bt=class{constructor(e,t){this.path=e,this.createRoute=e=>{let t=gt(e);return t.isRoot=!1,t},this.silent=t?.silent}};function xt(e,t){let n,r,i,a,o=()=>(n||=e().then(e=>{n=void 0,r=e[t??`default`]}).catch(e=>{if(i=e,S(i)&&i instanceof Error&&typeof window<`u`&&typeof sessionStorage<`u`){let e=`tanstack_router_reload:${i.message}`;sessionStorage.getItem(e)||(sessionStorage.setItem(e,`1`),a=!0)}}),n),s=function(e){if(a)throw window.location.reload(),new Promise(()=>{});if(i)throw i;if(!r)if(Ae)Ae(o());else throw o();return X.createElement(r,e)};return s.preload=o,s}var St=`modulepreload`,Ct=function(e){return`/`+e},wt={},Tt=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=Ct(t,n),t in wt)return;wt[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:St,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})};export{ce as A,ne as B,ve as C,me as D,_e as E,j as F,f as G,re as H,A as I,s as J,ee as K,E as L,R as M,se as N,Y as O,B as P,i as Q,k as R,J as S,q as T,te as U,b as V,l as W,h as X,m as Y,o as Z,Te as _,pt as a,Ce as b,Je as c,ze as d,Ie as f,Me as g,je as h,vt as i,z as j,H as k,Ve as l,Ae as m,xt as n,tt as o,Le as p,C as q,yt as r,Xe as s,Tt as t,Be as u,Ee as v,be as w,Se as x,we as y,x as z};
@@ -0,0 +1 @@
1
+ import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{Q as n,u as r}from"./preload-helper-CvnapA2_.js";import{h as i}from"./index-iayCEuU2.js";import{t as a}from"./Button-ByiV6fpd.js";import{t as o}from"./SpawnTeamModal-BEkNCKXm.js";import{t as s}from"./MembersEditor-C6UpqDdV.js";import{t as c}from"./TemplatesTabs-Da7mg9FI.js";var l=e(n()),u=t();function d(){let{profileGroups:e,groups:t,profiles:n,modelGroups:s,userMdDefault:d}=i.useLoaderData(),p=r(),[m,h]=(0,l.useState)(null);async function g(e){if(!confirm(`delete this profile group? (does not affect spawned agents)`))return;let t=await fetch(`/api/profile-groups/${e}`,{method:`DELETE`});if(!t.ok&&t.status!==204){let e=await t.json().catch(()=>null);alert(e?.error??t.statusText);return}await p.invalidate()}return(0,u.jsxs)(`div`,{children:[(0,u.jsx)(c,{}),(0,u.jsx)(`h1`,{children:`profile groups`}),(0,u.jsx)(`p`,{className:`muted`,children:`A profile group is a reusable team template. Each one holds an ordered list of members — profile + agent-name + optional overrides — that get replayed as a single transactional spawn into a target group.`}),(0,u.jsx)(f,{profiles:n,modelGroups:s,userMdDefault:d,onCreated:()=>p.invalidate()}),(0,u.jsxs)(`table`,{children:[(0,u.jsx)(`thead`,{children:(0,u.jsxs)(`tr`,{children:[(0,u.jsx)(`th`,{children:`id`}),(0,u.jsx)(`th`,{children:`name`}),(0,u.jsx)(`th`,{children:`members`}),(0,u.jsx)(`th`,{})]})}),(0,u.jsxs)(`tbody`,{children:[e.length===0&&(0,u.jsx)(`tr`,{children:(0,u.jsx)(`td`,{colSpan:4,className:`muted`,children:`no profile groups yet`})}),e.map(e=>(0,u.jsxs)(`tr`,{children:[(0,u.jsx)(`td`,{children:(0,u.jsx)(`a`,{href:`/profile-groups/${e.id}`,children:(0,u.jsx)(`code`,{children:e.id})})}),(0,u.jsx)(`td`,{children:e.name}),(0,u.jsx)(`td`,{children:e.memberCount}),(0,u.jsxs)(`td`,{className:`flex gap-2`,children:[(0,u.jsx)(a,{variant:`primary`,disabled:e.memberCount===0,title:e.memberCount===0?`add at least one member before spawning`:void 0,onClick:()=>h(e.id),children:`spawn team`}),(0,u.jsx)(a,{variant:`danger`,onClick:()=>g(e.id),children:`delete`})]})]},e.id))]})]}),m&&(0,u.jsx)(o,{profileGroup:e.find(e=>e.id===m),groups:t,onClose:()=>h(null),onSpawned:e=>{h(null),p.navigate({to:`/groups/$id`,params:{id:e}})}})]})}function f({profiles:e,modelGroups:t,userMdDefault:n,onCreated:r}){let[i,o]=(0,l.useState)(``),[c,d]=(0,l.useState)(``),[f,p]=(0,l.useState)(n),[m,h]=(0,l.useState)([]),[g,_]=(0,l.useState)(null),[v,y]=(0,l.useState)(!1);async function b(e){if(e.preventDefault(),_(null),!i.trim()){_(`id is required`);return}y(!0);try{let e={id:i.trim()};c.trim()&&(e.name=c.trim()),f&&(e.userMd=f);let t=await fetch(`/api/profile-groups`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e)});if(!t.ok){let e=await t.json().catch(()=>null);throw Error(e?.error??t.statusText)}if(m.length>0){let e=await fetch(`/api/profile-groups/${i.trim()}/members`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify({members:m})});if(!e.ok){let t=await e.json().catch(()=>null);throw Error(`group created, member save failed: ${t?.error??e.statusText}`)}}o(``),d(``),p(n),h([]),r()}catch(e){_(e.message)}finally{y(!1)}}return(0,u.jsxs)(`form`,{className:`card`,onSubmit:b,children:[(0,u.jsx)(`h3`,{children:`create profile group`}),g&&(0,u.jsx)(`div`,{className:`err`,children:g}),(0,u.jsxs)(`div`,{className:`flex gap-4`,children:[(0,u.jsxs)(`label`,{className:`flex-1`,children:[`id (slug)`,(0,u.jsx)(`input`,{value:i,onChange:e=>o(e.target.value),required:!0,placeholder:`platform-team`})]}),(0,u.jsxs)(`label`,{className:`flex-1`,children:[`name`,(0,u.jsx)(`input`,{value:c,onChange:e=>d(e.target.value),placeholder:`Platform Team`})]})]}),(0,u.jsxs)(`label`,{children:[`starter USER.md (seeded into freshly-created target groups; prefilled with the built-in default — edit to customise)`,(0,u.jsx)(`textarea`,{rows:3,value:f,onChange:e=>p(e.target.value),className:`font-mono text-[0.88em] leading-[1.55]`})]}),(0,u.jsxs)(`div`,{className:`mt-4`,children:[(0,u.jsx)(`h4`,{className:`mb-1 text-[0.95em] font-medium`,children:`members`}),(0,u.jsxs)(`p`,{className:`muted mb-2 text-[0.88em]`,children:[`Each member becomes one agent when the team is spawned. You can also configure members later from the detail page.`,` `,e.length>0&&(0,u.jsxs)(u.Fragment,{children:[`Available profiles:`,` `,e.map((e,t)=>(0,u.jsxs)(`span`,{children:[t>0&&`, `,(0,u.jsx)(`code`,{children:e.id})]},e.id)),`.`]})]}),(0,u.jsx)(s,{members:m,onChange:h,profiles:e,modelGroups:t,emptyHint:`No members configured yet — add one to pick a profile for each team member.`})]}),(0,u.jsx)(`div`,{className:`mt-4`,children:(0,u.jsx)(a,{variant:`primary`,type:`submit`,disabled:v,children:v?`creating…`:`create`})})]})}export{d as component};
@@ -0,0 +1 @@
1
+ import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{Q as n,u as r}from"./preload-helper-CvnapA2_.js";import{g as i}from"./index-iayCEuU2.js";import{t as a}from"./Button-ByiV6fpd.js";import{t as o}from"./TemplatesTabs-Da7mg9FI.js";var s=e(n()),c=t();function l(){let{profiles:e,modelGroups:t,skills:n,templates:s}=i.useLoaderData(),l=r();async function d(e){if(!confirm(`delete profile and all its files?`))return;let t=await fetch(`/api/profiles/${e}`,{method:`DELETE`});if(!t.ok&&t.status!==204){let e=await t.json().catch(()=>null);alert(e?.error??t.statusText);return}await l.invalidate()}return(0,c.jsxs)(`div`,{children:[(0,c.jsx)(o,{}),(0,c.jsx)(`h1`,{children:`profiles`}),(0,c.jsx)(`p`,{className:`muted`,children:`A profile is a spawn template — SOUL/IDENTITY templates, a default model, a skills policy. Agents choose a group at spawn time, independent of their profile.`}),(0,c.jsx)(u,{modelGroups:t,skills:n,templates:s,onCreated:()=>l.invalidate()}),(0,c.jsxs)(`table`,{children:[(0,c.jsx)(`thead`,{children:(0,c.jsxs)(`tr`,{children:[(0,c.jsx)(`th`,{children:`id`}),(0,c.jsx)(`th`,{children:`name`}),(0,c.jsx)(`th`,{children:`model`}),(0,c.jsx)(`th`,{children:`agents`}),(0,c.jsx)(`th`,{children:`skills`}),(0,c.jsx)(`th`,{})]})}),(0,c.jsxs)(`tbody`,{children:[e.length===0&&(0,c.jsx)(`tr`,{children:(0,c.jsx)(`td`,{colSpan:6,className:`muted`,children:`no profiles yet`})}),e.map(e=>{let t=e.skillsMode===`all`?`all`:e.defaultSkills.length===0?`—`:e.defaultSkills.join(`, `);return(0,c.jsxs)(`tr`,{children:[(0,c.jsx)(`td`,{children:(0,c.jsx)(`a`,{href:`/profiles/${e.id}`,children:(0,c.jsx)(`code`,{children:e.id})})}),(0,c.jsx)(`td`,{children:e.name}),(0,c.jsx)(`td`,{children:(0,c.jsx)(`code`,{children:e.defaultModel})}),(0,c.jsx)(`td`,{children:e.agentCount}),(0,c.jsx)(`td`,{className:`text-xs text-mocha-light`,children:t}),(0,c.jsx)(`td`,{children:e.agentCount===0?(0,c.jsx)(a,{variant:`danger`,onClick:()=>d(e.id),children:`delete`}):(0,c.jsx)(`span`,{className:`muted`,title:`${e.agentCount} agent(s) use this profile`,children:`in use`})})]},e.id)})]})]})]})}function u({modelGroups:e,skills:t,templates:n,onCreated:r}){let[i,o]=(0,s.useState)(`basics`),[l,u]=(0,s.useState)(``),[p,m]=(0,s.useState)(``),[h,g]=(0,s.useState)(``),[_,v]=(0,s.useState)(n.soul),[y,b]=(0,s.useState)(n.identity),[x,S]=(0,s.useState)(n.bootstrap),[C,w]=(0,s.useState)(!0),[T,E]=(0,s.useState)(n.agents),[D,O]=(0,s.useState)(!0),[k,A]=(0,s.useState)(n.tools),[j,M]=(0,s.useState)(!0),[N,P]=(0,s.useState)(n.heartbeat),[F,I]=(0,s.useState)(!1);function L(e,t,n){t(n),!n&&i===e&&o(`basics`)}let[R,z]=(0,s.useState)(`all`),[B,V]=(0,s.useState)(new Set),[H,U]=(0,s.useState)(null),[W,G]=(0,s.useState)(!1);function K(e){V(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})}async function q(e){if(e.preventDefault(),U(null),!l.trim()){U(`id is required`);return}if(!h.trim()){U(`default model is required`);return}G(!0);try{let e={id:l.trim(),name:p.trim()||void 0,model:h.trim(),skillsMode:R,defaultSkills:R===`selected`?Array.from(B):[],soul:_,identity:y,bootstrap:C?x:null,agents:D?T:null,tools:j?k:null,heartbeat:F?N:null},t=await fetch(`/api/profiles`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(e)});if(!t.ok){let e=await t.json().catch(()=>null);throw Error(e?.error??t.statusText)}u(``),m(``),g(``),w(!0),E(n.agents),O(!0),A(n.tools),M(!0),P(n.heartbeat),I(!1),V(new Set),z(`all`),o(`basics`),r()}catch(e){U(e.message)}finally{G(!1)}}return(0,c.jsxs)(`form`,{className:`card`,onSubmit:q,children:[(0,c.jsx)(`h3`,{children:`create profile`}),H&&(0,c.jsx)(`div`,{className:`err`,children:H}),(0,c.jsx)(d,{items:[{id:`basics`,label:`basics`},{id:`soul`,label:`SOUL`},{id:`identity`,label:`IDENTITY`},{id:`bootstrap`,label:`BOOTSTRAP`,disabled:!C},{id:`agents`,label:`AGENTS`,disabled:!D},{id:`tools`,label:`TOOLS`,disabled:!j},{id:`heartbeat`,label:`HEARTBEAT`,disabled:!F},{id:`skills`,label:`skills`}],active:i,onChange:e=>o(e)}),(0,c.jsxs)(`fieldset`,{className:`mb-5 rounded-md border border-frost p-3`,children:[(0,c.jsx)(`legend`,{className:`px-1 text-[0.85em] font-medium text-mocha`,children:`templates to include`}),(0,c.jsxs)(`div`,{className:`flex flex-wrap gap-x-5 gap-y-2 text-[0.9em]`,children:[(0,c.jsxs)(`label`,{className:`inline-flex items-center gap-1.5 opacity-60`,title:`always included`,children:[(0,c.jsx)(`input`,{type:`checkbox`,defaultChecked:!0,disabled:!0}),` SOUL.md`]}),(0,c.jsxs)(`label`,{className:`inline-flex items-center gap-1.5 opacity-60`,title:`always included`,children:[(0,c.jsx)(`input`,{type:`checkbox`,defaultChecked:!0,disabled:!0}),` IDENTITY.md`]}),(0,c.jsxs)(`label`,{className:`inline-flex cursor-pointer items-center gap-1.5`,children:[(0,c.jsx)(`input`,{type:`checkbox`,checked:C,onChange:e=>L(`bootstrap`,w,e.target.checked)}),`BOOTSTRAP.md`]}),(0,c.jsxs)(`label`,{className:`inline-flex cursor-pointer items-center gap-1.5`,children:[(0,c.jsx)(`input`,{type:`checkbox`,checked:D,onChange:e=>L(`agents`,O,e.target.checked)}),`AGENTS.md`]}),(0,c.jsxs)(`label`,{className:`inline-flex cursor-pointer items-center gap-1.5`,children:[(0,c.jsx)(`input`,{type:`checkbox`,checked:j,onChange:e=>L(`tools`,M,e.target.checked)}),`TOOLS.md`]}),(0,c.jsxs)(`label`,{className:`inline-flex cursor-pointer items-center gap-1.5`,children:[(0,c.jsx)(`input`,{type:`checkbox`,checked:F,onChange:e=>L(`heartbeat`,I,e.target.checked)}),`HEARTBEAT.md`]})]}),(0,c.jsx)(`p`,{className:`muted mt-2 text-[0.8em]`,children:`Disabled files aren't created for this profile. Each spawned agent gets its own copy of the enabled files at spawn time.`})]}),i===`basics`&&(0,c.jsxs)(`div`,{children:[(0,c.jsxs)(`div`,{className:`flex gap-4`,children:[(0,c.jsxs)(`label`,{className:`flex-1`,children:[`id (slug)`,(0,c.jsx)(`input`,{value:l,onChange:e=>u(e.target.value),required:!0})]}),(0,c.jsxs)(`label`,{className:`flex-1`,children:[`name`,(0,c.jsx)(`input`,{value:p,onChange:e=>m(e.target.value)})]})]}),(0,c.jsxs)(`label`,{children:[`default model`,e.length===0?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(`select`,{disabled:!0,children:(0,c.jsx)(`option`,{children:`(no models available)`})}),(0,c.jsxs)(`span`,{className:`muted text-[0.85em]`,children:[`Enable a provider and curate models on `,(0,c.jsx)(`a`,{href:`/config`,children:`/config`}),` first.`]})]}):(0,c.jsxs)(`select`,{value:h,onChange:e=>g(e.target.value),required:!0,children:[(0,c.jsx)(`option`,{value:``,children:`-- pick a model --`}),e.map(e=>(0,c.jsx)(`optgroup`,{label:e.provider,children:e.models.map(t=>(0,c.jsx)(`option`,{value:`${e.provider}:${t}`,children:`${e.provider}:${t}`},t))},e.provider))]})]})]}),i===`soul`&&(0,c.jsx)(f,{label:`SOUL.md`,hint:`Persona, values, and operating principles. Injected into every session.`,value:_,onChange:v,rows:16}),i===`identity`&&(0,c.jsx)(f,{label:`IDENTITY.md`,hint:`Name, creature, vibe, emoji, avatar — filled in during the bootstrap ritual.`,value:y,onChange:b,rows:12}),i===`bootstrap`&&(0,c.jsx)(f,{label:`BOOTSTRAP.md`,hint:`One-time first-run ritual. The agent retires it once introductions are done.`,value:x,onChange:S,rows:16}),i===`agents`&&(0,c.jsx)(f,{label:`AGENTS.md`,hint:`The workspace operating manual — memory discipline, red lines, channel etiquette.`,value:T,onChange:E,rows:16}),i===`tools`&&(0,c.jsx)(f,{label:`TOOLS.md`,hint:`Agent-specific tool notes and environment facts beyond the generic tool descriptions.`,value:k,onChange:A,rows:14}),i===`heartbeat`&&(0,c.jsx)(f,{label:`HEARTBEAT.md`,hint:`Optional checklist run on scheduled wake-ups. Pair with an interval/cron trigger.`,value:N,onChange:P,rows:12}),i===`skills`&&(0,c.jsxs)(`div`,{children:[(0,c.jsx)(`p`,{className:`muted my-2`,children:`Choose which skills agents inherit at spawn time. In both modes each agent can still attach or detach skills individually after it's spawned.`}),(0,c.jsxs)(`label`,{className:`flex items-start gap-2 my-2 cursor-pointer`,children:[(0,c.jsx)(`input`,{type:`radio`,name:`skillsMode`,value:`all`,checked:R===`all`,onChange:()=>z(`all`)}),(0,c.jsxs)(`span`,{children:[(0,c.jsx)(`strong`,{children:`allow all skills`}),` — every skill on disk is attached when an agent is spawned.`]})]}),(0,c.jsxs)(`label`,{className:`flex items-start gap-2 my-2 cursor-pointer`,children:[(0,c.jsx)(`input`,{type:`radio`,name:`skillsMode`,value:`selected`,checked:R===`selected`,onChange:()=>z(`selected`)}),(0,c.jsxs)(`span`,{children:[(0,c.jsx)(`strong`,{children:`select skills`}),` — attach only the ones you pick below.`]})]}),(0,c.jsx)(`div`,{className:`mt-3 max-h-[22rem] overflow-y-auto rounded-md border border-frost p-3 ${R===`all`?`opacity-50 pointer-events-none`:``}`,children:t.length===0?(0,c.jsxs)(`p`,{className:`muted`,children:[`No skills installed yet. Import some on `,(0,c.jsx)(`a`,{href:`/skills`,children:`/skills`}),`.`]}):t.map(e=>(0,c.jsxs)(`label`,{className:`my-1.5 flex cursor-pointer items-start gap-2`,children:[(0,c.jsx)(`input`,{type:`checkbox`,checked:B.has(e.name),onChange:()=>K(e.name)}),(0,c.jsxs)(`span`,{children:[(0,c.jsx)(`code`,{children:e.name}),e.description&&(0,c.jsxs)(`span`,{className:`text-[0.9em] text-mocha-light`,children:[` — `,e.description]})]})]},e.name))})]}),(0,c.jsx)(`div`,{className:`mt-5 flex gap-2`,children:(0,c.jsx)(a,{variant:`primary`,type:`submit`,disabled:W,children:W?`creating…`:`create`})})]})}function d({items:e,active:t,onChange:n}){return(0,c.jsx)(`nav`,{role:`tablist`,className:`-mb-px mb-5 flex flex-wrap gap-1 border-b border-frost`,children:e.map(e=>(0,c.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":t===e.id,disabled:e.disabled,title:e.disabled?`disabled — enable it in “templates to include”`:void 0,onClick:()=>n(e.id),className:`unstyled border-b-2 bg-transparent px-4 py-2 text-[0.9em] font-medium transition-colors ${e.disabled?`cursor-not-allowed border-transparent text-mocha-light/40`:t===e.id?`cursor-pointer border-sapphire text-sapphire`:`cursor-pointer border-transparent text-mocha hover:text-sapphire`}`,children:e.label},e.id))})}function f({label:e,hint:t,value:n,onChange:r,rows:i}){return(0,c.jsxs)(`div`,{children:[(0,c.jsx)(`p`,{className:`muted my-2 text-[0.85em]`,children:t}),(0,c.jsxs)(`label`,{children:[e,(0,c.jsx)(`textarea`,{rows:i,value:n,onChange:e=>r(e.target.value),className:`font-mono text-[0.88em] leading-[1.55]`})]})]})}export{l as component};
@@ -0,0 +1 @@
1
+ import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{Q as n,a as r,o as i,u as a}from"./preload-helper-CvnapA2_.js";import{v as o}from"./index-iayCEuU2.js";import{t as s}from"./ChatPane-DzEgOEqS.js";import"./wire-constants-BkT5-597.js";import{t as c}from"./SpawnTeamModal-BEkNCKXm.js";var l=e(n(),1),u=t();function d({onClose:e}){let t=a(),[n,r]=(0,l.useState)(``),[i,o]=(0,l.useState)(``),[s,c]=(0,l.useState)(``),[d,f]=(0,l.useState)(!1),[p,m]=(0,l.useState)(null);async function h(r){if(r.preventDefault(),m(null),!n.trim()){m(`id is required`);return}f(!0);try{let r={id:n.trim()};i.trim()&&(r.name=i.trim()),s.trim()&&(r.link=s.trim());let a=await fetch(`/api/groups`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(r)});if(!a.ok){let e=await a.json().catch(()=>({}));throw Error(e.error??`${a.status} ${a.statusText}`)}e(),await t.invalidate()}catch(e){m(e.message),f(!1)}}return(0,u.jsx)(`div`,{onClick:e,className:`fixed inset-0 z-50 flex items-center justify-center bg-black/30 backdrop-blur-[1px]`,children:(0,u.jsxs)(`form`,{onSubmit:h,onClick:e=>e.stopPropagation(),className:`w-full max-w-md rounded-2xl border bg-card p-6 shadow-lg`,children:[(0,u.jsx)(`h3`,{className:`font-serif text-xl text-foreground mb-1`,children:`Create a new group`}),(0,u.jsxs)(`p`,{className:`text-sm text-muted-foreground mb-4`,children:[`A group is a collaboration context — one filesystem root, one USER.md, one roster. The slot lives at `,(0,u.jsx)(`code`,{className:`font-mono`,children:`~/.bazilion/groups/<slug>/`}),`.`]}),(0,u.jsxs)(`div`,{className:`grid grid-cols-2 gap-3 mb-3`,children:[(0,u.jsxs)(`label`,{className:`block text-sm`,children:[`ID (slug)`,(0,u.jsx)(`input`,{type:`text`,value:n,onChange:e=>r(e.target.value),required:!0,pattern:`[a-z0-9][a-z0-9_-]*`,placeholder:`myproject`,autoFocus:!0,className:`mt-1 block w-full rounded-md border bg-background px-3 py-2 outline-none focus:ring-2 focus:ring-ring/30`})]}),(0,u.jsxs)(`label`,{className:`block text-sm`,children:[`Name `,(0,u.jsx)(`span`,{className:`text-muted-foreground font-normal`,children:`(optional)`}),(0,u.jsx)(`input`,{type:`text`,value:i,onChange:e=>o(e.target.value),className:`mt-1 block w-full rounded-md border bg-background px-3 py-2 outline-none focus:ring-2 focus:ring-ring/30`})]})]}),(0,u.jsxs)(`label`,{className:`block text-sm mb-3`,children:[`Link target`,` `,(0,u.jsx)(`span`,{className:`text-muted-foreground font-normal`,children:`(optional, absolute path)`}),(0,u.jsx)(`input`,{type:`text`,value:s,onChange:e=>c(e.target.value),placeholder:`/home/you/projects/myrepo`,className:`mt-1 block w-full rounded-md border bg-background px-3 py-2 outline-none focus:ring-2 focus:ring-ring/30`}),(0,u.jsx)(`span`,{className:`mt-1 block text-xs text-muted-foreground`,children:`Leave blank to create a fresh directory. Supply an absolute path to materialize the slot as a symlink to your existing project tree.`})]}),p&&(0,u.jsx)(`p`,{className:`mt-2 text-sm text-rose-700`,children:p}),(0,u.jsxs)(`div`,{className:`mt-5 flex justify-end gap-2`,children:[(0,u.jsx)(`button`,{type:`button`,onClick:e,className:`rounded-md border px-3 py-2 text-sm text-foreground hover:bg-accent`,children:`Cancel`}),(0,u.jsx)(`button`,{type:`submit`,disabled:d,className:`rounded-md bg-primary px-3 py-2 text-sm font-medium text-primary-foreground disabled:opacity-50`,children:d?`Creating…`:`Create`})]})]})})}function f({profileId:e,groupHint:t,groups:n,onClose:r}){let a=i(),[o,s]=(0,l.useState)(``),[c,d]=(0,l.useState)(t??`default`),[f,m]=(0,l.useState)(!1),[h,g]=(0,l.useState)(null);async function _(t){t.preventDefault(),g(null),m(!0);try{let t={profile:e};o.trim()&&(t.name=o.trim()),c&&(t.groupId=c);let n=await fetch(`/api/agents`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(t)});if(!n.ok){let e=await n.json().catch(()=>({}));throw Error(e.error??`${n.status} ${n.statusText}`)}let i=await n.json();r(),await a({to:`/`,search:{agent:i.id}})}catch(e){g(e.message),m(!1)}}return(0,u.jsx)(p,{onClose:r,children:(0,u.jsxs)(`form`,{onSubmit:_,className:`w-full max-w-md rounded-2xl border bg-card p-6 shadow-lg`,onClick:e=>e.stopPropagation(),children:[(0,u.jsx)(`h3`,{className:`font-serif text-xl text-foreground mb-1`,children:`Spawn a new agent`}),(0,u.jsxs)(`p`,{className:`text-sm text-muted-foreground mb-4`,children:[`Profile: `,(0,u.jsx)(`code`,{className:`font-mono`,children:e})]}),(0,u.jsxs)(`label`,{className:`block text-sm text-foreground mb-3`,children:[`Agent name`,` `,(0,u.jsx)(`span`,{className:`text-muted-foreground font-normal`,children:`(optional — defaults to the profile's name)`}),(0,u.jsx)(`input`,{type:`text`,value:o,onChange:e=>s(e.target.value),autoFocus:!0,autoComplete:`off`,className:`mt-1 block w-full rounded-md border bg-background px-3 py-2 outline-none focus:ring-2 focus:ring-ring/30`})]}),(0,u.jsxs)(`label`,{className:`block text-sm text-foreground mb-3`,children:[`Group`,(0,u.jsx)(`select`,{value:c,onChange:e=>d(e.target.value),className:`mt-1 block w-full rounded-md border bg-background px-3 py-2 outline-none focus:ring-2 focus:ring-ring/30`,children:n.map(e=>(0,u.jsxs)(`option`,{value:e.id,children:[e.name,e.id==="default"?` (default)`:``]},e.id))})]}),h&&(0,u.jsx)(`p`,{className:`mt-2 text-sm text-rose-700`,children:h}),(0,u.jsxs)(`div`,{className:`mt-5 flex justify-end gap-2`,children:[(0,u.jsx)(`button`,{type:`button`,onClick:r,className:`rounded-md border px-3 py-2 text-sm text-foreground hover:bg-accent`,children:`Cancel`}),(0,u.jsx)(`button`,{type:`submit`,disabled:f,className:`rounded-md bg-primary px-3 py-2 text-sm font-medium text-primary-foreground disabled:opacity-50`,children:f?`Creating…`:`Create`})]})]})})}function p({children:e,onClose:t}){return(0,u.jsx)(`div`,{onClick:t,className:`fixed inset-0 z-50 flex items-center justify-center bg-black/30 backdrop-blur-[1px]`,children:e})}var m=`bz_sidebar_open_groups`;function h(e){if(typeof document>`u`)return;let t=encodeURIComponent(JSON.stringify(e));document.cookie=`${m}=${t}; Path=/; Max-Age=31536000; SameSite=Lax`}function g({agents:e,groups:t,profiles:n,profileGroups:i,selectedAgentId:o,initialOpenGroups:s}){let p=a(),[m,g]=(0,l.useState)(null),[_,v]=(0,l.useState)(null),[y,b]=(0,l.useState)(!1),[x,S]=(0,l.useState)(!1),[C,w]=(0,l.useState)(()=>s??{});async function T(e){let t=window.prompt(`rename "${e.name}" to:`,e.name)?.trim();if(!t||t===e.name)return;let n=await fetch(`/api/agents/${e.id}`,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify({name:t})});if(!n.ok){let e=await n.json().catch(()=>null);alert(e?.error??n.statusText);return}await p.invalidate()}async function E(e){if(!confirm(`archive "${e.name}"? (reversible — find under "show archived")`))return;let t=await fetch(`/api/agents/${e.id}/archive`,{method:`POST`});if(!t.ok&&t.status!==204){alert(t.statusText);return}await p.invalidate()}let D=[...n].sort((e,t)=>e.id==="default"?-1:+(t.id==="default")),O=[...t].sort((e,t)=>e.id==="default"?-1:+(t.id==="default")),k=new Map;for(let t of e){let e=k.get(t.groupId)??[];e.push(t),k.set(t.groupId,e)}let A=e.find(e=>e.id===o)?.groupId??null;return(0,u.jsxs)(`aside`,{className:`flex h-full flex-col rounded-lg border bg-card overflow-hidden`,children:[(0,u.jsxs)(`header`,{className:`flex items-center justify-between border-b px-3 py-2.5 bg-muted/30`,children:[(0,u.jsx)(`span`,{className:`font-serif text-base text-foreground`,children:`agents`}),(0,u.jsxs)(`div`,{className:`relative`,children:[(0,u.jsx)(`button`,{type:`button`,onClick:()=>S(e=>!e),className:`rounded-md border px-2 py-1 text-xs text-muted-foreground hover:text-foreground hover:border-foreground/30`,children:`+ new ▾`}),x&&(0,u.jsxs)(`div`,{role:`menu`,className:`absolute right-0 top-[calc(100%+0.3rem)] z-20 min-w-[14rem] rounded-md border bg-popover p-1 shadow-md`,onMouseLeave:()=>S(!1),children:[n.length===0?(0,u.jsxs)(`div`,{className:`px-3 py-2 text-sm text-muted-foreground`,children:[`No profiles yet.`,(0,u.jsx)(`br`,{}),(0,u.jsx)(`a`,{href:`/profiles`,className:`text-primary underline`,children:`Create one`}),` `,`to spawn agents.`]}):(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(`div`,{className:`px-3 pt-1 pb-0.5 text-[0.7em] uppercase tracking-wide text-muted-foreground`,children:`spawn agent from template`}),D.map(e=>(0,u.jsxs)(`button`,{type:`button`,role:`menuitem`,onClick:()=>{S(!1),g({profileId:e.id})},className:`flex w-full items-center justify-between rounded-sm px-3 py-1.5 text-sm hover:bg-accent`,children:[(0,u.jsx)(`span`,{children:e.name||e.id}),e.id==="default"&&(0,u.jsx)(`span`,{className:`rounded bg-muted px-1 text-[0.7em] text-muted-foreground`,children:`default`})]},e.id))]}),(0,u.jsx)(`div`,{className:`my-1 h-px bg-border`}),(0,u.jsx)(`div`,{className:`px-3 pt-1 pb-0.5 text-[0.7em] uppercase tracking-wide text-muted-foreground`,children:`spawn group from template`}),i.length===0?(0,u.jsxs)(`div`,{className:`px-3 py-1.5 text-xs text-muted-foreground`,children:[`No team templates yet.`,` `,(0,u.jsx)(`a`,{href:`/profile-groups`,className:`text-primary underline`,children:`Create one`}),`.`]}):i.map(e=>(0,u.jsxs)(`button`,{type:`button`,role:`menuitem`,disabled:e.memberCount===0,title:e.memberCount===0?`add at least one member before spawning`:void 0,onClick:()=>{S(!1),v(e)},className:`flex w-full items-center justify-between rounded-sm px-3 py-1.5 text-sm hover:bg-accent disabled:cursor-not-allowed disabled:opacity-50 disabled:hover:bg-transparent`,children:[(0,u.jsx)(`span`,{children:e.name||e.id}),(0,u.jsx)(`span`,{className:`font-mono text-[0.7em] text-muted-foreground`,children:e.memberCount})]},e.id)),(0,u.jsx)(`div`,{className:`my-1 h-px bg-border`}),(0,u.jsx)(`button`,{type:`button`,onClick:()=>{S(!1),b(!0)},className:`block w-full text-left rounded-sm px-3 py-1.5 text-xs text-muted-foreground hover:bg-accent`,children:`+ create group`})]})]})]}),(0,u.jsx)(`nav`,{className:`flex-1 overflow-y-auto p-1`,children:e.length===0&&t.length===0?(0,u.jsxs)(`div`,{className:`p-4 text-sm text-muted-foreground`,children:[`No agents yet.`,` `,(0,u.jsx)(`a`,{href:`/agents`,className:`text-primary underline`,children:`Spawn one`}),` `,`to start chatting.`]}):O.map(e=>{let t=k.get(e.id)??[],n=A===e.id,i=C[e.id];return(0,u.jsxs)(`details`,{open:i===void 0?n||e.id==="default":i,onToggle:t=>{let n=t.currentTarget.open;if(C[e.id]===n)return;let r={...C,[e.id]:n};h(r),w(r),p.invalidate()},className:`group/details mb-1 last:mb-0`,children:[(0,u.jsxs)(`summary`,{className:`flex cursor-pointer list-none items-center gap-1.5 rounded-sm px-2 py-1.5 text-xs uppercase tracking-wide text-muted-foreground hover:bg-accent`,children:[(0,u.jsx)(`span`,{className:`w-3 text-xs transition-transform group-open/details:rotate-90 inline-block`,children:`▸`}),(0,u.jsx)(`span`,{className:`flex-1 truncate font-semibold`,children:e.name}),(0,u.jsx)(`span`,{className:`font-mono text-xs rounded bg-muted px-1 min-w-[1.4em] text-center`,children:t.length})]}),t.length===0?(0,u.jsx)(`div`,{className:`pl-6 py-1 text-xs italic text-muted-foreground`,children:`no agents`}):(0,u.jsx)(`div`,{className:`pl-2`,children:t.map(e=>(0,u.jsxs)(`div`,{className:`group/row relative`,children:[(0,u.jsxs)(r,{to:`/`,search:{agent:e.id},className:`block rounded-sm border-l-2 px-3 py-1.5 pr-14 hover:bg-accent ${e.id===o?`border-primary bg-accent`:`border-transparent`}`,children:[(0,u.jsxs)(`div`,{className:`flex items-center gap-1.5 truncate text-sm font-medium`,children:[(0,u.jsx)(`span`,{className:`truncate`,children:e.name}),e.telegramTopicId!==null&&(0,u.jsx)(`span`,{className:`text-xs`,title:`Telegram topic #${e.telegramTopicId}`,"aria-label":`Bound to Telegram topic ${e.telegramTopicId}`,children:`✈`})]}),(0,u.jsxs)(`div`,{className:`flex gap-2 font-mono text-[0.7em] text-muted-foreground`,children:[(0,u.jsx)(`span`,{className:`uppercase tracking-wide`,children:e.status}),(0,u.jsx)(`code`,{children:e.id.slice(0,8)})]})]}),(0,u.jsxs)(`div`,{className:`absolute right-1 top-1 flex gap-0.5 opacity-0 transition-opacity group-hover/row:opacity-100 focus-within:opacity-100`,children:[(0,u.jsx)(`button`,{type:`button`,onClick:()=>T(e),title:`rename`,"aria-label":`rename ${e.name}`,className:`unstyled flex h-6 w-6 items-center justify-center rounded-sm text-mocha-light hover:bg-snow hover:text-sapphire`,children:`✎`}),(0,u.jsx)(`button`,{type:`button`,onClick:()=>E(e),title:`archive`,"aria-label":`archive ${e.name}`,className:`unstyled flex h-6 w-6 items-center justify-center rounded-sm text-mocha-light hover:bg-snow hover:text-[#9B3D3D]`,children:`×`})]})]},e.id))})]},e.id)})}),m&&(0,u.jsx)(f,{profileId:m.profileId,groupHint:m.groupHint,groups:O,onClose:()=>g(null)}),_&&(0,u.jsx)(c,{profileGroup:_,groups:O,onClose:()=>v(null),onSpawned:e=>{v(null),p.navigate({to:`/groups/$id`,params:{id:e}})}}),y&&(0,u.jsx)(d,{onClose:()=>b(!1)})]})}function _(){let e=o.useLoaderData(),t=e.selected?.resolved.agent.id??null;return(0,u.jsxs)(`div`,{className:`grid h-full grid-cols-1 gap-3 py-3 sm:grid-cols-[16rem_minmax(0,1fr)]`,children:[(0,u.jsx)(g,{agents:e.agents,groups:e.groups,profiles:e.profiles,profileGroups:e.profileGroups,selectedAgentId:t,initialOpenGroups:e.initialOpenGroups}),(0,u.jsx)(`main`,{className:`overflow-hidden`,children:e.selected?(0,u.jsx)(s,{agentId:e.selected.resolved.agent.id,agentName:e.selected.resolved.agent.name,initialMessages:e.selected.initialMessages,initialSessionHead:e.selected.sessionHead}):(0,u.jsx)(`div`,{className:`flex h-full items-center justify-center rounded-lg border border-dashed bg-card text-muted-foreground`,children:e.agents.length===0?`No agents yet.`:`Pick an agent on the left to start chatting.`})})]})}export{_ as component};
@@ -0,0 +1 @@
1
+ import{t as e}from"./jsx-runtime-DGeXAQPT.js";import{c as t}from"./index-iayCEuU2.js";import{t as n}from"./ConfigTabs-pY-V0Rie.js";import{t as r}from"./FieldRow-CNKma5LE.js";var i=e(),a=`Other`;function o(e){let t=new Map;for(let n of e){let e=n.group??a,r=t.get(e)??[];r.push(n),t.set(e,r)}let n=Array.from(t,([e,t])=>({group:e,items:t}));return n.length>1&&n.sort((e,t)=>e.group===a?1:t.group===a?-1:0),n}function s(){let{services:e}=t.useLoaderData(),a=o(e);return(0,i.jsxs)(`main`,{className:`mx-auto max-w-5xl px-6 py-8`,children:[(0,i.jsx)(`h1`,{className:`font-serif text-3xl text-foreground mb-2`,children:`config`}),(0,i.jsx)(n,{active:`services`}),(0,i.jsxs)(`p`,{className:`text-muted-foreground text-sm mb-6`,children:[`Configuration for non-LLM integrations — web search, crawlers, and similar. Fields marked as secrets are encrypted in the `,(0,i.jsx)(`code`,{className:`font-mono`,children:`secrets`}),` `,`table; plaintext URLs and IDs live in the `,(0,i.jsx)(`code`,{className:`font-mono`,children:`config`}),` `,`table.`]}),e.length===0&&(0,i.jsx)(`p`,{className:`text-muted-foreground italic`,children:`(no services registered)`}),a.map(({group:e,items:t})=>(0,i.jsxs)(`section`,{className:`mb-6`,children:[(0,i.jsx)(`h2`,{className:`mb-2 text-xs font-semibold uppercase tracking-wide text-muted-foreground`,children:e}),t.map(e=>(0,i.jsxs)(`section`,{className:`rounded-lg border bg-card p-5 mb-3`,children:[(0,i.jsxs)(`header`,{className:`flex items-center gap-2 mb-3`,children:[(0,i.jsx)(`span`,{className:`font-mono font-semibold`,children:e.id}),(0,i.jsxs)(`span`,{className:`text-muted-foreground text-sm`,children:[`· `,e.displayName]})]}),e.hint&&(0,i.jsx)(`p`,{className:`text-xs text-muted-foreground mb-2`,children:e.hint}),e.fields.map(e=>(0,i.jsx)(r,{field:e},e.envVar))]},e.id))]},e))]})}export{s as component};
@@ -0,0 +1 @@
1
+ import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{Q as n,u as r}from"./preload-helper-CvnapA2_.js";import{_ as i}from"./index-iayCEuU2.js";var a=e(n()),o=t();function s(){let e=i.useLoaderData(),t=r();async function n(e){if(!confirm(`remove skill "${e}"? this deletes the directory on disk.`))return;let n=await fetch(`/api/skills/${encodeURIComponent(e)}`,{method:`DELETE`});if(!n.ok&&n.status!==204){alert(n.statusText);return}await t.invalidate()}return(0,o.jsxs)(`div`,{children:[(0,o.jsx)(`h1`,{children:`skills`}),(0,o.jsx)(c,{onImported:()=>t.invalidate()}),(0,o.jsxs)(`table`,{children:[(0,o.jsx)(`thead`,{children:(0,o.jsxs)(`tr`,{children:[(0,o.jsx)(`th`,{children:`name`}),(0,o.jsx)(`th`,{children:`description`}),(0,o.jsx)(`th`,{children:`source`}),(0,o.jsx)(`th`,{})]})}),(0,o.jsxs)(`tbody`,{children:[e.length===0&&(0,o.jsx)(`tr`,{children:(0,o.jsx)(`td`,{colSpan:4,className:`muted`,children:`no skills installed yet`})}),e.map(e=>(0,o.jsxs)(`tr`,{children:[(0,o.jsx)(`td`,{children:(0,o.jsx)(`code`,{children:e.name})}),(0,o.jsx)(`td`,{children:e.parseError?(0,o.jsxs)(`span`,{className:`text-[#9B3D3D]`,children:[`parse error: `,e.parseError]}):e.description}),(0,o.jsxs)(`td`,{className:`text-[0.78em] text-mocha-light`,children:[(0,o.jsx)(`span`,{className:`font-mono`,children:e.source??`(unknown)`}),e.importedAt&&(0,o.jsx)(`div`,{className:`font-mono`,children:new Date(e.importedAt).toLocaleDateString()})]}),(0,o.jsx)(`td`,{children:(0,o.jsx)(`button`,{type:`button`,className:`ghost-btn`,onClick:()=>n(e.name),children:`remove`})})]},e.name))]})]})]})}function c({onImported:e}){let[t,n]=(0,a.useState)(`openclaw`),[r,i]=(0,a.useState)(``),[s,c]=(0,a.useState)(!1),[l,u]=(0,a.useState)(null),[d,f]=(0,a.useState)(!1),[p,m]=(0,a.useState)(null),[h,g]=(0,a.useState)(!1),_=(0,a.useRef)(null);async function v(n){n.preventDefault(),m(null),g(!0);try{let n;if(t===`zip`){if(!l){m(`choose a .zip file first`),g(!1);return}let e=new FormData;e.set(`file`,l),s&&e.set(`force`,`true`),n=await fetch(`/api/skills/import`,{method:`POST`,body:e})}else{let e;if(t===`openclaw`)e=`openclaw`;else if(e=r.trim(),!e){m(`fill in the server path`),g(!1);return}n=await fetch(`/api/skills/import`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({source:e,force:s})})}if(!n.ok){let e=await n.json().catch(()=>null);throw Error(e?.error??`${n.status} ${n.statusText}`)}i(``),u(null),e()}catch(e){m(e.message)}finally{g(!1)}}function y(e){u(e.target.files?.[0]??null)}function b(e){e.preventDefault(),f(!1);let t=e.dataTransfer?.files;if(!t||t.length===0)return;let n=t[0];if(n){if(!/\.zip$/i.test(n.name)){m(`only .zip archives are supported`);return}if(u(n),_.current){let e=new DataTransfer;e.items.add(n),_.current.files=e.files}}}return(0,o.jsxs)(`section`,{className:`card`,children:[(0,o.jsx)(`h3`,{className:`mb-1`,children:`import skills`}),(0,o.jsxs)(`p`,{className:`muted mb-3 text-[0.88em]`,children:[`pick a source. Each skill's `,(0,o.jsx)(`code`,{children:`SKILL.md`}),` body is injected into the system prompt of any agent it's attached to.`]}),(0,o.jsx)(`div`,{role:`tablist`,className:`mb-4 inline-flex gap-0 rounded-md border border-frost bg-ivory p-1`,children:[{id:`openclaw`,label:`OpenClaw`},{id:`path`,label:`server directory`},{id:`zip`,label:`upload zip`}].map(e=>(0,o.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":t===e.id,onClick:()=>{n(e.id),m(null)},className:`unstyled cursor-pointer rounded-sm border-none bg-transparent px-3 py-1.5 text-[0.88em] font-medium transition-colors ${t===e.id?`bg-snow text-sapphire-deep shadow-baziu-sm`:`text-mocha hover:text-sapphire`}`,children:e.label},e.id))}),p&&(0,o.jsx)(`div`,{className:`err`,children:p}),(0,o.jsxs)(`form`,{onSubmit:v,children:[t===`openclaw`&&(0,o.jsxs)(`p`,{className:`text-[0.92em] text-mocha`,children:[`One-click import of every skill found in `,(0,o.jsx)(`code`,{children:`~/.openclaw/skills`}),` on the server.`]}),t===`path`&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(`p`,{className:`text-[0.92em] text-mocha`,children:[`Import from an absolute path on the server — either a single skill folder (contains `,(0,o.jsx)(`code`,{children:`SKILL.md`}),`) or a parent folder holding many skill subfolders.`]}),(0,o.jsxs)(`label`,{children:[`server path`,(0,o.jsx)(`input`,{value:r,onChange:e=>i(e.target.value),placeholder:`/home/you/my-skills`,required:!0})]})]}),t===`zip`&&(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(`p`,{className:`text-[0.92em] text-mocha`,children:[`Upload a `,(0,o.jsx)(`code`,{children:`.zip`}),` archive whose top level contains one folder per skill — the folder name becomes the skill name.`]}),(0,o.jsxs)(`label`,{onDragOver:e=>{e.preventDefault(),f(!0)},onDragLeave:()=>f(!1),onDrop:b,className:`block cursor-pointer rounded-md border-2 border-dashed p-6 text-center transition-colors ${d?`border-sapphire bg-sapphire-glow text-sapphire-deep`:l?`border-solid border-sapphire-light bg-snow text-chocolate`:`border-frost bg-ivory text-mocha-light hover:border-sapphire hover:bg-sapphire-glow hover:text-sapphire-deep`}`,children:[(0,o.jsx)(`input`,{ref:_,type:`file`,accept:`.zip,application/zip`,onChange:y,className:`absolute h-px w-px overflow-hidden opacity-0`}),l?(0,o.jsx)(`span`,{className:`block break-all font-mono text-[0.85em] text-sapphire-deep`,children:l.name}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(`span`,{className:`block text-[0.95em] font-medium text-mocha`,children:`click to choose a .zip file`}),(0,o.jsx)(`span`,{className:`text-[0.82em]`,children:`or drag & drop here`})]})]})]}),(0,o.jsxs)(`div`,{className:`mt-3 flex flex-wrap items-center gap-3`,children:[(0,o.jsx)(`button`,{type:`submit`,disabled:h,children:h?`importing…`:t===`zip`?`upload & import`:t===`openclaw`?`import from OpenClaw`:`import`}),(0,o.jsxs)(`label`,{className:`m-0 inline-flex cursor-pointer items-center text-[0.88em] text-mocha`,children:[(0,o.jsx)(`input`,{type:`checkbox`,checked:s,onChange:e=>c(e.target.checked)}),`overwrite existing`]})]})]})]})}export{s as component};
@@ -0,0 +1,2 @@
1
+ /*! tailwindcss v4.3.1 | MIT License | https://tailwindcss.com */
2
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-content:"";--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:"DM Sans", system-ui, sans-serif;--font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-mono:"JetBrains Mono", "Fira Code", monospace;--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-800:oklch(43.2% .095 166.913);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-300:oklch(81% .117 11.638);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-800:oklch(45.5% .188 13.697);--color-rose-900:oklch(41% .159 10.272);--color-black:#000;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-normal:0em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-sm:6px;--radius-md:10px;--radius-lg:16px;--radius-xl:22px;--radius-2xl:28px;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-xs:4px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--font-heading:"DM Serif Display", Georgia, serif;--font-display:"DM Serif Display", Georgia, serif;--font-body:"DM Sans", system-ui, sans-serif;--color-cream:#f5f0e8;--color-ivory:#faf8f4;--color-frost:#e8e2d8;--color-fawn:#d4cab8;--color-chocolate:#3d2b1f;--color-charcoal:#2a1f16;--color-mocha:#7a6555;--color-mocha-light:#9e8e7e;--color-sapphire:#4a7c9b;--color-sapphire-deep:#3a6580;--color-sapphire-light:#6ba3c2;--color-sapphire-glow:#4a7c9b1f;--color-rose-baziu:#c4878a;--color-snow:#fff;--shadow-baziu-sm:0 1px 3px #2a1f160f;--shadow-baziu-md:0 4px 12px #2a1f1614;--color-ring:var(--ring);--color-input:var(--input);--color-border:var(--border);--color-destructive:var(--destructive);--color-accent-foreground:var(--accent-foreground);--color-accent:var(--accent);--color-muted-foreground:var(--muted-foreground);--color-muted:var(--muted);--color-secondary-foreground:var(--secondary-foreground);--color-secondary:var(--secondary);--color-primary-foreground:var(--primary-foreground);--color-primary:var(--primary);--color-popover-foreground:var(--popover-foreground);--color-popover:var(--popover);--color-card-foreground:var(--card-foreground);--color-card:var(--card);--color-foreground:var(--foreground);--color-background:var(--background)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--color-border);outline-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklab, var(--color-ring) 50%, transparent)}}body{background-color:var(--color-background);color:var(--color-foreground);font-family:var(--font-body);-webkit-font-smoothing:antialiased;min-height:100vh;font-size:15px;line-height:1.6}html{font-family:var(--font-sans);scrollbar-gutter:stable;overflow-y:scroll}html[data-layout=home],body[data-layout=home]{height:100dvh;overflow:hidden}body:before{content:"";opacity:.025;pointer-events:none;z-index:9999;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");background-repeat:repeat;background-size:256px;position:fixed;inset:0}h1,h2,h3{font-family:var(--font-display);color:var(--color-charcoal);letter-spacing:-.01em;font-weight:400}h1{margin-bottom:.25rem;font-size:2rem}h2{font-size:1.5rem}h3{color:var(--color-mocha);margin-bottom:.4rem;font-size:1.15rem}code{font-family:var(--font-mono);background:var(--color-frost);border-radius:var(--radius-sm);color:var(--color-mocha);padding:.15em .4em;font-size:.88em}a{color:var(--color-sapphire);text-decoration:none;transition:color .2s}a:hover{color:var(--color-sapphire-deep)}}@layer components{label{color:var(--color-mocha);margin:.6rem 0;font-size:.9em;display:block}input[type=text],input[type=password],input[type=number],input:not([type]),select,textarea{font:inherit;border:1.5px solid var(--color-frost);border-radius:var(--radius-md);background:var(--color-ivory);width:100%;color:var(--color-chocolate);outline:none;padding:.5rem .75rem;font-size:.95em;transition:all .2s}input:focus,select:focus,textarea:focus{border-color:var(--color-sapphire);box-shadow:0 0 0 3px var(--color-sapphire-glow);background:var(--color-snow)}input::placeholder{color:var(--color-fawn)}input[type=checkbox]{accent-color:var(--color-sapphire);vertical-align:middle;width:16px;height:16px;margin-right:.35rem}button[type=submit]:not(.unstyled),.btn-primary{font:inherit;letter-spacing:.01em;border-radius:var(--radius-md);cursor:pointer;background:var(--color-sapphire);color:var(--color-snow);border:none;justify-content:center;align-items:center;gap:.4rem;padding:.5rem 1.25rem;font-size:.92em;font-weight:600;transition:all .2s;display:inline-flex}button[type=submit]:not(.unstyled):hover,.btn-primary:hover{background:var(--color-sapphire-deep);color:var(--color-snow);box-shadow:var(--shadow-baziu-md);transform:translateY(-1px)}button[type=submit]:not(.unstyled):active,.btn-primary:active{transform:translateY(0)}button[type=submit]:not(.unstyled):disabled,button[type=submit]:not(.unstyled)[disabled],.btn-primary:disabled,.btn-primary[disabled]{opacity:.5;cursor:not-allowed;box-shadow:none;transform:none}.ghost-btn{color:var(--color-mocha);border:1.5px solid var(--color-frost);font:inherit;border-radius:var(--radius-md);cursor:pointer;background:0 0;align-items:center;gap:.3rem;padding:.35rem .85rem;font-size:.92em;font-weight:500;transition:all .2s;display:inline-flex}.ghost-btn:hover{border-color:var(--color-sapphire-light);color:var(--color-sapphire);background:var(--color-sapphire-glow)}.ghost-btn:disabled,.ghost-btn[disabled]{opacity:.5;cursor:not-allowed}.danger-btn{color:var(--destructive);border:1.5px solid var(--destructive);background:0 0;align-items:center;gap:.3rem;display:inline-flex}@supports (color:color-mix(in lab, red, red)){.danger-btn{border:1.5px solid color-mix(in srgb, var(--destructive) 30%, transparent)}}.danger-btn{font:inherit;border-radius:var(--radius-md);cursor:pointer;padding:.35rem .85rem;font-size:.92em;font-weight:500;transition:all .2s}.danger-btn:hover{background:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.danger-btn:hover{background:color-mix(in srgb, var(--destructive) 10%, transparent)}}.danger-btn:hover{border-color:var(--destructive)}.danger-btn:disabled,.danger-btn[disabled]{opacity:.5;cursor:not-allowed}table{border-collapse:separate;border-spacing:0;background:var(--color-snow);border:1px solid var(--color-frost);border-radius:var(--radius-lg);width:100%;margin:1rem 0;overflow:hidden}thead{background:var(--color-ivory)}th{text-align:left;text-transform:uppercase;letter-spacing:.06em;color:var(--color-mocha-light);border-bottom:1px solid var(--color-frost);padding:.65rem 1rem;font-size:.82em;font-weight:600}td{border-bottom:1px solid var(--color-frost);vertical-align:middle;padding:.6rem 1rem;font-size:.93em}tr:last-child td{border-bottom:none}tbody tr{transition:background .2s}tbody tr:hover{background:var(--color-sapphire-glow)}.md-content>*+*{margin-top:.65em}.md-content h1,.md-content h2,.md-content h3,.md-content h4,.md-content h5,.md-content h6{font-family:var(--font-serif);color:var(--color-chocolate);margin-top:1.1em;font-weight:600;line-height:1.3}.md-content h1{font-size:1.45em}.md-content h2{font-size:1.25em}.md-content h3{font-size:1.1em}.md-content h4,.md-content h5,.md-content h6{font-size:1em}.md-content p{line-height:1.55}.md-content ul,.md-content ol{padding-left:1.5em;line-height:1.55}.md-content ul{list-style:outside}.md-content ol{list-style:decimal}.md-content li+li,.md-content li>ul,.md-content li>ol{margin-top:.25em}.md-content a{color:var(--color-sapphire);text-underline-offset:2px;text-decoration:underline}.md-content a:hover{color:var(--color-sapphire-deep)}.md-content strong{color:var(--color-chocolate);font-weight:600}.md-content em{font-style:italic}.md-content code{font-family:var(--font-mono,ui-monospace, monospace);background:var(--color-frost);border-radius:var(--radius-sm,4px);color:var(--color-chocolate);padding:.1em .35em;font-size:.88em}.md-content pre{background:var(--color-ivory);border:1px solid var(--color-frost);border-radius:var(--radius-md);margin:.7em 0;padding:.75rem 1rem;font-size:.88em;line-height:1.5;overflow-x:auto}.md-content pre code{font-size:inherit;background:0 0;border-radius:0;padding:0}.md-content blockquote{border-left:3px solid var(--color-frost);color:var(--color-mocha-light);padding-left:.9rem;font-style:italic}.md-content hr{border:none;border-top:1px solid var(--color-frost);margin:1em 0}.md-content table{border-collapse:collapse;margin:.5em 0;font-size:.93em}.md-content th,.md-content td{border:1px solid var(--color-frost);text-align:left;padding:.4rem .7rem}.md-content th{background:var(--color-frost);font-weight:600}.md-content img{border-radius:var(--radius-sm,4px);max-width:100%;height:auto}.card{background:var(--color-snow);border:1px solid var(--color-frost);border-radius:var(--radius-lg);box-shadow:var(--shadow-baziu-sm);margin:1.25rem 0;padding:1.5rem;transition:box-shadow .2s}.card:hover{box-shadow:var(--shadow-baziu-md)}.card h3{font-family:var(--font-body);text-transform:uppercase;letter-spacing:.06em;color:var(--color-mocha-light);margin-bottom:1rem;font-size:.92em;font-weight:600}.muted{color:var(--color-mocha-light);font-size:.9em}.err{color:var(--destructive);background:var(--destructive);padding:.75rem 1rem}@supports (color:color-mix(in lab, red, red)){.err{background:color-mix(in srgb, var(--destructive) 12%, transparent)}}.err{border:1px solid var(--destructive)}@supports (color:color-mix(in lab, red, red)){.err{border:1px solid color-mix(in srgb, var(--destructive) 25%, transparent)}}.err{border-radius:var(--radius-md);margin-bottom:1rem;font-size:.92em}}@layer utilities{.\@container\/card-header{container:card-header/inline-size}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:0}.inset-x-0{inset-inline:0}.-top-1\.5{top:calc(var(--spacing) * -1.5)}.top-1{top:var(--spacing)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-\[calc\(100\%\+0\.3rem\)\]{top:calc(100% + .3rem)}.-right-1\.5{right:calc(var(--spacing) * -1.5)}.right-0{right:0}.right-1{right:var(--spacing)}.right-2{right:calc(var(--spacing) * 2)}.bottom-0{bottom:0}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-0{left:0}.left-1{left:var(--spacing)}.left-1\/2{left:50%}.isolate{isolation:isolate}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.col-span-4{grid-column:span 4/span 4}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.float-right{float:right}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.m-0{margin:0}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.-mx-4{margin-inline:calc(var(--spacing) * -4)}.mx-5{margin-inline:calc(var(--spacing) * 5)}.mx-auto{margin-inline:auto}.my-1{margin-block:var(--spacing)}.my-1\.5{margin-block:calc(var(--spacing) * 1.5)}.my-2{margin-block:calc(var(--spacing) * 2)}.my-3{margin-block:calc(var(--spacing) * 3)}.my-4{margin-block:calc(var(--spacing) * 4)}.my-5{margin-block:calc(var(--spacing) * 5)}.my-6{margin-block:calc(var(--spacing) * 6)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-16{margin-top:calc(var(--spacing) * 16)}.mr-1{margin-right:var(--spacing)}.mr-1\.5{margin-right:calc(var(--spacing) * 1.5)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-6{margin-right:calc(var(--spacing) * 6)}.-mb-3{margin-bottom:calc(var(--spacing) * -3)}.-mb-4{margin-bottom:calc(var(--spacing) * -4)}.-mb-px{margin-bottom:-1px}.mb-0{margin-bottom:0}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-5{margin-bottom:calc(var(--spacing) * 5)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.field-sizing-content{field-sizing:content}.aspect-square{aspect-ratio:1}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-3{height:calc(var(--spacing) * 3)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-16{height:calc(var(--spacing) * 16)}.h-\[1\.3rem\]{height:1.3rem}.h-\[28px\]{height:28px}.h-\[70vh\]{height:70vh}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-dvh{height:100dvh}.h-full{height:100%}.h-px{height:1px}.max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.max-h-40{max-height:calc(var(--spacing) * 40)}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-\[22rem\]{max-height:22rem}.max-h-\[200px\]{max-height:200px}.max-h-\[520px\]{max-height:520px}.max-h-\[640px\]{max-height:640px}.min-h-0{min-height:0}.min-h-16{min-height:calc(var(--spacing) * 16)}.min-h-\[2\.4rem\]{min-height:2.4rem}.min-h-\[80px\]{min-height:80px}.min-h-\[240px\]{min-height:240px}.min-h-\[360px\]{min-height:360px}.min-h-dvh{min-height:100dvh}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-16{width:calc(var(--spacing) * 16)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-40{width:calc(var(--spacing) * 40)}.w-48{width:calc(var(--spacing) * 48)}.w-56{width:calc(var(--spacing) * 56)}.w-72{width:calc(var(--spacing) * 72)}.w-\[1\.6rem\]{width:1.6rem}.w-\[28px\]{width:28px}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-\[85\%\]{max-width:85%}.max-w-\[160px\]{max-width:160px}.max-w-\[180px\]{max-width:180px}.max-w-\[260px\]{max-width:260px}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:0}.min-w-36{min-width:calc(var(--spacing) * 36)}.min-w-\[1\.4em\]{min-width:1.4em}.min-w-\[14rem\]{min-width:14rem}.min-w-\[16rem\]{min-width:16rem}.min-w-\[18rem\]{min-width:18rem}.flex-1{flex:1}.flex-none{flex:none}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.origin-\(--radix-select-content-transform-origin\){transform-origin:var(--radix-select-content-transform-origin)}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.animate-pulse{animation:var(--animate-pulse)}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.scroll-my-1{scroll-margin-block:var(--spacing)}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[2rem_1fr\]{grid-template-columns:2rem 1fr}.grid-cols-\[12rem_minmax\(14rem\,1fr\)_auto_auto\]{grid-template-columns:12rem minmax(14rem,1fr) auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.place-content-center{place-content:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0{gap:0}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-\[0\.45rem\]{gap:.45rem}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:var(--spacing)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-x-5{column-gap:calc(var(--spacing) * 5)}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 2) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-x-reverse)))}.gap-y-1{row-gap:var(--spacing)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.self-center{align-self:center}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[4px\]{border-radius:4px}.rounded-\[14px_14px_4px_14px\]{border-radius:14px 14px 4px}.rounded-\[16px\]{border-radius:16px}.rounded-\[min\(var\(--radius-md\)\,10px\)\]{border-radius:min(var(--radius-md), 10px)}.rounded-\[min\(var\(--radius-md\)\,12px\)\]{border-radius:min(var(--radius-md), 12px)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t-xl{border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}.rounded-r-sm{border-top-right-radius:var(--radius-sm);border-bottom-right-radius:var(--radius-sm)}.rounded-b-xl{border-bottom-right-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-\[3px\]{border-left-style:var(--tw-border-style);border-left-width:3px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-\[\#9B3D3D\]{border-color:#9b3d3d}.border-\[\#bcd9bc\]{border-color:#bcd9bc}.border-\[rgba\(196\,135\,138\,0\.4\)\]{border-color:#c4878a66}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-400{border-color:var(--color-amber-400)}.border-border{border-color:var(--color-border)}.border-fawn{border-color:var(--color-fawn)}.border-frost{border-color:var(--color-frost)}.border-frost\/50{border-color:#e8e2d880}@supports (color:color-mix(in lab, red, red)){.border-frost\/50{border-color:color-mix(in oklab, var(--color-frost) 50%, transparent)}}.border-input{border-color:var(--color-input)}.border-primary{border-color:var(--color-primary)}.border-rose-300{border-color:var(--color-rose-300)}.border-rose-400{border-color:var(--color-rose-400)}.border-sapphire{border-color:var(--color-sapphire)}.border-sapphire-light{border-color:var(--color-sapphire-light)}.border-transparent{border-color:#0000}.border-l-\[\#9B3D3D\]{border-left-color:#9b3d3d}.border-l-mocha-light{border-left-color:var(--color-mocha-light)}.bg-\[\#eef7ee\]{background-color:#eef7ee}.bg-\[rgba\(42\,31\,22\,0\.04\)\]{background-color:#2a1f160a}.bg-\[rgba\(196\,135\,138\,0\.06\)\]{background-color:#c4878a0f}.bg-\[rgba\(196\,135\,138\,0\.08\)\]{background-color:#c4878a14}.bg-accent,.bg-accent\/40{background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.bg-accent\/40{background-color:color-mix(in oklab, var(--color-accent) 40%, transparent)}}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-100{background-color:var(--color-amber-100)}.bg-background{background-color:var(--color-background)}.bg-black\/10{background-color:#0000001a}@supports (color:color-mix(in lab, red, red)){.bg-black\/10{background-color:color-mix(in oklab, var(--color-black) 10%, transparent)}}.bg-black\/30{background-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.bg-black\/30{background-color:color-mix(in oklab, var(--color-black) 30%, transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-border{background-color:var(--color-border)}.bg-card{background-color:var(--color-card)}.bg-cream{background-color:var(--color-cream)}.bg-destructive\/10{background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.bg-destructive\/10{background-color:color-mix(in oklab, var(--color-destructive) 10%, transparent)}}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-fawn\/35{background-color:#d4cab859}@supports (color:color-mix(in lab, red, red)){.bg-fawn\/35{background-color:color-mix(in oklab, var(--color-fawn) 35%, transparent)}}.bg-frost{background-color:var(--color-frost)}.bg-frost\/40{background-color:#e8e2d866}@supports (color:color-mix(in lab, red, red)){.bg-frost\/40{background-color:color-mix(in oklab, var(--color-frost) 40%, transparent)}}.bg-ivory{background-color:var(--color-ivory)}.bg-mocha-light\/60{background-color:#9e8e7e99}@supports (color:color-mix(in lab, red, red)){.bg-mocha-light\/60{background-color:color-mix(in oklab, var(--color-mocha-light) 60%, transparent)}}.bg-muted,.bg-muted\/30{background-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/30{background-color:color-mix(in oklab, var(--color-muted) 30%, transparent)}}.bg-muted\/50{background-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab, var(--color-muted) 50%, transparent)}}.bg-popover{background-color:var(--color-popover)}.bg-primary{background-color:var(--color-primary)}.bg-primary-foreground{background-color:var(--color-primary-foreground)}.bg-rose-50{background-color:var(--color-rose-50)}.bg-rose-100{background-color:var(--color-rose-100)}.bg-sapphire{background-color:var(--color-sapphire)}.bg-sapphire-glow{background-color:var(--color-sapphire-glow)}.bg-sapphire-glow\/80{background-color:#4a7c9b19}@supports (color:color-mix(in lab, red, red)){.bg-sapphire-glow\/80{background-color:color-mix(in oklab, var(--color-sapphire-glow) 80%, transparent)}}.bg-secondary{background-color:var(--color-secondary)}.bg-snow{background-color:var(--color-snow)}.bg-transparent{background-color:#0000}.bg-clip-padding{background-clip:padding-box}.object-cover{object-fit:cover}.p-1{padding:var(--spacing)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.p-\[3px\]{padding:3px}.px-0{padding-inline:0}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.pt-1{padding-top:var(--spacing)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-14{padding-right:calc(var(--spacing) * 14)}.pb-0\.5{padding-bottom:calc(var(--spacing) * .5)}.pb-12{padding-bottom:calc(var(--spacing) * 12)}.pl-1\.5{padding-left:calc(var(--spacing) * 1.5)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-2\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-6{padding-left:calc(var(--spacing) * 6)}.text-center{text-align:center}.text-left{text-align:left}.align-\[-1px\]{vertical-align:-1px}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.font-body{font-family:var(--font-body)}.font-display{font-family:var(--font-display)}.font-heading{font-family:var(--font-heading)}.font-mono{font-family:var(--font-mono)}.font-serif{font-family:var(--font-serif)}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.7em\]{font-size:.7em}.text-\[0\.8em\]{font-size:.8em}.text-\[0\.8rem\]{font-size:.8rem}.text-\[0\.9em\]{font-size:.9em}.text-\[0\.72em\]{font-size:.72em}.text-\[0\.75em\]{font-size:.75em}.text-\[0\.78em\]{font-size:.78em}.text-\[0\.82em\]{font-size:.82em}.text-\[0\.84em\]{font-size:.84em}.text-\[0\.85em\]{font-size:.85em}.text-\[0\.86em\]{font-size:.86em}.text-\[0\.88em\]{font-size:.88em}.text-\[0\.92em\]{font-size:.92em}.text-\[0\.93em\]{font-size:.93em}.text-\[0\.95em\]{font-size:.95em}.text-\[1\.2rem\]{font-size:1.2rem}.text-\[1\.35rem\]{font-size:1.35rem}.text-\[1em\]{font-size:1em}.text-\[2rem\]{font-size:2rem}.text-\[10px\]{font-size:10px}.leading-\[1\.4\]{--tw-leading:1.4;line-height:1.4}.leading-\[1\.5\]{--tw-leading:1.5;line-height:1.5}.leading-\[1\.45\]{--tw-leading:1.45;line-height:1.45}.leading-\[1\.55\]{--tw-leading:1.55;line-height:1.55}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[-0\.02em\]{--tw-tracking:-.02em;letter-spacing:-.02em}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#3b7a3b\]{color:#3b7a3b}.text-\[\#7a4e2a\]{color:#7a4e2a}.text-\[\#9B3D3D\]{color:#9b3d3d}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-card-foreground{color:var(--color-card-foreground)}.text-charcoal{color:var(--color-charcoal)}.text-chocolate{color:var(--color-chocolate)}.text-current{color:currentColor}.text-destructive{color:var(--color-destructive)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-800{color:var(--color-emerald-800)}.text-fawn{color:var(--color-fawn)}.text-foreground,.text-foreground\/60{color:var(--color-foreground)}@supports (color:color-mix(in lab, red, red)){.text-foreground\/60{color:color-mix(in oklab, var(--color-foreground) 60%, transparent)}}.text-mocha{color:var(--color-mocha)}.text-mocha-light{color:var(--color-mocha-light)}.text-mocha-light\/40{color:#9e8e7e66}@supports (color:color-mix(in lab, red, red)){.text-mocha-light\/40{color:color-mix(in oklab, var(--color-mocha-light) 40%, transparent)}}.text-muted-foreground{color:var(--color-muted-foreground)}.text-popover-foreground{color:var(--color-popover-foreground)}.text-primary{color:var(--color-primary)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-rose-700{color:var(--color-rose-700)}.text-rose-800{color:var(--color-rose-800)}.text-rose-900{color:var(--color-rose-900)}.text-rose-baziu{color:var(--color-rose-baziu)}.text-sapphire{color:var(--color-sapphire)}.text-sapphire-deep{color:var(--color-sapphire-deep)}.text-secondary-foreground{color:var(--color-secondary-foreground)}.text-snow{color:var(--color-snow)}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-45{opacity:.45}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-65{opacity:.65}.opacity-70{opacity:.7}.opacity-80{opacity:.8}.opacity-90{opacity:.9}.shadow-baziu-md{--tw-shadow:0 4px 12px var(--tw-shadow-color,#2a1f1614);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-baziu-sm{--tw-shadow:0 1px 3px var(--tw-shadow-color,#2a1f160f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-foreground\/10{--tw-ring-color:var(--color-foreground)}@supports (color:color-mix(in lab, red, red)){.ring-foreground\/10{--tw-ring-color:color-mix(in oklab, var(--color-foreground) 10%, transparent)}}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.backdrop-blur-\[1px\]{--tw-backdrop-blur:blur(1px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-none{transition-property:none}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}.running{animation-play-state:running}.group-open\/details\:rotate-90:is(:where(.group\/details):is([open],:popover-open,:open) *){rotate:90deg}.group-focus-within\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media (hover:hover){.group-hover\:scale-\[1\.08\]:is(:where(.group):hover *){scale:1.08}.group-hover\:rotate-\[-8deg\]:is(:where(.group):hover *){rotate:-8deg}.group-hover\:opacity-100:is(:where(.group):hover *),.group-hover\/row\:opacity-100:is(:where(.group\/row):hover *){opacity:1}}.group-has-disabled\/field\:opacity-50:is(:where(.group\/field):has(:disabled) *){opacity:.5}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.group-data-\[size\=sm\]\/card\:p-3:is(:where(.group\/card)[data-size=sm] *){padding:calc(var(--spacing) * 3)}.group-data-\[size\=sm\]\/card\:px-3:is(:where(.group\/card)[data-size=sm] *){padding-inline:calc(var(--spacing) * 3)}.group-data-\[size\=sm\]\/card\:text-sm:is(:where(.group\/card)[data-size=sm] *){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.group-data-\[variant\=line\]\/tabs-list\:bg-transparent:is(:where(.group\/tabs-list)[data-variant=line] *){background-color:#0000}.group-data-horizontal\/tabs\:h-8:is(:where(.group\/tabs):where([data-orientation=horizontal]) *){height:calc(var(--spacing) * 8)}.group-data-vertical\/tabs\:h-fit:is(:where(.group\/tabs):where([data-orientation=vertical]) *){height:fit-content}.group-data-vertical\/tabs\:w-full:is(:where(.group\/tabs):where([data-orientation=vertical]) *){width:100%}.group-data-vertical\/tabs\:flex-col:is(:where(.group\/tabs):where([data-orientation=vertical]) *){flex-direction:column}.group-data-vertical\/tabs\:justify-start:is(:where(.group\/tabs):where([data-orientation=vertical]) *){justify-content:flex-start}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-6::file-selector-button{height:calc(var(--spacing) * 6)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--color-foreground)}.placeholder\:text-muted-foreground::placeholder{color:var(--color-muted-foreground)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-x-3:after{content:var(--tw-content);inset-inline:calc(var(--spacing) * -3)}.after\:-inset-y-2:after{content:var(--tw-content);inset-block:calc(var(--spacing) * -2)}.after\:bg-foreground:after{content:var(--tw-content);background-color:var(--color-foreground)}.after\:opacity-0:after{content:var(--tw-content);opacity:0}.after\:transition-opacity:after{content:var(--tw-content);transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.group-data-horizontal\/tabs\:after\:inset-x-0:is(:where(.group\/tabs):where([data-orientation=horizontal]) *):after{content:var(--tw-content);inset-inline:0}.group-data-horizontal\/tabs\:after\:bottom-\[-5px\]:is(:where(.group\/tabs):where([data-orientation=horizontal]) *):after{content:var(--tw-content);bottom:-5px}.group-data-horizontal\/tabs\:after\:h-0\.5:is(:where(.group\/tabs):where([data-orientation=horizontal]) *):after{content:var(--tw-content);height:calc(var(--spacing) * .5)}.group-data-vertical\/tabs\:after\:inset-y-0:is(:where(.group\/tabs):where([data-orientation=vertical]) *):after{content:var(--tw-content);inset-block:0}.group-data-vertical\/tabs\:after\:-right-1:is(:where(.group\/tabs):where([data-orientation=vertical]) *):after{content:var(--tw-content);right:calc(var(--spacing) * -1)}.group-data-vertical\/tabs\:after\:w-0\.5:is(:where(.group\/tabs):where([data-orientation=vertical]) *):after{content:var(--tw-content);width:calc(var(--spacing) * .5)}.first\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.first\:pt-0:first-child{padding-top:0}.last\:mb-0:last-child{margin-bottom:0}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.focus-within\:opacity-100:focus-within{opacity:1}@media (hover:hover){.hover\:border-\[\#bcd9bc\]:hover{border-color:#bcd9bc}.hover\:border-foreground\/30:hover{border-color:var(--color-foreground)}@supports (color:color-mix(in lab, red, red)){.hover\:border-foreground\/30:hover{border-color:color-mix(in oklab, var(--color-foreground) 30%, transparent)}}.hover\:border-frost:hover{border-color:var(--color-frost)}.hover\:border-primary:hover{border-color:var(--color-primary)}.hover\:border-sapphire:hover{border-color:var(--color-sapphire)}.hover\:border-sapphire-light:hover{border-color:var(--color-sapphire-light)}.hover\:bg-\[\#eef7ee\]:hover{background-color:#eef7ee}.hover\:bg-\[rgba\(196\,135\,138\,0\.08\)\]:hover{background-color:#c4878a14}.hover\:bg-accent:hover,.hover\:bg-accent\/30:hover{background-color:var(--color-accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/30:hover{background-color:color-mix(in oklab, var(--color-accent) 30%, transparent)}}.hover\:bg-destructive\/20:hover{background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/20:hover{background-color:color-mix(in oklab, var(--color-destructive) 20%, transparent)}}.hover\:bg-muted:hover,.hover\:bg-muted\/50:hover{background-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab, var(--color-muted) 50%, transparent)}}.hover\:bg-rose-50:hover{background-color:var(--color-rose-50)}.hover\:bg-sapphire-deep:hover{background-color:var(--color-sapphire-deep)}.hover\:bg-sapphire-glow:hover{background-color:var(--color-sapphire-glow)}.hover\:bg-secondary\/80:hover{background-color:var(--color-secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab, var(--color-secondary) 80%, transparent)}}.hover\:bg-snow:hover{background-color:var(--color-snow)}.hover\:text-\[\#3b7a3b\]:hover{color:#3b7a3b}.hover\:text-\[\#9B3D3D\]:hover{color:#9b3d3d}.hover\:text-foreground:hover{color:var(--color-foreground)}.hover\:text-mocha:hover{color:var(--color-mocha)}.hover\:text-sapphire:hover{color:var(--color-sapphire)}.hover\:text-sapphire-deep:hover{color:var(--color-sapphire-deep)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}}.focus\:border-sapphire:focus{border-color:var(--color-sapphire)}.focus\:bg-accent:focus{background-color:var(--color-accent)}.focus\:text-accent-foreground:focus{color:var(--color-accent-foreground)}.focus\:shadow-\[0_0_0_3px_var\(--color-sapphire-glow\)\]:focus{--tw-shadow:0 0 0 3px var(--tw-shadow-color,var(--color-sapphire-glow));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-ring\/30:focus{--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){.focus\:ring-ring\/30:focus{--tw-ring-color:color-mix(in oklab, var(--color-ring) 30%, transparent)}}:is(.not-data-\[variant\=destructive\]\:focus\:\*\*\:text-accent-foreground:not([data-variant=destructive]):focus *){color:var(--color-accent-foreground)}.focus-visible\:border-destructive\/40:focus-visible{border-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:border-destructive\/40:focus-visible{border-color:color-mix(in oklab, var(--color-destructive) 40%, transparent)}}.focus-visible\:border-ring:focus-visible{border-color:var(--color-ring)}.focus-visible\:ring-3:focus-visible,.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-destructive) 20%, transparent)}}.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--color-ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-ring) 50%, transparent)}}.focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:var(--color-ring)}.active\:not-aria-\[haspopup\]\:translate-y-px:active:not([aria-haspopup]){--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:bg-input\/50:disabled{background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){.disabled\:bg-input\/50:disabled{background-color:color-mix(in oklab, var(--color-input) 50%, transparent)}}.disabled\:opacity-50:disabled{opacity:.5}@media (hover:hover){.disabled\:hover\:bg-transparent:disabled:hover{background-color:#0000}}:where([data-slot=button-group]) .in-data-\[slot\=button-group\]\:rounded-lg{border-radius:var(--radius-lg)}.has-aria-expanded\:bg-muted\/50:has([aria-expanded=true]){background-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.has-aria-expanded\:bg-muted\/50:has([aria-expanded=true]){background-color:color-mix(in oklab, var(--color-muted) 50%, transparent)}}.has-data-\[icon\=inline-end\]\:pr-1:has([data-icon=inline-end]){padding-right:var(--spacing)}.has-data-\[icon\=inline-end\]\:pr-1\.5:has([data-icon=inline-end]){padding-right:calc(var(--spacing) * 1.5)}.has-data-\[icon\=inline-end\]\:pr-2:has([data-icon=inline-end]){padding-right:calc(var(--spacing) * 2)}.has-data-\[icon\=inline-start\]\:pl-1:has([data-icon=inline-start]){padding-left:var(--spacing)}.has-data-\[icon\=inline-start\]\:pl-1\.5:has([data-icon=inline-start]){padding-left:calc(var(--spacing) * 1.5)}.has-data-\[icon\=inline-start\]\:pl-2:has([data-icon=inline-start]){padding-left:calc(var(--spacing) * 2)}.has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\[slot\=card-description\]\:grid-rows-\[auto_auto\]:has([data-slot=card-description]){grid-template-rows:auto auto}.has-data-\[slot\=card-footer\]\:pb-0:has([data-slot=card-footer]){padding-bottom:0}.has-\[\>img\:first-child\]\:pt-0:has(>img:first-child){padding-top:0}.aria-expanded\:bg-muted[aria-expanded=true]{background-color:var(--color-muted)}.aria-expanded\:bg-secondary[aria-expanded=true]{background-color:var(--color-secondary)}.aria-expanded\:text-foreground[aria-expanded=true]{color:var(--color-foreground)}.aria-expanded\:text-secondary-foreground[aria-expanded=true]{color:var(--color-secondary-foreground)}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--color-destructive)}.aria-invalid\:ring-3[aria-invalid=true]{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--color-destructive) 20%, transparent)}}.aria-invalid\:aria-checked\:border-primary[aria-invalid=true][aria-checked=true]{border-color:var(--color-primary)}.data-placeholder\:text-muted-foreground[data-placeholder]{color:var(--color-muted-foreground)}.data-\[align-trigger\=true\]\:animate-none[data-align-trigger=true]{animation:none}.data-\[position\=popper\]\:h-\(--radix-select-trigger-height\)[data-position=popper]{height:var(--radix-select-trigger-height)}.data-\[position\=popper\]\:w-full[data-position=popper]{width:100%}.data-\[position\=popper\]\:min-w-\(--radix-select-trigger-width\)[data-position=popper]{min-width:var(--radix-select-trigger-width)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:var(--spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:var(--spacing);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\[size\=default\]\:h-8[data-size=default]{height:calc(var(--spacing) * 8)}.data-\[size\=sm\]\:h-7[data-size=sm]{height:calc(var(--spacing) * 7)}.data-\[size\=sm\]\:gap-3[data-size=sm]{gap:calc(var(--spacing) * 3)}.data-\[size\=sm\]\:rounded-\[min\(var\(--radius-md\)\,10px\)\][data-size=sm]{border-radius:min(var(--radius-md), 10px)}.data-\[size\=sm\]\:py-3[data-size=sm]{padding-block:calc(var(--spacing) * 3)}.data-\[size\=sm\]\:has-data-\[slot\=card-footer\]\:pb-0[data-size=sm]:has([data-slot=card-footer]){padding-bottom:0}:is(.\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\*\:data-\[slot\=select-value\]\:gap-1\.5>*)[data-slot=select-value]{gap:calc(var(--spacing) * 1.5)}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--color-muted)}.data-\[variant\=line\]\:rounded-none[data-variant=line]{border-radius:0}@supports ((-webkit-backdrop-filter:var(--tw)) or (backdrop-filter:var(--tw))){.supports-backdrop-filter\:backdrop-blur-xs{--tw-backdrop-blur:blur(var(--blur-xs));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}}@media (width>=40rem){.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:grid-cols-\[16rem_minmax\(0\,1fr\)\]{grid-template-columns:16rem minmax(0,1fr)}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}}@media (width>=48rem){.md\:grid-cols-\[360px_1fr\]{grid-template-columns:360px 1fr}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}@media (width>=64rem){.lg\:grid-cols-\[320px_1fr\]{grid-template-columns:320px 1fr}}.dark\:border-input:is(.dark *){border-color:var(--color-input)}.dark\:bg-destructive\/20:is(.dark *){background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-destructive\/20:is(.dark *){background-color:color-mix(in oklab, var(--color-destructive) 20%, transparent)}}.dark\:bg-input\/30:is(.dark *){background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-input\/30:is(.dark *){background-color:color-mix(in oklab, var(--color-input) 30%, transparent)}}.dark\:text-muted-foreground:is(.dark *){color:var(--color-muted-foreground)}@media (hover:hover){.dark\:hover\:bg-destructive\/30:is(.dark *):hover{background-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-destructive\/30:is(.dark *):hover{background-color:color-mix(in oklab, var(--color-destructive) 30%, transparent)}}.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:color-mix(in oklab, var(--color-input) 50%, transparent)}}.dark\:hover\:bg-muted\/50:is(.dark *):hover{background-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-muted\/50:is(.dark *):hover{background-color:color-mix(in oklab, var(--color-muted) 50%, transparent)}}.dark\:hover\:text-foreground:is(.dark *):hover{color:var(--color-foreground)}}.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-destructive) 40%, transparent)}}.dark\:disabled\:bg-input\/80:is(.dark *):disabled{background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){.dark\:disabled\:bg-input\/80:is(.dark *):disabled{background-color:color-mix(in oklab, var(--color-input) 80%, transparent)}}.dark\:aria-invalid\:border-destructive\/50:is(.dark *)[aria-invalid=true]{border-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:aria-invalid\:border-destructive\/50:is(.dark *)[aria-invalid=true]{border-color:color-mix(in oklab, var(--color-destructive) 50%, transparent)}}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--color-destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--color-destructive) 40%, transparent)}}.data-open\:animate-in:where([data-state=open]),.data-open\:animate-in:where([data-open]:not([data-open=false])){animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-open\:fade-in-0:where([data-state=open]),.data-open\:fade-in-0:where([data-open]:not([data-open=false])){--tw-enter-opacity:0}.data-open\:zoom-in-95:where([data-state=open]),.data-open\:zoom-in-95:where([data-open]:not([data-open=false])){--tw-enter-scale:.95}.data-closed\:animate-out:where([data-state=closed]),.data-closed\:animate-out:where([data-closed]:not([data-closed=false])){animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-closed\:fade-out-0:where([data-state=closed]),.data-closed\:fade-out-0:where([data-closed]:not([data-closed=false])){--tw-exit-opacity:0}.data-closed\:zoom-out-95:where([data-state=closed]),.data-closed\:zoom-out-95:where([data-closed]:not([data-closed=false])){--tw-exit-scale:.95}.data-checked\:border-primary:where([data-state=checked]),.data-checked\:border-primary:where([data-checked]:not([data-checked=false])){border-color:var(--color-primary)}.data-checked\:bg-primary:where([data-state=checked]),.data-checked\:bg-primary:where([data-checked]:not([data-checked=false])){background-color:var(--color-primary)}.data-checked\:text-primary-foreground:where([data-state=checked]),.data-checked\:text-primary-foreground:where([data-checked]:not([data-checked=false])){color:var(--color-primary-foreground)}.dark\:data-checked\:bg-primary:is(.dark *):where([data-state=checked]),.dark\:data-checked\:bg-primary:is(.dark *):where([data-checked]:not([data-checked=false])){background-color:var(--color-primary)}.data-disabled\:pointer-events-none:where([data-disabled=true]),.data-disabled\:pointer-events-none:where([data-disabled]:not([data-disabled=false])){pointer-events:none}.data-disabled\:opacity-50:where([data-disabled=true]),.data-disabled\:opacity-50:where([data-disabled]:not([data-disabled=false])){opacity:.5}.data-active\:bg-background:where([data-state=active]),.data-active\:bg-background:where([data-active]:not([data-active=false])){background-color:var(--color-background)}.data-active\:text-foreground:where([data-state=active]),.data-active\:text-foreground:where([data-active]:not([data-active=false])){color:var(--color-foreground)}.group-data-\[variant\=default\]\/tabs-list\:data-active\:shadow-sm:is(:where(.group\/tabs-list)[data-variant=default] *):where([data-state=active]),.group-data-\[variant\=default\]\/tabs-list\:data-active\:shadow-sm:is(:where(.group\/tabs-list)[data-variant=default] *):where([data-active]:not([data-active=false])){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.group-data-\[variant\=line\]\/tabs-list\:data-active\:bg-transparent:is(:where(.group\/tabs-list)[data-variant=line] *):where([data-state=active]),.group-data-\[variant\=line\]\/tabs-list\:data-active\:bg-transparent:is(:where(.group\/tabs-list)[data-variant=line] *):where([data-active]:not([data-active=false])){background-color:#0000}.group-data-\[variant\=line\]\/tabs-list\:data-active\:shadow-none:is(:where(.group\/tabs-list)[data-variant=line] *):where([data-state=active]),.group-data-\[variant\=line\]\/tabs-list\:data-active\:shadow-none:is(:where(.group\/tabs-list)[data-variant=line] *):where([data-active]:not([data-active=false])){--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:is(.group-data-\[variant\=line\]\/tabs-list\:data-active\:after\:opacity-100:is(:where(.group\/tabs-list)[data-variant=line] *):where([data-state=active]),.group-data-\[variant\=line\]\/tabs-list\:data-active\:after\:opacity-100:is(:where(.group\/tabs-list)[data-variant=line] *):where([data-active]:not([data-active=false]))):after{content:var(--tw-content);opacity:1}.dark\:data-active\:border-input:is(.dark *):where([data-state=active]),.dark\:data-active\:border-input:is(.dark *):where([data-active]:not([data-active=false])){border-color:var(--color-input)}.dark\:data-active\:bg-input\/30:is(.dark *):where([data-state=active]),.dark\:data-active\:bg-input\/30:is(.dark *):where([data-active]:not([data-active=false])){background-color:var(--color-input)}@supports (color:color-mix(in lab, red, red)){.dark\:data-active\:bg-input\/30:is(.dark *):where([data-state=active]),.dark\:data-active\:bg-input\/30:is(.dark *):where([data-active]:not([data-active=false])){background-color:color-mix(in oklab, var(--color-input) 30%, transparent)}}.dark\:data-active\:text-foreground:is(.dark *):where([data-state=active]),.dark\:data-active\:text-foreground:is(.dark *):where([data-active]:not([data-active=false])){color:var(--color-foreground)}.dark\:group-data-\[variant\=line\]\/tabs-list\:data-active\:border-transparent:is(.dark *):is(:where(.group\/tabs-list)[data-variant=line] *):where([data-state=active]),.dark\:group-data-\[variant\=line\]\/tabs-list\:data-active\:border-transparent:is(.dark *):is(:where(.group\/tabs-list)[data-variant=line] *):where([data-active]:not([data-active=false])){border-color:#0000}.dark\:group-data-\[variant\=line\]\/tabs-list\:data-active\:bg-transparent:is(.dark *):is(:where(.group\/tabs-list)[data-variant=line] *):where([data-state=active]),.dark\:group-data-\[variant\=line\]\/tabs-list\:data-active\:bg-transparent:is(.dark *):is(:where(.group\/tabs-list)[data-variant=line] *):where([data-active]:not([data-active=false])){background-color:#0000}.data-horizontal\:h-px:where([data-orientation=horizontal]){height:1px}.data-horizontal\:w-full:where([data-orientation=horizontal]){width:100%}.data-horizontal\:flex-col:where([data-orientation=horizontal]){flex-direction:column}.data-vertical\:w-px:where([data-orientation=vertical]){width:1px}.data-vertical\:self-stretch:where([data-orientation=vertical]){align-self:stretch}.\[\&_\.bubble-content\]\:line-through .bubble-content{text-decoration-line:line-through}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3\.5 svg:not([class*=size-]){width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:0}.\[\.border-b\]\:pb-4.border-b{padding-bottom:calc(var(--spacing) * 4)}.group-data-\[size\=sm\]\/card\:\[\.border-b\]\:pb-3:is(:where(.group\/card)[data-size=sm] *).border-b{padding-bottom:calc(var(--spacing) * 3)}:is(.\*\:\[a\]\:underline>*):is(a){text-decoration-line:underline}:is(.\*\:\[a\]\:underline-offset-3>*):is(a){text-underline-offset:3px}@media (hover:hover){.\[a\]\:hover\:bg-primary\/80:is(a):hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab, red, red)){.\[a\]\:hover\:bg-primary\/80:is(a):hover{background-color:color-mix(in oklab, var(--color-primary) 80%, transparent)}}:is(.\*\:\[a\]\:hover\:text-foreground>*):is(a):hover{color:var(--color-foreground)}}:is(.\*\:\[img\:first-child\]\:rounded-t-xl>*):is(img:first-child){border-top-left-radius:var(--radius-xl);border-top-right-radius:var(--radius-xl)}:is(.\*\:\[img\:last-child\]\:rounded-b-xl>*):is(img:last-child){border-bottom-right-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl)}:is(.\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--spacing) * 2)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{--background:#f5f0e8;--foreground:#3d2b1f;--card:#fff;--card-foreground:#3d2b1f;--popover:#fff;--popover-foreground:#3d2b1f;--primary:#4a7c9b;--primary-foreground:#fff;--secondary:#faf8f4;--secondary-foreground:#3d2b1f;--muted:#faf8f4;--muted-foreground:#9e8e7e;--accent:#4a7c9b1f;--accent-foreground:#3a6580;--destructive:#9b3d3d;--border:#e8e2d8;--input:#e8e2d8;--ring:#4a7c9b;--chart-1:#4a7c9b;--chart-2:#c4878a;--chart-3:#7a6555;--chart-4:#d4cab8;--chart-5:#6ba3c2;--radius:16px;--sidebar:#faf8f4;--sidebar-foreground:#3d2b1f;--sidebar-primary:#4a7c9b;--sidebar-primary-foreground:#fff;--sidebar-accent:#4a7c9b1f;--sidebar-accent-foreground:#3a6580;--sidebar-border:#e8e2d8;--sidebar-ring:#4a7c9b}:root.dark{--color-cream:#1a140f;--color-ivory:#211a13;--color-frost:#3b2e24;--color-fawn:#5c4a3d;--color-chocolate:#f5f0e8;--color-charcoal:#faf8f4;--color-mocha:#c4b3a0;--color-mocha-light:#a89789;--color-sapphire:#7bb4d2;--color-sapphire-deep:#5e9bba;--color-sapphire-light:#a0cee3;--color-sapphire-glow:#7bb4d22e;--color-rose-baziu:#d89a9d;--color-snow:#2a211a;--shadow-baziu-sm:0 1px 3px #0006;--shadow-baziu-md:0 4px 12px #00000080;--shadow-baziu-lg:0 8px 30px #0009;--background:#1a140f;--foreground:#f5f0e8;--card:#2a211a;--card-foreground:#f5f0e8;--popover:#2a211a;--popover-foreground:#f5f0e8;--primary:#7bb4d2;--primary-foreground:#0f0a07;--secondary:#211a13;--secondary-foreground:#f5f0e8;--muted:#211a13;--muted-foreground:#a89789;--accent:#7bb4d22e;--accent-foreground:#a0cee3;--destructive:#d87878;--border:#3b2e24;--input:#3b2e24;--ring:#7bb4d2;--chart-1:#7bb4d2;--chart-2:#d89a9d;--chart-3:#c4b3a0;--chart-4:#5c4a3d;--chart-5:#a0cee3;--sidebar:#1f1812;--sidebar-foreground:#f5f0e8;--sidebar-primary:#7bb4d2;--sidebar-primary-foreground:#0f0a07;--sidebar-accent:#7bb4d22e;--sidebar-accent-foreground:#a0cee3;--sidebar-border:#3b2e24;--sidebar-ring:#7bb4d2}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}
@@ -0,0 +1 @@
1
+ import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{Q as n,u as r}from"./preload-helper-CvnapA2_.js";import{r as i}from"./index-iayCEuU2.js";import{t as a}from"./ConfigTabs-pY-V0Rie.js";import{t as o}from"./Button-ByiV6fpd.js";var s=e(n()),c=t();function l(){let e=i.useLoaderData(),t=r(),[n,l]=(0,s.useState)(``),[h,g]=(0,s.useState)(e.chatId),[_,v]=(0,s.useState)(!1),[y,b]=(0,s.useState)(null),[x,S]=(0,s.useState)(!1),[C,w]=(0,s.useState)(null),[T,E]=(0,s.useState)(!1);async function D(e){e.preventDefault(),v(!0),b(null),S(!1);try{let e=await fetch(`/api/config/telegram`,{method:`PUT`,headers:{"content-type":`application/json`},body:JSON.stringify({botToken:n,chatId:h})});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.error??`${e.status} ${e.statusText}`)}l(``),S(!0),await t.invalidate()}catch(e){b(e.message)}finally{v(!1)}}async function O(){if(confirm(`Clear the saved Telegram credentials?`))try{await fetch(`/api/config/telegram`,{method:`DELETE`}),l(``),g(``),w(null),S(!1),b(null),await t.invalidate()}catch(e){b(e.message)}}async function k(){E(!0),w(null);try{w(await(await fetch(`/api/config/telegram/health`)).json())}catch(e){w({configured:!0,preflight:null,error:{step:`getMe`,message:e.message},polling:null})}finally{E(!1)}}return(0,c.jsxs)(`main`,{className:`mx-auto max-w-3xl px-6 py-8`,children:[(0,c.jsx)(`h1`,{className:`font-serif text-3xl text-foreground mb-2`,children:`config`}),(0,c.jsx)(a,{active:`integrations`}),(0,c.jsxs)(`header`,{className:`mb-6`,children:[(0,c.jsx)(`h2`,{className:`text-xl font-semibold`,children:`Telegram`}),(0,c.jsx)(`p`,{className:`text-muted-foreground text-sm`,children:`One forum-supergroup bot, one topic per agent. Talk to any of your agents from a phone.`})]}),(0,c.jsx)(f,{}),e.migratedChatId&&(0,c.jsx)(d,{toChatId:e.migratedChatId}),(0,c.jsxs)(`section`,{className:`rounded-lg border bg-card p-5 mb-6`,children:[(0,c.jsx)(`h3`,{className:`text-sm font-semibold uppercase tracking-wide text-muted-foreground mb-3`,children:`Credentials`}),e.configured&&(0,c.jsxs)(`p`,{className:`text-xs text-emerald-700 mb-3`,children:[`✓ Stored: `,(0,c.jsx)(`code`,{className:`font-mono`,children:e.botTokenPreview}),` `,e.chatId&&(0,c.jsxs)(c.Fragment,{children:[`· chat `,(0,c.jsx)(`code`,{className:`font-mono`,children:e.chatId})]})]}),(0,c.jsxs)(`form`,{onSubmit:D,className:`space-y-3`,children:[(0,c.jsxs)(`label`,{className:`block`,children:[(0,c.jsx)(`span`,{className:`block text-sm font-medium mb-1`,children:`Bot token`}),(0,c.jsx)(`input`,{type:`password`,autoComplete:`off`,value:n,onChange:e=>l(e.target.value),placeholder:e.configured?`(leave blank to keep stored value)`:`1234567890:ABC...`,className:`w-full rounded-md border bg-background px-2 py-1.5 font-mono text-sm outline-none focus:ring-2 focus:ring-ring/30`,required:!e.configured}),(0,c.jsxs)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:[`From @BotFather → /newbot. Disable Privacy Mode in `,(0,c.jsx)(`em`,{children:`Bot Settings → Group Privacy → Turn off`}),`.`]})]}),(0,c.jsxs)(`label`,{className:`block`,children:[(0,c.jsx)(`span`,{className:`block text-sm font-medium mb-1`,children:`Supergroup chat ID`}),(0,c.jsx)(`input`,{type:`text`,value:h,onChange:e=>g(e.target.value),placeholder:`-1001234567890`,className:`w-full rounded-md border bg-background px-2 py-1.5 font-mono text-sm outline-none focus:ring-2 focus:ring-ring/30`,required:!0}),(0,c.jsxs)(`p`,{className:`text-xs text-muted-foreground mt-1`,children:[`Forum-enabled supergroup the bot is admin in (with`,` `,(0,c.jsx)(`code`,{className:`font-mono`,children:`can_manage_topics`}),`).`]})]}),(0,c.jsxs)(`div`,{className:`flex items-center gap-3 pt-1`,children:[(0,c.jsx)(o,{variant:`primary`,type:`submit`,disabled:_,children:_?`saving…`:`save credentials`}),e.configured&&(0,c.jsx)(o,{variant:`danger`,onClick:O,children:`clear credentials`}),x&&(0,c.jsx)(`span`,{className:`text-xs text-emerald-700`,children:`saved ✓`}),y&&(0,c.jsxs)(`span`,{className:`text-xs text-rose-700`,children:[`error: `,y]})]})]})]}),(0,c.jsxs)(`section`,{className:`rounded-lg border bg-card p-5`,children:[(0,c.jsxs)(`div`,{className:`flex items-center justify-between mb-3`,children:[(0,c.jsx)(`h3`,{className:`text-sm font-semibold uppercase tracking-wide text-muted-foreground`,children:`Preflight checks`}),(0,c.jsx)(o,{variant:`ghost`,onClick:k,disabled:T||!e.configured,children:T?`checking…`:`run preflight`})]}),!e.configured&&(0,c.jsx)(`p`,{className:`text-xs text-muted-foreground italic`,children:`Save credentials above first.`}),e.configured&&!C&&!T&&(0,c.jsxs)(`p`,{className:`text-xs text-muted-foreground italic`,children:[`Click `,(0,c.jsx)(`em`,{children:`run preflight`}),` to validate the stored credentials against the Telegram Bot API.`]}),C&&(0,c.jsx)(m,{health:C}),C?.polling&&(0,c.jsx)(p,{polling:C.polling})]}),e.configured&&(0,c.jsx)(u,{})]})}function u(){let[e,t]=(0,s.useState)(null),[n,r]=(0,s.useState)(``),[i,a]=(0,s.useState)(``),[l,u]=(0,s.useState)(!1),[d,f]=(0,s.useState)(null);async function p(){try{let e=await fetch(`/api/config/telegram/acl`);if(!e.ok)throw Error(e.statusText);t(await e.json())}catch(e){f(e.message)}}(0,s.useEffect)(()=>{p()},[]);async function m(e){e.preventDefault();let t=Number(n);if(!Number.isInteger(t)){f(`user id must be an integer`);return}u(!0),f(null);try{let e=await fetch(`/api/config/telegram/acl`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({userId:t,label:i.trim()||null})});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.error??e.statusText)}r(``),a(``),await p()}catch(e){f(e.message)}finally{u(!1)}}async function h(e){f(null);try{let t=await fetch(`/api/config/telegram/acl/${e}`,{method:`DELETE`});if(!t.ok){let e=await t.json().catch(()=>({}));throw Error(e.error??t.statusText)}await p()}catch(e){f(e.message)}}return(0,c.jsxs)(`section`,{className:`rounded-lg border bg-card p-5 mt-6`,children:[(0,c.jsx)(`h3`,{className:`text-sm font-semibold uppercase tracking-wide text-muted-foreground mb-1`,children:`Access control`}),(0,c.jsxs)(`p`,{className:`text-xs text-muted-foreground mb-3`,children:[`Allowlisted Telegram users can use the bot (commands + chat). While the list is empty the bot is open and the first person to message it becomes owner. Users find their id via`,` `,(0,c.jsx)(`code`,{className:`font-mono`,children:`/whoami`}),`.`]}),e===null?(0,c.jsx)(`p`,{className:`text-xs text-muted-foreground italic`,children:`loading…`}):e.length===0?(0,c.jsx)(`p`,{className:`text-xs text-amber-700 mb-3`,children:`Open — no allowlist yet. The first user to message the bot claims owner.`}):(0,c.jsx)(`ul`,{className:`mb-3 space-y-1 text-sm`,children:e.map(e=>(0,c.jsxs)(`li`,{className:`flex items-center gap-2`,children:[(0,c.jsx)(`code`,{className:`font-mono`,children:e.userId}),(0,c.jsxs)(`span`,{className:`text-muted-foreground`,children:[e.label??(e.username?`@${e.username}`:`—`),` · `,e.role]}),e.role!==`owner`&&(0,c.jsx)(`button`,{type:`button`,onClick:()=>void h(e.userId),className:`ghost-btn text-xs text-[#9B3D3D]`,children:`remove`})]},e.userId))}),(0,c.jsxs)(`form`,{onSubmit:m,className:`flex items-center gap-2`,children:[(0,c.jsx)(`input`,{value:n,onChange:e=>r(e.target.value),placeholder:`user id`,className:`w-28 rounded-md border bg-background px-2 py-1 font-mono text-sm`}),(0,c.jsx)(`input`,{value:i,onChange:e=>a(e.target.value),placeholder:`label (optional)`,className:`w-40 rounded-md border bg-background px-2 py-1 text-sm`}),(0,c.jsx)(o,{variant:`ghost`,type:`submit`,disabled:l,children:`add`}),d&&(0,c.jsx)(`span`,{className:`text-xs text-rose-700`,children:d})]})]})}function d({toChatId:e}){let[t,n]=(0,s.useState)(!1),[r,i]=(0,s.useState)(null);async function a(){n(!0),i(null);try{let e=await fetch(`/api/config/telegram/reconnect`,{method:`POST`});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.error??e.statusText)}window.location.reload()}catch(e){i(e.message),n(!1)}}return(0,c.jsxs)(`div`,{className:`rounded-md border-2 border-rose-400 bg-rose-50 px-4 py-3 mb-6 text-sm`,children:[(0,c.jsx)(`div`,{className:`font-semibold text-rose-900 mb-1`,children:`Supergroup chat id changed`}),(0,c.jsxs)(`p`,{className:`text-rose-900 mb-2`,children:[`Telegram migrated this supergroup to a new chat id (`,(0,c.jsx)(`code`,{className:`font-mono`,children:e}),`). The bot is still pointed at the old id. Reconnect to repoint it and re-create the `,(0,c.jsx)(`code`,{className:`font-mono`,children:`⚙ bazilion`}),` `,`service chat in the new group. Agent topic bindings will reconcile on next use.`]}),(0,c.jsx)(o,{variant:`primary`,onClick:a,disabled:t,children:t?`reconnecting…`:`Reconnect to ${e}`}),r&&(0,c.jsx)(`span`,{className:`ml-3 text-xs text-rose-700`,children:r})]})}function f(){return(0,c.jsxs)(`div`,{className:`rounded-md border-2 border-amber-400 bg-amber-50 px-4 py-3 mb-6 text-sm`,children:[(0,c.jsx)(`div`,{className:`font-semibold text-amber-900 mb-1`,children:`Step 2 of the rollout`}),(0,c.jsxs)(`p`,{className:`text-amber-900`,children:[`The bot polls Telegram and creates the `,(0,c.jsx)(`code`,{className:`font-mono`,children:`⚙ bazilion`}),` `,`service chat on first start. Inbound messages are logged but not yet routed to agents —`,` `,`slash commands and per-agent topics ship in the next release. Outbound from agents ships after that.`]})]})}function p({polling:e}){let t=e.startedAt?new Date(e.startedAt).toISOString():null,n=e.lastSuccessfulPollAt?new Date(e.lastSuccessfulPollAt).toISOString():null;return(0,c.jsxs)(`div`,{className:`mt-4 rounded-md border bg-muted/30 px-3 py-2 text-xs space-y-1`,children:[(0,c.jsx)(`p`,{className:`font-semibold uppercase tracking-wide text-muted-foreground`,children:`Polling state`}),(0,c.jsxs)(`div`,{className:`flex flex-wrap gap-x-4 gap-y-1 font-mono`,children:[(0,c.jsx)(`span`,{className:e.running?`text-emerald-700`:`text-rose-700`,children:e.running?`running`:`stopped`}),(0,c.jsx)(`span`,{className:e.activated?`text-emerald-700`:`text-amber-700`,children:e.activated?`activated`:`awaiting activation`}),e.lastUpdateId!==null&&(0,c.jsxs)(`span`,{children:[`last update `,e.lastUpdateId]}),t&&(0,c.jsxs)(`span`,{children:[`started `,t]}),n&&(0,c.jsxs)(`span`,{children:[`last poll `,n]})]}),e.error&&(0,c.jsxs)(`p`,{className:`text-rose-700`,children:[`error: `,e.error]})]})}function m({health:e}){if(e.error)return(0,c.jsxs)(`div`,{className:`rounded-md border border-rose-300 bg-rose-50 px-3 py-2 text-sm`,children:[(0,c.jsxs)(`p`,{className:`font-semibold text-rose-900`,children:[`Failed at `,(0,c.jsx)(`code`,{className:`font-mono`,children:e.error.step})]}),(0,c.jsx)(`p`,{className:`text-rose-900 mt-1`,children:e.error.message}),g(e.error.step)]});if(!e.preflight)return(0,c.jsx)(`p`,{className:`text-xs text-muted-foreground italic`,children:`No preflight data.`});let t=e.preflight;return(0,c.jsxs)(`ul`,{className:`space-y-1.5`,children:[(0,c.jsxs)(h,{ok:t.botUsername.length>0,label:`Bot identity`,children:[`@`,t.botUsername]}),(0,c.jsx)(h,{ok:t.chatTitle.length>0,label:`Supergroup reachable`,children:t.chatTitle}),(0,c.jsx)(h,{ok:t.isForum,label:`Forum topics enabled`,children:t.isForum?`is_forum: true`:`is_forum: false — the supergroup owner must enable Topics in group settings`}),(0,c.jsx)(h,{ok:t.hasManageTopics,label:`Bot has can_manage_topics`,children:t.hasManageTopics?`admin with can_manage_topics`:`promote the bot to admin in the supergroup with the "Manage topics" permission`}),(0,c.jsx)(h,{ok:t.privacyModeOff,label:`Privacy Mode is OFF`,children:t.privacyModeOff?`can_read_all_group_messages: true`:`BotFather → /mybots → select bot → Bot Settings → Group Privacy → Turn off`})]})}function h({ok:e,label:t,children:n}){return(0,c.jsxs)(`li`,{className:`flex items-start gap-2 text-sm`,children:[(0,c.jsx)(`span`,{className:`mt-0.5 inline-flex h-4 w-4 items-center justify-center rounded-full text-[10px] font-bold leading-none ${e?`bg-emerald-100 text-emerald-800`:`bg-rose-100 text-rose-800`}`,"aria-hidden":!0,children:e?`✓`:`✕`}),(0,c.jsxs)(`div`,{children:[(0,c.jsx)(`span`,{className:`font-medium`,children:t}),(0,c.jsx)(`span`,{className:`ml-2 text-xs ${e?`text-muted-foreground`:`text-rose-800`}`,children:n})]})]})}function g(e){switch(e){case`getMe`:return(0,c.jsx)(`p`,{className:`text-xs text-rose-900 mt-1`,children:`The token is invalid or revoked. Re-issue with @BotFather → /token, or paste a fresh one above.`});case`getChat`:return(0,c.jsx)(`p`,{className:`text-xs text-rose-900 mt-1`,children:`The chat id either doesn't exist, points at a basic group (not a supergroup), or the bot isn't a member. Forward any message from the supergroup to the bot to double-check the id, then add the bot to the group.`});case`getChatMember`:return(0,c.jsx)(`p`,{className:`text-xs text-rose-900 mt-1`,children:`The bot is in the chat but the membership lookup failed. Usually means the bot was kicked or the chat id was migrated — confirm the bot is still in the supergroup.`})}}export{l as component};
@@ -0,0 +1 @@
1
+ import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{Q as n,u as r}from"./preload-helper-CvnapA2_.js";import{l as i}from"./index-iayCEuU2.js";import{t as a}from"./ConfigTabs-pY-V0Rie.js";var o=e(n()),s=t();function c(e){return new Date(e).toISOString().slice(0,16).replace(`T`,` `)}function l(){let{tokens:e}=i.useLoaderData(),{all:t}=i.useSearch(),n=t===`1`,l=r(),[u,d]=(0,o.useState)(``),[f,p]=(0,o.useState)(null),[m,h]=(0,o.useState)(null),[g,_]=(0,o.useState)(!1);async function v(e){e.preventDefault(),h(null),_(!0);try{let e=await fetch(`/api/tokens`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({label:u})});if(!e.ok){let t=await e.json().catch(()=>({}));throw Error(t.error??`${e.status} ${e.statusText}`)}p((await e.json()).token),d(``),await l.invalidate()}catch(e){h(e.message)}finally{_(!1)}}async function y(e){await fetch(`/api/tokens/${e}`,{method:`DELETE`}),await l.invalidate()}return(0,s.jsxs)(`main`,{className:`mx-auto max-w-5xl px-6 py-8`,children:[(0,s.jsx)(`h1`,{className:`font-serif text-3xl text-foreground mb-2`,children:`config`}),(0,s.jsx)(a,{active:`tokens`}),(0,s.jsxs)(`p`,{className:`text-muted-foreground text-sm mb-6`,children:[`Per-client credentials for the HTTP API and CLI. The row labelled`,` `,(0,s.jsx)(`code`,{className:`font-mono`,children:`bootstrap`}),` is the loopback token in`,` `,(0,s.jsx)(`code`,{className:`font-mono`,children:`~/.bazilion/auth.json`}),` — revoking it locks the local CLI out, so it can't be revoked from this page. Mint additional tokens here for Tailscale/LAN clients (mobile, remote machines); revoke any of those at any time.`]}),(0,s.jsxs)(`section`,{className:`rounded-lg border bg-card p-5 mb-6`,children:[(0,s.jsx)(`h3`,{className:`font-serif text-xl mb-3`,children:`Mint a new token`}),(0,s.jsxs)(`form`,{onSubmit:v,className:`flex gap-2 items-end mb-3`,children:[(0,s.jsxs)(`label`,{className:`text-sm`,children:[`Label`,(0,s.jsx)(`input`,{type:`text`,value:u,onChange:e=>d(e.target.value),required:!0,placeholder:`e.g. laptop-tailscale`,autoComplete:`off`,className:`block mt-1 rounded-md border bg-background px-3 py-2 text-sm w-72`})]}),(0,s.jsx)(`button`,{type:`submit`,disabled:g,className:`rounded-md bg-primary px-3 py-2 text-sm font-medium text-primary-foreground disabled:opacity-50`,children:g?`creating…`:`create`})]}),f&&(0,s.jsxs)(`div`,{className:`rounded-md border border-amber-200 bg-amber-50 p-3`,children:[(0,s.jsx)(`p`,{className:`text-xs text-amber-800 mb-1`,children:`copy this token now — it is not recoverable later.`}),(0,s.jsx)(`pre`,{className:`font-mono text-xs whitespace-pre-wrap break-all`,children:f})]}),m&&(0,s.jsx)(`p`,{className:`text-sm text-rose-700`,children:m})]}),(0,s.jsx)(`div`,{className:`mb-3`,children:(0,s.jsxs)(`label`,{className:`text-sm flex items-center gap-2`,children:[(0,s.jsx)(`input`,{type:`checkbox`,checked:n,onChange:e=>{window.location.assign(e.target.checked?`/config/tokens?all=1`:`/config/tokens`)}}),`show revoked`]})}),(0,s.jsxs)(`table`,{className:`w-full text-sm`,children:[(0,s.jsx)(`thead`,{className:`text-left text-muted-foreground border-b`,children:(0,s.jsxs)(`tr`,{children:[(0,s.jsx)(`th`,{className:`py-2`,children:`label`}),(0,s.jsx)(`th`,{children:`id`}),(0,s.jsx)(`th`,{children:`state`}),(0,s.jsx)(`th`,{children:`created`}),(0,s.jsx)(`th`,{children:`last used`}),(0,s.jsx)(`th`,{})]})}),(0,s.jsxs)(`tbody`,{children:[e.length===0&&(0,s.jsx)(`tr`,{children:(0,s.jsx)(`td`,{colSpan:6,className:`py-6 text-center text-muted-foreground italic`,children:`no tokens yet — mint one above`})}),e.map(e=>{let t=e.label===`bootstrap`;return(0,s.jsxs)(`tr`,{className:`border-b last:border-0 hover:bg-accent/30`,children:[(0,s.jsxs)(`td`,{className:`py-2`,children:[e.label,t&&(0,s.jsx)(`span`,{className:`ml-2 text-[0.7em] uppercase tracking-wide text-muted-foreground`,children:`auth.json`})]}),(0,s.jsx)(`td`,{children:(0,s.jsx)(`code`,{className:`font-mono text-xs`,children:e.id})}),(0,s.jsx)(`td`,{children:e.revokedAt?(0,s.jsx)(`span`,{className:`text-muted-foreground`,children:`revoked`}):(0,s.jsx)(`span`,{className:`text-emerald-700`,children:`active`})}),(0,s.jsx)(`td`,{className:`text-muted-foreground text-xs`,children:c(e.createdAt)}),(0,s.jsx)(`td`,{className:`text-muted-foreground text-xs`,children:e.lastUsedAt?c(e.lastUsedAt):`(never)`}),(0,s.jsx)(`td`,{children:!e.revokedAt&&!t&&(0,s.jsx)(`button`,{type:`button`,onClick:()=>y(e.id),className:`rounded-md border px-2 py-1 text-xs text-rose-700 hover:bg-rose-50`,children:`revoke`})})]},e.id)})]})]})]})}export{l as component};
@@ -0,0 +1 @@
1
+ import{r as e,t}from"./jsx-runtime-DGeXAQPT.js";import{Q as n,u as r}from"./preload-helper-CvnapA2_.js";import{n as i}from"./index-iayCEuU2.js";import{t as a}from"./AgentTabs-DioGqUVR.js";var o=e(n()),s=t();function c(){let{resolved:e,triggers:t}=i.useLoaderData(),n=r();async function o(e){await fetch(`/api/triggers/${e.id}`,{method:`PATCH`,headers:{"content-type":`application/json`},body:JSON.stringify({enabled:!e.enabled})}),await n.invalidate()}async function c(e){confirm(`delete this trigger?`)&&(await fetch(`/api/triggers/${e}`,{method:`DELETE`}),await n.invalidate())}return(0,s.jsxs)(`div`,{children:[(0,s.jsx)(`header`,{className:`mb-6`,children:(0,s.jsx)(`h1`,{children:e.agent.name})}),(0,s.jsx)(a,{agentId:e.agent.id,active:`triggers`,archived:e.agent.status===`archived`}),(0,s.jsx)(l,{agentId:e.agent.id,onAdded:()=>n.invalidate()}),(0,s.jsx)(`h3`,{className:`mb-3 mt-6 font-body text-[0.85em] font-semibold uppercase tracking-wider text-mocha-light`,children:`Active triggers`}),t.length===0?(0,s.jsx)(`p`,{className:`muted`,children:`no triggers yet — add one above.`}):(0,s.jsxs)(`table`,{children:[(0,s.jsx)(`thead`,{children:(0,s.jsxs)(`tr`,{children:[(0,s.jsx)(`th`,{children:`id`}),(0,s.jsx)(`th`,{children:`kind`}),(0,s.jsx)(`th`,{children:`spec`}),(0,s.jsx)(`th`,{children:`message`}),(0,s.jsx)(`th`,{children:`last fired`}),(0,s.jsx)(`th`,{})]})}),(0,s.jsx)(`tbody`,{children:t.map(e=>{let t=e.kind===`interval`?`every ${e.intervalSec}s`:e.cronExpr,n=e.lastFiredAt?new Date(e.lastFiredAt).toLocaleString():`(never)`;return(0,s.jsxs)(`tr`,{className:e.enabled?``:`opacity-60`,children:[(0,s.jsx)(`td`,{children:(0,s.jsxs)(`code`,{children:[e.id.slice(0,8),`…`]})}),(0,s.jsx)(`td`,{children:(0,s.jsx)(`span`,{className:`inline-block rounded-sm border border-frost bg-ivory px-2 py-0.5 font-mono text-[0.8em] text-mocha`,children:e.kind})}),(0,s.jsx)(`td`,{children:(0,s.jsx)(`code`,{children:t})}),(0,s.jsx)(`td`,{children:e.message.length>60?`${e.message.slice(0,60)}…`:e.message}),(0,s.jsx)(`td`,{className:`text-[0.82em] text-mocha-light`,children:n}),(0,s.jsx)(`td`,{children:(0,s.jsxs)(`div`,{className:`flex gap-1.5`,children:[(0,s.jsx)(`button`,{type:`button`,className:`ghost-btn`,onClick:()=>o(e),children:e.enabled?`disable`:`enable`}),(0,s.jsx)(`button`,{type:`button`,className:`ghost-btn`,onClick:()=>c(e.id),children:`delete`})]})})]},e.id)})})]})]})}function l({agentId:e,onAdded:t}){let[n,r]=(0,o.useState)(`interval`),[i,a]=(0,o.useState)(300),[c,l]=(0,o.useState)(``),[u,d]=(0,o.useState)(``),[f,p]=(0,o.useState)(null),[m,h]=(0,o.useState)(!1);async function g(r){if(r.preventDefault(),p(null),!u.trim()){p(`message is required`);return}if(n===`interval`&&(!Number.isFinite(i)||i<=0)){p(`interval must be a positive number`);return}if(n===`cron`&&!c.trim()){p(`cron expression is required`);return}h(!0);try{let r={kind:n,message:u.trim()};n===`interval`?r.intervalSec=i:r.cronExpr=c.trim();let o=await fetch(`/api/agents/${encodeURIComponent(e)}/triggers`,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify(r)});if(!o.ok){let e=await o.json().catch(()=>null);throw Error(e?.error??o.statusText)}d(``),l(``),a(300),t()}catch(e){p(e.message)}finally{h(!1)}}return(0,s.jsxs)(`form`,{className:`card`,onSubmit:g,children:[(0,s.jsx)(`h3`,{children:`Add trigger`}),(0,s.jsxs)(`div`,{className:`mb-3 flex gap-3`,children:[(0,s.jsxs)(`label`,{className:`m-0 inline-flex cursor-pointer items-center gap-1`,children:[(0,s.jsx)(`input`,{type:`radio`,checked:n===`interval`,onChange:()=>r(`interval`)}),`interval (every N seconds)`]}),(0,s.jsxs)(`label`,{className:`m-0 inline-flex cursor-pointer items-center gap-1`,children:[(0,s.jsx)(`input`,{type:`radio`,checked:n===`cron`,onChange:()=>r(`cron`)}),`cron (5-field)`]})]}),n===`interval`?(0,s.jsxs)(`label`,{children:[`interval (seconds)`,(0,s.jsx)(`input`,{type:`number`,min:1,value:i,onChange:e=>a(Number(e.target.value))})]}):(0,s.jsxs)(`label`,{children:[`cron expression (minute hour dom month dow)`,(0,s.jsx)(`input`,{type:`text`,placeholder:`*/15 * * * *`,value:c,onChange:e=>l(e.target.value)})]}),(0,s.jsxs)(`label`,{children:[`message`,(0,s.jsx)(`textarea`,{placeholder:`e.g. check your inbox and act on anything new`,value:u,onChange:e=>d(e.target.value),className:`font-mono text-[0.9em] min-h-[80px]`})]}),(0,s.jsxs)(`div`,{className:`mt-3 flex items-center gap-3`,children:[(0,s.jsx)(`button`,{type:`submit`,disabled:m,children:m?`adding…`:`add`}),f&&(0,s.jsx)(`span`,{className:`text-[0.85em] text-[#9B3D3D]`,children:f})]})]})}export{c as component};
@@ -0,0 +1 @@
1
+ import{t as e}from"./jsx-runtime-DGeXAQPT.js";var t=e();function n(){return(0,t.jsx)(`div`,{className:`mx-auto max-w-2xl`,children:(0,t.jsxs)(`div`,{className:`card`,children:[(0,t.jsx)(`h1`,{children:`Welcome to bazilion`}),(0,t.jsxs)(`p`,{className:`muted my-3`,children:[`Before you can spawn agents, enable a provider and save at least one concrete model id. Once you do, a `,(0,t.jsx)(`code`,{children:`default`}),` profile (and a `,(0,t.jsx)(`code`,{children:`default`}),` group directory) are created automatically and the rest of the app unlocks.`]}),(0,t.jsxs)(`ol`,{className:`my-5 space-y-4`,children:[(0,t.jsxs)(r,{n:1,children:[(0,t.jsx)(`strong`,{children:`Choose a provider.`}),` Head to the`,` `,(0,t.jsx)(`a`,{href:`/config`,children:`providers tab`}),`, pick a provider, and set credentials or a local endpoint if that provider needs one. Local providers like Ollama and LM Studio can use their default loopback URLs.`]}),(0,t.jsxs)(r,{n:2,children:[(0,t.jsx)(`strong`,{children:`Enable it and save a model.`}),` Flip the provider's toggle on, then click a catalog chip or type one exact model id (for example`,` `,(0,t.jsx)(`code`,{children:`claude-opus-4-8`}),`, `,(0,t.jsx)(`code`,{children:`gpt-5.5`}),`, or `,(0,t.jsx)(`code`,{children:`llama3.3`}),`) and press `,(0,t.jsx)(`em`,{children:`save models`}),`.`]}),(0,t.jsxs)(r,{n:3,children:[(0,t.jsx)(`strong`,{children:`Start chatting.`}),` You'll be redirected to the home page automatically, where a `,(0,t.jsx)(`code`,{children:`default`}),` profile is waiting for a first spawn.`]})]}),(0,t.jsx)(`a`,{href:`/config`,className:`inline-flex items-center gap-2 rounded-md bg-sapphire px-4 py-2 text-[0.92em] font-semibold text-snow no-underline transition-colors hover:bg-sapphire-deep`,children:`Go to config →`})]})})}function r({n:e,children:n}){return(0,t.jsxs)(`li`,{className:`grid grid-cols-[2rem_1fr] gap-3 border-t border-frost pt-3 first:border-t-0 first:pt-0`,children:[(0,t.jsx)(`span`,{className:`text-center font-display text-xl text-sapphire`,children:e}),(0,t.jsx)(`div`,{className:`text-[0.92em] leading-relaxed text-mocha`,children:n})]})}export{n as component};
@@ -1,8 +1,8 @@
1
1
  import { t as createServerFn } from "../server.js";
2
- import { t as createSsrRpc } from "./createSsrRpc-DHBVUN8O.js";
2
+ import { t as createSsrRpc } from "./createSsrRpc-ZBGxhl8t.js";
3
3
  import { createFileRoute, lazyRouteComponent, redirect } from "@tanstack/react-router";
4
4
  //#region src/routes/agents/$id/index.tsx
5
- var $$splitComponentImporter = () => import("./_id-GJk3EYTT.js");
5
+ var $$splitComponentImporter = () => import("./_id-D0ytyXGY.js");
6
6
  var fetchAgent = createServerFn({ method: "POST" }).inputValidator((d) => d).handler(createSsrRpc("846c9081aed17057351730985f133b0aab67a5dabfca9562552829a90ff30849"));
7
7
  var Route = createFileRoute("/agents/$id/")({
8
8
  loader: async ({ params }) => {
@@ -1,8 +1,8 @@
1
1
  import { t as createServerFn } from "../server.js";
2
- import { t as createSsrRpc } from "./createSsrRpc-DHBVUN8O.js";
2
+ import { t as createSsrRpc } from "./createSsrRpc-ZBGxhl8t.js";
3
3
  import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
4
4
  //#region src/routes/profile-groups/$id.tsx
5
- var $$splitComponentImporter = () => import("./_id-CHNm7EAd.js");
5
+ var $$splitComponentImporter = () => import("./_id-CRqqi8IE.js");
6
6
  var fetchDetail = createServerFn({ method: "POST" }).inputValidator((d) => d).handler(createSsrRpc("86dad0c33c97a6f0913d1f38e9b01ac4144f7d0970b45fdb3470e9bc9a78e0e0"));
7
7
  var Route = createFileRoute("/profile-groups/$id")({
8
8
  loader: ({ params }) => fetchDetail({ data: { id: params.id } }),
@@ -1,5 +1,5 @@
1
1
  import { t as createServerFn } from "../server.js";
2
- import { t as createServerRpc } from "./createServerRpc-CBTntoKx.js";
2
+ import { t as createServerRpc } from "./createServerRpc-CeKECg65.js";
3
3
  import { n as daemonClient } from "./daemon-client-2NRMzlTr.js";
4
4
  //#region src/routes/profile-groups/$id.tsx?tss-serverfn-split
5
5
  var fetchDetail_createServerFn_handler = createServerRpc({
@@ -1,8 +1,8 @@
1
1
  import { t as createServerFn } from "../server.js";
2
- import { t as createSsrRpc } from "./createSsrRpc-DHBVUN8O.js";
2
+ import { t as createSsrRpc } from "./createSsrRpc-ZBGxhl8t.js";
3
3
  import { createFileRoute, lazyRouteComponent, redirect } from "@tanstack/react-router";
4
4
  //#region src/routes/profiles/$id.tsx
5
- var $$splitComponentImporter = () => import("./_id-pd4S7LTi.js");
5
+ var $$splitComponentImporter = () => import("./_id-DDixKEud.js");
6
6
  var fetchProfile = createServerFn({ method: "POST" }).inputValidator((d) => d).handler(createSsrRpc("280ae44073f538bf230afd3a1407fc41f9c78cd0cf71b6a06fb0cceff0872d1c"));
7
7
  var Route = createFileRoute("/profiles/$id")({
8
8
  loader: async ({ params }) => {
@@ -1,4 +1,4 @@
1
- import { t as Route } from "./_id-C78M9_j9.js";
1
+ import { t as Route } from "./_id-BKev9H1p.js";
2
2
  import { t as Button } from "./Button-Dsnw22OF.js";
3
3
  import { t as MembersEditor } from "./MembersEditor-BWQztvrX.js";
4
4
  import { useState } from "react";
@@ -1,4 +1,4 @@
1
- import { t as Route } from "./_id-BZ-YCWSw.js";
1
+ import { t as Route } from "./_id-CnQflrRv.js";
2
2
  import { t as Button } from "./Button-Dsnw22OF.js";
3
3
  import { useState } from "react";
4
4
  import { useRouter } from "@tanstack/react-router";
@@ -1,8 +1,8 @@
1
1
  import { t as createServerFn } from "../server.js";
2
- import { t as createSsrRpc } from "./createSsrRpc-DHBVUN8O.js";
2
+ import { t as createSsrRpc } from "./createSsrRpc-ZBGxhl8t.js";
3
3
  import { createFileRoute, lazyRouteComponent, redirect } from "@tanstack/react-router";
4
4
  //#region src/routes/groups/$id/index.tsx
5
- var $$splitComponentImporter = () => import("./_id-Bm4-_AP-.js");
5
+ var $$splitComponentImporter = () => import("./_id-CXg-Blec.js");
6
6
  var fetchGroup = createServerFn({ method: "POST" }).inputValidator((d) => d).handler(createSsrRpc("c64d52cbb25600424729185370431bf1182e1058dad2eacd250820ca1d62dae0"));
7
7
  var Route = createFileRoute("/groups/$id/")({
8
8
  loader: async ({ params }) => {
@@ -1,4 +1,4 @@
1
- import { t as Route } from "./_id-CvIGhq4U.js";
1
+ import { t as Route } from "./_id-81NrHA5d.js";
2
2
  import { t as AgentTabs } from "./AgentTabs-BOjTN7QF.js";
3
3
  import { t as AgentAvatar } from "./AgentAvatar-8gTAy_tP.js";
4
4
  import { t as ChatPane } from "./ChatPane-BvpswYvF.js";