bazilion 0.16.0 → 0.18.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 (128) hide show
  1. package/dist/cli.js +672 -87
  2. package/dist/cli.js.map +1 -1
  3. package/dist/daemon.js +3759 -432
  4. package/dist/daemon.js.map +1 -1
  5. package/dist/migrations/0001_init.sql +169 -0
  6. package/dist/web/client/assets/ChatPane-CAYS_fIQ.js +76 -0
  7. package/dist/web/client/assets/ConfirmDialog-BzIiABOP.js +1 -0
  8. package/dist/web/client/assets/{FieldRow-DJ2Gx4Du.js → FieldRow-W_54rw5c.js} +1 -1
  9. package/dist/web/client/assets/ProductionTeamPolicyEditor-DNXVX8Lz.js +7 -0
  10. package/dist/web/client/assets/ProfileCommunicationEditor-DN0fOzqn.js +1 -0
  11. package/dist/web/client/assets/{ResultSourceConversation-CtzJ8QA-.js → ResultSourceConversation-DoU4tOWc.js} +1 -1
  12. package/dist/web/client/assets/TeamTabs-BmTZRI4T.js +1 -0
  13. package/dist/web/client/assets/TemplatesTabs-Bs_OXKwx.js +1 -0
  14. package/dist/web/client/assets/{UnsavedChangesGuard-BCsLw-mU.js → UnsavedChangesGuard-CPRtFReU.js} +1 -1
  15. package/dist/web/client/assets/{_id-DxopIW-y.js → _id-CxAB4TDr.js} +1 -1
  16. package/dist/web/client/assets/_id-DL4tJFQB.js +1 -0
  17. package/dist/web/client/assets/{_id-BEDmIXVf.js → _id-DR9eFC17.js} +1 -1
  18. package/dist/web/client/assets/{_id-BFM_tn_s.js → _id-Dbmei5tg.js} +1 -1
  19. package/dist/web/client/assets/{_id-B5Ov7cdO.js → _id-ybF-pqmr.js} +1 -1
  20. package/dist/web/client/assets/activity-oUyy77jD.js +1 -0
  21. package/dist/web/client/assets/{agents-CMPOFcs-.js → agents-D_TrEqAg.js} +1 -1
  22. package/dist/web/client/assets/{agents-O4soKZND.js → agents-DkjJp7JP.js} +1 -1
  23. package/dist/web/client/assets/{approvals-CwDu_lrA.js → approvals-DhOerWdt.js} +1 -1
  24. package/dist/web/client/assets/{attention-BY8MMuM_.js → attention-DGwiF-Jy.js} +1 -1
  25. package/dist/web/client/assets/chevron-right-DSa4xPTs.js +1 -0
  26. package/dist/web/client/assets/config-BJ2ZzHPR.js +3 -0
  27. package/dist/web/client/assets/createServerFn-Dzfjt7mA.js +3 -0
  28. package/dist/web/client/assets/git-review-presentation-CzHQulDk.js +1 -0
  29. package/dist/web/client/assets/{inbox-CWXql0K3.js → inbox-BUElnGep.js} +1 -1
  30. package/dist/web/client/assets/index-Bi-HxcPG.js +50 -0
  31. package/dist/web/client/assets/{learning-DAm4dyyc.js → learning-BiTHNwB3.js} +1 -1
  32. package/dist/web/client/assets/login-BmcZvAH2.js +1 -0
  33. package/dist/web/client/assets/{mcp-loLB0wuh.js → mcp-Cwk9V82W.js} +1 -1
  34. package/dist/web/client/assets/{members-BJ0ikkTl.js → members-CHDNabFh.js} +1 -1
  35. package/dist/web/client/assets/{memory-Drn9Gv53.js → memory-Cx_Fpd4e.js} +1 -1
  36. package/dist/web/client/assets/policy-C0nMdwcG.js +1 -0
  37. package/dist/web/client/assets/{results-9exU6f7m.js → results-Bz3jASs-.js} +1 -1
  38. package/dist/web/client/assets/review-AK9WGmpv.js +1 -0
  39. package/dist/web/client/assets/routes-DsMY_6oy.js +1 -0
  40. package/dist/web/client/assets/{services-BLso1BhA.js → services-DItA6fJ7.js} +1 -1
  41. package/dist/web/client/assets/{skills-BodqX3OI.js → skills-DbNV2vgL.js} +1 -1
  42. package/dist/web/client/assets/{styles-d1yjBpud.css → styles-C6br2xxl.css} +1 -1
  43. package/dist/web/client/assets/{teams-ByQedXZi.js → teams-D83scDxw.js} +1 -1
  44. package/dist/web/client/assets/{teams-SYsF1bOR.js → teams-DAny1ypN.js} +1 -1
  45. package/dist/web/client/assets/{telegram-DC9PLFbB.js → telegram-BOmf9vUh.js} +1 -1
  46. package/dist/web/client/assets/{tokens-DGy8Ijpo.js → tokens-DBGH6Bw5.js} +1 -1
  47. package/dist/web/client/assets/{triggers-BXpVmHDG.js → triggers-D1_pseI3.js} +1 -1
  48. package/dist/web/client/assets/verifications-CBTo-FyV.js +2 -0
  49. package/dist/web/client/assets/welcome-DAfPOm15.js +1 -0
  50. package/dist/web/client/assets/x-CWY-gUaM.js +1 -0
  51. package/dist/web/server/assets/{ChatPane-CS5oI7ef.js → ChatPane-DybH39WK.js} +301 -14
  52. package/dist/web/server/assets/{ResultSourceConversation-BpVWBRYq.js → ResultSourceConversation-BmXTcEOA.js} +1 -1
  53. package/dist/web/server/assets/{TeamTabs-TCKjCvMA.js → TeamTabs-Dg4v6x0-.js} +8 -0
  54. package/dist/web/server/assets/{_id-DtIYuJJX.js → _id--onriuvj.js} +1 -1
  55. package/dist/web/server/assets/{_id-DOnInzLb.js → _id--zoh1vv7.js} +1 -1
  56. package/dist/web/server/assets/{_id-CeyHEsCZ.js → _id-6p-mDmI8.js} +1 -1
  57. package/dist/web/server/assets/{_id-5pgKoid8.js → _id-BN1BPEDI.js} +1 -1
  58. package/dist/web/server/assets/{_id-DFHB9JFQ.js → _id-BYKpT2Tu.js} +1 -1
  59. package/dist/web/server/assets/{_id-B_-CDHOi2.js → _id-BqWTB8Wl.js} +1 -1
  60. package/dist/web/server/assets/{_id-BnqodC1c2.js → _id-C_2er0_G.js} +3 -3
  61. package/dist/web/server/assets/{_id-BG2nkGxa.js → _id-DptBl3X8.js} +1 -1
  62. package/dist/web/server/assets/{_id-DwZXhLlL.js → _id-EAjRXNbD.js} +2 -2
  63. package/dist/web/server/assets/{_id-DrB9uR1b.js → _id-dUnXL-My2.js} +1 -1
  64. package/dist/web/server/assets/{_tanstack-start-manifest_v-D7gKv6m6.js → _tanstack-start-manifest_v-B3M-dfRO.js} +108 -84
  65. package/dist/web/server/assets/{activity-0VUkStOu.js → activity-C5jpoEQI.js} +1 -1
  66. package/dist/web/server/assets/{activity-C88qrNqv.js → activity-Cu7zKPGD.js} +1 -1
  67. package/dist/web/server/assets/{activity-5fWKPDxj.js → activity-Dn50vkQP.js} +2 -2
  68. package/dist/web/server/assets/{agents-CSXLaM2W.js → agents-RE6aYOb-.js} +1 -1
  69. package/dist/web/server/assets/{agents-C86K6HvS.js → agents-nAOx_H7s.js} +1 -1
  70. package/dist/web/server/assets/{approvals-C3MysI6l.js → approvals-DhHxIDrL.js} +1 -1
  71. package/dist/web/server/assets/{attention-DLeLCKah.js → attention-CBWzWRni.js} +1 -1
  72. package/dist/web/server/assets/{auth-CDZp9aEk.js → auth-tB3i6cFd.js} +1 -1
  73. package/dist/web/server/assets/{config-BVTHvljR.js → config-D1k_tTAw.js} +1 -1
  74. package/dist/web/server/assets/{daemon-client-xWyYKAcx.js → daemon-client-C7qjQ2iO.js} +45 -0
  75. package/dist/web/server/assets/git-review-BB3M9nYg.js +26 -0
  76. package/dist/web/server/assets/git-review-Bf5ABFJg.js +179 -0
  77. package/dist/web/server/assets/git-review-presentation-TJiHJhen.js +81 -0
  78. package/dist/web/server/assets/{inbox-PQTrjtOw.js → inbox-Dw4pTevh.js} +1 -1
  79. package/dist/web/server/assets/{learning-K0cmDsZR.js → learning-CF8ZzFVD.js} +1 -1
  80. package/dist/web/server/assets/{mcp-Rtraochg.js → mcp-D5dmBT82.js} +1 -1
  81. package/dist/web/server/assets/{members-CD3GiTfF.js → members-Bd0OtiTr.js} +1 -1
  82. package/dist/web/server/assets/{members-grAKFWgv.js → members-CvwEN9pm.js} +1 -1
  83. package/dist/web/server/assets/{members-cc5SeEaW.js → members-xSXoYUOd.js} +2 -2
  84. package/dist/web/server/assets/{memory-egFpBD1g.js → memory-CcPK7um7.js} +1 -1
  85. package/dist/web/server/assets/{memory-C5i_GxlY.js → memory-UP6AsRkO.js} +2 -2
  86. package/dist/web/server/assets/{memory-CVqnyUaM.js → memory-lo2vHRNw.js} +1 -1
  87. package/dist/web/server/assets/{policy-bLKwvnja.js → policy-B62WXIFo.js} +1 -1
  88. package/dist/web/server/assets/{policy-Dgjb0_gK.js → policy-Bze9Krhg.js} +2 -2
  89. package/dist/web/server/assets/{policy-ooSBgiDS.js → policy-Dh6wd2wN.js} +1 -1
  90. package/dist/web/server/assets/{results-N-kP4iFT.js → results-BFqs2iOu.js} +1 -1
  91. package/dist/web/server/assets/{results-DXdYtHaq.js → results-BWnu3gXP.js} +1 -1
  92. package/dist/web/server/assets/{results-CfNsFncJ.js → results-CzZk50Fu.js} +3 -3
  93. package/dist/web/server/assets/review-DUe3vHPU.js +393 -0
  94. package/dist/web/server/assets/review-c_-cFi7H.js +14 -0
  95. package/dist/web/server/assets/{router-B6g_s7W3.js → router-Deq94UJQ.js} +41 -27
  96. package/dist/web/server/assets/{routes-pcRy_Sf8.js → routes-B6x3pEW8.js} +1 -1
  97. package/dist/web/server/assets/{routes-BqSaZvlu.js → routes-CVKkvFVv.js} +1 -1
  98. package/dist/web/server/assets/{routes-Dsh8F_7i.js → routes-DsUzzxk4.js} +2 -2
  99. package/dist/web/server/assets/{services-DlZA8fRL.js → services-CEr61xb5.js} +1 -1
  100. package/dist/web/server/assets/{skills-i2duvgW-.js → skills-BImC3LTO.js} +1 -1
  101. package/dist/web/server/assets/{teams-6RYIj1Xm.js → teams-8zEIo08E.js} +1 -1
  102. package/dist/web/server/assets/{teams-B1AI3NfN.js → teams-D-yaAWLV.js} +1 -1
  103. package/dist/web/server/assets/{telegram-C4q0YTVn.js → telegram-CGl_LFtJ.js} +1 -1
  104. package/dist/web/server/assets/{tokens-RFquA2Bx.js → tokens-cB-uf7qm.js} +1 -1
  105. package/dist/web/server/assets/{triggers-DVD-iE-N.js → triggers-CtSj79L0.js} +1 -1
  106. package/dist/web/server/assets/verification-B5QjcpIo.js +97 -0
  107. package/dist/web/server/assets/verifications-BfQsfwSE.js +268 -0
  108. package/dist/web/server/assets/verifications-CUq_6ZqL.js +26 -0
  109. package/dist/web/server/server.js +72 -28
  110. package/dist/worker.js +470 -79
  111. package/dist/worker.js.map +1 -1
  112. package/package.json +3 -3
  113. package/dist/web/client/assets/ChatPane-CQZzxOir.js +0 -76
  114. package/dist/web/client/assets/ConfirmDialog-MicTTwdy.js +0 -1
  115. package/dist/web/client/assets/ProductionTeamPolicyEditor-DqUnN_ce.js +0 -7
  116. package/dist/web/client/assets/ProfileCommunicationEditor-DArXub0b.js +0 -1
  117. package/dist/web/client/assets/TeamTabs-DbIk5vvT.js +0 -1
  118. package/dist/web/client/assets/TemplatesTabs-CatJIjGi.js +0 -1
  119. package/dist/web/client/assets/_id-CrnEVcw8.js +0 -1
  120. package/dist/web/client/assets/activity-CrG8Bg60.js +0 -1
  121. package/dist/web/client/assets/chevron-right-Cf6vKeLq.js +0 -1
  122. package/dist/web/client/assets/config-Cn4iBJFz.js +0 -3
  123. package/dist/web/client/assets/index-Bq2zrG2_.js +0 -52
  124. package/dist/web/client/assets/login-BsABI8Ux.js +0 -1
  125. package/dist/web/client/assets/policy-pQadZyk0.js +0 -1
  126. package/dist/web/client/assets/routes-jw1PuqiR.js +0 -1
  127. package/dist/web/client/assets/welcome-BKsnsCxJ.js +0 -1
  128. package/dist/web/client/assets/x-BK4xNCzS.js +0 -1
