bazilion 0.12.2 → 0.13.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 (159) 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 +4532 -1277
  5. package/dist/daemon.js.map +1 -1
  6. package/dist/migrations/0001_init.sql +21 -0
  7. package/dist/web/client/assets/{ProductionTeamPolicyEditor-CsWpTsy6.js → ProductionTeamPolicyEditor-DdpYInwV.js} +1 -1
  8. package/dist/web/client/assets/{ProfileCommunicationEditor-C43HvUe-.js → ProfileCommunicationEditor-BcSf2Hao.js} +1 -1
  9. package/dist/web/client/assets/{TeamTabs-DvqWieCq.js → TeamTabs-Bk89JfN7.js} +1 -1
  10. package/dist/web/client/assets/{TemplatesTabs-6Jd_xQj7.js → TemplatesTabs-CyDVzrOl.js} +1 -1
  11. package/dist/web/client/assets/{_id-BrA4Crh_.js → _id-CAJTTnee.js} +1 -1
  12. package/dist/web/client/assets/{_id-BUuz7Drv.js → _id-CN6jPaBu.js} +1 -1
  13. package/dist/web/client/assets/{_id-BegmVRmT.js → _id-DGwJqqDc.js} +1 -1
  14. package/dist/web/client/assets/{_id-AOAT0H_5.js → _id-DWTMH7Eb.js} +1 -1
  15. package/dist/web/client/assets/{activity-n0Fw9_w3.js → activity-DK_M0-bn.js} +1 -1
  16. package/dist/web/client/assets/{agents-C50pdxp7.js → agents-B-i5pASm.js} +1 -1
  17. package/dist/web/client/assets/{agents-B33VQtbl.js → agents-n8U7qNxw.js} +1 -1
  18. package/dist/web/client/assets/{approvals-DVW0hX8h.js → approvals-CmVxCy0Z.js} +1 -1
  19. package/dist/web/client/assets/{attention-B2490jcN.js → attention-F0lUQCWE.js} +1 -1
  20. package/dist/web/client/assets/chevron-down-OndG7r1U.js +1 -0
  21. package/dist/web/client/assets/config-DuApZ9xS.js +3 -0
  22. package/dist/web/client/assets/{context-DcFzsfZ3.js → context-C1sMnW6K.js} +1 -1
  23. package/dist/web/client/assets/dm-sans-latin-400-normal-BwCSEQnW.woff +0 -0
  24. package/dist/web/client/assets/dm-sans-latin-400-normal-CW0RaeGs.woff2 +0 -0
  25. package/dist/web/client/assets/dm-sans-latin-500-normal-B9HHJjqV.woff2 +0 -0
  26. package/dist/web/client/assets/dm-sans-latin-500-normal-Dr3UlScf.woff +0 -0
  27. package/dist/web/client/assets/dm-sans-latin-600-normal-Aqo67rzb.woff2 +0 -0
  28. package/dist/web/client/assets/dm-sans-latin-600-normal-BmdmIIQ2.woff +0 -0
  29. package/dist/web/client/assets/dm-sans-latin-700-normal-CUSSCpQX.woff +0 -0
  30. package/dist/web/client/assets/dm-sans-latin-700-normal-DvUfVpUG.woff2 +0 -0
  31. package/dist/web/client/assets/dm-serif-display-latin-400-normal-C5_t9oOD.woff2 +0 -0
  32. package/dist/web/client/assets/dm-serif-display-latin-400-normal-_kVFYEpx.woff +0 -0
  33. package/dist/web/client/assets/{inbox-Bn1GbUsJ.js → inbox-D2NypLee.js} +1 -1
  34. package/dist/web/client/assets/{index-3nrK5iFr.js → index-B3vdrEEg.js} +4 -4
  35. package/dist/web/client/assets/index-Cofc7zhl.css +1 -0
  36. package/dist/web/client/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
  37. package/dist/web/client/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
  38. package/dist/web/client/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
  39. package/dist/web/client/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
  40. package/dist/web/client/assets/{learning-BUX1MFu2.js → learning-zYDCfVxT.js} +1 -1
  41. package/dist/web/client/assets/{login-CMWpGDKv.js → login-B1Un51Zx.js} +1 -1
  42. package/dist/web/client/assets/{mcp-lZV08dqc.js → mcp-DSVmJBdv.js} +1 -1
  43. package/dist/web/client/assets/{members-DAeaY2Cy.js → members-Pl7hXJcN.js} +1 -1
  44. package/dist/web/client/assets/{memory-HmMWxxdF.js → memory-Co3BEaAq.js} +1 -1
  45. package/dist/web/client/assets/plus-Dor-_wmL.js +1 -0
  46. package/dist/web/client/assets/{policy-DaijITy7.js → policy-CHM95pMU.js} +1 -1
  47. package/dist/web/client/assets/{routes-BNk270AM.js → routes-D29qjwG0.js} +1 -1
  48. package/dist/web/client/assets/{services-DtrpJrdo.js → services-CCQ_6YWQ.js} +1 -1
  49. package/dist/web/client/assets/{skills-Cv93A3P3.js → skills-3xAIvzvP.js} +1 -1
  50. package/dist/web/client/assets/styles-D6RPN7RK.css +2 -0
  51. package/dist/web/client/assets/{teams-D92R9Pb7.js → teams-Dm_huGxn.js} +1 -1
  52. package/dist/web/client/assets/{teams-CCFnSNKi.js → teams-UGLyjHYj.js} +1 -1
  53. package/dist/web/client/assets/telegram-3KvrJVO6.js +1 -0
  54. package/dist/web/client/assets/tokens-DUSFmV5_.js +1 -0
  55. package/dist/web/client/assets/{triggers-NT24i4hZ.js → triggers-DlQ2KF1h.js} +1 -1
  56. package/dist/web/client/assets/{welcome-D0cy68eZ.js → welcome-DkP8qzK1.js} +1 -1
  57. package/dist/web/server/assets/{_id-CwyGjJeP.js → _id-BENqNBfK.js} +4 -4
  58. package/dist/web/server/assets/{_id-D3Ap7zZA.js → _id-BFELaMIN.js} +1 -1
  59. package/dist/web/server/assets/{_id-LrvXU4Nr.js → _id-BQ2zoMiR.js} +1 -1
  60. package/dist/web/server/assets/{_id-D27T85mU.js → _id-BZWunvy7.js} +4 -4
  61. package/dist/web/server/assets/{_id-BHYLL8M-.js → _id-BreRHYV2.js} +1 -1
  62. package/dist/web/server/assets/{_id-C3HY4lWg.js → _id-CPIXIqyO.js} +1 -1
  63. package/dist/web/server/assets/{_id-FcHdSocl.js → _id-CvYqVJPU.js} +4 -4
  64. package/dist/web/server/assets/{_id-DinTp_7X.js → _id-DkrNqqTw.js} +3 -3
  65. package/dist/web/server/assets/{_id-IzadFZV9.js → _id-DvlDkk04.js} +4 -4
  66. package/dist/web/server/assets/{_id-BhOB8Umi.js → _id-DxCnEFpm.js} +4 -4
  67. package/dist/web/server/assets/{_id-tB47Vsfp.js → _id-HMy7jM3P.js} +3 -3
  68. package/dist/web/server/assets/{_id-Dj1yZ3zJ.js → _id-xTD_6ApX.js} +4 -4
  69. package/dist/web/server/assets/{_tanstack-start-manifest_v-BGDBdnUs.js → _tanstack-start-manifest_v-COkJjXt_.js} +57 -56
  70. package/dist/web/server/assets/{activity-DohitgwW.js → activity-9VP6QDTH.js} +3 -3
  71. package/dist/web/server/assets/{activity-BCI4mfNS.js → activity-B6N1T_5N.js} +1 -1
  72. package/dist/web/server/assets/{activity-D9SMqBhy.js → activity-BazZNfvf.js} +3 -3
  73. package/dist/web/server/assets/{agents-BY74v7fM.js → agents-BJAv919x.js} +3 -3
  74. package/dist/web/server/assets/{agents-C9xlWK0Z.js → agents-BpSeOA30.js} +4 -4
  75. package/dist/web/server/assets/{agents-BvttypqB.js → agents-DY630p6x.js} +3 -3
  76. package/dist/web/server/assets/{agents-DZuFEj0D.js → agents-DfoLnTyD.js} +1 -1
  77. package/dist/web/server/assets/{agents-BPKOshR5.js → agents-DjyQk94u.js} +4 -4
  78. package/dist/web/server/assets/{agents-CgZMHj80.js → agents-wSYNPuyK.js} +1 -1
  79. package/dist/web/server/assets/{approvals-DCaVw1Mz.js → approvals-BYajNOdE.js} +1 -1
  80. package/dist/web/server/assets/{approvals-BGU-XGIO.js → approvals-BYi84gwl.js} +3 -3
  81. package/dist/web/server/assets/{approvals-CWcFHlor.js → approvals-BkUGmYU9.js} +3 -3
  82. package/dist/web/server/assets/{attention-BxkTf337.js → attention-Bw_wiiqI.js} +3 -3
  83. package/dist/web/server/assets/{attention-CM-Ks1N9.js → attention-UhqPK_Ro.js} +3 -3
  84. package/dist/web/server/assets/{attention-w21GQIGH.js → attention-Z3bGuxOD.js} +1 -1
  85. package/dist/web/server/assets/{auth-byfSx6Ja.js → auth-7BHTH-KS.js} +5 -5
  86. package/dist/web/server/assets/{config-BDCJdtj2.js → config-BMiajTZP.js} +10 -5
  87. package/dist/web/server/assets/{config-BmixCpz-.js → config-DGzM28F_.js} +197 -15
  88. package/dist/web/server/assets/{config-1w2GiJUn.js → config-wYtIhkRm.js} +3 -3
  89. package/dist/web/server/assets/context-BkDDwbby.js +12 -0
  90. package/dist/web/server/assets/context-DMc0KyHh.js +12 -0
  91. package/dist/web/server/assets/{context-DrkrIWun.js → context-poimKI7w.js} +1 -1
  92. package/dist/web/server/assets/{createServerRpc-pU-IQV2Y.js → createServerRpc-B7Yr1K8i.js} +1 -1
  93. package/dist/web/server/assets/{createSsrRpc-DFsIAfFd.js → createSsrRpc-6LHNEsSK.js} +1 -1
  94. package/dist/web/server/assets/{daemon-client-2NRMzlTr.js → daemon-client-CI5NHwNC.js} +16 -4
  95. package/dist/web/server/assets/{inbox-ZvDNAjaM.js → inbox-0iiSg-Y1.js} +4 -4
  96. package/dist/web/server/assets/{inbox-BLUzA5sQ.js → inbox-DTTfSuGU.js} +1 -1
  97. package/dist/web/server/assets/{inbox-CzlKT9Wg.js → inbox-Dv55rGYq.js} +4 -4
  98. package/dist/web/server/assets/{learning-8zav4pIT.js → learning-C2upa1CE.js} +4 -4
  99. package/dist/web/server/assets/{learning-B7PBkvER.js → learning-DpyLNVe8.js} +4 -4
  100. package/dist/web/server/assets/{learning-Cq7K2heb.js → learning-fG8316uc.js} +1 -1
  101. package/dist/web/server/assets/{login-Bx5LEyGP.js → login-CrFVVUaE.js} +1 -1
  102. package/dist/web/server/assets/{login-CmWvxfTK.js → login-D_GDeTrB.js} +7 -7
  103. package/dist/web/server/assets/{mcp-DIWTogHM.js → mcp-BQtp2T87.js} +3 -3
  104. package/dist/web/server/assets/{mcp-2pwT9HU8.js → mcp-BvnvlVFd.js} +3 -3
  105. package/dist/web/server/assets/{mcp-BJjLIdP0.js → mcp-DlgXUcAS.js} +1 -1
  106. package/dist/web/server/assets/members-BP3UTqu1.js +12 -0
  107. package/dist/web/server/assets/{members-CCv17cjQ.js → members-CteHKPSF.js} +1 -1
  108. package/dist/web/server/assets/members-DXu2oAS_.js +12 -0
  109. package/dist/web/server/assets/{memory-Dngc13Nw.js → memory-BqV-Afy1.js} +4 -4
  110. package/dist/web/server/assets/{memory-a8Kz57Kh.js → memory-C6fX_FKI.js} +1 -1
  111. package/dist/web/server/assets/{memory-pZ4pZT7p.js → memory-Iq2M0-Yc.js} +4 -4
  112. package/dist/web/server/assets/{policy-Bb-vEgqg.js → policy-18fdTFO4.js} +3 -3
  113. package/dist/web/server/assets/{policy-BcGELcc9.js → policy-Bg6u-rTq.js} +1 -1
  114. package/dist/web/server/assets/{policy-C30AeFIb.js → policy-D7kj3Cy7.js} +3 -3
  115. package/dist/web/server/assets/public-origin-xV0lm0Ty.js +25 -0
  116. package/dist/web/server/assets/{router-CIVjTgNp.js → router-D-6TzLRZ.js} +167 -64
  117. package/dist/web/server/assets/{routes-BrA-U_Hm.js → routes-CNRzy79H.js} +4 -4
  118. package/dist/web/server/assets/{routes-B6cMLIPk.js → routes-CiPfEldd.js} +1 -1
  119. package/dist/web/server/assets/{routes-C19CMLZt.js → routes-D933ngZS.js} +4 -4
  120. package/dist/web/server/assets/{services-B9yBWDX0.js → services-DJRA1A0-.js} +1 -1
  121. package/dist/web/server/assets/{services-wG8I06oS.js → services-DozuJtzX.js} +3 -3
  122. package/dist/web/server/assets/{services-C4szdhPx.js → services-OB4LAr2A.js} +3 -3
  123. package/dist/web/server/assets/{skills-BZdqiDig.js → skills-Babb9jsQ.js} +1 -1
  124. package/dist/web/server/assets/{skills-C-UgkuCW.js → skills-D5DQL8bM.js} +3 -3
  125. package/dist/web/server/assets/{skills-a9VSWHWq.js → skills-DfGSJTCB.js} +3 -3
  126. package/dist/web/server/assets/start-uKQNK6if.js +70 -0
  127. package/dist/web/server/assets/{teams-CpQ0YgWf.js → teams-Bk6ZT0MD.js} +1 -1
  128. package/dist/web/server/assets/{teams-jBtvnk59.js → teams-Cc2Czynq.js} +1 -1
  129. package/dist/web/server/assets/{teams-DqfrEoH6.js → teams-DPnAX4wD.js} +4 -4
  130. package/dist/web/server/assets/{teams-DEpQR2QA.js → teams-DqC4wZxu.js} +3 -3
  131. package/dist/web/server/assets/{teams-OIkHuxy1.js → teams-Dz6ZEMRo.js} +3 -3
  132. package/dist/web/server/assets/{teams-MjqgsmC3.js → teams-be05ci17.js} +3 -3
  133. package/dist/web/server/assets/{telegram-DNgCWebD.js → telegram-1AWL6lFw.js} +3 -3
  134. package/dist/web/server/assets/{telegram-CBF8SJzB.js → telegram-DUbDIVGX.js} +122 -3
  135. package/dist/web/server/assets/{telegram-XwyKSEtj.js → telegram-J4T0XhwQ.js} +3 -3
  136. package/dist/web/server/assets/{tokens-yyTSfBSN.js → tokens-CJM_0NDa.js} +126 -22
  137. package/dist/web/server/assets/{tokens-BnwFbV7T.js → tokens-DO5BzNOn.js} +4 -4
  138. package/dist/web/server/assets/tokens-DjM8GsgS.js +19 -0
  139. package/dist/web/server/assets/{triggers-CSNNzRIi.js → triggers-B87fycBl.js} +1 -1
  140. package/dist/web/server/assets/{triggers-BZPl5CHs.js → triggers-BdBx-HwR.js} +4 -4
  141. package/dist/web/server/assets/{triggers-D79NoSXk.js → triggers-Nezfw-Bd.js} +4 -4
  142. package/dist/web/server/server.js +30 -30
  143. package/dist/web-server.js +4 -0
  144. package/dist/web-server.js.map +1 -1
  145. package/dist/worker.js +1744 -362
  146. package/dist/worker.js.map +1 -1
  147. package/package.json +7 -6
  148. package/dist/web/client/assets/chevron-down-B0aNNOyn.js +0 -1
  149. package/dist/web/client/assets/config-CMMxxeX2.js +0 -3
  150. package/dist/web/client/assets/plus-CPzRJg1V.js +0 -1
  151. package/dist/web/client/assets/styles-DMltY3su.css +0 -2
  152. package/dist/web/client/assets/telegram-BF1vdgDB.js +0 -1
  153. package/dist/web/client/assets/tokens-BXj6hWW-.js +0 -1
  154. package/dist/web/server/assets/context-B-XDf6Ym.js +0 -12
  155. package/dist/web/server/assets/context-BXGo5Vfi.js +0 -12
  156. package/dist/web/server/assets/members-CW5aBe81.js +0 -12
  157. package/dist/web/server/assets/members-VdPwD6CE.js +0 -12
  158. package/dist/web/server/assets/start-WH8WzTL_.js +0 -4
  159. package/dist/web/server/assets/tokens-DPDMSN5O.js +0 -12
