bazilion 0.12.2 → 0.14.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 (217) hide show
  1. package/README.md +2 -2
  2. package/dist/cli.js +795 -240
  3. package/dist/cli.js.map +1 -1
  4. package/dist/daemon.js +4555 -1280
  5. package/dist/daemon.js.map +1 -1
  6. package/dist/migrations/0001_init.sql +21 -0
  7. package/dist/web/client/assets/AgentTabs-BcmmwYJc.js +1 -0
  8. package/dist/web/client/assets/ConfigPage-BCLp-FUC.js +1 -0
  9. package/dist/web/client/assets/ConfirmDialog-CyL9A20V.js +1 -0
  10. package/dist/web/client/assets/FieldRow-D6REbYUa.js +1 -0
  11. package/dist/web/client/assets/Page-NV96O47A.js +1 -0
  12. package/dist/web/client/assets/ProductionTeamPolicyEditor-DBKnOezm.js +7 -0
  13. package/dist/web/client/assets/{ProfileCommunicationEditor-C43HvUe-.js → ProfileCommunicationEditor-4RK2laqO.js} +1 -1
  14. package/dist/web/client/assets/SectionTabs-4kCQXuFY.js +1 -0
  15. package/dist/web/client/assets/TeamTabs-CdtNEqt4.js +1 -0
  16. package/dist/web/client/assets/{TemplatesTabs-6Jd_xQj7.js → TemplatesTabs-CZyss2Y0.js} +1 -1
  17. package/dist/web/client/assets/UnsavedChangesGuard-CEoK-ZcN.js +1 -0
  18. package/dist/web/client/assets/_id-4ZS-w_Aj.js +1 -0
  19. package/dist/web/client/assets/{_id-AOAT0H_5.js → _id-DIqtdQij.js} +1 -1
  20. package/dist/web/client/assets/_id-DbcC2E7F.js +1 -0
  21. package/dist/web/client/assets/_id-f_r5M0p3.js +1 -0
  22. package/dist/web/client/assets/activity-CB9Ufth-.js +1 -0
  23. package/dist/web/client/assets/agents-D-JGXVg9.js +1 -0
  24. package/dist/web/client/assets/agents-DS2XafoA.js +1 -0
  25. package/dist/web/client/assets/approvals-Cke_mrJv.js +1 -0
  26. package/dist/web/client/assets/attention-PYwRM2wC.js +1 -0
  27. package/dist/web/client/assets/chevron-right-BG4OeFRQ.js +1 -0
  28. package/dist/web/client/assets/config-DF9Gqmfa.js +3 -0
  29. package/dist/web/client/assets/dm-sans-latin-400-normal-BwCSEQnW.woff +0 -0
  30. package/dist/web/client/assets/dm-sans-latin-400-normal-CW0RaeGs.woff2 +0 -0
  31. package/dist/web/client/assets/dm-sans-latin-500-normal-B9HHJjqV.woff2 +0 -0
  32. package/dist/web/client/assets/dm-sans-latin-500-normal-Dr3UlScf.woff +0 -0
  33. package/dist/web/client/assets/dm-sans-latin-600-normal-Aqo67rzb.woff2 +0 -0
  34. package/dist/web/client/assets/dm-sans-latin-600-normal-BmdmIIQ2.woff +0 -0
  35. package/dist/web/client/assets/dm-sans-latin-700-normal-CUSSCpQX.woff +0 -0
  36. package/dist/web/client/assets/dm-sans-latin-700-normal-DvUfVpUG.woff2 +0 -0
  37. package/dist/web/client/assets/dm-serif-display-latin-400-normal-C5_t9oOD.woff2 +0 -0
  38. package/dist/web/client/assets/dm-serif-display-latin-400-normal-_kVFYEpx.woff +0 -0
  39. package/dist/web/client/assets/{inbox-Bn1GbUsJ.js → inbox-DC_HdOfI.js} +1 -1
  40. package/dist/web/client/assets/index-Cofc7zhl.css +1 -0
  41. package/dist/web/client/assets/index-Cp6UHWr2.js +52 -0
  42. package/dist/web/client/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  43. package/dist/web/client/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  44. package/dist/web/client/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  45. package/dist/web/client/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  46. package/dist/web/client/assets/learning-BfrQ4YZY.js +1 -0
  47. package/dist/web/client/assets/login-D4n3AcBR.js +1 -0
  48. package/dist/web/client/assets/mcp-CnjQc_JJ.js +1 -0
  49. package/dist/web/client/assets/members-wxsVTJdW.js +1 -0
  50. package/dist/web/client/assets/memory-Du60O3pE.js +1 -0
  51. package/dist/web/client/assets/{policy-DaijITy7.js → policy-BOfnkJsL.js} +1 -1
  52. package/dist/web/client/assets/{preload-helper-mNuBjNXU.js → preload-helper-bztXdkDj.js} +1 -1
  53. package/dist/web/client/assets/routes-B9CuhzUW.js +1 -0
  54. package/dist/web/client/assets/services-DyvqJqM2.js +1 -0
  55. package/dist/web/client/assets/skills-DQo7ioW7.js +1 -0
  56. package/dist/web/client/assets/styles-B5vcgXln.css +2 -0
  57. package/dist/web/client/assets/{teams-D92R9Pb7.js → teams-DPggy97H.js} +1 -1
  58. package/dist/web/client/assets/teams-DdawcfNR.js +1 -0
  59. package/dist/web/client/assets/telegram-DcTeDpP5.js +1 -0
  60. package/dist/web/client/assets/tokens-CIEKwZXc.js +1 -0
  61. package/dist/web/client/assets/triggers-Bc2RrUPm.js +1 -0
  62. package/dist/web/client/assets/utils-B6KiDbIe.js +1 -0
  63. package/dist/web/client/assets/welcome-DlhNXUIa.js +1 -0
  64. package/dist/web/client/assets/wire-constants-BzdHSc6A.js +74 -0
  65. package/dist/web/client/assets/x-DAXGIe_Q.js +1 -0
  66. package/dist/web/server/assets/{AgentTabs-aXdsiiMp.js → AgentTabs-Dq8hDM2Q.js} +9 -2
  67. package/dist/web/server/assets/{ChatPane-Ba5wTsVk.js → ChatPane-CgSe7tsy.js} +81 -43
  68. package/dist/web/server/assets/{ConfigPage-BKlh5vOU.js → ConfigPage-CiQ-gxmJ.js} +3 -2
  69. package/dist/web/server/assets/ConfirmDialog-C-MPYYSU.js +99 -0
  70. package/dist/web/server/assets/FieldRow-DCOF07kl.js +160 -0
  71. package/dist/web/server/assets/{Page-LENulSXY.js → Page-Bz-ydB8j.js} +4 -10
  72. package/dist/web/server/assets/{ProductionTeamPolicyEditor-Y4mzFFvR.js → ProductionTeamPolicyEditor-DQSdP7Yx.js} +140 -123
  73. package/dist/web/server/assets/{SectionTabs-BJTPr5nU.js → SectionTabs-B2Yw81XN.js} +2 -2
  74. package/dist/web/server/assets/{Sidebar-DsRVCszF.js → Sidebar-DKyk7oIo.js} +563 -283
  75. package/dist/web/server/assets/{TeamTabs-zZzbP1t_.js → TeamTabs-Co3n2exj.js} +2 -6
  76. package/dist/web/server/assets/{TemplatesTabs-CcRxZhJe.js → TemplatesTabs-B0fA361R.js} +1 -1
  77. package/dist/web/server/assets/UnsavedChangesGuard-CiStXyBI.js +40 -0
  78. package/dist/web/server/assets/{_id-Dj1yZ3zJ.js → _id-BAA9KJBU.js} +4 -4
  79. package/dist/web/server/assets/{_id-LrvXU4Nr.js → _id-BM5m2FLT.js} +4 -4
  80. package/dist/web/server/assets/{_id-CwyGjJeP.js → _id-BYKpT2Tu.js} +4 -5
  81. package/dist/web/server/assets/{_id-BHYLL8M-.js → _id-BeKhPKw3.js} +350 -185
  82. package/dist/web/server/assets/{_id-C3HY4lWg.js → _id-BqWTB8Wl.js} +188 -86
  83. package/dist/web/server/assets/{_id-DinTp_7X.js → _id-BwvCtzlD.js} +3 -3
  84. package/dist/web/server/assets/{_id-D27T85mU.js → _id-DYU6uIBx.js} +4 -5
  85. package/dist/web/server/assets/{_id-IzadFZV9.js → _id-DvlDkk04.js} +4 -4
  86. package/dist/web/server/assets/{_id-BhOB8Umi.js → _id-DxCnEFpm.js} +4 -4
  87. package/dist/web/server/assets/{_id-tB47Vsfp.js → _id-HMy7jM3P.js} +3 -3
  88. package/dist/web/server/assets/{_id-D3Ap7zZA.js → _id-ndxFHx0t.js} +75 -71
  89. package/dist/web/server/assets/{_id-FcHdSocl.js → _id-sNu5aXZt.js} +5 -4
  90. package/dist/web/server/assets/{_tanstack-start-manifest_v-BGDBdnUs.js → _tanstack-start-manifest_v-C-OiOZeM.js} +118 -94
  91. package/dist/web/server/assets/{activity-DohitgwW.js → activity-9VP6QDTH.js} +3 -3
  92. package/dist/web/server/assets/{activity-BCI4mfNS.js → activity-BWv1goK6.js} +3 -3
  93. package/dist/web/server/assets/{activity-D9SMqBhy.js → activity-LjpblbDL.js} +3 -3
  94. package/dist/web/server/assets/{agents-C9xlWK0Z.js → agents-BDFGrU3o.js} +4 -4
  95. package/dist/web/server/assets/{agents-BY74v7fM.js → agents-BJAv919x.js} +3 -3
  96. package/dist/web/server/assets/{agents-BvttypqB.js → agents-CJk4pxKu.js} +3 -3
  97. package/dist/web/server/assets/{agents-CgZMHj80.js → agents-CYw1xHoY.js} +138 -16
  98. package/dist/web/server/assets/{agents-DZuFEj0D.js → agents-DfNKc_Q7.js} +52 -8
  99. package/dist/web/server/assets/{agents-BPKOshR5.js → agents-DjyQk94u.js} +4 -4
  100. package/dist/web/server/assets/{approvals-CWcFHlor.js → approvals-7JOoBchn.js} +3 -3
  101. package/dist/web/server/assets/{approvals-BGU-XGIO.js → approvals-BYi84gwl.js} +3 -3
  102. package/dist/web/server/assets/{approvals-DCaVw1Mz.js → approvals-Bz123liE.js} +59 -21
  103. package/dist/web/server/assets/{attention-BxkTf337.js → attention-B35JvhOL.js} +3 -3
  104. package/dist/web/server/assets/{attention-w21GQIGH.js → attention-C1pPWSXw.js} +3 -3
  105. package/dist/web/server/assets/{attention-CM-Ks1N9.js → attention-UhqPK_Ro.js} +3 -3
  106. package/dist/web/server/assets/{auth-byfSx6Ja.js → auth-7BHTH-KS.js} +5 -5
  107. package/dist/web/server/assets/{config-BDCJdtj2.js → config-BMiajTZP.js} +10 -5
  108. package/dist/web/server/assets/{config-1w2GiJUn.js → config-BlMkHStx.js} +3 -3
  109. package/dist/web/server/assets/config-ExacOzHX.js +958 -0
  110. package/dist/web/server/assets/{createServerRpc-pU-IQV2Y.js → createServerRpc-B7Yr1K8i.js} +1 -1
  111. package/dist/web/server/assets/{createSsrRpc-DFsIAfFd.js → createSsrRpc-6LHNEsSK.js} +1 -1
  112. package/dist/web/server/assets/{daemon-client-2NRMzlTr.js → daemon-client-CI5NHwNC.js} +16 -4
  113. package/dist/web/server/assets/{inbox-CzlKT9Wg.js → inbox-Dv55rGYq.js} +4 -4
  114. package/dist/web/server/assets/{inbox-BLUzA5sQ.js → inbox-RweGCV3D.js} +3 -3
  115. package/dist/web/server/assets/{inbox-ZvDNAjaM.js → inbox-cu3jLzNP.js} +4 -4
  116. package/dist/web/server/assets/{learning-B7PBkvER.js → learning-BaKM6qaw.js} +4 -4
  117. package/dist/web/server/assets/{learning-8zav4pIT.js → learning-C2upa1CE.js} +4 -4
  118. package/dist/web/server/assets/{learning-Cq7K2heb.js → learning-CbtNlqYo.js} +76 -23
  119. package/dist/web/server/assets/{login-CmWvxfTK.js → login-BNj3U6ok.js} +22 -12
  120. package/dist/web/server/assets/{login-Bx5LEyGP.js → login-Be8eP4Jp.js} +2 -2
  121. package/dist/web/server/assets/{mcp-DIWTogHM.js → mcp-B0goWO8Q.js} +3 -3
  122. package/dist/web/server/assets/{mcp-2pwT9HU8.js → mcp-BvnvlVFd.js} +3 -3
  123. package/dist/web/server/assets/mcp-CiBs8unU.js +332 -0
  124. package/dist/web/server/assets/members-BP3UTqu1.js +12 -0
  125. package/dist/web/server/assets/members-DHYTVgwb.js +100 -0
  126. package/dist/web/server/assets/members-DiYtr-zm.js +12 -0
  127. package/dist/web/server/assets/{memory-Dngc13Nw.js → memory-BqV-Afy1.js} +4 -4
  128. package/dist/web/server/assets/{memory-a8Kz57Kh.js → memory-CkXUgf5s.js} +150 -48
  129. package/dist/web/server/assets/{memory-pZ4pZT7p.js → memory-DTFEmfF3.js} +4 -4
  130. package/dist/web/server/assets/{policy-Bb-vEgqg.js → policy-18fdTFO4.js} +3 -3
  131. package/dist/web/server/assets/{policy-C30AeFIb.js → policy-BddK4xom.js} +3 -3
  132. package/dist/web/server/assets/{policy-BcGELcc9.js → policy-Bvvav8fh.js} +4 -4
  133. package/dist/web/server/assets/public-origin-xV0lm0Ty.js +25 -0
  134. package/dist/web/server/assets/router-pjH2t8Rl.js +813 -0
  135. package/dist/web/server/assets/{routes-B6cMLIPk.js → routes-BgHisAxH.js} +22 -5
  136. package/dist/web/server/assets/{routes-BrA-U_Hm.js → routes-COtkyZG1.js} +5 -5
  137. package/dist/web/server/assets/{routes-C19CMLZt.js → routes-DAU2g7Uz.js} +4 -4
  138. package/dist/web/server/assets/services-ClyGBU7W.js +83 -0
  139. package/dist/web/server/assets/{services-C4szdhPx.js → services-DgoU1udp.js} +3 -3
  140. package/dist/web/server/assets/{services-wG8I06oS.js → services-DozuJtzX.js} +3 -3
  141. package/dist/web/server/assets/{skills-BZdqiDig.js → skills-CYih9TJw.js} +47 -6
  142. package/dist/web/server/assets/{skills-a9VSWHWq.js → skills-DfGSJTCB.js} +3 -3
  143. package/dist/web/server/assets/{skills-C-UgkuCW.js → skills-Dw3cI3si.js} +3 -3
  144. package/dist/web/server/assets/start-D4Wq9iTa.js +70 -0
  145. package/dist/web/server/assets/{teams-OIkHuxy1.js → teams-BJuoNOTB.js} +3 -3
  146. package/dist/web/server/assets/{teams-CpQ0YgWf.js → teams-DF3RViAg.js} +3 -3
  147. package/dist/web/server/assets/{teams-DEpQR2QA.js → teams-DFnuc660.js} +3 -3
  148. package/dist/web/server/assets/{teams-DqfrEoH6.js → teams-DPnAX4wD.js} +4 -4
  149. package/dist/web/server/assets/{teams-jBtvnk59.js → teams-TV6nbEN_.js} +101 -10
  150. package/dist/web/server/assets/{teams-MjqgsmC3.js → teams-be05ci17.js} +3 -3
  151. package/dist/web/server/assets/{telegram-DNgCWebD.js → telegram-1AWL6lFw.js} +3 -3
  152. package/dist/web/server/assets/{telegram-XwyKSEtj.js → telegram-DbOFpTFm.js} +3 -3
  153. package/dist/web/server/assets/{telegram-CBF8SJzB.js → telegram-Dj4Wwhd6.js} +262 -43
  154. package/dist/web/server/assets/tokens-DDwtO15P.js +359 -0
  155. package/dist/web/server/assets/tokens-DjM8GsgS.js +19 -0
  156. package/dist/web/server/assets/{tokens-BnwFbV7T.js → tokens-_2hptHP6.js} +4 -4
  157. package/dist/web/server/assets/{triggers-BZPl5CHs.js → triggers-BvjYNmmY.js} +4 -4
  158. package/dist/web/server/assets/triggers-CHk9O3rU.js +367 -0
  159. package/dist/web/server/assets/{triggers-D79NoSXk.js → triggers-Nezfw-Bd.js} +4 -4
  160. package/dist/web/server/assets/utils-C_uf36nf.js +8 -0
  161. package/dist/web/server/assets/{welcome-DDB11L5j.js → welcome-B8nchXdF.js} +9 -8
  162. package/dist/web/server/server.js +29 -33
  163. package/dist/web-server.js +4 -0
  164. package/dist/web-server.js.map +1 -1
  165. package/dist/worker.js +1744 -362
  166. package/dist/worker.js.map +1 -1
  167. package/package.json +7 -6
  168. package/dist/web/client/assets/AgentTabs-R6gSjIj3.js +0 -1
  169. package/dist/web/client/assets/ConfigPage-BCwfgyjD.js +0 -1
  170. package/dist/web/client/assets/FieldRow-avAFLgYW.js +0 -1
  171. package/dist/web/client/assets/Page-CwNuDhWz.js +0 -1
  172. package/dist/web/client/assets/ProductionTeamPolicyEditor-CsWpTsy6.js +0 -7
  173. package/dist/web/client/assets/SectionTabs-DZzy01az.js +0 -1
  174. package/dist/web/client/assets/TeamTabs-DvqWieCq.js +0 -1
  175. package/dist/web/client/assets/_id-BUuz7Drv.js +0 -1
  176. package/dist/web/client/assets/_id-BegmVRmT.js +0 -1
  177. package/dist/web/client/assets/_id-BrA4Crh_.js +0 -1
  178. package/dist/web/client/assets/activity-n0Fw9_w3.js +0 -1
  179. package/dist/web/client/assets/agents-B33VQtbl.js +0 -1
  180. package/dist/web/client/assets/agents-C50pdxp7.js +0 -1
  181. package/dist/web/client/assets/approvals-DVW0hX8h.js +0 -1
  182. package/dist/web/client/assets/attention-B2490jcN.js +0 -1
  183. package/dist/web/client/assets/chevron-down-B0aNNOyn.js +0 -1
  184. package/dist/web/client/assets/config-CMMxxeX2.js +0 -3
  185. package/dist/web/client/assets/context-DcFzsfZ3.js +0 -1
  186. package/dist/web/client/assets/index-3nrK5iFr.js +0 -12
  187. package/dist/web/client/assets/learning-BUX1MFu2.js +0 -1
  188. package/dist/web/client/assets/login-CMWpGDKv.js +0 -1
  189. package/dist/web/client/assets/mcp-lZV08dqc.js +0 -1
  190. package/dist/web/client/assets/members-DAeaY2Cy.js +0 -1
  191. package/dist/web/client/assets/memory-HmMWxxdF.js +0 -1
  192. package/dist/web/client/assets/plus-CPzRJg1V.js +0 -1
  193. package/dist/web/client/assets/routes-BNk270AM.js +0 -1
  194. package/dist/web/client/assets/services-DtrpJrdo.js +0 -1
  195. package/dist/web/client/assets/skills-Cv93A3P3.js +0 -1
  196. package/dist/web/client/assets/styles-DMltY3su.css +0 -2
  197. package/dist/web/client/assets/teams-CCFnSNKi.js +0 -1
  198. package/dist/web/client/assets/telegram-BF1vdgDB.js +0 -1
  199. package/dist/web/client/assets/tokens-BXj6hWW-.js +0 -1
  200. package/dist/web/client/assets/triggers-NT24i4hZ.js +0 -1
  201. package/dist/web/client/assets/welcome-D0cy68eZ.js +0 -1
  202. package/dist/web/client/assets/wire-constants-BhVKOCQa.js +0 -74
  203. package/dist/web/server/assets/FieldRow-B4eTegH9.js +0 -94
  204. package/dist/web/server/assets/config-BmixCpz-.js +0 -372
  205. package/dist/web/server/assets/context-B-XDf6Ym.js +0 -12
  206. package/dist/web/server/assets/context-BXGo5Vfi.js +0 -12
  207. package/dist/web/server/assets/context-DrkrIWun.js +0 -47
  208. package/dist/web/server/assets/mcp-BJjLIdP0.js +0 -261
  209. package/dist/web/server/assets/members-CCv17cjQ.js +0 -46
  210. package/dist/web/server/assets/members-CW5aBe81.js +0 -12
  211. package/dist/web/server/assets/members-VdPwD6CE.js +0 -12
  212. package/dist/web/server/assets/router-CIVjTgNp.js +0 -537
  213. package/dist/web/server/assets/services-B9yBWDX0.js +0 -79
  214. package/dist/web/server/assets/start-WH8WzTL_.js +0 -4
  215. package/dist/web/server/assets/tokens-DPDMSN5O.js +0 -12
  216. package/dist/web/server/assets/tokens-yyTSfBSN.js +0 -186
  217. package/dist/web/server/assets/triggers-CSNNzRIi.js +0 -216