@@ -0,0 +1,393 @@
1
+ import { a as fetchTeamSnapshot, i as fetchTeamReview, n as fetchFileDiff, o as prepareReviewFeedback, s as sendReviewFeedback, t as captureTeamSnapshot } from "./git-review-BB3M9nYg.js";
2
+ import { t as Route } from "./review-c_-cFi7H.js";
3
+ import { r as PageShell } from "./Page-Bz-ydB8j.js";
4
+ import { t as Button } from "./Button-Dsnw22OF.js";
5
+ import { a as referenceLabel, i as changeSummary, o as snapshotLabel, r as baseLabel, s as unavailableMessage } from "./git-review-presentation-TJiHJhen.js";
6
+ import { t as TeamTabs } from "./TeamTabs-Dg4v6x0-.js";
7
+ import { useState } from "react";
8
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
9
+ //#region src/routes/teams/$id/review.tsx?tsr-split=component
10
+ function ReviewPage() {
11
+ const loaded = Route.useLoaderData();
12
+ const teamId = loaded.team.id;
13
+ const [base, setBase] = useState("");
14
+ const [appliedBase, setAppliedBase] = useState("");
15
+ const [review, setReview] = useState(loaded.review);
16
+ const [unavailable, setUnavailable] = useState(loaded.unavailable);
17
+ const [snapshots, setSnapshots] = useState(loaded.snapshots);
18
+ const [selected, setSelected] = useState(null);
19
+ const [diff, setDiff] = useState(null);
20
+ const [snapshot, setSnapshot] = useState(null);
21
+ const [latestSnapshotId, setLatestSnapshotId] = useState(() => loaded.snapshots[0]?.snapshotId ?? null);
22
+ const [note, setNote] = useState("");
23
+ const [agentId, setAgentId] = useState(() => loaded.members[0]?.id ?? "");
24
+ const [composed, setComposed] = useState(null);
25
+ const [status, setStatus] = useState(null);
26
+ const [busy, setBusy] = useState(false);
27
+ async function load(nextBase = appliedBase) {
28
+ setBusy(true);
29
+ setStatus({
30
+ kind: "info",
31
+ message: "Loading changes…"
32
+ });
33
+ try {
34
+ const data = await fetchTeamReview({ data: {
35
+ id: teamId,
36
+ ...nextBase ? { base: nextBase } : {}
37
+ } });
38
+ if (!data) return;
39
+ setReview(data.review);
40
+ setUnavailable(data.unavailable);
41
+ setSnapshots(data.snapshots);
42
+ setAppliedBase(nextBase);
43
+ setSelected(null);
44
+ setDiff(null);
45
+ setStatus(null);
46
+ } finally {
47
+ setBusy(false);
48
+ }
49
+ }
50
+ async function openDiff(path) {
51
+ setSelected(path);
52
+ setDiff(null);
53
+ setStatus({
54
+ kind: "info",
55
+ message: "Loading diff…"
56
+ });
57
+ setDiff(await fetchFileDiff({ data: {
58
+ id: teamId,
59
+ path,
60
+ ...appliedBase ? { base: appliedBase } : {}
61
+ } }));
62
+ setStatus(null);
63
+ }
64
+ async function capture() {
65
+ setBusy(true);
66
+ setStatus({
67
+ kind: "info",
68
+ message: "Capturing a source snapshot…"
69
+ });
70
+ const result = await captureTeamSnapshot({ data: { id: teamId } });
71
+ if ("reference" in result) {
72
+ setStatus({
73
+ kind: "info",
74
+ message: `Captured ${referenceLabel(result.reference)}`
75
+ });
76
+ await load();
77
+ } else setStatus({
78
+ kind: "error",
79
+ message: unavailableMessage(result.code, result.message)
80
+ });
81
+ setBusy(false);
82
+ }
83
+ async function prepare() {
84
+ if (!selected) return;
85
+ setBusy(true);
86
+ setStatus({
87
+ kind: "info",
88
+ message: "Preparing feedback…"
89
+ });
90
+ const result = await prepareReviewFeedback({ data: {
91
+ id: teamId,
92
+ path: selected,
93
+ ...latestSnapshotId ? { snapshotId: latestSnapshotId } : {},
94
+ ...note.trim() ? { note } : {}
95
+ } });
96
+ if ("message" in result && "reference" in result) {
97
+ setComposed(result);
98
+ setStatus(null);
99
+ } else setStatus({
100
+ kind: "error",
101
+ message: unavailableMessage(result.code, result.message)
102
+ });
103
+ setBusy(false);
104
+ }
105
+ async function send() {
106
+ if (!composed || !agentId) return;
107
+ setBusy(true);
108
+ const result = await sendReviewFeedback({ data: {
109
+ agentId,
110
+ message: composed.message
111
+ } });
112
+ setStatus("queued" in result ? {
113
+ kind: "info",
114
+ message: "Feedback queued for the Agent. It runs as the next turn."
115
+ } : {
116
+ kind: "error",
117
+ message: unavailableMessage(result.code, result.message)
118
+ });
119
+ if ("queued" in result) setComposed(null);
120
+ setBusy(false);
121
+ }
122
+ async function openSnapshot(snapshotId) {
123
+ setStatus({
124
+ kind: "info",
125
+ message: "Loading snapshot…"
126
+ });
127
+ const loadedSnapshot = await fetchTeamSnapshot({ data: {
128
+ id: teamId,
129
+ snapshotId
130
+ } });
131
+ setSnapshot(loadedSnapshot);
132
+ setStatus(loadedSnapshot ? null : {
133
+ kind: "error",
134
+ message: "That snapshot is no longer retained."
135
+ });
136
+ }
137
+ const changes = review?.changes;
138
+ return /* @__PURE__ */ jsxs(PageShell, { children: [
139
+ /* @__PURE__ */ jsxs("header", { children: [/* @__PURE__ */ jsxs("h1", { children: [loaded.team.name || loaded.team.id, " review"] }), /* @__PURE__ */ jsx("p", { children: "Changes since a pinned baseline, and the source snapshots taken for them. Inspection is read-only — nothing here stages, commits or reverts anything." })] }),
140
+ /* @__PURE__ */ jsx(TeamTabs, { teamId }),
141
+ /* @__PURE__ */ jsxs("section", {
142
+ className: "space-y-2",
143
+ "aria-label": "Comparison base",
144
+ children: [
145
+ /* @__PURE__ */ jsxs("div", {
146
+ className: "flex flex-col gap-2 sm:flex-row sm:items-end",
147
+ children: [/* @__PURE__ */ jsxs("label", {
148
+ className: "flex min-w-0 flex-1 flex-col gap-1",
149
+ children: [/* @__PURE__ */ jsx("span", { children: "Comparison base" }), /* @__PURE__ */ jsx("input", {
150
+ className: "input",
151
+ value: base,
152
+ placeholder: "HEAD",
153
+ onChange: (event) => setBase(event.target.value),
154
+ onKeyDown: (event) => {
155
+ if (event.key === "Enter") load(base);
156
+ }
157
+ })]
158
+ }), /* @__PURE__ */ jsxs("div", {
159
+ className: "flex gap-2",
160
+ children: [/* @__PURE__ */ jsx(Button, {
161
+ variant: "ghost",
162
+ disabled: busy,
163
+ onClick: () => void load(base),
164
+ children: "Apply base"
165
+ }), /* @__PURE__ */ jsx(Button, {
166
+ variant: "primary",
167
+ disabled: busy,
168
+ onClick: () => void load(),
169
+ children: "Refresh"
170
+ })]
171
+ })]
172
+ }),
173
+ changes && /* @__PURE__ */ jsx("p", {
174
+ className: "text-sm opacity-80",
175
+ children: baseLabel(changes.identity, changes)
176
+ }),
177
+ /* @__PURE__ */ jsx("p", {
178
+ className: "text-xs opacity-70",
179
+ children: "A branch name is resolved to a concrete commit when the review loads, so a moving tip cannot rewrite what you are looking at."
180
+ })
181
+ ]
182
+ }),
183
+ status && /* @__PURE__ */ jsx("p", {
184
+ role: status.kind === "error" ? "alert" : "status",
185
+ className: "text-sm",
186
+ children: status.message
187
+ }),
188
+ unavailable && /* @__PURE__ */ jsxs("section", {
189
+ className: "rounded-sm border border-fawn bg-ivory p-3",
190
+ "aria-label": "Review unavailable",
191
+ children: [/* @__PURE__ */ jsx("p", {
192
+ role: "alert",
193
+ children: unavailableMessage(unavailable.code, unavailable.message)
194
+ }), unavailable.code && /* @__PURE__ */ jsxs("p", {
195
+ className: "text-xs opacity-70",
196
+ children: ["code: ", unavailable.code]
197
+ })]
198
+ }),
199
+ changes && /* @__PURE__ */ jsxs("section", {
200
+ className: "space-y-2",
201
+ "aria-label": "Changes since baseline",
202
+ children: [
203
+ /* @__PURE__ */ jsx("h2", { children: "Changes since baseline" }),
204
+ changes.changes.length === 0 && /* @__PURE__ */ jsx("p", { children: "No changes since this baseline." }),
205
+ changes.changes.length > 0 && /* @__PURE__ */ jsx("ul", {
206
+ className: "divide-y divide-fawn rounded-sm border border-fawn",
207
+ children: changes.changes.map((change) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("button", {
208
+ type: "button",
209
+ "aria-current": selected === change.path ? "true" : void 0,
210
+ onClick: () => void openDiff(change.path),
211
+ className: "flex w-full flex-col gap-1 px-3 py-2 text-left hover:bg-sapphire-glow focus:bg-sapphire-glow",
212
+ children: [/* @__PURE__ */ jsx("span", {
213
+ className: "break-all font-mono text-sm",
214
+ children: change.previousPath ? `${change.previousPath} → ${change.path}` : change.path
215
+ }), /* @__PURE__ */ jsxs("span", {
216
+ className: "text-xs opacity-80",
217
+ children: [changeSummary(change), change.patchTruncated ? " · diff truncated" : ""]
218
+ })]
219
+ }) }, `${change.status}:${change.path}`))
220
+ }),
221
+ changes.truncated && /* @__PURE__ */ jsx("p", {
222
+ className: "text-sm",
223
+ children: "This list is incomplete: more files changed than the review limit allows."
224
+ }),
225
+ (changes.withheld.excluded > 0 || changes.withheld.untracked > 0) && /* @__PURE__ */ jsxs("p", {
226
+ className: "text-xs opacity-80",
227
+ children: [
228
+ changes.withheld.excluded,
229
+ " excluded and ",
230
+ changes.withheld.untracked,
231
+ " untracked path(s) withheld by scope policy."
232
+ ]
233
+ }),
234
+ changes.issues.map((issue) => /* @__PURE__ */ jsxs("p", {
235
+ className: "text-xs opacity-80",
236
+ children: [
237
+ "note: ",
238
+ issue.code,
239
+ ": ",
240
+ issue.message
241
+ ]
242
+ }, `${issue.code}:${issue.message}`))
243
+ ]
244
+ }),
245
+ selected && /* @__PURE__ */ jsxs("section", {
246
+ className: "space-y-2",
247
+ "aria-label": "Selected file diff",
248
+ children: [
249
+ /* @__PURE__ */ jsx("h2", {
250
+ className: "break-all font-mono text-base",
251
+ children: selected
252
+ }),
253
+ diff === null ? /* @__PURE__ */ jsx("p", {
254
+ className: "text-sm",
255
+ children: "Loading…"
256
+ }) : diff.patch === null ? /* @__PURE__ */ jsxs("p", {
257
+ className: "text-sm",
258
+ children: [
259
+ "No diff text for this file",
260
+ diff.omitted ? ` (${diff.omitted.replaceAll("_", " ")})` : "",
261
+ "."
262
+ ]
263
+ }) : /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("pre", {
264
+ className: "max-h-96 overflow-auto whitespace-pre-wrap break-words rounded-sm bg-[rgba(42,31,22,0.04)] p-3 font-mono text-xs",
265
+ children: diff.patch
266
+ }), diff.truncated && /* @__PURE__ */ jsx("p", {
267
+ className: "text-xs",
268
+ children: "This diff was truncated at the patch limit."
269
+ })] }),
270
+ /* @__PURE__ */ jsxs("div", {
271
+ className: "space-y-2 rounded-sm border border-fawn p-3",
272
+ children: [
273
+ /* @__PURE__ */ jsx("h3", { children: "Send feedback about this file" }),
274
+ /* @__PURE__ */ jsxs("label", {
275
+ className: "flex flex-col gap-1",
276
+ children: [/* @__PURE__ */ jsx("span", { children: "Note (optional)" }), /* @__PURE__ */ jsx("textarea", {
277
+ className: "input",
278
+ rows: 2,
279
+ value: note,
280
+ onChange: (event) => setNote(event.target.value)
281
+ })]
282
+ }),
283
+ /* @__PURE__ */ jsxs("label", {
284
+ className: "flex flex-col gap-1",
285
+ children: [/* @__PURE__ */ jsx("span", { children: "Agent" }), /* @__PURE__ */ jsx("select", {
286
+ className: "input",
287
+ value: agentId,
288
+ onChange: (event) => setAgentId(event.target.value),
289
+ children: loaded.members.map((member) => /* @__PURE__ */ jsx("option", {
290
+ value: member.id,
291
+ children: member.name
292
+ }, member.id))
293
+ })]
294
+ }),
295
+ /* @__PURE__ */ jsxs("div", {
296
+ className: "flex flex-wrap gap-2",
297
+ children: [/* @__PURE__ */ jsx(Button, {
298
+ variant: "ghost",
299
+ disabled: busy,
300
+ onClick: () => void prepare(),
301
+ children: "Preview message"
302
+ }), /* @__PURE__ */ jsx(Button, {
303
+ variant: "primary",
304
+ disabled: busy || !composed || !agentId,
305
+ onClick: () => void send(),
306
+ children: "Queue for Agent"
307
+ })]
308
+ }),
309
+ latestSnapshotId ? /* @__PURE__ */ jsxs("p", {
310
+ className: "text-xs opacity-70",
311
+ children: [
312
+ "Referenced snapshot: ",
313
+ latestSnapshotId.slice(0, 12),
314
+ ". It is rechecked now, and the verdict is stated in the message."
315
+ ]
316
+ }) : /* @__PURE__ */ jsx("p", {
317
+ className: "text-xs opacity-70",
318
+ children: "No snapshot captured for this Team yet, so the feedback will say its source identity is unknown rather than implying the lines still match."
319
+ }),
320
+ composed && /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("p", {
321
+ className: "text-sm",
322
+ children: composed.applicability === "current" ? "This file is unchanged since the snapshot." : composed.applicability === "stale" ? "This file changed since the snapshot — the selected lines may have moved." : `Source identity unknown (${composed.applicabilityReason}).`
323
+ }), /* @__PURE__ */ jsx("pre", {
324
+ className: "max-h-64 overflow-auto whitespace-pre-wrap break-words rounded-sm bg-[rgba(42,31,22,0.04)] p-3 font-mono text-xs",
325
+ children: composed.message
326
+ })] })
327
+ ]
328
+ })
329
+ ]
330
+ }),
331
+ /* @__PURE__ */ jsxs("section", {
332
+ className: "space-y-2",
333
+ "aria-label": "Source snapshots",
334
+ children: [
335
+ /* @__PURE__ */ jsxs("div", {
336
+ className: "flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between",
337
+ children: [/* @__PURE__ */ jsx("h2", { children: "Source snapshots" }), /* @__PURE__ */ jsx(Button, {
338
+ variant: "ghost",
339
+ disabled: busy,
340
+ onClick: () => void capture(),
341
+ children: "Capture snapshot"
342
+ })]
343
+ }),
344
+ /* @__PURE__ */ jsx("p", {
345
+ className: "text-xs opacity-70",
346
+ children: "A snapshot records HEAD, the index and digests of changed files — never file content. Untracked content is only included when a path is named explicitly."
347
+ }),
348
+ snapshots.length === 0 && /* @__PURE__ */ jsx("p", { children: "No retained snapshots for this Team." }),
349
+ snapshots.length > 0 && /* @__PURE__ */ jsx("ul", {
350
+ className: "divide-y divide-fawn rounded-sm border border-fawn",
351
+ children: snapshots.map((entry) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx("button", {
352
+ type: "button",
353
+ onClick: () => void openSnapshot(entry.snapshotId),
354
+ className: "w-full px-3 py-2 text-left font-mono text-xs hover:bg-sapphire-glow focus:bg-sapphire-glow",
355
+ children: snapshotLabel(entry)
356
+ }) }, entry.snapshotId))
357
+ }),
358
+ snapshot && /* @__PURE__ */ jsxs("div", {
359
+ className: "space-y-1",
360
+ children: [
361
+ /* @__PURE__ */ jsxs("p", {
362
+ className: "text-sm",
363
+ children: [
364
+ snapshot.id.slice(0, 12),
365
+ " · ",
366
+ snapshot.complete ? "complete" : "incomplete — applicability unknown",
367
+ " · head ",
368
+ snapshot.head?.slice(0, 12) ?? "(unborn)"
369
+ ]
370
+ }),
371
+ snapshot.entries.length > 0 && /* @__PURE__ */ jsx("ul", {
372
+ className: "space-y-1 font-mono text-xs",
373
+ children: snapshot.entries.map((entry) => /* @__PURE__ */ jsxs("li", { children: [
374
+ entry.layer,
375
+ " · ",
376
+ entry.kind,
377
+ " · ",
378
+ entry.path,
379
+ entry.bytes === null ? "" : ` · ${entry.bytes}B`
380
+ ] }, `${entry.layer}:${entry.path}`))
381
+ }),
382
+ snapshot.exclusions.length > 0 && /* @__PURE__ */ jsxs("p", {
383
+ className: "text-xs opacity-80",
384
+ children: ["withheld: ", snapshot.exclusions.map((item) => `${item.path} (${item.reason})`).join(", ")]
385
+ })
386
+ ]
387
+ })
388
+ ]
389
+ })
390
+ ] });
391
+ }
392
+ //#endregion
393
+ export { ReviewPage as component };
@@ -0,0 +1,14 @@
1
+ import { i as fetchTeamReview } from "./git-review-BB3M9nYg.js";
2
+ import { createFileRoute, lazyRouteComponent, redirect } from "@tanstack/react-router";
3
+ //#region src/routes/teams/$id/review.tsx
4
+ var $$splitComponentImporter = () => import("./review-DUe3vHPU.js");
5
+ var Route = createFileRoute("/teams/$id/review")({
6
+ loader: async ({ params }) => {
7
+ const data = await fetchTeamReview({ data: { id: params.id } });
8
+ if (!data) throw redirect({ to: "/teams" });
9
+ return data;
10
+ },
11
+ component: lazyRouteComponent($$splitComponentImporter, "component")
12
+ });
13
+ //#endregion
14
+ export { Route as t };
@@ -1,9 +1,9 @@
1
1
  import { a as getCookie, n as createServerFn } from "../server.js";
