in codex-cli/src/components/singlepass-cli-app.tsx [113:181]
function DirectoryInfo({
rootPath,
files,
contextLimit,
showStruct = false,
}: {
rootPath: string;
files: Array<{ path: string; content: string }>;
contextLimit: number;
showStruct?: boolean;
}) {
const asciiStruct = React.useMemo(
() =>
showStruct
? makeAsciiDirectoryStructure(
rootPath,
files.map((fc) => fc.path),
)
: null,
[showStruct, rootPath, files],
);
const totalChars = files.reduce((acc, fc) => acc + fc.content.length, 0);
return (
<Box flexDirection="column">
<Box
flexDirection="column"
borderStyle="round"
borderColor="gray"
width={80}
paddingX={1}
>
<Text>
<Text color="magentaBright">↳</Text> <Text bold>Directory:</Text>{" "}
{rootPath}
</Text>
<Text>
<Text color="magentaBright">↳</Text>{" "}
<Text bold>Paths in context:</Text> {rootPath} ({files.length} files)
</Text>
<Text>
<Text color="magentaBright">↳</Text> <Text bold>Context size:</Text>{" "}
{totalChars} / {contextLimit} ( ~
{((totalChars / contextLimit) * 100).toFixed(2)}% )
</Text>
{showStruct ? (
<Text>
<Text color="magentaBright">↳</Text>
<Text bold>Context structure:</Text>
<Text>{asciiStruct}</Text>
</Text>
) : (
<Text>
<Text color="magentaBright">↳</Text>{" "}
<Text bold>Context structure:</Text>{" "}
<Text dimColor>
Hidden. Type <Text color="cyan">/context</Text> to show it.
</Text>
</Text>
)}
{totalChars > contextLimit ? (
<Text color="red">
Files exceed context limit. See breakdown below.
</Text>
) : null}
</Box>
</Box>
);
}