@@ -1,6 +1,6 @@
1
- import { t as Route } from "./routes-C19CMLZt.js";
2
- import { t as ChatPane } from "./ChatPane-Ba5wTsVk.js";
3
- import { n as Sidebar } from "./Sidebar-DsRVCszF.js";
1
+ import { t as Route } from "./routes-DAU2g7Uz.js";
2
+ import { t as ChatPane } from "./ChatPane-CgSe7tsy.js";
3
+ import { n as Sidebar } from "./Sidebar-DKyk7oIo.js";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region src/routes/index.tsx?tsr-split=component
6
6
  function HomePage() {
@@ -26,8 +26,25 @@ function HomePage() {
26
26
  initialMessages: data.selected.initialMessages,
27
27
  initialSessionHead: data.selected.sessionHead
28
28
  }) : /* @__PURE__ */ jsx("div", {
29
- className: "flex h-full items-center justify-center rounded-lg border border-dashed bg-card text-muted-foreground",
30
- children: data.agents.length === 0 ? "No agents yet." : "Pick an agent on the left to start chatting."
29
+ className: "flex h-full items-center justify-center rounded-2xl border border-dashed bg-card px-6 text-center text-muted-foreground",
30
+ children: /* @__PURE__ */ jsxs("div", {
31
+ className: "max-w-sm",
32
+ children: [
33
+ /* @__PURE__ */ jsx("h1", {
34
+ className: "m-0 font-body text-lg font-semibold text-foreground",
35
+ children: data.agents.length === 0 ? "Start your first conversation" : "Choose an agent"
36
+ }),
37
+ /* @__PURE__ */ jsx("p", {
38
+ className: "mt-2 text-sm leading-6",
39
+ children: data.agents.length === 0 ? "Your default Team and Agent template are ready. Use “Spawn first agent” on the left to create a working member." : "Pick an agent in the Team list to open its persistent conversation."
40
+ }),
41
+ data.agents.length === 0 && /* @__PURE__ */ jsx("a", {
42
+ href: "/agents",
43
+ className: "btn-primary mt-4 no-underline",
44
+ children: "Open agent setup"
45
+ })
46
+ ]
47
+ })
31
48
  })
