@ahggg/dsh-side-chat 0.4.1 → 0.5.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.
- package/lib/client/index.d.ts +1 -1
- package/lib/client/index.d.ts.map +1 -1
- package/lib/client/index.js +1 -1
- package/lib/client/index.js.map +1 -1
- package/lib/client/panel/SelectionQuote.d.ts.map +1 -1
- package/lib/client/panel/SelectionQuote.js +26 -1
- package/lib/client/panel/SelectionQuote.js.map +1 -1
- package/lib/client/parent-composer/ParentConversationAnnotations.d.ts.map +1 -1
- package/lib/client/parent-composer/ParentConversationAnnotations.js +4 -2
- package/lib/client/parent-composer/ParentConversationAnnotations.js.map +1 -1
- package/lib/client/parent-composer/add-to-conversation.d.ts +16 -0
- package/lib/client/parent-composer/add-to-conversation.d.ts.map +1 -1
- package/lib/client/parent-composer/add-to-conversation.js +143 -17
- package/lib/client/parent-composer/add-to-conversation.js.map +1 -1
- package/lib/client/parent-composer/annotation-persistence.d.ts +19 -0
- package/lib/client/parent-composer/annotation-persistence.d.ts.map +1 -0
- package/lib/client/parent-composer/annotation-persistence.js +97 -0
- package/lib/client/parent-composer/annotation-persistence.js.map +1 -0
- package/lib/client/rc6/ArchivedConversation.d.ts +2 -1
- package/lib/client/rc6/ArchivedConversation.d.ts.map +1 -1
- package/lib/client/rc6/ArchivedConversation.js +9 -90
- package/lib/client/rc6/ArchivedConversation.js.map +1 -1
- package/lib/client/rc6/Rc6SideChatOverlay.d.ts.map +1 -1
- package/lib/client/rc6/Rc6SideChatOverlay.js +53 -4
- package/lib/client/rc6/Rc6SideChatOverlay.js.map +1 -1
- package/lib/client/rc6/SideChatTool.d.ts +23 -0
- package/lib/client/rc6/SideChatTool.d.ts.map +1 -0
- package/lib/client/rc6/SideChatTool.js +395 -0
- package/lib/client/rc6/SideChatTool.js.map +1 -0
- package/lib/client/rc6/sessions-adapter.d.ts +11 -0
- package/lib/client/rc6/sessions-adapter.d.ts.map +1 -1
- package/lib/client/rc6/sessions-adapter.js +67 -16
- package/lib/client/rc6/sessions-adapter.js.map +1 -1
- package/lib/client/selection/ConversationAnnotationMarkers.d.ts +9 -0
- package/lib/client/selection/ConversationAnnotationMarkers.d.ts.map +1 -0
- package/lib/client/selection/ConversationAnnotationMarkers.js +241 -0
- package/lib/client/selection/ConversationAnnotationMarkers.js.map +1 -0
- package/lib/client/selection/SelectionActions.d.ts +6 -1
- package/lib/client/selection/SelectionActions.d.ts.map +1 -1
- package/lib/client/selection/SelectionActions.js +9 -8
- package/lib/client/selection/SelectionActions.js.map +1 -1
- package/lib/client/selection/selection-controller.d.ts +11 -0
- package/lib/client/selection/selection-controller.d.ts.map +1 -1
- package/lib/client/selection/selection-controller.js +54 -0
- package/lib/client/selection/selection-controller.js.map +1 -1
- package/lib/client.js +1187 -202
- package/lib/client.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { CodeBlock, DiffBlock, DisclosureRow, IconApiOutline14, IconBrowseOutline16, IconCodeOutline16, IconEditOutline16, IconSearchOutline16, IconSparkle16, ReadBlock, SearchBlock, StateDot, TerminalBlock, WebBlock, } from '@deepseek-ai/dsh-client-ui-primitives';
|
|
4
|
+
const TOOL_VARIANTS = {
|
|
5
|
+
bash: 'bash',
|
|
6
|
+
pwsh: 'bash',
|
|
7
|
+
read: 'read',
|
|
8
|
+
web_fetch: 'read',
|
|
9
|
+
web_search: 'search',
|
|
10
|
+
grep: 'search',
|
|
11
|
+
glob: 'search',
|
|
12
|
+
write: 'write',
|
|
13
|
+
edit: 'edit',
|
|
14
|
+
run_code: 'code',
|
|
15
|
+
};
|
|
16
|
+
const VARIANT_TITLES = {
|
|
17
|
+
search: 'Search',
|
|
18
|
+
read: 'Read',
|
|
19
|
+
bash: 'Bash',
|
|
20
|
+
write: 'Write',
|
|
21
|
+
edit: 'Edit',
|
|
22
|
+
code: 'Code',
|
|
23
|
+
others: 'Tool call',
|
|
24
|
+
};
|
|
25
|
+
const SUMMARY_KEYS = {
|
|
26
|
+
bash: ['description', 'command'],
|
|
27
|
+
read: ['path', 'file_path', 'url'],
|
|
28
|
+
search: ['query', 'pattern', 'url'],
|
|
29
|
+
write: ['path', 'file_path'],
|
|
30
|
+
edit: ['path', 'file_path'],
|
|
31
|
+
code: ['description'],
|
|
32
|
+
others: [],
|
|
33
|
+
};
|
|
34
|
+
function record(value) {
|
|
35
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
36
|
+
? value
|
|
37
|
+
: null;
|
|
38
|
+
}
|
|
39
|
+
function stringValue(value) {
|
|
40
|
+
return typeof value === 'string' && value !== '' ? value : undefined;
|
|
41
|
+
}
|
|
42
|
+
function numberValue(value) {
|
|
43
|
+
return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
|
|
44
|
+
}
|
|
45
|
+
function booleanValue(value) {
|
|
46
|
+
return typeof value === 'boolean' ? value : undefined;
|
|
47
|
+
}
|
|
48
|
+
function firstLine(text) {
|
|
49
|
+
const newline = text.indexOf('\n');
|
|
50
|
+
return newline === -1 ? text : text.slice(0, newline);
|
|
51
|
+
}
|
|
52
|
+
function stringify(value) {
|
|
53
|
+
if (typeof value === 'string')
|
|
54
|
+
return value;
|
|
55
|
+
try {
|
|
56
|
+
return JSON.stringify(value, null, 2);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return String(value);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function contentText(content) {
|
|
63
|
+
return content.map((block) => {
|
|
64
|
+
if (block.type === 'text' || block.type === 'reasoning')
|
|
65
|
+
return block.text;
|
|
66
|
+
if (block.type === 'image')
|
|
67
|
+
return '[Image]';
|
|
68
|
+
if (block.type === 'tool-call')
|
|
69
|
+
return `${block.name}(${block.arguments})`;
|
|
70
|
+
if (block.type === 'tool-result')
|
|
71
|
+
return contentText(block.content);
|
|
72
|
+
return stringify(block);
|
|
73
|
+
}).filter(Boolean).join('\n');
|
|
74
|
+
}
|
|
75
|
+
export function toolOutputText(content) {
|
|
76
|
+
const text = contentText(content);
|
|
77
|
+
const fileEnvelope = /^<path>[\s\S]*?<\/path>\s*<type>[\s\S]*?<\/type>\s*<content>\s*\n?([\s\S]*?)\n?<\/content>\s*$/u.exec(text);
|
|
78
|
+
return fileEnvelope?.[1]?.trimEnd() ?? text;
|
|
79
|
+
}
|
|
80
|
+
function parseArguments(argsRaw) {
|
|
81
|
+
try {
|
|
82
|
+
return record(JSON.parse(argsRaw));
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function formattedArguments(argsRaw) {
|
|
89
|
+
try {
|
|
90
|
+
return JSON.stringify(JSON.parse(argsRaw), null, 2);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
return argsRaw;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function classifyTool(name) {
|
|
97
|
+
return TOOL_VARIANTS[name.toLowerCase()] ?? 'others';
|
|
98
|
+
}
|
|
99
|
+
function toolTitle(name, variant) {
|
|
100
|
+
if (name.toLowerCase() === 'pwsh')
|
|
101
|
+
return 'Pwsh';
|
|
102
|
+
return VARIANT_TITLES[variant];
|
|
103
|
+
}
|
|
104
|
+
function pickArgument(args, keys) {
|
|
105
|
+
for (const key of keys) {
|
|
106
|
+
const value = stringValue(args[key]);
|
|
107
|
+
if (value !== undefined)
|
|
108
|
+
return value;
|
|
109
|
+
}
|
|
110
|
+
return Object.values(args).find((value) => typeof value === 'string' && value !== '');
|
|
111
|
+
}
|
|
112
|
+
function relativizeToCwd(path, cwd) {
|
|
113
|
+
if (cwd === undefined || cwd === '')
|
|
114
|
+
return path;
|
|
115
|
+
const root = cwd.replace(/[/\\]+$/u, '');
|
|
116
|
+
const lowerPath = path.toLowerCase();
|
|
117
|
+
const lowerRoot = root.toLowerCase();
|
|
118
|
+
return lowerPath.startsWith(`${lowerRoot}/`) || lowerPath.startsWith(`${lowerRoot}\\`)
|
|
119
|
+
? path.slice(root.length + 1)
|
|
120
|
+
: path;
|
|
121
|
+
}
|
|
122
|
+
function summaryFromArguments(name, variant, argsRaw, callId, cwd) {
|
|
123
|
+
const args = parseArguments(argsRaw);
|
|
124
|
+
const picked = args === null ? undefined : pickArgument(args, SUMMARY_KEYS[variant]);
|
|
125
|
+
const base = relativizeToCwd(firstLine(picked ?? (argsRaw === '' || argsRaw === '{}' ? callId : argsRaw)), cwd);
|
|
126
|
+
return variant === 'others' && name !== '' ? `${name} · ${base}` : base;
|
|
127
|
+
}
|
|
128
|
+
function filePathFromArguments(variant, argsRaw) {
|
|
129
|
+
if (variant !== 'read' && variant !== 'write' && variant !== 'edit')
|
|
130
|
+
return undefined;
|
|
131
|
+
const args = parseArguments(argsRaw);
|
|
132
|
+
if (args === null)
|
|
133
|
+
return undefined;
|
|
134
|
+
return stringValue(args['path']) ?? stringValue(args['file_path']);
|
|
135
|
+
}
|
|
136
|
+
function variantIcon(variant) {
|
|
137
|
+
switch (variant) {
|
|
138
|
+
case 'search': return _jsx(IconSearchOutline16, { size: 14 });
|
|
139
|
+
case 'read': return _jsx(IconBrowseOutline16, { size: 14 });
|
|
140
|
+
case 'bash': return _jsx(IconApiOutline14, { size: 14 });
|
|
141
|
+
case 'write':
|
|
142
|
+
case 'edit': return _jsx(IconEditOutline16, { size: 14 });
|
|
143
|
+
case 'code': return _jsx(IconCodeOutline16, { size: 14 });
|
|
144
|
+
case 'others': return _jsx(IconSparkle16, { size: 14 });
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
function resolveTerminalCwd(viewCwd, cwd) {
|
|
148
|
+
if (viewCwd === undefined || viewCwd === '')
|
|
149
|
+
return cwd;
|
|
150
|
+
if (cwd === undefined || cwd === '' || /^(?:[A-Za-z]:[/\\]|[/\\]{1,2})/u.test(viewCwd))
|
|
151
|
+
return viewCwd;
|
|
152
|
+
return `${cwd.replace(/[/\\]+$/u, '')}\\${viewCwd}`;
|
|
153
|
+
}
|
|
154
|
+
function terminalCard(variant, argsRaw, state, output, callView, resultView, cwd) {
|
|
155
|
+
const call = record(callView);
|
|
156
|
+
const result = record(resultView);
|
|
157
|
+
const callIsTerminal = call?.['card'] === 'terminal';
|
|
158
|
+
const resultIsTerminal = result?.['card'] === 'terminal';
|
|
159
|
+
if (variant !== 'bash' && !callIsTerminal && !resultIsTerminal)
|
|
160
|
+
return null;
|
|
161
|
+
const args = parseArguments(argsRaw);
|
|
162
|
+
const command = stringValue(result?.['title'])
|
|
163
|
+
?? stringValue(call?.['title'])
|
|
164
|
+
?? (args === null ? undefined : stringValue(args['command']))
|
|
165
|
+
?? '';
|
|
166
|
+
return {
|
|
167
|
+
command,
|
|
168
|
+
cwd: resolveTerminalCwd(stringValue(call?.['cwd']), cwd),
|
|
169
|
+
output: stringValue(result?.['output']) ?? output,
|
|
170
|
+
exitCode: numberValue(result?.['exitCode']),
|
|
171
|
+
signal: stringValue(result?.['signal']),
|
|
172
|
+
running: state === 'running' || state === 'pending',
|
|
173
|
+
description: stringValue(call?.['description']),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
function languageForPath(path) {
|
|
177
|
+
if (path === undefined)
|
|
178
|
+
return undefined;
|
|
179
|
+
const extension = /\.([^.\\/]+)$/u.exec(path)?.[1]?.toLowerCase();
|
|
180
|
+
const aliases = {
|
|
181
|
+
js: 'javascript', jsx: 'jsx', ts: 'typescript', tsx: 'tsx',
|
|
182
|
+
json: 'json', css: 'css', html: 'html', md: 'markdown',
|
|
183
|
+
yml: 'yaml', yaml: 'yaml', py: 'python', ps1: 'powershell',
|
|
184
|
+
sh: 'bash', toml: 'toml', xml: 'xml',
|
|
185
|
+
};
|
|
186
|
+
return extension === undefined ? undefined : aliases[extension];
|
|
187
|
+
}
|
|
188
|
+
function validReadLines(value) {
|
|
189
|
+
if (!Array.isArray(value))
|
|
190
|
+
return null;
|
|
191
|
+
const lines = [];
|
|
192
|
+
for (const item of value) {
|
|
193
|
+
const line = record(item);
|
|
194
|
+
const number = numberValue(line?.['number']);
|
|
195
|
+
const text = stringValue(line?.['text']) ?? (line?.['text'] === '' ? '' : undefined);
|
|
196
|
+
if (number === undefined || text === undefined)
|
|
197
|
+
return null;
|
|
198
|
+
lines.push({ number, text });
|
|
199
|
+
}
|
|
200
|
+
return lines;
|
|
201
|
+
}
|
|
202
|
+
function readCard(name, argsRaw, state, output, resultView, cwd) {
|
|
203
|
+
if (state === 'running' || state === 'pending' || state === 'error' || state === 'interrupted')
|
|
204
|
+
return null;
|
|
205
|
+
const result = record(resultView);
|
|
206
|
+
if (result?.['card'] === 'read') {
|
|
207
|
+
const lines = validReadLines(result['lines']);
|
|
208
|
+
const totalLines = numberValue(result['totalLines']);
|
|
209
|
+
const path = stringValue(result['path']);
|
|
210
|
+
if (lines === null || totalLines === undefined)
|
|
211
|
+
return null;
|
|
212
|
+
return {
|
|
213
|
+
label: stringValue(result['title']) ?? (path === undefined ? undefined : relativizeToCwd(path, cwd)),
|
|
214
|
+
lines,
|
|
215
|
+
totalLines,
|
|
216
|
+
lang: stringValue(result['lang']),
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
if (name.toLowerCase() !== 'read' || output === undefined)
|
|
220
|
+
return null;
|
|
221
|
+
const path = filePathFromArguments('read', argsRaw);
|
|
222
|
+
const texts = output.split('\n');
|
|
223
|
+
return {
|
|
224
|
+
label: path === undefined ? undefined : relativizeToCwd(path, cwd),
|
|
225
|
+
lines: texts.map((text, index) => ({ number: index + 1, text })),
|
|
226
|
+
totalLines: texts.length,
|
|
227
|
+
lang: languageForPath(path),
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
function validSearchCard(resultView) {
|
|
231
|
+
const result = record(resultView);
|
|
232
|
+
if (result?.['card'] !== 'search')
|
|
233
|
+
return null;
|
|
234
|
+
const truncated = booleanValue(result['truncated']);
|
|
235
|
+
const total = numberValue(result['total']);
|
|
236
|
+
if (truncated === undefined || total === undefined)
|
|
237
|
+
return null;
|
|
238
|
+
if (result['shape'] === 'paths') {
|
|
239
|
+
const paths = result['paths'];
|
|
240
|
+
return Array.isArray(paths) && paths.every((path) => typeof path === 'string')
|
|
241
|
+
? { kind: 'paths', paths, truncated, total }
|
|
242
|
+
: null;
|
|
243
|
+
}
|
|
244
|
+
if (result['shape'] !== 'matches' || !Array.isArray(result['files']))
|
|
245
|
+
return null;
|
|
246
|
+
const files = [];
|
|
247
|
+
for (const item of result['files']) {
|
|
248
|
+
const file = record(item);
|
|
249
|
+
const path = stringValue(file?.['path']);
|
|
250
|
+
const matchesValue = file?.['matches'];
|
|
251
|
+
if (path === undefined || !Array.isArray(matchesValue))
|
|
252
|
+
return null;
|
|
253
|
+
const matches = [];
|
|
254
|
+
for (const matchValue of matchesValue) {
|
|
255
|
+
const match = record(matchValue);
|
|
256
|
+
const lineNumber = numberValue(match?.['lineNumber']);
|
|
257
|
+
const line = stringValue(match?.['line']) ?? (match?.['line'] === '' ? '' : undefined);
|
|
258
|
+
if (lineNumber === undefined || line === undefined)
|
|
259
|
+
return null;
|
|
260
|
+
matches.push({ lineNumber, line });
|
|
261
|
+
}
|
|
262
|
+
files.push({ path, matches });
|
|
263
|
+
}
|
|
264
|
+
return { kind: 'matches', files, truncated, total };
|
|
265
|
+
}
|
|
266
|
+
function validDiffs(view) {
|
|
267
|
+
const value = record(view);
|
|
268
|
+
if (value?.['card'] !== 'diff' || !Array.isArray(value['diffs']) || value['diffs'].length === 0)
|
|
269
|
+
return null;
|
|
270
|
+
const diffs = [];
|
|
271
|
+
for (const item of value['diffs']) {
|
|
272
|
+
const hunk = record(item);
|
|
273
|
+
const path = stringValue(hunk?.['path']);
|
|
274
|
+
const oldText = hunk?.['oldText'];
|
|
275
|
+
const newText = stringValue(hunk?.['newText']) ?? (hunk?.['newText'] === '' ? '' : undefined);
|
|
276
|
+
if (path === undefined || (oldText !== null && typeof oldText !== 'string') || newText === undefined)
|
|
277
|
+
return null;
|
|
278
|
+
diffs.push({ path, oldText, newText });
|
|
279
|
+
}
|
|
280
|
+
return diffs;
|
|
281
|
+
}
|
|
282
|
+
function validWebCard(view) {
|
|
283
|
+
const result = record(view);
|
|
284
|
+
if (result?.['card'] !== 'web')
|
|
285
|
+
return null;
|
|
286
|
+
const truncated = booleanValue(result['truncated']);
|
|
287
|
+
if (truncated === undefined)
|
|
288
|
+
return null;
|
|
289
|
+
if (result['kind'] === 'fetch') {
|
|
290
|
+
const url = stringValue(result['url']);
|
|
291
|
+
const statusCode = numberValue(result['statusCode']);
|
|
292
|
+
return url === undefined || statusCode === undefined ? null : { kind: 'fetch', url, statusCode, truncated };
|
|
293
|
+
}
|
|
294
|
+
if (result['kind'] !== 'search' || !Array.isArray(result['sources']))
|
|
295
|
+
return null;
|
|
296
|
+
const sources = [];
|
|
297
|
+
for (const item of result['sources']) {
|
|
298
|
+
const source = record(item);
|
|
299
|
+
const url = stringValue(source?.['url']);
|
|
300
|
+
if (url === undefined)
|
|
301
|
+
return null;
|
|
302
|
+
const title = stringValue(source?.['title']);
|
|
303
|
+
const snippet = stringValue(source?.['snippet']);
|
|
304
|
+
const publishedAt = stringValue(source?.['publishedAt']);
|
|
305
|
+
sources.push({
|
|
306
|
+
url,
|
|
307
|
+
...(title === undefined ? {} : { title }),
|
|
308
|
+
...(snippet === undefined ? {} : { snippet }),
|
|
309
|
+
...(publishedAt === undefined ? {} : { publishedAt }),
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
const answer = stringValue(result['answer']);
|
|
313
|
+
return { kind: 'search', sources, truncated, ...(answer === undefined ? {} : { answer }) };
|
|
314
|
+
}
|
|
315
|
+
function genericBody(variant, argsRaw) {
|
|
316
|
+
if (argsRaw === '' || argsRaw === '{}')
|
|
317
|
+
return null;
|
|
318
|
+
if (variant === 'read' || variant === 'write' || variant === 'edit')
|
|
319
|
+
return null;
|
|
320
|
+
return formattedArguments(argsRaw);
|
|
321
|
+
}
|
|
322
|
+
function leadingFor(state, icon) {
|
|
323
|
+
if (state === 'error')
|
|
324
|
+
return _jsx(StateDot, { state: "error" });
|
|
325
|
+
if (state === 'interrupted')
|
|
326
|
+
return _jsx(StateDot, { state: "warning" });
|
|
327
|
+
return icon;
|
|
328
|
+
}
|
|
329
|
+
function toolStatus(state) {
|
|
330
|
+
if (state === 'running' || state === 'pending')
|
|
331
|
+
return 'Running';
|
|
332
|
+
if (state === 'error')
|
|
333
|
+
return 'Failed';
|
|
334
|
+
if (state === 'interrupted')
|
|
335
|
+
return 'Stopped';
|
|
336
|
+
return null;
|
|
337
|
+
}
|
|
338
|
+
export function ToolCard({ callId, name, argsRaw, state, output, callView, resultView, cwd, }) {
|
|
339
|
+
const [expanded, setExpanded] = useState(false);
|
|
340
|
+
const variant = classifyTool(name);
|
|
341
|
+
const terminal = terminalCard(variant, argsRaw, state, output, callView, resultView, cwd);
|
|
342
|
+
const terminalFailed = terminal !== null
|
|
343
|
+
&& !terminal.running
|
|
344
|
+
&& ((terminal.exitCode !== undefined && terminal.exitCode !== 0) || terminal.signal !== undefined);
|
|
345
|
+
const visualState = state === 'success' && terminalFailed ? 'error' : state;
|
|
346
|
+
const read = readCard(name, argsRaw, visualState, output, resultView, cwd);
|
|
347
|
+
const search = validSearchCard(resultView);
|
|
348
|
+
const diffs = validDiffs(resultView) ?? validDiffs(callView);
|
|
349
|
+
const web = validWebCard(resultView);
|
|
350
|
+
const args = parseArguments(argsRaw);
|
|
351
|
+
const code = variant === 'code' && args !== null ? stringValue(args['code']) : undefined;
|
|
352
|
+
const body = genericBody(variant, argsRaw);
|
|
353
|
+
const summary = terminal?.description
|
|
354
|
+
?? stringValue(record(resultView)?.['title'])
|
|
355
|
+
?? summaryFromArguments(name, variant, argsRaw, callId, cwd);
|
|
356
|
+
const failureLine = visualState === 'error' && output !== undefined ? firstLine(output) : null;
|
|
357
|
+
const summaryText = failureLine ?? summary;
|
|
358
|
+
const hasSpecialCard = terminal !== null || read !== null || search !== null || diffs !== null || web !== null || code !== undefined;
|
|
359
|
+
const expandable = hasSpecialCard || body !== null || output !== undefined;
|
|
360
|
+
const open = expanded && expandable;
|
|
361
|
+
const status = toolStatus(visualState);
|
|
362
|
+
return (_jsxs("section", { className: "dsh-side-chat-tool", "data-call-id": callId, "data-state": visualState, "data-expanded": open || undefined, children: [status !== null && _jsx("span", { className: "dsh-side-chat-tool-visually-hidden", children: status }), _jsx(DisclosureRow, { rowClassName: "dsh-side-chat-tool-row", leadingClassName: "dsh-side-chat-tool-leading", titleClassName: "dsh-side-chat-tool-title", chevronClassName: "dsh-side-chat-tool-chevron", icon: leadingFor(visualState, variantIcon(variant)), title: toolTitle(name, variant), open: open, expandable: expandable, expandOnRowClick: true, keepContentWhenOpen: true, onToggle: () => { setExpanded(current => !current); }, collapsedContent: summaryText !== '' && (_jsxs(_Fragment, { children: [_jsx("span", { className: "dsh-side-chat-tool-separator", "aria-hidden": "true" }), _jsx("span", { className: failureLine === null
|
|
363
|
+
? 'dsh-side-chat-tool-summary'
|
|
364
|
+
: 'dsh-side-chat-tool-summary dsh-side-chat-tool-error-summary', children: summaryText })] })), children: _jsx("div", { className: "dsh-side-chat-tool-body-wrap", children: terminal !== null
|
|
365
|
+
? (_jsx(TerminalBlock, { command: terminal.command, cwd: terminal.cwd, output: terminal.output, exitCode: terminal.exitCode, signal: terminal.signal, running: terminal.running, maxLines: Infinity, className: "dsh-side-chat-tool-terminal" }))
|
|
366
|
+
: read !== null
|
|
367
|
+
? _jsx(ReadBlock, { ...read, maxLines: 8, className: "dsh-side-chat-tool-read" })
|
|
368
|
+
: search !== null
|
|
369
|
+
? _jsx(SearchBlock, { ...search, maxLines: 8, className: "dsh-side-chat-tool-search" })
|
|
370
|
+
: diffs !== null
|
|
371
|
+
? _jsx(DiffBlock, { diffs: diffs, maxLines: 8, className: "dsh-side-chat-tool-diff" })
|
|
372
|
+
: web !== null
|
|
373
|
+
? _jsx(WebBlock, { ...web, className: "dsh-side-chat-tool-web" })
|
|
374
|
+
: code !== undefined
|
|
375
|
+
? _jsx(CodeBlock, { code: code, lang: "typescript", copyLabel: "Copy", copiedLabel: "Copied", className: "dsh-side-chat-tool-code" })
|
|
376
|
+
: (body !== null || output !== undefined) && (_jsxs("div", { className: "dsh-side-chat-tool-io-card", children: [body !== null && (_jsxs("div", { className: "dsh-side-chat-tool-io-section", children: [_jsx("span", { className: "dsh-side-chat-tool-io-label", children: "IN" }), _jsx("span", { className: "dsh-side-chat-tool-io-text", children: body })] })), body !== null && output !== undefined && _jsx("span", { className: "dsh-side-chat-tool-io-divider", "aria-hidden": "true" }), output !== undefined && (_jsxs("div", { className: "dsh-side-chat-tool-io-section", children: [_jsx("span", { className: "dsh-side-chat-tool-io-label", children: "OUT" }), _jsx("span", { className: "dsh-side-chat-tool-io-text", "data-error": visualState === 'error' || undefined, children: output })] }))] })) }) })] }));
|
|
377
|
+
}
|
|
378
|
+
function resultState(node, output) {
|
|
379
|
+
if (!node.isError)
|
|
380
|
+
return 'success';
|
|
381
|
+
const identity = `${node.error?.name ?? ''} ${node.error?.code ?? ''} ${output}`;
|
|
382
|
+
return /\b(?:aborted|cancelled|canceled)\b/iu.test(identity) ? 'interrupted' : 'error';
|
|
383
|
+
}
|
|
384
|
+
export function ToolBlockCard({ block, cwd }) {
|
|
385
|
+
const settled = 'kind' in block;
|
|
386
|
+
const output = settled ? toolOutputText(block.content) : undefined;
|
|
387
|
+
const state = settled ? resultState(block, output ?? '') : 'running';
|
|
388
|
+
const name = settled ? block.call?.name ?? block.callId : block.name;
|
|
389
|
+
const argsRaw = settled ? block.call?.argsRaw ?? '{}' : block.argsRaw;
|
|
390
|
+
return (_jsxs("div", { className: "dsh-side-chat-tool-branch", children: [_jsx(ToolCard, { callId: block.callId, name: name, argsRaw: argsRaw, state: state, output: output, callView: block.callView, resultView: settled ? block.resultView : null, cwd: cwd }), block.subCalls.length > 0 && (_jsx("div", { className: "dsh-side-chat-tool-subcalls", "data-subcalls": true, children: block.subCalls.map(child => _jsx(ToolBlockCard, { block: child, cwd: cwd }, child.callId)) }))] }));
|
|
391
|
+
}
|
|
392
|
+
export function RunningToolCard({ call, cwd }) {
|
|
393
|
+
return _jsx(ToolBlockCard, { block: call, cwd: cwd });
|
|
394
|
+
}
|
|
395
|
+
//# sourceMappingURL=SideChatTool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SideChatTool.js","sourceRoot":"","sources":["../../../src/client/rc6/SideChatTool.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,28 @@
|
|
|
1
1
|
import type { ConversationSnapshot, SessionFace } from '@deepseek-ai/dsh-client-runtime/client';
|
|
2
2
|
import type { SideChatClientSessions, SideChatSessionLease } from '../contracts.js';
|
|
3
3
|
import type { ConversationSelection, SessionId } from '../../shared/contracts.js';
|
|
4
|
+
import type { ParentComposerInputSnapshot } from '../parent-composer/add-to-conversation.js';
|
|
4
5
|
import type { Rc6ClientContext } from './context.js';
|
|
5
6
|
/** Adapter over rc.6's public SessionRuntime and exported concrete Session type. */
|
|
6
7
|
export declare class Rc6SideChatSessions implements SideChatClientSessions {
|
|
7
8
|
private readonly ctx;
|
|
8
9
|
private readonly renamed;
|
|
10
|
+
private readonly annotationPersistence;
|
|
9
11
|
constructor(ctx: Rc6ClientContext);
|
|
10
12
|
/** Observable rc.6 Session-list surface used to follow main-session switches. */
|
|
11
13
|
readonly subscribeList: (listener: () => void) => (() => void);
|
|
14
|
+
/** Follow both current-session switches and that session's composer state. */
|
|
15
|
+
readonly subscribeConversationInput: (listener: () => void) => (() => void);
|
|
16
|
+
readonly currentConversationInputSnapshot: () => ParentComposerInputSnapshot | undefined;
|
|
12
17
|
currentSessionId(): SessionId | undefined;
|
|
13
18
|
lastCompletedSeq(parentSessionId: SessionId): number | undefined;
|
|
14
19
|
selectionIsCurrent(selection: ConversationSelection): boolean;
|
|
15
20
|
/** Add one selected passage to the native composer of its parent Session. */
|
|
16
21
|
addSelectionToConversation(selection: ConversationSelection, comment?: string): boolean;
|
|
22
|
+
/** Update an existing unsent annotation without adding a duplicate passage. */
|
|
23
|
+
updateConversationAnnotation(annotationIndex: number, comment?: string): boolean;
|
|
24
|
+
/** Mirror or recover the current Session's unsent annotation occurrence. */
|
|
25
|
+
reconcileConversationAnnotationPersistence(): void;
|
|
17
26
|
/** Number assigned to the next annotation shown beside the selected passage. */
|
|
18
27
|
nextConversationAnnotationNumber(): number;
|
|
19
28
|
/** Remove the current Session's unsent selected-passage annotations. */
|
|
@@ -26,6 +35,8 @@ export declare class Rc6SideChatSessions implements SideChatClientSessions {
|
|
|
26
35
|
}): void;
|
|
27
36
|
face(sessionId: SessionId): SessionFace | undefined;
|
|
28
37
|
title(sessionId: SessionId): string | undefined;
|
|
38
|
+
cwd(sessionId: SessionId): string | undefined;
|
|
39
|
+
private currentParentInput;
|
|
29
40
|
private waitForBinding;
|
|
30
41
|
}
|
|
31
42
|
export declare function selectionDescriptor(snapshot: ConversationSnapshot, anchorKey: string): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions-adapter.d.ts","sourceRoot":"","sources":["../../../src/client/rc6/sessions-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,oBAAoB,EAEpB,WAAW,EAEZ,MAAM,wCAAwC,CAAA;AAS/C,OAAO,KAAK,EACV,sBAAsB,EAGtB,oBAAoB,EAErB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,qBAAqB,EACrB,SAAS,EAGV,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"sessions-adapter.d.ts","sourceRoot":"","sources":["../../../src/client/rc6/sessions-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,oBAAoB,EAEpB,WAAW,EAEZ,MAAM,wCAAwC,CAAA;AAS/C,OAAO,KAAK,EACV,sBAAsB,EAGtB,oBAAoB,EAErB,MAAM,iBAAiB,CAAA;AACxB,OAAO,KAAK,EACV,qBAAqB,EACrB,SAAS,EAGV,MAAM,2BAA2B,CAAA;AAQlC,OAAO,KAAK,EAEV,2BAA2B,EAC5B,MAAM,2CAA2C,CAAA;AAElD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AA6JpD,oFAAoF;AACpF,qBAAa,mBAAoB,YAAW,sBAAsB;IAIpD,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHhC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuB;IAC/C,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAA0C;gBAEnD,GAAG,EAAE,gBAAgB;IAElD,iFAAiF;IACjF,QAAQ,CAAC,aAAa,GAAI,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAA8C;IAE3G,8EAA8E;IAC9E,QAAQ,CAAC,0BAA0B,GAAI,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAmBzE;IAED,QAAQ,CAAC,gCAAgC,QAAO,2BAA2B,GAAG,SAAS,CACvC;IAEhD,gBAAgB,IAAI,SAAS,GAAG,SAAS;IAKzC,gBAAgB,CAAC,eAAe,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS;IAKhE,kBAAkB,CAAC,SAAS,EAAE,qBAAqB,GAAG,OAAO;IAc7D,6EAA6E;IAC7E,0BAA0B,CAAC,SAAS,EAAE,qBAAqB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAQvF,+EAA+E;IAC/E,4BAA4B,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAUhF,4EAA4E;IAC5E,0CAA0C,IAAI,IAAI;IAQlD,gFAAgF;IAChF,gCAAgC,IAAI,MAAM;IAK1C,wEAAwE;IACxE,6BAA6B,IAAI,OAAO;IAUlC,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAc3D,WAAW,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,MAAM,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAKrF,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,WAAW,GAAG,SAAS;IAInD,KAAK,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS;IAI/C,GAAG,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,GAAG,SAAS;IAI7C,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,cAAc;CAwBvB;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,oBAAoB,EAC9B,SAAS,EAAE,MAAM,GAChB;IACD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,MAAM,CAAA;IAC1D,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAC1B,GAAG,SAAS,CAuBZ"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { SessionId as sideChatSessionId } from '../../shared/contracts.js';
|
|
2
|
-
import { addSelectionToConversation as addSelectionToParentComposer, conversationAnnotations, removeConversationAnnotations as removeParentConversationAnnotations, } from '../parent-composer/add-to-conversation.js';
|
|
2
|
+
import { addSelectionToConversation as addSelectionToParentComposer, conversationAnnotations, removeConversationAnnotations as removeParentConversationAnnotations, updateConversationAnnotation as updateParentConversationAnnotation, } from '../parent-composer/add-to-conversation.js';
|
|
3
|
+
import { ConversationAnnotationPersistence } from '../parent-composer/annotation-persistence.js';
|
|
3
4
|
const BINDING_WAIT_MS = 8_000;
|
|
4
5
|
function sideChatError(error, fallback) {
|
|
5
6
|
return {
|
|
@@ -141,11 +142,35 @@ class Rc6SessionBinding {
|
|
|
141
142
|
export class Rc6SideChatSessions {
|
|
142
143
|
ctx;
|
|
143
144
|
renamed = new Set();
|
|
145
|
+
annotationPersistence = new ConversationAnnotationPersistence();
|
|
144
146
|
constructor(ctx) {
|
|
145
147
|
this.ctx = ctx;
|
|
146
148
|
}
|
|
147
149
|
/** Observable rc.6 Session-list surface used to follow main-session switches. */
|
|
148
150
|
subscribeList = (listener) => this.ctx.sessions.list.subscribe(listener);
|
|
151
|
+
/** Follow both current-session switches and that session's composer state. */
|
|
152
|
+
subscribeConversationInput = (listener) => {
|
|
153
|
+
let input;
|
|
154
|
+
let removeInputListener = () => { };
|
|
155
|
+
const bindInput = () => {
|
|
156
|
+
const next = this.currentParentInput();
|
|
157
|
+
if (next === input)
|
|
158
|
+
return;
|
|
159
|
+
removeInputListener();
|
|
160
|
+
input = next;
|
|
161
|
+
removeInputListener = input?.state.subscribe?.(listener) ?? (() => { });
|
|
162
|
+
};
|
|
163
|
+
bindInput();
|
|
164
|
+
const removeListListener = this.ctx.sessions.list.subscribe(() => {
|
|
165
|
+
bindInput();
|
|
166
|
+
listener();
|
|
167
|
+
});
|
|
168
|
+
return () => {
|
|
169
|
+
removeListListener();
|
|
170
|
+
removeInputListener();
|
|
171
|
+
};
|
|
172
|
+
};
|
|
173
|
+
currentConversationInputSnapshot = () => this.currentParentInput()?.state.getSnapshot();
|
|
149
174
|
currentSessionId() {
|
|
150
175
|
const current = this.ctx.sessions.list.getSnapshot().current;
|
|
151
176
|
return current === undefined ? undefined : sideChatSessionId(current);
|
|
@@ -173,30 +198,46 @@ export class Rc6SideChatSessions {
|
|
|
173
198
|
addSelectionToConversation(selection, comment) {
|
|
174
199
|
if (this.currentSessionId() !== selection.parentSessionId)
|
|
175
200
|
return false;
|
|
176
|
-
const
|
|
177
|
-
if (
|
|
201
|
+
const input = this.currentParentInput();
|
|
202
|
+
if (input === undefined || !addSelectionToParentComposer(input, selection, comment))
|
|
203
|
+
return false;
|
|
204
|
+
this.annotationPersistence.reconcile(selection.parentSessionId, input);
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
/** Update an existing unsent annotation without adding a duplicate passage. */
|
|
208
|
+
updateConversationAnnotation(annotationIndex, comment) {
|
|
209
|
+
const sessionId = this.currentSessionId();
|
|
210
|
+
const input = this.currentParentInput();
|
|
211
|
+
if (sessionId === undefined
|
|
212
|
+
|| input === undefined
|
|
213
|
+
|| !updateParentConversationAnnotation(input, annotationIndex, comment))
|
|
178
214
|
return false;
|
|
179
|
-
|
|
215
|
+
this.annotationPersistence.reconcile(sessionId, input);
|
|
216
|
+
return true;
|
|
217
|
+
}
|
|
218
|
+
/** Mirror or recover the current Session's unsent annotation occurrence. */
|
|
219
|
+
reconcileConversationAnnotationPersistence() {
|
|
220
|
+
const sessionId = this.currentSessionId();
|
|
221
|
+
const input = this.currentParentInput();
|
|
222
|
+
if (sessionId !== undefined && input !== undefined) {
|
|
223
|
+
this.annotationPersistence.reconcile(sessionId, input);
|
|
224
|
+
}
|
|
180
225
|
}
|
|
181
226
|
/** Number assigned to the next annotation shown beside the selected passage. */
|
|
182
227
|
nextConversationAnnotationNumber() {
|
|
183
|
-
const
|
|
184
|
-
|
|
185
|
-
return 1;
|
|
186
|
-
const scope = this.ctx.sessions.scope(dshSessionId(sessionId));
|
|
187
|
-
if (scope === undefined)
|
|
188
|
-
return 1;
|
|
189
|
-
return conversationAnnotations(this.ctx.conversation.input.for(scope).state.getSnapshot()).length + 1;
|
|
228
|
+
const snapshot = this.currentConversationInputSnapshot();
|
|
229
|
+
return snapshot === undefined ? 1 : conversationAnnotations(snapshot).length + 1;
|
|
190
230
|
}
|
|
191
231
|
/** Remove the current Session's unsent selected-passage annotations. */
|
|
192
232
|
removeConversationAnnotations() {
|
|
193
233
|
const sessionId = this.currentSessionId();
|
|
194
|
-
|
|
234
|
+
const input = this.currentParentInput();
|
|
235
|
+
if (sessionId === undefined
|
|
236
|
+
|| input === undefined
|
|
237
|
+
|| !removeParentConversationAnnotations(input))
|
|
195
238
|
return false;
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
return false;
|
|
199
|
-
return removeParentConversationAnnotations(this.ctx.conversation.input.for(scope));
|
|
239
|
+
this.annotationPersistence.reconcile(sessionId, input);
|
|
240
|
+
return true;
|
|
200
241
|
}
|
|
201
242
|
async retain(sessionId) {
|
|
202
243
|
const binding = await this.waitForBinding(dshSessionId(sessionId));
|
|
@@ -224,6 +265,16 @@ export class Rc6SideChatSessions {
|
|
|
224
265
|
title(sessionId) {
|
|
225
266
|
return this.ctx.sessions.list.getSnapshot().byId[dshSessionId(sessionId)]?.displayTitle;
|
|
226
267
|
}
|
|
268
|
+
cwd(sessionId) {
|
|
269
|
+
return this.ctx.sessions.list.getSnapshot().byId[dshSessionId(sessionId)]?.cwd;
|
|
270
|
+
}
|
|
271
|
+
currentParentInput() {
|
|
272
|
+
const sessionId = this.currentSessionId();
|
|
273
|
+
if (sessionId === undefined)
|
|
274
|
+
return;
|
|
275
|
+
const scope = this.ctx.sessions.scope(dshSessionId(sessionId));
|
|
276
|
+
return scope === undefined ? undefined : this.ctx.conversation.input.for(scope);
|
|
277
|
+
}
|
|
227
278
|
waitForBinding(sessionId) {
|
|
228
279
|
const immediate = this.ctx.sessions.binding(sessionId);
|
|
229
280
|
if (immediate !== undefined)
|