= (
});
}
if (model.sessionId != null) {
- footerItems.push({
+ footerMetadataItems.push({
label: t('toolCards.execProcess.session'),
monospace: true,
value: `#${model.sessionId}`,
});
}
if (model.remote) {
- footerItems.push({ value: t('toolCards.execProcess.remote') });
+ footerMetadataItems.push({ value: t('toolCards.execProcess.remote') });
}
- if (model.tty) {
- footerItems.push({ value: t('toolCards.execProcess.tty') });
+ if (model.tty && model.kind !== 'command') {
+ footerMetadataItems.push({ value: t('toolCards.execProcess.tty') });
}
- if (model.exitCode != null) {
- footerItems.push({
- monospace: true,
- tone: model.exitCode === 0 ? 'success' : 'danger',
- value: t('toolCards.terminal.exitCode', { code: model.exitCode }),
- });
- }
- if (model.wallTimeSeconds != null) {
- footerItems.push({
- monospace: true,
- value: t('toolCards.execProcess.wallTime', { seconds: model.wallTimeSeconds.toFixed(3) }),
- });
+ const exitCodeFooterItem: CommandToolCardFooterItem | undefined = model.exitCode != null
+ ? {
+ monospace: true,
+ tone: model.exitCode === 0 ? 'success' : 'danger',
+ value: t('toolCards.terminal.exitCode', { code: model.exitCode }),
+ }
+ : undefined;
+ const wallTimeFooterItem: CommandToolCardFooterItem | undefined = model.wallTimeSeconds != null
+ ? {
+ monospace: true,
+ value: t('toolCards.execProcess.wallTime', { seconds: model.wallTimeSeconds.toFixed(3) }),
+ }
+ : undefined;
+ if (model.kind === 'stdin') {
+ if (wallTimeFooterItem) {
+ footerMetadataItems.push(wallTimeFooterItem);
+ }
+ if (exitCodeFooterItem) {
+ footerMetadataItems.push(exitCodeFooterItem);
+ }
+ } else {
+ if (exitCodeFooterItem) {
+ footerMetadataItems.push(exitCodeFooterItem);
+ }
+ if (wallTimeFooterItem) {
+ footerMetadataItems.push(wallTimeFooterItem);
+ }
}
+ footerItems.push(...footerMetadataItems.map((item, index) => (
+ model.kind === 'stdin' && index === 0
+ ? { ...item, pushToEnd: true }
+ : item
+ )));
return (
@@ -328,6 +349,7 @@ export const ExecProcessToolCardView: React.FC = (
) : undefined}
outputAction={outputText ? renderCopyOutputButton() : undefined}
outputDensity={keepCompactCompletionPreview || isRunning ? 'compact' : 'expanded'}
+ outputSizing={status === 'completed' && userToggledRef.current ? 'content' : 'fixed'}
reserveFooter
reserveOutput
requiresConfirmation={status === 'pending_confirmation'}
diff --git a/src/web-ui/src/locales/en-US/flow-chat.json b/src/web-ui/src/locales/en-US/flow-chat.json
index b1dcf49d1a..7e28b50e20 100644
--- a/src/web-ui/src/locales/en-US/flow-chat.json
+++ b/src/web-ui/src/locales/en-US/flow-chat.json
@@ -1749,7 +1749,7 @@
},
"execProcess": {
"executeCommand": "Run command:",
- "writeStdin": "Write stdin:",
+ "writeStdin": "Send input:",
"pollProcess": "Poll process:",
"interruptProcess": "Interrupt process:",
"killProcess": "Kill process:",
diff --git a/src/web-ui/src/locales/zh-CN/flow-chat.json b/src/web-ui/src/locales/zh-CN/flow-chat.json
index cda5de0052..e62a38b863 100644
--- a/src/web-ui/src/locales/zh-CN/flow-chat.json
+++ b/src/web-ui/src/locales/zh-CN/flow-chat.json
@@ -1749,7 +1749,7 @@
},
"execProcess": {
"executeCommand": "运行命令:",
- "writeStdin": "写入标准输入:",
+ "writeStdin": "发送输入:",
"pollProcess": "轮询进程:",
"interruptProcess": "中断进程:",
"killProcess": "终止进程:",
diff --git a/src/web-ui/src/locales/zh-TW/flow-chat.json b/src/web-ui/src/locales/zh-TW/flow-chat.json
index 45fe7f26ca..86c5e2b511 100644
--- a/src/web-ui/src/locales/zh-TW/flow-chat.json
+++ b/src/web-ui/src/locales/zh-TW/flow-chat.json
@@ -1749,7 +1749,7 @@
},
"execProcess": {
"executeCommand": "執行命令:",
- "writeStdin": "寫入標準輸入:",
+ "writeStdin": "傳送輸入:",
"pollProcess": "輪詢進程:",
"interruptProcess": "中斷進程:",
"killProcess": "終止進程:",