32
49
  })]
33
50
  });
@@ -1,7 +1,7 @@
1
- import { i as getCookie, t as createServerFn } from "../server.js";
2
- import { t as createServerRpc } from "./createServerRpc-pU-IQV2Y.js";
3
- import { n as daemonClient, r as ApiClientError } from "./daemon-client-2NRMzlTr.js";
4
- import { t as SIDEBAR_OPEN_GROUPS_COOKIE } from "./Sidebar-DsRVCszF.js";
1
+ import { a as getCookie, n as createServerFn } from "../server.js";
2
+ import { t as createServerRpc } from "./createServerRpc-B7Yr1K8i.js";
3
+ import { n as daemonClient, r as ApiClientError } from "./daemon-client-CI5NHwNC.js";
4
+ import { t as SIDEBAR_OPEN_GROUPS_COOKIE } from "./Sidebar-DKyk7oIo.js";
5
5
  //#region src/routes/index.tsx?tss-serverfn-split
6
6
  function parseOpenGroupsCookie(raw) {
7
7
  if (!raw) return {};
@@ -21,7 +21,7 @@ var fetchHomeData_createServerFn_handler = createServerRpc({
21
21
  name: "fetchHomeData",
22
22
  filename: "src/routes/index.tsx"
23
23
  }, (opts) => fetchHomeData.__executeServer(opts));
24
- var fetchHomeData = createServerFn({ method: "POST" }).inputValidator((d) => d).handler(fetchHomeData_createServerFn_handler, async ({ data }) => {
24
+ var fetchHomeData = createServerFn({ method: "POST" }).validator((d) => d).handler(fetchHomeData_createServerFn_handler, async ({ data }) => {
25
25
  const client = daemonClient();
26
26
  const [agents, profiles, profileGroups, teams] = await Promise.all([
27
27
  client.get("/api/agents?includeArchived=false"),
@@ -1,9 +1,9 @@
1
- import { t as createServerFn } from "../server.js";
2
- import { t as createSsrRpc } from "./createSsrRpc-DFsIAfFd.js";
1
+ import { n as createServerFn } from "../server.js";
2
+ import { t as createSsrRpc } from "./createSsrRpc-6LHNEsSK.js";
3
3
  import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
4
4
  //#region src/routes/index.tsx
5
- var $$splitComponentImporter = () => import("./routes-B6cMLIPk.js");
6
- var fetchHomeData = createServerFn({ method: "POST" }).inputValidator((d) => d).handler(createSsrRpc("26dbbcbe40063e8aedfd343cf1dfd4dfe5589f24591c0ba35e80c611d7c57c7c"));
5
+ var $$splitComponentImporter = () => import("./routes-BgHisAxH.js");
6
+ var fetchHomeData = createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("26dbbcbe40063e8aedfd343cf1dfd4dfe5589f24591c0ba35e80c611d7c57c7c"));
7
7
  var Route = createFileRoute("/")({
8
8
  validateSearch: (s) => ({ agent: typeof s.agent === "string" ? s.agent : void 0 }),
9
9
  loaderDeps: ({ search }) => ({ agentId: search.agent }),
@@ -0,0 +1,83 @@
1
+ import { t as Route } from "./services-DgoU1udp.js";
2
+ import { a as StatusBadge, t as EmptyState } from "./Page-Bz-ydB8j.js";
3
+ import { t as ConfigPage } from "./ConfigPage-CiQ-gxmJ.js";
4
+ import { t as FieldRow } from "./FieldRow-DCOF07kl.js";
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ //#region src/routes/config/services.tsx?tsr-split=component
7
+ var UNGROUPED_LABEL = "Other";
8
+ /**
9
+ * Bucket services into teams while preserving the order each team first
10
+ * appears in the daemon's SERVICES list. Cards without a `team` field land
11
+ * in an "Other" bucket at the end.
12
+ */
13
+ function groupServices(services) {
14
+ const buckets = /* @__PURE__ */ new Map();
15
+ for (const s of services) {
16
+ const key = s.team ?? UNGROUPED_LABEL;
17
+ const bucket = buckets.get(key) ?? [];
18
+ bucket.push(s);
19
+ buckets.set(key, bucket);
20
+ }
21
+ const entries = Array.from(buckets, ([team, items]) => ({
22
+ team,
23
+ items
24
+ }));
25
+ if (entries.length > 1) entries.sort((a, b) => {
26
+ if (a.team === UNGROUPED_LABEL) return 1;
27
+ if (b.team === UNGROUPED_LABEL) return -1;
28
+ return 0;
29
+ });
30
+ return entries;
31
+ }
32
+ function ServicesPage() {
33
+ const { services } = Route.useLoaderData();
34
+ const grouped = groupServices(services);
35
+ return /* @__PURE__ */ jsxs(ConfigPage, {
36
+ active: "services",
37
+ title: "Services",
38
+ description: /* @__PURE__ */ jsx(Fragment, { children: "Connect optional tools such as web search and crawlers. Secret values are encrypted; endpoint details remain inspectable and editable on this device." }),
39
+ children: [services.length === 0 && /* @__PURE__ */ jsx(EmptyState, {
40
+ title: "No optional services",
41
+ description: "This Bazilion build has no additional service connectors registered."
42
+ }), grouped.map(({ team, items }) => /* @__PURE__ */ jsxs("section", {
43
+ className: "space-y-3",
44
+ children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("h2", {
45
+ className: "m-0 font-body text-base font-semibold text-foreground",
46
+ children: team
47
+ }), /* @__PURE__ */ jsx("p", {
48
+ className: "mt-1 text-xs text-muted-foreground",
49
+ children: "Open only the service you want to configure."
50
+ })] }), items.map((service) => {
51
+ const configured = service.fields.filter((field) => field.set).length;
52
+ return /* @__PURE__ */ jsxs("details", {
53
+ open: configured > 0,
54
+ className: "overflow-hidden rounded-2xl border border-border bg-card shadow-baziu-sm",
55
+ children: [/* @__PURE__ */ jsxs("summary", {
56
+ className: "flex cursor-pointer list-none items-center gap-3 px-4 py-4 marker:hidden sm:px-5",
57
+ children: [/* @__PURE__ */ jsxs("span", {
58
+ className: "min-w-0 flex-1",
59
+ children: [/* @__PURE__ */ jsx("span", {
60
+ className: "block font-semibold text-foreground",
61
+ children: service.displayName
62
+ }), /* @__PURE__ */ jsx("span", {
63
+ className: "mt-0.5 block font-mono text-xs text-muted-foreground",
64
+ children: service.id
65
+ })]
66
+ }), /* @__PURE__ */ jsx(StatusBadge, {
67
+ variant: configured > 0 ? "success" : "neutral",
68
+ children: configured > 0 ? `${configured} field${configured === 1 ? "" : "s"} configured` : "Not configured"
69
+ })]
70
+ }), /* @__PURE__ */ jsxs("div", {
71
+ className: "border-t border-border px-4 py-4 sm:px-5",
72
+ children: [service.hint && /* @__PURE__ */ jsx("p", {
73
+ className: "mb-2 text-sm text-muted-foreground",
74
+ children: service.hint
75
+ }), service.fields.map((field) => /* @__PURE__ */ jsx(FieldRow, { field }, field.envVar))]
76
+ })]
77
+ }, service.id);
78
+ })]
79
+ }, team))]
80
+ });
81
+ }
82
+ //#endregion
83
+ export { ServicesPage as component };
@@ -1,8 +1,8 @@
1
- import { t as createServerFn } from "../server.js";
2
- import { t as createSsrRpc } from "./createSsrRpc-DFsIAfFd.js";
1
+ import { n as createServerFn } from "../server.js";
2
+ import { t as createSsrRpc } from "./createSsrRpc-6LHNEsSK.js";
3
3
  import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
4
4
  //#region src/routes/config/services.tsx
5
- var $$splitComponentImporter = () => import("./services-B9yBWDX0.js");
5
+ var $$splitComponentImporter = () => import("./services-ClyGBU7W.js");
6
6
  var fetchServices = createServerFn({ method: "GET" }).handler(createSsrRpc("6afd81bef0ee381d6e3641cd8e269968429c874e2f9d56c8f818cc9d180ee477"));
7
7
  var Route = createFileRoute("/config/services")({
8
8
  loader: () => fetchServices(),
@@ -1,6 +1,6 @@
1
- import { t as createServerFn } from "../server.js";
2
- import { t as createServerRpc } from "./createServerRpc-pU-IQV2Y.js";
3
- import { n as daemonClient } from "./daemon-client-2NRMzlTr.js";
1
+ import { n as createServerFn } from "../server.js";
2
+ import { t as createServerRpc } from "./createServerRpc-B7Yr1K8i.js";
3
+ import { n as daemonClient } from "./daemon-client-CI5NHwNC.js";
4
4
  //#region src/routes/config/services.tsx?tss-serverfn-split
5
5
  var fetchServices_createServerFn_handler = createServerRpc({
6
6
  id: "6afd81bef0ee381d6e3641cd8e269968429c874e2f9d56c8f818cc9d180ee477",
@@ -1,6 +1,7 @@
1
- import { t as Route } from "./skills-C-UgkuCW.js";
2
- import { a as StatusBadge, i as SectionCard, n as PageHeader, r as PageShell, t as EmptyState } from "./Page-LENulSXY.js";
1
+ import { t as Route } from "./skills-Dw3cI3si.js";
2
+ import { a as StatusBadge, i as SectionCard, n as PageHeader, r as PageShell, t as EmptyState } from "./Page-Bz-ydB8j.js";
3
3
  import { t as Button } from "./Button-Dsnw22OF.js";
4
+ import { t as ConfirmDialog } from "./ConfirmDialog-C-MPYYSU.js";
4
5
  import { useRef, useState } from "react";
5
6
  import { useRouter } from "@tanstack/react-router";
6
7
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -8,12 +9,13 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
9
  function SkillsPage() {
9
10
  const skills = Route.useLoaderData();
10
11
  const router = useRouter();
12
+ const [removeTarget, setRemoveTarget] = useState(null);
13
+ const [removeError, setRemoveError] = useState(null);
11
14
  async function remove(name) {
12
- if (!confirm(`Remove skill "${name}"? This deletes the directory on disk.`)) return;
13
15
  const res = await fetch(`/api/skills/${encodeURIComponent(name)}`, { method: "DELETE" });
14
16
  if (!res.ok && res.status !== 204) {
15
- alert(res.statusText);
16
- return;
17
+ const body = await res.json().catch(() => null);
18
+ throw new Error(body?.error ?? `Could not remove skill (${res.status})`);
17
19
  }
18
20
  await router.invalidate();
19
21
  }
@@ -24,6 +26,11 @@ function SkillsPage() {
24
26
  title: "Skills",
25
27
  description: "Install and review the prompt-only skills available to your agents."
26
28
  }),
29
+ removeError && /* @__PURE__ */ jsx("p", {
30
+ role: "alert",
31
+ className: "err",
32
+ children: removeError
33
+ }),
27
34
  /* @__PURE__ */ jsx(ImportCard, { onImported: () => router.invalidate() }),
28
35
  /* @__PURE__ */ jsx(SectionCard, {
29
36
  title: "Installed skills",
@@ -72,13 +79,47 @@ function SkillsPage() {
72
79
  children: /* @__PURE__ */ jsx(Button, {
73
80
  variant: "danger",
74
81
  className: "whitespace-nowrap",
75
- onClick: () => remove(s.name),
82
+ onClick: () => {
83
+ setRemoveError(null);
84
+ setRemoveTarget(s);
85
+ },
76
86
  children: "Remove"
77
87
  })
78
88
  })
79
89
  ] }, s.name)) })]
80
90
  })
