bazilion 0.7.0 → 0.9.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 (166) hide show
  1. package/README.md +47 -5
  2. package/dist/cli.js +1257 -638
  3. package/dist/cli.js.map +1 -1
  4. package/dist/daemon.js +5334 -1594
  5. package/dist/daemon.js.map +1 -1
  6. package/dist/migrations/0001_init.sql +318 -88
  7. package/dist/web/client/assets/{FieldRow-CNKma5LE.js → FieldRow-DmwAFfbF.js} +1 -1
  8. package/dist/web/client/assets/ProductionTeamPolicyEditor-1a5jQqUB.js +7 -0
  9. package/dist/web/client/assets/ProductionTeamPolicyEditor-DLioOiRN.css +1 -0
  10. package/dist/web/client/assets/ProfileCommunicationEditor-D1OZ8WE5.js +1 -0
  11. package/dist/web/client/assets/RecoveryState-QfMSuwy3.js +1 -0
  12. package/dist/web/client/assets/TeamTabs-BViZ4sti.js +1 -0
  13. package/dist/web/client/assets/TemplatesTabs-DVcY9pMD.js +1 -0
  14. package/dist/web/client/assets/_id-8P7brhGy.js +1 -0
  15. package/dist/web/client/assets/_id-C3o3MHq8.js +1 -0
  16. package/dist/web/client/assets/_id-DGRrSF1e.js +1 -0
  17. package/dist/web/client/assets/_id-DGyKURCp.js +1 -0
  18. package/dist/web/client/assets/_id-KnJe-aW9.js +1 -0
  19. package/dist/web/client/assets/activity-DJuhhQCb.js +1 -0
  20. package/dist/web/client/assets/activity-WWvJSo4t.js +1 -0
  21. package/dist/web/client/assets/agents-C32T1voV.js +1 -0
  22. package/dist/web/client/assets/agents-nH4m4gZ1.js +1 -0
  23. package/dist/web/client/assets/approvals-DGi0PSx8.js +1 -0
  24. package/dist/web/client/assets/approvals-l8jIZjqz.js +1 -0
  25. package/dist/web/client/assets/{config-BSAVT-17.js → config-C7wvi1nR.js} +2 -2
  26. package/dist/web/client/assets/context-BEGWE3RC.js +1 -0
  27. package/dist/web/client/assets/inbox--4aBaAgG.js +1 -0
  28. package/dist/web/client/assets/index-BCXoh1c8.js +12 -0
  29. package/dist/web/client/assets/{login-D8lNr2SX.js → login-Bk2wwIHQ.js} +1 -1
  30. package/dist/web/client/assets/{mcp-BLnngDsj.js → mcp-vM7xgh9e.js} +1 -1
  31. package/dist/web/client/assets/members-cPKfnrSL.js +1 -0
  32. package/dist/web/client/assets/memory-BOcsaemD.js +1 -0
  33. package/dist/web/client/assets/policy-BGLCJYvS.js +1 -0
  34. package/dist/web/client/assets/policy-K4hIbbIN.js +1 -0
  35. package/dist/web/client/assets/{preload-helper-CvnapA2_.js → preload-helper-eOOCz1Fu.js} +1 -1
  36. package/dist/web/client/assets/routes-DnrP3dwv.js +1 -0
  37. package/dist/web/client/assets/services-C2_O3ifw.js +1 -0
  38. package/dist/web/client/assets/skills-B__fLZjx.js +1 -0
  39. package/dist/web/client/assets/styles-Dn24-ZvP.css +2 -0
  40. package/dist/web/client/assets/team-policy-BdX340m4.js +1 -0
  41. package/dist/web/client/assets/teams-CSNyLz3l.js +1 -0
  42. package/dist/web/client/assets/teams-DZMB4_iw.js +1 -0
  43. package/dist/web/client/assets/teams-rpaYKNIb.js +1 -0
  44. package/dist/web/client/assets/telegram-B1O4Ko0V.js +1 -0
  45. package/dist/web/client/assets/{tokens-D2_O9ARe.js → tokens-D7FH9VgA.js} +1 -1
  46. package/dist/web/client/assets/triggers-3PLy2_Fo.js +1 -0
  47. package/dist/web/client/assets/welcome-B-QQobzq.js +1 -0
  48. package/dist/web/client/assets/{ChatPane-DzEgOEqS.js → wire-constants-BY9Q9Z7d.js} +4 -4
  49. package/dist/web/server/assets/{ChatPane-BvpswYvF.js → ChatPane-Dh3qxzdb.js} +23 -12
  50. package/dist/web/server/assets/ProductionTeamPolicyEditor-Bke5doyl.js +1009 -0
  51. package/dist/web/server/assets/ProfileCommunicationEditor-C2RU-2QB.js +107 -0
  52. package/dist/web/server/assets/RecoveryState-B2SG-mrY.js +37 -0
  53. package/dist/web/server/assets/{Sidebar-DmEiewRN.js → Sidebar-CGmtCnYU.js} +372 -48
  54. package/dist/web/server/assets/TeamTabs-BPxDBfqy.js +50 -0
  55. package/dist/web/server/assets/{TemplatesTabs---7h5GYa.js → TemplatesTabs-zf4YhStd.js} +6 -6
  56. package/dist/web/server/assets/{_id-CXg-Blec.js → _id-5lLzLwcv.js} +52 -40
  57. package/dist/web/server/assets/_id-A8Xiv6Lc.js +11 -0
  58. package/dist/web/server/assets/{_id-BqnDy_Ca.js → _id-B04VaQlh.js} +6 -5
  59. package/dist/web/server/assets/{_id-D0ytyXGY.js → _id-B6g9wmPR.js} +167 -31
  60. package/dist/web/server/assets/_id-ButXHnRH.js +14 -0
  61. package/dist/web/server/assets/_id-C4AOhstq.js +44 -0
  62. package/dist/web/server/assets/{_id-DDixKEud.js → _id-CCHA0gdR.js} +72 -12
  63. package/dist/web/server/assets/{_id-D_Ew11ED.js → _id-CUWgTqMS.js} +8 -8
  64. package/dist/web/server/assets/_id-DJkzwHjM.js +42 -0
  65. package/dist/web/server/assets/{_id-CnQflrRv.js → _id-DdC9wpNN.js} +5 -5
  66. package/dist/web/server/assets/{_id-81NrHA5d.js → _id-DkFgCIb-.js} +9 -1
  67. package/dist/web/server/assets/{_id-D8duqgd5.js → _id-_nFwi9gD.js} +5 -4
  68. package/dist/web/server/assets/{_id-Sjw0zhA6.js → _id-fpFQ9_Ya.js} +4 -4
  69. package/dist/web/server/assets/_tanstack-start-manifest_v-Div-TukY.js +241 -0
  70. package/dist/web/server/assets/activity-C2ZKg1Q9.js +170 -0
  71. package/dist/web/server/assets/activity-CGCf8BQf.js +11 -0
  72. package/dist/web/server/assets/activity-DedraoFj.js +14 -0
  73. package/dist/web/server/assets/activity-GPx8NCeB.js +12 -0
  74. package/dist/web/server/assets/{profiles-CZ5NkmVw.js → agents-B8kinIPW.js} +4 -4
  75. package/dist/web/server/assets/{agents-k5QURC4I.js → agents-BR2qXlXF.js} +4 -4
  76. package/dist/web/server/assets/{agents-ChcAJUI5.js → agents-Bp1nsVs2.js} +1 -1
  77. package/dist/web/server/assets/{profiles-LxcC_L6n.js → agents-CUQmWhTp.js} +36 -10
  78. package/dist/web/server/assets/{agents-C7SBPN0M.js → agents-DU9Hqs58.js} +51 -12
  79. package/dist/web/server/assets/{profiles-C6a3RKgu.js → agents-LHowEI6S.js} +4 -4
  80. package/dist/web/server/assets/approvals-CbFXFvG8.js +11 -0
  81. package/dist/web/server/assets/approvals-DHgARzd8.js +242 -0
  82. package/dist/web/server/assets/approvals-Dw2LJoSA.js +14 -0
  83. package/dist/web/server/assets/approvals-VPc0YpLN.js +12 -0
  84. package/dist/web/server/assets/{auth-DzRAMwVt.js → auth-l-Vf8wlu.js} +5 -1
  85. package/dist/web/server/assets/{config-CdVjqjin.js → config-BvKctDOX.js} +4 -4
  86. package/dist/web/server/assets/{config-Bq3o924J.js → config-QvHaxGlP.js} +1 -1
  87. package/dist/web/server/assets/context-5lrf2ame.js +12 -0
  88. package/dist/web/server/assets/context-CEr4-xiA.js +49 -0
  89. package/dist/web/server/assets/context-D3Egm-vY.js +12 -0
  90. package/dist/web/server/assets/members-40DxRdVj.js +48 -0
  91. package/dist/web/server/assets/members-DlGBKZNl.js +12 -0
  92. package/dist/web/server/assets/members-ksELRsyk.js +12 -0
  93. package/dist/web/server/assets/{memory-Ns2-Z31p.js → memory-B5moRnnp.js} +5 -5
  94. package/dist/web/server/assets/{memory-BaYnfm7K.js → memory-CO0jKGzJ.js} +8 -8
  95. package/dist/web/server/assets/memory-CiTl4cN9.js +289 -0
  96. package/dist/web/server/assets/policy-BYVXqsan.js +11 -0
  97. package/dist/web/server/assets/policy-DNcGZLOB.js +21 -0
  98. package/dist/web/server/assets/policy-Dr55y-Mh.js +496 -0
  99. package/dist/web/server/assets/policy-Dxs78_GO.js +40 -0
  100. package/dist/web/server/assets/{router-BpBZgRwn.js → router-_izWQUeG.js} +156 -101
  101. package/dist/web/server/assets/{routes-Ce2VWrU9.js → routes-BSSKp3Rv.js} +4 -4
  102. package/dist/web/server/assets/{routes-C61gBiXa.js → routes-BrTOoeth.js} +5 -5
  103. package/dist/web/server/assets/{routes-V9URcp1v.js → routes-DOj6ljcm.js} +1 -1
  104. package/dist/web/server/assets/{services-B91w2f-X.js → services-CHe4ihJk.js} +11 -11
  105. package/dist/web/server/assets/{services-Ccc5s2bS.js → services-Pv_V88VA.js} +3 -3
  106. package/dist/web/server/assets/{skills-dLyBZb3B.js → skills-D89ND2kR.js} +67 -7
  107. package/dist/web/server/assets/{skills-CpsyR_WA.js → skills-l2cyQ3zS.js} +1 -1
  108. package/dist/web/server/assets/{start-CYDpZ6cb.js → start-DlHq0RaQ.js} +1 -1
  109. package/dist/web/server/assets/team-policy-Csvc5EDd.js +180 -0
  110. package/dist/web/server/assets/teams-35Oprf6e.js +14 -0
  111. package/dist/web/server/assets/teams-3im0oQnS.js +11 -0
  112. package/dist/web/server/assets/teams-B5IF65p2.js +12 -0
  113. package/dist/web/server/assets/teams-B9O-WDH5.js +108 -0
  114. package/dist/web/server/assets/teams-DFkN7ic7.js +36 -0
  115. package/dist/web/server/assets/teams-DH1CvWmT.js +12 -0
  116. package/dist/web/server/assets/teams-zcm9XaQU.js +174 -0
  117. package/dist/web/server/assets/{telegram-DfAddLdv.js → telegram-C9sQFwWj.js} +7 -7
  118. package/dist/web/server/assets/{telegram-T3l9KtiE.js → telegram-mTnJCOmn.js} +1 -1
  119. package/dist/web/server/assets/{welcome-CP4CZ9B6.js → welcome-CDGE2Sdk.js} +2 -2
  120. package/dist/web/server/assets/{wire-constants-Deb4NxBb.js → wire-constants-C8nBJcU3.js} +3 -3
  121. package/dist/web/server/server.js +64 -42
  122. package/dist/worker.js +180 -128
  123. package/dist/worker.js.map +1 -1
  124. package/package.json +7 -7
  125. package/dist/migrations/0002_profile_groups.sql +0 -38
  126. package/dist/migrations/0003_agent_telegram.sql +0 -40
  127. package/dist/migrations/0004_agent_mirror_mode.sql +0 -17
  128. package/dist/migrations/0005_group_topic_name_format.sql +0 -15
  129. package/dist/migrations/0006_telegram_acl.sql +0 -18
  130. package/dist/migrations/0007_mcp_servers.sql +0 -30
  131. package/dist/migrations/0008_seed_user_md.sql +0 -39
  132. package/dist/web/client/assets/MembersEditor-C6UpqDdV.js +0 -1
  133. package/dist/web/client/assets/SpawnTeamModal-BEkNCKXm.js +0 -1
  134. package/dist/web/client/assets/TemplatesTabs-Da7mg9FI.js +0 -1
  135. package/dist/web/client/assets/_id-BdKmo0gb.js +0 -1
  136. package/dist/web/client/assets/_id-LT6Ejjr0.js +0 -1
  137. package/dist/web/client/assets/_id-MR2XjWh0.js +0 -1
  138. package/dist/web/client/assets/_id-_6jIt0_-.js +0 -1
  139. package/dist/web/client/assets/agents-0arKbVYG.js +0 -1
  140. package/dist/web/client/assets/groups-BqTkhHes.js +0 -1
  141. package/dist/web/client/assets/inbox-ozoCXzr5.js +0 -1
  142. package/dist/web/client/assets/index-iayCEuU2.js +0 -12
  143. package/dist/web/client/assets/memory-D1GQjEvN.js +0 -1
  144. package/dist/web/client/assets/profile-groups-C2yJPTaE.js +0 -1
  145. package/dist/web/client/assets/profiles-BV7AAZjj.js +0 -1
  146. package/dist/web/client/assets/routes-DSHQLA7K.js +0 -1
  147. package/dist/web/client/assets/services-BbCJe1Du.js +0 -1
  148. package/dist/web/client/assets/skills-C6czKR5I.js +0 -1
  149. package/dist/web/client/assets/styles-C06axZZk.css +0 -2
  150. package/dist/web/client/assets/telegram-gE4j8gte.js +0 -1
  151. package/dist/web/client/assets/triggers-WljnfEfJ.js +0 -1
  152. package/dist/web/client/assets/welcome-Dn-zvmBE.js +0 -1
  153. package/dist/web/client/assets/wire-constants-BkT5-597.js +0 -1
  154. package/dist/web/server/assets/MembersEditor-BWQztvrX.js +0 -131
  155. package/dist/web/server/assets/SpawnTeamModal-dSN421k_.js +0 -107
  156. package/dist/web/server/assets/_id-BKev9H1p.js +0 -12
  157. package/dist/web/server/assets/_id-BNwlbWHP.js +0 -24
  158. package/dist/web/server/assets/_id-CRqqi8IE.js +0 -161
  159. package/dist/web/server/assets/_tanstack-start-manifest_v-DBlFH2gg.js +0 -178
  160. package/dist/web/server/assets/groups-CbSwND2r.js +0 -12
  161. package/dist/web/server/assets/groups-CeRRlZaZ.js +0 -150
  162. package/dist/web/server/assets/groups-pk4CYSuf.js +0 -21
  163. package/dist/web/server/assets/memory-CQaqWnyM.js +0 -284
  164. package/dist/web/server/assets/profile-groups-CiU06yN1.js +0 -28
  165. package/dist/web/server/assets/profile-groups-D21MYoLM.js +0 -208
  166. package/dist/web/server/assets/profile-groups-aoJleXHP.js +0 -12
