@stigmer/ink 3.1.1 → 3.1.3

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 (45) hide show
  1. package/app/SessionView.d.ts.map +1 -1
  2. package/app/SessionView.js +12 -1
  3. package/app/SessionView.js.map +1 -1
  4. package/components/FileChangeProgressBar.d.ts +46 -0
  5. package/components/FileChangeProgressBar.d.ts.map +1 -0
  6. package/components/FileChangeProgressBar.js +55 -0
  7. package/components/FileChangeProgressBar.js.map +1 -0
  8. package/components/FileReviewPrompt.d.ts +43 -0
  9. package/components/FileReviewPrompt.d.ts.map +1 -0
  10. package/components/FileReviewPrompt.js +172 -0
  11. package/components/FileReviewPrompt.js.map +1 -0
  12. package/components/FileReviewRecord.d.ts +18 -0
  13. package/components/FileReviewRecord.d.ts.map +1 -0
  14. package/components/FileReviewRecord.js +32 -0
  15. package/components/FileReviewRecord.js.map +1 -0
  16. package/components/MessageThread.d.ts +19 -7
  17. package/components/MessageThread.d.ts.map +1 -1
  18. package/components/MessageThread.js +145 -77
  19. package/components/MessageThread.js.map +1 -1
  20. package/components/ToolCallGroup.d.ts.map +1 -1
  21. package/components/ToolCallGroup.js +42 -2
  22. package/components/ToolCallGroup.js.map +1 -1
  23. package/components/ToolCallItem.d.ts.map +1 -1
  24. package/components/ToolCallItem.js +16 -1
  25. package/components/ToolCallItem.js.map +1 -1
  26. package/file-review.d.ts +48 -0
  27. package/file-review.d.ts.map +1 -0
  28. package/file-review.js +113 -0
  29. package/file-review.js.map +1 -0
  30. package/index.d.ts +4 -0
  31. package/index.d.ts.map +1 -1
  32. package/index.js +5 -0
  33. package/index.js.map +1 -1
  34. package/package.json +4 -4
  35. package/src/__tests__/file-change-progress.test.tsx +295 -0
  36. package/src/__tests__/file-review.test.tsx +496 -0
  37. package/src/app/SessionView.tsx +51 -3
  38. package/src/components/FileChangeProgressBar.tsx +122 -0
  39. package/src/components/FileReviewPrompt.tsx +328 -0
  40. package/src/components/FileReviewRecord.tsx +63 -0
  41. package/src/components/MessageThread.tsx +199 -96
  42. package/src/components/ToolCallGroup.tsx +50 -1
  43. package/src/components/ToolCallItem.tsx +25 -0
  44. package/src/file-review.ts +135 -0
  45. package/src/index.ts +17 -0
@@ -3,62 +3,118 @@ import { useMemo } from "react";
3
3
  import { Box, Text, Static } from "ink";
4
4
  import { create } from "@bufbuild/protobuf";
5
5
  import { AgentMessageSchema } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/message_pb";
6
- import { ExecutionPhase, MessageType, } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
7
- import { isTerminalPhase } from "@stigmer/react";
6
+ import { ExecutionPhase, FileChangeSetStatus, MessageType, } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
7
+ import { isTerminalPhase, FileReviewContext, } from "@stigmer/react";
8
+ import { displayFileChangeSets } from "@stigmer/sdk";
8
9
  import { MessageEntry } from "./MessageEntry.js";
9
10
  import { ToolCallGroup } from "./ToolCallGroup.js";
10
11
  import { SubAgentBlock } from "./SubAgentBlock.js";
11
12
  import { ExecutionProgress } from "./ExecutionProgress.js";
12
13
  import { ApprovalPrompt } from "./ApprovalPrompt.js";
