π File detail
components/SessionPreview.tsx
π§© .tsxπ 194 linesπΎ 19,227 bytesπ text
β Back to All Filesπ― Use case
This file lives under βcomponents/β, which covers shared React UI pieces. On the API surface it exposes SessionPreview β mainly types, interfaces, or factory objects. Dependencies touch React UI and crypto. It composes internal code from ink, keybindings, tools, types, and utils (relative imports).
Generated from folder role, exports, dependency roots, and inline comments β not hand-reviewed for every path.
π§ Inline summary
import { c as _c } from "react/compiler-runtime"; import type { UUID } from 'crypto'; import React, { useCallback } from 'react'; import { Box, Text } from '../ink.js'; import { useKeybinding } from '../keybindings/useKeybinding.js';
π€ Exports (heuristic)
SessionPreview
π External import roots
Package roots from from "β¦" (relative paths omitted).
reactcrypto
π₯οΈ Source preview
import { c as _c } from "react/compiler-runtime";
import type { UUID } from 'crypto';
import React, { useCallback } from 'react';
import { Box, Text } from '../ink.js';
import { useKeybinding } from '../keybindings/useKeybinding.js';
import { getAllBaseTools } from '../tools.js';
import type { LogOption } from '../types/logs.js';
import { formatRelativeTimeAgo } from '../utils/format.js';
import { getSessionIdFromLog, isLiteLog, loadFullLog } from '../utils/sessionStorage.js';
import { ConfigurableShortcutHint } from './ConfigurableShortcutHint.js';
import { Byline } from './design-system/Byline.js';
import { KeyboardShortcutHint } from './design-system/KeyboardShortcutHint.js';
import { LoadingState } from './design-system/LoadingState.js';
import { Messages } from './Messages.js';
type Props = {
log: LogOption;
onExit: () => void;
onSelect: (log: LogOption) => void;
};
export function SessionPreview(t0) {
const $ = _c(33);
const {
log,
onExit,
onSelect
} = t0;
const [fullLog, setFullLog] = React.useState(null);
let t1;
let t2;
if ($[0] !== log) {
t1 = () => {
setFullLog(null);
if (isLiteLog(log)) {
loadFullLog(log).then(setFullLog);
}
};
t2 = [log];
$[0] = log;
$[1] = t1;
$[2] = t2;
} else {
t1 = $[1];
t2 = $[2];
}
React.useEffect(t1, t2);
const isLoading = isLiteLog(log) && fullLog === null;
const displayLog = fullLog ?? log;
let t3;
if ($[3] !== displayLog) {
t3 = getSessionIdFromLog(displayLog) || "" as UUID;
$[3] = displayLog;
$[4] = t3;
} else {
t3 = $[4];
}
const conversationId = t3;
let t4;
if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
t4 = getAllBaseTools();
$[5] = t4;
} else {
t4 = $[5];
}
const tools = t4;
let t5;
if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
t5 = {
context: "Confirmation"
};
$[6] = t5;
} else {
t5 = $[6];
}
useKeybinding("confirm:no", onExit, t5);
let t6;
if ($[7] !== fullLog || $[8] !== log || $[9] !== onSelect) {
t6 = () => {
onSelect(fullLog ?? log);
};
$[7] = fullLog;
$[8] = log;
$[9] = onSelect;
$[10] = t6;
} else {
t6 = $[10];
}
const handleSelect = t6;
let t7;
if ($[11] === Symbol.for("react.memo_cache_sentinel")) {
t7 = {
context: "Confirmation"
};
$[11] = t7;
} else {
t7 = $[11];
}
useKeybinding("confirm:yes", handleSelect, t7);
if (isLoading) {
let t8;
if ($[12] === Symbol.for("react.memo_cache_sentinel")) {
t8 = <LoadingState message={"Loading session\u2026"} />;
$[12] = t8;
} else {
t8 = $[12];
}
let t9;
if ($[13] === Symbol.for("react.memo_cache_sentinel")) {
t9 = <Box flexDirection="column" padding={1}>{t8}<Text dimColor={true}><Byline><ConfigurableShortcutHint action="confirm:no" context="Confirmation" fallback="Esc" description="cancel" /></Byline></Text></Box>;
$[13] = t9;
} else {
t9 = $[13];
}
return t9;
}
let t8;
if ($[14] === Symbol.for("react.memo_cache_sentinel")) {
t8 = [];
$[14] = t8;
} else {
t8 = $[14];
}
let t10;
let t9;
if ($[15] === Symbol.for("react.memo_cache_sentinel")) {
t9 = [];
t10 = new Set();
$[15] = t10;
$[16] = t9;
} else {
t10 = $[15];
t9 = $[16];
}
let t11;
if ($[17] === Symbol.for("react.memo_cache_sentinel")) {
t11 = [];
$[17] = t11;
} else {
t11 = $[17];
}
let t12;
if ($[18] !== conversationId || $[19] !== displayLog.messages) {
t12 = <Messages messages={displayLog.messages} tools={tools} commands={t8} verbose={true} toolJSX={null} toolUseConfirmQueue={t9} inProgressToolUseIDs={t10} isMessageSelectorVisible={false} conversationId={conversationId} screen="transcript" streamingToolUses={t11} showAllInTranscript={true} isLoading={false} />;
$[18] = conversationId;
$[19] = displayLog.messages;
$[20] = t12;
} else {
t12 = $[20];
}
let t13;
if ($[21] !== displayLog.modified) {
t13 = formatRelativeTimeAgo(displayLog.modified);
$[21] = displayLog.modified;
$[22] = t13;
} else {
t13 = $[22];
}
const t14 = displayLog.gitBranch ? ` Β· ${displayLog.gitBranch}` : "";
let t15;
if ($[23] !== displayLog.messageCount || $[24] !== t13 || $[25] !== t14) {
t15 = <Text>{t13} Β·{" "}{displayLog.messageCount} messages{t14}</Text>;
$[23] = displayLog.messageCount;
$[24] = t13;
$[25] = t14;
$[26] = t15;
} else {
t15 = $[26];
}
let t16;
if ($[27] === Symbol.for("react.memo_cache_sentinel")) {
t16 = <Text dimColor={true}><Byline><KeyboardShortcutHint shortcut="Enter" action="resume" /><ConfigurableShortcutHint action="confirm:no" context="Confirmation" fallback="Esc" description="cancel" /></Byline></Text>;
$[27] = t16;
} else {
t16 = $[27];
}
let t17;
if ($[28] !== t15) {
t17 = <Box flexShrink={0} flexDirection="column" borderTopDimColor={true} borderBottom={false} borderLeft={false} borderRight={false} borderStyle="single" paddingLeft={2}>{t15}{t16}</Box>;
$[28] = t15;
$[29] = t17;
} else {
t17 = $[29];
}
let t18;
if ($[30] !== t12 || $[31] !== t17) {
t18 = <Box flexDirection="column">{t12}{t17}</Box>;
$[30] = t12;
$[31] = t17;
$[32] = t18;
} else {
t18 = $[32];
}
return t18;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJVVUlEIiwiUmVhY3QiLCJ1c2VDYWxsYmFjayIsIkJveCIsIlRleHQiLCJ1c2VLZXliaW5kaW5nIiwiZ2V0QWxsQmFzZVRvb2xzIiwiTG9nT3B0aW9uIiwiZm9ybWF0UmVsYXRpdmVUaW1lQWdvIiwiZ2V0U2Vzc2lvbklkRnJvbUxvZyIsImlzTGl0ZUxvZyIsImxvYWRGdWxsTG9nIiwiQ29uZmlndXJhYmxlU2hvcnRjdXRIaW50IiwiQnlsaW5lIiwiS2V5Ym9hcmRTaG9ydGN1dEhpbnQiLCJMb2FkaW5nU3RhdGUiLCJNZXNzYWdlcyIsIlByb3BzIiwibG9nIiwib25FeGl0Iiwib25TZWxlY3QiLCJTZXNzaW9uUHJldmlldyIsInQwIiwiJCIsIl9jIiwiZnVsbExvZyIsInNldEZ1bGxMb2ciLCJ1c2VTdGF0ZSIsInQxIiwidDIiLCJ0aGVuIiwidXNlRWZmZWN0IiwiaXNMb2FkaW5nIiwiZGlzcGxheUxvZyIsInQzIiwiY29udmVyc2F0aW9uSWQiLCJ0NCIsIlN5bWJvbCIsImZvciIsInRvb2xzIiwidDUiLCJjb250ZXh0IiwidDYiLCJoYW5kbGVTZWxlY3QiLCJ0NyIsInQ4IiwidDkiLCJ0MTAiLCJTZXQiLCJ0MTEiLCJ0MTIiLCJtZXNzYWdlcyIsInQxMyIsIm1vZGlmaWVkIiwidDE0IiwiZ2l0QnJhbmNoIiwidDE1IiwibWVzc2FnZUNvdW50IiwidDE2IiwidDE3IiwidDE4Il0sInNvdXJjZXMiOlsiU2Vzc2lvblByZXZpZXcudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgVVVJRCB9IGZyb20gJ2NyeXB0bydcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHsgQm94LCBUZXh0IH0gZnJvbSAnLi4vaW5rLmpzJ1xuaW1wb3J0IHsgdXNlS2V5YmluZGluZyB9IGZyb20gJy4uL2tleWJpbmRpbmdzL3VzZUtleWJpbmRpbmcuanMnXG5pbXBvcnQgeyBnZXRBbGxCYXNlVG9vbHMgfSBmcm9tICcuLi90b29scy5qcydcbmltcG9ydCB0eXBlIHsgTG9nT3B0aW9uIH0gZnJvbSAnLi4vdHlwZXMvbG9ncy5qcydcbmltcG9ydCB7IGZvcm1hdFJlbGF0aXZlVGltZUFnbyB9IGZyb20gJy4uL3V0aWxzL2Zvcm1hdC5qcydcbmltcG9ydCB7XG4gIGdldFNlc3Npb25JZEZyb21Mb2csXG4gIGlzTGl0ZUxvZyxcbiAgbG9hZEZ1bGxMb2csXG59IGZyb20gJy4uL3V0aWxzL3Nlc3Npb25TdG9yYWdlLmpzJ1xuaW1wb3J0IHsgQ29uZmlndXJhYmxlU2hvcnRjdXRIaW50IH0gZnJvbSAnLi9Db25maWd1cmFibGVTaG9ydGN1dEhpbnQuanMnXG5pbXBvcnQgeyBCeWxpbmUgfSBmcm9tICcuL2Rlc2lnbi1zeXN0ZW0vQnlsaW5lLmpzJ1xuaW1wb3J0IHsgS2V5Ym9hcmRTaG9ydGN1dEhpbnQgfSBmcm9tICcuL2Rlc2lnbi1zeXN0ZW0vS2V5Ym9hcmRTaG9ydGN1dEhpbnQuanMnXG5pbXBvcnQgeyBMb2FkaW5nU3RhdGUgfSBmcm9tICcuL2Rlc2lnbi1zeXN0ZW0vTG9hZGluZ1N0YXRlLmpzJ1xuaW1wb3J0IHsgTWVzc2FnZXMgfSBmcm9tICcuL01lc3NhZ2VzLmpzJ1xuXG50eXBlIFByb3BzID0ge1xuICBsb2c6IExvZ09wdGlvblxuICBvbkV4aXQ6ICgpID0+IHZvaWRcbiAgb25TZWxlY3Q6IChsb2c6IExvZ09wdGlvbikgPT4gdm9pZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gU2Vzc2lvblByZXZpZXcoe1xuICBsb2csXG4gIG9uRXhpdCxcbiAgb25TZWxlY3QsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIC8vIGZ1bGxMb2cgaG9sZHMgdGhlIGNvbXBsZXRlIGxvZyB3aXRoIG1lc3NhZ2VzIGxvYWRlZC5cbiAgLy8gVGhlIGlucHV0IGBsb2dgIG1heSBiZSBhIFwibGl0ZSBsb2dcIiAoZW1wdHkgbWVzc2FnZXMgYXJyYXkpLFxuICAvLyBzbyB3ZSBsb2FkIHRoZSBmdWxsIG1lc3NhZ2VzIG9uIG1vdW50IGFuZCBzdG9yZSB0aGVtIGhlcmUuXG4gIGNvbnN0IFtmdWxsTG9nLCBzZXRGdWxsTG9nXSA9IFJlYWN0LnVzZVN0YXRlPExvZ09wdGlvbiB8IG51bGw+KG51bGwpXG5cbiAgLy8gTG9hZCBmdWxsIG1lc3NhZ2VzIGlmIHRoaXMgaXMgYSBsaXRlIGxvZ1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldEZ1bGxMb2cobnVsbClcbiAgICBpZiAoaXNMaXRlTG9nKGxvZykpIHtcbiAgICAgIHZvaWQgbG9hZEZ1bGxMb2cobG9nKS50aGVuKHNldEZ1bGxMb2cpXG4gICAgfVxuICB9LCBbbG9nXSlcblxuICBjb25zdCBpc0xvYWRpbmcgPSBpc0xpdGVMb2cobG9nKSAmJiBmdWxsTG9nID09PSBudWxsXG4gIGNvbnN0IGRpc3BsYXlMb2cgPSBmdWxsTG9nID8/IGxvZ1xuICBjb25zdCBjb252ZXJzYXRpb25JZCA9IGdldFNlc3Npb25JZEZyb21Mb2coZGlzcGxheUxvZykgfHwgKCcnIGFzIFVVSUQpXG5cbiAgLy8gR2V0IGFsbCBiYXNlIHRvb2xzIGZvciBwcmV2aWV3IChubyBwZXJtaXNzaW9ucyBuZWVkZWQgZm9yIHJlYWQtb25seSB2aWV3KVxuICBjb25zdCB0b29scyA9IGdldEFsbEJhc2VUb29scygpXG5cbiAgLy8gSGFuZGxlIGtleWJvYXJkIGlucHV0IHZpYSBrZXliaW5kaW5nc1xuICB1c2VLZXliaW5kaW5nKCdjb25maXJtOm5vJywgb25FeGl0LCB7IGNvbnRleHQ6ICdDb25maXJtYXRpb24nIH0pXG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG9uU2VsZWN0KGZ1bGxMb2cgPz8gbG9nKVxuICB9LCBbb25TZWxlY3QsIGZ1bGxMb2csIGxvZ10pXG5cbiAgdXNlS2V5YmluZGluZygnY29uZmlybTp5ZXMnLCBoYW5kbGVTZWxlY3QsIHsgY29udGV4dDogJ0NvbmZpcm1hdGlvbicgfSlcblxuICAvLyBTaG93IGxvYWRpbmcgc3RhdGUgd2hpbGUgZmV0Y2hpbmcgZnVsbCBsb2dcbiAgaWYgKGlzTG9hZGluZykge1xuICAgIHJldHVybiAoXG4gICAgICA8Qm94IGZsZXhEaXJlY3Rpb249XCJjb2x1bW5cIiBwYWRkaW5nPXsxfT5cbiAgICAgICAgPExvYWRpbmdTdGF0ZSBtZXNzYWdlPVwiTG9hZGluZyBzZXNzaW9u4oCmXCIgLz5cbiAgICAgICAgPFRleHQgZGltQ29sb3I+XG4gICAgICAgICAgPEJ5bGluZT5cbiAgICAgICAgICAgIDxDb25maWd1cmFibGVTaG9ydGN1dEhpbnRcbiAgICAgICAgICAgICAgYWN0aW9uPVwiY29uZmlybTpub1wiXG4gICAgICAgICAgICAgIGNvbnRleHQ9XCJDb25maXJtYXRpb25cIlxuICAgICAgICAgICAgICBmYWxsYmFjaz1cIkVzY1wiXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uPVwiY2FuY2VsXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9CeWxpbmU+XG4gICAgICAgIDwvVGV4dD5cbiAgICAgIDwvQm94PlxuICAgIClcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPEJveCBmbGV4RGlyZWN0aW9uPVwiY29sdW1uXCI+XG4gICAgICA8TWVzc2FnZXNcbiAgICAgICAgbWVzc2FnZXM9e2Rpc3BsYXlMb2cubWVzc2FnZXN9XG4gICAgICAgIHRvb2xzPXt0b29sc31cbiAgICAgICAgY29tbWFuZHM9e1tdfVxuICAgICAgICB2ZXJib3NlPXt0cnVlfVxuICAgICAgICB0b29sSlNYPXtudWxsfVxuICAgICAgICB0b29sVXNlQ29uZmlybVF1ZXVlPXtbXX1cbiAgICAgICAgaW5Qcm9ncmVzc1Rvb2xVc2VJRHM9e25ldyBTZXQoKX1cbiAgICAgICAgaXNNZXNzYWdlU2VsZWN0b3JWaXNpYmxlPXtmYWxzZX1cbiAgICAgICAgY29udmVyc2F0aW9uSWQ9e2NvbnZlcnNhdGlvbklkfVxuICAgICAgICBzY3JlZW49XCJ0cmFuc2NyaXB0XCJcbiAgICAgICAgc3RyZWFtaW5nVG9vbFVzZXM9e1tdfVxuICAgICAgICBzaG93QWxsSW5UcmFuc2NyaXB0PXt0cnVlfVxuICAgICAgICBpc0xvYWRpbmc9e2ZhbHNlfVxuICAgICAgLz5cbiAgICAgIDxCb3hcbiAgICAgICAgZmxleFNocmluaz17MH1cbiAgICAgICAgZmxleERpcmVjdGlvbj1cImNvbHVtblwiXG4gICAgICAgIGJvcmRlclRvcERpbUNvbG9yXG4gICAgICAgIGJvcmRlckJvdHRvbT17ZmFsc2V9XG4gICAgICAgIGJvcmRlckxlZnQ9e2ZhbHNlfVxuICAgICAgICBib3JkZXJSaWdodD17ZmFsc2V9XG4gICAgICAgIGJvcmRlclN0eWxlPVwic2luZ2xlXCJcbiAgICAgICAgcGFkZGluZ0xlZnQ9ezJ9XG4gICAgICA+XG4gICAgICAgIDxUZXh0PlxuICAgICAgICAgIHtmb3JtYXRSZWxhdGl2ZVRpbWVBZ28oZGlzcGxheUxvZy5tb2RpZmllZCl9IMK3eycgJ31cbiAgICAgICAgICB7ZGlzcGxheUxvZy5tZXNzYWdlQ291bnR9IG1lc3NhZ2VzXG4gICAgICAgICAge2Rpc3BsYXlMb2cuZ2l0QnJhbmNoID8gYCDCtyAke2Rpc3BsYXlMb2cuZ2l0QnJhbmNofWAgOiAnJ31cbiAgICAgICAgPC9UZXh0PlxuICAgICAgICA8VGV4dCBkaW1Db2xvcj5cbiAgICAgICAgICA8QnlsaW5lPlxuICAgICAgICAgICAgPEtleWJvYXJkU2hvcnRjdXRIaW50IHNob3J0Y3V0PVwiRW50ZXJcIiBhY3Rpb249XCJyZXN1bWVcIiAvPlxuICAgICAgICAgICAgPENvbmZpZ3VyYWJsZVNob3J0Y3V0SGludFxuICAgICAgICAgICAgICBhY3Rpb249XCJjb25maXJtOm5vXCJcbiAgICAgICAgICAgICAgY29udGV4dD1cIkNvbmZpcm1hdGlvblwiXG4gICAgICAgICAgICAgIGZhbGxiYWNrPVwiRXNjXCJcbiAgICAgICAgICAgICAgZGVzY3JpcHRpb249XCJjYW5jZWxcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L0J5bGluZT5cbiAgICAgICAgPC9UZXh0PlxuICAg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