2
- import { t as DAEMON_BASE_URL } from "./daemon-client-xWyYKAcx.js";
2
+ import { t as DAEMON_BASE_URL } from "./daemon-client-C7qjQ2iO.js";
3
3
  import { t as webOriginConfig } from "./public-origin-xV0lm0Ty.js";
4
4
  import { i as BaziuLogo, n as ThemeToggle, r as PawIcon, t as Route$5 } from "./login-rDox7PRD.js";
5
5
  import { t as createSsrRpc } from "./createSsrRpc-6LHNEsSK.js";
6
- import { t as Route$6 } from "./routes-pcRy_Sf8.js";
6
+ import { t as Route$6 } from "./routes-B6x3pEW8.js";
7
7
  import { t as Route$7 } from "./teams-DFnuc660.js";
8
8
  import { t as Route$8 } from "./skills-Dw3cI3si.js";
9
9
  import { t as Route$9 } from "./config-Wy6hnZ-Z.js";
@@ -16,19 +16,21 @@ import { t as Route$15 } from "./services-DgoU1udp.js";
16
16
  import { t as Route$16 } from "./mcp-B0goWO8Q.js";
17
17
  import { t as Route$17 } from "./teams-BJuoNOTB.js";
18
18
  import { t as Route$18 } from "./agents-CJk4pxKu.js";
