mirror of
http://10.0.2.1:3031/sauer/claude-code.git
synced 2026-06-30 12:46:58 +10:00
101 lines
14 KiB
TypeScript
101 lines
14 KiB
TypeScript
|
|
import { c as _c } from "react/compiler-runtime";
|
||
|
|
import figures from 'figures';
|
||
|
|
import React from 'react';
|
||
|
|
import { Markdown } from '../../components/Markdown.js';
|
||
|
|
import { BLACK_CIRCLE } from '../../constants/figures.js';
|
||
|
|
import { Box, Text } from '../../ink.js';
|
||
|
|
import type { ProgressMessage } from '../../types/message.js';
|
||
|
|
import { getDisplayPath } from '../../utils/file.js';
|
||
|
|
import { formatFileSize } from '../../utils/format.js';
|
||
|
|
import { formatBriefTimestamp } from '../../utils/formatBriefTimestamp.js';
|
||
|
|
import type { Output } from './BriefTool.js';
|
||
|
|
export function renderToolUseMessage(): React.ReactNode {
|
||
|
|
return '';
|
||
|
|
}
|
||
|
|
export function renderToolResultMessage(output: Output, _progressMessages: ProgressMessage[], options?: {
|
||
|
|
isTranscriptMode?: boolean;
|
||
|
|
isBriefOnly?: boolean;
|
||
|
|
}): React.ReactNode {
|
||
|
|
const hasAttachments = (output.attachments?.length ?? 0) > 0;
|
||
|
|
if (!output.message && !hasAttachments) {
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
|
||
|
|
// In transcript mode (ctrl+o), model text is NOT filtered — keep the ⏺ so
|
||
|
|
// SendUserMessage is visually distinct from the surrounding text blocks.
|
||
|
|
if (options?.isTranscriptMode) {
|
||
|
|
return <Box flexDirection="row" marginTop={1}>
|
||
|
|
<Box minWidth={2}>
|
||
|
|
<Text color="text">{BLACK_CIRCLE}</Text>
|
||
|
|
</Box>
|
||
|
|
<Box flexDirection="column">
|
||
|
|
{output.message ? <Markdown>{output.message}</Markdown> : null}
|
||
|
|
<AttachmentList attachments={output.attachments} />
|
||
|
|
</Box>
|
||
|
|
</Box>;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Brief-only (chat) view: "Claude" label + 2-col indent, matching the "You"
|
||
|
|
// label UserPromptMessage applies to user input (#20889). The "N in background"
|
||
|
|
// spinner status lives in BriefSpinner (Spinner.tsx) — stateless label here.
|
||
|
|
if (options?.isBriefOnly) {
|
||
|
|
const ts = output.sentAt ? formatBriefTimestamp(output.sentAt) : '';
|
||
|
|
return <Box flexDirection="column" marginTop={1} paddingLeft={2}>
|
||
|
|
<Box flexDirection="row">
|
||
|
|
<Text color="briefLabelClaude">Claude</Text>
|
||
|
|
{ts ? <Text dimColor> {ts}</Text> : null}
|
||
|
|
</Box>
|
||
|
|
<Box flexDirection="column">
|
||
|
|
{output.message ? <Markdown>{output.message}</Markdown> : null}
|
||
|
|
<AttachmentList attachments={output.attachments} />
|
||
|
|
</Box>
|
||
|
|
</Box>;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Default view: dropTextInBriefTurns (Messages.tsx) hides the redundant
|
||
|
|
// assistant text that would otherwise precede this — SendUserMessage is the
|
||
|
|
// only text-like content in its turn. No gutter mark; read as plain text.
|
||
|
|
// userFacingName() returns '' so UserToolSuccessMessage drops its columns-5
|
||
|
|
// width constraint and AssistantToolUseMessage renders null (no tool chrome).
|
||
|
|
// Empty minWidth={2} box mirrors AssistantTextMessage's ⏺ gutter spacing.
|
||
|
|
return <Box flexDirection="row" marginTop={1}>
|
||
|
|
<Box minWidth={2} />
|
||
|
|
<Box flexDirection="column">
|
||
|
|
{output.message ? <Markdown>{output.message}</Markdown> : null}
|
||
|
|
<AttachmentList attachments={output.attachments} />
|
||
|
|
</Box>
|
||
|
|
</Box>;
|
||
|
|
}
|
||
|
|
type AttachmentListProps = {
|
||
|
|
attachments: Output['attachments'];
|
||
|
|
};
|
||
|
|
export function AttachmentList(t0) {
|
||
|
|
const $ = _c(4);
|
||
|
|
const {
|
||
|
|
attachments
|
||
|
|
} = t0;
|
||
|
|
if (!attachments || attachments.length === 0) {
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
let t1;
|
||
|
|
if ($[0] !== attachments) {
|
||
|
|
t1 = attachments.map(_temp);
|
||
|
|
$[0] = attachments;
|
||
|
|
$[1] = t1;
|
||
|
|
} else {
|
||
|
|
t1 = $[1];
|
||
|
|
}
|
||
|
|
let t2;
|
||
|
|
if ($[2] !== t1) {
|
||
|
|
t2 = <Box flexDirection="column" marginTop={1}>{t1}</Box>;
|
||
|
|
$[2] = t1;
|
||
|
|
$[3] = t2;
|
||
|
|
} else {
|
||
|
|
t2 = $[3];
|
||
|
|
}
|
||
|
|
return t2;
|
||
|
|
}
|
||
|
|
function _temp(att) {
|
||
|
|
return <Box key={att.path} flexDirection="row"><Text dimColor={true}>{figures.pointerSmall} {att.isImage ? "[image]" : "[file]"}{" "}</Text><Text>{getDisplayPath(att.path)}</Text><Text dimColor={true}> ({formatFileSize(att.size)})</Text></Box>;
|
||
|
|
}
|
||
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWd1cmVzIiwiUmVhY3QiLCJNYXJrZG93biIsIkJMQUNLX0NJUkNMRSIsIkJveCIsIlRleHQiLCJQcm9ncmVzc01lc3NhZ2UiLCJnZXREaXNwbGF5UGF0aCIsImZvcm1hdEZpbGVTaXplIiwiZm9ybWF0QnJpZWZUaW1lc3RhbXAiLCJPdXRwdXQiLCJyZW5kZXJUb29sVXNlTWVzc2FnZSIsIlJlYWN0Tm9kZSIsInJlbmRlclRvb2xSZXN1bHRNZXNzYWdlIiwib3V0cHV0IiwiX3Byb2dyZXNzTWVzc2FnZXMiLCJvcHRpb25zIiwiaXNUcmFuc2NyaXB0TW9kZSIsImlzQnJpZWZPbmx5IiwiaGFzQXR0YWNobWVudHMiLCJhdHRhY2htZW50cyIsImxlbmd0aCIsIm1lc3NhZ2UiLCJ0cyIsInNlbnRBdCIsIkF0dGFjaG1lbnRMaXN0UHJvcHMiLCJBdHRhY2htZW50TGlzdCIsInQwIiwiJCIsIl9jIiwidDEiLCJtYXAiLCJfdGVtcCIsInQyIiwiYXR0IiwicGF0aCIsInBvaW50ZXJTbWFsbCIsImlzSW1hZ2UiLCJzaXplIl0sInNvdXJjZXMiOlsiVUkudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmaWd1cmVzIGZyb20gJ2ZpZ3VyZXMnXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBNYXJrZG93biB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvTWFya2Rvd24uanMnXG5pbXBvcnQgeyBCTEFDS19DSVJDTEUgfSBmcm9tICcuLi8uLi9jb25zdGFudHMvZmlndXJlcy5qcydcbmltcG9ydCB7IEJveCwgVGV4dCB9IGZyb20gJy4uLy4uL2luay5qcydcbmltcG9ydCB0eXBlIHsgUHJvZ3Jlc3NNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdHlwZXMvbWVzc2FnZS5qcydcbmltcG9ydCB7IGdldERpc3BsYXlQYXRoIH0gZnJvbSAnLi4vLi4vdXRpbHMvZmlsZS5qcydcbmltcG9ydCB7IGZvcm1hdEZpbGVTaXplIH0gZnJvbSAnLi4vLi4vdXRpbHMvZm9ybWF0LmpzJ1xuaW1wb3J0IHsgZm9ybWF0QnJpZWZUaW1lc3RhbXAgfSBmcm9tICcuLi8uLi91dGlscy9mb3JtYXRCcmllZlRpbWVzdGFtcC5qcydcbmltcG9ydCB0eXBlIHsgT3V0cHV0IH0gZnJvbSAnLi9CcmllZlRvb2wuanMnXG5cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJUb29sVXNlTWVzc2FnZSgpOiBSZWFjdC5SZWFjdE5vZGUge1xuICByZXR1cm4gJydcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclRvb2xSZXN1bHRNZXNzYWdlKFxuICBvdXRwdXQ6IE91dHB1dCxcbiAgX3Byb2dyZXNzTWVzc2FnZXM6IFByb2dyZXNzTWVzc2FnZVtdLFxuICBvcHRpb25zPzoge1xuICAgIGlzVHJhbnNjcmlwdE1vZGU/OiBib29sZWFuXG4gICAgaXNCcmllZk9ubHk/OiBib29sZWFuXG4gIH0sXG4pOiBSZWFjdC5SZWFjdE5vZGUge1xuICBjb25zdCBoYXNBdHRhY2htZW50cyA9IChvdXRwdXQuYXR0YWNobWVudHM/Lmxlbmd0aCA/PyAwKSA+IDBcbiAgaWYgKCFvdXRwdXQubWVzc2FnZSAmJiAhaGFzQXR0YWNobWVudHMpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gSW4gdHJhbnNjcmlwdCBtb2RlIChjdHJsK28pLCBtb2RlbCB0ZXh0IGlzIE5PVCBmaWx0ZXJlZCDigJQga2VlcCB0aGUg4o+6IHNvXG4gIC8vIFNlbmRVc2VyTWVzc2FnZSBpcyB2aXN1YWxseSBkaXN0aW5jdCBmcm9tIHRoZSBzdXJyb3VuZGluZyB0ZXh0IGJsb2Nrcy5cbiAgaWYgKG9wdGlvbnM/LmlzVHJhbnNjcmlwdE1vZGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCIgbWFyZ2luVG9wPXsxfT5cbiAgICAgICAgPEJveCBtaW5XaWR0aD17Mn0+XG4gICAgICAgICAgPFRleHQgY29sb3I9XCJ0ZXh0XCI+e0JMQUNLX0NJUkNMRX08L1RleHQ+XG4gICAgICAgIDwvQm94PlxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICB7b3V0cHV0Lm1lc3NhZ2UgPyA8TWFya2Rvd24+e291dHB1dC5tZXNzYWdlfTwvTWFya2Rvd24+IDogbnVsbH1cbiAgICAgICAgICA8QXR0YWNobWVudExpc3QgYXR0YWNobWVudHM9e291dHB1dC5hdHRhY2htZW50c30gLz5cbiAgICAgICAgPC9Cb3g+XG4gICAgICA8L0JveD5cbiAgICApXG4gIH1cblxuICAvLyBCcmllZi1vbmx5IChjaGF0KSB2aWV3OiBcIkNsYXVkZVwiIGxhYmVsICsgMi1jb2wgaW5kZW50LCBtYXRjaGluZyB0aGUgXCJZb3VcIlxuICAvLyBsYWJlbCBVc2VyUHJvbXB0TWVzc2FnZSBhcHBsaWVzIHRvIHVzZXIgaW5wdXQgKCMyMDg4OSkuIFRoZSBcIk4gaW4gYmFja2dyb3VuZFwiXG4gIC8vIHNwaW5uZXIgc3RhdHVzIGxpdmVzIGluIEJyaWVmU3Bpbm5lciAoU3Bpbm5lci50c3gpIOKAlCBzdGF0ZWxlc3MgbGFiZWwgaGVyZS5cbiAgaWYgKG9wdGlvbnM/LmlzQnJpZWZPbmx5KSB7XG4gICAgY29uc3QgdHMgPSBvdXRwdXQuc2VudEF0ID8gZm9ybWF0QnJpZWZUaW1lc3RhbXAob3V0cHV0LnNlbnRBdCkgOiAnJ1xuICAgIHJldHVybiAoXG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBtYXJnaW5Ub3A9ezF9IHBhZGRpbmdMZWZ0PXsyfT5cbiAgICAgICAgPEJveCBmbGV4RGlyZWN0aW9uPVwicm93XCI+XG4gICAgICAgICAgPFRleHQgY29sb3I9XCJicmllZkxhYmVsQ2xhdWRlXCI+Q2xhdWRlPC9UZXh0PlxuICAgICAgICAgIHt0cyA/IDxUZXh0IGRpbUNvbG9yPiB7dHN9PC9UZXh0PiA6IG51bGx9XG4gICAgICAgIDwvQm94PlxuICAgICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIj5cbiAgICAgICAgICB7b3V0cHV0Lm1lc3NhZ2UgPyA8TWFya2Rvd24+e291dHB1dC5tZXNzYWdlfTwvTWFya2Rvd24+IDogbnVsbH1cbiAgICAgICAgICA8QXR0YWNobWVudExpc3QgYXR0YWNobWVudHM9e291dHB1dC5hdHRhY2htZW50c30gLz5cbiAgICAgICAgPC9Cb3g+XG4gICAgICA8L0JveD5cbiAgICApXG4gIH1cblxuICAvLyBEZWZhdWx0IHZpZXc6IGRyb3BUZXh0SW5CcmllZlR1cm5zIChNZXNzYWdlcy50c3gpIGhpZGVzIHRoZSByZWR1bmRhbnRcbiAgLy8gYXNzaXN0YW50IHRleHQgdGhhdCB3b3VsZCBvdGhlcndpc2UgcHJlY2VkZSB0aGlzIOKAlCBTZW5kVXNlck1lc3NhZ2UgaXMgdGhlXG4gIC8vIG9ubHkgdGV
|