81
91
  })
92
+ }),
93
+ /* @__PURE__ */ jsx(ConfirmDialog, {
94
+ open: removeTarget !== null,
95
+ title: `Remove skill ${removeTarget?.name ?? ""}?`,
96
+ description: /* @__PURE__ */ jsxs("p", { children: [
97
+ "This permanently deletes the installed ",
98
+ /* @__PURE__ */ jsx("code", {
99
+ className: "font-mono",
100
+ children: "SKILL.md"
101
+ }),
102
+ " and every helper script or asset in the ",
103
+ /* @__PURE__ */ jsx("code", {
104
+ className: "font-mono",
105
+ children: removeTarget?.name
106
+ }),
107
+ " ",
108
+ "directory. The skill becomes unavailable to every Agent and Agent template until it is imported again."
109
+ ] }),
110
+ confirmLabel: "delete installed skill",
111
+ onConfirm: async () => {
112
+ if (!removeTarget) return;
113
+ try {
114
+ await remove(removeTarget.name);
115
+ } catch (error) {
116
+ setRemoveError(error instanceof Error ? error.message : String(error));
117
+ throw error;
118
+ }
119
+ },
120
+ onOpenChange: (open) => {
121
+ if (!open) setRemoveTarget(null);
122
+ }
82
123
  })
