bazilion 0.8.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 (217) hide show
  1. package/README.md +47 -5
  2. package/dist/cli.js +1190 -640
  3. package/dist/cli.js.map +1 -1
  4. package/dist/daemon.js +5165 -1598
  5. package/dist/daemon.js.map +1 -1
  6. package/dist/migrations/0001_init.sql +318 -88
  7. package/dist/web/client/assets/AgentTabs-B3hq5a3e.js +1 -0
  8. package/dist/web/client/assets/ConfigPage-BCwfgyjD.js +1 -0
  9. package/dist/web/client/assets/FieldRow-avAFLgYW.js +1 -0
  10. package/dist/web/client/assets/Page-CwNuDhWz.js +1 -0
  11. package/dist/web/client/assets/ProductionTeamPolicyEditor-CiQ-VVDo.js +7 -0
  12. package/dist/web/client/assets/ProductionTeamPolicyEditor-DLioOiRN.css +1 -0
  13. package/dist/web/client/assets/ProfileCommunicationEditor-D84F5yfr.js +1 -0
  14. package/dist/web/client/assets/RecoveryState-QfMSuwy3.js +1 -0
  15. package/dist/web/client/assets/SectionTabs-DZzy01az.js +1 -0
  16. package/dist/web/client/assets/TeamTabs-Btoe_FAE.js +1 -0
  17. package/dist/web/client/assets/TemplatesTabs-CAYY03F5.js +1 -0
  18. package/dist/web/client/assets/_id-BeauECmk.js +1 -0
  19. package/dist/web/client/assets/_id-BqU2BodK.js +1 -0
  20. package/dist/web/client/assets/_id-CKtoio3t.js +1 -0
  21. package/dist/web/client/assets/_id-DGyKURCp.js +1 -0
  22. package/dist/web/client/assets/_id-Q98Of6k9.js +1 -0
  23. package/dist/web/client/assets/activity-DJuhhQCb.js +1 -0
  24. package/dist/web/client/assets/activity-DXN_N85w.js +1 -0
  25. package/dist/web/client/assets/agents-C5Xsdge1.js +1 -0
  26. package/dist/web/client/assets/agents-Cgxo4H5G.js +1 -0
  27. package/dist/web/client/assets/approvals-BnG7fbw-.js +1 -0
  28. package/dist/web/client/assets/approvals-DGi0PSx8.js +1 -0
  29. package/dist/web/client/assets/chevron-down-BhcBspw3.js +1 -0
  30. package/dist/web/client/assets/config-xw4NyrXF.js +3 -0
  31. package/dist/web/client/assets/context-D2V1Oi4z.js +1 -0
  32. package/dist/web/client/assets/inbox-DK6hWCMp.js +1 -0
  33. package/dist/web/client/assets/index-VdURSoM4.js +12 -0
  34. package/dist/web/client/assets/login-CvptUoMR.js +1 -0
  35. package/dist/web/client/assets/mcp-BDFM_sW-.js +1 -0
  36. package/dist/web/client/assets/members-BJvph_TR.js +1 -0
  37. package/dist/web/client/assets/memory-DRytqZCD.js +1 -0
  38. package/dist/web/client/assets/plus-C9ee3SIO.js +1 -0
  39. package/dist/web/client/assets/policy-CGP50OtQ.js +1 -0
  40. package/dist/web/client/assets/policy-K4hIbbIN.js +1 -0
  41. package/dist/web/client/assets/preload-helper-mNuBjNXU.js +1 -0
  42. package/dist/web/client/assets/react-3W8R1pOO.js +1 -0
  43. package/dist/web/client/assets/routes-DJnWYvC9.js +1 -0
  44. package/dist/web/client/assets/services-DHheiv7L.js +1 -0
  45. package/dist/web/client/assets/skills-DmsitluU.js +1 -0
  46. package/dist/web/client/assets/styles-B5eQAwLP.css +2 -0
  47. package/dist/web/client/assets/team-policy-D0jpnn2b.js +1 -0
  48. package/dist/web/client/assets/teams-BdC4gthq.js +1 -0
  49. package/dist/web/client/assets/teams-CSNyLz3l.js +1 -0
  50. package/dist/web/client/assets/teams-CbxSaorm.js +1 -0
  51. package/dist/web/client/assets/telegram-D61G_alO.js +1 -0
  52. package/dist/web/client/assets/tokens-CjRplDrJ.js +1 -0
  53. package/dist/web/client/assets/triggers-MLzTm_DM.js +1 -0
  54. package/dist/web/client/assets/welcome-wBfX9dAd.js +1 -0
  55. package/dist/web/client/assets/{ChatPane-DzEgOEqS.js → wire-constants-BxfyUMXB.js} +4 -4
  56. package/dist/web/server/assets/{AgentTabs-BOjTN7QF.js → AgentTabs-DoMDJBXH.js} +10 -7
  57. package/dist/web/server/assets/{ChatPane-BvpswYvF.js → ChatPane-eUY_dga3.js} +38 -20
  58. package/dist/web/server/assets/ConfigPage-BKlh5vOU.js +68 -0
  59. package/dist/web/server/assets/{FieldRow-DwyqycWI.js → FieldRow-B4eTegH9.js} +5 -5
  60. package/dist/web/server/assets/Page-LENulSXY.js +111 -0
  61. package/dist/web/server/assets/ProductionTeamPolicyEditor-Y4mzFFvR.js +1009 -0
  62. package/dist/web/server/assets/ProfileCommunicationEditor-C2RU-2QB.js +107 -0
  63. package/dist/web/server/assets/RecoveryState-B2SG-mrY.js +37 -0
  64. package/dist/web/server/assets/SectionTabs-BJTPr5nU.js +8 -0
  65. package/dist/web/server/assets/Sidebar-O_CH1-JD.js +964 -0
  66. package/dist/web/server/assets/TeamTabs-zZzbP1t_.js +51 -0
  67. package/dist/web/server/assets/{TemplatesTabs---7h5GYa.js → TemplatesTabs-CcRxZhJe.js} +9 -8
  68. package/dist/web/server/assets/_id-A8Xiv6Lc.js +11 -0
  69. package/dist/web/server/assets/{_id-Sjw0zhA6.js → _id-BhOB8Umi.js} +5 -5
  70. package/dist/web/server/assets/{_id-DDixKEud.js → _id-C3HY4lWg.js} +77 -20
  71. package/dist/web/server/assets/{_id-BdRiQb2H.js → _id-ClN9hY2x.js} +132 -39
  72. package/dist/web/server/assets/{_id-BqnDy_Ca.js → _id-CwyGjJeP.js} +7 -6
  73. package/dist/web/server/assets/{_id-D8duqgd5.js → _id-D27T85mU.js} +6 -5
  74. package/dist/web/server/assets/_id-D3Ap7zZA.js +377 -0
  75. package/dist/web/server/assets/_id-DinTp_7X.js +14 -0
  76. package/dist/web/server/assets/{_id-CnQflrRv.js → _id-Dj1yZ3zJ.js} +6 -6
  77. package/dist/web/server/assets/{_id-DUIrFV3G.js → _id-DkYodSkG.js} +10 -2
  78. package/dist/web/server/assets/{_id-D_Ew11ED.js → _id-IzadFZV9.js} +9 -9
  79. package/dist/web/server/assets/_id-LrvXU4Nr.js +45 -0
  80. package/dist/web/server/assets/_id-tB47Vsfp.js +42 -0
  81. package/dist/web/server/assets/_tanstack-start-manifest_v-D09Xu_6u.js +286 -0
  82. package/dist/web/server/assets/activity-BCI4mfNS.js +168 -0
  83. package/dist/web/server/assets/activity-CGCf8BQf.js +11 -0
  84. package/dist/web/server/assets/activity-D9SMqBhy.js +14 -0
  85. package/dist/web/server/assets/activity-DohitgwW.js +12 -0
  86. package/dist/web/server/assets/{agents-k5QURC4I.js → agents-BPKOshR5.js} +5 -5
  87. package/dist/web/server/assets/{profiles-C6a3RKgu.js → agents-BY74v7fM.js} +5 -5
  88. package/dist/web/server/assets/{profiles-CZ5NkmVw.js → agents-BvttypqB.js} +5 -5
  89. package/dist/web/server/assets/{agents-ChcAJUI5.js → agents-C9xlWK0Z.js} +2 -2
  90. package/dist/web/server/assets/agents-CgZMHj80.js +265 -0
  91. package/dist/web/server/assets/{profiles-LxcC_L6n.js → agents-DZuFEj0D.js} +87 -79
  92. package/dist/web/server/assets/approvals-BGU-XGIO.js +12 -0
  93. package/dist/web/server/assets/approvals-CWcFHlor.js +14 -0
  94. package/dist/web/server/assets/approvals-CbFXFvG8.js +11 -0
  95. package/dist/web/server/assets/approvals-DCaVw1Mz.js +280 -0
  96. package/dist/web/server/assets/{auth-DzRAMwVt.js → auth-byfSx6Ja.js} +6 -2
  97. package/dist/web/server/assets/{config-CHaCv89D.js → config-BDCJdtj2.js} +1 -1
  98. package/dist/web/server/assets/{config-CdVjqjin.js → config-D2LAsud2.js} +31 -52
  99. package/dist/web/server/assets/{config-Bq3o924J.js → config-TeIoyYYc.js} +2 -2
  100. package/dist/web/server/assets/context-B-XDf6Ym.js +12 -0
  101. package/dist/web/server/assets/context-BXGo5Vfi.js +12 -0
  102. package/dist/web/server/assets/context-DrkrIWun.js +47 -0
  103. package/dist/web/server/assets/{createServerRpc-CeKECg65.js → createServerRpc-pU-IQV2Y.js} +1 -1
  104. package/dist/web/server/assets/{createSsrRpc-ZBGxhl8t.js → createSsrRpc-DFsIAfFd.js} +1 -1
  105. package/dist/web/server/assets/{empty-plugin-adapters-DKUlnwwl.js → empty-plugin-adapters-Cq4--YW-.js} +1 -1
  106. package/dist/web/server/assets/{inbox-CkiSvD14.js → inbox-B3-TRsNI.js} +1 -1
  107. package/dist/web/server/assets/{inbox-Bxb3W04M.js → inbox-BardsGyy.js} +2 -2
  108. package/dist/web/server/assets/inbox-CUIyf9MT.js +131 -0
  109. package/dist/web/server/assets/login-Bx5LEyGP.js +118 -0
  110. package/dist/web/server/assets/login-CmWvxfTK.js +136 -0
  111. package/dist/web/server/assets/{mcp-BsFKEoXt.js → mcp-2pwT9HU8.js} +1 -1
  112. package/dist/web/server/assets/{mcp-BU_kKENi.js → mcp-BJjLIdP0.js} +105 -112
  113. package/dist/web/server/assets/{mcp-CKqwG4mt.js → mcp-DIWTogHM.js} +2 -2
  114. package/dist/web/server/assets/members-CCv17cjQ.js +46 -0
  115. package/dist/web/server/assets/members-CW5aBe81.js +12 -0
  116. package/dist/web/server/assets/members-VdPwD6CE.js +12 -0
  117. package/dist/web/server/assets/{memory-BaYnfm7K.js → memory-Dngc13Nw.js} +9 -9
  118. package/dist/web/server/assets/{memory-CQaqWnyM.js → memory-a8Kz57Kh.js} +22 -19
  119. package/dist/web/server/assets/{memory-Ns2-Z31p.js → memory-pZ4pZT7p.js} +6 -6
  120. package/dist/web/server/assets/policy-BYVXqsan.js +11 -0
  121. package/dist/web/server/assets/policy-Bb-vEgqg.js +40 -0
  122. package/dist/web/server/assets/policy-BcGELcc9.js +490 -0
  123. package/dist/web/server/assets/policy-C30AeFIb.js +21 -0
  124. package/dist/web/server/assets/router-DIdp8ZNt.js +504 -0
  125. package/dist/web/server/assets/{routes-C61gBiXa.js → routes-CXz4hTAr.js} +6 -6
  126. package/dist/web/server/assets/{routes-Ce2VWrU9.js → routes-Jb0zjKav.js} +16 -13
  127. package/dist/web/server/assets/{routes-V9URcp1v.js → routes-lIclH9Br.js} +2 -2
  128. package/dist/web/server/assets/services-B9yBWDX0.js +79 -0
  129. package/dist/web/server/assets/{services-Ccc5s2bS.js → services-C4szdhPx.js} +4 -4
  130. package/dist/web/server/assets/{services-DhRiNeq0.js → services-wG8I06oS.js} +1 -1
  131. package/dist/web/server/assets/skills-BZdqiDig.js +358 -0
  132. package/dist/web/server/assets/{skills-l2cyQ3zS.js → skills-C-UgkuCW.js} +2 -2
  133. package/dist/web/server/assets/{skills-CFIWVg32.js → skills-a9VSWHWq.js} +1 -1
  134. package/dist/web/server/assets/{start-CYDpZ6cb.js → start-WH8WzTL_.js} +1 -1
  135. package/dist/web/server/assets/team-policy-vPG01onj.js +180 -0
  136. package/dist/web/server/assets/teams-3im0oQnS.js +11 -0
  137. package/dist/web/server/assets/teams-CpQ0YgWf.js +112 -0
  138. package/dist/web/server/assets/teams-DEpQR2QA.js +14 -0
  139. package/dist/web/server/assets/teams-DqfrEoH6.js +36 -0
  140. package/dist/web/server/assets/teams-MjqgsmC3.js +12 -0
  141. package/dist/web/server/assets/teams-OIkHuxy1.js +12 -0
  142. package/dist/web/server/assets/teams-jBtvnk59.js +193 -0
  143. package/dist/web/server/assets/{telegram-DfAddLdv.js → telegram-7ub--6xz.js} +44 -56
  144. package/dist/web/server/assets/{telegram-T3l9KtiE.js → telegram-Bazhmpr4.js} +2 -2
  145. package/dist/web/server/assets/{telegram-BdaUIjvs.js → telegram-DNgCWebD.js} +1 -1
  146. package/dist/web/server/assets/{tokens-DdpnfV_Y.js → tokens-BnwFbV7T.js} +2 -2
  147. package/dist/web/server/assets/{tokens-BCz3PSoT.js → tokens-DPDMSN5O.js} +1 -1
  148. package/dist/web/server/assets/tokens-yyTSfBSN.js +186 -0
  149. package/dist/web/server/assets/{triggers-BzJG1nN5.js → triggers-BMpHsGIr.js} +5 -4
  150. package/dist/web/server/assets/{triggers-BcH_6PW1.js → triggers-C_0y6QV9.js} +1 -1
  151. package/dist/web/server/assets/{triggers-BcTTwMfy.js → triggers-Ca57_qym.js} +2 -2
  152. package/dist/web/server/assets/{welcome-CP4CZ9B6.js → welcome-IYHGurWx.js} +23 -15
  153. package/dist/web/server/assets/{wire-constants-Deb4NxBb.js → wire-constants-C8nBJcU3.js} +3 -3
  154. package/dist/web/server/server.js +126 -95
  155. package/dist/worker.js +185 -146
  156. package/dist/worker.js.map +1 -1
  157. package/package.json +8 -7
  158. package/dist/migrations/0002_profile_groups.sql +0 -38
  159. package/dist/migrations/0003_agent_telegram.sql +0 -40
  160. package/dist/migrations/0004_agent_mirror_mode.sql +0 -17
  161. package/dist/migrations/0005_group_topic_name_format.sql +0 -15
  162. package/dist/migrations/0006_telegram_acl.sql +0 -18
  163. package/dist/migrations/0007_mcp_servers.sql +0 -30
  164. package/dist/migrations/0008_seed_user_md.sql +0 -39
  165. package/dist/web/client/assets/AgentTabs-DioGqUVR.js +0 -1
  166. package/dist/web/client/assets/ConfigTabs-pY-V0Rie.js +0 -1
  167. package/dist/web/client/assets/FieldRow-CNKma5LE.js +0 -1
  168. package/dist/web/client/assets/MembersEditor-C6UpqDdV.js +0 -1
  169. package/dist/web/client/assets/SpawnTeamModal-BEkNCKXm.js +0 -1
  170. package/dist/web/client/assets/TemplatesTabs-UM04RMO9.js +0 -1
  171. package/dist/web/client/assets/_id-BNJapCT4.js +0 -1
  172. package/dist/web/client/assets/_id-CjGoV8Mr.js +0 -1
  173. package/dist/web/client/assets/_id-DehuCHUw.js +0 -1
  174. package/dist/web/client/assets/_id-Dz9fjcCM.js +0 -1
  175. package/dist/web/client/assets/agents-M6omAXcZ.js +0 -1
  176. package/dist/web/client/assets/config-DIuEc5bm.js +0 -3
  177. package/dist/web/client/assets/groups-DpE2d2zZ.js +0 -1
  178. package/dist/web/client/assets/inbox-BPnLsRNf.js +0 -1
  179. package/dist/web/client/assets/index-MAJuXnie.js +0 -12
  180. package/dist/web/client/assets/login-CawJX16E.js +0 -1
  181. package/dist/web/client/assets/mcp-DIrh9-v_.js +0 -1
  182. package/dist/web/client/assets/memory-BpHbdKsd.js +0 -1
  183. package/dist/web/client/assets/preload-helper-CvnapA2_.js +0 -1
  184. package/dist/web/client/assets/profile-groups-ByoKak0c.js +0 -1
  185. package/dist/web/client/assets/profiles-BEjv8LGo.js +0 -1
  186. package/dist/web/client/assets/routes-D2COHy7v.js +0 -1
  187. package/dist/web/client/assets/services-D212jSK_.js +0 -1
  188. package/dist/web/client/assets/skills-Da0MURjY.js +0 -1
  189. package/dist/web/client/assets/styles-BgE5bCHA.css +0 -2
  190. package/dist/web/client/assets/telegram-Czh2MdVm.js +0 -1
  191. package/dist/web/client/assets/tokens-E_JvO5JN.js +0 -1
  192. package/dist/web/client/assets/triggers-BBRZQOm7.js +0 -1
  193. package/dist/web/client/assets/welcome-Dn-zvmBE.js +0 -1
  194. package/dist/web/client/assets/wire-constants-BkT5-597.js +0 -1
  195. package/dist/web/server/assets/ConfigTabs-CyuxzesF.js +0 -41
  196. package/dist/web/server/assets/MembersEditor-BWQztvrX.js +0 -131
  197. package/dist/web/server/assets/Sidebar-DmEiewRN.js +0 -529
  198. package/dist/web/server/assets/SpawnTeamModal-dSN421k_.js +0 -107
  199. package/dist/web/server/assets/_id-BKev9H1p.js +0 -12
  200. package/dist/web/server/assets/_id-BNwlbWHP.js +0 -24
  201. package/dist/web/server/assets/_id-CRqqi8IE.js +0 -161
  202. package/dist/web/server/assets/_id-CXg-Blec.js +0 -367
  203. package/dist/web/server/assets/_tanstack-start-manifest_v-D9FLKShQ.js +0 -178
  204. package/dist/web/server/assets/agents-C7SBPN0M.js +0 -210
  205. package/dist/web/server/assets/groups-CbSwND2r.js +0 -12
  206. package/dist/web/server/assets/groups-CeRRlZaZ.js +0 -150
  207. package/dist/web/server/assets/groups-pk4CYSuf.js +0 -21
  208. package/dist/web/server/assets/inbox-DU27iHv_.js +0 -133
  209. package/dist/web/server/assets/login-CNznncgA.js +0 -58
  210. package/dist/web/server/assets/login-CQybKk7Y.js +0 -74
  211. package/dist/web/server/assets/profile-groups-CiU06yN1.js +0 -28
  212. package/dist/web/server/assets/profile-groups-D21MYoLM.js +0 -208
  213. package/dist/web/server/assets/profile-groups-aoJleXHP.js +0 -12
  214. package/dist/web/server/assets/router-BrDascdO.js +0 -460
  215. package/dist/web/server/assets/services-B91w2f-X.js +0 -94
  216. package/dist/web/server/assets/skills-D89ND2kR.js +0 -321
  217. package/dist/web/server/assets/tokens-CkKqrtk-.js +0 -193
