bazilion 0.14.2 → 0.16.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 (122) hide show
  1. package/dist/cli.js +1752 -825
  2. package/dist/cli.js.map +1 -1
  3. package/dist/daemon.js +16624 -9803
  4. package/dist/daemon.js.map +1 -1
  5. package/dist/migrations/0001_init.sql +218 -3
  6. package/dist/web/client/assets/ChatPane-CQZzxOir.js +76 -0
  7. package/dist/web/client/assets/{ConfirmDialog-_bmG-wVG.js → ConfirmDialog-MicTTwdy.js} +1 -1
  8. package/dist/web/client/assets/{FieldRow-Do1cBkRc.js → FieldRow-DJ2Gx4Du.js} +1 -1
  9. package/dist/web/client/assets/{ProductionTeamPolicyEditor-XP-QJul4.js → ProductionTeamPolicyEditor-DqUnN_ce.js} +1 -1
  10. package/dist/web/client/assets/{ProfileCommunicationEditor-CwdFPdpk.js → ProfileCommunicationEditor-DArXub0b.js} +1 -1
  11. package/dist/web/client/assets/ResultCard-Cps_lXVN.js +1 -0
  12. package/dist/web/client/assets/ResultSourceConversation-CtzJ8QA-.js +1 -0
  13. package/dist/web/client/assets/TeamTabs-DbIk5vvT.js +1 -0
  14. package/dist/web/client/assets/{TemplatesTabs-D4WHvs6b.js → TemplatesTabs-CatJIjGi.js} +1 -1
  15. package/dist/web/client/assets/{UnsavedChangesGuard-B1aLqiK5.js → UnsavedChangesGuard-BCsLw-mU.js} +1 -1
  16. package/dist/web/client/assets/_id-B5Ov7cdO.js +1 -0
  17. package/dist/web/client/assets/{_id-BH3v_vI_.js → _id-BEDmIXVf.js} +1 -1
  18. package/dist/web/client/assets/_id-BFM_tn_s.js +1 -0
  19. package/dist/web/client/assets/_id-CrnEVcw8.js +1 -0
  20. package/dist/web/client/assets/{_id-3w4PFfma.js → _id-DxopIW-y.js} +1 -1
  21. package/dist/web/client/assets/{activity-A_HrG1Tv.js → activity-CrG8Bg60.js} +1 -1
  22. package/dist/web/client/assets/{agents-C8OVKq3N.js → agents-CMPOFcs-.js} +1 -1
  23. package/dist/web/client/assets/{agents-BeeFCt2c.js → agents-O4soKZND.js} +1 -1
  24. package/dist/web/client/assets/{approvals-BIdZ9BSn.js → approvals-CwDu_lrA.js} +1 -1
  25. package/dist/web/client/assets/{attention-B9bUrxiU.js → attention-BY8MMuM_.js} +1 -1
  26. package/dist/web/client/assets/chevron-right-Cf6vKeLq.js +1 -0
  27. package/dist/web/client/assets/{config-By86S7k-.js → config-Cn4iBJFz.js} +1 -1
  28. package/dist/web/client/assets/{inbox-DlXQCJLe.js → inbox-CWXql0K3.js} +1 -1
  29. package/dist/web/client/assets/{index-CLdmsmiN.js → index-Bq2zrG2_.js} +2 -2
  30. package/dist/web/client/assets/{learning-BqZIw2nA.js → learning-DAm4dyyc.js} +1 -1
  31. package/dist/web/client/assets/login-BsABI8Ux.js +1 -0
  32. package/dist/web/client/assets/{mcp-DKSY2yVa.js → mcp-loLB0wuh.js} +1 -1
  33. package/dist/web/client/assets/{members-9GuOiq6J.js → members-BJ0ikkTl.js} +1 -1
  34. package/dist/web/client/assets/{memory-DiGMI6FC.js → memory-Drn9Gv53.js} +1 -1
  35. package/dist/web/client/assets/{policy-TBGQffw5.js → policy-pQadZyk0.js} +1 -1
  36. package/dist/web/client/assets/results-9exU6f7m.js +1 -0
  37. package/dist/web/client/assets/routes-jw1PuqiR.js +1 -0
  38. package/dist/web/client/assets/{services-1Z398CES.js → services-BLso1BhA.js} +1 -1
  39. package/dist/web/client/assets/{skills-BP2gciFt.js → skills-BodqX3OI.js} +1 -1
  40. package/dist/web/client/assets/styles-d1yjBpud.css +2 -0
  41. package/dist/web/client/assets/{teams-DBIivGT7.js → teams-ByQedXZi.js} +1 -1
  42. package/dist/web/client/assets/{teams-tNoMDJ_M.js → teams-SYsF1bOR.js} +1 -1
  43. package/dist/web/client/assets/telegram-DC9PLFbB.js +1 -0
  44. package/dist/web/client/assets/{tokens-eDWCGQQ2.js → tokens-DGy8Ijpo.js} +1 -1
  45. package/dist/web/client/assets/{triggers-DZME3IcK.js → triggers-BXpVmHDG.js} +1 -1
  46. package/dist/web/client/assets/{welcome-B49sh_uf.js → welcome-BKsnsCxJ.js} +1 -1
  47. package/dist/web/client/assets/wire-constants-CBD-lTaa.js +1 -0
  48. package/dist/web/client/assets/{x-CHc7_-TH.js → x-BK4xNCzS.js} +1 -1
  49. package/dist/web/server/assets/ChatPane-CS5oI7ef.js +2666 -0
  50. package/dist/web/server/assets/ResultCard-B3zD9N0t.js +143 -0
  51. package/dist/web/server/assets/ResultSourceConversation-BpVWBRYq.js +64 -0
  52. package/dist/web/server/assets/{TeamTabs-Co3n2exj.js → TeamTabs-TCKjCvMA.js} +4 -0
  53. package/dist/web/server/assets/{_id-sNu5aXZt.js → _id-5pgKoid8.js} +2 -1
  54. package/dist/web/server/assets/_id-BDEpe6k0.js +6 -0
  55. package/dist/web/server/assets/{_id-DxCnEFpm.js → _id-BG2nkGxa.js} +3 -4
  56. package/dist/web/server/assets/{_id-BqWTB8Wl.js → _id-B_-CDHOi2.js} +1 -1
  57. package/dist/web/server/assets/{_id-BeKhPKw3.js → _id-BnqodC1c2.js} +7 -3
  58. package/dist/web/server/assets/{_id-DvlDkk04.js → _id-CeyHEsCZ.js} +1 -1
  59. package/dist/web/server/assets/{_id-BYKpT2Tu.js → _id-DFHB9JFQ.js} +1 -1
  60. package/dist/web/server/assets/{_id-DYU6uIBx.js → _id-DOnInzLb.js} +1 -1
  61. package/dist/web/server/assets/{_id-HMy7jM3P.js → _id-DrB9uR1b.js} +1 -1
  62. package/dist/web/server/assets/{_id-BAA9KJBU.js → _id-DtIYuJJX.js} +1 -1
  63. package/dist/web/server/assets/_id-DwZXhLlL.js +779 -0
  64. package/dist/web/server/assets/_id-wyjrf0JG.js +17 -0
  65. package/dist/web/server/assets/{_tanstack-start-manifest_v-Duhf0z7H.js → _tanstack-start-manifest_v-D7gKv6m6.js} +97 -70
  66. package/dist/web/server/assets/{activity-9VP6QDTH.js → activity-0VUkStOu.js} +1 -1
  67. package/dist/web/server/assets/{activity-BWv1goK6.js → activity-5fWKPDxj.js} +2 -2
  68. package/dist/web/server/assets/{activity-LjpblbDL.js → activity-C88qrNqv.js} +1 -1
  69. package/dist/web/server/assets/{agents-DjyQk94u.js → agents-C86K6HvS.js} +1 -1
  70. package/dist/web/server/assets/{agents-BJAv919x.js → agents-CSXLaM2W.js} +1 -1
  71. package/dist/web/server/assets/{approvals-BYi84gwl.js → approvals-C3MysI6l.js} +1 -1
  72. package/dist/web/server/assets/{approvals-7JOoBchn.js → approvals-DTdrltyk.js} +1 -1
  73. package/dist/web/server/assets/{approvals-Bz123liE.js → approvals-DXoN-T57.js} +15 -1
  74. package/dist/web/server/assets/{attention-UhqPK_Ro.js → attention-DLeLCKah.js} +1 -1
  75. package/dist/web/server/assets/{auth-7BHTH-KS.js → auth-CDZp9aEk.js} +1 -1
  76. package/dist/web/server/assets/{config-BMiajTZP.js → config-BVTHvljR.js} +1 -1
  77. package/dist/web/server/assets/{daemon-client-CI5NHwNC.js → daemon-client-xWyYKAcx.js} +59 -0
  78. package/dist/web/server/assets/{inbox-Dv55rGYq.js → inbox-PQTrjtOw.js} +1 -1
  79. package/dist/web/server/assets/{learning-C2upa1CE.js → learning-K0cmDsZR.js} +1 -1
  80. package/dist/web/server/assets/{login-BNj3U6ok.js → login-B_-9L8TU.js} +7 -2
  81. package/dist/web/server/assets/{login-Be8eP4Jp.js → login-rDox7PRD.js} +5 -2
  82. package/dist/web/server/assets/{mcp-BvnvlVFd.js → mcp-Rtraochg.js} +1 -1
  83. package/dist/web/server/assets/{members-DiYtr-zm.js → members-CD3GiTfF.js} +1 -1
  84. package/dist/web/server/assets/{members-DHYTVgwb.js → members-cc5SeEaW.js} +2 -2
  85. package/dist/web/server/assets/{members-BP3UTqu1.js → members-grAKFWgv.js} +1 -1
  86. package/dist/web/server/assets/{memory-CkXUgf5s.js → memory-C5i_GxlY.js} +2 -2
  87. package/dist/web/server/assets/{memory-DTFEmfF3.js → memory-CVqnyUaM.js} +1 -1
  88. package/dist/web/server/assets/{memory-BqV-Afy1.js → memory-egFpBD1g.js} +1 -1
  89. package/dist/web/server/assets/{policy-Bvvav8fh.js → policy-Dgjb0_gK.js} +2 -2
  90. package/dist/web/server/assets/{policy-BddK4xom.js → policy-bLKwvnja.js} +1 -1
  91. package/dist/web/server/assets/{policy-18fdTFO4.js → policy-ooSBgiDS.js} +1 -1
  92. package/dist/web/server/assets/results-CfNsFncJ.js +173 -0
  93. package/dist/web/server/assets/results-DXdYtHaq.js +12 -0
  94. package/dist/web/server/assets/results-N-kP4iFT.js +12 -0
  95. package/dist/web/server/assets/{router-CY_pCgP1.js → router-B6g_s7W3.js} +60 -43
  96. package/dist/web/server/assets/{routes-COtkyZG1.js → routes-BqSaZvlu.js} +3 -3
  97. package/dist/web/server/assets/{routes-BgHisAxH.js → routes-Dsh8F_7i.js} +2 -2
  98. package/dist/web/server/assets/{routes-DAU2g7Uz.js → routes-pcRy_Sf8.js} +1 -1
  99. package/dist/web/server/assets/{services-DozuJtzX.js → services-DlZA8fRL.js} +1 -1
  100. package/dist/web/server/assets/{skills-DfGSJTCB.js → skills-i2duvgW-.js} +1 -1
  101. package/dist/web/server/assets/{teams-be05ci17.js → teams-6RYIj1Xm.js} +1 -1
  102. package/dist/web/server/assets/{teams-DPnAX4wD.js → teams-B1AI3NfN.js} +1 -1
  103. package/dist/web/server/assets/{telegram-1AWL6lFw.js → telegram-C4q0YTVn.js} +1 -1
  104. package/dist/web/server/assets/{telegram-Dj4Wwhd6.js → telegram-CoNeOgqZ.js} +465 -1
  105. package/dist/web/server/assets/{telegram-DbOFpTFm.js → telegram-Zd1rIZxg.js} +1 -1
  106. package/dist/web/server/assets/{tokens-DjM8GsgS.js → tokens-RFquA2Bx.js} +1 -1
  107. package/dist/web/server/assets/{triggers-Nezfw-Bd.js → triggers-DVD-iE-N.js} +1 -1
  108. package/dist/web/server/server.js +31 -27
  109. package/dist/worker.js +1765 -710
  110. package/dist/worker.js.map +1 -1
  111. package/package.json +3 -3
  112. package/dist/web/client/assets/TeamTabs-DIRiKcqx.js +0 -1
  113. package/dist/web/client/assets/_id-Cx7o4Zmf.js +0 -1
  114. package/dist/web/client/assets/_id-DIiVVxBl.js +0 -1
  115. package/dist/web/client/assets/chevron-right-VWrk_dTX.js +0 -1
  116. package/dist/web/client/assets/login-CCMPXiny.js +0 -1
  117. package/dist/web/client/assets/routes-g3yUOhCb.js +0 -1
  118. package/dist/web/client/assets/styles-B5vcgXln.css +0 -2
  119. package/dist/web/client/assets/telegram-CJG_DFdI.js +0 -1
  120. package/dist/web/client/assets/wire-constants-zZ7Wjb9C.js +0 -74
  121. package/dist/web/server/assets/ChatPane-CgSe7tsy.js +0 -1429
  122. package/dist/web/server/assets/_id-ndxFHx0t.js +0 -381
