mirror of
https://github.com/openai/codex.git
synced 2026-04-24 22:54:54 +00:00
This PR introduces the following type: ```typescript export type FileOpenerScheme = "vscode" | "cursor" | "windsurf"; ``` and uses it as the new type for a `fileOpener` option in `config.json`. If set, this will be used to linkify file annotations in the output using the URI-based file opener supported in VS Code-based IDEs. Currently, this does not pass: Updated `codex-cli/tests/markdown.test.tsx` to verify the new behavior. Note it required mocking `supports-hyperlinks` and temporarily modifying `chalk.level` to yield the desired output.
69 lines
2.0 KiB
TypeScript
69 lines
2.0 KiB
TypeScript
import type { TerminalChatSession } from "../../utils/session.js";
|
|
import type { ResponseItem } from "openai/resources/responses/responses";
|
|
import type { FileOpenerScheme } from "src/utils/config.js";
|
|
|
|
import TerminalChatResponseItem from "./terminal-chat-response-item";
|
|
import { Box, Text } from "ink";
|
|
import React from "react";
|
|
|
|
export default function TerminalChatPastRollout({
|
|
session,
|
|
items,
|
|
fileOpener,
|
|
}: {
|
|
session: TerminalChatSession;
|
|
items: Array<ResponseItem>;
|
|
fileOpener: FileOpenerScheme | undefined;
|
|
}): React.ReactElement {
|
|
const { version, id: sessionId, model } = session;
|
|
return (
|
|
<Box flexDirection="column">
|
|
<Box borderStyle="round" paddingX={1} width={64}>
|
|
<Text>
|
|
● OpenAI <Text bold>Codex</Text>{" "}
|
|
<Text dimColor>
|
|
(research preview) <Text color="blueBright">v{version}</Text>
|
|
</Text>
|
|
</Text>
|
|
</Box>
|
|
<Box
|
|
borderStyle="round"
|
|
borderColor="gray"
|
|
paddingX={1}
|
|
width={64}
|
|
flexDirection="column"
|
|
>
|
|
<Text>
|
|
<Text color="magenta">●</Text> localhost{" "}
|
|
<Text dimColor>· session:</Text>{" "}
|
|
<Text color="magentaBright" dimColor>
|
|
{sessionId}
|
|
</Text>
|
|
</Text>
|
|
<Text dimColor>
|
|
<Text color="blueBright">↳</Text> When / Who:{" "}
|
|
<Text bold>
|
|
{session.timestamp} <Text dimColor>/</Text> {session.user}
|
|
</Text>
|
|
</Text>
|
|
<Text dimColor>
|
|
<Text color="blueBright">↳</Text> model: <Text bold>{model}</Text>
|
|
</Text>
|
|
</Box>
|
|
<Box flexDirection="column" gap={1}>
|
|
{React.useMemo(
|
|
() =>
|
|
items.map((item, key) => (
|
|
<TerminalChatResponseItem
|
|
key={key}
|
|
item={item}
|
|
fileOpener={fileOpener}
|
|
/>
|
|
)),
|
|
[items, fileOpener],
|
|
)}
|
|
</Box>
|
|
</Box>
|
|
);
|
|
}
|