83
124
  ]
84
125
  });
@@ -1,6 +1,6 @@
1
- import { t as createServerFn } from "../server.js";
2
- import { t as createServerRpc } from "./createServerRpc-pU-IQV2Y.js";
3
- import { n as daemonClient } from "./daemon-client-2NRMzlTr.js";
1
+ import { n as createServerFn } from "../server.js";
2
+ import { t as createServerRpc } from "./createServerRpc-B7Yr1K8i.js";
3
+ import { n as daemonClient } from "./daemon-client-CI5NHwNC.js";
4
4
  //#region src/routes/skills/index.tsx?tss-serverfn-split
5
5
  var fetchSkills_createServerFn_handler = createServerRpc({
6
6
  id: "ae1d30575b229c1e2622fbaf2252800a9a7acc84afdd68cba025ca890b8d52c5",
@@ -1,8 +1,8 @@
1
- import { t as createServerFn } from "../server.js";
2
- import { t as createSsrRpc } from "./createSsrRpc-DFsIAfFd.js";
1
+ import { n as createServerFn } from "../server.js";
2
+ import { t as createSsrRpc } from "./createSsrRpc-6LHNEsSK.js";
3
3
  import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
4
4
  //#region src/routes/skills/index.tsx
5
- var $$splitComponentImporter = () => import("./skills-BZdqiDig.js");
5
+ var $$splitComponentImporter = () => import("./skills-CYih9TJw.js");
6
6
  var fetchSkills = createServerFn({ method: "GET" }).handler(createSsrRpc("ae1d30575b229c1e2622fbaf2252800a9a7acc84afdd68cba025ca890b8d52c5"));
7
7
  var Route = createFileRoute("/skills/")({
8
8
  loader: () => fetchSkills(),
@@ -0,0 +1,70 @@
1
+ import { t as createMiddleware } from "../server.js";
2
+ import { t as webOriginConfig } from "./public-origin-xV0lm0Ty.js";
3
+ //#region ../../node_modules/.pnpm/@tanstack+start-client-core@1.170.14/node_modules/@tanstack/start-client-core/dist/esm/createStart.js
4
+ function dedupeSerializationAdapters(deduped, serializationAdapters) {
5
+ for (let i = 0, len = serializationAdapters.length; i < len; i++) {
6
+ const current = serializationAdapters[i];
7
+ if (!deduped.has(current)) {
8
+ deduped.add(current);
9
+ if (current.extends) dedupeSerializationAdapters(deduped, current.extends);
10
+ }
11
+ }
12
+ }
13
+ var createStart = (getOptions) => {
14
+ return {
15
+ getOptions: async () => {
16
+ const options = await getOptions();
17
+ if (options.serializationAdapters) {
18
+ const deduped = /* @__PURE__ */ new Set();
19
+ dedupeSerializationAdapters(deduped, options.serializationAdapters);
20
+ options.serializationAdapters = Array.from(deduped);
21
+ }
22
+ return options;
23
+ },
24
+ createMiddleware
25
+ };
26
+ };
27
+ //#endregion
28
+ //#region src/start.ts
29
+ function isLoopback(hostname) {
30
+ return [
31
+ "127.0.0.1",
32
+ "localhost",
33
+ "[::1]",
34
+ "::1"
35
+ ].includes(hostname);
36
+ }
37
+ function secureHeaders(headers, production) {
38
+ headers.set("x-content-type-options", "nosniff");
39
+ headers.set("referrer-policy", "same-origin");
40
+ headers.set("permissions-policy", "camera=(), microphone=(), geolocation=()");
41
+ headers.set("x-frame-options", "DENY");
42
+ headers.set("content-security-policy", "default-src 'self'; base-uri 'self'; connect-src 'self'; font-src 'self'; frame-ancestors 'none'; img-src 'self' data:; object-src 'none'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'");
43
+ if (production) headers.set("strict-transport-security", "max-age=31536000; includeSubDomains");
44
+ }
45
+ var securityBoundary = createMiddleware().server(async ({ request, next }) => {
46
+ const config = webOriginConfig();
47
+ const incoming = new URL(request.url);
48
+ if (config.production) {
49
+ const expected = new URL(config.origin);
50
+ if (request.headers.get("host") !== expected.host) return new Response("not found", { status: 404 });
51
+ const forwardedHost = request.headers.get("x-forwarded-host");
52
+ const forwardedProto = request.headers.get("x-forwarded-proto");
53
+ if (forwardedHost && forwardedHost !== expected.host || forwardedProto && forwardedProto !== "https") return new Response("invalid forwarding headers", { status: 400 });
54
+ } else if (!isLoopback(incoming.hostname)) return new Response("loopback development only", { status: 403 });
55
+ if (request.headers.has("forwarded")) return new Response("invalid forwarding headers", { status: 400 });
56
+ const result = await next();
57
+ const headers = new Headers(result.response.headers);
58
+ secureHeaders(headers, config.production);
59
+ return {
60
+ ...result,
61
+ response: new Response(result.response.body, {
62
+ status: result.response.status,
63
+ statusText: result.response.statusText,
64
+ headers
65
+ })
66
+ };
67
+ });
68
+ var startInstance = createStart(() => ({ requestMiddleware: [securityBoundary] }));
69
+ //#endregion
70
+ export { startInstance };
@@ -1,8 +1,8 @@
1
- import { t as createServerFn } from "../server.js";
2
- import { t as createSsrRpc } from "./createSsrRpc-DFsIAfFd.js";
1
+ import { n as createServerFn } from "../server.js";
2
+ import { t as createSsrRpc } from "./createSsrRpc-6LHNEsSK.js";
3
3
  import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
4
4
  //#region src/routes/templates/teams/index.tsx
5
- var $$splitComponentImporter = () => import("./teams-CpQ0YgWf.js");
5
+ var $$splitComponentImporter = () => import("./teams-DF3RViAg.js");
6
6
  var fetchTeams = createServerFn({ method: "GET" }).handler(createSsrRpc("1bb12262aaa902fa208aafaa70b69c63da34c1fe523ab0322fe766903fc6b4c1"));
7
7
  var Route = createFileRoute("/templates/teams/")({
8
8
  loader: () => fetchTeams(),
@@ -1,7 +1,7 @@
1
- import { t as Route } from "./teams-OIkHuxy1.js";
2
- import { n as PageHeader, r as PageShell } from "./Page-LENulSXY.js";
1
+ import { t as Route } from "./teams-BJuoNOTB.js";
2
+ import { n as PageHeader, r as PageShell } from "./Page-Bz-ydB8j.js";
3
3
  import { t as Button } from "./Button-Dsnw22OF.js";
4
- import { t as TemplatesTabs } from "./TemplatesTabs-CcRxZhJe.js";
4
+ import { t as TemplatesTabs } from "./TemplatesTabs-B0fA361R.js";
5
5
  import { useState } from "react";
6
6
  import { useRouter } from "@tanstack/react-router";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,9 +1,9 @@
1
- import { t as createServerFn } from "../server.js";
2
- import { t as createSsrRpc } from "./createSsrRpc-DFsIAfFd.js";
1
+ import { n as createServerFn } from "../server.js";
2
+ import { t as createSsrRpc } from "./createSsrRpc-6LHNEsSK.js";
3
3
  import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
4
4
  //#region src/routes/teams/index.tsx
5
5
  var $$splitErrorComponentImporter = () => import("./teams-3im0oQnS.js");
6
- var $$splitComponentImporter = () => import("./teams-jBtvnk59.js");
6
+ var $$splitComponentImporter = () => import("./teams-TV6nbEN_.js");
7
7
  var fetchTeamsData = createServerFn({ method: "GET" }).handler(createSsrRpc("1ab05a58944792f34ad279deeaa56f70e9360687856b18327f335b022e8d21a5"));
8
8
  var Route = createFileRoute("/teams/")({
9
9
  loader: () => fetchTeamsData(),
@@ -1,6 +1,6 @@
1
- import { t as createServerFn } from "../server.js";
2
- import { t as createServerRpc } from "./createServerRpc-pU-IQV2Y.js";
3
- import { n as daemonClient } from "./daemon-client-2NRMzlTr.js";
1
+ import { n as createServerFn } from "../server.js";
2
+ import { t as createServerRpc } from "./createServerRpc-B7Yr1K8i.js";
3
+ import { n as daemonClient } from "./daemon-client-CI5NHwNC.js";
4
4
  //#region src/routes/teams/index.tsx?tss-serverfn-split
5
5
  var fetchTeamsData_createServerFn_handler = createServerRpc({
6
6
  id: "1ab05a58944792f34ad279deeaa56f70e9360687856b18327f335b022e8d21a5",
@@ -12,7 +12,7 @@ var fetchTeamsData = createServerFn({ method: "GET" }).handler(fetchTeamsData_cr
12
12
  const [teams, agents, health] = await Promise.all([
13
13
  c.get("/api/teams"),
14
14
  c.get("/api/agents?includeArchived=true"),
15
- c.get("/api/health")
15
+ c.get("/api/health/details")
16
16
  ]);
17
17
  const memberCounts = {};
18
18
  for (const a of agents) memberCounts[a.teamId] = (memberCounts[a.teamId] ?? 0) + 1;
@@ -1,6 +1,7 @@
1
- import { t as Route } from "./teams-DEpQR2QA.js";
2
- import { a as StatusBadge, i as SectionCard, n as PageHeader, r as PageShell, t as EmptyState } from "./Page-LENulSXY.js";
1
+ import { t as Route } from "./teams-DFnuc660.js";
2
+ import { a as StatusBadge, i as SectionCard, n as PageHeader, r as PageShell, t as EmptyState } from "./Page-Bz-ydB8j.js";
3
3
  import { t as Button } from "./Button-Dsnw22OF.js";
4
+ import { t as ConfirmDialog } from "./ConfirmDialog-C-MPYYSU.js";
4
5
  import { useState } from "react";
5
6
  import { useRouter } from "@tanstack/react-router";
6
7
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -8,14 +9,15 @@ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
9
  function TeamsPage() {
9
10
  const { teams, memberCounts, policies, readiness } = Route.useLoaderData();
10
11
  const router = useRouter();
12
+ const [removeTarget, setRemoveTarget] = useState(null);
13
+ const [actionError, setActionError] = useState(null);
11
14
  async function remove(id) {
12
- if (!confirm("remove this team registration?")) return;
13
15
  const revision = policies[id]?.revision;
14
- if (!revision) return;
16
+ if (!revision) throw new Error("The Team policy revision is unavailable. Nothing was removed.");
15
17
  const res = await fetch(`/api/teams/${encodeURIComponent(id)}?expectedTeamPolicyRevision=${revision}`, { method: "DELETE" });
16
18
  if (!res.ok && res.status !== 204) {
17
- alert(res.statusText);
18
- return;
19
+ const body = await res.json().catch(() => null);
20
+ throw new Error(body?.error ?? `Could not remove Team (${res.status})`);
19
21
  }
20
22
  await router.invalidate();
21
23
  }
@@ -45,14 +47,19 @@ function TeamsPage() {
45
47
  })
46
48
  }),
47
49
  /* @__PURE__ */ jsx(RegisterTeamForm, { onRegistered: () => router.invalidate() }),
50
+ actionError && /* @__PURE__ */ jsx("p", {
51
+ role: "alert",
52
+ className: "err",
53
+ children: actionError
54
+ }),
48
55
  /* @__PURE__ */ jsx(SectionCard, {
49
56
  title: "Registered teams",
50
57
  description: "Open a Team to manage its context, members, shared memory, and policy.",
51
58
  children: teams.length === 0 ? /* @__PURE__ */ jsx(EmptyState, {
52
59
  title: "No teams registered",
53
60
  description: "Register a Team above to create a workspace for your agents."
54
- }) : /* @__PURE__ */ jsx("div", {
55
- className: "overflow-x-auto",
61
+ }) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("div", {
62
+ className: "hidden overflow-x-auto md:block",
56
63
  children: /* @__PURE__ */ jsxs("table", {
57
64
  className: "min-w-[820px]",
58
65
  children: [/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
@@ -84,7 +91,7 @@ function TeamsPage() {
84
91
  className: "flex justify-end",
85
92
  children: count === 0 ? /* @__PURE__ */ jsx(Button, {
86
93
  variant: "danger",
87
- onClick: () => remove(g.id),
94
+ onClick: () => setRemoveTarget(g),
88
95
  children: "Remove"
89
96
  }) : /* @__PURE__ */ jsx(StatusBadge, {
90
97
  variant: "neutral",
@@ -95,7 +102,90 @@ function TeamsPage() {
95
102
  ] }, g.id);
96
103
  }) })]
97
104
  })
98
- })
105
+ }), /* @__PURE__ */ jsx("div", {
106
+ className: "grid gap-3 md:hidden",
107
+ children: teams.map((team) => {
108
+ const count = memberCounts[team.id] ?? 0;
109
+ const policy = policies[team.id];
110
+ return /* @__PURE__ */ jsxs("article", {
111
+ className: "min-w-0 rounded-xl border border-border bg-muted/20 p-4",
112
+ children: [
113
+ /* @__PURE__ */ jsxs("div", {
114
+ className: "flex min-w-0 items-start justify-between gap-3",
115
+ children: [/* @__PURE__ */ jsxs("div", {
116
+ className: "min-w-0",
117
+ children: [/* @__PURE__ */ jsx("a", {
118
+ href: `/teams/${encodeURIComponent(team.id)}`,
119
+ className: "block truncate font-semibold text-foreground",
120
+ children: team.name
121
+ }), /* @__PURE__ */ jsx("p", {
122
+ className: "mt-0.5 truncate font-mono text-xs text-muted-foreground",
123
+ children: team.id
124
+ })]
125
+ }), /* @__PURE__ */ jsxs(StatusBadge, {
126
+ variant: count > 0 ? "success" : "neutral",
127
+ children: [
128
+ count,
129
+ " member",
130
+ count === 1 ? "" : "s"
131
+ ]
132
+ })]
133
+ }),
134
+ /* @__PURE__ */ jsxs("dl", {
135
+ className: "mt-3 grid gap-2 text-xs sm:grid-cols-2",
136
+ children: [/* @__PURE__ */ jsxs("div", {
137
+ className: "rounded-lg bg-muted p-2",
138
+ children: [/* @__PURE__ */ jsx("dt", {
139
+ className: "font-semibold text-muted-foreground",
140
+ children: "Policy"
141
+ }), /* @__PURE__ */ jsx("dd", {
142
+ className: "mt-0.5",
143
+ children: /* @__PURE__ */ jsx("a", {
144
+ href: `/teams/${encodeURIComponent(team.id)}/policy`,
145
+ children: policy ? `Revision ${policy.revision} · ${policy.edges} edges` : "Unavailable"
146
+ })
147
+ })]
148
+ }), /* @__PURE__ */ jsxs("div", {
149
+ className: "rounded-lg bg-muted p-2",
150
+ children: [/* @__PURE__ */ jsx("dt", {
151
+ className: "font-semibold text-muted-foreground",
152
+ children: "Baseline"
153
+ }), /* @__PURE__ */ jsx("dd", {
154
+ className: "mt-0.5 break-words",
155
+ children: policy?.baseline ?? "None"
156
+ })]
157
+ })]
158
+ }),
159
+ count === 0 && /* @__PURE__ */ jsx("div", {
160
+ className: "mt-3",
161
+ children: /* @__PURE__ */ jsx(Button, {
162
+ variant: "danger",
163
+ onClick: () => setRemoveTarget(team),
164
+ children: "Remove Team"
165
+ })
166
+ })
167
+ ]
168
+ }, team.id);
169
+ })
170
+ })] })
171
+ }),
172
+ /* @__PURE__ */ jsx(ConfirmDialog, {
173
+ open: removeTarget !== null,
174
+ onOpenChange: (open) => {
175
+ if (!open) setRemoveTarget(null);
176
+ },
177
+ title: `Remove ${removeTarget?.name ?? "Team"}?`,
178
+ description: /* @__PURE__ */ jsx("p", { children: "This removes the empty Team registration and its Bazilion-managed workspace slot. If the slot is a symlink, its external target is not deleted. This action cannot be undone from the web UI." }),
179
+ confirmLabel: "Remove Team",
180
+ onConfirm: async () => {
181
+ if (!removeTarget) return;
182
+ try {
183
+ await remove(removeTarget.id);
184
+ } catch (error) {
185
+ setActionError(error instanceof Error ? error.message : String(error));
186
+ throw error;
187
+ }
188
+ }
99
189
  })
100
190
  ]