@@ -0,0 +1,25 @@
1
+ //#region src/lib/public-origin.ts
2
+ function webOriginConfig(env = process.env) {
3
+ const raw = env.BAZILION_PUBLIC_ORIGIN?.trim();
4
+ if (!raw) return {
5
+ origin: null,
6
+ production: false,
7
+ sessionCookie: "bz_session_dev",
8
+ csrfCookie: "bz_csrf_dev"
9
+ };
10
+ let url;
11
+ try {
12
+ url = new URL(raw);
13
+ } catch {
14
+ throw new Error("BAZILION_PUBLIC_ORIGIN must be an exact HTTPS origin");
15
+ }
16
+ if (url.protocol !== "https:" || url.username || url.password || url.pathname !== "/" || url.search || url.hash || url.origin !== raw.replace(/\/$/, "")) throw new Error("BAZILION_PUBLIC_ORIGIN must be an exact HTTPS origin");
17
+ return {
18
+ origin: url.origin,
19
+ production: true,
20
+ sessionCookie: "__Host-bz_session",
21
+ csrfCookie: "__Host-bz_csrf"
22
+ };
23
+ }
24
+ //#endregion
25
+ export { webOriginConfig as t };
@@ -1,36 +1,37 @@
1
- import { i as getCookie, t as createServerFn } from "../server.js";
2
- import { t as DAEMON_BASE_URL } from "./daemon-client-2NRMzlTr.js";
3
- import { i as BaziuLogo, n as ThemeToggle, r as PawIcon, t as Route$4 } from "./login-Bx5LEyGP.js";
4
- import { t as createSsrRpc } from "./createSsrRpc-DFsIAfFd.js";
5
- import { t as Route$5 } from "./routes-C19CMLZt.js";
6
- import { t as Route$6 } from "./teams-DEpQR2QA.js";
7
- import { t as Route$7 } from "./skills-C-UgkuCW.js";
8
- import { t as Route$8 } from "./config-1w2GiJUn.js";
9
- import { t as Route$9 } from "./attention-BxkTf337.js";
10
- import { t as Route$10 } from "./approvals-CWcFHlor.js";
11
- import { t as Route$11 } from "./agents-C9xlWK0Z.js";
12
- import { t as Route$12 } from "./tokens-BnwFbV7T.js";
13
- import { t as Route$13 } from "./services-C4szdhPx.js";
14
- import { t as Route$14 } from "./mcp-DIWTogHM.js";
15
- import { t as Route$15 } from "./teams-OIkHuxy1.js";
16
- import { t as Route$16 } from "./agents-BvttypqB.js";
17
- import { t as Route$17 } from "./_id-Dj1yZ3zJ.js";
18
- import { t as Route$18 } from "./_id-FcHdSocl.js";
19
- import { t as Route$19 } from "./policy-C30AeFIb.js";
20
- import { t as Route$20 } from "./memory-pZ4pZT7p.js";
21
- import { t as Route$21 } from "./members-VdPwD6CE.js";
22
- import { t as Route$22 } from "./context-BXGo5Vfi.js";
23
- import { t as Route$23 } from "./activity-D9SMqBhy.js";
24
- import { t as Route$24 } from "./telegram-XwyKSEtj.js";
25
- import { t as Route$25 } from "./triggers-BZPl5CHs.js";
26
- import { t as Route$26 } from "./learning-B7PBkvER.js";
27
- import { t as Route$27 } from "./inbox-ZvDNAjaM.js";
28
- import { t as Route$28 } from "./_id-DinTp_7X.js";
29
- import { t as Route$29 } from "./_id-CwyGjJeP.js";
1
+ import { a as getCookie, n as createServerFn } from "../server.js";
2
+ import { t as DAEMON_BASE_URL } from "./daemon-client-CI5NHwNC.js";
3
+ import { t as webOriginConfig } from "./public-origin-xV0lm0Ty.js";
4
+ import { i as BaziuLogo, n as ThemeToggle, r as PawIcon, t as Route$4 } from "./login-CrFVVUaE.js";
5
+ import { t as createSsrRpc } from "./createSsrRpc-6LHNEsSK.js";
6
+ import { t as Route$5 } from "./routes-D933ngZS.js";
7
+ import { t as Route$6 } from "./teams-DqC4wZxu.js";
8
+ import { t as Route$7 } from "./skills-D5DQL8bM.js";
9
+ import { t as Route$8 } from "./config-wYtIhkRm.js";
10
+ import { t as Route$9 } from "./attention-Bw_wiiqI.js";
11
+ import { t as Route$10 } from "./approvals-BkUGmYU9.js";
12
+ import { t as Route$11 } from "./agents-BpSeOA30.js";
13
+ import { t as Route$12 } from "./tokens-DO5BzNOn.js";
14
+ import { t as Route$13 } from "./services-OB4LAr2A.js";
15
+ import { t as Route$14 } from "./mcp-BQtp2T87.js";
16
+ import { t as Route$15 } from "./teams-Dz6ZEMRo.js";
17
+ import { t as Route$16 } from "./agents-DY630p6x.js";
18
+ import { t as Route$17 } from "./_id-xTD_6ApX.js";
19
+ import { t as Route$18 } from "./_id-CvYqVJPU.js";
20
+ import { t as Route$19 } from "./policy-D7kj3Cy7.js";
21
+ import { t as Route$20 } from "./memory-Iq2M0-Yc.js";
22
+ import { t as Route$21 } from "./members-DXu2oAS_.js";
23
+ import { t as Route$22 } from "./context-BkDDwbby.js";
24
+ import { t as Route$23 } from "./activity-BazZNfvf.js";
25
+ import { t as Route$24 } from "./telegram-J4T0XhwQ.js";
26
+ import { t as Route$25 } from "./triggers-BdBx-HwR.js";
27
+ import { t as Route$26 } from "./learning-DpyLNVe8.js";
28
+ import { t as Route$27 } from "./inbox-0iiSg-Y1.js";
29
+ import { t as Route$28 } from "./_id-DkrNqqTw.js";
30
+ import { t as Route$29 } from "./_id-BENqNBfK.js";
30
31
  import { useEffect, useState } from "react";