19
- import { t as Route$19 } from "./_id-DtIYuJJX.js";
20
- import { t as Route$20 } from "./_id-5pgKoid8.js";
21
- import { t as Route$21 } from "./results-N-kP4iFT.js";
22
- import { t as Route$22 } from "./policy-bLKwvnja.js";
23
- import { t as Route$23 } from "./memory-CVqnyUaM.js";
24
- import { t as Route$24 } from "./members-CD3GiTfF.js";
25
- import { t as Route$25 } from "./activity-C88qrNqv.js";
26
- import { t as Route$26 } from "./telegram-Zd1rIZxg.js";
27
- import { t as Route$27 } from "./triggers-BvjYNmmY.js";
28
- import { t as Route$28 } from "./learning-BaKM6qaw.js";
29
- import { t as Route$29 } from "./inbox-cu3jLzNP.js";
30
- import { t as Route$30 } from "./_id-BwvCtzlD.js";
31
- import { t as Route$31 } from "./_id-DFHB9JFQ.js";
19
+ import { t as Route$19 } from "./_id--onriuvj.js";
20
+ import { t as Route$20 } from "./_id-BN1BPEDI.js";
21
+ import { t as Route$21 } from "./verifications-CUq_6ZqL.js";
22
+ import { t as Route$22 } from "./review-c_-cFi7H.js";
23
+ import { t as Route$23 } from "./results-BFqs2iOu.js";
24
+ import { t as Route$24 } from "./policy-B62WXIFo.js";
25
+ import { t as Route$25 } from "./memory-lo2vHRNw.js";
26
+ import { t as Route$26 } from "./members-Bd0OtiTr.js";
27
+ import { t as Route$27 } from "./activity-Cu7zKPGD.js";
28
+ import { t as Route$28 } from "./telegram-Zd1rIZxg.js";
29
+ import { t as Route$29 } from "./triggers-BvjYNmmY.js";
30
+ import { t as Route$30 } from "./learning-BaKM6qaw.js";
31
+ import { t as Route$31 } from "./inbox-cu3jLzNP.js";
32
+ import { t as Route$32 } from "./_id-BwvCtzlD.js";
33
+ import { t as Route$33 } from "./_id-BYKpT2Tu.js";
32
34
  import { useEffect, useState } from "react";
