@markusylisiurunen/tau 0.3.39 → 0.3.41
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.
- package/README.md +34 -38
- package/dist/core/agent/agent_runtime.js +0 -22
- package/dist/core/agent/agent_runtime.js.map +1 -1
- package/dist/core/cli.js +2 -2
- package/dist/core/cli.js.map +1 -1
- package/dist/core/commands/registry.js +22 -20
- package/dist/core/commands/registry.js.map +1 -1
- package/dist/core/config/builtin_themes.js +936 -998
- package/dist/core/config/builtin_themes.js.map +1 -1
- package/dist/core/history/migrations.js +57 -0
- package/dist/core/history/migrations.js.map +1 -0
- package/dist/core/history/setup.js +18 -0
- package/dist/core/history/setup.js.map +1 -1
- package/dist/core/personas.js +8 -53
- package/dist/core/personas.js.map +1 -1
- package/dist/core/runtime/chat_runtime.js +0 -6
- package/dist/core/runtime/chat_runtime.js.map +1 -1
- package/dist/core/session/direct_bash.js +8 -8
- package/dist/core/session/direct_bash.js.map +1 -1
- package/dist/core/session/runner.js +6 -1
- package/dist/core/session/runner.js.map +1 -1
- package/dist/core/static/code_mode/history/documentation.md +3 -3
- package/dist/core/static/code_mode/nook/documentation.md +6 -4
- package/dist/core/static/code_mode/web/documentation.md +3 -3
- package/dist/core/tools/bash.js +80 -63
- package/dist/core/tools/bash.js.map +1 -1
- package/dist/core/tools/code_mode.js +45 -12
- package/dist/core/tools/code_mode.js.map +1 -1
- package/dist/core/tools/edit.js +72 -84
- package/dist/core/tools/edit.js.map +1 -1
- package/dist/core/tools/goal.js +97 -16
- package/dist/core/tools/goal.js.map +1 -1
- package/dist/core/tools/history.js +13 -15
- package/dist/core/tools/history.js.map +1 -1
- package/dist/core/tools/interrupt_agent.js +56 -37
- package/dist/core/tools/interrupt_agent.js.map +1 -1
- package/dist/core/tools/list_agents.js +28 -13
- package/dist/core/tools/list_agents.js.map +1 -1
- package/dist/core/tools/nook.js +15 -15
- package/dist/core/tools/nook.js.map +1 -1
- package/dist/core/tools/presentation.js +226 -0
- package/dist/core/tools/presentation.js.map +1 -0
- package/dist/core/tools/registry.js.map +1 -1
- package/dist/core/tools/send_input_to_agent.js +57 -47
- package/dist/core/tools/send_input_to_agent.js.map +1 -1
- package/dist/core/tools/spawn_agent.js +81 -52
- package/dist/core/tools/spawn_agent.js.map +1 -1
- package/dist/core/tools/subagent_ui.js +14 -38
- package/dist/core/tools/subagent_ui.js.map +1 -1
- package/dist/core/tools/view_image.js +45 -45
- package/dist/core/tools/view_image.js.map +1 -1
- package/dist/core/tools/wait_for_agents.js +94 -56
- package/dist/core/tools/wait_for_agents.js.map +1 -1
- package/dist/core/tools/web.js +11 -13
- package/dist/core/tools/web.js.map +1 -1
- package/dist/core/tools/write.js +41 -39
- package/dist/core/tools/write.js.map +1 -1
- package/dist/core/utils/gemini_speech.js +1 -1
- package/dist/core/utils/gemini_speech.js.map +1 -1
- package/dist/core/utils/subagent_utils.js +3 -3
- package/dist/core/utils/subagent_utils.js.map +1 -1
- package/dist/core/version.js +1 -1
- package/dist/execution/cloudflare_sandbox_execution_environment.js +1 -1
- package/dist/execution/cloudflare_sandbox_execution_environment.js.map +1 -1
- package/dist/history/worker/index.js +149 -192
- package/dist/history/worker/index.js.map +1 -1
- package/dist/host/client_tool_broker.js +29 -31
- package/dist/host/client_tool_broker.js.map +1 -1
- package/dist/host/local_session_host.js +11 -5
- package/dist/host/local_session_host.js.map +1 -1
- package/dist/main.js +6 -6
- package/dist/main.js.map +1 -1
- package/dist/tui/chat_controller/diff_review_service.js +1 -1
- package/dist/tui/chat_controller/diff_review_service.js.map +1 -1
- package/dist/tui/chat_controller/history_labels.js +13 -0
- package/dist/tui/chat_controller/history_labels.js.map +1 -1
- package/dist/tui/chat_view.js +24 -50
- package/dist/tui/chat_view.js.map +1 -1
- package/dist/tui/session_chat_app.js +3 -4
- package/dist/tui/session_chat_app.js.map +1 -1
- package/dist/tui/session_chat_controller.js +80 -111
- package/dist/tui/session_chat_controller.js.map +1 -1
- package/dist/tui/terminal_appearance.js +44 -25
- package/dist/tui/terminal_appearance.js.map +1 -1
- package/dist/tui/ui/autocomplete_item.js +2 -0
- package/dist/tui/ui/autocomplete_item.js.map +1 -0
- package/dist/tui/ui/chat_container.js +1 -14
- package/dist/tui/ui/chat_container.js.map +1 -1
- package/dist/tui/ui/chat_message_model.js +4 -12
- package/dist/tui/ui/chat_message_model.js.map +1 -1
- package/dist/tui/ui/components/autocomplete_list.js +138 -0
- package/dist/tui/ui/components/autocomplete_list.js.map +1 -0
- package/dist/tui/ui/components/editor.js +33 -40
- package/dist/tui/ui/components/editor.js.map +1 -1
- package/dist/tui/ui/components/one_line_segments.js +0 -67
- package/dist/tui/ui/components/one_line_segments.js.map +1 -1
- package/dist/tui/ui/custom_editor.js +15 -11
- package/dist/tui/ui/custom_editor.js.map +1 -1
- package/dist/tui/ui/diff_review_message.js +1 -11
- package/dist/tui/ui/diff_review_message.js.map +1 -1
- package/dist/tui/ui/footer.js +63 -13
- package/dist/tui/ui/footer.js.map +1 -1
- package/dist/tui/ui/rewind_picker.js +17 -47
- package/dist/tui/ui/rewind_picker.js.map +1 -1
- package/dist/tui/ui/slash_autocomplete.js +43 -64
- package/dist/tui/ui/slash_autocomplete.js.map +1 -1
- package/dist/tui/ui/subagent_editor_pane.js +3 -3
- package/dist/tui/ui/theme/index.js +1 -1
- package/dist/tui/ui/theme/index.js.map +1 -1
- package/dist/tui/ui/theme/palette.js +245 -8
- package/dist/tui/ui/theme/palette.js.map +1 -1
- package/dist/tui/ui/theme/theme.js +3 -30
- package/dist/tui/ui/theme/theme.js.map +1 -1
- package/dist/tui/ui/tool_card.js +137 -0
- package/dist/tui/ui/tool_card.js.map +1 -0
- package/dist/tui/ui/user_message.js +3 -6
- package/dist/tui/ui/user_message.js.map +1 -1
- package/package.json +2 -2
- package/dist/core/utils/tool_preview.js +0 -73
- package/dist/core/utils/tool_preview.js.map +0 -1
- package/dist/tui/chat_controller/command_hints.js +0 -35
- package/dist/tui/chat_controller/command_hints.js.map +0 -1
- package/dist/tui/ui/bash_execution.js +0 -129
- package/dist/tui/ui/bash_execution.js.map +0 -1
- package/dist/tui/ui/components/dynamic_border.js +0 -11
- package/dist/tui/ui/components/dynamic_border.js.map +0 -1
- package/dist/tui/ui/components/header_box.js +0 -107
- package/dist/tui/ui/components/header_box.js.map +0 -1
- package/dist/tui/ui/components/header_line.js +0 -60
- package/dist/tui/ui/components/header_line.js.map +0 -1
- package/dist/tui/ui/components/padded_container.js +0 -24
- package/dist/tui/ui/components/padded_container.js.map +0 -1
- package/dist/tui/ui/file_execution.js +0 -176
- package/dist/tui/ui/file_execution.js.map +0 -1
- package/dist/tui/ui/tool_output.js +0 -163
- package/dist/tui/ui/tool_output.js.map +0 -1
- package/dist/tui/ui/tool_ui_registry.js +0 -786
- package/dist/tui/ui/tool_ui_registry.js.map +0 -1
|
@@ -1,786 +0,0 @@
|
|
|
1
|
-
import { TOOL_NAME_BASH, TOOL_NAME_EDIT, TOOL_NAME_INTERRUPT_AGENT, TOOL_NAME_LIST_AGENTS, TOOL_NAME_SEND_INPUT_TO_AGENT, TOOL_NAME_SPAWN_AGENT, TOOL_NAME_VIEW_IMAGE, TOOL_NAME_WAIT_FOR_AGENTS, TOOL_NAME_WRITE, } from "../../core/tools/tool_names.js";
|
|
2
|
-
import { buildBashAbortedView, buildBashBlockedView, buildBashExecutionView, buildBashRunningView, } from "./bash_execution.js";
|
|
3
|
-
import { buildEditBlockedView, buildEditSuccessView, buildViewImageBlockedView, buildViewImageSuccessView, buildWriteBlockedView, buildWriteSuccessView, } from "./file_execution.js";
|
|
4
|
-
import { buildSection, buildToolHeaderLine, inlineText, renderToolUiCompactText, renderToolUiTextLines, } from "./tool_output.js";
|
|
5
|
-
const TOOL_UI_LANGUAGE = {
|
|
6
|
-
[TOOL_NAME_BASH]: {
|
|
7
|
-
name: "bash",
|
|
8
|
-
labels: {
|
|
9
|
-
queued: "queued",
|
|
10
|
-
running: "running",
|
|
11
|
-
succeeded: "ran",
|
|
12
|
-
failed: "failed",
|
|
13
|
-
blocked: "blocked",
|
|
14
|
-
cancelled: "cancelled",
|
|
15
|
-
},
|
|
16
|
-
},
|
|
17
|
-
[TOOL_NAME_WRITE]: {
|
|
18
|
-
name: "write",
|
|
19
|
-
labels: {
|
|
20
|
-
queued: "queued write",
|
|
21
|
-
running: "writing",
|
|
22
|
-
succeeded: "wrote",
|
|
23
|
-
failed: "failed to write",
|
|
24
|
-
blocked: "write blocked",
|
|
25
|
-
cancelled: "write cancelled",
|
|
26
|
-
},
|
|
27
|
-
},
|
|
28
|
-
[TOOL_NAME_EDIT]: {
|
|
29
|
-
name: "edit",
|
|
30
|
-
labels: {
|
|
31
|
-
queued: "queued edit",
|
|
32
|
-
running: "editing",
|
|
33
|
-
succeeded: "edited",
|
|
34
|
-
failed: "failed to edit",
|
|
35
|
-
blocked: "edit blocked",
|
|
36
|
-
cancelled: "edit cancelled",
|
|
37
|
-
},
|
|
38
|
-
},
|
|
39
|
-
[TOOL_NAME_VIEW_IMAGE]: {
|
|
40
|
-
name: "view image",
|
|
41
|
-
labels: {
|
|
42
|
-
queued: "queued view image",
|
|
43
|
-
running: "viewing",
|
|
44
|
-
succeeded: "viewed",
|
|
45
|
-
failed: "failed to view",
|
|
46
|
-
blocked: "view image blocked",
|
|
47
|
-
cancelled: "view image cancelled",
|
|
48
|
-
},
|
|
49
|
-
},
|
|
50
|
-
[TOOL_NAME_SPAWN_AGENT]: {
|
|
51
|
-
name: "spawn agent",
|
|
52
|
-
labels: {
|
|
53
|
-
queued: "queued spawn",
|
|
54
|
-
running: "spawning",
|
|
55
|
-
succeeded: "spawned",
|
|
56
|
-
failed: "spawn failed",
|
|
57
|
-
blocked: "spawn blocked",
|
|
58
|
-
cancelled: "spawn cancelled",
|
|
59
|
-
},
|
|
60
|
-
},
|
|
61
|
-
[TOOL_NAME_SEND_INPUT_TO_AGENT]: {
|
|
62
|
-
name: "send input",
|
|
63
|
-
labels: {
|
|
64
|
-
queued: "queued input",
|
|
65
|
-
running: "sending input",
|
|
66
|
-
succeeded: "sent input",
|
|
67
|
-
failed: "failed to send input",
|
|
68
|
-
blocked: "send input blocked",
|
|
69
|
-
cancelled: "send input cancelled",
|
|
70
|
-
},
|
|
71
|
-
},
|
|
72
|
-
[TOOL_NAME_WAIT_FOR_AGENTS]: {
|
|
73
|
-
name: "wait for agents",
|
|
74
|
-
labels: {
|
|
75
|
-
queued: "queued wait",
|
|
76
|
-
running: "waiting",
|
|
77
|
-
succeeded: "finished waiting",
|
|
78
|
-
failed: "wait failed",
|
|
79
|
-
blocked: "wait blocked",
|
|
80
|
-
cancelled: "wait cancelled",
|
|
81
|
-
},
|
|
82
|
-
},
|
|
83
|
-
[TOOL_NAME_LIST_AGENTS]: {
|
|
84
|
-
name: "list agents",
|
|
85
|
-
labels: {
|
|
86
|
-
queued: "queued list",
|
|
87
|
-
running: "listing",
|
|
88
|
-
succeeded: "listed",
|
|
89
|
-
failed: "failed to list",
|
|
90
|
-
blocked: "list blocked",
|
|
91
|
-
cancelled: "list cancelled",
|
|
92
|
-
},
|
|
93
|
-
},
|
|
94
|
-
[TOOL_NAME_INTERRUPT_AGENT]: {
|
|
95
|
-
name: "interrupt agent",
|
|
96
|
-
labels: {
|
|
97
|
-
queued: "queued interruption",
|
|
98
|
-
running: "interrupting",
|
|
99
|
-
succeeded: "interrupted",
|
|
100
|
-
failed: "failed to interrupt",
|
|
101
|
-
blocked: "interruption blocked",
|
|
102
|
-
cancelled: "interruption cancelled",
|
|
103
|
-
},
|
|
104
|
-
},
|
|
105
|
-
};
|
|
106
|
-
const GENERIC_TOOL_STATUS_LABELS = {
|
|
107
|
-
queued: "queued",
|
|
108
|
-
running: "running",
|
|
109
|
-
succeeded: "completed",
|
|
110
|
-
failed: "failed",
|
|
111
|
-
blocked: "blocked",
|
|
112
|
-
cancelled: "cancelled",
|
|
113
|
-
};
|
|
114
|
-
function getToolUiLanguage(toolName) {
|
|
115
|
-
return Object.hasOwn(TOOL_UI_LANGUAGE, toolName) ? TOOL_UI_LANGUAGE[toolName] : undefined;
|
|
116
|
-
}
|
|
117
|
-
function getToolStatusLabel(toolName, status) {
|
|
118
|
-
if (status === "streaming")
|
|
119
|
-
return "preparing";
|
|
120
|
-
return getToolUiLanguage(toolName)?.labels[status] ?? GENERIC_TOOL_STATUS_LABELS[status];
|
|
121
|
-
}
|
|
122
|
-
function buildSimpleToolRunningView(theme, label, target) {
|
|
123
|
-
const { palette, text } = theme;
|
|
124
|
-
const runningColor = (s) => palette.actionRunning(s);
|
|
125
|
-
const header = buildToolHeaderLine({
|
|
126
|
-
bulletStyle: runningColor,
|
|
127
|
-
bullet: "⏵",
|
|
128
|
-
label,
|
|
129
|
-
labelStyle: palette.textMuted,
|
|
130
|
-
accent: inlineText(target),
|
|
131
|
-
accentStyle: palette.brandAccent,
|
|
132
|
-
});
|
|
133
|
-
return {
|
|
134
|
-
borderColor: runningColor,
|
|
135
|
-
expanded: { title: runningColor(text.bold(`${label} ${target}`)) },
|
|
136
|
-
compact: { header },
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
function buildToolPendingView(theme, label, target) {
|
|
140
|
-
const { palette, text } = theme;
|
|
141
|
-
const pendingColor = (s) => palette.textMuted(s);
|
|
142
|
-
const header = buildToolHeaderLine({
|
|
143
|
-
bulletStyle: pendingColor,
|
|
144
|
-
bullet: "⏵",
|
|
145
|
-
label,
|
|
146
|
-
labelStyle: palette.textMuted,
|
|
147
|
-
accent: inlineText(target),
|
|
148
|
-
accentStyle: palette.brandAccent,
|
|
149
|
-
});
|
|
150
|
-
return {
|
|
151
|
-
borderColor: pendingColor,
|
|
152
|
-
expanded: { title: pendingColor(text.bold(`${label} ${target}`)) },
|
|
153
|
-
compact: { header },
|
|
154
|
-
};
|
|
155
|
-
}
|
|
156
|
-
const CODE_MODE_COMPACT_CODE_LINES = 10;
|
|
157
|
-
function buildCodeModeCompactHeader(theme, status, label) {
|
|
158
|
-
const { palette } = theme;
|
|
159
|
-
const statusStyle = status === "completed"
|
|
160
|
-
? palette.actionSuccess
|
|
161
|
-
: status === "failed" || status === "blocked"
|
|
162
|
-
? palette.actionError
|
|
163
|
-
: status === "running"
|
|
164
|
-
? palette.actionRunning
|
|
165
|
-
: palette.textMuted;
|
|
166
|
-
const bullet = status === "completed" ? "✓" : status === "failed" || status === "blocked" ? "✗" : "⏵";
|
|
167
|
-
return buildToolHeaderLine({
|
|
168
|
-
bulletStyle: statusStyle,
|
|
169
|
-
bullet,
|
|
170
|
-
label: status,
|
|
171
|
-
labelStyle: palette.textMuted,
|
|
172
|
-
accent: label,
|
|
173
|
-
accentStyle: palette.brandAccent,
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
function buildCodeModeCompactPreview(theme, code) {
|
|
177
|
-
const trimmed = code.trim();
|
|
178
|
-
if (!trimmed)
|
|
179
|
-
return undefined;
|
|
180
|
-
const lines = trimmed.split(/\r?\n/);
|
|
181
|
-
const preview = lines
|
|
182
|
-
.slice(0, CODE_MODE_COMPACT_CODE_LINES)
|
|
183
|
-
.map((line) => ` ${theme.palette.textMuted("›")} ${theme.palette.textDim(line)}`);
|
|
184
|
-
const remaining = lines.length - preview.length;
|
|
185
|
-
if (remaining > 0) {
|
|
186
|
-
preview.push(` ${theme.palette.textMuted("›")} ${theme.palette.textDim(`… ${remaining} more line${remaining === 1 ? "" : "s"}`)}`);
|
|
187
|
-
}
|
|
188
|
-
return preview.join("\n");
|
|
189
|
-
}
|
|
190
|
-
function joinCodeModeCompactSections(...sections) {
|
|
191
|
-
const present = sections.filter((section) => Boolean(section?.trim()));
|
|
192
|
-
return present.length > 0 ? present.join("\n\n") : undefined;
|
|
193
|
-
}
|
|
194
|
-
function buildClientToolFinishedView(args) {
|
|
195
|
-
const { theme, toolName, status, uiText } = args;
|
|
196
|
-
const { palette, text } = theme;
|
|
197
|
-
const isSuccess = status === "success";
|
|
198
|
-
const borderColor = isSuccess
|
|
199
|
-
? (s) => palette.actionSuccess(s)
|
|
200
|
-
: (s) => palette.actionError(s);
|
|
201
|
-
const header = buildToolHeaderLine({
|
|
202
|
-
bulletStyle: borderColor,
|
|
203
|
-
bullet: isSuccess ? "✓" : "✗",
|
|
204
|
-
label: isSuccess ? "completed" : "failed",
|
|
205
|
-
labelStyle: palette.textMuted,
|
|
206
|
-
accent: inlineText(toolName),
|
|
207
|
-
accentStyle: palette.brandAccent,
|
|
208
|
-
});
|
|
209
|
-
const compactText = renderToolUiCompactText({
|
|
210
|
-
uiText,
|
|
211
|
-
theme,
|
|
212
|
-
previewStyle: isSuccess ? palette.textDim : palette.actionError,
|
|
213
|
-
statusStyle: palette.textMuted,
|
|
214
|
-
});
|
|
215
|
-
const fullText = renderToolUiTextLines({
|
|
216
|
-
uiText,
|
|
217
|
-
kind: "full",
|
|
218
|
-
theme,
|
|
219
|
-
baseStyle: isSuccess ? palette.actionOutput : palette.actionError,
|
|
220
|
-
});
|
|
221
|
-
return {
|
|
222
|
-
borderColor,
|
|
223
|
-
expanded: {
|
|
224
|
-
title: borderColor(text.bold(`${isSuccess ? "completed" : "failed"} ${toolName}`)),
|
|
225
|
-
sections: fullText ? [fullText] : [],
|
|
226
|
-
},
|
|
227
|
-
compact: { header, extraText: compactText },
|
|
228
|
-
};
|
|
229
|
-
}
|
|
230
|
-
function buildSimpleToolFinishedView(args) {
|
|
231
|
-
const { theme, label, target, status, statusLabel, message } = args;
|
|
232
|
-
const { palette, text } = theme;
|
|
233
|
-
const successColor = (s) => palette.actionSuccess(s);
|
|
234
|
-
const errorColor = (s) => palette.actionError(s);
|
|
235
|
-
const isSuccess = status === "success";
|
|
236
|
-
const borderColor = isSuccess ? successColor : errorColor;
|
|
237
|
-
const headerLabel = statusLabel ??
|
|
238
|
-
(isSuccess ? label : status === "blocked" ? `${label} blocked` : `${label} failed`);
|
|
239
|
-
const header = buildToolHeaderLine({
|
|
240
|
-
bulletStyle: borderColor,
|
|
241
|
-
bullet: isSuccess ? "✓" : "✗",
|
|
242
|
-
label: headerLabel,
|
|
243
|
-
labelStyle: palette.textMuted,
|
|
244
|
-
accent: inlineText(target),
|
|
245
|
-
accentStyle: palette.brandAccent,
|
|
246
|
-
});
|
|
247
|
-
const messageLine = message
|
|
248
|
-
? isSuccess
|
|
249
|
-
? palette.textMuted(message)
|
|
250
|
-
: errorColor(message)
|
|
251
|
-
: undefined;
|
|
252
|
-
const section = buildSection(messageLine ? [messageLine] : []);
|
|
253
|
-
return {
|
|
254
|
-
borderColor,
|
|
255
|
-
expanded: {
|
|
256
|
-
title: borderColor(text.bold(`${label} ${target}`)),
|
|
257
|
-
sections: section ? [section] : [],
|
|
258
|
-
},
|
|
259
|
-
compact: {
|
|
260
|
-
header,
|
|
261
|
-
extraText: messageLine ? ` ${messageLine}` : undefined,
|
|
262
|
-
},
|
|
263
|
-
};
|
|
264
|
-
}
|
|
265
|
-
function formatSubagentTitle(title) {
|
|
266
|
-
const trimmed = title?.trim() ?? "";
|
|
267
|
-
return trimmed || "(subagent)";
|
|
268
|
-
}
|
|
269
|
-
function ensureSubagentUiText(args) {
|
|
270
|
-
if (args.uiText) {
|
|
271
|
-
return args.uiText;
|
|
272
|
-
}
|
|
273
|
-
const fallbackLine = args.message?.trim() || (args.status === "success" ? "ok" : "failed");
|
|
274
|
-
return {
|
|
275
|
-
previewLines: [{ text: fallbackLine }],
|
|
276
|
-
statusLine: args.statusLine,
|
|
277
|
-
fullLines: [{ text: fallbackLine }],
|
|
278
|
-
};
|
|
279
|
-
}
|
|
280
|
-
function buildSubagentRunningView(args) {
|
|
281
|
-
const { theme, label, title } = args;
|
|
282
|
-
const { palette, text } = theme;
|
|
283
|
-
const runningColor = (s) => palette.actionRunning(s);
|
|
284
|
-
const target = formatSubagentTitle(title);
|
|
285
|
-
const header = buildToolHeaderLine({
|
|
286
|
-
bulletStyle: runningColor,
|
|
287
|
-
bullet: "⏵",
|
|
288
|
-
label,
|
|
289
|
-
labelStyle: palette.textMuted,
|
|
290
|
-
accent: inlineText(target),
|
|
291
|
-
accentStyle: palette.brandAccent,
|
|
292
|
-
});
|
|
293
|
-
return {
|
|
294
|
-
borderColor: runningColor,
|
|
295
|
-
expanded: { title: runningColor(text.bold(target)) },
|
|
296
|
-
compact: { header },
|
|
297
|
-
};
|
|
298
|
-
}
|
|
299
|
-
function buildSubagentFinishedView(args) {
|
|
300
|
-
const { theme, label, failureLabel, title, status, uiText } = args;
|
|
301
|
-
const { palette, text } = theme;
|
|
302
|
-
const successColor = (s) => palette.actionSuccess(s);
|
|
303
|
-
const errorColor = (s) => palette.actionError(s);
|
|
304
|
-
const isSuccess = status === "success";
|
|
305
|
-
const borderColor = isSuccess ? successColor : errorColor;
|
|
306
|
-
const headerLabel = isSuccess ? label : failureLabel;
|
|
307
|
-
const target = formatSubagentTitle(title);
|
|
308
|
-
const header = buildToolHeaderLine({
|
|
309
|
-
bulletStyle: borderColor,
|
|
310
|
-
bullet: isSuccess ? "✓" : "✗",
|
|
311
|
-
label: headerLabel,
|
|
312
|
-
labelStyle: palette.textMuted,
|
|
313
|
-
accent: inlineText(target),
|
|
314
|
-
accentStyle: palette.brandAccent,
|
|
315
|
-
});
|
|
316
|
-
const compactText = renderToolUiCompactText({
|
|
317
|
-
uiText,
|
|
318
|
-
theme,
|
|
319
|
-
previewStyle: palette.textDim,
|
|
320
|
-
statusStyle: palette.textMuted,
|
|
321
|
-
});
|
|
322
|
-
const fullText = renderToolUiTextLines({
|
|
323
|
-
uiText,
|
|
324
|
-
kind: "full",
|
|
325
|
-
theme,
|
|
326
|
-
baseStyle: palette.actionOutput,
|
|
327
|
-
});
|
|
328
|
-
return {
|
|
329
|
-
borderColor,
|
|
330
|
-
expanded: {
|
|
331
|
-
title: borderColor(text.bold(target)),
|
|
332
|
-
sections: fullText ? [fullText] : [],
|
|
333
|
-
},
|
|
334
|
-
compact: {
|
|
335
|
-
header,
|
|
336
|
-
extraText: compactText,
|
|
337
|
-
},
|
|
338
|
-
};
|
|
339
|
-
}
|
|
340
|
-
const TOOL_STARTED_ACTIVITY_TYPES = new Set([
|
|
341
|
-
"bash_started",
|
|
342
|
-
"spawn_agent_started",
|
|
343
|
-
"send_input_to_agent_started",
|
|
344
|
-
"wait_for_agents_started",
|
|
345
|
-
"list_agents_started",
|
|
346
|
-
"interrupt_agent_started",
|
|
347
|
-
"code_mode_started",
|
|
348
|
-
]);
|
|
349
|
-
function isStartedActivity(activity) {
|
|
350
|
-
return Boolean(activity && TOOL_STARTED_ACTIVITY_TYPES.has(activity.type));
|
|
351
|
-
}
|
|
352
|
-
function terminalStatusFromActivity(activity) {
|
|
353
|
-
switch (activity.type) {
|
|
354
|
-
case "tool_call_streaming":
|
|
355
|
-
case "tool_call_queued":
|
|
356
|
-
case "bash_started":
|
|
357
|
-
case "spawn_agent_started":
|
|
358
|
-
case "send_input_to_agent_started":
|
|
359
|
-
case "wait_for_agents_started":
|
|
360
|
-
case "list_agents_started":
|
|
361
|
-
case "interrupt_agent_started":
|
|
362
|
-
case "code_mode_started":
|
|
363
|
-
return undefined;
|
|
364
|
-
case "tool_call_blocked":
|
|
365
|
-
case "bash_blocked":
|
|
366
|
-
case "spawn_agent_blocked":
|
|
367
|
-
case "send_input_to_agent_blocked":
|
|
368
|
-
case "wait_for_agents_blocked":
|
|
369
|
-
case "list_agents_blocked":
|
|
370
|
-
case "interrupt_agent_blocked":
|
|
371
|
-
case "code_mode_blocked":
|
|
372
|
-
case "view_image_blocked":
|
|
373
|
-
case "write_blocked":
|
|
374
|
-
case "edit_blocked":
|
|
375
|
-
return "blocked";
|
|
376
|
-
case "bash_aborted":
|
|
377
|
-
return "cancelled";
|
|
378
|
-
case "bash_execution":
|
|
379
|
-
return activity.exitCode === 0 ? "succeeded" : "failed";
|
|
380
|
-
case "client_tool_finished":
|
|
381
|
-
case "spawn_agent_finished":
|
|
382
|
-
case "send_input_to_agent_finished":
|
|
383
|
-
case "wait_for_agents_finished":
|
|
384
|
-
case "list_agents_finished":
|
|
385
|
-
case "interrupt_agent_finished":
|
|
386
|
-
case "code_mode_finished":
|
|
387
|
-
return activity.status === "success" ? "succeeded" : "failed";
|
|
388
|
-
case "view_image_success":
|
|
389
|
-
case "write_success":
|
|
390
|
-
case "edit_success":
|
|
391
|
-
return "succeeded";
|
|
392
|
-
}
|
|
393
|
-
}
|
|
394
|
-
function addCodePreview(view, model, theme, status) {
|
|
395
|
-
if (model.code === undefined)
|
|
396
|
-
return view;
|
|
397
|
-
return {
|
|
398
|
-
...view,
|
|
399
|
-
compact: {
|
|
400
|
-
header: buildCodeModeCompactHeader(theme, status, model.toolName),
|
|
401
|
-
extraText: buildCodeModeCompactPreview(theme, model.code),
|
|
402
|
-
},
|
|
403
|
-
};
|
|
404
|
-
}
|
|
405
|
-
function buildGenericTerminalView(theme, model) {
|
|
406
|
-
const { palette, text } = theme;
|
|
407
|
-
const succeeded = model.status === "succeeded";
|
|
408
|
-
const borderColor = succeeded
|
|
409
|
-
? (value) => palette.actionSuccess(value)
|
|
410
|
-
: (value) => palette.actionError(value);
|
|
411
|
-
const label = getToolStatusLabel(model.toolName, model.status);
|
|
412
|
-
const target = model.code === undefined ? model.headerTarget : model.toolName;
|
|
413
|
-
const resultText = model.resultText?.trim();
|
|
414
|
-
const compactResult = resultText
|
|
415
|
-
? resultText
|
|
416
|
-
.split(/\r?\n/)
|
|
417
|
-
.slice(0, 8)
|
|
418
|
-
.map((line) => ` ${palette.textDim(line)}`)
|
|
419
|
-
.join("\n")
|
|
420
|
-
: undefined;
|
|
421
|
-
return {
|
|
422
|
-
borderColor,
|
|
423
|
-
expanded: {
|
|
424
|
-
title: borderColor(text.bold(`${label} ${target}`)),
|
|
425
|
-
sections: resultText ? [palette.actionOutput(resultText)] : [],
|
|
426
|
-
},
|
|
427
|
-
compact: {
|
|
428
|
-
header: buildToolHeaderLine({
|
|
429
|
-
bulletStyle: borderColor,
|
|
430
|
-
bullet: succeeded ? "✓" : "✗",
|
|
431
|
-
label,
|
|
432
|
-
labelStyle: palette.textMuted,
|
|
433
|
-
accent: inlineText(target),
|
|
434
|
-
accentStyle: palette.brandAccent,
|
|
435
|
-
}),
|
|
436
|
-
extraText: compactResult,
|
|
437
|
-
},
|
|
438
|
-
};
|
|
439
|
-
}
|
|
440
|
-
export class ToolUiRegistry {
|
|
441
|
-
renderers = new Map();
|
|
442
|
-
register(type, renderer) {
|
|
443
|
-
this.renderers.set(type, renderer);
|
|
444
|
-
}
|
|
445
|
-
render(event, context) {
|
|
446
|
-
const renderer = this.renderers.get(event.type);
|
|
447
|
-
if (!renderer) {
|
|
448
|
-
throw new Error(`missing tool ui renderer for event type '${event.type}'.`);
|
|
449
|
-
}
|
|
450
|
-
return renderer(event, context);
|
|
451
|
-
}
|
|
452
|
-
renderModel(model, context) {
|
|
453
|
-
if (model.status === "streaming") {
|
|
454
|
-
const target = getToolUiLanguage(model.toolName)?.name ?? model.toolName;
|
|
455
|
-
return buildToolPendingView(context.theme, "preparing", target);
|
|
456
|
-
}
|
|
457
|
-
if (model.status === "queued") {
|
|
458
|
-
return addCodePreview(buildToolPendingView(context.theme, getToolStatusLabel(model.toolName, model.status), model.headerTarget), model, context.theme, "queued");
|
|
459
|
-
}
|
|
460
|
-
if (model.status === "running") {
|
|
461
|
-
if (isStartedActivity(model.activity)) {
|
|
462
|
-
return this.render(model.activity, context);
|
|
463
|
-
}
|
|
464
|
-
return addCodePreview(buildSimpleToolRunningView(context.theme, getToolStatusLabel(model.toolName, model.status), model.headerTarget), model, context.theme, "running");
|
|
465
|
-
}
|
|
466
|
-
if (model.activity && terminalStatusFromActivity(model.activity) === model.status) {
|
|
467
|
-
return this.render(model.activity, context);
|
|
468
|
-
}
|
|
469
|
-
return buildGenericTerminalView(context.theme, model);
|
|
470
|
-
}
|
|
471
|
-
renderBashAborted(command, reason, context) {
|
|
472
|
-
const headerTarget = command.split(/\r?\n/)[0] ?? command;
|
|
473
|
-
return buildBashAbortedView(context.theme, command, reason, headerTarget);
|
|
474
|
-
}
|
|
475
|
-
}
|
|
476
|
-
export function createToolUiRegistry() {
|
|
477
|
-
const registry = new ToolUiRegistry();
|
|
478
|
-
registry.register("tool_call_streaming", (event, context) => {
|
|
479
|
-
const uiEvent = event;
|
|
480
|
-
const target = getToolUiLanguage(uiEvent.toolName)?.name ?? uiEvent.toolName;
|
|
481
|
-
return buildToolPendingView(context.theme, "preparing", target);
|
|
482
|
-
});
|
|
483
|
-
registry.register("tool_call_queued", (event, context) => {
|
|
484
|
-
const uiEvent = event;
|
|
485
|
-
const view = buildToolPendingView(context.theme, getToolStatusLabel(uiEvent.toolName, "queued"), uiEvent.headerTarget);
|
|
486
|
-
if (uiEvent.code === undefined)
|
|
487
|
-
return view;
|
|
488
|
-
return {
|
|
489
|
-
...view,
|
|
490
|
-
compact: {
|
|
491
|
-
header: buildCodeModeCompactHeader(context.theme, "queued", uiEvent.toolName),
|
|
492
|
-
extraText: buildCodeModeCompactPreview(context.theme, uiEvent.code),
|
|
493
|
-
},
|
|
494
|
-
};
|
|
495
|
-
});
|
|
496
|
-
registry.register("tool_call_blocked", (event, context) => {
|
|
497
|
-
const uiEvent = event;
|
|
498
|
-
return buildSimpleToolFinishedView({
|
|
499
|
-
theme: context.theme,
|
|
500
|
-
label: uiEvent.toolName,
|
|
501
|
-
target: uiEvent.toolName,
|
|
502
|
-
status: "blocked",
|
|
503
|
-
statusLabel: getToolStatusLabel(uiEvent.toolName, "blocked"),
|
|
504
|
-
message: uiEvent.reason,
|
|
505
|
-
});
|
|
506
|
-
});
|
|
507
|
-
registry.register("client_tool_finished", (event, context) => {
|
|
508
|
-
const uiEvent = event;
|
|
509
|
-
return buildClientToolFinishedView({
|
|
510
|
-
theme: context.theme,
|
|
511
|
-
toolName: uiEvent.toolName,
|
|
512
|
-
status: uiEvent.status,
|
|
513
|
-
uiText: uiEvent.uiText,
|
|
514
|
-
});
|
|
515
|
-
});
|
|
516
|
-
registry.register("bash_started", (event, context) => {
|
|
517
|
-
const uiEvent = event;
|
|
518
|
-
return buildBashRunningView(context.theme, uiEvent.command, uiEvent.headerTarget);
|
|
519
|
-
});
|
|
520
|
-
registry.register("bash_execution", (event, context) => {
|
|
521
|
-
const uiEvent = event;
|
|
522
|
-
return buildBashExecutionView(context.theme, uiEvent.command, uiEvent.exitCode, uiEvent.uiText, uiEvent.labelOverride, uiEvent.headerTarget);
|
|
523
|
-
});
|
|
524
|
-
registry.register("bash_aborted", (event, context) => {
|
|
525
|
-
const uiEvent = event;
|
|
526
|
-
return buildBashAbortedView(context.theme, uiEvent.command, uiEvent.reason, uiEvent.headerTarget);
|
|
527
|
-
});
|
|
528
|
-
registry.register("bash_blocked", (event, context) => {
|
|
529
|
-
const uiEvent = event;
|
|
530
|
-
return buildBashBlockedView(context.theme, uiEvent.command, uiEvent.reason, uiEvent.headerTarget);
|
|
531
|
-
});
|
|
532
|
-
registry.register("spawn_agent_started", (event, context) => {
|
|
533
|
-
const uiEvent = event;
|
|
534
|
-
return buildSubagentRunningView({
|
|
535
|
-
theme: context.theme,
|
|
536
|
-
label: getToolStatusLabel(TOOL_NAME_SPAWN_AGENT, "running"),
|
|
537
|
-
title: uiEvent.headerTarget,
|
|
538
|
-
});
|
|
539
|
-
});
|
|
540
|
-
registry.register("spawn_agent_finished", (event, context) => {
|
|
541
|
-
const uiEvent = event;
|
|
542
|
-
const title = formatSubagentTitle(uiEvent.headerTarget);
|
|
543
|
-
return buildSubagentFinishedView({
|
|
544
|
-
theme: context.theme,
|
|
545
|
-
label: getToolStatusLabel(TOOL_NAME_SPAWN_AGENT, "succeeded"),
|
|
546
|
-
failureLabel: getToolStatusLabel(TOOL_NAME_SPAWN_AGENT, "failed"),
|
|
547
|
-
title,
|
|
548
|
-
status: uiEvent.status,
|
|
549
|
-
uiText: ensureSubagentUiText({
|
|
550
|
-
uiText: uiEvent.uiText,
|
|
551
|
-
status: uiEvent.status,
|
|
552
|
-
message: uiEvent.message,
|
|
553
|
-
}),
|
|
554
|
-
});
|
|
555
|
-
});
|
|
556
|
-
registry.register("spawn_agent_blocked", (event, context) => {
|
|
557
|
-
const uiEvent = event;
|
|
558
|
-
const title = formatSubagentTitle(uiEvent.headerTarget);
|
|
559
|
-
return buildSimpleToolFinishedView({
|
|
560
|
-
theme: context.theme,
|
|
561
|
-
label: "spawn",
|
|
562
|
-
target: title,
|
|
563
|
-
status: "blocked",
|
|
564
|
-
statusLabel: getToolStatusLabel(TOOL_NAME_SPAWN_AGENT, "blocked"),
|
|
565
|
-
message: uiEvent.reason,
|
|
566
|
-
});
|
|
567
|
-
});
|
|
568
|
-
registry.register("send_input_to_agent_started", (event, context) => {
|
|
569
|
-
const uiEvent = event;
|
|
570
|
-
const title = formatSubagentTitle(uiEvent.headerTarget);
|
|
571
|
-
return buildSubagentRunningView({
|
|
572
|
-
theme: context.theme,
|
|
573
|
-
label: getToolStatusLabel(TOOL_NAME_SEND_INPUT_TO_AGENT, "running"),
|
|
574
|
-
title,
|
|
575
|
-
});
|
|
576
|
-
});
|
|
577
|
-
registry.register("send_input_to_agent_finished", (event, context) => {
|
|
578
|
-
const uiEvent = event;
|
|
579
|
-
const title = formatSubagentTitle(uiEvent.headerTarget);
|
|
580
|
-
return buildSubagentFinishedView({
|
|
581
|
-
theme: context.theme,
|
|
582
|
-
label: getToolStatusLabel(TOOL_NAME_SEND_INPUT_TO_AGENT, "succeeded"),
|
|
583
|
-
failureLabel: getToolStatusLabel(TOOL_NAME_SEND_INPUT_TO_AGENT, "failed"),
|
|
584
|
-
title,
|
|
585
|
-
status: uiEvent.status,
|
|
586
|
-
uiText: ensureSubagentUiText({
|
|
587
|
-
uiText: uiEvent.uiText,
|
|
588
|
-
status: uiEvent.status,
|
|
589
|
-
message: uiEvent.message,
|
|
590
|
-
}),
|
|
591
|
-
});
|
|
592
|
-
});
|
|
593
|
-
registry.register("send_input_to_agent_blocked", (event, context) => {
|
|
594
|
-
const uiEvent = event;
|
|
595
|
-
const title = formatSubagentTitle(uiEvent.headerTarget);
|
|
596
|
-
return buildSimpleToolFinishedView({
|
|
597
|
-
theme: context.theme,
|
|
598
|
-
label: "send input",
|
|
599
|
-
target: title,
|
|
600
|
-
status: "blocked",
|
|
601
|
-
statusLabel: getToolStatusLabel(TOOL_NAME_SEND_INPUT_TO_AGENT, "blocked"),
|
|
602
|
-
message: uiEvent.reason,
|
|
603
|
-
});
|
|
604
|
-
});
|
|
605
|
-
registry.register("wait_for_agents_started", (event, context) => {
|
|
606
|
-
const uiEvent = event;
|
|
607
|
-
const title = uiEvent.headerTarget;
|
|
608
|
-
return buildSubagentRunningView({
|
|
609
|
-
theme: context.theme,
|
|
610
|
-
label: getToolStatusLabel(TOOL_NAME_WAIT_FOR_AGENTS, "running"),
|
|
611
|
-
title,
|
|
612
|
-
});
|
|
613
|
-
});
|
|
614
|
-
registry.register("wait_for_agents_finished", (event, context) => {
|
|
615
|
-
const uiEvent = event;
|
|
616
|
-
const title = uiEvent.headerTarget;
|
|
617
|
-
return buildSubagentFinishedView({
|
|
618
|
-
theme: context.theme,
|
|
619
|
-
label: getToolStatusLabel(TOOL_NAME_WAIT_FOR_AGENTS, "succeeded"),
|
|
620
|
-
failureLabel: getToolStatusLabel(TOOL_NAME_WAIT_FOR_AGENTS, "failed"),
|
|
621
|
-
title,
|
|
622
|
-
status: uiEvent.status,
|
|
623
|
-
uiText: ensureSubagentUiText({
|
|
624
|
-
uiText: uiEvent.uiText,
|
|
625
|
-
status: uiEvent.status,
|
|
626
|
-
message: uiEvent.message,
|
|
627
|
-
}),
|
|
628
|
-
});
|
|
629
|
-
});
|
|
630
|
-
registry.register("wait_for_agents_blocked", (event, context) => {
|
|
631
|
-
const uiEvent = event;
|
|
632
|
-
const title = uiEvent.headerTarget;
|
|
633
|
-
return buildSimpleToolFinishedView({
|
|
634
|
-
theme: context.theme,
|
|
635
|
-
label: "wait",
|
|
636
|
-
target: title,
|
|
637
|
-
status: "blocked",
|
|
638
|
-
statusLabel: getToolStatusLabel(TOOL_NAME_WAIT_FOR_AGENTS, "blocked"),
|
|
639
|
-
message: uiEvent.reason,
|
|
640
|
-
});
|
|
641
|
-
});
|
|
642
|
-
registry.register("list_agents_started", (event, context) => {
|
|
643
|
-
const uiEvent = event;
|
|
644
|
-
return buildSubagentRunningView({
|
|
645
|
-
theme: context.theme,
|
|
646
|
-
label: getToolStatusLabel(TOOL_NAME_LIST_AGENTS, "running"),
|
|
647
|
-
title: uiEvent.headerTarget,
|
|
648
|
-
});
|
|
649
|
-
});
|
|
650
|
-
registry.register("list_agents_finished", (event, context) => {
|
|
651
|
-
const uiEvent = event;
|
|
652
|
-
return buildSubagentFinishedView({
|
|
653
|
-
theme: context.theme,
|
|
654
|
-
label: getToolStatusLabel(TOOL_NAME_LIST_AGENTS, "succeeded"),
|
|
655
|
-
failureLabel: getToolStatusLabel(TOOL_NAME_LIST_AGENTS, "failed"),
|
|
656
|
-
title: uiEvent.headerTarget,
|
|
657
|
-
status: uiEvent.status,
|
|
658
|
-
uiText: ensureSubagentUiText({
|
|
659
|
-
uiText: uiEvent.uiText,
|
|
660
|
-
status: uiEvent.status,
|
|
661
|
-
message: uiEvent.message,
|
|
662
|
-
}),
|
|
663
|
-
});
|
|
664
|
-
});
|
|
665
|
-
registry.register("list_agents_blocked", (event, context) => {
|
|
666
|
-
const uiEvent = event;
|
|
667
|
-
return buildSimpleToolFinishedView({
|
|
668
|
-
theme: context.theme,
|
|
669
|
-
label: "list",
|
|
670
|
-
target: uiEvent.headerTarget,
|
|
671
|
-
status: "blocked",
|
|
672
|
-
statusLabel: getToolStatusLabel(TOOL_NAME_LIST_AGENTS, "blocked"),
|
|
673
|
-
message: uiEvent.reason,
|
|
674
|
-
});
|
|
675
|
-
});
|
|
676
|
-
registry.register("interrupt_agent_started", (event, context) => {
|
|
677
|
-
const uiEvent = event;
|
|
678
|
-
return buildSubagentRunningView({
|
|
679
|
-
theme: context.theme,
|
|
680
|
-
label: getToolStatusLabel(TOOL_NAME_INTERRUPT_AGENT, "running"),
|
|
681
|
-
title: uiEvent.headerTarget,
|
|
682
|
-
});
|
|
683
|
-
});
|
|
684
|
-
registry.register("interrupt_agent_finished", (event, context) => {
|
|
685
|
-
const uiEvent = event;
|
|
686
|
-
const title = formatSubagentTitle(uiEvent.headerTarget);
|
|
687
|
-
const fallbackMessage = uiEvent.finalStatus && uiEvent.finalStatus !== "succeeded"
|
|
688
|
-
? `final status: ${uiEvent.finalStatus}`
|
|
689
|
-
: uiEvent.message;
|
|
690
|
-
return buildSubagentFinishedView({
|
|
691
|
-
theme: context.theme,
|
|
692
|
-
label: getToolStatusLabel(TOOL_NAME_INTERRUPT_AGENT, "succeeded"),
|
|
693
|
-
failureLabel: getToolStatusLabel(TOOL_NAME_INTERRUPT_AGENT, "failed"),
|
|
694
|
-
title,
|
|
695
|
-
status: uiEvent.status,
|
|
696
|
-
uiText: ensureSubagentUiText({
|
|
697
|
-
uiText: uiEvent.uiText,
|
|
698
|
-
status: uiEvent.status,
|
|
699
|
-
message: fallbackMessage,
|
|
700
|
-
}),
|
|
701
|
-
});
|
|
702
|
-
});
|
|
703
|
-
registry.register("interrupt_agent_blocked", (event, context) => {
|
|
704
|
-
const uiEvent = event;
|
|
705
|
-
const title = formatSubagentTitle(uiEvent.headerTarget);
|
|
706
|
-
return buildSimpleToolFinishedView({
|
|
707
|
-
theme: context.theme,
|
|
708
|
-
label: "interrupt",
|
|
709
|
-
target: title,
|
|
710
|
-
status: "blocked",
|
|
711
|
-
statusLabel: getToolStatusLabel(TOOL_NAME_INTERRUPT_AGENT, "blocked"),
|
|
712
|
-
message: uiEvent.reason,
|
|
713
|
-
});
|
|
714
|
-
});
|
|
715
|
-
registry.register("code_mode_started", (event, context) => {
|
|
716
|
-
const uiEvent = event;
|
|
717
|
-
const view = buildSimpleToolRunningView(context.theme, uiEvent.toolName, uiEvent.headerTarget);
|
|
718
|
-
return {
|
|
719
|
-
...view,
|
|
720
|
-
compact: {
|
|
721
|
-
header: buildCodeModeCompactHeader(context.theme, "running", uiEvent.toolName),
|
|
722
|
-
extraText: buildCodeModeCompactPreview(context.theme, uiEvent.code),
|
|
723
|
-
},
|
|
724
|
-
};
|
|
725
|
-
});
|
|
726
|
-
registry.register("code_mode_finished", (event, context) => {
|
|
727
|
-
const uiEvent = event;
|
|
728
|
-
const view = buildClientToolFinishedView({
|
|
729
|
-
theme: context.theme,
|
|
730
|
-
toolName: uiEvent.toolName,
|
|
731
|
-
status: uiEvent.status,
|
|
732
|
-
uiText: uiEvent.uiText,
|
|
733
|
-
});
|
|
734
|
-
const status = uiEvent.status === "success" ? "completed" : "failed";
|
|
735
|
-
return {
|
|
736
|
-
...view,
|
|
737
|
-
compact: {
|
|
738
|
-
header: buildCodeModeCompactHeader(context.theme, status, uiEvent.toolName),
|
|
739
|
-
extraText: joinCodeModeCompactSections(buildCodeModeCompactPreview(context.theme, uiEvent.code), view.compact.extraText),
|
|
740
|
-
},
|
|
741
|
-
};
|
|
742
|
-
});
|
|
743
|
-
registry.register("code_mode_blocked", (event, context) => {
|
|
744
|
-
const uiEvent = event;
|
|
745
|
-
const view = buildSimpleToolFinishedView({
|
|
746
|
-
theme: context.theme,
|
|
747
|
-
label: uiEvent.toolName,
|
|
748
|
-
target: uiEvent.headerTarget,
|
|
749
|
-
status: "blocked",
|
|
750
|
-
message: uiEvent.reason,
|
|
751
|
-
});
|
|
752
|
-
return {
|
|
753
|
-
...view,
|
|
754
|
-
compact: {
|
|
755
|
-
header: buildCodeModeCompactHeader(context.theme, "blocked", uiEvent.toolName),
|
|
756
|
-
extraText: joinCodeModeCompactSections(buildCodeModeCompactPreview(context.theme, uiEvent.code), view.compact.extraText),
|
|
757
|
-
},
|
|
758
|
-
};
|
|
759
|
-
});
|
|
760
|
-
registry.register("write_success", (event, context) => {
|
|
761
|
-
const uiEvent = event;
|
|
762
|
-
return buildWriteSuccessView(context.theme, uiEvent.path, uiEvent.uiText, uiEvent.headerTarget);
|
|
763
|
-
});
|
|
764
|
-
registry.register("write_blocked", (event, context) => {
|
|
765
|
-
const uiEvent = event;
|
|
766
|
-
return buildWriteBlockedView(context.theme, uiEvent.path, uiEvent.reason, uiEvent.headerTarget);
|
|
767
|
-
});
|
|
768
|
-
registry.register("edit_success", (event, context) => {
|
|
769
|
-
const uiEvent = event;
|
|
770
|
-
return buildEditSuccessView(context.theme, uiEvent.path, uiEvent.uiText, uiEvent.headerTarget);
|
|
771
|
-
});
|
|
772
|
-
registry.register("edit_blocked", (event, context) => {
|
|
773
|
-
const uiEvent = event;
|
|
774
|
-
return buildEditBlockedView(context.theme, uiEvent.path, uiEvent.reason, uiEvent.headerTarget);
|
|
775
|
-
});
|
|
776
|
-
registry.register("view_image_success", (event, context) => {
|
|
777
|
-
const uiEvent = event;
|
|
778
|
-
return buildViewImageSuccessView(context.theme, uiEvent.path, uiEvent.uiText, uiEvent.headerTarget);
|
|
779
|
-
});
|
|
780
|
-
registry.register("view_image_blocked", (event, context) => {
|
|
781
|
-
const uiEvent = event;
|
|
782
|
-
return buildViewImageBlockedView(context.theme, uiEvent.path, uiEvent.reason, uiEvent.headerTarget);
|
|
783
|
-
});
|
|
784
|
-
return registry;
|
|
785
|
-
}
|
|
786
|
-
//# sourceMappingURL=tool_ui_registry.js.map
|