bazilion 0.15.0 → 0.17.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 (126) hide show
  1. package/dist/cli.js +1138 -687
  2. package/dist/cli.js.map +1 -1
  3. package/dist/daemon.js +8401 -4401
  4. package/dist/daemon.js.map +1 -1
  5. package/dist/migrations/0001_init.sql +109 -0
  6. package/dist/web/client/assets/ChatPane-BI3QVX2A.js +76 -0
  7. package/dist/web/client/assets/{ConfirmDialog-CGZzom9E.js → ConfirmDialog-Qam6Ut08.js} +1 -1
  8. package/dist/web/client/assets/{FieldRow-DYNU9gWb.js → FieldRow-swJ5qn2h.js} +1 -1
  9. package/dist/web/client/assets/ProductionTeamPolicyEditor-LGw1UuF-.js +7 -0
  10. package/dist/web/client/assets/ProfileCommunicationEditor-raoau_YB.js +1 -0
  11. package/dist/web/client/assets/{ResultSourceConversation-CGhKTSTD.js → ResultSourceConversation-BEwkhFog.js} +1 -1
  12. package/dist/web/client/assets/TeamTabs-BDdTLGIf.js +1 -0
  13. package/dist/web/client/assets/TemplatesTabs-BX5hhEJ7.js +1 -0
  14. package/dist/web/client/assets/{UnsavedChangesGuard-CFQcKsrf.js → UnsavedChangesGuard-CVJtmR1D.js} +1 -1
  15. package/dist/web/client/assets/{_id-D_eKokkd.js → _id-BQPOE3gj.js} +1 -1
  16. package/dist/web/client/assets/{_id-9nCIhbVd.js → _id-BkYrUP0R.js} +1 -1
  17. package/dist/web/client/assets/_id-CriixlZD.js +1 -0
  18. package/dist/web/client/assets/_id-DHqq2W34.js +1 -0
  19. package/dist/web/client/assets/{_id-BSu3AqKA.js → _id-DmEVZIlx.js} +1 -1
  20. package/dist/web/client/assets/activity-Bzr8R18n.js +1 -0
  21. package/dist/web/client/assets/{agents-NY3VrZgB.js → agents-13oafeOA.js} +1 -1
  22. package/dist/web/client/assets/{agents-CCmiZek6.js → agents-DF4NALmJ.js} +1 -1
  23. package/dist/web/client/assets/{approvals-CPDAPgrM.js → approvals-DsG0Ijls.js} +1 -1
  24. package/dist/web/client/assets/{attention-Qra_9_OI.js → attention-DG7K25mz.js} +1 -1
  25. package/dist/web/client/assets/chevron-right-DFqFHtLy.js +1 -0
  26. package/dist/web/client/assets/config-DAaDbFhS.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-C5W-sm1q.js → inbox-C9e7QjsX.js} +1 -1
  30. package/dist/web/client/assets/index-Dsstm2hf.js +50 -0
  31. package/dist/web/client/assets/{learning-Dr-7_7J4.js → learning-23arTd21.js} +1 -1
  32. package/dist/web/client/assets/login-BIXnBsuj.js +1 -0
  33. package/dist/web/client/assets/{mcp-BueuwQiv.js → mcp-Cdx9qAl8.js} +1 -1
  34. package/dist/web/client/assets/{members-ZikuYNcy.js → members-fotOz4rR.js} +1 -1
  35. package/dist/web/client/assets/{memory-1JUJlPrn.js → memory-C7UznVot.js} +1 -1
  36. package/dist/web/client/assets/policy-CactLW1X.js +1 -0
  37. package/dist/web/client/assets/{results-mMr8Ar2u.js → results-DqEuYnQH.js} +1 -1
  38. package/dist/web/client/assets/review-CnBSYclb.js +1 -0
  39. package/dist/web/client/assets/routes-COxMuwVz.js +1 -0
  40. package/dist/web/client/assets/{services-kfQA9cpJ.js → services-xEANwZAu.js} +1 -1
  41. package/dist/web/client/assets/{skills-C6pcgxaC.js → skills-CamV6wYM.js} +1 -1
  42. package/dist/web/client/assets/styles-C6br2xxl.css +2 -0
  43. package/dist/web/client/assets/{teams-LB0KBXY9.js → teams-B12dMSjW.js} +1 -1
  44. package/dist/web/client/assets/{teams-C6_Noz5X.js → teams-CbH43zSG.js} +1 -1
  45. package/dist/web/client/assets/{telegram-A2jaI1QM.js → telegram-muIql4u-.js} +1 -1
  46. package/dist/web/client/assets/{tokens-BGlUpJcL.js → tokens-DGFmApdF.js} +1 -1
  47. package/dist/web/client/assets/{triggers-C54_feGg.js → triggers-D8n3sCBW.js} +1 -1
  48. package/dist/web/client/assets/welcome-CMHWRZhs.js +1 -0
  49. package/dist/web/client/assets/x-BGCHwZOH.js +1 -0
  50. package/dist/web/server/assets/{ChatPane-DJ30FdFG.js → ChatPane-DybH39WK.js} +524 -15
  51. package/dist/web/server/assets/{ResultSourceConversation-zYogeOWp.js → ResultSourceConversation-BmXTcEOA.js} +1 -1
  52. package/dist/web/server/assets/{TeamTabs-TCKjCvMA.js → TeamTabs-DQXh-3ij.js} +4 -0
  53. package/dist/web/server/assets/{_id-1LwoHhJg.js → _id-BN1BPEDI.js} +1 -1
  54. package/dist/web/server/assets/{_id-DFHB9JFQ.js → _id-BYKpT2Tu.js} +1 -1
  55. package/dist/web/server/assets/{_id-B_-CDHOi2.js → _id-BqWTB8Wl.js} +1 -1
  56. package/dist/web/server/assets/{_id-BvSWsPI5.js → _id-CPfILjMa.js} +1 -1
  57. package/dist/web/server/assets/{_id-1hTvnKLN2.js → _id-C_2er0_G.js} +3 -3
  58. package/dist/web/server/assets/{_id-B2EEyStS.js → _id-DDyA9CGX.js} +1 -1
  59. package/dist/web/server/assets/{_id-DxFLSIio.js → _id-DSPFJMzf.js} +1 -1
  60. package/dist/web/server/assets/_id-DtJn-yzu.js +779 -0
  61. package/dist/web/server/assets/{_id-DDNVQx3y.js → _id-Dw3gKOGv.js} +1 -1
  62. package/dist/web/server/assets/{_id-T_8btpbB.js → _id-XkxlX036.js} +1 -1
  63. package/dist/web/server/assets/{_tanstack-start-manifest_v-DP4ZUBw3.js → _tanstack-start-manifest_v-vOXRfKJD.js} +97 -84
  64. package/dist/web/server/assets/{activity-C88qrNqv.js → activity-BX1jZBPQ.js} +1 -1
  65. package/dist/web/server/assets/{activity-5fWKPDxj.js → activity-bozPMU2v.js} +2 -2
  66. package/dist/web/server/assets/{activity-D73w4mkZ.js → activity-pYQPT3QT.js} +1 -1
  67. package/dist/web/server/assets/{agents-DRSo7lRX.js → agents-BKBfW700.js} +1 -1
  68. package/dist/web/server/assets/{agents-DB5hCSAI.js → agents-CVCfxnE2.js} +1 -1
  69. package/dist/web/server/assets/{approvals-4y9bZF4r.js → approvals-C3ya6B6U.js} +1 -1
  70. package/dist/web/server/assets/{attention-BFx8ZkmH.js → attention-l28hGCHS.js} +1 -1
  71. package/dist/web/server/assets/{auth-_eaCwhyq.js → auth-AvDFNeOv.js} +1 -1
  72. package/dist/web/server/assets/{config-B7JIfv_7.js → config-BWKn4XII.js} +1 -1
  73. package/dist/web/server/assets/{daemon-client-B06W1Qa2.js → daemon-client-Cgx-YW4l.js} +35 -0
  74. package/dist/web/server/assets/git-review-BB3M9nYg.js +26 -0
  75. package/dist/web/server/assets/git-review-f_uta4Mx.js +179 -0
  76. package/dist/web/server/assets/git-review-presentation-TJiHJhen.js +81 -0
  77. package/dist/web/server/assets/{inbox-YRpDQcvp.js → inbox-BBZiOOQs.js} +1 -1
  78. package/dist/web/server/assets/{learning-UBZb6h6M.js → learning-CheVay1i.js} +1 -1
  79. package/dist/web/server/assets/{mcp-Dv6RXMaS.js → mcp-DCBDmNtQ.js} +1 -1
  80. package/dist/web/server/assets/{members-BFTKSlOe.js → members-C2He8mrU.js} +1 -1
  81. package/dist/web/server/assets/{members-CD3GiTfF.js → members-C5FQruRZ.js} +1 -1
  82. package/dist/web/server/assets/{members-cc5SeEaW.js → members-C_2xB9pr.js} +2 -2
  83. package/dist/web/server/assets/{memory-CVqnyUaM.js → memory-4tI-UbOf.js} +1 -1
  84. package/dist/web/server/assets/{memory-C5i_GxlY.js → memory-BTcmf0sD.js} +2 -2
  85. package/dist/web/server/assets/{memory-D0PQgZAn.js → memory-rmiFNj7T.js} +1 -1
  86. package/dist/web/server/assets/{policy-Dgjb0_gK.js → policy-BGILKGHz.js} +2 -2
  87. package/dist/web/server/assets/{policy-bLKwvnja.js → policy-C3D2Q1EA.js} +1 -1
  88. package/dist/web/server/assets/{policy-C-p8HIhA.js → policy-DS7LGe--.js} +1 -1
  89. package/dist/web/server/assets/{results-Cfev4KNt.js → results-C6H42tjq.js} +1 -1
  90. package/dist/web/server/assets/{results-Cj-Dlw3C.js → results-Cgx7SrFt.js} +3 -3
  91. package/dist/web/server/assets/{results-CwEQ5EUL.js → results-_6K_zXQS.js} +1 -1
  92. package/dist/web/server/assets/review-DHhiL-JQ.js +393 -0
  93. package/dist/web/server/assets/review-DSTMCwP4.js +14 -0
  94. package/dist/web/server/assets/{router-d3sTMpMX.js → router-ElARvZzI.js} +34 -27
  95. package/dist/web/server/assets/{routes-B765DVhj.js → routes-B6x3pEW8.js} +1 -1
  96. package/dist/web/server/assets/{routes-cW4MWU18.js → routes-BgMvLvS-.js} +1 -1
  97. package/dist/web/server/assets/{routes-MIZz6uMr.js → routes-DsUzzxk4.js} +2 -2
  98. package/dist/web/server/assets/{services-BCbdn3R9.js → services-yHZroxsi.js} +1 -1
  99. package/dist/web/server/assets/{skills-Bpoa8MIp.js → skills--bIKID1Q.js} +1 -1
  100. package/dist/web/server/assets/{teams-hWGjbpUA.js → teams--a956vWL.js} +1 -1
  101. package/dist/web/server/assets/{teams-CXzwqzcE.js → teams-BbRfuVXY.js} +1 -1
  102. package/dist/web/server/assets/{telegram-DhpvtGUc.js → telegram-4kMxRtVZ.js} +1 -1
  103. package/dist/web/server/assets/{tokens-Bjp19Vkn.js → tokens-BYwTN9JZ.js} +1 -1
  104. package/dist/web/server/assets/{triggers-DJlcvXzn.js → triggers-BM6mzLuH.js} +1 -1
  105. package/dist/web/server/server.js +56 -28
  106. package/dist/worker.js +2214 -1132
  107. package/dist/worker.js.map +1 -1
  108. package/package.json +3 -3
  109. package/dist/web/client/assets/ChatPane-55j13bBj.js +0 -74
  110. package/dist/web/client/assets/ProductionTeamPolicyEditor-DT5Sl8jd.js +0 -7
  111. package/dist/web/client/assets/ProfileCommunicationEditor-TyCU5vXX.js +0 -1
  112. package/dist/web/client/assets/TeamTabs-BZHyRnbd.js +0 -1
  113. package/dist/web/client/assets/TemplatesTabs-BHzkPMRC.js +0 -1
  114. package/dist/web/client/assets/_id-CGd21j3k.js +0 -1
  115. package/dist/web/client/assets/_id-SRMFlIgP.js +0 -1
  116. package/dist/web/client/assets/activity-Cn2-9PpZ.js +0 -1
  117. package/dist/web/client/assets/chevron-right-DXE4CWf2.js +0 -1
  118. package/dist/web/client/assets/config-D8EO0LPB.js +0 -3
  119. package/dist/web/client/assets/index-BUhhk_u9.js +0 -52
  120. package/dist/web/client/assets/login-Bu5UxbJh.js +0 -1
  121. package/dist/web/client/assets/policy-DbkhsFNA.js +0 -1
  122. package/dist/web/client/assets/routes-DJYB-MS9.js +0 -1
  123. package/dist/web/client/assets/styles-CcNf8jT_.css +0 -2
  124. package/dist/web/client/assets/welcome-DyUIswRi.js +0 -1
  125. package/dist/web/client/assets/x-BY2MPLr9.js +0 -1
  126. package/dist/web/server/assets/_id-CDBtO_jL.js +0 -381