@@ -1,107 +0,0 @@
1
- import { t as Button } from "./Button-Dsnw22OF.js";
2
- import { useState } from "react";
3
- import { jsx, jsxs } from "react/jsx-runtime";
4
- //#region src/components/SpawnTeamModal.tsx
5
- function SpawnTeamModal({ profileGroup, groups, onClose, onSpawned }) {
6
- const [groupSlug, setGroupSlug] = useState("");
7
- const [userMd, setUserMd] = useState("");
8
- const [err, setErr] = useState(null);
9
- const [submitting, setSubmitting] = useState(false);
10
- async function spawn() {
11
- setErr(null);
12
- if (!groupSlug.trim()) {
13
- setErr("target group slug is required");
14
- return;
15
- }
16
- setSubmitting(true);
17
- try {
18
- const body = { groupSlug: groupSlug.trim() };
19
- if (userMd) body.userMd = userMd;
20
- const res = await fetch(`/api/profile-groups/${profileGroup.id}/spawn`, {
21
- method: "POST",
22
- headers: { "content-type": "application/json" },
23
- body: JSON.stringify(body)
24
- });
25
- if (!res.ok) {
26
- const e = await res.json().catch(() => null);
27
- throw new Error(e?.error ?? res.statusText);
28
- }
29
- const result = await res.json();
30
- if (result.orphanAgentIds && result.orphanAgentIds.length > 0) alert(`Spawn completed with warnings: ${result.orphanAgentIds.length} orphan agent dir(s) left on disk.`);
31
- onSpawned(result.groupSlug);
32
- } catch (e) {
33
- setErr(e.message);
34
- } finally {
35
- setSubmitting(false);
36
- }
37
- }
38
- return /* @__PURE__ */ jsx("div", {
39
- role: "dialog",
40
- "aria-modal": "true",
41
- className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50",
42
- onClick: onClose,
43
- onKeyDown: (e) => {
44
- if (e.key === "Escape") onClose();
45
- },
46
- children: /* @__PURE__ */ jsxs("div", {
47
- className: "card w-full max-w-lg",
48
- onClick: (e) => e.stopPropagation(),
49
- onKeyDown: (e) => e.stopPropagation(),
50
- role: "document",
51
- children: [
52
- /* @__PURE__ */ jsxs("h3", { children: ["spawn team — ", profileGroup.name] }),
53
- err && /* @__PURE__ */ jsx("div", {
54
- className: "err",
55
- children: err
56
- }),
57
- /* @__PURE__ */ jsxs("p", {
58
- className: "muted",
59
- children: [
60
- "Spawns ",
61
- profileGroup.memberCount,
62
- " agent",
63
- profileGroup.memberCount === 1 ? "" : "s",
64
- " into the target group. If the group doesn't exist, it'll be created on the fly. Failures roll back the whole spawn."
65
- ]
66
- }),
67
- /* @__PURE__ */ jsxs("label", { children: [
68
- "target group slug",
69
- /* @__PURE__ */ jsx("input", {
70
- value: groupSlug,
71
- onChange: (e) => setGroupSlug(e.target.value),
72
- list: "existing-groups",
73
- required: true
74
- }),
75
- /* @__PURE__ */ jsx("datalist", {
76
- id: "existing-groups",
77
- children: groups.map((g) => /* @__PURE__ */ jsx("option", {
78
- value: g.id,
79
- children: g.name
80
- }, g.id))
81
- })
82
- ] }),
83
- /* @__PURE__ */ jsxs("label", { children: ["override USER.md (optional — only takes effect on a freshly-created target group)", /* @__PURE__ */ jsx("textarea", {
84
- rows: 3,
85
- value: userMd,
86
- onChange: (e) => setUserMd(e.target.value),
87
- className: "font-mono text-[0.88em] leading-[1.55]"
88
- })] }),
89
- /* @__PURE__ */ jsxs("div", {
90
- className: "mt-4 flex gap-2 justify-end",
91
- children: [/* @__PURE__ */ jsx(Button, {
92
- variant: "ghost",
93
- onClick: onClose,
94
- children: "cancel"
95
- }), /* @__PURE__ */ jsx(Button, {
96
- variant: "primary",
97
- onClick: spawn,
98
- disabled: submitting,
99
- children: submitting ? "spawning…" : "spawn team"
100
- })]
101
- })
102
- ]
103
- })
104
- });
105
- }
106
- //#endregion
107
- export { SpawnTeamModal as t };
@@ -1,12 +0,0 @@
1
- import { t as createServerFn } from "../server.js";
2
- import { t as createSsrRpc } from "./createSsrRpc-ZBGxhl8t.js";
3
- import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
4
- //#region src/routes/profile-groups/$id.tsx
5
- var $$splitComponentImporter = () => import("./_id-CRqqi8IE.js");
6
- var fetchDetail = createServerFn({ method: "POST" }).inputValidator((d) => d).handler(createSsrRpc("86dad0c33c97a6f0913d1f38e9b01ac4144f7d0970b45fdb3470e9bc9a78e0e0"));
7
- var Route = createFileRoute("/profile-groups/$id")({
8
- loader: ({ params }) => fetchDetail({ data: { id: params.id } }),
9
- component: lazyRouteComponent($$splitComponentImporter, "component")
10
- });
11
- //#endregion
12
- export { Route as t };
@@ -1,24 +0,0 @@
1
- import { t as createServerFn } from "../server.js";
2
- import { t as createServerRpc } from "./createServerRpc-CeKECg65.js";
3
- import { n as daemonClient } from "./daemon-client-2NRMzlTr.js";
4
- //#region src/routes/profile-groups/$id.tsx?tss-serverfn-split
5
- var fetchDetail_createServerFn_handler = createServerRpc({
6
- id: "86dad0c33c97a6f0913d1f38e9b01ac4144f7d0970b45fdb3470e9bc9a78e0e0",
7
- name: "fetchDetail",
8
- filename: "src/routes/profile-groups/$id.tsx"
9
- }, (opts) => fetchDetail.__executeServer(opts));
10
- var fetchDetail = createServerFn({ method: "POST" }).inputValidator((d) => d).handler(fetchDetail_createServerFn_handler, async ({ data }) => {
11
- const c = daemonClient();
12
- const [detail, profiles, models] = await Promise.all([
13
- c.get(`/api/profile-groups/${encodeURIComponent(data.id)}`),
14
- c.get("/api/profiles"),
15
- c.get("/api/config/available-models")
16
- ]);
17
- return {
18
- detail,
19
- profiles,
20
- modelGroups: models.groups
21
- };
22
- });
23
- //#endregion
24
- export { fetchDetail_createServerFn_handler };
@@ -1,161 +0,0 @@
1
- import { t as Route } from "./_id-BKev9H1p.js";
2
- import { t as Button } from "./Button-Dsnw22OF.js";
3
- import { t as MembersEditor } from "./MembersEditor-BWQztvrX.js";
4
- import { useState } from "react";
5
- import { useRouter } from "@tanstack/react-router";
6
- import { jsx, jsxs } from "react/jsx-runtime";
7
- //#region src/routes/profile-groups/$id.tsx?tsr-split=component
8
- function toDraft(m) {
9
- return {
10
- profileId: m.profileId,
11
- agentName: m.agentName,
12
- modelOverride: m.modelOverride,
13
- reasoningLevel: m.reasoningLevel
14
- };
15
- }
16
- function ProfileGroupDetailPage() {
17
- const { detail, profiles, modelGroups } = Route.useLoaderData();
18
- const router = useRouter();
19
- const { group } = detail;
20
- return /* @__PURE__ */ jsxs("div", { children: [
21
- /* @__PURE__ */ jsx("h1", { children: group.name }),
22
- /* @__PURE__ */ jsxs("p", {
23
- className: "muted",
24
- children: [
25
- /* @__PURE__ */ jsx("code", { children: group.id }),
26
- " · ",
27
- detail.members.length,
28
- " member",
29
- detail.members.length === 1 ? "" : "s"
30
- ]
31
- }),
32
- /* @__PURE__ */ jsx(BasicsCard, {
33
- group,
34
- onSaved: () => router.invalidate()
35
- }),
36
- /* @__PURE__ */ jsx(MembersCard, {
37
- groupId: group.id,
38
- initialMembers: detail.members.map(toDraft),
39
- profiles,
40
- modelGroups,
41
- onSaved: () => router.invalidate()
42
- })
43
- ] });
44
- }
45
- function BasicsCard({ group, onSaved }) {
46
- const [name, setName] = useState(group.name);
47
- const [userMd, setUserMd] = useState(group.userMd ?? "");
48
- const [err, setErr] = useState(null);
49
- const [saving, setSaving] = useState(false);
50
- async function save() {
51
- setErr(null);
52
- setSaving(true);
53
- try {
54
- const body = { name };
55
- body.userMd = userMd === "" ? null : userMd;
56
- const res = await fetch(`/api/profile-groups/${group.id}`, {
57
- method: "PATCH",
58
- headers: { "content-type": "application/json" },
59
- body: JSON.stringify(body)
60
- });
61
- if (!res.ok) {
62
- const e = await res.json().catch(() => null);
63
- throw new Error(e?.error ?? res.statusText);
64
- }
65
- onSaved();
66
- } catch (e) {
67
- setErr(e.message);
68
- } finally {
69
- setSaving(false);
70
- }
71
- }
72
- return /* @__PURE__ */ jsxs("div", {
73
- className: "card",
74
- children: [
75
- /* @__PURE__ */ jsx("h3", { children: "basics" }),
76
- err && /* @__PURE__ */ jsx("div", {
77
- className: "err",
78
- children: err
79
- }),
80
- /* @__PURE__ */ jsxs("label", { children: ["name", /* @__PURE__ */ jsx("input", {
81
- value: name,
82
- onChange: (e) => setName(e.target.value)
83
- })] }),
84
- /* @__PURE__ */ jsxs("label", { children: ["starter USER.md (seeded only into freshly-created target groups)", /* @__PURE__ */ jsx("textarea", {
85
- rows: 6,
86
- value: userMd,
87
- onChange: (e) => setUserMd(e.target.value),
88
- className: "font-mono text-[0.88em] leading-[1.55]"
89
- })] }),
90
- /* @__PURE__ */ jsx(Button, {
91
- variant: "primary",
92
- onClick: save,
93
- disabled: saving,
94
- children: saving ? "saving…" : "save basics"
95
- })
96
- ]
97
- });
98
- }
99
- function MembersCard({ groupId, initialMembers, profiles, modelGroups, onSaved }) {
100
- const [members, setMembers] = useState(initialMembers);
101
- const [err, setErr] = useState(null);
102
- const [saving, setSaving] = useState(false);
103
- const dirty = JSON.stringify(members) !== JSON.stringify(initialMembers);
104
- async function save() {
105
- setErr(null);
106
- setSaving(true);
107
- try {
108
- const res = await fetch(`/api/profile-groups/${groupId}/members`, {
109
- method: "PUT",
110
- headers: { "content-type": "application/json" },
111
- body: JSON.stringify({ members })
112
- });
113
- if (!res.ok) {
114
- const e = await res.json().catch(() => null);
115
- throw new Error(e?.error ?? res.statusText);
116
- }
117
- onSaved();
118
- } catch (e) {
119
- setErr(e.message);
120
- } finally {
121
- setSaving(false);
122
- }
123
- }
124
- return /* @__PURE__ */ jsxs("div", {
125
- className: "card",
126
- children: [
127
- /* @__PURE__ */ jsx("h3", { children: "members" }),
128
- err && /* @__PURE__ */ jsx("div", {
129
- className: "err",
130
- children: err
131
- }),
132
- /* @__PURE__ */ jsxs("p", {
133
- className: "muted",
134
- children: [
135
- "Each member becomes one agent at spawn time. Duplicate agent-names within a template are fine — the spawn op auto-suffixes collisions with ",
136
- /* @__PURE__ */ jsx("code", { children: "-2" }),
137
- ", ",
138
- /* @__PURE__ */ jsx("code", { children: "-3" }),
139
- ", …"
140
- ]
141
- }),
142
- /* @__PURE__ */ jsx(MembersEditor, {
143
- members,
144
- onChange: setMembers,
145
- profiles,
146
- modelGroups
147
- }),
148
- /* @__PURE__ */ jsx("div", {
149
- className: "mt-3",
150
- children: /* @__PURE__ */ jsx(Button, {
151
- variant: "primary",
152
- onClick: save,
153
- disabled: saving || !dirty,
154
- children: saving ? "saving…" : "save members"
155
- })
156
- })
157
- ]
158
- });
159
- }
160
- //#endregion
161
- export { ProfileGroupDetailPage as component };
@@ -1,367 +0,0 @@
1
- import { t as Route } from "./_id-CnQflrRv.js";
2
- import { t as Button } from "./Button-Dsnw22OF.js";
3
- import { useState } from "react";
4
- import { useRouter } from "@tanstack/react-router";
5
- import { jsx, jsxs } from "react/jsx-runtime";
6
- //#region src/routes/groups/$id/index.tsx?tsr-split=component
7
- function GroupDetailPage() {
8
- const { group, members, profileGroups } = Route.useLoaderData();
9
- const router = useRouter();
10
- const [userMd, setUserMd] = useState(group.userMd);
11
- const [busy, setBusy] = useState(false);
12
- const [err, setErr] = useState(null);
13
- const [savedAt, setSavedAt] = useState(null);
14
- async function save() {
15
- setBusy(true);
16
- setErr(null);
17
- try {
18
- const res = await fetch(`/api/groups/${encodeURIComponent(group.id)}/user-md`, {
19
- method: "PUT",
20
- headers: { "content-type": "application/json" },
21
- body: JSON.stringify({ userMd })
22
- });
23
- if (!res.ok) {
24
- const e = await res.json().catch(() => ({}));
25
- throw new Error(e.error ?? `${res.status} ${res.statusText}`);
26
- }
27
- setSavedAt(Date.now());
28
- await router.invalidate();
29
- } catch (e) {
30
- setErr(e.message);
31
- } finally {
32
- setBusy(false);
33
- }
34
- }
35
- return /* @__PURE__ */ jsxs("main", {
36
- className: "mx-auto max-w-3xl px-6 py-8",
37
- children: [
38
- /* @__PURE__ */ jsxs("h1", {
39
- className: "font-serif text-3xl text-foreground",
40
- children: [
41
- group.name,
42
- " ",
43
- /* @__PURE__ */ jsxs("span", {
44
- className: "text-muted-foreground text-base",
45
- children: [
46
- "(",
47
- group.id,
48
- ")"
49
- ]
50
- })
51
- ]
52
- }),
53
- /* @__PURE__ */ jsxs("p", {
54
- className: "text-muted-foreground text-sm mb-6 mt-1",
55
- children: [
56
- /* @__PURE__ */ jsx("code", {
57
- className: "font-mono",
58
- children: group.path
59
- }),
60
- " · ",
61
- members.length,
62
- " ",
63
- "member",
64
- members.length === 1 ? "" : "s",
65
- " ·",
66
- " ",
67
- /* @__PURE__ */ jsx("a", {
68
- href: `/groups/${encodeURIComponent(group.id)}/memory`,
69
- className: "text-primary underline",
70
- children: "shared memory →"
71
- })
72
- ]
73
- }),
74
- /* @__PURE__ */ jsxs("section", {
75
- className: "rounded-lg border bg-card p-5 mb-6",
76
- children: [
77
- /* @__PURE__ */ jsx("h3", {
78
- className: "font-serif text-xl mb-1",
79
- children: "USER.md"
80
- }),
81
- /* @__PURE__ */ jsx("p", {
82
- className: "text-muted-foreground text-sm mb-3",
83
- children: "Read-only context about the human, injected into every member agent's system prompt. 12 KB cap. Agents cannot edit this file — only you can."
84
- }),
85
- /* @__PURE__ */ jsx("textarea", {
86
- value: userMd,
87
- onChange: (e) => setUserMd(e.target.value),
88
- rows: 16,
89
- className: "w-full rounded-md border bg-background px-3 py-2 font-mono text-sm outline-none focus:ring-2 focus:ring-ring/30",
90
- placeholder: "What the agent should know about you in this group context…"
91
- }),
92
- /* @__PURE__ */ jsxs("div", {
93
- className: "flex items-center gap-3 mt-3",
94
- children: [
95
- /* @__PURE__ */ jsx(Button, {
96
- variant: "primary",
97
- onClick: save,
98
- disabled: busy || userMd === group.userMd,
99
- children: busy ? "saving…" : "save"
100
- }),
101
- /* @__PURE__ */ jsxs("span", {
102
- className: "text-xs text-muted-foreground",
103
- children: [userMd.length, " / 12000 chars"]
104
- }),
105
- savedAt && /* @__PURE__ */ jsx("span", {
106
- className: "text-xs text-emerald-700",
107
- children: "✓ saved"
108
- }),
109
- err && /* @__PURE__ */ jsx("span", {
110
- className: "text-xs text-rose-700",
111
- children: err
112
- })
113
- ]
114
- })
115
- ]
116
- }),
117
- /* @__PURE__ */ jsx(TopicNameFormatCard, {
118
- group,
119
- sampleAgent: members[0]?.name ?? "researcher",
120
- onSaved: () => router.invalidate()
121
- }),
122
- members.length === 0 && /* @__PURE__ */ jsx(SpawnFromTemplateCard, {
123
- groupId: group.id,
124
- profileGroups,
125
- onSpawned: () => router.invalidate()
126
- }),
127
- /* @__PURE__ */ jsxs("section", {
128
- className: "rounded-lg border bg-card p-5",
129
- children: [/* @__PURE__ */ jsx("h3", {
130
- className: "font-serif text-xl mb-3",
131
- children: "members"
132
- }), members.length === 0 ? /* @__PURE__ */ jsx("p", {
133
- className: "text-muted-foreground text-sm",
134
- children: "No agents in this group yet."
135
- }) : /* @__PURE__ */ jsxs("table", {
136
- className: "w-full text-sm",
137
- children: [/* @__PURE__ */ jsx("thead", {
138
- className: "text-left text-muted-foreground border-b",
139
- children: /* @__PURE__ */ jsxs("tr", { children: [
140
- /* @__PURE__ */ jsx("th", {
141
- className: "py-2",
142
- children: "name"
143
- }),
144
- /* @__PURE__ */ jsx("th", { children: "status" }),
145
- /* @__PURE__ */ jsx("th", { children: "profile" }),
146
- /* @__PURE__ */ jsx("th", {})
147
- ] })
148
- }), /* @__PURE__ */ jsx("tbody", { children: members.map((m) => /* @__PURE__ */ jsxs("tr", {
149
- className: "border-b last:border-0",
150
- children: [
151
- /* @__PURE__ */ jsx("td", {
152
- className: "py-2",
153
- children: /* @__PURE__ */ jsx("a", {
154
- href: `/agents/${m.id}`,
155
- className: "text-primary underline",
156
- children: m.name
157
- })
158
- }),
159
- /* @__PURE__ */ jsx("td", { children: m.status }),
160
- /* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsx("code", {
161
- className: "font-mono text-xs",
162
- children: m.profileId
163
- }) }),
164
- /* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsxs("code", {
165
- className: "font-mono text-xs text-muted-foreground",
166
- children: [m.id.slice(0, 8), "…"]
167
- }) })
168
- ]
169
- }, m.id)) })]
170
- })]
171
- })
172
- ]
173
- });
174
- }
175
- function TopicNameFormatCard({ group, sampleAgent, onSaved }) {
176
- const [format, setFormat] = useState(group.telegramTopicNameFormat ?? "");
177
- const [busy, setBusy] = useState(false);
178
- const [err, setErr] = useState(null);
179
- const [savedAt, setSavedAt] = useState(null);
180
- const trimmed = format.trim();
181
- const preview = trimmed ? trimmed.replaceAll("{agent.name}", sampleAgent).replaceAll("{group.name}", group.name).replaceAll("{group.slug}", group.id) : group.id === "default" ? sampleAgent : `${group.id} › ${sampleAgent}`;
182
- const dirty = (group.telegramTopicNameFormat ?? "") !== format;
183
- async function save(clear) {
184
- setBusy(true);
185
- setErr(null);
186
- try {
187
- const res = await fetch(`/api/groups/${encodeURIComponent(group.id)}/topic-format`, {
188
- method: "PUT",
189
- headers: { "content-type": "application/json" },
190
- body: JSON.stringify({ format: clear ? null : format })
191
- });
192
- if (!res.ok) {
193
- const e = await res.json().catch(() => ({}));
194
- throw new Error(e.error ?? `${res.status} ${res.statusText}`);
195
- }
196
- if (clear) setFormat("");
197
- setSavedAt(Date.now());
198
- onSaved();
199
- } catch (e) {
200
- setErr(e.message);
201
- } finally {
202
- setBusy(false);
203
- }
204
- }
205
- return /* @__PURE__ */ jsxs("section", {
206
- className: "rounded-lg border bg-card p-5 mb-6",
207
- children: [
208
- /* @__PURE__ */ jsx("h3", {
209
- className: "font-serif text-xl mb-1",
210
- children: "Telegram topic names"
211
- }),
212
- /* @__PURE__ */ jsxs("p", {
213
- className: "text-muted-foreground text-sm mb-3",
214
- children: [
215
- "Template for this group's Telegram forum-topic titles. Leave empty for built-in naming. Tokens: ",
216
- /* @__PURE__ */ jsx("code", {
217
- className: "font-mono",
218
- children: "{agent.name}"
219
- }),
220
- " ",
221
- /* @__PURE__ */ jsx("code", {
222
- className: "font-mono",
223
- children: "{group.name}"
224
- }),
225
- " ",
226
- /* @__PURE__ */ jsx("code", {
227
- className: "font-mono",
228
- children: "{group.slug}"
229
- }),
230
- " — must include",
231
- " ",
232
- /* @__PURE__ */ jsx("code", {
233
- className: "font-mono",
234
- children: "{agent.name}"
235
- }),
236
- ". Saving renames existing topics that you haven't manually renamed in Telegram."
237
- ]
238
- }),
239
- /* @__PURE__ */ jsx("input", {
240
- value: format,
241
- onChange: (e) => setFormat(e.target.value),
242
- placeholder: "{group.name} / {agent.name}",
243
- className: "w-full rounded-md border bg-background px-3 py-2 font-mono text-sm outline-none focus:ring-2 focus:ring-ring/30"
244
- }),
245
- /* @__PURE__ */ jsxs("p", {
246
- className: "text-xs text-muted-foreground mt-2",
247
- children: ["preview: ", /* @__PURE__ */ jsx("span", {
248
- className: "font-mono text-foreground",
249
- children: preview
250
- })]
251
- }),
252
- /* @__PURE__ */ jsxs("div", {
253
- className: "flex items-center gap-3 mt-3",
254
- children: [
255
- /* @__PURE__ */ jsx(Button, {
256
- variant: "primary",
257
- onClick: () => save(false),
258
- disabled: busy || !dirty || trimmed.length === 0,
259
- children: busy ? "saving…" : "save"
260
- }),
261
- group.telegramTopicNameFormat && /* @__PURE__ */ jsx(Button, {
262
- variant: "ghost",
263
- onClick: () => save(true),
264
- disabled: busy,
265
- children: "clear"
266
- }),
267
- savedAt && /* @__PURE__ */ jsx("span", {
268
- className: "text-xs text-emerald-700",
269
- children: "✓ saved"
270
- }),
271
- err && /* @__PURE__ */ jsx("span", {
272
- className: "text-xs text-rose-700",
273
- children: err
274
- })
275
- ]
276
- })
277
- ]
278
- });
279
- }
280
- function SpawnFromTemplateCard({ groupId, profileGroups, onSpawned }) {
281
- const eligible = profileGroups.filter((g) => g.memberCount > 0);
282
- const [selected, setSelected] = useState(eligible[0]?.id ?? "");
283
- const [busy, setBusy] = useState(false);
284
- const [err, setErr] = useState(null);
285
- async function spawn() {
286
- if (!selected) return;
287
- setBusy(true);
288
- setErr(null);
289
- try {
290
- const res = await fetch(`/api/profile-groups/${encodeURIComponent(selected)}/spawn`, {
291
- method: "POST",
292
- headers: { "content-type": "application/json" },
293
- body: JSON.stringify({ groupSlug: groupId })
294
- });
295
- if (!res.ok) {
296
- const e = await res.json().catch(() => ({}));
297
- throw new Error(e.error ?? `${res.status} ${res.statusText}`);
298
- }
299
- const result = await res.json();
300
- if (result.orphanAgentIds && result.orphanAgentIds.length > 0) alert(`Spawn completed with warnings: ${result.orphanAgentIds.length} orphan agent dir(s) left on disk.`);
301
- onSpawned();
302
- } catch (e) {
303
- setErr(e.message);
304
- } finally {
305
- setBusy(false);
306
- }
307
- }
308
- return /* @__PURE__ */ jsxs("section", {
309
- className: "rounded-lg border bg-card p-5 mb-6",
310
- children: [
311
- /* @__PURE__ */ jsx("h3", {
312
- className: "font-serif text-xl mb-1",
313
- children: "spawn a team into this group"
314
- }),
315
- /* @__PURE__ */ jsx("p", {
316
- className: "text-muted-foreground text-sm mb-3",
317
- children: "This group is empty. Pick a profile group template to spawn its entire roster into it in one transactional call."
318
- }),
319
- eligible.length === 0 ? /* @__PURE__ */ jsxs("p", {
320
- className: "text-muted-foreground text-sm",
321
- children: [
322
- "No profile groups with members yet. Build one on",
323
- " ",
324
- /* @__PURE__ */ jsx("a", {
325
- href: "/profile-groups",
326
- className: "text-primary underline",
327
- children: "/profile-groups"
328
- }),
329
- " ",
330
- "first."
331
- ]
332
- }) : /* @__PURE__ */ jsxs("div", {
333
- className: "flex items-center gap-3",
334
- children: [
335
- /* @__PURE__ */ jsx("select", {
336
- value: selected,
337
- onChange: (e) => setSelected(e.target.value),
338
- className: "rounded-md border bg-background px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-ring/30",
339
- children: eligible.map((g) => /* @__PURE__ */ jsxs("option", {
340
- value: g.id,
341
- children: [
342
- g.name,
343
- " (",
344
- g.memberCount,
345
- " member",
346
- g.memberCount === 1 ? "" : "s",
347
- ")"
348
- ]
349
- }, g.id))
350
- }),
351
- /* @__PURE__ */ jsx(Button, {
352
- variant: "primary",
353
- onClick: spawn,
354
- disabled: busy || !selected,
355
- children: busy ? "spawning…" : "spawn team"
356
- }),
357
- err && /* @__PURE__ */ jsx("span", {
358
- className: "text-xs text-rose-700",
359
- children: err
360
- })
361
- ]
362
- })
363
- ]
364
- });
365
- }
366
- //#endregion
367
- export { GroupDetailPage as component };