bazilion 0.9.0 → 0.10.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 (187) hide show
  1. package/dist/cli.js +9 -15
  2. package/dist/cli.js.map +1 -1
  3. package/dist/daemon.js +22 -75
  4. package/dist/daemon.js.map +1 -1
  5. package/dist/web/client/assets/AgentTabs-B3hq5a3e.js +1 -0
  6. package/dist/web/client/assets/ConfigPage-BCwfgyjD.js +1 -0
  7. package/dist/web/client/assets/FieldRow-avAFLgYW.js +1 -0
  8. package/dist/web/client/assets/Page-CwNuDhWz.js +1 -0
  9. package/dist/web/client/assets/ProductionTeamPolicyEditor-CiQ-VVDo.js +7 -0
  10. package/dist/web/client/assets/{ProfileCommunicationEditor-D1OZ8WE5.js → ProfileCommunicationEditor-D84F5yfr.js} +1 -1
  11. package/dist/web/client/assets/SectionTabs-DZzy01az.js +1 -0
  12. package/dist/web/client/assets/TeamTabs-Btoe_FAE.js +1 -0
  13. package/dist/web/client/assets/TemplatesTabs-CAYY03F5.js +1 -0
  14. package/dist/web/client/assets/_id-BeauECmk.js +1 -0
  15. package/dist/web/client/assets/_id-BqU2BodK.js +1 -0
  16. package/dist/web/client/assets/_id-CKtoio3t.js +1 -0
  17. package/dist/web/client/assets/_id-Q98Of6k9.js +1 -0
  18. package/dist/web/client/assets/activity-DXN_N85w.js +1 -0
  19. package/dist/web/client/assets/agents-C5Xsdge1.js +1 -0
  20. package/dist/web/client/assets/agents-Cgxo4H5G.js +1 -0
  21. package/dist/web/client/assets/approvals-BnG7fbw-.js +1 -0
  22. package/dist/web/client/assets/chevron-down-BhcBspw3.js +1 -0
  23. package/dist/web/client/assets/config-xw4NyrXF.js +3 -0
  24. package/dist/web/client/assets/context-D2V1Oi4z.js +1 -0
  25. package/dist/web/client/assets/inbox-DK6hWCMp.js +1 -0
  26. package/dist/web/client/assets/index-VdURSoM4.js +12 -0
  27. package/dist/web/client/assets/login-CvptUoMR.js +1 -0
  28. package/dist/web/client/assets/mcp-BDFM_sW-.js +1 -0
  29. package/dist/web/client/assets/members-BJvph_TR.js +1 -0
  30. package/dist/web/client/assets/memory-DRytqZCD.js +1 -0
  31. package/dist/web/client/assets/plus-C9ee3SIO.js +1 -0
  32. package/dist/web/client/assets/policy-CGP50OtQ.js +1 -0
  33. package/dist/web/client/assets/preload-helper-mNuBjNXU.js +1 -0
  34. package/dist/web/client/assets/react-3W8R1pOO.js +1 -0
  35. package/dist/web/client/assets/routes-DJnWYvC9.js +1 -0
  36. package/dist/web/client/assets/services-DHheiv7L.js +1 -0
  37. package/dist/web/client/assets/skills-DmsitluU.js +1 -0
  38. package/dist/web/client/assets/styles-B5eQAwLP.css +2 -0
  39. package/dist/web/client/assets/team-policy-D0jpnn2b.js +1 -0
  40. package/dist/web/client/assets/teams-BdC4gthq.js +1 -0
  41. package/dist/web/client/assets/teams-CbxSaorm.js +1 -0
  42. package/dist/web/client/assets/telegram-D61G_alO.js +1 -0
  43. package/dist/web/client/assets/tokens-CjRplDrJ.js +1 -0
  44. package/dist/web/client/assets/triggers-MLzTm_DM.js +1 -0
  45. package/dist/web/client/assets/welcome-wBfX9dAd.js +1 -0
  46. package/dist/web/client/assets/{wire-constants-BY9Q9Z7d.js → wire-constants-BxfyUMXB.js} +2 -2
  47. package/dist/web/server/assets/{AgentTabs-BOjTN7QF.js → AgentTabs-DoMDJBXH.js} +10 -7
  48. package/dist/web/server/assets/{ChatPane-Dh3qxzdb.js → ChatPane-eUY_dga3.js} +15 -8
  49. package/dist/web/server/assets/ConfigPage-BKlh5vOU.js +68 -0
  50. package/dist/web/server/assets/{FieldRow-DwyqycWI.js → FieldRow-B4eTegH9.js} +5 -5
  51. package/dist/web/server/assets/Page-LENulSXY.js +111 -0
  52. package/dist/web/server/assets/{ProductionTeamPolicyEditor-Bke5doyl.js → ProductionTeamPolicyEditor-Y4mzFFvR.js} +4 -4
  53. package/dist/web/server/assets/SectionTabs-BJTPr5nU.js +8 -0
  54. package/dist/web/server/assets/{Sidebar-CGmtCnYU.js → Sidebar-O_CH1-JD.js} +228 -117
  55. package/dist/web/server/assets/{TeamTabs-BPxDBfqy.js → TeamTabs-zZzbP1t_.js} +9 -8
  56. package/dist/web/server/assets/{TemplatesTabs-zf4YhStd.js → TemplatesTabs-CcRxZhJe.js} +5 -4
  57. package/dist/web/server/assets/{_id-fpFQ9_Ya.js → _id-BhOB8Umi.js} +1 -1
  58. package/dist/web/server/assets/{_id-CCHA0gdR.js → _id-C3HY4lWg.js} +7 -10
  59. package/dist/web/server/assets/{_id-B6g9wmPR.js → _id-ClN9hY2x.js} +22 -28
  60. package/dist/web/server/assets/{_id-B04VaQlh.js → _id-CwyGjJeP.js} +2 -2
  61. package/dist/web/server/assets/{_id-_nFwi9gD.js → _id-D27T85mU.js} +1 -1
  62. package/dist/web/server/assets/{_id-5lLzLwcv.js → _id-D3Ap7zZA.js} +142 -144
  63. package/dist/web/server/assets/{_id-ButXHnRH.js → _id-DinTp_7X.js} +2 -2
  64. package/dist/web/server/assets/{_id-DdC9wpNN.js → _id-Dj1yZ3zJ.js} +2 -2
  65. package/dist/web/server/assets/{_id-DkFgCIb-.js → _id-DkYodSkG.js} +2 -2
  66. package/dist/web/server/assets/{_id-CUWgTqMS.js → _id-IzadFZV9.js} +1 -1
  67. package/dist/web/server/assets/{_id-C4AOhstq.js → _id-LrvXU4Nr.js} +6 -5
  68. package/dist/web/server/assets/{_id-DJkzwHjM.js → _id-tB47Vsfp.js} +1 -1
  69. package/dist/web/server/assets/{_tanstack-start-manifest_v-Div-TukY.js → _tanstack-start-manifest_v-D09Xu_6u.js} +95 -50
  70. package/dist/web/server/assets/{activity-C2ZKg1Q9.js → activity-BCI4mfNS.js} +28 -30
  71. package/dist/web/server/assets/{activity-DedraoFj.js → activity-D9SMqBhy.js} +2 -2
  72. package/dist/web/server/assets/{activity-GPx8NCeB.js → activity-DohitgwW.js} +1 -1
  73. package/dist/web/server/assets/{agents-BR2qXlXF.js → agents-BPKOshR5.js} +1 -1
  74. package/dist/web/server/assets/{agents-LHowEI6S.js → agents-BY74v7fM.js} +1 -1
  75. package/dist/web/server/assets/{agents-B8kinIPW.js → agents-BvttypqB.js} +2 -2
  76. package/dist/web/server/assets/{agents-Bp1nsVs2.js → agents-C9xlWK0Z.js} +2 -2
  77. package/dist/web/server/assets/agents-CgZMHj80.js +265 -0
  78. package/dist/web/server/assets/{agents-CUQmWhTp.js → agents-DZuFEj0D.js} +59 -77
  79. package/dist/web/server/assets/{approvals-VPc0YpLN.js → approvals-BGU-XGIO.js} +1 -1
  80. package/dist/web/server/assets/{approvals-Dw2LJoSA.js → approvals-CWcFHlor.js} +2 -2
  81. package/dist/web/server/assets/{approvals-DHgARzd8.js → approvals-DCaVw1Mz.js} +116 -78
  82. package/dist/web/server/assets/{auth-l-Vf8wlu.js → auth-byfSx6Ja.js} +1 -1
  83. package/dist/web/server/assets/{config-CHaCv89D.js → config-BDCJdtj2.js} +1 -1
  84. package/dist/web/server/assets/{config-BvKctDOX.js → config-D2LAsud2.js} +28 -49
  85. package/dist/web/server/assets/{config-QvHaxGlP.js → config-TeIoyYYc.js} +2 -2
  86. package/dist/web/server/assets/{context-5lrf2ame.js → context-B-XDf6Ym.js} +1 -1
  87. package/dist/web/server/assets/{context-D3Egm-vY.js → context-BXGo5Vfi.js} +2 -2
  88. package/dist/web/server/assets/context-DrkrIWun.js +47 -0
  89. package/dist/web/server/assets/{createServerRpc-CeKECg65.js → createServerRpc-pU-IQV2Y.js} +1 -1
  90. package/dist/web/server/assets/{createSsrRpc-ZBGxhl8t.js → createSsrRpc-DFsIAfFd.js} +1 -1
  91. package/dist/web/server/assets/{empty-plugin-adapters-DKUlnwwl.js → empty-plugin-adapters-Cq4--YW-.js} +1 -1
  92. package/dist/web/server/assets/{inbox-CkiSvD14.js → inbox-B3-TRsNI.js} +1 -1
  93. package/dist/web/server/assets/{inbox-Bxb3W04M.js → inbox-BardsGyy.js} +2 -2
  94. package/dist/web/server/assets/inbox-CUIyf9MT.js +131 -0
  95. package/dist/web/server/assets/login-Bx5LEyGP.js +118 -0
  96. package/dist/web/server/assets/login-CmWvxfTK.js +136 -0
  97. package/dist/web/server/assets/{mcp-BsFKEoXt.js → mcp-2pwT9HU8.js} +1 -1
  98. package/dist/web/server/assets/{mcp-BU_kKENi.js → mcp-BJjLIdP0.js} +105 -112
  99. package/dist/web/server/assets/{mcp-CKqwG4mt.js → mcp-DIWTogHM.js} +2 -2
  100. package/dist/web/server/assets/members-CCv17cjQ.js +46 -0
  101. package/dist/web/server/assets/{members-DlGBKZNl.js → members-CW5aBe81.js} +1 -1
  102. package/dist/web/server/assets/{members-ksELRsyk.js → members-VdPwD6CE.js} +2 -2
  103. package/dist/web/server/assets/{memory-CO0jKGzJ.js → memory-Dngc13Nw.js} +1 -1
  104. package/dist/web/server/assets/memory-a8Kz57Kh.js +287 -0
  105. package/dist/web/server/assets/{memory-B5moRnnp.js → memory-pZ4pZT7p.js} +2 -2
  106. package/dist/web/server/assets/{policy-Dxs78_GO.js → policy-Bb-vEgqg.js} +1 -1
  107. package/dist/web/server/assets/{policy-Dr55y-Mh.js → policy-BcGELcc9.js} +16 -22
  108. package/dist/web/server/assets/{policy-DNcGZLOB.js → policy-C30AeFIb.js} +2 -2
  109. package/dist/web/server/assets/{router-_izWQUeG.js → router-DIdp8ZNt.js} +100 -111
  110. package/dist/web/server/assets/{routes-BrTOoeth.js → routes-CXz4hTAr.js} +2 -2
  111. package/dist/web/server/assets/{routes-BSSKp3Rv.js → routes-Jb0zjKav.js} +16 -13
  112. package/dist/web/server/assets/{routes-DOj6ljcm.js → routes-lIclH9Br.js} +2 -2
  113. package/dist/web/server/assets/services-B9yBWDX0.js +79 -0
  114. package/dist/web/server/assets/{services-Pv_V88VA.js → services-C4szdhPx.js} +2 -2
  115. package/dist/web/server/assets/{services-DhRiNeq0.js → services-wG8I06oS.js} +1 -1
  116. package/dist/web/server/assets/skills-BZdqiDig.js +358 -0
  117. package/dist/web/server/assets/{skills-l2cyQ3zS.js → skills-C-UgkuCW.js} +2 -2
  118. package/dist/web/server/assets/{skills-CFIWVg32.js → skills-a9VSWHWq.js} +1 -1
  119. package/dist/web/server/assets/{start-DlHq0RaQ.js → start-WH8WzTL_.js} +1 -1
  120. package/dist/web/server/assets/{team-policy-Csvc5EDd.js → team-policy-vPG01onj.js} +3 -3
  121. package/dist/web/server/assets/{teams-B9O-WDH5.js → teams-CpQ0YgWf.js} +38 -34
  122. package/dist/web/server/assets/{teams-35Oprf6e.js → teams-DEpQR2QA.js} +2 -2
  123. package/dist/web/server/assets/{teams-DFkN7ic7.js → teams-DqfrEoH6.js} +1 -1
  124. package/dist/web/server/assets/{teams-B5IF65p2.js → teams-MjqgsmC3.js} +1 -1
  125. package/dist/web/server/assets/{teams-DH1CvWmT.js → teams-OIkHuxy1.js} +2 -2
  126. package/dist/web/server/assets/teams-jBtvnk59.js +193 -0
  127. package/dist/web/server/assets/{telegram-C9sQFwWj.js → telegram-7ub--6xz.js} +39 -51
  128. package/dist/web/server/assets/{telegram-mTnJCOmn.js → telegram-Bazhmpr4.js} +2 -2
  129. package/dist/web/server/assets/{telegram-BdaUIjvs.js → telegram-DNgCWebD.js} +1 -1
  130. package/dist/web/server/assets/{tokens-DdpnfV_Y.js → tokens-BnwFbV7T.js} +2 -2
  131. package/dist/web/server/assets/{tokens-BCz3PSoT.js → tokens-DPDMSN5O.js} +1 -1
  132. package/dist/web/server/assets/tokens-yyTSfBSN.js +186 -0
  133. package/dist/web/server/assets/{triggers-BzJG1nN5.js → triggers-BMpHsGIr.js} +5 -4
  134. package/dist/web/server/assets/{triggers-BcH_6PW1.js → triggers-C_0y6QV9.js} +1 -1
  135. package/dist/web/server/assets/{triggers-BcTTwMfy.js → triggers-Ca57_qym.js} +2 -2
  136. package/dist/web/server/assets/{welcome-CDGE2Sdk.js → welcome-IYHGurWx.js} +21 -13
  137. package/dist/web/server/server.js +82 -73
  138. package/dist/worker.js +5 -18
  139. package/dist/worker.js.map +1 -1
  140. package/package.json +4 -3
  141. package/dist/web/client/assets/AgentTabs-DioGqUVR.js +0 -1
  142. package/dist/web/client/assets/ConfigTabs-pY-V0Rie.js +0 -1
  143. package/dist/web/client/assets/FieldRow-DmwAFfbF.js +0 -1
  144. package/dist/web/client/assets/ProductionTeamPolicyEditor-1a5jQqUB.js +0 -7
  145. package/dist/web/client/assets/TeamTabs-BViZ4sti.js +0 -1
  146. package/dist/web/client/assets/TemplatesTabs-DVcY9pMD.js +0 -1
  147. package/dist/web/client/assets/_id-8P7brhGy.js +0 -1
  148. package/dist/web/client/assets/_id-C3o3MHq8.js +0 -1
  149. package/dist/web/client/assets/_id-DGRrSF1e.js +0 -1
  150. package/dist/web/client/assets/_id-KnJe-aW9.js +0 -1
  151. package/dist/web/client/assets/activity-WWvJSo4t.js +0 -1
  152. package/dist/web/client/assets/agents-C32T1voV.js +0 -1
  153. package/dist/web/client/assets/agents-nH4m4gZ1.js +0 -1
  154. package/dist/web/client/assets/approvals-l8jIZjqz.js +0 -1
  155. package/dist/web/client/assets/config-C7wvi1nR.js +0 -3
  156. package/dist/web/client/assets/context-BEGWE3RC.js +0 -1
  157. package/dist/web/client/assets/inbox--4aBaAgG.js +0 -1
  158. package/dist/web/client/assets/index-BCXoh1c8.js +0 -12
  159. package/dist/web/client/assets/login-Bk2wwIHQ.js +0 -1
  160. package/dist/web/client/assets/mcp-vM7xgh9e.js +0 -1
  161. package/dist/web/client/assets/members-cPKfnrSL.js +0 -1
  162. package/dist/web/client/assets/memory-BOcsaemD.js +0 -1
  163. package/dist/web/client/assets/policy-BGLCJYvS.js +0 -1
  164. package/dist/web/client/assets/preload-helper-eOOCz1Fu.js +0 -1
  165. package/dist/web/client/assets/routes-DnrP3dwv.js +0 -1
  166. package/dist/web/client/assets/services-C2_O3ifw.js +0 -1
  167. package/dist/web/client/assets/skills-B__fLZjx.js +0 -1
  168. package/dist/web/client/assets/styles-Dn24-ZvP.css +0 -2
  169. package/dist/web/client/assets/team-policy-BdX340m4.js +0 -1
  170. package/dist/web/client/assets/teams-DZMB4_iw.js +0 -1
  171. package/dist/web/client/assets/teams-rpaYKNIb.js +0 -1
  172. package/dist/web/client/assets/telegram-B1O4Ko0V.js +0 -1
  173. package/dist/web/client/assets/tokens-D7FH9VgA.js +0 -1
  174. package/dist/web/client/assets/triggers-3PLy2_Fo.js +0 -1
  175. package/dist/web/client/assets/welcome-B-QQobzq.js +0 -1
  176. package/dist/web/server/assets/ConfigTabs-CyuxzesF.js +0 -41
  177. package/dist/web/server/assets/agents-DU9Hqs58.js +0 -249
  178. package/dist/web/server/assets/context-CEr4-xiA.js +0 -49
  179. package/dist/web/server/assets/inbox-DU27iHv_.js +0 -133
  180. package/dist/web/server/assets/login-CNznncgA.js +0 -58
  181. package/dist/web/server/assets/login-CQybKk7Y.js +0 -74
  182. package/dist/web/server/assets/members-40DxRdVj.js +0 -48
  183. package/dist/web/server/assets/memory-CiTl4cN9.js +0 -289
  184. package/dist/web/server/assets/services-CHe4ihJk.js +0 -94
  185. package/dist/web/server/assets/skills-D89ND2kR.js +0 -321
  186. package/dist/web/server/assets/teams-zcm9XaQU.js +0 -174
  187. package/dist/web/server/assets/tokens-CkKqrtk-.js +0 -193