@@ -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-DSTMCwP4.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-DQXh-3ij.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-DHhiL-JQ.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-B06W1Qa2.js";
2
+ import { t as DAEMON_BASE_URL } from "./daemon-client-Cgx-YW4l.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-B765DVhj.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,20 @@ 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-B2EEyStS.js";
20
- import { t as Route$20 } from "./_id-1LwoHhJg.js";
21
- import { t as Route$21 } from "./results-CwEQ5EUL.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-DDyA9CGX.js";
20
+ import { t as Route$20 } from "./_id-BN1BPEDI.js";
21
+ import { t as Route$21 } from "./review-DSTMCwP4.js";
22
+ import { t as Route$22 } from "./results-_6K_zXQS.js";
23
+ import { t as Route$23 } from "./policy-C3D2Q1EA.js";
24
+ import { t as Route$24 } from "./memory-4tI-UbOf.js";
25
+ import { t as Route$25 } from "./members-C5FQruRZ.js";
26
+ import { t as Route$26 } from "./activity-BX1jZBPQ.js";
27
+ import { t as Route$27 } from "./telegram-Zd1rIZxg.js";
28
+ import { t as Route$28 } from "./triggers-BvjYNmmY.js";
29
+ import { t as Route$29 } from "./learning-BaKM6qaw.js";
30
+ import { t as Route$30 } from "./inbox-cu3jLzNP.js";
31
+ import { t as Route$31 } from "./_id-BwvCtzlD.js";
32
+ import { t as Route$32 } from "./_id-BYKpT2Tu.js";
32
33
  import { useEffect, useState } from "react";