@@ -1,10 +1,473 @@
1
- import { t as Route } from "./telegram-DbOFpTFm.js";
1
+ import { t as Route } from "./telegram-Zd1rIZxg.js";
2
2
  import { t as Button } from "./Button-Dsnw22OF.js";
3
3
  import { t as ConfirmDialog } from "./ConfirmDialog-C-MPYYSU.js";
4
4
  import { t as ConfigPage } from "./ConfigPage-CiQ-gxmJ.js";
5
5
  import { useEffect, useState } from "react";
6
6
  import { useRouter } from "@tanstack/react-router";
7
7
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
8
+ //#region src/components/NotificationSettings.tsx
9
+ var kinds = {
10
+ communication_approval: "Communication approvals",
11
+ lesson_proposal: "Lesson proposals",
12
+ review_failure: "Review failures",
13
+ trigger_failure: "Scheduled trigger failures",
14
+ agent_loop_break: "Agent message loop breaks"
15
+ };
16
+ async function request(path, method = "GET", body) {
17
+ const response = await fetch(`/api/notifications${path}`, {
18
+ method,
19
+ cache: "no-store",
20
+ ...body === void 0 ? {} : {
21
+ headers: { "Content-Type": "application/json" },
22
+ body: JSON.stringify(body)
23
+ }
24
+ });
25
+ const value = await response.json();
26
+ if (!response.ok) throw new Error(value.error ?? "Notification request failed");
27
+ return value;
28
+ }
29
+ function NotificationSettings() {
30
+ const [state, setState] = useState(null);
31
+ const [enabled, setEnabled] = useState(false);
32
+ const [destination, setDestination] = useState("");
33
+ const [selected, setSelected] = useState([]);
34
+ const [timezone, setTimezone] = useState("UTC");
35
+ const [quiet, setQuiet] = useState(false);
36
+ const [start, setStart] = useState("22:00");
37
+ const [end, setEnd] = useState("07:00");
38
+ const [page, setPage] = useState({
39
+ receipts: [],
40
+ nextCursor: null
41
+ });
42
+ const [busy, setBusy] = useState(false);
43
+ const [error, setError] = useState(null);
44
+ const [notice, setNotice] = useState(null);
45
+ const [preview, setPreview] = useState(null);
46
+ const [retry, setRetry] = useState(null);
47
+ async function refresh() {
48
+ const [value, receipts] = await Promise.all([request(""), request("/receipts")]);
49
+ setState(value);
50
+ setPage(receipts);
51
+ setEnabled(value.settings.enabled);
52
+ setDestination(value.settings.destination?.id ?? "");
53
+ setSelected(value.settings.kinds);
54
+ setTimezone(value.settings.timezone);
55
+ setQuiet(value.settings.quietHours !== null);
56
+ setStart(value.settings.quietHours?.start ?? "22:00");
57
+ setEnd(value.settings.quietHours?.end ?? "07:00");
58
+ }
59
+ useEffect(() => {
60
+ refresh().catch((error) => setError(String(error.message)));
61
+ }, []);
62
+ async function action(work) {
63
+ setBusy(true);
64
+ setError(null);
65
+ setNotice(null);
66
+ try {
67
+ await work();
68
+ } catch (error) {
69
+ setError(error instanceof Error ? error.message : "Notification request failed");
70
+ } finally {
71
+ setBusy(false);
72
+ }
73
+ }
74
+ async function save(includeOpenPreview) {
75
+ if (!state) return;
76
+ await request("", "PUT", {
77
+ expectedRevision: state.settings.revision,
78
+ enabled,
79
+ destinationId: destination || void 0,
80
+ kinds: selected,
81
+ timezone,
82
+ quietHours: quiet ? {
83
+ start,
84
+ end
85
+ } : null,
86
+ includeOpenPreview
87
+ });
88
+ await refresh();
89
+ setPreview(null);
90
+ setNotice("Notification settings saved. Delivery does not resolve Attention items.");
91
+ }
92
+ return /* @__PURE__ */ jsxs("section", {
93
+ className: "card",
94
+ style: {
95
+ marginTop: "1.5rem",
96
+ padding: "1.25rem",
97
+ minWidth: 0
98
+ },
99
+ "aria-labelledby": "notification-title",
100
+ children: [
101
+ /* @__PURE__ */ jsx("h2", {
102
+ id: "notification-title",
103
+ children: "Attention notifications"
104
+ }),
105
+ /* @__PURE__ */ jsx("p", {
106
+ className: "muted",
107
+ children: "Optional Telegram notices for items that need your attention. New enablement sends future items only. Agent-topic error mirrors may also report the same failure."
108
+ }),
109
+ error && /* @__PURE__ */ jsxs("p", {
110
+ role: "alert",
111
+ children: [error, ". Refresh settings before retrying a conflicting change."]
112
+ }),
113
+ notice && /* @__PURE__ */ jsx("p", {
114
+ role: "status",
115
+ children: notice
116
+ }),
117
+ !state ? /* @__PURE__ */ jsx("p", { children: "Loading notification settings…" }) : /* @__PURE__ */ jsxs(Fragment, { children: [
118
+ state.settings.restorePaused && /* @__PURE__ */ jsx("p", {
119
+ role: "status",
120
+ children: "Paused after restore. Telegram may have newer messages than this backup. Re-enable for future items, or explicitly preview old open items with possible duplicates."
121
+ }),
122
+ !state.readiness.ready && /* @__PURE__ */ jsx("p", { children: "Destination unavailable. Configure and pair the private Telegram forum, start the bot, then refresh." }),
123
+ state.diagnostic && /* @__PURE__ */ jsxs("p", {
124
+ role: "status",
125
+ children: ["Delivery status: ", state.diagnostic]
126
+ }),
127
+ /* @__PURE__ */ jsx("form", {
128
+ onSubmit: (event) => {
129
+ event.preventDefault();
130
+ action(() => save());
131
+ },
132
+ children: /* @__PURE__ */ jsxs("fieldset", {
133
+ disabled: busy,
134
+ style: {
135
+ border: 0,
136
+ padding: 0,
137
+ minWidth: 0
138
+ },
139
+ children: [
140
+ /* @__PURE__ */ jsxs("label", {
141
+ style: {
142
+ display: "block",
143
+ marginBlock: ".75rem"
144
+ },
145
+ children: [
146
+ /* @__PURE__ */ jsx("input", {
147
+ type: "checkbox",
148
+ checked: enabled,
149
+ onChange: (event) => setEnabled(event.target.checked)
150
+ }),
151
+ " ",
152
+ "Enable Attention notifications"
153
+ ]
154
+ }),
155
+ /* @__PURE__ */ jsxs("label", {
156
+ style: {
157
+ display: "grid",
158
+ gap: ".35rem",
159
+ marginBlock: ".75rem"
160
+ },
161
+ children: ["Destination", /* @__PURE__ */ jsxs("select", {
162
+ value: destination,
163
+ onChange: (event) => setDestination(event.target.value),
164
+ required: enabled,
165
+ style: { maxWidth: "100%" },
166
+ children: [
167
+ /* @__PURE__ */ jsx("option", {
168
+ value: "",
169
+ children: "Choose the paired service topic"
170
+ }),
171
+ state.readiness.destination && /* @__PURE__ */ jsx("option", {
172
+ value: state.readiness.destination.id,
173
+ children: "Paired group · Bazilion service topic"
174
+ }),
175
+ state.settings.destination && state.settings.destination.id !== state.readiness.destination?.id && /* @__PURE__ */ jsx("option", {
176
+ value: state.settings.destination.id,
177
+ children: "Previous destination (unavailable)"
178
+ })
179
+ ]
180
+ })]
181
+ }),
182
+ /* @__PURE__ */ jsx("p", {
183
+ className: "m-0 text-sm text-mocha",
184
+ children: "Notices go to the operational thread in your paired Telegram group."
185
+ }),
186
+ state.readiness.destination && /* @__PURE__ */ jsxs("details", {
187
+ className: "mt-2 text-xs text-mocha",
188
+ children: [/* @__PURE__ */ jsx("summary", {
189
+ className: "cursor-pointer",
190
+ children: "Telegram destination IDs"
191
+ }), /* @__PURE__ */ jsxs("p", {
192
+ className: "mt-2 break-all",
193
+ children: [
194
+ "Group ",
195
+ state.readiness.destination.chatId,
196
+ " · Topic ",
197
+ state.readiness.destination.topicId
198
+ ]
199
+ })]
200
+ }),
201
+ /* @__PURE__ */ jsxs("fieldset", {
202
+ style: {
203
+ marginBlock: "1rem",
204
+ minWidth: 0
205
+ },
206
+ children: [/* @__PURE__ */ jsx("legend", { children: "Include these Attention kinds" }), Object.keys(kinds).map((kind) => /* @__PURE__ */ jsxs("label", {
207
+ style: {
208
+ display: "block",
209
+ marginBlock: ".5rem"
210
+ },
211
+ children: [
212
+ /* @__PURE__ */ jsx("input", {
213
+ type: "checkbox",
214
+ checked: selected.includes(kind),
215
+ onChange: (event) => setSelected(event.target.checked ? [...selected, kind] : selected.filter((value) => value !== kind))
216
+ }),
217
+ " ",
218
+ kinds[kind]
219
+ ]
220
+ }, kind))]
221
+ }),
222
+ /* @__PURE__ */ jsxs("label", {
223
+ style: {
224
+ display: "grid",
225
+ gap: ".35rem"
226
+ },
227
+ children: ["Timezone (IANA)", /* @__PURE__ */ jsx("input", {
228
+ value: timezone,
229
+ onChange: (event) => setTimezone(event.target.value),
230
+ placeholder: "Europe/Warsaw",
231
+ required: true,
232
+ style: {
233
+ maxWidth: "100%",
234
+ minWidth: 0
235
+ }
236
+ })]
237
+ }),
238
+ /* @__PURE__ */ jsxs("label", {
239
+ style: {
240
+ display: "block",
241
+ marginBlock: ".75rem"
242
+ },
243
+ children: [
244
+ /* @__PURE__ */ jsx("input", {
245
+ type: "checkbox",
246
+ checked: quiet,
247
+ onChange: (event) => setQuiet(event.target.checked)
248
+ }),
249
+ " ",
250
+ "Use quiet hours for all selected kinds"
251
+ ]
252
+ }),
253
+ quiet && /* @__PURE__ */ jsxs("div", {
254
+ style: {
255
+ display: "flex",
256
+ flexWrap: "wrap",
257
+ gap: "1rem"
258
+ },
259
+ children: [/* @__PURE__ */ jsxs("label", { children: [
260
+ "Start",
261
+ " ",
262
+ /* @__PURE__ */ jsx("input", {
263
+ type: "time",
264
+ value: start,
265
+ required: true,
266
+ onChange: (event) => setStart(event.target.value)
267
+ })
268
+ ] }), /* @__PURE__ */ jsxs("label", { children: [
269
+ "End",
270
+ " ",
271
+ /* @__PURE__ */ jsx("input", {
272
+ type: "time",
273
+ value: end,
274
+ required: true,
275
+ onChange: (event) => setEnd(event.target.value)
276
+ })
277
+ ] })]
278
+ }),
279
+ /* @__PURE__ */ jsxs("div", {
280
+ style: {
281
+ display: "flex",
282
+ flexWrap: "wrap",
283
+ gap: ".5rem",
284
+ marginTop: "1rem"
285
+ },
286
+ children: [/* @__PURE__ */ jsx(Button, {
287
+ variant: "primary",
288
+ type: "submit",
289
+ disabled: !selected.length || enabled && (!state.readiness.ready || !destination),
290
+ children: "Save settings"
291
+ }), /* @__PURE__ */ jsx(Button, {
292
+ variant: "ghost",
293
+ disabled: !enabled || !state.readiness.ready || !destination || !selected.length,
294
+ onClick: () => void action(async () => setPreview(await request("/preview", "POST", { kinds: selected }))),
295
+ children: "Preview open items"
296
+ })]
297
+ })
298
+ ]
299
+ })
300
+ }),
301
+ /* @__PURE__ */ jsxs("section", {
302
+ "aria-label": "Delivery receipts",
303
+ className: "mt-6 flex min-w-0 flex-col gap-4 border-t border-frost pt-5",
304
+ children: [
305
+ /* @__PURE__ */ jsxs("div", {
306
+ className: "flex flex-wrap items-center justify-between gap-3",
307
+ children: [/* @__PURE__ */ jsx("h3", {
308
+ className: "m-0",
309
+ children: "Delivery receipts"
310
+ }), /* @__PURE__ */ jsx(Button, {
311
+ variant: "ghost",
312
+ disabled: busy,
313
+ onClick: () => void action(async () => setPage(await request("/receipts"))),
314
+ children: "Refresh receipts"
315
+ })]
316
+ }),
317
+ /* @__PURE__ */ jsx("p", {
318
+ className: "m-0 text-sm text-mocha",
319
+ children: "Delivery confirms Telegram received the notice. It does not approve or resolve the Attention item."
320
+ }),
321
+ page.receipts.length === 0 && /* @__PURE__ */ jsx("p", {
322
+ className: "m-0",
323
+ children: "No notification receipts yet."
324
+ }),
325
+ /* @__PURE__ */ jsx("ul", {
326
+ className: "m-0 grid list-none gap-3 p-0",
327
+ children: page.receipts.map((item) => /* @__PURE__ */ jsxs("li", {
328
+ className: "flex min-w-0 flex-col gap-3 rounded-lg border border-frost bg-ivory p-4 [overflow-wrap:anywhere]",
329
+ children: [
330
+ /* @__PURE__ */ jsxs("div", {
331
+ className: "flex flex-wrap items-center justify-between gap-2",
332
+ children: [/* @__PURE__ */ jsx("strong", { children: kinds[item.sourceKind] }), /* @__PURE__ */ jsx("span", {
333
+ className: "rounded-full bg-frost px-2 py-1 text-xs font-semibold capitalize",
334
+ children: item.state
335
+ })]
336
+ }),
337
+ /* @__PURE__ */ jsxs("p", {
338
+ className: "m-0 text-xs text-mocha",
339
+ children: [
340
+ new Date(item.updatedAt).toLocaleString(),
341
+ " · ",
342
+ item.attempts,
343
+ " ",
344
+ item.attempts === 1 ? "attempt" : "attempts"
345
+ ]
346
+ }),
347
+ item.state === "uncertain" && /* @__PURE__ */ jsx("p", {
348
+ className: "m-0 text-sm",
349
+ children: "Telegram may have received this notice. Retrying could send a duplicate."
350
+ }),
351
+ item.state === "deferred" && /* @__PURE__ */ jsx("p", {
352
+ className: "m-0 text-sm",
353
+ children: "Waiting for an eligible delivery opportunity."
354
+ }),
355
+ item.state === "failed" && /* @__PURE__ */ jsx("p", {
356
+ className: "m-0 text-sm",
357
+ children: "Delivery failed. Check the details before retrying."
358
+ }),
359
+ /* @__PURE__ */ jsxs("details", {
360
+ className: "text-xs text-mocha",
361
+ children: [/* @__PURE__ */ jsx("summary", {
362
+ className: "cursor-pointer",
363
+ children: "Technical details"
364
+ }), /* @__PURE__ */ jsxs("dl", {
365
+ className: "mt-3 grid min-w-0 gap-2",
366
+ children: [
367
+ /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("dt", {
368
+ className: "font-semibold",
369
+ children: "Source"
370
+ }), /* @__PURE__ */ jsx("dd", {
371
+ className: "m-0",
372
+ children: item.sourceId
373
+ })] }),
374
+ /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("dt", {
375
+ className: "font-semibold",
376
+ children: "Receipt"
377
+ }), /* @__PURE__ */ jsx("dd", {
378
+ className: "m-0",
379
+ children: item.id
380
+ })] }),
381
+ item.telegramMessageId && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("dt", {
382
+ className: "font-semibold",
383
+ children: "Telegram message"
384
+ }), /* @__PURE__ */ jsx("dd", {
385
+ className: "m-0",
386
+ children: item.telegramMessageId
387
+ })] }),
388
+ item.diagnostic && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("dt", {
389
+ className: "font-semibold",
390
+ children: "Diagnostic"
391
+ }), /* @__PURE__ */ jsx("dd", {
392
+ className: "m-0",
393
+ children: item.diagnostic
394
+ })] })
395
+ ]
396
+ })]
397
+ }),
398
+ ["failed", "uncertain"].includes(item.state) && /* @__PURE__ */ jsx("div", {
399
+ className: "flex flex-wrap gap-2",
400
+ children: /* @__PURE__ */ jsx(Button, {
401
+ variant: "ghost",
402
+ disabled: busy || !state.settings.enabled || state.settings.restorePaused,
403
+ onClick: () => setRetry(item),
404
+ children: "Retry notice"
405
+ })
406
+ })
407
+ ]
408
+ }, item.id))
409
+ })
410
+ ]
411
+ }),
412
+ page.nextCursor && /* @__PURE__ */ jsx(Button, {
413
+ variant: "ghost",
414
+ disabled: busy,
415
+ onClick: () => void action(async () => {
416
+ const more = await request(`/receipts?cursor=${encodeURIComponent(page.nextCursor)}`);
417
+ setPage({
418
+ receipts: [...page.receipts, ...more.receipts],
419
+ nextCursor: more.nextCursor
420
+ });
421
+ }),
422
+ children: "More receipts"
423
+ })
424
+ ] }),
425
+ /* @__PURE__ */ jsx(Button, {
426
+ variant: "ghost",
427
+ className: "mt-4",
428
+ disabled: busy,
429
+ onClick: () => void action(refresh),
430
+ children: "Refresh settings and destination"
431
+ }),
432
+ /* @__PURE__ */ jsx(ConfirmDialog, {
433
+ open: preview !== null,
434
+ title: "Include currently open items?",
435
+ confirmLabel: "Save and include preview",
436
+ confirmVariant: "primary",
437
+ description: /* @__PURE__ */ jsxs("p", { children: [
438
+ preview?.count ?? 0,
439
+ " currently eligible items will be considered. Resolved items are omitted.",
440
+ " ",
441
+ preview?.possibleDuplicates ? "This restored backup may be missing later Telegram receipts, so duplicate messages are possible." : "Confirmed deliveries will not be repeated."
442
+ ] }),
443
+ onOpenChange: (open) => {
444
+ if (!open) setPreview(null);
445
+ },
446
+ onConfirm: () => save(preview?.id)
447
+ }),
448
+ /* @__PURE__ */ jsx(ConfirmDialog, {
449
+ open: retry !== null,
450
+ title: "Retry this notification?",
451
+ confirmLabel: "Retry, allowing a possible duplicate",
452
+ confirmVariant: "primary",
453
+ description: "Telegram may already have received this notice. Retry only if you accept a possible duplicate. The source, destination and policy will be checked again.",
454
+ onOpenChange: (open) => {
455
+ if (!open) setRetry(null);
456
+ },
457
+ onConfirm: async () => {
458
+ if (!retry) return;
459
+ await request(`/receipts/${encodeURIComponent(retry.id)}/retry`, "POST", {
460
+ expectedUpdatedAt: retry.updatedAt,
461
+ acknowledgePossibleDuplicate: true
462
+ });
463
+ setPage(await request("/receipts"));
464
+ setRetry(null);
465
+ }
466
+ })
467
+ ]
468
+ });
469
+ }
470
+ //#endregion
8
471
  //#region src/routes/config/integrations/telegram.tsx?tsr-split=component