@@ -0,0 +1,193 @@
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";
3
+ import { t as Button } from "./Button-Dsnw22OF.js";
4
+ import { useState } from "react";
5
+ import { useRouter } from "@tanstack/react-router";
6
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
+ //#region src/routes/teams/index.tsx?tsr-split=component
8
+ function TeamsPage() {
9
+ const { teams, memberCounts, policies, readiness } = Route.useLoaderData();
10
+ const router = useRouter();
11
+ async function remove(id) {
12
+ if (!confirm("remove this team registration?")) return;
13
+ const revision = policies[id]?.revision;
14
+ if (!revision) return;
15
+ const res = await fetch(`/api/teams/${encodeURIComponent(id)}?expectedTeamPolicyRevision=${revision}`, { method: "DELETE" });
16
+ if (!res.ok && res.status !== 204) {
17
+ alert(res.statusText);
18
+ return;
19
+ }
20
+ await router.invalidate();
21
+ }
22
+ return /* @__PURE__ */ jsxs(PageShell, {
23
+ size: "wide",
24
+ children: [
25
+ /* @__PURE__ */ jsx(PageHeader, {
26
+ eyebrow: "Workspace",
27
+ title: "Teams",
28
+ description: "Each Team owns one workspace, one live membership roster, and one effective communication policy. Every agent belongs to exactly one Team."
29
+ }),
30
+ /* @__PURE__ */ jsx(SectionCard, {
31
+ title: "Policy enforcement",
32
+ description: `Management contract v${readiness.contractVersion} is ready for this daemon.`,
33
+ actions: /* @__PURE__ */ jsx(StatusBadge, {
34
+ variant: readiness.enforcementActive ? "success" : "warning",
35
+ children: readiness.enforcementActive ? "Enforcement on" : "Enforcement off"
36
+ }),
37
+ "aria-label": "Team Policy enforcement readiness",
38
+ children: /* @__PURE__ */ jsx("p", {
39
+ className: "text-sm text-muted-foreground",
40
+ children: readiness.enforcementActive ? "Communication boundaries are currently enforcing each Team policy." : /* @__PURE__ */ jsxs(Fragment, { children: [
41
+ "Set ",
42
+ /* @__PURE__ */ jsx("code", { children: "BAZILION_TEAM_POLICY_ENFORCEMENT=on" }),
43
+ " and restart the daemon to enforce Team policies."
44
+ ] })
45
+ })
46
+ }),
47
+ /* @__PURE__ */ jsx(RegisterTeamForm, { onRegistered: () => router.invalidate() }),
48
+ /* @__PURE__ */ jsx(SectionCard, {
49
+ title: "Registered teams",
50
+ description: "Open a Team to manage its context, members, shared memory, and policy.",
51
+ children: teams.length === 0 ? /* @__PURE__ */ jsx(EmptyState, {
52
+ title: "No teams registered",
53
+ description: "Register a Team above to create a workspace for your agents."
54
+ }) : /* @__PURE__ */ jsx("div", {
55
+ className: "overflow-x-auto",
56
+ children: /* @__PURE__ */ jsxs("table", {
57
+ className: "min-w-[820px]",
58
+ children: [/* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
59
+ /* @__PURE__ */ jsx("th", { children: "ID" }),
60
+ /* @__PURE__ */ jsx("th", { children: "Name" }),
61
+ /* @__PURE__ */ jsx("th", { children: "Members" }),
62
+ /* @__PURE__ */ jsx("th", { children: "Policy" }),
63
+ /* @__PURE__ */ jsx("th", { children: "Baseline" }),
64
+ /* @__PURE__ */ jsx("th", { children: /* @__PURE__ */ jsx("span", {
65
+ className: "sr-only",
66
+ children: "Actions"
67
+ }) })
68
+ ] }) }), /* @__PURE__ */ jsx("tbody", { children: teams.map((g) => {
69
+ const count = memberCounts[g.id] ?? 0;
70
+ const policy = policies[g.id];
71
+ return /* @__PURE__ */ jsxs("tr", { children: [
72
+ /* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx("code", { children: g.id }) }),
73
+ /* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx("a", {
74
+ href: `/teams/${g.id}`,
75
+ children: g.name
76
+ }) }),
77
+ /* @__PURE__ */ jsx("td", { children: count }),
78
+ /* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx("a", {
79
+ href: `/teams/${g.id}/policy`,
80
+ children: policy ? `r${policy.revision} · ${policy.edges} edges` : "Unavailable"
81
+ }) }),
82
+ /* @__PURE__ */ jsx("td", { children: policy?.baseline ?? "None" }),
83
+ /* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx("div", {
84
+ className: "flex justify-end",
85
+ children: count === 0 ? /* @__PURE__ */ jsx(Button, {
86
+ variant: "danger",
87
+ onClick: () => remove(g.id),
88
+ children: "Remove"
89
+ }) : /* @__PURE__ */ jsx(StatusBadge, {
90
+ variant: "neutral",
91
+ title: `${count} agent(s) belong to this Team`,
92
+ children: "In use"
93
+ })
94
+ }) })
95
+ ] }, g.id);
96
+ }) })]
97
+ })
98
+ })
99
+ })
100
+ ]
101
+ });
102
+ }
103
+ function RegisterTeamForm({ onRegistered }) {
104
+ const [id, setId] = useState("");
105
+ const [name, setName] = useState("");
106
+ const [link, setLink] = useState("");
107
+ const [err, setErr] = useState(null);
108
+ const [submitting, setSubmitting] = useState(false);
109
+ async function submit(e) {
110
+ e.preventDefault();
111
+ setErr(null);
112
+ if (!id.trim()) {
113
+ setErr("id is required");
114
+ return;
115
+ }
116
+ setSubmitting(true);
117
+ try {
118
+ const res = await fetch("/api/teams", {
119
+ method: "POST",
120
+ headers: { "content-type": "application/json" },
121
+ body: JSON.stringify({
122
+ id: id.trim(),
123
+ name: name.trim() || void 0,
124
+ link: link.trim() || void 0
125
+ })
126
+ });
127
+ if (!res.ok) {
128
+ const e2 = await res.json().catch(() => null);
129
+ throw new Error(e2?.error ?? res.statusText);
130
+ }
131
+ setId("");
132
+ setName("");
133
+ setLink("");
134
+ onRegistered();
135
+ } catch (e2) {
136
+ setErr(e2.message);
137
+ } finally {
138
+ setSubmitting(false);
139
+ }
140
+ }
141
+ return /* @__PURE__ */ jsx(SectionCard, {
142
+ title: "Register a team",
143
+ description: /* @__PURE__ */ jsxs(Fragment, { children: [
144
+ "Teams live under ",
145
+ /* @__PURE__ */ jsx("code", { children: "~/.bazilion/teams/<slug>/" }),
146
+ ". Link an existing project directory or leave the target blank to create a fresh workspace."
147
+ ] }),
148
+ children: /* @__PURE__ */ jsxs("form", {
149
+ onSubmit: submit,
150
+ children: [
151
+ err && /* @__PURE__ */ jsx("div", {
152
+ className: "err",
153
+ children: err
154
+ }),
155
+ /* @__PURE__ */ jsxs("div", {
156
+ className: "grid gap-4 sm:grid-cols-2",
157
+ children: [
158
+ /* @__PURE__ */ jsxs("label", { children: ["ID (slug)", /* @__PURE__ */ jsx("input", {
159
+ value: id,
160
+ onChange: (e) => setId(e.target.value),
161
+ required: true,
162
+ placeholder: "my-project"
163
+ })] }),
164
+ /* @__PURE__ */ jsxs("label", { children: ["Name", /* @__PURE__ */ jsx("input", {
165
+ value: name,
166
+ onChange: (e) => setName(e.target.value),
167
+ placeholder: "My project"
168
+ })] }),
169
+ /* @__PURE__ */ jsxs("label", {
170
+ className: "sm:col-span-2",
171
+ children: ["Link target (optional, absolute path)", /* @__PURE__ */ jsx("input", {
172
+ value: link,
173
+ onChange: (e) => setLink(e.target.value),
174
+ placeholder: "/home/user/projects/my-project"
175
+ })]
176
+ })
177
+ ]
178
+ }),
179
+ /* @__PURE__ */ jsx("div", {
180
+ className: "mt-4",
181
+ children: /* @__PURE__ */ jsx(Button, {
182
+ variant: "primary",
183
+ type: "submit",
184
+ disabled: submitting,
185
+ children: submitting ? "Registering…" : "Register team"
186
+ })
187
+ })
188
+ ]
189
+ })
190
+ });
191
+ }
192
+ //#endregion
193
+ export { TeamsPage as component };
@@ -1,6 +1,6 @@
1
- import { t as Route } from "./telegram-mTnJCOmn.js";
1
+ import { t as Route } from "./telegram-Bazhmpr4.js";
2
2
  import { t as Button } from "./Button-Dsnw22OF.js";