31
32
  import { HeadContent, Link, Outlet, Scripts, createFileRoute, createRootRoute, createRouter, lazyRouteComponent, redirect, useRouterState } from "@tanstack/react-router";
32
33
  import { jsx, jsxs } from "react/jsx-runtime";
33
- import { BellRing, Bot, LayoutTemplate, Settings2, ShieldCheck, Sparkles, UsersRound } from "lucide-react";
34
+ import { BellRing, Bot, LayoutTemplate, LogOut, Settings2, ShieldCheck, Sparkles, UsersRound } from "lucide-react";
34
35
  //#region src/components/Footer.tsx
35
36
  function Footer() {
36
37
  return /* @__PURE__ */ jsxs("footer", {
@@ -97,6 +98,9 @@ function TopNav() {
97
98
  if (pathname === "/login" || pathname === "/welcome") return;
98
99
  fetch("/api/attention/summary").then((response) => response.ok ? response.json() : null).then((body) => setAttentionCount(body?.openTotal ?? 0)).catch(() => {});
99
100
  }, [pathname]);
101
+ async function logout() {
102
+ if ((await fetch("/api/logout", { method: "POST" })).ok) window.location.assign("/login");
103
+ }
100
104
  return /* @__PURE__ */ jsxs("nav", {
101
105
  "aria-label": "Primary navigation",
102
106
  className: "mx-auto grid w-full max-w-[1500px] shrink-0 grid-cols-[minmax(0,1fr)_auto] items-center gap-x-3 gap-y-2 border-b border-frost py-3 md:flex md:gap-2 md:py-4",
@@ -139,9 +143,19 @@ function TopNav() {
139
143
  }, link.to);
140
144
  })
141
145
  }),