9
472
  function TelegramIntegrationPage() {
10
473
  const initial = Route.useLoaderData();
@@ -240,6 +703,7 @@ function TelegramIntegrationPage() {
240
703
  ]
241
704
  }),
242
705
  initial.configured && /* @__PURE__ */ jsx(OwnerPairingCard, {}),
706
+ /* @__PURE__ */ jsx(NotificationSettings, {}),
243
707
  initial.configured && /* @__PURE__ */ jsx(AccessControlCard, {}),
244
708
  /* @__PURE__ */ jsx(ConfirmDialog, {
245
709
  open: confirmDisconnect,
@@ -2,7 +2,7 @@ import { n as createServerFn } from "../server.js";
2
2
  import { t as createSsrRpc } from "./createSsrRpc-6LHNEsSK.js";
3
3
  import { createFileRoute, lazyRouteComponent } from "@tanstack/react-router";
4
4
  //#region src/routes/config/integrations/telegram.tsx
5
- var $$splitComponentImporter = () => import("./telegram-Dj4Wwhd6.js");
5
+ var $$splitComponentImporter = () => import("./telegram-CoNeOgqZ.js");
6
6
  var fetchTelegramConfig = createServerFn({ method: "GET" }).handler(createSsrRpc("00a157dd07824e1f126f06646effd1d876f280f6fc64c144d2f6429414a4e58a"));
7
7
  var Route = createFileRoute("/config/integrations/telegram")({
8
8
  loader: () => fetchTelegramConfig(),
@@ -1,6 +1,6 @@
1
1
  import { n as createServerFn } from "../server.js";
2
2
  import { t as createServerRpc } from "./createServerRpc-B7Yr1K8i.js";
3
- import { n as daemonClient } from "./daemon-client-CI5NHwNC.js";
3
+ import { n as daemonClient } from "./daemon-client-xWyYKAcx.js";
4
4
  //#region src/routes/config/tokens.tsx?tss-serverfn-split
5
5
  var fetchTokens_createServerFn_handler = createServerRpc({
6
6
  id: "46e35c9f1afc79423cb49703b454ef684344db08ec19775efd70a8768c7837f1",
@@ -1,6 +1,6 @@
1
1
  import { n as createServerFn } from "../server.js";
2
2
  import { t as createServerRpc } from "./createServerRpc-B7Yr1K8i.js";
3
- import { n as daemonClient, r as ApiClientError } from "./daemon-client-CI5NHwNC.js";
3
+ import { n as daemonClient, r as ApiClientError } from "./daemon-client-xWyYKAcx.js";
4
4
  //#region src/routes/agents/$id/triggers.tsx?tss-serverfn-split
5
5
  var fetchTriggers_createServerFn_handler = createServerRpc({
6
6
  id: "57ebf437fdb3fcfc63b176e796a55f04bdfec0b230059673196e98d413d15c4d",
@@ -3558,7 +3558,7 @@ var defaultSerovalPlugins = [
3558
3558
  * the dev styles URL for route-scoped CSS collection.
3559
3559
  */
3560
3560
  async function getStartManifest(matchedRoutes) {
3561
- const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-Duhf0z7H.js");
3561
+ const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-D7gKv6m6.js");
3562
3562
  const startManifest = tsrStartManifest();
3563
3563
  let routes = startManifest.routes;
3564
3564
  routes[rootRouteId];
@@ -3582,103 +3582,107 @@ async function getStartManifest(matchedRoutes) {
3582
3582
  var manifest = {
3583
3583
  "00a157dd07824e1f126f06646effd1d876f280f6fc64c144d2f6429414a4e58a": {
3584
3584
  functionName: "fetchTelegramConfig_createServerFn_handler",
3585
- importer: () => import("./assets/telegram-1AWL6lFw.js")
3585
+ importer: () => import("./assets/telegram-C4q0YTVn.js")
3586
3586
  },
3587
3587
  "032d74b7d41c718191dbdde6b06ba44993340ce1154af1fa6723a6d4f7a7236e": {
3588
3588
  functionName: "fetchProfile_createServerFn_handler",
3589
- importer: () => import("./assets/_id-DYU6uIBx.js")
3589
+ importer: () => import("./assets/_id-DOnInzLb.js")
3590
3590
  },
3591
3591
  "0a6e766d2b4ea526da34cefed5342a6ecc5ff35ad1ce38fba4129b8c24d8e6e5": {
3592
3592
  functionName: "fetchMembers_createServerFn_handler",
3593
- importer: () => import("./assets/members-BP3UTqu1.js")
3593
+ importer: () => import("./assets/members-grAKFWgv.js")
3594
3594
  },
3595
3595
  "1ab05a58944792f34ad279deeaa56f70e9360687856b18327f335b022e8d21a5": {
3596
3596
  functionName: "fetchTeamsData_createServerFn_handler",
3597
- importer: () => import("./assets/teams-DPnAX4wD.js")
3597
+ importer: () => import("./assets/teams-B1AI3NfN.js")
3598
3598
  },
3599
3599
  "1bb12262aaa902fa208aafaa70b69c63da34c1fe523ab0322fe766903fc6b4c1": {
3600
3600
  functionName: "fetchTeams_createServerFn_handler",
3601
- importer: () => import("./assets/teams-be05ci17.js")
3601
+ importer: () => import("./assets/teams-6RYIj1Xm.js")
3602
3602
  },
3603
3603
  "26dbbcbe40063e8aedfd343cf1dfd4dfe5589f24591c0ba35e80c611d7c57c7c": {
3604
3604
  functionName: "fetchHomeData_createServerFn_handler",
3605
- importer: () => import("./assets/routes-COtkyZG1.js")
3605
+ importer: () => import("./assets/routes-BqSaZvlu.js")
3606
3606
  },
3607
3607
  "278849457893891c3d22806d15e11a0a42cc3630b30e9e62b74cf2d3b982ded7": {
3608
3608
  functionName: "fetchServers_createServerFn_handler",
3609
- importer: () => import("./assets/mcp-BvnvlVFd.js")
3609
+ importer: () => import("./assets/mcp-Rtraochg.js")
3610
3610
  },
3611
3611
  "2cd8c6ec40e2e2d9518b5f127a518ecd83a2222d85665cc61d5144bcf59ed4fb": {
3612
3612
  functionName: "fetchInbox_createServerFn_handler",
3613
- importer: () => import("./assets/inbox-Dv55rGYq.js")
3613
+ importer: () => import("./assets/inbox-PQTrjtOw.js")
3614
3614
  },
3615
3615
  "46e35c9f1afc79423cb49703b454ef684344db08ec19775efd70a8768c7837f1": {
3616
3616
  functionName: "fetchTokens_createServerFn_handler",
3617
- importer: () => import("./assets/tokens-DjM8GsgS.js")
3617
+ importer: () => import("./assets/tokens-RFquA2Bx.js")
3618
3618
  },
3619
3619
  "4773184b3ddd3656fb80ec74375a6d304e25acb56b79f1d349dcabf9f0914359": {
3620
3620
  functionName: "fetchGroup_createServerFn_handler",
3621
- importer: () => import("./assets/_id-DvlDkk04.js")
3621
+ importer: () => import("./assets/_id-CeyHEsCZ.js")
3622
3622
  },
3623
3623
  "57ebf437fdb3fcfc63b176e796a55f04bdfec0b230059673196e98d413d15c4d": {
3624
3624
  functionName: "fetchTriggers_createServerFn_handler",
3625
- importer: () => import("./assets/triggers-Nezfw-Bd.js")
3625
+ importer: () => import("./assets/triggers-DVD-iE-N.js")
3626
3626
  },
3627
3627
  "5cdb81f2b930818ee9ab1d626ac99828ea652ff447fcbfc21b24dea415f8b39e": {
3628
3628
  functionName: "fetchActivity_createServerFn_handler",
3629
- importer: () => import("./assets/activity-9VP6QDTH.js")
3629
+ importer: () => import("./assets/activity-0VUkStOu.js")
3630
+ },
3631
+ "6650438083b26964e4d4f7bf27caa6fe94c74a008e5b37a4d609180a9bf98b59": {
3632
+ functionName: "fetchTeam_createServerFn_handler",
3633
+ importer: () => import("./assets/results-DXdYtHaq.js")
3630
3634
  },
3631
3635
  "6afd81bef0ee381d6e3641cd8e269968429c874e2f9d56c8f818cc9d180ee477": {
3632
3636
  functionName: "fetchServices_createServerFn_handler",
3633
- importer: () => import("./assets/services-DozuJtzX.js")
3637
+ importer: () => import("./assets/services-DlZA8fRL.js")
3634
3638
  },
3635
3639
  "816fcbc7b3c7f2952660d3a2c8f49bb0c91084627a284c185b333b1d418fadf8": {
3636
3640
  functionName: "loadApprovals_createServerFn_handler",
3637
- importer: () => import("./assets/approvals-BYi84gwl.js")
3641
+ importer: () => import("./assets/approvals-C3MysI6l.js")
3638
3642
  },
3639
3643
  "846c9081aed17057351730985f133b0aab67a5dabfca9562552829a90ff30849": {
3640
3644
  functionName: "fetchAgent_createServerFn_handler",
3641
- importer: () => import("./assets/_id-DxCnEFpm.js")
3645
+ importer: () => import("./assets/_id-BG2nkGxa.js")
3642
3646
  },
3643
3647
  "883b401299422096ee31ee824f9a24b49d06bdcedce398789778c4c549a92f3a": {
3644
3648
  functionName: "loadAttention_createServerFn_handler",
3645
- importer: () => import("./assets/attention-UhqPK_Ro.js")
3649
+ importer: () => import("./assets/attention-DLeLCKah.js")
3646
3650
  },
3647
3651
  "a0bbbee5d0c1240a05e35c04d56a0e95ec78f05265e4e937eec48c8ac2041e58": {
3648
3652
  functionName: "fetchTeam_createServerFn_handler",
3649
- importer: () => import("./assets/_id-HMy7jM3P.js")
3653
+ importer: () => import("./assets/_id-DrB9uR1b.js")
3650
3654
  },
3651
3655
  "a5d3825fc69573bb55bab6df578c750ebb0240dd394c3acee3adea02918a5dc2": {
3652
3656
  functionName: "fetchAuthState_createServerFn_handler",
3653
- importer: () => import("./assets/auth-7BHTH-KS.js")
3657
+ importer: () => import("./assets/auth-CDZp9aEk.js")
3654
3658
  },
3655
3659
  "ae1d30575b229c1e2622fbaf2252800a9a7acc84afdd68cba025ca890b8d52c5": {
3656
3660
  functionName: "fetchSkills_createServerFn_handler",
3657
- importer: () => import("./assets/skills-DfGSJTCB.js")
3661
+ importer: () => import("./assets/skills-i2duvgW-.js")
3658
3662
  },
3659
3663
  "b18a227687dba45b99ea5a2ac7a5bf8efcd9bc54387bc279cd87510fd2f83f7e": {
3660
3664
  functionName: "fetchProvidersData_createServerFn_handler",
3661
- importer: () => import("./assets/config-BMiajTZP.js")
3665
+ importer: () => import("./assets/config-BVTHvljR.js")
3662
3666
  },
3663
3667
  "b96a98e3ed6c8a3ab5f6a4ed8458e93da753ffd74e2912ef1724bb6e58030cb5": {
3664
3668
  functionName: "fetchMemory_createServerFn_handler",
3665
- importer: () => import("./assets/memory-BqV-Afy1.js")
3669
+ importer: () => import("./assets/memory-egFpBD1g.js")
3666
3670
  },
3667
3671
  "bc31355f2be9889a616d03c35062d483ea77c3f967af9432d721626a81078ef3": {
3668
3672
  functionName: "fetchProfiles_createServerFn_handler",
3669
- importer: () => import("./assets/agents-BJAv919x.js")
3673
+ importer: () => import("./assets/agents-CSXLaM2W.js")
3670
3674
  },
3671
3675
  "f715bab0037380aa3db7e237e7cf1e74168c363f48a960bb1ddfa5560de3a74e": {
3672
3676
  functionName: "fetchAgents_createServerFn_handler",
3673
- importer: () => import("./assets/agents-DjyQk94u.js")
3677
+ importer: () => import("./assets/agents-C86K6HvS.js")
3674
3678
  },
3675
3679
  "fc940d6dec5305aa64bdb9b9f5f7d4f925b2ba0608cb6d39af854a94872fc867": {
3676
3680
  functionName: "fetchPolicy_createServerFn_handler",
3677
- importer: () => import("./assets/policy-18fdTFO4.js")
3681
+ importer: () => import("./assets/policy-ooSBgiDS.js")
3678
3682
  },
3679
3683
  "fcdd0f08b635c7c501caa840d01d1376ace6683e26cc5ac7dead28d7870f98b9": {
3680
3684
  functionName: "fetchLearning_createServerFn_handler",
3681
- importer: () => import("./assets/learning-C2upa1CE.js")
3685
+ importer: () => import("./assets/learning-K0cmDsZR.js")
3682
3686
  }
3683
3687
  };
3684
3688
  async function getServerFnById(id, access) {
@@ -5556,7 +5560,7 @@ var getBaseManifest = getProdBaseManifest;
5556
5560
  var createEarlyHintsForRequest = createEarlyHintsCollector;
5557
5561
  async function loadEntries() {
5558
5562
  const [routerEntry, startEntry, pluginAdapters] = await Promise.all([
5559
- import("./assets/router-CY_pCgP1.js"),
5563
+ import("./assets/router-B6g_s7W3.js"),
5560
5564
  import("./assets/start-D4Wq9iTa.js"),
5561
5565
  import("./assets/empty-plugin-adapters-Cq4--YW-.js")
5562
5566
  ]);