101
191
  });
@@ -149,6 +239,7 @@ function RegisterTeamForm({ onRegistered }) {
149
239
  onSubmit: submit,
150
240
  children: [
151
241
  err && /* @__PURE__ */ jsx("div", {
242
+ role: "alert",
152
243
  className: "err",
153
244
  children: err
154
245
  }),
@@ -1,6 +1,6 @@
1
- import { t as createServerFn } from "../server.js";
2
- import { t as createServerRpc } from "./createServerRpc-pU-IQV2Y.js";
3
- import { n as daemonClient } from "./daemon-client-2NRMzlTr.js";
1
+ import { n as createServerFn } from "../server.js";
2
+ import { t as createServerRpc } from "./createServerRpc-B7Yr1K8i.js";
3
+ import { n as daemonClient } from "./daemon-client-CI5NHwNC.js";
4
4
  //#region src/routes/templates/teams/index.tsx?tss-serverfn-split
5
5
  var fetchTeams_createServerFn_handler = createServerRpc({
6
6
  id: "1bb12262aaa902fa208aafaa70b69c63da34c1fe523ab0322fe766903fc6b4c1",
@@ -1,6 +1,6 @@
1
- import { t as createServerFn } from "../server.js";
2
- import { t as createServerRpc } from "./createServerRpc-pU-IQV2Y.js";
3
- import { n as daemonClient } from "./daemon-client-2NRMzlTr.js";
1
+ import { n as createServerFn } from "../server.js";
2
+ import { t as createServerRpc } from "./createServerRpc-B7Yr1K8i.js";
3
+ import { n as daemonClient } from "./daemon-client-CI5NHwNC.js";
4
4
  //#region src/routes/config/integrations/telegram.tsx?tss-serverfn-split
5
5
  var fetchTelegramConfig_createServerFn_handler = createServerRpc({
6
6
  id: "00a157dd07824e1f126f06646effd1d876f280f6fc64c144d2f6429414a4e58a",
@@ -1,8 +1,8 @@
1
- import { t as createServerFn } from "../server.js";
2
- import { t as createSsrRpc } from "./createSsrRpc-DFsIAfFd.js";
1
+ import { n as createServerFn } from "../server.js";
2
+ import { t as createSsrRpc } from "./createSsrRpc-6LHNEsSK.js";
3
3
  import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
4
4
  //#region src/routes/config/integrations/telegram.tsx
5
- var $$splitComponentImporter = () => import("./telegram-CBF8SJzB.js");
5
+ var $$splitComponentImporter = () => import("./telegram-Dj4Wwhd6.js");
6
6
  var fetchTelegramConfig = createServerFn({ method: "GET" }).handler(createSsrRpc("00a157dd07824e1f126f06646effd1d876f280f6fc64c144d2f6429414a4e58a"));
7
7
  var Route = createFileRoute("/config/integrations/telegram")({
8
8
  loader: () => fetchTelegramConfig(),