@@ -1,25 +1,25 @@
1
1
  import { t as createServerFn } from "../server.js";
2
2
  import { t as createServerRpc } from "./createServerRpc-CeKECg65.js";
3
3
  import { n as daemonClient, r as ApiClientError } from "./daemon-client-2NRMzlTr.js";
4
- //#region src/routes/groups/$id/memory.tsx?tss-serverfn-split
4
+ //#region src/routes/teams/$id/memory.tsx?tss-serverfn-split
5
5
  var fetchMemory_createServerFn_handler = createServerRpc({
6
- id: "457cdd4932d22a1e823c50781026fbabb2e9d4d6b5ac9a763bb74500f2b02538",
6
+ id: "b96a98e3ed6c8a3ab5f6a4ed8458e93da753ffd74e2912ef1724bb6e58030cb5",
7
7
  name: "fetchMemory",
8
- filename: "src/routes/groups/$id/memory.tsx"
8
+ filename: "src/routes/teams/$id/memory.tsx"
9
9
  }, (opts) => fetchMemory.__executeServer(opts));
10
10
  var fetchMemory = createServerFn({ method: "POST" }).inputValidator((d) => d).handler(fetchMemory_createServerFn_handler, async ({ data }) => {
11
11
  const c = daemonClient();
12
- let group;
12
+ let team;
13
13
  try {
14
- group = await c.get(`/api/groups/${encodeURIComponent(data.id)}`);
14
+ team = await c.get(`/api/teams/${encodeURIComponent(data.id)}`);
15
15
  } catch (err) {
16
16
  if (err instanceof ApiClientError && err.status === 404) return null;
17
17
  throw err;
18
18
  }
19
- const [entries, agents] = await Promise.all([c.get(`/api/groups/${encodeURIComponent(group.id)}/memory`), c.get("/api/agents?includeArchived=true")]);
20
- const memberCount = agents.filter((a) => a.groupId === group.id).length;
19
+ const [entries, agents] = await Promise.all([c.get(`/api/teams/${encodeURIComponent(team.id)}/memory`), c.get("/api/agents?includeArchived=true")]);
20
+ const memberCount = agents.filter((a) => a.teamId === team.id).length;
21
21
  return {
22
- group,
22
+ team,
23
23
  memberCount,
24
24
  entries
25
25
  };
@@ -0,0 +1,289 @@
1
+ import { t as Route } from "./memory-B5moRnnp.js";
2
+ import { t as TeamTabs } from "./TeamTabs-BPxDBfqy.js";
3
+ import { useEffect, useRef, useState } from "react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ //#region src/routes/teams/$id/memory.tsx?tsr-split=component
6
+ function encodeKey(key) {
7
+ return key.split("/").map(encodeURIComponent).join("/");
8
+ }
9
+ function MemoryPage() {
10
+ const { team, memberCount, entries: initialEntries } = Route.useLoaderData();
11
+ const teamId = team.id;
12
+ const [rows, setRows] = useState(() => initialEntries.map((e) => ({
13
+ key: e.key,
14
+ preview: e.content.slice(0, 80)
15
+ })));
16
+ const [isSearch, setIsSearch] = useState(false);
17
+ const [query, setQuery] = useState("");
18
+ const [selectedKey, setSelectedKey] = useState(null);
19
+ const [mode, setMode] = useState("none");
20
+ const [keyInput, setKeyInput] = useState("");
21
+ const [content, setContent] = useState("");
22
+ const [status, setStatus] = useState(null);
23
+ const searchTimer = useRef(null);
24
+ async function loadList(q) {
25
+ try {
26
+ const url = q.trim().length > 0 ? `/api/teams/${encodeURIComponent(teamId)}/memory/search?q=${encodeURIComponent(q)}&limit=50` : `/api/teams/${encodeURIComponent(teamId)}/memory`;
27
+ const res = await fetch(url);
28
+ if (!res.ok) {
29
+ const body = await res.json().catch(() => null);
30
+ throw new Error(body?.error ?? res.statusText);
31
+ }
32
+ const data = await res.json();
33
+ if (q.trim().length > 0) {
34
+ setRows(data.map((h) => ({
35
+ key: h.key,
36
+ preview: h.snippet,
37
+ score: h.score
38
+ })));
39
+ setIsSearch(true);
40
+ } else {
41
+ setRows(data.map((e) => ({
42
+ key: e.key,
43
+ preview: e.content.slice(0, 80)
44
+ })));
45
+ setIsSearch(false);
46
+ }
47
+ } catch (err) {
48
+ setStatus({
49
+ msg: `error: ${err.message}`,
50
+ kind: "error"
51
+ });
52
+ }
53
+ }
54
+ useEffect(() => {
55
+ if (searchTimer.current) clearTimeout(searchTimer.current);
56
+ searchTimer.current = setTimeout(() => {
57
+ loadList(query);
58
+ }, 200);
59
+ return () => {
60
+ if (searchTimer.current) clearTimeout(searchTimer.current);
61
+ };
62
+ }, [query]);
63
+ async function openEntry(key) {
64
+ setSelectedKey(key);
65
+ setMode("edit");
66
+ setStatus({
67
+ msg: "loading…",
68
+ kind: "info"
69
+ });
70
+ try {
71
+ const res = await fetch(`/api/teams/${encodeURIComponent(teamId)}/memory/${encodeKey(key)}`);
72
+ if (!res.ok) {
73
+ const body = await res.json().catch(() => null);
74
+ throw new Error(body?.error ?? res.statusText);
75
+ }
76
+ const entry = await res.json();
77
+ setKeyInput(entry.key);
78
+ setContent(entry.content ?? "");
79
+ setStatus({
80
+ msg: `loaded ${entry.key}`,
81
+ kind: "info"
82
+ });
83
+ } catch (err) {
84
+ setStatus({
85
+ msg: `error: ${err.message}`,
86
+ kind: "error"
87
+ });
88
+ }
89
+ }
90
+ function newEntry() {
91
+ setSelectedKey(null);
92
+ setMode("new");
93
+ setKeyInput("");
94
+ setContent("");
95
+ setStatus({
96
+ msg: "new entry — type a key and content, then save",
97
+ kind: "info"
98
+ });
99
+ }
100
+ async function save() {
101
+ const key = keyInput.trim();
102
+ if (!key) {
103
+ setStatus({
104
+ msg: "key is required",
105
+ kind: "error"
106
+ });
107
+ return;
108
+ }
109
+ try {
110
+ const res = await fetch(`/api/teams/${encodeURIComponent(teamId)}/memory/${encodeKey(key)}`, {
111
+ method: "PUT",
112
+ headers: { "content-type": "application/json" },
113
+ body: JSON.stringify({ content })
114
+ });
115
+ if (!res.ok) {
116
+ const body = await res.json().catch(() => null);
117
+ throw new Error(body?.error ?? res.statusText);
118
+ }
119
+ setSelectedKey(key);
120
+ setMode("edit");
121
+ setStatus({
122
+ msg: "saved",
123
+ kind: "info"
124
+ });
125
+ await loadList(query);
126
+ } catch (err) {
127
+ setStatus({
128
+ msg: `error: ${err.message}`,
129
+ kind: "error"
130
+ });
131
+ }
132
+ }
133
+ async function del() {
134
+ if (!selectedKey) return;
135
+ if (!confirm(`delete ${selectedKey}?`)) return;
136
+ try {
137
+ const res = await fetch(`/api/teams/${encodeURIComponent(teamId)}/memory/${encodeKey(selectedKey)}`, { method: "DELETE" });
138
+ if (!res.ok && res.status !== 204) {
139
+ const body = await res.json().catch(() => null);
140
+ throw new Error(body?.error ?? res.statusText);
141
+ }
142
+ setSelectedKey(null);
143
+ setMode("none");
144
+ setKeyInput("");
145
+ setContent("");
146
+ setStatus({
147
+ msg: "deleted",
148
+ kind: "info"
149
+ });
150
+ await loadList(query);
151
+ } catch (err) {
152
+ setStatus({
153
+ msg: `error: ${err.message}`,
154
+ kind: "error"
155
+ });
156
+ }
157
+ }
158
+ const canSave = mode !== "none" && keyInput.trim().length > 0;
159
+ const canDelete = mode === "edit" && selectedKey !== null;
160
+ return /* @__PURE__ */ jsxs("main", {
161
+ className: "mx-auto max-w-5xl px-6 py-8",
162
+ children: [
163
+ /* @__PURE__ */ jsxs("header", {
164
+ className: "mb-6",
165
+ children: [/* @__PURE__ */ jsxs("h1", {
166
+ className: "font-serif text-3xl text-foreground",
167
+ children: [
168
+ team.name,
169
+ " ",
170
+ /* @__PURE__ */ jsx("span", {
171
+ className: "text-muted-foreground text-base",
172
+ children: "/ shared memory"
173
+ })
174
+ ]
175
+ }), /* @__PURE__ */ jsxs("p", {
176
+ className: "text-muted-foreground text-sm mt-1",
177
+ children: [
178
+ "BM25-indexed markdown notes shared by every agent in",
179
+ " ",
180
+ /* @__PURE__ */ jsx("a", {
181
+ href: `/teams/${encodeURIComponent(team.id)}`,
182
+ className: "font-mono underline",
183
+ children: team.id
184
+ }),
185
+ " ",
186
+ "(",
187
+ memberCount,
188
+ " member",
189
+ memberCount === 1 ? "" : "s",
190
+ "). Anything written here is visible to every member; per-agent notes belong in the agent's own",
191
+ " ",
192
+ /* @__PURE__ */ jsx("code", {
193
+ className: "font-mono",
194
+ children: "IDENTITY.md"
195
+ }),
196
+ " via ",
197
+ /* @__PURE__ */ jsx("code", { children: "home_write" }),
198
+ "."
199
+ ]
200
+ })]
201
+ }),
202
+ /* @__PURE__ */ jsx(TeamTabs, { teamId: team.id }),
203
+ /* @__PURE__ */ jsxs("div", {
204
+ className: "grid grid-cols-1 gap-6 lg:grid-cols-[320px_1fr]",
205
+ children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("div", {
206
+ className: "overflow-hidden rounded-[16px] border border-frost bg-snow",
207
+ children: [/* @__PURE__ */ jsx("div", {
208
+ className: "border-b border-frost p-2",
209
+ children: /* @__PURE__ */ jsx("input", {
210
+ type: "text",
211
+ placeholder: "search (BM25)...",
212
+ autoComplete: "off",
213
+ value: query,
214
+ onChange: (e) => setQuery(e.target.value)
215
+ })
216
+ }), /* @__PURE__ */ jsx("div", {
217
+ className: "max-h-[520px] overflow-y-auto",
218
+ children: rows.length === 0 ? /* @__PURE__ */ jsx("div", {
219
+ className: "p-8 text-center text-mocha-light",
220
+ children: "no entries"
221
+ }) : rows.map((r) => {
222
+ return /* @__PURE__ */ jsxs("button", {
223
+ type: "button",
224
+ onClick: () => openEntry(r.key),
225
+ 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" : ""}`,
226
+ children: [
227
+ isSearch && r.score !== void 0 && /* @__PURE__ */ jsx("span", {
228
+ className: "float-right text-[0.75em] text-sapphire",
229
+ children: r.score.toFixed(2)
230
+ }),
231
+ r.key,
232
+ r.preview && /* @__PURE__ */ jsx("span", {
233
+ className: "mt-1 block text-[0.9em] font-normal text-mocha-light",
234
+ children: r.preview
235
+ })
236
+ ]
237
+ }, r.key);
238
+ })
239
+ })]
240
+ }), /* @__PURE__ */ jsx("button", {
241
+ type: "button",
242
+ className: "ghost-btn mt-3 w-full",
243
+ onClick: newEntry,
244
+ children: "+ new entry"
245
+ })] }), /* @__PURE__ */ jsxs("div", { children: [
246
+ /* @__PURE__ */ jsx("div", {
247
+ className: "mb-3 flex items-center gap-2",
248
+ children: /* @__PURE__ */ jsx("input", {
249
+ type: "text",
250
+ placeholder: "key (e.g. prefs/hiking.md)",
251
+ value: keyInput,
252
+ onChange: (e) => setKeyInput(e.target.value),
253
+ disabled: mode !== "new",
254
+ className: "flex-1 font-mono"
255
+ })
256
+ }),
257
+ /* @__PURE__ */ jsx("textarea", {
258
+ placeholder: "select an entry on the left, or create a new one.",
259
+ value: content,
260
+ onChange: (e) => setContent(e.target.value),
261
+ className: "min-h-[360px] w-full font-mono text-[0.9em] leading-[1.55]"
262
+ }),
263
+ /* @__PURE__ */ jsxs("div", {
264
+ className: "mt-3 flex gap-2",
265
+ children: [/* @__PURE__ */ jsx("button", {
266
+ type: "button",
267
+ className: "btn-primary",
268
+ onClick: save,
269
+ disabled: !canSave,
270
+ children: "save"
271
+ }), /* @__PURE__ */ jsx("button", {
272
+ type: "button",
273
+ className: "ghost-btn",
274
+ onClick: del,
275
+ disabled: !canDelete,
276
+ children: "delete"
277
+ })]
278
+ }),
279
+ status && /* @__PURE__ */ jsx("p", {
280
+ className: `mt-2 text-[0.9em] ${status.kind === "error" ? "text-[#9B3D3D]" : "text-mocha-light"}`,
281
+ children: status.msg
282
+ })
283
+ ] })]
284
+ })
285
+ ]
286
+ });
287
+ }
288
+ //#endregion
289
+ export { MemoryPage as component };
@@ -0,0 +1,11 @@
1
+ import { t as RecoveryState } from "./RecoveryState-B2SG-mrY.js";
2
+ import { jsx } from "react/jsx-runtime";
3
+ //#region src/routes/teams/$id/policy.tsx?tsr-split=errorComponent
4
+ var SplitErrorComponent = ({ error, reset }) => /* @__PURE__ */ jsx(RecoveryState, {
5
+ title: "Team policy unavailable",
6
+ error,
7
+ reset,
8
+ fallbackHref: "/teams"
9
+ });
10
+ //#endregion
11
+ export { SplitErrorComponent as errorComponent };
@@ -0,0 +1,21 @@
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/teams/$id/policy.tsx
5
+ var $$splitErrorComponentImporter = () => import("./policy-BYVXqsan.js");
6
+ var $$splitComponentImporter = () => import("./policy-Dr55y-Mh.js");
7
+ var fetchPolicy = createServerFn({ method: "POST" }).validator((data) => data).handler(createSsrRpc("fc940d6dec5305aa64bdb9b9f5f7d4f925b2ba0608cb6d39af854a94872fc867"));
8
+ var Route = createFileRoute("/teams/$id/policy")({
9
+ validateSearch: (search) => ({
10
+ view: search.view === "matrix" ? "matrix" : "flow",
11
+ selected: typeof search.selected === "string" ? search.selected : null,
12
+ vx: Number.isFinite(Number(search.vx)) ? Number(search.vx) : 0,
13
+ vy: Number.isFinite(Number(search.vy)) ? Number(search.vy) : 0,
14
+ vz: Number.isFinite(Number(search.vz)) ? Number(search.vz) : .9
15
+ }),
16
+ loader: ({ params }) => fetchPolicy({ data: params }),
17
+ component: lazyRouteComponent($$splitComponentImporter, "component"),
18
+ errorComponent: lazyRouteComponent($$splitErrorComponentImporter, "errorComponent")
19
+ });
20
+ //#endregion
21
+ export { Route as t };