refac
This commit is contained in:
1 parent
78f48a21ee
commit
e623c02acc
4 files changed
+76
-7
No files matched your search
@@ -169,7 +169,7 @@ function getInlineFileFromToolOutput(callItem?: OutputItem, resultItem?: OutputI
|
|||||||
}
|
}
|
||||||
|
|
||||||
const args = parseJSONStringValue(callItem.arguments) as Record<string, unknown>;
|
const args = parseJSONStringValue(callItem.arguments) as Record<string, unknown>;
|
||||||
if (!args || typeof args !== 'object' || args.inline !== true) {
|
if (!args || typeof args !== 'object') {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,6 +179,7 @@ function getInlineFileFromToolOutput(callItem?: OutputItem, resultItem?: OutputI
|
|||||||
typeof result !== 'object' ||
|
typeof result !== 'object' ||
|
||||||
result.type !== 'file' ||
|
result.type !== 'file' ||
|
||||||
result.source !== 'open_terminal' ||
|
result.source !== 'open_terminal' ||
|
||||||
|
result.displayed !== true ||
|
||||||
result.exists === false ||
|
result.exists === false ||
|
||||||
!result.path ||
|
!result.path ||
|
||||||
!result.terminal_selector
|
!result.terminal_selector
|
||||||
|
|||||||
@@ -37,6 +37,7 @@
|
|||||||
let scrollOnBranchChange = true;
|
let scrollOnBranchChange = true;
|
||||||
let scrollOnResponseGeneration = true;
|
let scrollOnResponseGeneration = true;
|
||||||
let showFilesOnTerminalSelect = true;
|
let showFilesOnTerminalSelect = true;
|
||||||
|
let terminalFileDisplay: 'sidebar' | 'inline' = 'sidebar';
|
||||||
let userLocation = false;
|
let userLocation = false;
|
||||||
|
|
||||||
// Interface
|
// Interface
|
||||||
@@ -298,6 +299,7 @@
|
|||||||
scrollOnBranchChange = currentSettings?.scrollOnBranchChange ?? true;
|
scrollOnBranchChange = currentSettings?.scrollOnBranchChange ?? true;
|
||||||
scrollOnResponseGeneration = currentSettings?.scrollOnResponseGeneration ?? true;
|
scrollOnResponseGeneration = currentSettings?.scrollOnResponseGeneration ?? true;
|
||||||
showFilesOnTerminalSelect = currentSettings?.showFilesOnTerminalSelect ?? true;
|
showFilesOnTerminalSelect = currentSettings?.showFilesOnTerminalSelect ?? true;
|
||||||
|
terminalFileDisplay = currentSettings?.terminalFileDisplay === 'inline' ? 'inline' : 'sidebar';
|
||||||
|
|
||||||
temporaryChatByDefault = currentSettings?.temporaryChatByDefault ?? false;
|
temporaryChatByDefault = currentSettings?.temporaryChatByDefault ?? false;
|
||||||
chatDirection = currentSettings?.chatDirection ?? 'auto';
|
chatDirection = currentSettings?.chatDirection ?? 'auto';
|
||||||
@@ -1257,6 +1259,31 @@
|
|||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<div class={settingRowClass}>
|
||||||
|
<div id="terminal-file-display-label" class={settingLabelClass}>
|
||||||
|
{$i18n.t('Terminal File Display')}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button
|
||||||
|
aria-labelledby="terminal-file-display-label terminal-file-display-state"
|
||||||
|
class={actionButtonClass}
|
||||||
|
on:click={() => {
|
||||||
|
terminalFileDisplay = terminalFileDisplay === 'inline' ? 'sidebar' : 'inline';
|
||||||
|
saveSettings({ terminalFileDisplay });
|
||||||
|
}}
|
||||||
|
type="button"
|
||||||
|
>
|
||||||
|
<span id="terminal-file-display-state">
|
||||||
|
{terminalFileDisplay === 'inline' ? $i18n.t('Inline') : $i18n.t('Sidebar')}
|
||||||
|
</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<p class={settingDescriptionClass}>
|
||||||
|
{$i18n.t('Choose where terminal display_file results appear by default.')}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<div class={settingRowClass}>
|
<div class={settingRowClass}>
|
||||||
<div id="show-files-on-terminal-select-label" class={settingLabelClass}>
|
<div id="show-files-on-terminal-select-label" class={settingLabelClass}>
|
||||||
|
|||||||
@@ -252,6 +252,7 @@ type Settings = {
|
|||||||
scrollOnBranchChange?: boolean;
|
scrollOnBranchChange?: boolean;
|
||||||
scrollOnResponseGeneration?: boolean;
|
scrollOnResponseGeneration?: boolean;
|
||||||
showFilesOnTerminalSelect?: boolean;
|
showFilesOnTerminalSelect?: boolean;
|
||||||
|
terminalFileDisplay?: 'sidebar' | 'inline';
|
||||||
directConnections?: null;
|
directConnections?: null;
|
||||||
chatBubble?: boolean;
|
chatBubble?: boolean;
|
||||||
copyFormatted?: boolean;
|
copyFormatted?: boolean;
|
||||||
|
|||||||
@@ -459,8 +459,41 @@
|
|||||||
return { toolServer, toolServerData, token };
|
return { toolServer, toolServerData, token };
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const isDirectTerminalServer = (serverUrl) =>
|
||||||
|
!!serverUrl &&
|
||||||
|
(($settings?.terminalServers ?? []).some((server) => server.url === serverUrl) ||
|
||||||
|
($terminalServers ?? []).some((server) => !server.id && server.url === serverUrl));
|
||||||
|
|
||||||
|
const terminalFileResult = (result, params, serverUrl, chatId) => {
|
||||||
|
const path = result?.path ?? params?.path;
|
||||||
|
const name = result?.name ?? String(path ?? '').split('/').filter(Boolean).at(-1) ?? 'file';
|
||||||
|
const contentType = result?.content_type ?? result?.mime_type ?? 'application/octet-stream';
|
||||||
|
|
||||||
|
return {
|
||||||
|
...(result ?? {}),
|
||||||
|
type: 'file',
|
||||||
|
source: 'open_terminal',
|
||||||
|
displayed: true,
|
||||||
|
terminal_selector: serverUrl,
|
||||||
|
terminal_url: serverUrl,
|
||||||
|
session_id: chatId,
|
||||||
|
path,
|
||||||
|
full_path: result?.full_path ?? path,
|
||||||
|
name,
|
||||||
|
mime_type: contentType,
|
||||||
|
content_type: contentType
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
const executeTool = async (data, cb, chatId) => {
|
const executeTool = async (data, cb, chatId) => {
|
||||||
const { toolServer, toolServerData, token } = resolveToolServer(data.server?.url);
|
const { toolServer, toolServerData, token } = resolveToolServer(data.server?.url);
|
||||||
|
const defaultInline =
|
||||||
|
data?.name === 'display_file' &&
|
||||||
|
data?.params?.path &&
|
||||||
|
data?.params?.inline === undefined &&
|
||||||
|
$settings?.terminalFileDisplay === 'inline' &&
|
||||||
|
isDirectTerminalServer(data.server?.url);
|
||||||
|
const params = defaultInline ? { ...data.params, inline: true } : data?.params;
|
||||||
|
|
||||||
console.log('executeTool', data, toolServer);
|
console.log('executeTool', data, toolServer);
|
||||||
|
|
||||||
@@ -469,26 +502,33 @@
|
|||||||
token,
|
token,
|
||||||
toolServer.url,
|
toolServer.url,
|
||||||
data?.name,
|
data?.name,
|
||||||
data?.params,
|
params,
|
||||||
toolServerData,
|
toolServerData,
|
||||||
chatId
|
chatId
|
||||||
);
|
);
|
||||||
|
|
||||||
console.log('executeToolServer', res);
|
console.log('executeToolServer', res);
|
||||||
const result = Array.isArray(res) ? res[0] : res;
|
const result = Array.isArray(res) ? res[0] : res;
|
||||||
|
const inlineDisplayFile = data?.name === 'display_file' && params?.path && params?.inline === true;
|
||||||
|
const output =
|
||||||
|
inlineDisplayFile && result?.exists !== false
|
||||||
|
? Array.isArray(res)
|
||||||
|
? [terminalFileResult(result, params, toolServer.url, chatId)]
|
||||||
|
: terminalFileResult(result, params, toolServer.url, chatId)
|
||||||
|
: res;
|
||||||
|
|
||||||
if (data?.name === 'display_file' && data?.params?.path && data?.params?.inline !== true) {
|
if (data?.name === 'display_file' && params?.path && !inlineDisplayFile) {
|
||||||
if (result?.exists !== false) {
|
if (result?.exists !== false) {
|
||||||
displayFileHandler(data.params.path, { showControls, showFileNavPath });
|
displayFileHandler(params.path, { showControls, showFileNavPath });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (['write_file'].includes(data?.name) && data?.params?.path) {
|
if (['write_file'].includes(data?.name) && params?.path) {
|
||||||
showFileNavDir.set(result?.path ?? data.params.path);
|
showFileNavDir.set(result?.path ?? params.path);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cb) {
|
if (cb) {
|
||||||
cb(structuredClone(res));
|
cb(structuredClone(output));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (cb) {
|
if (cb) {
|
||||||
|
|||||||
Reference in new issue
Block a user