142
- /* @__PURE__ */ jsx("div", {
143
- className: "col-start-2 row-start-1 md:col-auto md:row-auto md:ml-auto",
144
- children: /* @__PURE__ */ jsx(ThemeToggle, {})
146
+ /* @__PURE__ */ jsxs("div", {
147
+ className: "col-start-2 row-start-1 flex items-center gap-1 md:col-auto md:row-auto md:ml-auto",
148
+ children: [/* @__PURE__ */ jsx(ThemeToggle, {}), /* @__PURE__ */ jsx("button", {
149
+ type: "button",
150
+ onClick: logout,
151
+ "aria-label": "Log out",
152
+ title: "Log out",
153
+ className: "inline-flex h-9 w-9 items-center justify-center rounded-lg text-mocha hover:bg-ivory hover:text-sapphire",
154
+ children: /* @__PURE__ */ jsx(LogOut, {
155
+ className: "h-4 w-4",
156
+ "aria-hidden": "true"
157
+ })
158
+ })]
145
159
  })
146
160
  ]
147
161
  });
@@ -156,11 +170,48 @@ function isSetupOpen(path) {
156
170
  return false;
157
171
  }
158
172
  //#endregion
173
+ //#region src/lib/csrf-fetch.ts
174
+ function cookie(name) {
175
+ const prefix = `${encodeURIComponent(name)}=`;
176
+ for (const part of document.cookie.split(";")) {
177
+ const value = part.trim();
178
+ if (value.startsWith(prefix)) return decodeURIComponent(value.slice(prefix.length));
179
+ }
180
+ return null;
181
+ }
182
+ function installCsrfFetch() {
183
+ if (typeof window === "undefined") return;
184
+ const marker = "__bazilionCsrfFetchInstalled";
185
+ const state = window;
186
+ if (state[marker]) return;
187
+ state[marker] = true;
188
+ const original = window.fetch.bind(window);
189
+ window.fetch = (input, init) => {
190
+ const request = input instanceof Request ? input : null;
191
+ const method = (init?.method ?? request?.method ?? "GET").toUpperCase();
192
+ if (new URL(request?.url ?? String(input), window.location.href).origin !== window.location.origin || [
193
+ "GET",
194
+ "HEAD",
195
+ "OPTIONS"
196
+ ].includes(method)) return original(input, init);
197
+ const csrf = cookie("__Host-bz_csrf") ?? cookie("bz_csrf_dev");
198
+ if (!csrf) return original(input, init);
199
+ const headers = new Headers(request?.headers ?? void 0);
200
+ for (const [key, value] of new Headers(init?.headers)) headers.set(key, value);
201
+ headers.set("x-bazilion-csrf", csrf);
202
+ return original(input, {
203
+ ...init,
204
+ headers
205
+ });
206
+ };
207
+ }
208
+ //#endregion
159
209
  //#region src/styles.css?url
