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,9 @@
1
- import { t as Route } from "./memory-pZ4pZT7p.js";
2
- import { r as PageShell } from "./Page-LENulSXY.js";
3
- import { t as TeamTabs } from "./TeamTabs-zZzbP1t_.js";
1
+ import { t as Route } from "./memory-DTFEmfF3.js";
2
+ import { r as PageShell } from "./Page-Bz-ydB8j.js";
3
+ import { t as Button } from "./Button-Dsnw22OF.js";
4
+ import { t as ConfirmDialog } from "./ConfirmDialog-C-MPYYSU.js";
5
+ import { t as TeamTabs } from "./TeamTabs-Co3n2exj.js";
6
+ import { t as UnsavedChangesGuard } from "./UnsavedChangesGuard-CiStXyBI.js";
4
7
  import { useEffect, useRef, useState } from "react";
5
8
  import { jsx, jsxs } from "react/jsx-runtime";
6
9
  //#region src/routes/teams/$id/memory.tsx?tsr-split=component
@@ -20,8 +23,12 @@ function MemoryPage() {
20
23
  const [mode, setMode] = useState("none");
21
24
  const [keyInput, setKeyInput] = useState("");
22
25
  const [content, setContent] = useState("");
26
+ const [savedKey, setSavedKey] = useState("");
27
+ const [savedContent, setSavedContent] = useState("");
23
28
  const [status, setStatus] = useState(null);
29
+ const [confirmation, setConfirmation] = useState(null);
24
30
  const searchTimer = useRef(null);
31
+ const dirty = mode !== "none" && (keyInput !== savedKey || content !== savedContent);
25
32
  async function loadList(q) {
26
33
  try {
27
34
  const url = q.trim().length > 0 ? `/api/teams/${encodeURIComponent(teamId)}/memory/search?q=${encodeURIComponent(q)}&limit=50` : `/api/teams/${encodeURIComponent(teamId)}/memory`;
@@ -61,9 +68,7 @@ function MemoryPage() {
61
68
  if (searchTimer.current) clearTimeout(searchTimer.current);
62
69
  };
63
70
  }, [query]);
64
- async function openEntry(key) {
65
- setSelectedKey(key);
66
- setMode("edit");
71
+ async function loadEntry(key) {
67
72
  setStatus({
68
73
  msg: "loading…",
69
74
  kind: "info"
@@ -75,8 +80,12 @@ function MemoryPage() {
75
80
  throw new Error(body?.error ?? res.statusText);
76
81
  }
77
82
  const entry = await res.json();
83
+ setSelectedKey(entry.key);
84
+ setMode("edit");
78
85
  setKeyInput(entry.key);
79
86
  setContent(entry.content ?? "");
87
+ setSavedKey(entry.key);
88
+ setSavedContent(entry.content ?? "");
80
89
  setStatus({
81
90
  msg: `loaded ${entry.key}`,
82
91
  kind: "info"
@@ -88,16 +97,64 @@ function MemoryPage() {
88
97
  });
89
98
  }
90
99
  }
91
- function newEntry() {
100
+ function requestOpenEntry(key) {
101
+ if (mode === "edit" && key === selectedKey) return;
102
+ if (!dirty) {
103
+ loadEntry(key);
104
+ return;
105
+ }
106
+ setConfirmation({
107
+ title: "Discard unsaved memory changes?",
108
+ description: /* @__PURE__ */ jsxs("p", { children: [
109
+ "Opening ",
110
+ /* @__PURE__ */ jsx("code", {
111
+ className: "font-mono",
112
+ children: key
113
+ }),
114
+ " will permanently discard your changes to",
115
+ " ",
116
+ /* @__PURE__ */ jsx("code", {
117
+ className: "font-mono",
118
+ children: selectedKey ?? (keyInput || "this new entry")
119
+ }),
120
+ "."
121
+ ] }),
122
+ confirmLabel: "discard and open entry",
123
+ onConfirm: () => loadEntry(key)
124
+ });
125
+ }
126
+ function startNewEntry() {
92
127
  setSelectedKey(null);
93
128
  setMode("new");
94
129
  setKeyInput("");
95
130
  setContent("");
131
+ setSavedKey("");
132
+ setSavedContent("");
96
133
  setStatus({
97
134
  msg: "new entry — type a key and content, then save",
98
135
  kind: "info"
99
136
  });
100
137
  }
138
+ function requestNewEntry() {
139
+ if (!dirty) {
140
+ startNewEntry();
141
+ return;
142
+ }
143
+ setConfirmation({
144
+ title: "Discard unsaved memory changes?",
145
+ description: /* @__PURE__ */ jsxs("p", { children: [
146
+ "Starting a new entry will permanently discard your changes to",
147
+ " ",
148
+ /* @__PURE__ */ jsx("code", {
149
+ className: "font-mono",
150
+ children: selectedKey ?? (keyInput || "this new entry")
151
+ }),
152
+ "."
153
+ ] }),
154
+ confirmLabel: "discard and create new",
155
+ onConfirm: startNewEntry
156
+ });
157
+ }
101
158
  async function save() {
102
159
  const key = keyInput.trim();
103
160
  if (!key) {
@@ -119,6 +176,9 @@ function MemoryPage() {
119
176
  }
120
177
  setSelectedKey(key);
121
178
  setMode("edit");
179
+ setKeyInput(key);
180
+ setSavedKey(key);
181
+ setSavedContent(content);
122
182
  setStatus({
123
183
  msg: "saved",
124
184
  kind: "info"
@@ -131,34 +191,50 @@ function MemoryPage() {
131
191
  });
132
192
  }
133
193
  }
134
- async function del() {
194
+ async function deleteSelected() {
135
195
  if (!selectedKey) return;
136
- if (!confirm(`delete ${selectedKey}?`)) return;
137
- try {
138
- const res = await fetch(`/api/teams/${encodeURIComponent(teamId)}/memory/${encodeKey(selectedKey)}`, { method: "DELETE" });
139
- if (!res.ok && res.status !== 204) {
140
- const body = await res.json().catch(() => null);
141
- throw new Error(body?.error ?? res.statusText);
142
- }
143
- setSelectedKey(null);
144
- setMode("none");
145
- setKeyInput("");
146
- setContent("");
147
- setStatus({
148
- msg: "deleted",
149
- kind: "info"
150
- });
151
- await loadList(query);
152
- } catch (err) {
153
- setStatus({
154
- msg: `error: ${err.message}`,
155
- kind: "error"
156
- });
196
+ const key = selectedKey;
197
+ const res = await fetch(`/api/teams/${encodeURIComponent(teamId)}/memory/${encodeKey(key)}`, { method: "DELETE" });
198
+ if (!res.ok && res.status !== 204) {
199
+ const body = await res.json().catch(() => null);
200
+ throw new Error(body?.error ?? res.statusText);
157
201
  }
202
+ setSelectedKey(null);
203
+ setMode("none");
204
+ setKeyInput("");
205
+ setContent("");
206
+ setSavedKey("");
207
+ setSavedContent("");
208
+ setStatus({
209
+ msg: `${key} deleted`,
210
+ kind: "info"
211
+ });
212
+ await loadList(query);
213
+ }
214
+ function requestDelete() {
215
+ if (!selectedKey) return;
216
+ const key = selectedKey;
217
+ setConfirmation({
218
+ title: `Delete ${key}?`,
219
+ description: /* @__PURE__ */ jsxs("p", { children: [
220
+ "This permanently deletes ",
221
+ /* @__PURE__ */ jsx("code", {
222
+ className: "font-mono",
223
+ children: key
224
+ }),
225
+ " from shared Team memory and removes it from search results for every Team member. This cannot be undone."
226
+ ] }),
227
+ confirmLabel: "delete memory entry",
228
+ onConfirm: deleteSelected
229
+ });
158
230
  }
159
231
  const canSave = mode !== "none" && keyInput.trim().length > 0;
160
232
  const canDelete = mode === "edit" && selectedKey !== null;
161
233
  return /* @__PURE__ */ jsxs(PageShell, { children: [
234
+ /* @__PURE__ */ jsx(UnsavedChangesGuard, {
235
+ when: dirty,
236
+ subject: "Team memory draft"
237
+ }),
162
238
  /* @__PURE__ */ jsxs("header", {
163
239
  className: "mb-6",
164
240
  children: [/* @__PURE__ */ jsxs("h1", {
@@ -203,15 +279,20 @@ function MemoryPage() {
203
279
  className: "grid grid-cols-1 gap-6 lg:grid-cols-[320px_1fr]",
204
280
  children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("div", {
205
281
  className: "overflow-hidden rounded-[16px] border border-frost bg-snow",
206
- children: [/* @__PURE__ */ jsx("div", {
282
+ children: [/* @__PURE__ */ jsxs("div", {
207
283
  className: "border-b border-frost p-2",
208
- children: /* @__PURE__ */ jsx("input", {
284
+ children: [/* @__PURE__ */ jsx("label", {
285
+ htmlFor: "team-memory-search",
286
+ className: "sr-only",
287
+ children: "Search Team memory"
288
+ }), /* @__PURE__ */ jsx("input", {
289
+ id: "team-memory-search",
209
290
  type: "text",
210
291
  placeholder: "search (BM25)...",
211
292
  autoComplete: "off",
212
293
  value: query,
213
294
  onChange: (e) => setQuery(e.target.value)
214
- })
295
+ })]
215
296
  }), /* @__PURE__ */ jsx("div", {
216
297
  className: "max-h-[520px] overflow-y-auto",
217
298
  children: rows.length === 0 ? /* @__PURE__ */ jsx("div", {
@@ -220,7 +301,7 @@ function MemoryPage() {
220
301
  }) : rows.map((r) => {
221
302
  return /* @__PURE__ */ jsxs("button", {
222
303
  type: "button",
223
- onClick: () => openEntry(r.key),
304
+ onClick: () => requestOpenEntry(r.key),
224
305
  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 ${r.key === selectedKey ? "bg-sapphire-glow font-medium text-sapphire-deep" : ""}`,
225
306
  children: [
226
307
  isSearch && r.score !== void 0 && /* @__PURE__ */ jsx("span", {
@@ -236,50 +317,71 @@ function MemoryPage() {
236
317
  }, r.key);
237
318
  })
238
319
  })]
239
- }), /* @__PURE__ */ jsx("button", {
240
- type: "button",
241
- className: "ghost-btn mt-3 w-full",
242
- onClick: newEntry,
320
+ }), /* @__PURE__ */ jsx(Button, {
321
+ variant: "ghost",
322
+ className: "mt-3 w-full",
323
+ onClick: requestNewEntry,
243
324
  children: "+ new entry"
244
325
  })] }), /* @__PURE__ */ jsxs("div", { children: [
245
- /* @__PURE__ */ jsx("div", {
326
+ /* @__PURE__ */ jsxs("div", {
246
327
  className: "mb-3 flex items-center gap-2",
247
- children: /* @__PURE__ */ jsx("input", {
328
+ children: [/* @__PURE__ */ jsx("label", {
329
+ htmlFor: "team-memory-key",
330
+ className: "sr-only",
331
+ children: "Memory entry key"
332
+ }), /* @__PURE__ */ jsx("input", {
333
+ id: "team-memory-key",
248
334
  type: "text",
249
335
  placeholder: "key (e.g. prefs/hiking.md)",
250
336
  value: keyInput,
251
337
  onChange: (e) => setKeyInput(e.target.value),
252
338
  disabled: mode !== "new",
253
339
  className: "flex-1 font-mono"
254
- })
340
+ })]
341
+ }),
342
+ /* @__PURE__ */ jsx("label", {
343
+ htmlFor: "team-memory-content",
344
+ className: "sr-only",
345
+ children: "Memory entry content"
255
346
  }),
256
347
  /* @__PURE__ */ jsx("textarea", {
348
+ id: "team-memory-content",
257
349
  placeholder: "select an entry on the left, or create a new one.",
258
350
  value: content,
259
351
  onChange: (e) => setContent(e.target.value),
352
+ disabled: mode === "none",
260
353
  className: "min-h-[360px] w-full font-mono text-[0.9em] leading-[1.55]"
261
354
  }),
262
355
  /* @__PURE__ */ jsxs("div", {
263
356
  className: "mt-3 flex gap-2",
264
- children: [/* @__PURE__ */ jsx("button", {
265
- type: "button",
266
- className: "btn-primary",
357
+ children: [/* @__PURE__ */ jsx(Button, {
358
+ variant: "primary",
267
359
  onClick: save,
268
- disabled: !canSave,
360
+ disabled: !canSave || !dirty,
269
361
  children: "save"
270
- }), /* @__PURE__ */ jsx("button", {
271
- type: "button",
272
- className: "ghost-btn",
273
- onClick: del,
362
+ }), /* @__PURE__ */ jsx(Button, {
363
+ variant: "danger",
364
+ onClick: requestDelete,
274
365
  disabled: !canDelete,
275
366
  children: "delete"
276
367
  })]
277
368
  }),
278
369
  status && /* @__PURE__ */ jsx("p", {
370
+ role: status.kind === "error" ? "alert" : "status",
279
371
  className: `mt-2 text-[0.9em] ${status.kind === "error" ? "text-danger" : "text-mocha-light"}`,
280
372
  children: status.msg
281
373
  })
282
374
  ] })]
375
+ }),
376
+ /* @__PURE__ */ jsx(ConfirmDialog, {
377
+ open: confirmation !== null,
378
+ title: confirmation?.title ?? "",
379
+ description: confirmation?.description ?? null,
380
+ confirmLabel: confirmation?.confirmLabel ?? "continue",
381
+ onConfirm: () => confirmation?.onConfirm(),
382
+ onOpenChange: (open) => {
383
+ if (!open) setConfirmation(null);
384
+ }
283
385
  })
284
386
  ] });
285
387
  }
@@ -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, redirect } from "@tanstack/react-router";
4
4
  //#region src/routes/teams/$id/memory.tsx
5
- var $$splitComponentImporter = () => import("./memory-a8Kz57Kh.js");
6
- var fetchMemory = createServerFn({ method: "POST" }).inputValidator((d) => d).handler(createSsrRpc("b96a98e3ed6c8a3ab5f6a4ed8458e93da753ffd74e2912ef1724bb6e58030cb5"));
5
+ var $$splitComponentImporter = () => import("./memory-CkXUgf5s.js");
6
+ var fetchMemory = createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("b96a98e3ed6c8a3ab5f6a4ed8458e93da753ffd74e2912ef1724bb6e58030cb5"));
7
7
  var Route = createFileRoute("/teams/$id/memory")({
8
8
  loader: async ({ params }) => {
9
9
  const data = await fetchMemory({ data: { id: params.id } });
@@ -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/$id/policy.tsx?tss-serverfn-split
5
5
  var fetchPolicy_createServerFn_handler = createServerRpc({
6
6
  id: "fc940d6dec5305aa64bdb9b9f5f7d4f925b2ba0608cb6d39af854a94872fc867",
@@ -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/$id/policy.tsx
5
5
  var $$splitErrorComponentImporter = () => import("./policy-BYVXqsan.js");
6
- var $$splitComponentImporter = () => import("./policy-BcGELcc9.js");
6
+ var $$splitComponentImporter = () => import("./policy-Bvvav8fh.js");
7
7
  var fetchPolicy = createServerFn({ method: "POST" }).validator((data) => data).handler(createSsrRpc("fc940d6dec5305aa64bdb9b9f5f7d4f925b2ba0608cb6d39af854a94872fc867"));
8
8
  var Route = createFileRoute("/teams/$id/policy")({
9
9
  validateSearch: (search) => ({
@@ -1,9 +1,9 @@
1
- import { t as Route } from "./policy-C30AeFIb.js";
2
- import { r as PageShell } from "./Page-LENulSXY.js";
1
+ import { t as Route } from "./policy-BddK4xom.js";
2
+ import { r as PageShell } from "./Page-Bz-ydB8j.js";
3
3
  import { t as Button } from "./Button-Dsnw22OF.js";
4
4
  import { t as RecoveryState } from "./RecoveryState-B2SG-mrY.js";
5
- import { t as TeamTabs } from "./TeamTabs-zZzbP1t_.js";
6
- import { t as ProductionTeamPolicyEditor } from "./ProductionTeamPolicyEditor-Y4mzFFvR.js";
5
+ import { t as TeamTabs } from "./TeamTabs-Co3n2exj.js";
6
+ import { t as ProductionTeamPolicyEditor } from "./ProductionTeamPolicyEditor-DQSdP7Yx.js";
7
7
  import { useEffect, useMemo, useState } from "react";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
9
  import { GitCompareArrows, RefreshCw, Save } from "lucide-react";
@@ -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 };