33
34
  import { HeadContent, Link, Outlet, Scripts, createFileRoute, createRootRoute, createRouter, lazyRouteComponent, redirect, useRouterState } from "@tanstack/react-router";
34
35
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
@@ -333,7 +334,7 @@ function installCsrfFetch() {
333
334
  }
334
335
  //#endregion
335
336
  //#region src/styles.css?url
336
- var styles_default = "/assets/styles-CcNf8jT_.css";
337
+ var styles_default = "/assets/styles-C6br2xxl.css";
337
338
  //#endregion
338
339
  //#region src/routes/__root.tsx
339
340
  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 +726,27 @@ var AgentsIdIndexRoute = Route$20.update({
725
726
  path: "/agents/$id/",
726
727
  getParentRoute: () => Route$4
727
728
  });
728
- var TeamsIdResultsRoute = Route$21.update({
729
+ var TeamsIdReviewRoute = Route$21.update({
730
+ id: "/teams/$id/review",
731
+ path: "/teams/$id/review",
732
+ getParentRoute: () => Route$4
733
+ });
734
+ var TeamsIdResultsRoute = Route$22.update({
729
735
  id: "/teams/$id/results",
730
736
  path: "/teams/$id/results",
731
737
  getParentRoute: () => Route$4
732
738
  });
733
- var TeamsIdPolicyRoute = Route$22.update({
739
+ var TeamsIdPolicyRoute = Route$23.update({
734
740
  id: "/teams/$id/policy",
735
741
  path: "/teams/$id/policy",
736
742
  getParentRoute: () => Route$4
737
743
  });
738
- var TeamsIdMemoryRoute = Route$23.update({
744
+ var TeamsIdMemoryRoute = Route$24.update({
739
745
  id: "/teams/$id/memory",
740
746
  path: "/teams/$id/memory",
741
747
  getParentRoute: () => Route$4
742
748
  });
743
- var TeamsIdMembersRoute = Route$24.update({
749
+ var TeamsIdMembersRoute = Route$25.update({
744
750
  id: "/teams/$id/members",
745
751
  path: "/teams/$id/members",
746
752
  getParentRoute: () => Route$4
@@ -750,32 +756,32 @@ var TeamsIdContextRoute = Route.update({
750
756
  path: "/teams/$id/context",
751
757
  getParentRoute: () => Route$4
752
758
  });
753
- var TeamsIdActivityRoute = Route$25.update({
759
+ var TeamsIdActivityRoute = Route$26.update({
754
760
  id: "/teams/$id/activity",
755
761
  path: "/teams/$id/activity",
756
762
  getParentRoute: () => Route$4
757
763
  });
758
- var ConfigIntegrationsTelegramRoute = Route$26.update({
764
+ var ConfigIntegrationsTelegramRoute = Route$27.update({
759
765
  id: "/config/integrations/telegram",
760
766
  path: "/config/integrations/telegram",
761
767
  getParentRoute: () => Route$4
762
768
  });
763
- var AgentsIdTriggersRoute = Route$27.update({
769
+ var AgentsIdTriggersRoute = Route$28.update({
764
770
  id: "/agents/$id/triggers",
765
771
  path: "/agents/$id/triggers",
766
772
  getParentRoute: () => Route$4
767
773
  });
768
- var AgentsIdLearningRoute = Route$28.update({
774
+ var AgentsIdLearningRoute = Route$29.update({
769
775
  id: "/agents/$id/learning",
770
776
  path: "/agents/$id/learning",
771
777
  getParentRoute: () => Route$4
772
778
  });
773
- var AgentsIdInboxRoute = Route$29.update({
779
+ var AgentsIdInboxRoute = Route$30.update({
774
780
  id: "/agents/$id/inbox",
775
781
  path: "/agents/$id/inbox",
776
782
  getParentRoute: () => Route$4
777
783
  });
778
- var TemplatesTeamsIdIndexRoute = Route$30.update({
784
+ var TemplatesTeamsIdIndexRoute = Route$31.update({
779
785
  id: "/templates/teams/$id/",
780
786
  path: "/templates/teams/$id/",
781
787
  getParentRoute: () => Route$4
@@ -806,11 +812,12 @@ var rootRouteChildren = {
806
812
  TeamsIdMemoryRoute,
807
813
  TeamsIdPolicyRoute,
808
814
  TeamsIdResultsRoute,
815
+ TeamsIdReviewRoute,
809
816
  AgentsIdIndexRoute,
810
817
  TeamsIdIndexRoute,
811
818
  TemplatesAgentsIndexRoute,
812
819
  TemplatesTeamsIndexRoute,
813
- TemplatesAgentsIdIndexRoute: Route$31.update({
820
+ TemplatesAgentsIdIndexRoute: Route$32.update({
814
821
  id: "/templates/agents/$id/",
815
822
  path: "/templates/agents/$id/",
816
823
  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-MIZz6uMr.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-B06W1Qa2.js";
3
+ import { n as daemonClient, r as ApiClientError } from "./daemon-client-Cgx-YW4l.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-B765DVhj.js";
2
- import { t as ChatPane } from "./ChatPane-DJ30FdFG.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-B06W1Qa2.js";
3
+ import { n as daemonClient } from "./daemon-client-Cgx-YW4l.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-B06W1Qa2.js";
3
+ import { n as daemonClient } from "./daemon-client-Cgx-YW4l.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-B06W1Qa2.js";
3
+ import { n as daemonClient } from "./daemon-client-Cgx-YW4l.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-B06W1Qa2.js";
3
+ import { n as daemonClient } from "./daemon-client-Cgx-YW4l.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-B06W1Qa2.js";
3
+ import { n as daemonClient } from "./daemon-client-Cgx-YW4l.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-B06W1Qa2.js";
3
+ import { n as daemonClient } from "./daemon-client-Cgx-YW4l.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-B06W1Qa2.js";
3
+ import { n as daemonClient, r as ApiClientError } from "./daemon-client-Cgx-YW4l.js";
4
4
  //#region src/routes/agents/$id/triggers.tsx?tss-serverfn-split
5
5
  var fetchTriggers_createServerFn_handler = createServerRpc({
6
6
  id: "57ebf437fdb3fcfc63b176e796a55f04bdfec0b230059673196e98d413d15c4d",