160
- var styles_default = "/assets/styles-DMltY3su.css";
210
+ var styles_default = "/assets/styles-D6RPN7RK.css";
161
211
  //#endregion
162
212
  //#region src/routes/__root.tsx
163
213
  var THEME_INIT_SCRIPT = `(function(){try{var t=localStorage.getItem('baziu-theme');var sd=window.matchMedia&&window.matchMedia('(prefers-color-scheme: dark)').matches;var d=t==='dark'||((t===null||t==='system')&&sd);document.documentElement.classList.toggle('dark',d);}catch(e){}})();`;
214
+ installCsrfFetch();
164
215
  var Route$3 = createRootRoute({
165
216
  beforeLoad: async ({ location }) => {
166
217
  const path = location.pathname;
@@ -182,30 +233,14 @@ var Route$3 = createRootRoute({
182
233
  },
183
234
  { title: "bazilion" }
184
235
  ],
185
- links: [
186
- {
187
- rel: "icon",
188
- type: "image/svg+xml",
189
- href: "/baziu.svg"
190
- },
191
- {
192
- rel: "preconnect",
193
- href: "https://fonts.googleapis.com"
194
- },
195
- {
196
- rel: "preconnect",
197
- href: "https://fonts.gstatic.com",
198
- crossOrigin: ""
199
- },
200
- {
201
- rel: "stylesheet",
202
- href: "https://fonts.googleapis.com/css2?family=DM+Serif+Display&family=DM+Sans:ital,opsz,wght@0,9..40,300..700;1,9..40,300..700&family=JetBrains+Mono:wght@400;500&display=swap"
203
- },
204
- {
205
- rel: "stylesheet",
206
- href: styles_default
207
- }
208
- ]
236
+ links: [{
237
+ rel: "icon",
238
+ type: "image/svg+xml",
239
+ href: "/baziu.svg"
240
+ }, {
241
+ rel: "stylesheet",
242
+ href: styles_default
243
+ }]
209
244
  }),
210
245
  component: RootComponent,
211
246
  notFoundComponent: NotFound
@@ -299,8 +334,43 @@ var STRIP_REQUEST_HEADERS = new Set([
299
334
  "trailer",
300
335
  "transfer-encoding",
301
336
  "upgrade",
302
- "cookie"
337
+ "cookie",
338
+ "forwarded",
339
+ "x-forwarded-for",
340
+ "x-forwarded-host",
341
+ "x-forwarded-proto",
342
+ "x-real-ip"
303
343
  ]);
344
+ var MAX_JSON_BODY = 2 * 1024 * 1024;
345
+ var MAX_UPLOAD_BODY = 25 * 1024 * 1024;
346
+ function isLoopback(hostname) {
347
+ return [
348
+ "127.0.0.1",
349
+ "localhost",
350
+ "[::1]",
351
+ "::1"
352
+ ].includes(hostname);
353
+ }
354
+ function hasDuplicateCookie(header, name) {
355
+ if (!header) return false;
356
+ return header.split(";").map((part) => part.trim()).map((part) => part.slice(0, part.indexOf("="))).filter((cookieName) => cookieName === name).length > 1;
357
+ }
358
+ function boundedBody(body, limit) {
359
+ let seen = 0;
360
+ return body.pipeThrough(new TransformStream({ transform(chunk, controller) {
361
+ seen += chunk.byteLength;
362
+ if (seen > limit) throw new Error("request body exceeds gateway limit");
363
+ controller.enqueue(chunk);
364
+ } }));
365
+ }
366
+ function addSecurityHeaders(headers, production) {
367
+ headers.set("x-content-type-options", "nosniff");
368
+ headers.set("referrer-policy", "no-referrer");
369
+ headers.set("permissions-policy", "camera=(), microphone=(), geolocation=()");
370
+ headers.set("x-frame-options", "DENY");
371
+ 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'");
372
+ if (production) headers.set("strict-transport-security", "max-age=31536000; includeSubDomains");
373
+ }
304
374
  var STRIP_RESPONSE_HEADERS = new Set([
305
375
  "connection",
306
376
  "keep-alive",
@@ -313,12 +383,36 @@ var STRIP_RESPONSE_HEADERS = new Set([
313
383
  ]);
314
384
  async function proxy(request) {
315
385
  const incoming = new URL(request.url);
386
+ const originConfig = webOriginConfig();
387
+ const expectedOrigin = originConfig.origin ?? incoming.origin;
388
+ const expected = new URL(expectedOrigin);
389
+ if (originConfig.production) {
390
+ if (request.headers.get("host") !== expected.host) return new Response("not found", { status: 404 });
391
+ const forwardedHost = request.headers.get("x-forwarded-host");
392
+ const forwardedProto = request.headers.get("x-forwarded-proto");
393
+ if (forwardedHost && forwardedHost !== expected.host || forwardedProto && forwardedProto !== "https") return new Response("invalid forwarding headers", { status: 400 });
394
+ } else if (!isLoopback(incoming.hostname)) return new Response("loopback development only", { status: 403 });
395
+ if (request.headers.has("forwarded")) return new Response("invalid forwarding headers", { status: 400 });
396
+ const unsafe = ![
397
+ "GET",
398
+ "HEAD",
399
+ "OPTIONS"
400
+ ].includes(request.method);
401
+ const incomingCookies = request.headers.get("cookie");
402
+ if (hasDuplicateCookie(incomingCookies, originConfig.sessionCookie) || hasDuplicateCookie(incomingCookies, originConfig.csrfCookie)) return new Response("ambiguous cookies", { status: 400 });
403
+ const session = getCookie(originConfig.sessionCookie);
404
+ const csrf = getCookie(originConfig.csrfCookie);
405
+ if (unsafe && (session || incoming.pathname === "/api/login")) {
406
+ if (request.headers.get("origin") !== expectedOrigin) return new Response("origin validation failed", { status: 403 });
407
+ if (session && (!csrf || request.headers.get("x-bazilion-csrf") !== csrf)) return new Response("csrf validation failed", { status: 403 });
408
+ }
316
409
  const target = `${DAEMON_BASE_URL}${incoming.pathname}${incoming.search}`;
317
410
  const headers = new Headers();
318
411
  for (const [k, v] of request.headers) if (!STRIP_REQUEST_HEADERS.has(k.toLowerCase())) headers.set(k, v);
319
- if (!headers.has("authorization")) {
320
- const token = getCookie("bz_token");
321
- if (token) headers.set("authorization", `Bearer ${token}`);
412
+ if (session) {
413
+ const cookieParts = [`${originConfig.sessionCookie}=${session}`];
414
+ if (csrf) cookieParts.push(`${originConfig.csrfCookie}=${csrf}`);
415
+ headers.set("cookie", cookieParts.join("; "));
322
416
  }
323
417
  headers.set("origin", DAEMON_BASE_URL);
324
418
  const init = {
@@ -327,12 +421,21 @@ async function proxy(request) {
327
421
  redirect: "manual"
328
422
  };
329
423
  if (request.method !== "GET" && request.method !== "HEAD") {
330
- init.body = request.body;
424
+ const limit = (request.headers.get("content-type") ?? "").startsWith("multipart/form-data") ? MAX_UPLOAD_BODY : MAX_JSON_BODY;
425
+ const contentLength = Number(request.headers.get("content-length") ?? 0);
426
+ if (Number.isFinite(contentLength) && contentLength > limit) return new Response("request body too large", { status: 413 });
427
+ if (request.body) init.body = boundedBody(request.body, limit);
331
428
  init.duplex = "half";
332
429
  }
333
430
  const upstream = await fetch(target, init);
334
431
  const respHeaders = new Headers();
335
- for (const [k, v] of upstream.headers) if (!STRIP_RESPONSE_HEADERS.has(k.toLowerCase())) respHeaders.set(k, v);
432
+ for (const [k, v] of upstream.headers) {
433
+ const lower = k.toLowerCase();
434
+ if (lower !== "set-cookie" && !STRIP_RESPONSE_HEADERS.has(lower)) respHeaders.set(k, v);
435
+ }
436
+ const getSetCookie = upstream.headers.getSetCookie;
437
+ for (const value of getSetCookie?.call(upstream.headers) ?? []) respHeaders.append("set-cookie", value);
438
+ addSecurityHeaders(respHeaders, originConfig.production);
336
439
  return new Response(upstream.body, {
337
440
  status: upstream.status,
338
441
  statusText: upstream.statusText,
@@ -1,6 +1,6 @@
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";
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
4
  import { t as SIDEBAR_OPEN_GROUPS_COOKIE } from "./Sidebar-DsRVCszF.js";
5
5
  //#region src/routes/index.tsx?tss-serverfn-split
6
6
  function parseOpenGroupsCookie(raw) {
@@ -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,4 +1,4 @@
1
- import { t as Route } from "./routes-C19CMLZt.js";
1
+ import { t as Route } from "./routes-D933ngZS.js";
2
2
  import { t as ChatPane } from "./ChatPane-Ba5wTsVk.js";
3
3
  import { n as Sidebar } from "./Sidebar-DsRVCszF.js";
4
4
  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/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-CiPfEldd.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 }),
@@ -1,4 +1,4 @@
1
- import { t as Route } from "./services-C4szdhPx.js";
1
+ import { t as Route } from "./services-OB4LAr2A.js";
2
2
  import { t as ConfigPage } from "./ConfigPage-BKlh5vOU.js";
3
3
  import { t as FieldRow } from "./FieldRow-B4eTegH9.js";
4
4
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -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,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-DJRA1A0-.js");
6
6
  var fetchServices = createServerFn({ method: "GET" }).handler(createSsrRpc("6afd81bef0ee381d6e3641cd8e269968429c874e2f9d56c8f818cc9d180ee477"));
7
7
  var Route = createFileRoute("/config/services")({
8
8
  loader: () => fetchServices(),
@@ -1,4 +1,4 @@
1
- import { t as Route } from "./skills-C-UgkuCW.js";
1
+ import { t as Route } from "./skills-D5DQL8bM.js";
2
2
  import { a as StatusBadge, i as SectionCard, n as PageHeader, r as PageShell, t as EmptyState } from "./Page-LENulSXY.js";
3
3
  import { t as Button } from "./Button-Dsnw22OF.js";
4
4
  import { useRef, useState } from "react";
@@ -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-Babb9jsQ.js");
6
6
  var fetchSkills = createServerFn({ method: "GET" }).handler(createSsrRpc("ae1d30575b229c1e2622fbaf2252800a9a7acc84afdd68cba025ca890b8d52c5"));
7
7
  var Route = createFileRoute("/skills/")({
8
8
  loader: () => fetchSkills(),
@@ -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",
@@ -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", "no-referrer");
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,4 +1,4 @@
1
- import { t as Route } from "./teams-OIkHuxy1.js";
1
+ import { t as Route } from "./teams-Dz6ZEMRo.js";
2
2
  import { n as PageHeader, r as PageShell } from "./Page-LENulSXY.js";
3
3
  import { t as Button } from "./Button-Dsnw22OF.js";
4
4
  import { t as TemplatesTabs } from "./TemplatesTabs-CcRxZhJe.js";
@@ -1,4 +1,4 @@
1
- import { t as Route } from "./teams-DEpQR2QA.js";
1
+ import { t as Route } from "./teams-DqC4wZxu.js";
2
2
  import { a as StatusBadge, i as SectionCard, n as PageHeader, r as PageShell, t as EmptyState } from "./Page-LENulSXY.js";
3
3
  import { t as Button } from "./Button-Dsnw22OF.js";
4
4
  import { useState } from "react";
@@ -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,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-Cc2Czynq.js");
7
7
  var fetchTeamsData = createServerFn({ method: "GET" }).handler(createSsrRpc("1ab05a58944792f34ad279deeaa56f70e9360687856b18327f335b022e8d21a5"));
8
8
  var Route = createFileRoute("/teams/")({
9
9
  loader: () => fetchTeamsData(),
@@ -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-Bk6ZT0MD.js");
6
6
  var fetchTeams = createServerFn({ method: "GET" }).handler(createSsrRpc("1bb12262aaa902fa208aafaa70b69c63da34c1fe523ab0322fe766903fc6b4c1"));
7
7
  var Route = createFileRoute("/templates/teams/")({
8
8
  loader: () => fetchTeams(),
@@ -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",