mirror of
http://10.0.2.1:3031/sauer/claude-code.git
synced 2026-06-30 21:26:58 +10:00
266 lines
30 KiB
TypeScript
266 lines
30 KiB
TypeScript
|
|
import { c as _c } from "react/compiler-runtime";
|
||
|
|
import React, { useMemo } from 'react';
|
||
|
|
import type { DeepImmutable } from 'src/types/utils.js';
|
||
|
|
import { useElapsedTime } from '../../hooks/useElapsedTime.js';
|
||
|
|
import type { KeyboardEvent } from '../../ink/events/keyboard-event.js';
|
||
|
|
import { Box, Text, useTheme } from '../../ink.js';
|
||
|
|
import { useKeybindings } from '../../keybindings/useKeybinding.js';
|
||
|
|
import { getEmptyToolPermissionContext } from '../../Tool.js';
|
||
|
|
import type { InProcessTeammateTaskState } from '../../tasks/InProcessTeammateTask/types.js';
|
||
|
|
import { getTools } from '../../tools.js';
|
||
|
|
import { formatNumber, truncateToWidth } from '../../utils/format.js';
|
||
|
|
import { toInkColor } from '../../utils/ink.js';
|
||
|
|
import { Byline } from '../design-system/Byline.js';
|
||
|
|
import { Dialog } from '../design-system/Dialog.js';
|
||
|
|
import { KeyboardShortcutHint } from '../design-system/KeyboardShortcutHint.js';
|
||
|
|
import { renderToolActivity } from './renderToolActivity.js';
|
||
|
|
import { describeTeammateActivity } from './taskStatusUtils.js';
|
||
|
|
type Props = {
|
||
|
|
teammate: DeepImmutable<InProcessTeammateTaskState>;
|
||
|
|
onDone: () => void;
|
||
|
|
onKill?: () => void;
|
||
|
|
onBack?: () => void;
|
||
|
|
onForeground?: () => void;
|
||
|
|
};
|
||
|
|
export function InProcessTeammateDetailDialog(t0) {
|
||
|
|
const $ = _c(63);
|
||
|
|
const {
|
||
|
|
teammate,
|
||
|
|
onDone,
|
||
|
|
onKill,
|
||
|
|
onBack,
|
||
|
|
onForeground
|
||
|
|
} = t0;
|
||
|
|
const [theme] = useTheme();
|
||
|
|
let t1;
|
||
|
|
if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
|
||
|
|
t1 = getTools(getEmptyToolPermissionContext());
|
||
|
|
$[0] = t1;
|
||
|
|
} else {
|
||
|
|
t1 = $[0];
|
||
|
|
}
|
||
|
|
const tools = t1;
|
||
|
|
const elapsedTime = useElapsedTime(teammate.startTime, teammate.status === "running", 1000, teammate.totalPausedMs ?? 0);
|
||
|
|
let t2;
|
||
|
|
if ($[1] !== onDone) {
|
||
|
|
t2 = {
|
||
|
|
"confirm:yes": onDone
|
||
|
|
};
|
||
|
|
$[1] = onDone;
|
||
|
|
$[2] = t2;
|
||
|
|
} else {
|
||
|
|
t2 = $[2];
|
||
|
|
}
|
||
|
|
let t3;
|
||
|
|
if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
|
||
|
|
t3 = {
|
||
|
|
context: "Confirmation"
|
||
|
|
};
|
||
|
|
$[3] = t3;
|
||
|
|
} else {
|
||
|
|
t3 = $[3];
|
||
|
|
}
|
||
|
|
useKeybindings(t2, t3);
|
||
|
|
let t4;
|
||
|
|
if ($[4] !== onBack || $[5] !== onDone || $[6] !== onForeground || $[7] !== onKill || $[8] !== teammate.status) {
|
||
|
|
t4 = e => {
|
||
|
|
if (e.key === " ") {
|
||
|
|
e.preventDefault();
|
||
|
|
onDone();
|
||
|
|
} else {
|
||
|
|
if (e.key === "left" && onBack) {
|
||
|
|
e.preventDefault();
|
||
|
|
onBack();
|
||
|
|
} else {
|
||
|
|
if (e.key === "x" && teammate.status === "running" && onKill) {
|
||
|
|
e.preventDefault();
|
||
|
|
onKill();
|
||
|
|
} else {
|
||
|
|
if (e.key === "f" && teammate.status === "running" && onForeground) {
|
||
|
|
e.preventDefault();
|
||
|
|
onForeground();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
};
|
||
|
|
$[4] = onBack;
|
||
|
|
$[5] = onDone;
|
||
|
|
$[6] = onForeground;
|
||
|
|
$[7] = onKill;
|
||
|
|
$[8] = teammate.status;
|
||
|
|
$[9] = t4;
|
||
|
|
} else {
|
||
|
|
t4 = $[9];
|
||
|
|
}
|
||
|
|
const handleKeyDown = t4;
|
||
|
|
let t5;
|
||
|
|
if ($[10] !== teammate) {
|
||
|
|
t5 = describeTeammateActivity(teammate);
|
||
|
|
$[10] = teammate;
|
||
|
|
$[11] = t5;
|
||
|
|
} else {
|
||
|
|
t5 = $[11];
|
||
|
|
}
|
||
|
|
const activity = t5;
|
||
|
|
const tokenCount = teammate.result?.totalTokens ?? teammate.progress?.tokenCount;
|
||
|
|
const toolUseCount = teammate.result?.totalToolUseCount ?? teammate.progress?.toolUseCount;
|
||
|
|
let t6;
|
||
|
|
if ($[12] !== teammate.prompt) {
|
||
|
|
t6 = truncateToWidth(teammate.prompt, 300);
|
||
|
|
$[12] = teammate.prompt;
|
||
|
|
$[13] = t6;
|
||
|
|
} else {
|
||
|
|
t6 = $[13];
|
||
|
|
}
|
||
|
|
const displayPrompt = t6;
|
||
|
|
let t7;
|
||
|
|
if ($[14] !== teammate.identity.color) {
|
||
|
|
t7 = toInkColor(teammate.identity.color);
|
||
|
|
$[14] = teammate.identity.color;
|
||
|
|
$[15] = t7;
|
||
|
|
} else {
|
||
|
|
t7 = $[15];
|
||
|
|
}
|
||
|
|
let t8;
|
||
|
|
if ($[16] !== t7 || $[17] !== teammate.identity.agentName) {
|
||
|
|
t8 = <Text color={t7}>@{teammate.identity.agentName}</Text>;
|
||
|
|
$[16] = t7;
|
||
|
|
$[17] = teammate.identity.agentName;
|
||
|
|
$[18] = t8;
|
||
|
|
} else {
|
||
|
|
t8 = $[18];
|
||
|
|
}
|
||
|
|
let t9;
|
||
|
|
if ($[19] !== activity) {
|
||
|
|
t9 = activity && <Text dimColor={true}> ({activity})</Text>;
|
||
|
|
$[19] = activity;
|
||
|
|
$[20] = t9;
|
||
|
|
} else {
|
||
|
|
t9 = $[20];
|
||
|
|
}
|
||
|
|
let t10;
|
||
|
|
if ($[21] !== t8 || $[22] !== t9) {
|
||
|
|
t10 = <Text>{t8}{t9}</Text>;
|
||
|
|
$[21] = t8;
|
||
|
|
$[22] = t9;
|
||
|
|
$[23] = t10;
|
||
|
|
} else {
|
||
|
|
t10 = $[23];
|
||
|
|
}
|
||
|
|
const title = t10;
|
||
|
|
let t11;
|
||
|
|
if ($[24] !== teammate.status) {
|
||
|
|
t11 = teammate.status !== "running" && <Text color={teammate.status === "completed" ? "success" : teammate.status === "killed" ? "warning" : "error"}>{teammate.status === "completed" ? "Completed" : teammate.status === "failed" ? "Failed" : "Stopped"}{" \xB7 "}</Text>;
|
||
|
|
$[24] = teammate.status;
|
||
|
|
$[25] = t11;
|
||
|
|
} else {
|
||
|
|
t11 = $[25];
|
||
|
|
}
|
||
|
|
let t12;
|
||
|
|
if ($[26] !== tokenCount) {
|
||
|
|
t12 = tokenCount !== undefined && tokenCount > 0 && <> · {formatNumber(tokenCount)} tokens</>;
|
||
|
|
$[26] = tokenCount;
|
||
|
|
$[27] = t12;
|
||
|
|
} else {
|
||
|
|
t12 = $[27];
|
||
|
|
}
|
||
|
|
let t13;
|
||
|
|
if ($[28] !== toolUseCount) {
|
||
|
|
t13 = toolUseCount !== undefined && toolUseCount > 0 && <>{" "}· {toolUseCount} {toolUseCount === 1 ? "tool" : "tools"}</>;
|
||
|
|
$[28] = toolUseCount;
|
||
|
|
$[29] = t13;
|
||
|
|
} else {
|
||
|
|
t13 = $[29];
|
||
|
|
}
|
||
|
|
let t14;
|
||
|
|
if ($[30] !== elapsedTime || $[31] !== t12 || $[32] !== t13) {
|
||
|
|
t14 = <Text dimColor={true}>{elapsedTime}{t12}{t13}</Text>;
|
||
|
|
$[30] = elapsedTime;
|
||
|
|
$[31] = t12;
|
||
|
|
$[32] = t13;
|
||
|
|
$[33] = t14;
|
||
|
|
} else {
|
||
|
|
t14 = $[33];
|
||
|
|
}
|
||
|
|
let t15;
|
||
|
|
if ($[34] !== t11 || $[35] !== t14) {
|
||
|
|
t15 = <Text>{t11}{t14}</Text>;
|
||
|
|
$[34] = t11;
|
||
|
|
$[35] = t14;
|
||
|
|
$[36] = t15;
|
||
|
|
} else {
|
||
|
|
t15 = $[36];
|
||
|
|
}
|
||
|
|
const subtitle = t15;
|
||
|
|
let t16;
|
||
|
|
if ($[37] !== onBack || $[38] !== onForeground || $[39] !== onKill || $[40] !== teammate.status) {
|
||
|
|
t16 = exitState => exitState.pending ? <Text>Press {exitState.keyName} again to exit</Text> : <Byline>{onBack && <KeyboardShortcutHint shortcut={"\u2190"} action="go back" />}<KeyboardShortcutHint shortcut="Esc/Enter/Space" action="close" />{teammate.status === "running" && onKill && <KeyboardShortcutHint shortcut="x" action="stop" />}{teammate.status === "running" && onForeground && <KeyboardShortcutHint shortcut="f" action="foreground" />}</Byline>;
|
||
|
|
$[37] = onBack;
|
||
|
|
$[38] = onForeground;
|
||
|
|
$[39] = onKill;
|
||
|
|
$[40] = teammate.status;
|
||
|
|
$[41] = t16;
|
||
|
|
} else {
|
||
|
|
t16 = $[41];
|
||
|
|
}
|
||
|
|
let t17;
|
||
|
|
if ($[42] !== teammate.progress || $[43] !== teammate.status || $[44] !== theme) {
|
||
|
|
t17 = teammate.status === "running" && teammate.progress?.recentActivities && teammate.progress.recentActivities.length > 0 && <Box flexDirection="column"><Text bold={true} dimColor={true}>Progress</Text>{teammate.progress.recentActivities.map((activity_0, i) => <Text key={i} dimColor={i < teammate.progress.recentActivities.length - 1} wrap="truncate-end">{i === teammate.progress.recentActivities.length - 1 ? "\u203A " : " "}{renderToolActivity(activity_0, tools, theme)}</Text>)}</Box>;
|
||
|
|
$[42] = teammate.progress;
|
||
|
|
$[43] = teammate.status;
|
||
|
|
$[44] = theme;
|
||
|
|
$[45] = t17;
|
||
|
|
} else {
|
||
|
|
t17 = $[45];
|
||
|
|
}
|
||
|
|
let t18;
|
||
|
|
if ($[46] === Symbol.for("react.memo_cache_sentinel")) {
|
||
|
|
t18 = <Text bold={true} dimColor={true}>Prompt</Text>;
|
||
|
|
$[46] = t18;
|
||
|
|
} else {
|
||
|
|
t18 = $[46];
|
||
|
|
}
|
||
|
|
let t19;
|
||
|
|
if ($[47] !== displayPrompt) {
|
||
|
|
t19 = <Box flexDirection="column" marginTop={1}>{t18}<Text wrap="wrap">{displayPrompt}</Text></Box>;
|
||
|
|
$[47] = displayPrompt;
|
||
|
|
$[48] = t19;
|
||
|
|
} else {
|
||
|
|
t19 = $[48];
|
||
|
|
}
|
||
|
|
let t20;
|
||
|
|
if ($[49] !== teammate.error || $[50] !== teammate.status) {
|
||
|
|
t20 = teammate.status === "failed" && teammate.error && <Box flexDirection="column" marginTop={1}><Text bold={true} color="error">Error</Text><Text color="error" wrap="wrap">{teammate.error}</Text></Box>;
|
||
|
|
$[49] = teammate.error;
|
||
|
|
$[50] = teammate.status;
|
||
|
|
$[51] = t20;
|
||
|
|
} else {
|
||
|
|
t20 = $[51];
|
||
|
|
}
|
||
|
|
let t21;
|
||
|
|
if ($[52] !== onDone || $[53] !== subtitle || $[54] !== t16 || $[55] !== t17 || $[56] !== t19 || $[57] !== t20 || $[58] !== title) {
|
||
|
|
t21 = <Dialog title={title} subtitle={subtitle} onCancel={onDone} color="background" inputGuide={t16}>{t17}{t19}{t20}</Dialog>;
|
||
|
|
$[52] = onDone;
|
||
|
|
$[53] = subtitle;
|
||
|
|
$[54] = t16;
|
||
|
|
$[55] = t17;
|
||
|
|
$[56] = t19;
|
||
|
|
$[57] = t20;
|
||
|
|
$[58] = title;
|
||
|
|
$[59] = t21;
|
||
|
|
} else {
|
||
|
|
t21 = $[59];
|
||
|
|
}
|
||
|
|
let t22;
|
||
|
|
if ($[60] !== handleKeyDown || $[61] !== t21) {
|
||
|
|
t22 = <Box flexDirection="column" tabIndex={0} autoFocus={true} onKeyDown={handleKeyDown}>{t21}</Box>;
|
||
|
|
$[60] = handleKeyDown;
|
||
|
|
$[61] = t21;
|
||
|
|
$[62] = t22;
|
||
|
|
} else {
|
||
|
|
t22 = $[62];
|
||
|
|
}
|
||
|
|
return t22;
|
||
|
|
}
|
||
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZU1lbW8iLCJEZWVwSW1tdXRhYmxlIiwidXNlRWxhcHNlZFRpbWUiLCJLZXlib2FyZEV2ZW50IiwiQm94IiwiVGV4dCIsInVzZVRoZW1lIiwidXNlS2V5YmluZGluZ3MiLCJnZXRFbXB0eVRvb2xQZXJtaXNzaW9uQ29udGV4dCIsIkluUHJvY2Vzc1RlYW1tYXRlVGFza1N0YXRlIiwiZ2V0VG9vbHMiLCJmb3JtYXROdW1iZXIiLCJ0cnVuY2F0ZVRvV2lkdGgiLCJ0b0lua0NvbG9yIiwiQnlsaW5lIiwiRGlhbG9nIiwiS2V5Ym9hcmRTaG9ydGN1dEhpbnQiLCJyZW5kZXJUb29sQWN0aXZpdHkiLCJkZXNjcmliZVRlYW1tYXRlQWN0aXZpdHkiLCJQcm9wcyIsInRlYW1tYXRlIiwib25Eb25lIiwib25LaWxsIiwib25CYWNrIiwib25Gb3JlZ3JvdW5kIiwiSW5Qcm9jZXNzVGVhbW1hdGVEZXRhaWxEaWFsb2ciLCJ0MCIsIiQiLCJfYyIsInRoZW1lIiwidDEiLCJTeW1ib2wiLCJmb3IiLCJ0b29scyIsImVsYXBzZWRUaW1lIiwic3RhcnRUaW1lIiwic3RhdHVzIiwidG90YWxQYXVzZWRNcyIsInQyIiwidDMiLCJjb250ZXh0IiwidDQiLCJlIiwia2V5IiwicHJldmVudERlZmF1bHQiLCJoYW5kbGVLZXlEb3duIiwidDUiLCJhY3Rpdml0eSIsInRva2VuQ291bnQiLCJyZXN1bHQiLCJ0b3RhbFRva2VucyIsInByb2dyZXNzIiwidG9vbFVzZUNvdW50IiwidG90YWxUb29sVXNlQ291bnQiLCJ0NiIsInByb21wdCIsImRpc3BsYXlQcm9tcHQiLCJ0NyIsImlkZW50aXR5IiwiY29sb3IiLCJ0OCIsImFnZW50TmFtZSIsInQ5IiwidDEwIiwidGl0bGUiLCJ0MTEiLCJ0MTIiLCJ1bmRlZmluZWQiLCJ0MTMiLCJ0MTQiLCJ0MTUiLCJzdWJ0aXRsZSIsInQxNiIsImV4aXRTdGF0ZSIsInBlbmRpbmciLCJrZXlOYW1lIiwidDE3IiwicmVjZW50QWN0aXZpdGllcyIsImxlbmd0aCIsIm1hcCIsImFjdGl2aXR5XzAiLCJpIiwidDE4IiwidDE5IiwidDIwIiwiZXJyb3IiLCJ0MjEiLCJ0MjIiXSwic291cmNlcyI6WyJJblByb2Nlc3NUZWFtbWF0ZURldGFpbERpYWxvZy50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCdcbmltcG9ydCB0eXBlIHsgRGVlcEltbXV0YWJsZSB9IGZyb20gJ3NyYy90eXBlcy91dGlscy5qcydcbmltcG9ydCB7IHVzZUVsYXBzZWRUaW1lIH0gZnJvbSAnLi4vLi4vaG9va3MvdXNlRWxhcHNlZFRpbWUuanMnXG5pbXBvcnQgdHlwZSB7IEtleWJvYXJkRXZlbnQgfSBmcm9tICcuLi8uLi9pbmsvZXZlbnRzL2tleWJvYXJkLWV2ZW50LmpzJ1xuaW1wb3J0IHsgQm94LCBUZXh0LCB1c2VUaGVtZSB9IGZyb20gJy4uLy4uL2luay5qcydcbmltcG9ydCB7IHVzZUtleWJpbmRpbmdzIH0gZnJvbSAnLi4vLi4va2V5YmluZGluZ3MvdXNlS2V5YmluZGluZy5qcydcbmltcG9ydCB7IGdldEVtcHR5VG9vbFBlcm1pc3Npb25Db250ZXh0IH0gZnJvbSAnLi4vLi4vVG9vbC5qcydcbmltcG9ydCB0eXBlIHsgSW5Qcm9jZXNzVGVhbW1hdGVUYXNrU3RhdGUgfSBmcm9tICcuLi8uLi90YXNrcy9JblByb2Nlc3NUZWFtbWF0ZVRhc2svdHlwZXMuanMnXG5pbXBvcnQgeyBnZXRUb29scyB9IGZyb20gJy4uLy4uL3Rvb2xzLmpzJ1xuaW1wb3J0IHsgZm9ybWF0TnVtYmVyLCB0cnVuY2F0ZVRvV2lkdGggfSBmcm9tICcuLi8uLi91dGlscy9mb3JtYXQuanMnXG5pbXBvcnQgeyB0b0lua0NvbG9yIH0gZnJvbSAnLi4vLi4vdXRpbHMvaW5rLmpzJ1xuaW1wb3J0IHsgQnlsaW5lIH0gZnJvbSAnLi4vZGVzaWduLXN5c3RlbS9CeWxpbmUuanMnXG5pbXBvcnQgeyBEaWFsb2cgfSBmcm9tICcuLi9kZXNpZ24tc3lzdGVtL0RpYWxvZy5qcydcbmltcG9ydCB7IEtleWJvYXJkU2hvcnRjdXRIaW50IH0gZnJvbSAnLi4vZGVzaWduLXN5c3RlbS9LZXlib2FyZFNob3J0Y3V0SGludC5qcydcbmltcG9ydCB7IHJlbmRlclRvb2xBY3Rpdml0eSB9IGZyb20gJy4vcmVuZGVyVG9vbEFjdGl2aXR5LmpzJ1xuaW1wb3J0IHsgZGVzY3JpYmVUZWFtbWF0ZUFjdGl2aXR5IH0gZnJvbSAnLi90YXNrU3RhdHVzVXRpbHMuanMnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIHRlYW1tYXRlOiBEZWVwSW1tdXRhYmxlPEluUHJvY2Vzc1RlYW1tYXRlVGFza1N0YXRlPlxuICBvbkRvbmU6ICgpID0+IHZvaWRcbiAgb25LaWxsPzogKCkgPT4gdm9pZFxuICBvbkJhY2s/OiAoKSA9PiB2b2lkXG4gIG9uRm9yZWdyb3VuZD86ICgpID0+IHZvaWRcbn1cbmV4cG9ydCBmdW5jdGlvbiBJblByb2Nlc3NUZWFtbWF0ZURldGFpbERpYWxvZyh7XG4gIHRlYW1tYXRlLFxuICBvbkRvbmUsXG4gIG9uS2lsbCxcbiAgb25CYWNrLFxuICBvbkZvcmVncm91bmQsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IFt0aGVtZV0gPSB1c2VUaGVtZSgpXG4gIGNvbnN0IHRvb2xzID0gdXNlTWVtbygoKSA9PiBnZXRUb29scyhnZXRFbXB0eVRvb2xQZXJtaXNzaW9uQ29udGV4dCgpKSwgW10pXG5cbiAgY29uc3QgZWxhcHNlZFRpbWUgPSB1c2VFbGFwc2VkVGltZShcbiAgICB0ZWFtbWF0ZS5zdGFydFRpbWUsXG4gICAgdGVhbW1hdGUuc3RhdHVzID09PSAncnVubmluZycsXG4gICAgMTAwMCxcbiAgICB0ZWFtbWF0ZS50b3RhbFBhdXNlZE1zID8/IDAsXG4gIClcblxuICAvLyBSZXN0b3JlIGNvbmZpcm06eWVzIChFbnRlci95KSBkaXNtaXNzYWwg4oCUIERpYWxvZyBoYW5kbGVzIGNvbmZpcm06bm8gKEVzYylcbiAgdXNlS2V5YmluZGluZ3MoXG4gICAge1xuICAgICAgJ2NvbmZpcm06eWVzJzogb25Eb25lLFxuICAgIH0sXG4gICAgeyBjb250ZXh0OiAnQ29uZmlybWF0aW9uJyB9LFxuICApXG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSAnICcpIHtcbiAgICAgIGUucHJldmVudERlZmF1bHQoKVxuICAgICAgb25Eb25lKClcbiAgICB9IGVsc2UgaWYgKGUua2V5ID09PSAnbGVmdCcgJiYgb25CYWNrKSB7XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIG9uQmFjaygpXG4gICAgfSBlbHNlIGlmIChlLmtleSA9PT0
|