33
35
  import { HeadContent, Link, Outlet, Scripts, createFileRoute, createRootRoute, createRouter, lazyRouteComponent, redirect, useRouterState } from "@tanstack/react-router";
34
36
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -333,7 +335,7 @@ function installCsrfFetch() {
333
335
  }
334
336
  //#endregion
335
337
  //#region src/styles.css?url
336
- var styles_default = "/assets/styles-d1yjBpud.css";
338
+ var styles_default = "/assets/styles-C6br2xxl.css";
337
339
  //#endregion
338
340
  //#region src/routes/__root.tsx
339
341
  var THEME_INIT_SCRIPT = `(function(){try{var t=localStorage.getItem('baziu-theme');var sd=window.matchMedia&&window.matchMedia('(prefers-color-scheme: dark)').matches;var d=t==='dark'||((t===null||t==='system')&&sd);document.documentElement.classList.toggle('dark',d);}catch(e){}})();`;
@@ -725,22 +727,32 @@ var AgentsIdIndexRoute = Route$20.update({
725
727
  path: "/agents/$id/",
726
728
  getParentRoute: () => Route$4
727
729
  });
728
- var TeamsIdResultsRoute = Route$21.update({
730
+ var TeamsIdVerificationsRoute = Route$21.update({
731
+ id: "/teams/$id/verifications",
732
+ path: "/teams/$id/verifications",
733
+ getParentRoute: () => Route$4
734
+ });
735
+ var TeamsIdReviewRoute = Route$22.update({
736
+ id: "/teams/$id/review",
737
+ path: "/teams/$id/review",
738
+ getParentRoute: () => Route$4
739
+ });
740
+ var TeamsIdResultsRoute = Route$23.update({
729
741
  id: "/teams/$id/results",
730
742
  path: "/teams/$id/results",
731
743
  getParentRoute: () => Route$4
732
744
  });
733
- var TeamsIdPolicyRoute = Route$22.update({
745
+ var TeamsIdPolicyRoute = Route$24.update({
734
746
  id: "/teams/$id/policy",
735
747
  path: "/teams/$id/policy",
736
748
  getParentRoute: () => Route$4
737
749
  });
738
- var TeamsIdMemoryRoute = Route$23.update({
750
+ var TeamsIdMemoryRoute = Route$25.update({
739
751
  id: "/teams/$id/memory",
740
752
  path: "/teams/$id/memory",
741
753
  getParentRoute: () => Route$4
742
754
  });
743
- var TeamsIdMembersRoute = Route$24.update({
755
+ var TeamsIdMembersRoute = Route$26.update({
744
756
  id: "/teams/$id/members",
745
757
  path: "/teams/$id/members",
746
758
  getParentRoute: () => Route$4
@@ -750,32 +762,32 @@ var TeamsIdContextRoute = Route.update({
750
762
  path: "/teams/$id/context",
751
763
  getParentRoute: () => Route$4
752
764
  });
753
- var TeamsIdActivityRoute = Route$25.update({
765
+ var TeamsIdActivityRoute = Route$27.update({
754
766
  id: "/teams/$id/activity",
755
767
  path: "/teams/$id/activity",
756
768
  getParentRoute: () => Route$4
757
769
  });
758
- var ConfigIntegrationsTelegramRoute = Route$26.update({
770
+ var ConfigIntegrationsTelegramRoute = Route$28.update({
759
771
  id: "/config/integrations/telegram",
760
772
  path: "/config/integrations/telegram",
761
773
  getParentRoute: () => Route$4
762
774
  });
763
- var AgentsIdTriggersRoute = Route$27.update({
775
+ var AgentsIdTriggersRoute = Route$29.update({
764
776
  id: "/agents/$id/triggers",
765
777
  path: "/agents/$id/triggers",
766
778
  getParentRoute: () => Route$4
767
779
  });
768
- var AgentsIdLearningRoute = Route$28.update({
780
+ var AgentsIdLearningRoute = Route$30.update({
769
781
  id: "/agents/$id/learning",
770
782
  path: "/agents/$id/learning",
771
783
  getParentRoute: () => Route$4
772
784
  });
773
- var AgentsIdInboxRoute = Route$29.update({
785
+ var AgentsIdInboxRoute = Route$31.update({
774
786
  id: "/agents/$id/inbox",
775
787
  path: "/agents/$id/inbox",
776
788
  getParentRoute: () => Route$4
777
789
  });
778
- var TemplatesTeamsIdIndexRoute = Route$30.update({
790
+ var TemplatesTeamsIdIndexRoute = Route$32.update({
779
791
  id: "/templates/teams/$id/",
780
792
  path: "/templates/teams/$id/",
781
793
  getParentRoute: () => Route$4
@@ -806,11 +818,13 @@ var rootRouteChildren = {
806
818
  TeamsIdMemoryRoute,
807
819
  TeamsIdPolicyRoute,
808
820
  TeamsIdResultsRoute,
821
+ TeamsIdReviewRoute,
822
+ TeamsIdVerificationsRoute,
809
823
  AgentsIdIndexRoute,
810
824
  TeamsIdIndexRoute,
811
825
  TemplatesAgentsIndexRoute,
812
826
  TemplatesTeamsIndexRoute,
813
- TemplatesAgentsIdIndexRoute: Route$31.update({
827
+ TemplatesAgentsIdIndexRoute: Route$33.update({
814
828
  id: "/templates/agents/$id/",
815
829
  path: "/templates/agents/$id/",
816
830
  getParentRoute: () => Route$4
@@ -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/index.tsx
5
- var $$splitComponentImporter = () => import("./routes-Dsh8F_7i.js");
5
+ var $$splitComponentImporter = () => import("./routes-DsUzzxk4.js");
6
6
  var fetchHomeData = createServerFn({ method: "POST" }).validator((d) => d).handler(createSsrRpc("26dbbcbe40063e8aedfd343cf1dfd4dfe5589f24591c0ba35e80c611d7c57c7c"));
7
7
  var Route = createFileRoute("/")({
8
8
  validateSearch: (s) => ({ agent: typeof s.agent === "string" ? s.agent : void 0 }),
@@ -1,6 +1,6 @@
1
1
  import { a as getCookie, 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-xWyYKAcx.js";
3
+ import { n as daemonClient, r as ApiClientError } from "./daemon-client-C7qjQ2iO.js";
4
4
  import { t as SIDEBAR_OPEN_GROUPS_COOKIE } from "./Sidebar-DKyk7oIo.js";
5
5
  //#region src/routes/index.tsx?tss-serverfn-split
6
6
  function parseOpenGroupsCookie(raw) {
@@ -1,5 +1,5 @@
1
- import { t as Route } from "./routes-pcRy_Sf8.js";
2
- import { t as ChatPane } from "./ChatPane-CS5oI7ef.js";
1
+ import { t as Route } from "./routes-B6x3pEW8.js";
2
+ import { t as ChatPane } from "./ChatPane-DybH39WK.js";
3
3
  import { n as Sidebar } from "./Sidebar-DKyk7oIo.js";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region src/routes/index.tsx?tsr-split=component
@@ -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-xWyYKAcx.js";
3
+ import { n as daemonClient } from "./daemon-client-C7qjQ2iO.js";
4
4
  //#region src/routes/config/services.tsx?tss-serverfn-split
5
5
  var fetchServices_createServerFn_handler = createServerRpc({
6
6
  id: "6afd81bef0ee381d6e3641cd8e269968429c874e2f9d56c8f818cc9d180ee477",
@@ -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-xWyYKAcx.js";
3
+ import { n as daemonClient } from "./daemon-client-C7qjQ2iO.js";
4
4
  //#region src/routes/skills/index.tsx?tss-serverfn-split
5
5
  var fetchSkills_createServerFn_handler = createServerRpc({
6
6
  id: "ae1d30575b229c1e2622fbaf2252800a9a7acc84afdd68cba025ca890b8d52c5",
@@ -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-xWyYKAcx.js";
3
+ import { n as daemonClient } from "./daemon-client-C7qjQ2iO.js";
4
4
  //#region src/routes/templates/teams/index.tsx?tss-serverfn-split
5
5
  var fetchTeams_createServerFn_handler = createServerRpc({
6
6
  id: "1bb12262aaa902fa208aafaa70b69c63da34c1fe523ab0322fe766903fc6b4c1",
@@ -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-xWyYKAcx.js";
3
+ import { n as daemonClient } from "./daemon-client-C7qjQ2iO.js";
4
4
  //#region src/routes/teams/index.tsx?tss-serverfn-split
5
5
  var fetchTeamsData_createServerFn_handler = createServerRpc({
6
6
  id: "1ab05a58944792f34ad279deeaa56f70e9360687856b18327f335b022e8d21a5",
@@ -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-xWyYKAcx.js";
3
+ import { n as daemonClient } from "./daemon-client-C7qjQ2iO.js";
4
4
  //#region src/routes/config/integrations/telegram.tsx?tss-serverfn-split
5
5
  var fetchTelegramConfig_createServerFn_handler = createServerRpc({
6
6
  id: "00a157dd07824e1f126f06646effd1d876f280f6fc64c144d2f6429414a4e58a",
@@ -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-xWyYKAcx.js";
3
+ import { n as daemonClient } from "./daemon-client-C7qjQ2iO.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-xWyYKAcx.js";
3
+ import { n as daemonClient, r as ApiClientError } from "./daemon-client-C7qjQ2iO.js";
4
4
  //#region src/routes/agents/$id/triggers.tsx?tss-serverfn-split
5
5
  var fetchTriggers_createServerFn_handler = createServerRpc({
6
6
  id: "57ebf437fdb3fcfc63b176e796a55f04bdfec0b230059673196e98d413d15c4d",