3
- import { t as ConfigTabs } from "./ConfigTabs-CyuxzesF.js";
3
+ import { t as ConfigPage } from "./ConfigPage-BKlh5vOU.js";
4
4
  import { useEffect, useState } from "react";
5
5
  import { useRouter } from "@tanstack/react-router";
6
6
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -75,35 +75,23 @@ function TelegramIntegrationPage() {
75
75
  setChecking(false);
76
76
  }
77
77
  }
78
- return /* @__PURE__ */ jsxs("main", {
79
- className: "mx-auto max-w-3xl px-6 py-8",
78
+ return /* @__PURE__ */ jsxs(ConfigPage, {
79
+ active: "integrations",
80
+ title: "Telegram",
81
+ description: "Connect one forum-supergroup bot with one topic per agent, so conversations stay reachable from your phone.",
82
+ size: "narrow",
80
83
  children: [
81
- /* @__PURE__ */ jsx("h1", {
82
- className: "font-serif text-3xl text-foreground mb-2",
83
- children: "config"
84
- }),
85
- /* @__PURE__ */ jsx(ConfigTabs, { active: "integrations" }),
86
- /* @__PURE__ */ jsxs("header", {
87
- className: "mb-6",
88
- children: [/* @__PURE__ */ jsx("h2", {
89
- className: "text-xl font-semibold",
90
- children: "Telegram"
91
- }), /* @__PURE__ */ jsx("p", {
92
- className: "text-muted-foreground text-sm",
93
- children: "One forum-supergroup bot, one topic per agent. Talk to any of your agents from a phone."
94
- })]
95
- }),
96
84
  /* @__PURE__ */ jsx(Step2Banner, {}),
97
85
  initial.migratedChatId && /* @__PURE__ */ jsx(MigrationBanner, { toChatId: initial.migratedChatId }),
98
86
  /* @__PURE__ */ jsxs("section", {
99
- className: "rounded-lg border bg-card p-5 mb-6",
87
+ className: "rounded-lg border bg-card p-5",
100
88
  children: [
101
89
  /* @__PURE__ */ jsx("h3", {
102
90
  className: "text-sm font-semibold uppercase tracking-wide text-muted-foreground mb-3",
103
91
  children: "Credentials"
104
92
  }),
105
93
  initial.configured && /* @__PURE__ */ jsxs("p", {
106
- className: "text-xs text-emerald-700 mb-3",
94
+ className: "text-xs text-success mb-3",
107
95
  children: [
108
96
  "✓ Stored: ",
109
97
  /* @__PURE__ */ jsx("code", {
@@ -177,7 +165,7 @@ function TelegramIntegrationPage() {
177
165
  ]
178
166
  }),
179
167
  /* @__PURE__ */ jsxs("div", {
180
- className: "flex items-center gap-3 pt-1",
168
+ className: "flex flex-wrap items-center gap-3 pt-1",
181
169
  children: [
182
170
  /* @__PURE__ */ jsx(Button, {
183
171
  variant: "primary",
@@ -191,11 +179,11 @@ function TelegramIntegrationPage() {
191
179
  children: "clear credentials"
192
180
  }),
193
181
  saveOk && /* @__PURE__ */ jsx("span", {
194
- className: "text-xs text-emerald-700",
182
+ className: "text-xs text-success",
195
183
  children: "saved ✓"
196
184
  }),
197
185
  saveError && /* @__PURE__ */ jsxs("span", {
198
- className: "text-xs text-rose-700",
186
+ className: "text-xs text-danger",
199
187
  children: ["error: ", saveError]
200
188
  })
201
189
  ]
@@ -208,7 +196,7 @@ function TelegramIntegrationPage() {
208
196
  className: "rounded-lg border bg-card p-5",
209
197
  children: [
210
198
  /* @__PURE__ */ jsxs("div", {
211
- className: "flex items-center justify-between mb-3",
199
+ className: "mb-3 flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between",
212
200
  children: [/* @__PURE__ */ jsx("h3", {
213
201
  className: "text-sm font-semibold uppercase tracking-wide text-muted-foreground",
214
202
  children: "Preflight checks"
@@ -302,7 +290,7 @@ function AccessControlCard() {
302
290
  }
303
291
  }
304
292
  return /* @__PURE__ */ jsxs("section", {
305
- className: "rounded-lg border bg-card p-5 mt-6",
293
+ className: "rounded-lg border bg-card p-5",
306
294
  children: [
307
295
  /* @__PURE__ */ jsx("h3", {
308
296
  className: "text-sm font-semibold uppercase tracking-wide text-muted-foreground mb-1",
@@ -324,12 +312,12 @@ function AccessControlCard() {
324
312
  className: "text-xs text-muted-foreground italic",
325
313
  children: "loading…"
326
314
  }) : users.length === 0 ? /* @__PURE__ */ jsx("p", {
327
- className: "text-xs text-amber-700 mb-3",
315
+ className: "text-xs text-warning mb-3",
328
316
  children: "Open — no allowlist yet. The first user to message the bot claims owner."
329
317
  }) : /* @__PURE__ */ jsx("ul", {
330
318
  className: "mb-3 space-y-1 text-sm",
331
319
  children: users.map((u) => /* @__PURE__ */ jsxs("li", {
332
- className: "flex items-center gap-2",
320
+ className: "flex flex-wrap items-center gap-2",
333
321
  children: [
334
322
  /* @__PURE__ */ jsx("code", {
335
323
  className: "font-mono",
@@ -346,7 +334,7 @@ function AccessControlCard() {
346
334
  u.role !== "owner" && /* @__PURE__ */ jsx("button", {
347
335
  type: "button",
348
336
  onClick: () => void remove(u.userId),
349
- className: "ghost-btn text-xs text-[#9B3D3D]",
337
+ className: "ghost-btn text-xs text-rose-baziu",
350
338
  children: "remove"
351
339
  })
352
340
  ]
@@ -354,19 +342,19 @@ function AccessControlCard() {
354
342
  }),
355
343
  /* @__PURE__ */ jsxs("form", {
356
344
  onSubmit: add,
357
- className: "flex items-center gap-2",
345
+ className: "flex flex-col gap-2 sm:flex-row sm:flex-wrap sm:items-center",
358
346
  children: [
359
347
  /* @__PURE__ */ jsx("input", {
360
348
  value: userId,
361
349
  onChange: (e) => setUserId(e.target.value),
362
350
  placeholder: "user id",
363
- className: "w-28 rounded-md border bg-background px-2 py-1 font-mono text-sm"
351
+ className: "w-full rounded-md border bg-background px-2 py-1 font-mono text-sm sm:w-28"
364
352
  }),
365
353
  /* @__PURE__ */ jsx("input", {
366
354
  value: label,
367
355
  onChange: (e) => setLabel(e.target.value),
368
356
  placeholder: "label (optional)",
369
- className: "w-40 rounded-md border bg-background px-2 py-1 text-sm"
357
+ className: "w-full rounded-md border bg-background px-2 py-1 text-sm sm:w-40"
370
358
  }),
371
359
  /* @__PURE__ */ jsx(Button, {
372
360
  variant: "ghost",
@@ -375,7 +363,7 @@ function AccessControlCard() {
375
363
  children: "add"
376
364
  }),
377
365
  err && /* @__PURE__ */ jsx("span", {
378
- className: "text-xs text-rose-700",
366
+ className: "text-xs text-danger",
379
367
  children: err
380
368
  })
381
369
  ]
@@ -402,14 +390,14 @@ function MigrationBanner({ toChatId }) {
402
390
  }
403
391
  }
404
392
  return /* @__PURE__ */ jsxs("div", {
405
- className: "rounded-md border-2 border-rose-400 bg-rose-50 px-4 py-3 mb-6 text-sm",
393
+ className: "rounded-md border-2 border-danger/25 bg-danger/10 px-4 py-3 text-sm",
406
394
  children: [
407
395
  /* @__PURE__ */ jsx("div", {
408
- className: "font-semibold text-rose-900 mb-1",
396
+ className: "font-semibold text-danger mb-1",
409
397
  children: "Supergroup chat id changed"
410
398
  }),
411
399
  /* @__PURE__ */ jsxs("p", {
412
- className: "text-rose-900 mb-2",
400
+ className: "text-danger mb-2",
413
401
  children: [
414
402
  "Telegram migrated this supergroup to a new chat id (",
415
403
  /* @__PURE__ */ jsx("code", {
@@ -432,7 +420,7 @@ function MigrationBanner({ toChatId }) {
432
420
  children: busy ? "reconnecting…" : `Reconnect to ${toChatId}`
433
421
  }),
434
422
  err && /* @__PURE__ */ jsx("span", {
435
- className: "ml-3 text-xs text-rose-700",
423
+ className: "ml-3 text-xs text-danger",
436
424
  children: err
437
425
  })
438
426
  ]
@@ -440,12 +428,12 @@ function MigrationBanner({ toChatId }) {
440
428
  }
441
429
  function Step2Banner() {
442
430
  return /* @__PURE__ */ jsxs("div", {
443
- className: "rounded-md border-2 border-amber-400 bg-amber-50 px-4 py-3 mb-6 text-sm",
431
+ className: "rounded-md border-2 border-warning/25 bg-warning/10 px-4 py-3 text-sm",
444
432
  children: [/* @__PURE__ */ jsx("div", {
445
- className: "font-semibold text-amber-900 mb-1",
433
+ className: "font-semibold text-warning mb-1",
446
434
  children: "Step 2 of the rollout"
447
435
  }), /* @__PURE__ */ jsxs("p", {
448
- className: "text-amber-900",
436
+ className: "text-warning",
449
437
  children: [
450
438
  "The bot polls Telegram and creates the ",
451
439
  /* @__PURE__ */ jsx("code", {
@@ -474,11 +462,11 @@ function PollingState({ polling }) {
474
462
  className: "flex flex-wrap gap-x-4 gap-y-1 font-mono",
475
463
  children: [
476
464
  /* @__PURE__ */ jsx("span", {
477
- className: polling.running ? "text-emerald-700" : "text-rose-700",
465
+ className: polling.running ? "text-success" : "text-danger",
478
466
  children: polling.running ? "running" : "stopped"
479
467
  }),
480
468
  /* @__PURE__ */ jsx("span", {
481
- className: polling.activated ? "text-emerald-700" : "text-amber-700",
469
+ className: polling.activated ? "text-success" : "text-warning",
482
470
  children: polling.activated ? "activated" : "awaiting activation"
483
471
  }),
484
472
  polling.lastUpdateId !== null && /* @__PURE__ */ jsxs("span", { children: ["last update ", polling.lastUpdateId] }),
@@ -487,7 +475,7 @@ function PollingState({ polling }) {
487
475
  ]
488
476
  }),
489
477
  polling.error && /* @__PURE__ */ jsxs("p", {
490
- className: "text-rose-700",
478
+ className: "text-danger",
491
479
  children: ["error: ", polling.error]
492
480
  })
493
481
  ]
@@ -495,17 +483,17 @@ function PollingState({ polling }) {
495
483
  }
496
484
  function PreflightResult({ health }) {
497
485
  if (health.error) return /* @__PURE__ */ jsxs("div", {
498
- className: "rounded-md border border-rose-300 bg-rose-50 px-3 py-2 text-sm",
486
+ className: "rounded-md border border-danger/25 bg-danger/10 px-3 py-2 text-sm",
499
487
  children: [
500
488
  /* @__PURE__ */ jsxs("p", {
501
- className: "font-semibold text-rose-900",
489
+ className: "font-semibold text-danger",
502
490
  children: ["Failed at ", /* @__PURE__ */ jsx("code", {
503
491
  className: "font-mono",
504
492
  children: health.error.step
505
493
  })]
506
494
  }),
507
495
  /* @__PURE__ */ jsx("p", {
508
- className: "text-rose-900 mt-1",
496
+ className: "text-danger mt-1",
509
497
  children: health.error.message
510
498
  }),
511
499
  hintFor(health.error.step)
@@ -551,14 +539,14 @@ function Check({ ok, label, children }) {
551
539
  return /* @__PURE__ */ jsxs("li", {
552
540
  className: "flex items-start gap-2 text-sm",
553
541
  children: [/* @__PURE__ */ jsx("span", {
554
- className: `mt-0.5 inline-flex h-4 w-4 items-center justify-center rounded-full text-[10px] font-bold leading-none ${ok ? "bg-emerald-100 text-emerald-800" : "bg-rose-100 text-rose-800"}`,
542
+ className: `mt-0.5 inline-flex h-4 w-4 items-center justify-center rounded-full text-[10px] font-bold leading-none ${ok ? "bg-success/10 text-success" : "bg-danger/10 text-danger"}`,
555
543
  "aria-hidden": true,
556
544
  children: ok ? "✓" : "✕"
557
545
  }), /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("span", {
558
546
  className: "font-medium",
559
547
  children: label
560
548
  }), /* @__PURE__ */ jsx("span", {
561
- className: `ml-2 text-xs ${ok ? "text-muted-foreground" : "text-rose-800"}`,
549
+ className: `ml-2 text-xs ${ok ? "text-muted-foreground" : "text-danger"}`,
562
550
  children
563
551
  })] })]
564
552
  });
@@ -566,15 +554,15 @@ function Check({ ok, label, children }) {
566
554
  function hintFor(step) {
567
555
  switch (step) {
568
556
  case "getMe": return /* @__PURE__ */ jsx("p", {
569
- className: "text-xs text-rose-900 mt-1",
557
+ className: "text-xs text-danger mt-1",
570
558
  children: "The token is invalid or revoked. Re-issue with @BotFather → /token, or paste a fresh one above."
571
559
  });
572
560
  case "getChat": return /* @__PURE__ */ jsx("p", {
573
- className: "text-xs text-rose-900 mt-1",
561
+ className: "text-xs text-danger mt-1",
574
562
  children: "The chat id either doesn't exist, points at a basic team (not a supergroup), or the bot isn't a member. Forward any message from the supergroup to the bot to double-check the id, then add the bot to the team."
575
563
  });
576
564
  case "getChatMember": return /* @__PURE__ */ jsx("p", {
577
- className: "text-xs text-rose-900 mt-1",
565
+ className: "text-xs text-danger mt-1",
578
566
  children: "The bot is in the chat but the membership lookup failed. Usually means the bot was kicked or the chat id was migrated — confirm the bot is still in the supergroup."
579
567
  });
580
568
  }
@@ -1,8 +1,8 @@
1
1
  import { t as createServerFn } from "../server.js";
2
- import { t as createSsrRpc } from "./createSsrRpc-ZBGxhl8t.js";
2
+ import { t as createSsrRpc } from "./createSsrRpc-DFsIAfFd.js";
3
3
  import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
4
4
  //#region src/routes/config/integrations/telegram.tsx
5
- var $$splitComponentImporter = () => import("./telegram-C9sQFwWj.js");
5
+ var $$splitComponentImporter = () => import("./telegram-7ub--6xz.js");
6
6
  var fetchTelegramConfig = createServerFn({ method: "GET" }).handler(createSsrRpc("00a157dd07824e1f126f06646effd1d876f280f6fc64c144d2f6429414a4e58a"));
7
7
  var Route = createFileRoute("/config/integrations/telegram")({
8
8
  loader: () => fetchTelegramConfig(),
@@ -1,5 +1,5 @@
1
1
  import { t as createServerFn } from "../server.js";
2
- import { t as createServerRpc } from "./createServerRpc-CeKECg65.js";
2
+ import { t as createServerRpc } from "./createServerRpc-pU-IQV2Y.js";
3
3
  import { n as daemonClient } from "./daemon-client-2NRMzlTr.js";
4
4
  //#region src/routes/config/integrations/telegram.tsx?tss-serverfn-split
5
5
  var fetchTelegramConfig_createServerFn_handler = createServerRpc({
@@ -1,8 +1,8 @@
1
1
  import { t as createServerFn } from "../server.js";
2
- import { t as createSsrRpc } from "./createSsrRpc-ZBGxhl8t.js";
2
+ import { t as createSsrRpc } from "./createSsrRpc-DFsIAfFd.js";
3
3
  import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
4
4
  //#region src/routes/config/tokens.tsx
5
- var $$splitComponentImporter = () => import("./tokens-CkKqrtk-.js");
5
+ var $$splitComponentImporter = () => import("./tokens-yyTSfBSN.js");
6
6
  var fetchTokens = createServerFn({ method: "POST" }).inputValidator((d) => d).handler(createSsrRpc("46e35c9f1afc79423cb49703b454ef684344db08ec19775efd70a8768c7837f1"));
7
7
  var Route = createFileRoute("/config/tokens")({
8
8
  validateSearch: (s) => ({ all: s.all === "1" ? "1" : void 0 }),
@@ -1,5 +1,5 @@
1
1
  import { t as createServerFn } from "../server.js";
2
- import { t as createServerRpc } from "./createServerRpc-CeKECg65.js";
2
+ import { t as createServerRpc } from "./createServerRpc-pU-IQV2Y.js";
3
3
  import { n as daemonClient } from "./daemon-client-2NRMzlTr.js";
4
4
  //#region src/routes/config/tokens.tsx?tss-serverfn-split
5
5
  var fetchTokens_createServerFn_handler = createServerRpc({