13
- function buildThreadItems(executions, activeStreamExecution, pendingUserMessage, includeApprovals) {
14
- const items = [];
15
- const allExecutions = activeStreamExecution
16
- ? [...executions, activeStreamExecution]
17
- : executions;
18
- for (let ei = 0; ei < allExecutions.length; ei++) {
19
- const exec = allExecutions[ei];
20
- const messages = exec.status?.messages ?? [];
21
- const subAgents = exec.status?.subAgentExecutions ?? [];
22
- const specMessage = exec.spec?.message;
23
- if (specMessage && specMessage !== "execute") {
24
- const humanMsg = create(AgentMessageSchema);
25
- humanMsg.type = MessageType.MESSAGE_HUMAN;
26
- humanMsg.content = specMessage;
27
- items.push({ kind: "message", message: humanMsg, key: `e${ei}-spec` });
14
+ import { FileReviewRecord } from "./FileReviewRecord.js";
15
+ /** A change set is "settled" once a decision has been folded (or reconcile failed). */
16
+ function isSettledSet(status) {
17
+ return (status === FileChangeSetStatus.DECIDED ||
18
+ status === FileChangeSetStatus.RECONCILED ||
19
+ status === FileChangeSetStatus.FAILED);
20
+ }
21
+ /**
22
+ * Builds the observational thread items for a single execution: the spec
23
+ * message, each AI/human message, tool-call groups, and sub-agent blocks —
24
+ * plus (when `includeFileReviewRecords`) a read-only settled record appended at
25
+ * the execution's tail for each decided/reconciled/failed change set.
26
+ */
27
+ function buildExecutionSegment(exec, ei, includeFileReviewRecords) {
28
+ const seg = [];
29
+ const messages = exec.status?.messages ?? [];
30
+ const subAgents = exec.status?.subAgentExecutions ?? [];
31
+ const specMessage = exec.spec?.message;
32
+ if (specMessage && specMessage !== "execute") {
33
+ const humanMsg = create(AgentMessageSchema);
34
+ humanMsg.type = MessageType.MESSAGE_HUMAN;
35
+ humanMsg.content = specMessage;
36
+ seg.push({ kind: "message", message: humanMsg, key: `e${ei}-spec` });
37
+ }
38
+ for (let mi = 0; mi < messages.length; mi++) {
39
+ const msg = messages[mi];
40
+ if (msg.type === MessageType.MESSAGE_TOOL)
41
+ continue;
42
+ const isEmptyAi = msg.type === MessageType.MESSAGE_AI && !msg.content.trim();
43
+ if (!isEmptyAi) {
44
+ seg.push({ kind: "message", message: msg, key: `e${ei}-m${mi}` });
28
45
  }
29
- for (let mi = 0; mi < messages.length; mi++) {
30
- const msg = messages[mi];
31
- if (msg.type === MessageType.MESSAGE_TOOL)
32
- continue;
33
- const isEmptyAi = msg.type === MessageType.MESSAGE_AI && !msg.content.trim();
34
- if (!isEmptyAi) {
35
- items.push({ kind: "message", message: msg, key: `e${ei}-m${mi}` });
46
+ if (msg.type === MessageType.MESSAGE_AI && msg.toolCalls.length > 0) {
47
+ // Split tool calls: "task" tools become sub-agent blocks,
48
+ // everything else goes into a regular tool group.
49
+ const regularTools = msg.toolCalls.filter((tc) => tc.name !== "task");
50
+ const taskTools = msg.toolCalls.filter((tc) => tc.name === "task");
51
+ if (regularTools.length > 0) {
52
+ seg.push({
53
+ kind: "tool-group",
54
+ toolCalls: regularTools,
55
+ key: `e${ei}-m${mi}-tc`,
56
+ });
36
57
  }
37
- if (msg.type === MessageType.MESSAGE_AI && msg.toolCalls.length > 0) {
38
- // Split tool calls: "task" tools become sub-agent blocks,
39
- // everything else goes into a regular tool group.
40
- const regularTools = msg.toolCalls.filter((tc) => tc.name !== "task");
41
- const taskTools = msg.toolCalls.filter((tc) => tc.name === "task");
42
- if (regularTools.length > 0) {
43
- items.push({
44
- kind: "tool-group",
45
- toolCalls: regularTools,
46
- key: `e${ei}-m${mi}-tc`,
58
+ for (let ti = 0; ti < taskTools.length; ti++) {
59
+ const matchedSub = subAgents.find((sa) => sa.id === taskTools[ti].id);
60
+ if (matchedSub) {
61
+ seg.push({
62
+ kind: "sub-agent",
63
+ subAgent: matchedSub,
64
+ key: `e${ei}-m${mi}-sa-${ti}`,
47
65
  });
48
66
  }
49
- for (let ti = 0; ti < taskTools.length; ti++) {
50
- const matchedSub = subAgents.find((sa) => sa.id === taskTools[ti].id);
51
- if (matchedSub) {
52
- items.push({
53
- kind: "sub-agent",
54
- subAgent: matchedSub,
55
- key: `e${ei}-m${mi}-sa-${ti}`,
56
- });
57
- }
58
- }
59
67
  }
60
68
  }
61
69
  }
70
+ if (includeFileReviewRecords) {
71
+ // `displayFileChangeSets` returns the server projection for a live
72
+ // execution and folds the durable ledger for a terminal one, so a settled
73
+ // record renders for both. Appended at the segment tail (the terminal
74
+ // analogue of the web's last-stamped-row anchor); this is the only trace a
75
+ // shell-made set — which stamps no rows — leaves behind (DD-27 D2).
76
+ for (const set of displayFileChangeSets(exec.status)) {
77
+ if (!isSettledSet(set.status) || set.changes.length === 0)
78
+ continue;
79
+ seg.push({ kind: "file-review-record", set, key: `e${ei}-frr-${set.id}` });
80
+ }
81
+ }
82
+ return seg;
83
+ }
84
+ /**
85
+ * Builds the full thread item list and the index at which the live region
86
+ * begins (`liveStart`).
87
+ *
88
+ * The split is by execution identity, not a trailing count: every completed
89
+ * execution's items are immutable history (safe for ink's append-only
90
+ * `<Static>`), while the active execution's items — plus the trailing transient
91
+ * items (phase, approvals, optimistic pending message) — stay live so their
92
+ * review badges can transition and the optimistic message can be cleared
93
+ * without shrinking the Static array.
94
+ */
95
+ function buildThreadItems(executions, activeStreamExecution, pendingUserMessage, includeApprovals, includeFileReviewRecords) {
96
+ const items = [];
97
+ const allExecutions = activeStreamExecution
98
+ ? [...executions, activeStreamExecution]
99
+ : executions;
100
+ // Boundary between immutable history and the live region. When there is an
101
+ // active execution, it is the item count right before that execution's
102
+ // segment; otherwise the transient tail (below) is the only live region.
103
+ let liveStart = 0;
104
+ let liveStartSet = false;
105
+ for (let ei = 0; ei < allExecutions.length; ei++) {
106
+ if (activeStreamExecution && ei === executions.length) {
107
+ liveStart = items.length;
108
+ liveStartSet = true;
109
+ }
110
+ items.push(...buildExecutionSegment(allExecutions[ei], ei, includeFileReviewRecords));
111
+ }
112
+ if (!liveStartSet) {
113
+ // No active execution: every execution body is history; only the transient
114
+ // tail appended below (e.g. an optimistic pending message) stays live.
115
+ liveStart = items.length;
116
+ }
117
+ // --- Transient tail (always live) ---
62
118
  const lastExec = allExecutions[allExecutions.length - 1];
63
119
  const lastPhase = lastExec?.status?.phase ?? ExecutionPhase.EXECUTION_PHASE_UNSPECIFIED;
64
120
  if (isTerminalPhase(lastPhase) &&
@@ -85,47 +141,57 @@ function buildThreadItems(executions, activeStreamExecution, pendingUserMessage,
85
141
  });
86
142
  }
87
143
  }
88
- return items;
144
+ return { items, liveStart };
145
+ }
146
+ /**
147
+ * Builds the id→change-set map that backs the file-review row badges, folding
148
+ * every execution's change sets (via `displayFileChangeSets`, which reads the
149
+ * live projection or the durable ledger). The active stream wins on an id
150
+ * collision so a live decision is reflected before it is persisted.
151
+ */
152
+ function buildChangeSetsById(executions, activeStreamExecution) {
153
+ const changeSetsById = new Map();
154
+ for (const exec of executions) {
155
+ for (const set of displayFileChangeSets(exec.status)) {
156
+ changeSetsById.set(set.id, set);
157
+ }
158
+ }
159
+ if (activeStreamExecution) {
160
+ for (const set of displayFileChangeSets(activeStreamExecution.status)) {
161
+ changeSetsById.set(set.id, set);
162
+ }
163
+ }
164
+ return { changeSetsById };
89
165
  }
90
166
  /**
91
167
  * Renders a continuous conversation thread from one or more
92
168
  * `AgentExecution` snapshots in the terminal.
93
169
  *
94
- * Composes {@link MessageEntry}, {@link ToolCallGroup},
95
- * {@link ExecutionProgress}, and {@link ApprovalPrompt} into a
96
- * scrolling terminal log.
170
+ * Composes {@link MessageEntry}, {@link ToolCallGroup}, {@link SubAgentBlock},
171
+ * {@link ExecutionProgress}, {@link ApprovalPrompt}, and (for settled change
172
+ * sets) {@link FileReviewRecord} into a scrolling terminal log.
97
173
  *
98
- * Historical items are rendered via Ink's `<Static>` component so
99
- * they are written once and don't re-render, keeping terminal
100
- * output efficient for long conversations.
174
+ * Completed executions are rendered via Ink's `<Static>` component so they are
175
+ * written once and don't re-render, keeping terminal output efficient for long
176
+ * conversations. The active execution renders live so its file-review row
177
+ * badges transition (Pending review → Kept/Discarded) in place, then freeze
178
+ * into `<Static>` when the execution reaches a terminal phase. The thread is
179
+ * wrapped in a `FileReviewContext` provider so every {@link ToolCallItem}
180
+ * can badge its stamped edit rows.
101
181
  */
102
- export function MessageThread({ executions, activeStreamExecution, pendingUserMessage, onApprovalSubmit, submittingApprovalIds, expandToolCalls = false, }) {
182
+ export function MessageThread({ executions, activeStreamExecution, pendingUserMessage, onApprovalSubmit, submittingApprovalIds, expandToolCalls = false, showFileReviewRecords = false, }) {
103
183
  const includeApprovals = onApprovalSubmit != null;
104
- const items = useMemo(() => buildThreadItems(executions, activeStreamExecution, pendingUserMessage, includeApprovals), [executions, activeStreamExecution, pendingUserMessage, includeApprovals]);
105
- const historyItems = activeStreamExecution ? items.slice(0, -getActiveCount(items)) : items;
106
- const liveItems = activeStreamExecution ? items.slice(items.length - getActiveCount(items)) : [];
107
- return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Static, { items: historyItems, children: (item) => (_jsx(Box, { flexDirection: "column", marginBottom: 1, children: renderItem(item, onApprovalSubmit, submittingApprovalIds, expandToolCalls) }, item.key)) }), liveItems.map((item) => (_jsx(Box, { flexDirection: "column", marginBottom: 1, children: renderItem(item, onApprovalSubmit, submittingApprovalIds, expandToolCalls) }, item.key)))] }));
108
- }
109
- function getActiveCount(items) {
110
- let count = 0;
111
- for (let i = items.length - 1; i >= 0; i--) {
112
- const item = items[i];
113
- if (item.kind === "approval" ||
114
- item.kind === "pending-message" ||
115
- item.kind === "phase") {
116
- count++;
117
- }
118
- else if (item.kind === "message" &&
119
- item.message.type === MessageType.MESSAGE_AI &&
120
- item.message.isStreaming) {
121
- count++;
122
- break;
123
- }
124
- else {
125
- break;
126
- }
127
- }
128
- return count;
184
+ const { items, liveStart } = useMemo(() => buildThreadItems(executions, activeStreamExecution, pendingUserMessage, includeApprovals, showFileReviewRecords), [
185
+ executions,
186
+ activeStreamExecution,
187
+ pendingUserMessage,
188
+ includeApprovals,
189
+ showFileReviewRecords,
190
+ ]);
191
+ const fileReviewContext = useMemo(() => buildChangeSetsById(executions, activeStreamExecution), [executions, activeStreamExecution]);
192
+ const historyItems = items.slice(0, liveStart);
193
+ const liveItems = items.slice(liveStart);
194
+ return (_jsx(FileReviewContext.Provider, { value: fileReviewContext, children: _jsxs(Box, { flexDirection: "column", children: [_jsx(Static, { items: historyItems, children: (item) => (_jsx(Box, { flexDirection: "column", marginBottom: 1, children: renderItem(item, onApprovalSubmit, submittingApprovalIds, expandToolCalls) }, item.key)) }), liveItems.map((item) => (_jsx(Box, { flexDirection: "column", marginBottom: 1, children: renderItem(item, onApprovalSubmit, submittingApprovalIds, expandToolCalls) }, item.key)))] }) }));
129
195
  }
130
196
  function renderItem(item, onApprovalSubmit, submittingApprovalIds, expandToolCalls) {
131
197
  switch (item.kind) {
@@ -137,6 +203,8 @@ function renderItem(item, onApprovalSubmit, submittingApprovalIds, expandToolCal
137
203
  return _jsx(SubAgentBlock, { subAgent: item.subAgent, defaultExpanded: expandToolCalls });
138
204
  case "phase":
139
205
  return _jsx(ExecutionProgress, { phase: item.phase });
206
+ case "file-review-record":
207
+ return _jsx(FileReviewRecord, { fileChangeSet: item.set });
140
208
  case "approval":
141
209
  return onApprovalSubmit ? (_jsx(ApprovalPrompt, { pendingApproval: item.pendingApproval, onSubmit: (action) => onApprovalSubmit(item.pendingApproval.toolCallId, action), isSubmitting: submittingApprovalIds?.has(item.pendingApproval.toolCallId) ?? false })) : null;
142
210
  case "pending-message":
@@ -1 +1 @@
1
- {"version":3,"file":"MessageThread.js","sourceRoot":"","sources":["../../src/components/MessageThread.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MessageThread.js","sourceRoot":"","sources":["../../src/components/MessageThread.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ToolCallGroup.d.ts","sourceRoot":"","sources":["../../src/components/ToolCallGroup.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iEAAiE,CAAC;AAIhG,uCAAuC;AACvC,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IACxC,wEAAwE;IACxE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC;AA8BD;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,SAAiB,EACjB,eAAuB,GACxB,EAAE,kBAAkB,2CAmCpB"}
1
+ {"version":3,"file":"ToolCallGroup.d.ts","sourceRoot":"","sources":["../../src/components/ToolCallGroup.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iEAAiE,CAAC;AAUhG,uCAAuC;AACvC,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IACxC,wEAAwE;IACxE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACpC;AAqED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,EAC5B,SAAS,EACT,SAAiB,EACjB,eAAuB,GACxB,EAAE,kBAAkB,2CAuCpB"}
@@ -1,7 +1,8 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { useState } from "react";
2
+ import { useContext, useState } from "react";
3
3
  import { Box, Text, useInput } from "ink";
4
4
  import { ToolCallStatus } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
5
+ import { FileReviewContext, fileReviewRowState, extractPrimaryArg, } from "@stigmer/react";
5
6
  import { ToolCallItem } from "./ToolCallItem.js";
6
7
  function deriveAggregateStatus(toolCalls) {
7
8
  let hasRunning = false;
@@ -26,6 +27,44 @@ const STATUS_STYLE = {
26
27
  failed: { symbol: "✗", color: "red" },
27
28
  pending: { symbol: "○" },
28
29
  };
30
+ /**
31
+ * A compact file-review cue for the collapsed summary line, so a pending edit is
32
+ * visible without expanding the group. Folds the group's stamped edit rows via
33
+ * the same pure {@link fileReviewRowState} the per-row badges use, reading the
34
+ * change sets from {@link FileReviewContext}. Pending takes precedence (it is
35
+ * the actionable state); otherwise a settled group shows its kept/discarded
36
+ * tally. Returns `null` when no row in the group is stamped.
37
+ */
38
+ function useReviewCue(toolCalls) {
39
+ const { changeSetsById } = useContext(FileReviewContext);
40
+ const counts = {
41
+ pending: 0,
42
+ kept: 0,
43
+ discarded: 0,
44
+ failed: 0,
45
+ };
46
+ for (const tc of toolCalls) {
47
+ if (!tc.fileChangeSetId)
48
+ continue;
49
+ const state = fileReviewRowState(changeSetsById.get(tc.fileChangeSetId), extractPrimaryArg(tc));
50
+ if (state)
51
+ counts[state]++;
52
+ }
53
+ if (counts.pending > 0) {
54
+ return { label: `${counts.pending} pending review`, color: "yellow" };
55
+ }
56
+ if (counts.failed > 0) {
57
+ return { label: `${counts.failed} review failed`, color: "red" };
58
+ }
59
+ const settled = [];
60
+ if (counts.kept > 0)
61
+ settled.push(`${counts.kept} kept`);
62
+ if (counts.discarded > 0)
63
+ settled.push(`${counts.discarded} discarded`);
64
+ if (settled.length > 0)
65
+ return { label: settled.join(" · "), color: "gray" };
66
+ return null;
67
+ }
29
68
  /**
30
69
  * Renders a collapsible group of tool calls with an aggregate status.
31
70
  *
@@ -38,6 +77,7 @@ export function ToolCallGroup({ toolCalls, isFocused = false, defaultExpanded =
38
77
  const [expanded, setExpanded] = useState(defaultExpanded);
39
78
  const status = deriveAggregateStatus(toolCalls);
40
79
  const style = STATUS_STYLE[status];
80
+ const reviewCue = useReviewCue(toolCalls);
41
81
  useInput((_input, key) => {
42
82
  if (key.return || _input === " ") {
43
83
  setExpanded((prev) => !prev);
@@ -46,6 +86,6 @@ export function ToolCallGroup({ toolCalls, isFocused = false, defaultExpanded =
46
86
  const summary = toolCalls.length === 1
47
87
  ? toolCalls[0].name
48
88
  : `${toolCalls.length} tool calls`;
49
- return (_jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsxs(Box, { gap: 1, children: [_jsx(Text, { color: style.color, children: style.symbol }), _jsx(Text, { dimColor: true, children: expanded ? "▼" : "▶" }), _jsx(Text, { children: summary })] }), expanded && (_jsx(Box, { flexDirection: "column", paddingLeft: 2, marginTop: 1, children: toolCalls.map((tc) => (_jsx(ToolCallItem, { toolCall: tc, expanded: true }, tc.id))) }))] }));
89
+ return (_jsxs(Box, { flexDirection: "column", paddingLeft: 2, children: [_jsxs(Box, { gap: 1, children: [_jsx(Text, { color: style.color, children: style.symbol }), _jsx(Text, { dimColor: true, children: expanded ? "▼" : "▶" }), _jsx(Text, { children: summary }), reviewCue && (_jsxs(Text, { color: reviewCue.color, children: ["\u00B7 ", reviewCue.label] }))] }), expanded && (_jsx(Box, { flexDirection: "column", paddingLeft: 2, marginTop: 1, children: toolCalls.map((tc) => (_jsx(ToolCallItem, { toolCall: tc, expanded: true }, tc.id))) }))] }));
50
90
  }
51
91
  //# sourceMappingURL=ToolCallGroup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ToolCallGroup.js","sourceRoot":"","sources":["../../src/components/ToolCallGroup.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ToolCallGroup.js","sourceRoot":"","sources":["../../src/components/ToolCallGroup.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ToolCallItem.d.ts","sourceRoot":"","sources":["../../src/components/ToolCallItem.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iEAAiE,CAAC;AAKhG,sCAAsC;AACtC,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AA0BD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,QAAgB,EAAE,EAAE,iBAAiB,2CAoC7E"}
1
+ {"version":3,"file":"ToolCallItem.d.ts","sourceRoot":"","sources":["../../src/components/ToolCallItem.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iEAAiE,CAAC;AAUhG,sCAAsC;AACtC,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;CAC7B;AAmCD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,QAAgB,EAAE,EAAE,iBAAiB,2CA+C7E"}
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Box, Text } from "ink";
3
3
  import { ToolCallStatus } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
4
4
  import { ToolKind, resolveToolKind, normalizeToolResult } from "@stigmer/sdk";
5
+ import { extractPrimaryArg, useFileReviewRowState, } from "@stigmer/react";
5
6
  const STATUS_INDICATOR = {
6
7
  [ToolCallStatus.TOOL_CALL_RUNNING]: { symbol: "⠋", color: "yellow" },
7
8
  [ToolCallStatus.TOOL_CALL_COMPLETED]: { symbol: "✓", color: "green" },
@@ -24,6 +25,14 @@ const KIND_LABEL = {
24
25
  [ToolKind.TODO]: "Todos",
25
26
  [ToolKind.SUBAGENT]: "Sub-agent",
26
27
  };
28
+ // File-review row badges, mirroring the web console's per-row badge labels and
29
+ // tones. Keyed by the shared `fileReviewRowState` classification.
30
+ const REVIEW_BADGE = {
31
+ pending: { label: "Pending review", color: "yellow" },
32
+ kept: { label: "Kept", color: "green" },
33
+ discarded: { label: "Discarded", color: "red" },
34
+ failed: { label: "Review failed", color: "red" },
35
+ };
27
36
  /**
28
37
  * Renders a single tool call with a status indicator, label, and an optional
29
38
  * expanded result. Labels and results come from the shared `@stigmer/sdk` view
@@ -36,7 +45,13 @@ export function ToolCallItem({ toolCall, expanded = false }) {
36
45
  const label = toolLabel(toolCall, kind);
37
46
  const view = normalizeToolResult(toolCall);
38
47
  const resultText = expanded ? describeResultView(view) : null;
39
- return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { gap: 1, children: [_jsx(Text, { color: indicator.color, children: indicator.symbol }), _jsx(Text, { children: label }), toolCall.status === ToolCallStatus.TOOL_CALL_RUNNING && (_jsx(Text, { dimColor: true, children: "running" }))] }), view.type === "error" ? (expanded && (_jsx(Box, { paddingLeft: 3, children: _jsx(Text, { color: "red", wrap: "truncate-end", children: view.message }) }))) : (resultText && (_jsx(Box, { paddingLeft: 3, children: _jsx(Text, { dimColor: true, wrap: "truncate-end", children: resultText }) })))] }));
48
+ // A flowed file edit stamped with its change set id badges the set's live
49
+ // review state right on the row (the observational record stays in place; the
50
+ // decision surface is the docked FileReviewPrompt). Null for unstamped rows
51
+ // and honest-degradation cases (missing/capturing set, superseded edit).
52
+ const reviewState = useFileReviewRowState(toolCall.fileChangeSetId, extractPrimaryArg(toolCall));
53
+ const reviewBadge = reviewState ? REVIEW_BADGE[reviewState] : null;
54
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { gap: 1, children: [_jsx(Text, { color: indicator.color, children: indicator.symbol }), _jsx(Text, { children: label }), toolCall.status === ToolCallStatus.TOOL_CALL_RUNNING && (_jsx(Text, { dimColor: true, children: "running" })), reviewBadge && _jsx(Text, { color: reviewBadge.color, children: reviewBadge.label })] }), view.type === "error" ? (expanded && (_jsx(Box, { paddingLeft: 3, children: _jsx(Text, { color: "red", wrap: "truncate-end", children: view.message }) }))) : (resultText && (_jsx(Box, { paddingLeft: 3, children: _jsx(Text, { dimColor: true, wrap: "truncate-end", children: resultText }) })))] }));
40
55
  }
41
56
  function toolLabel(toolCall, kind) {
42
57
  if (toolCall.mcpServerSlug) {
@@ -1 +1 @@
1
- {"version":3,"file":"ToolCallItem.js","sourceRoot":"","sources":["../../src/components/ToolCallItem.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ToolCallItem.js","sourceRoot":"","sources":["../../src/components/ToolCallItem.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAEhC,OAAO,EAAE,cAAc,EAAE,MAAM,8DAA8D,CAAC;AAC9F,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAE9E,OAAO,EACL,iBAAiB,EACjB,qBAAqB,GAEtB,MAAM,gBAAgB,CAAC;AAUxB,MAAM,gBAAgB,GAAuD;IAC3E,CAAC,cAAc,CAAC,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE;IACpE,CAAC,cAAc,CAAC,mBAAmB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE;IACrE,CAAC,cAAc,CAAC,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;CACjE,CAAC;AAEF,8EAA8E;AAC9E,wEAAwE;AACxE,qEAAqE;AACrE,MAAM,UAAU,GAAsC;IACpD,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM;IAC5B,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO;IAC9B,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM;IAC5B,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ;IAChC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;IACzB,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC3B,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM;IACvB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;IACzB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,YAAY;IACnC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU;IAC5B,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO;IACxB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW;CACjC,CAAC;AAEF,+EAA+E;AAC/E,kEAAkE;AAClE,MAAM,YAAY,GAAiE;IACjF,OAAO,EAAE,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAE;IACrD,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE;IACvC,SAAS,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE;IAC/C,MAAM,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,KAAK,EAAE;CACjD,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,EAAE,QAAQ,EAAE,QAAQ,GAAG,KAAK,EAAqB;IAC5E,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;IAEvE,MAAM,IAAI,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE9D,0EAA0E;IAC1E,8EAA8E;IAC9E,4EAA4E;IAC5E,yEAAyE;IACzE,MAAM,WAAW,GAAG,qBAAqB,CACvC,QAAQ,CAAC,eAAe,EACxB,iBAAiB,CAAC,QAAQ,CAAC,CAC5B,CAAC;IACF,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEnE,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,aACzB,MAAC,GAAG,IAAC,GAAG,EAAE,CAAC,aACT,KAAC,IAAI,IAAC,KAAK,EAAE,SAAS,CAAC,KAAK,YAAG,SAAS,CAAC,MAAM,GAAQ,EACvD,KAAC,IAAI,cAAE,KAAK,GAAQ,EACnB,QAAQ,CAAC,MAAM,KAAK,cAAc,CAAC,iBAAiB,IAAI,CACvD,KAAC,IAAI,IAAC,QAAQ,8BAAe,CAC9B,EACA,WAAW,IAAI,KAAC,IAAI,IAAC,KAAK,EAAE,WAAW,CAAC,KAAK,YAAG,WAAW,CAAC,KAAK,GAAQ,IACtE,EACL,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CACvB,QAAQ,IAAI,CACV,KAAC,GAAG,IAAC,WAAW,EAAE,CAAC,YACjB,KAAC,IAAI,IAAC,KAAK,EAAC,KAAK,EAAC,IAAI,EAAC,cAAc,YAClC,IAAI,CAAC,OAAO,GACR,GACH,CACP,CACF,CAAC,CAAC,CAAC,CACF,UAAU,IAAI,CACZ,KAAC,GAAG,IAAC,WAAW,EAAE,CAAC,YACjB,KAAC,IAAI,IAAC,QAAQ,QAAC,IAAI,EAAC,cAAc,YAC/B,UAAU,GACN,GACH,CACP,CACF,IACG,CACP,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,QAAkB,EAAE,IAAc;IACnD,IAAI,QAAQ,CAAC,aAAa,EAAE,CAAC;QAC3B,OAAO,GAAG,QAAQ,CAAC,aAAa,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;IACtD,CAAC;IACD,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC;AAC3C,CAAC;AAED,gFAAgF;AAChF,SAAS,kBAAkB,CAAC,IAAoB;IAC9C,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,KAAK,GACT,IAAI,CAAC,UAAU,KAAK,SAAS,IAAI,IAAI,CAAC,YAAY,KAAK,SAAS;gBAC9D,CAAC,CAAC,MAAM,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,IAAI,CAAC,YAAY,IAAI,CAAC,GAAG;gBAC1D,CAAC,CAAC,EAAE,CAAC;YACT,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC;QAChC,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,qEAAqE;YACrE,qCAAqC;YACrC,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,IAAI,GACR,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACvF,OAAO,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9D,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,IAAI,GACR,IAAI,CAAC,IAAI,KAAK,OAAO;gBACnB,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;gBACrC,CAAC,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7C,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;QACxE,CAAC;QACD,KAAK,MAAM;YACT,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAChE,KAAK,MAAM;YACT,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;QAC3B,KAAK,eAAe;YAClB,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC7E,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,KAAK,MAAM;YACT,OAAO,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,0EAA0E;YAC1E,uEAAuE;YACvE,2EAA2E;YAC3E,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,IAAI,IAAI,CAAC,OAAO;gBAAE,OAAO,gBAAgB,IAAI,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;YACpE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,OAAO,GAAG,OAAO,yBAAyB,IAAI,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;QACvE,CAAC;QACD,KAAK,OAAO;YACV,OAAO,IAAI,CAAC,OAAO,CAAC;QACtB,KAAK,OAAO;YACV,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,CAAS;IAC5B,IAAI,CAAC,IAAI,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACpE,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS,EAAE,QAAQ,GAAG,CAAC;IACvC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,KAAK,CAAC,MAAM,IAAI,QAAQ;QAAE,OAAO,CAAC,CAAC;IACvC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,UAAU,KAAK,CAAC,MAAM,GAAG,QAAQ,cAAc,CAAC;AAC/F,CAAC"}
@@ -0,0 +1,48 @@
1
+ import type { CapturedFileChange, FileChangeProgressEntry, FileChangeSet } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/filereview_pb";
2
+ import { FileChangeKind } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
3
+ /**
4
+ * Single-letter badge for a file change's kind, matching the web review card:
5
+ * `A` added, `M` modified, `D` deleted, `R` renamed. A binary change reads as
6
+ * `M` — "binary" is a review-completeness property (from `FileContent.is_binary`
7
+ * via `fileReviewability`), not a distinct edit kind.
8
+ */
9
+ export declare function kindLetter(kind: FileChangeKind): string;
10
+ /**
11
+ * The path to show for a reviewable change: the post-edit path, or the pre-edit
12
+ * path for a deletion. A rename shows `before → after` so both sides are visible.
13
+ */
14
+ export declare function changeDisplayPath(change: CapturedFileChange): string;
15
+ /**
16
+ * The path to show for a mid-run progress entry (DD-32), using the same
17
+ * rename-aware rule as {@link changeDisplayPath}. The slim entry carries no
18
+ * bodies or digests, only the same before/after/kind triple, so the terminal
19
+ * renders its path identically to the reviewable surfaces.
20
+ */
21
+ export declare function progressEntryDisplayPath(entry: FileChangeProgressEntry): string;
22
+ /**
23
+ * The honest, one-line reason a change cannot be kept as-is, or `null` when it
24
+ * is fully reviewable. Mirrors the web card's per-file block-reason copy so the
25
+ * terminal reviewer sees the same explanation.
26
+ */
27
+ export declare function blockReasonNote(change: CapturedFileChange): string | null;
28
+ /** The effective per-file verdict counts for a settled change set. */
29
+ export interface SettledCounts {
30
+ /** Files kept (effective verdict APPROVE). */
31
+ readonly kept: number;
32
+ /** Files discarded (effective verdict REJECT). */
33
+ readonly discarded: number;
34
+ /** Files with no effective verdict (neither kept nor discarded). */
35
+ readonly notReviewed: number;
36
+ }
37
+ /**
38
+ * Folds a settled change set's decisions into kept / discarded / not-reviewed
39
+ * counts, using the same `deriveEffectiveVerdicts` fold the web uses so a
40
+ * "Keep all" set correctly reads every file as kept.
41
+ */
42
+ export declare function settledCounts(set: FileChangeSet): SettledCounts;
43
+ /**
44
+ * A one-line summary of a settled change set's outcome, e.g. `2 kept · 1
45
+ * discarded`, or `3 files changed` when nothing was individually decided.
46
+ */
47
+ export declare function settledSummary(set: FileChangeSet): string;
48
+ //# sourceMappingURL=file-review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-review.d.ts","sourceRoot":"","sources":["../src/file-review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,uBAAuB,EACvB,aAAa,EACd,MAAM,oEAAoE,CAAC;AAC5E,OAAO,EACL,cAAc,EAEf,MAAM,8DAA8D,CAAC;AAGtE;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAWvD;AAoBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAEpE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAE/E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,GAAG,IAAI,CAiBzE;AAED,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,8CAA8C;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,kDAAkD;IAClD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,oEAAoE;IACpE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,aAAa,CAc/D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,MAAM,CASzD"}