claude-code/components/Spinner/TeammateSpinnerTree.tsx

272 lines
27 KiB
TypeScript
Raw Permalink Normal View History

import { c as _c } from "react/compiler-runtime";
import figures from 'figures';
import * as React from 'react';
import { Box, Text, type TextProps } from '../../ink.js';
import { useAppState } from '../../state/AppState.js';
import { getRunningTeammatesSorted } from '../../tasks/InProcessTeammateTask/InProcessTeammateTask.js';
import { formatNumber } from '../../utils/format.js';
import { TeammateSpinnerLine } from './TeammateSpinnerLine.js';
import { TEAMMATE_SELECT_HINT } from './teammateSelectHint.js';
type Props = {
selectedIndex?: number;
isInSelectionMode?: boolean;
allIdle?: boolean;
/** Leader's active verb (when leader is actively processing) */
leaderVerb?: string;
/** Leader's token count (when leader is actively processing) */
leaderTokenCount?: number;
/** Leader's idle status text (when leader is idle, e.g. "✻ Idle for 3s") */
leaderIdleText?: string;
};
export function TeammateSpinnerTree(t0) {
const $ = _c(61);
const {
selectedIndex,
isInSelectionMode,
allIdle,
leaderVerb,
leaderTokenCount,
leaderIdleText
} = t0;
const tasks = useAppState(_temp);
const viewingAgentTaskId = useAppState(_temp2);
const showTeammateMessagePreview = useAppState(_temp3);
let T0;
let isHideSelected;
let t1;
let t2;
let t3;
let t4;
let t5;
if ($[0] !== allIdle || $[1] !== isInSelectionMode || $[2] !== leaderIdleText || $[3] !== leaderTokenCount || $[4] !== leaderVerb || $[5] !== selectedIndex || $[6] !== showTeammateMessagePreview || $[7] !== tasks || $[8] !== viewingAgentTaskId) {
t5 = Symbol.for("react.early_return_sentinel");
bb0: {
const teammateTasks = getRunningTeammatesSorted(tasks);
if (teammateTasks.length === 0) {
t5 = null;
break bb0;
}
const isLeaderForegrounded = viewingAgentTaskId === undefined;
const isLeaderSelected = isInSelectionMode && selectedIndex === -1;
const isLeaderHighlighted = isLeaderForegrounded || isLeaderSelected;
isHideSelected = isInSelectionMode === true && selectedIndex === teammateTasks.length;
T0 = Box;
t1 = "column";
t2 = 1;
const t6 = isLeaderSelected ? "suggestion" : undefined;
const t7 = isLeaderSelected ? figures.pointer : " ";
let t8;
if ($[16] !== isLeaderHighlighted || $[17] !== t6 || $[18] !== t7) {
t8 = <Text color={t6} bold={isLeaderHighlighted}>{t7}</Text>;
$[16] = isLeaderHighlighted;
$[17] = t6;
$[18] = t7;
$[19] = t8;
} else {
t8 = $[19];
}
const t9 = !isLeaderHighlighted;
const t10 = isLeaderHighlighted ? "\u2552\u2550" : "\u250C\u2500";
let t11;
if ($[20] !== isLeaderHighlighted || $[21] !== t10 || $[22] !== t9) {
t11 = <Text dimColor={t9} bold={isLeaderHighlighted}>{t10}{" "}</Text>;
$[20] = isLeaderHighlighted;
$[21] = t10;
$[22] = t9;
$[23] = t11;
} else {
t11 = $[23];
}
const t12 = isLeaderSelected ? "suggestion" : "cyan_FOR_SUBAGENTS_ONLY";
let t13;
if ($[24] !== isLeaderHighlighted || $[25] !== t12) {
t13 = <Text bold={isLeaderHighlighted} color={t12}>team-lead</Text>;
$[24] = isLeaderHighlighted;
$[25] = t12;
$[26] = t13;
} else {
t13 = $[26];
}
let t14;
if ($[27] !== isLeaderForegrounded || $[28] !== leaderVerb) {
t14 = !isLeaderForegrounded && leaderVerb && <Text dimColor={true}>: {leaderVerb}</Text>;
$[27] = isLeaderForegrounded;
$[28] = leaderVerb;
$[29] = t14;
} else {
t14 = $[29];
}
let t15;
if ($[30] !== isLeaderForegrounded || $[31] !== leaderIdleText || $[32] !== leaderVerb) {
t15 = !isLeaderForegrounded && !leaderVerb && leaderIdleText && <Text dimColor={true}>: {leaderIdleText}</Text>;
$[30] = isLeaderForegrounded;
$[31] = leaderIdleText;
$[32] = leaderVerb;
$[33] = t15;
} else {
t15 = $[33];
}
let t16;
if ($[34] !== isLeaderHighlighted || $[35] !== leaderTokenCount) {
t16 = leaderTokenCount !== undefined && leaderTokenCount > 0 && <Text dimColor={!isLeaderHighlighted}>{" "}· {formatNumber(leaderTokenCount)} tokens</Text>;
$[34] = isLeaderHighlighted;
$[35] = leaderTokenCount;
$[36] = t16;
} else {
t16 = $[36];
}
let t17;
if ($[37] !== isLeaderHighlighted) {
t17 = isLeaderHighlighted && <Text dimColor={true}> · {TEAMMATE_SELECT_HINT}</Text>;
$[37] = isLeaderHighlighted;
$[38] = t17;
} else {
t17 = $[38];
}
let t18;
if ($[39] !== isLeaderForegrounded || $[40] !== isLeaderSelected) {
t18 = isLeaderSelected && !isLeaderForegrounded && <Text dimColor={true}> · enter to view</Text>;
$[39] = isLeaderForegrounded;
$[40] = isLeaderSelected;
$[41] = t18;
} else {
t18 = $[41];
}
if ($[42] !== t11 || $[43] !== t13 || $[44] !== t14 || $[45] !== t15 || $[46] !== t16 || $[47] !== t17 || $[48] !== t18 || $[49] !== t8) {
t3 = <Box paddingLeft={3}>{t8}{t11}{t13}{t14}{t15}{t16}{t17}{t18}</Box>;
$[42] = t11;
$[43] = t13;
$[44] = t14;
$[45] = t15;
$[46] = t16;
$[47] = t17;
$[48] = t18;
$[49] = t8;
$[50] = t3;
} else {
t3 = $[50];
}
t4 = teammateTasks.map((teammate, index) => <TeammateSpinnerLine key={teammate.id} teammate={teammate} isLast={!isInSelectionMode && index === teammateTasks.length - 1} isSelected={isInSelectionMode && selectedIndex === index} isForegrounded={viewingAgentTaskId === teammate.id} allIdle={allIdle} showPreview={showTeammateMessagePreview} />);
}
$[0] = allIdle;
$[1] = isInSelectionMode;
$[2] = leaderIdleText;
$[3] = leaderTokenCount;
$[4] = leaderVerb;
$[5] = selectedIndex;
$[6] = showTeammateMessagePreview;
$[7] = tasks;
$[8] = viewingAgentTaskId;
$[9] = T0;
$[10] = isHideSelected;
$[11] = t1;
$[12] = t2;
$[13] = t3;
$[14] = t4;
$[15] = t5;
} else {
T0 = $[9];
isHideSelected = $[10];
t1 = $[11];
t2 = $[12];
t3 = $[13];
t4 = $[14];
t5 = $[15];
}
if (t5 !== Symbol.for("react.early_return_sentinel")) {
return t5;
}
let t6;
if ($[51] !== isHideSelected || $[52] !== isInSelectionMode) {
t6 = isInSelectionMode && <HideRow isSelected={isHideSelected} />;
$[51] = isHideSelected;
$[52] = isInSelectionMode;
$[53] = t6;
} else {
t6 = $[53];
}
let t7;
if ($[54] !== T0 || $[55] !== t1 || $[56] !== t2 || $[57] !== t3 || $[58] !== t4 || $[59] !== t6) {
t7 = <T0 flexDirection={t1} marginTop={t2}>{t3}{t4}{t6}</T0>;
$[54] = T0;
$[55] = t1;
$[56] = t2;
$[57] = t3;
$[58] = t4;
$[59] = t6;
$[60] = t7;
} else {
t7 = $[60];
}
return t7;
}
function _temp3(s_1) {
return s_1.showTeammateMessagePreview;
}
function _temp2(s_0) {
return s_0.viewingAgentTaskId;
}
function _temp(s) {
return s.tasks;
}
function HideRow(t0) {
const $ = _c(18);
const {
isSelected
} = t0;
const t1 = isSelected ? "suggestion" : undefined;
const t2 = isSelected ? figures.pointer : " ";
let t3;
if ($[0] !== isSelected || $[1] !== t1 || $[2] !== t2) {
t3 = <Text color={t1} bold={isSelected}>{t2}</Text>;
$[0] = isSelected;
$[1] = t1;
$[2] = t2;
$[3] = t3;
} else {
t3 = $[3];
}
const t4 = !isSelected;
const t5 = isSelected ? "\u2558\u2550" : "\u2514\u2500";
let t6;
if ($[4] !== isSelected || $[5] !== t4 || $[6] !== t5) {
t6 = <Text dimColor={t4} bold={isSelected}>{t5}{" "}</Text>;
$[4] = isSelected;
$[5] = t4;
$[6] = t5;
$[7] = t6;
} else {
t6 = $[7];
}
const t7 = !isSelected;
let t8;
if ($[8] !== isSelected || $[9] !== t7) {
t8 = <Text dimColor={t7} bold={isSelected}>hide</Text>;
$[8] = isSelected;
$[9] = t7;
$[10] = t8;
} else {
t8 = $[10];
}
let t9;
if ($[11] !== isSelected) {
t9 = isSelected && <Text dimColor={true}> · enter to collapse</Text>;
$[11] = isSelected;
$[12] = t9;
} else {
t9 = $[12];
}
let t10;
if ($[13] !== t3 || $[14] !== t6 || $[15] !== t8 || $[16] !== t9) {
t10 = <Box paddingLeft={3}>{t3}{t6}{t8}{t9}</Box>;
$[13] = t3;
$[14] = t6;
$[15] = t8;
$[16] = t9;
$[17] = t10;
} else {
t10 = $[17];
}
return t10;
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJmaWd1cmVzIiwiUmVhY3QiLCJCb3giLCJUZXh0IiwiVGV4dFByb3BzIiwidXNlQXBwU3RhdGUiLCJnZXRSdW5uaW5nVGVhbW1hdGVzU29ydGVkIiwiZm9ybWF0TnVtYmVyIiwiVGVhbW1hdGVTcGlubmVyTGluZSIsIlRFQU1NQVRFX1NFTEVDVF9ISU5UIiwiUHJvcHMiLCJzZWxlY3RlZEluZGV4IiwiaXNJblNlbGVjdGlvbk1vZGUiLCJhbGxJZGxlIiwibGVhZGVyVmVyYiIsImxlYWRlclRva2VuQ291bnQiLCJsZWFkZXJJZGxlVGV4dCIsIlRlYW1tYXRlU3Bpbm5lclRyZWUiLCJ0MCIsIiQiLCJfYyIsInRhc2tzIiwiX3RlbXAiLCJ2aWV3aW5nQWdlbnRUYXNrSWQiLCJfdGVtcDIiLCJzaG93VGVhbW1hdGVNZXNzYWdlUHJldmlldyIsIl90ZW1wMyIsIlQwIiwiaXNIaWRlU2VsZWN0ZWQiLCJ0MSIsInQyIiwidDMiLCJ0NCIsInQ1IiwiU3ltYm9sIiwiZm9yIiwiYmIwIiwidGVhbW1hdGVUYXNrcyIsImxlbmd0aCIsImlzTGVhZGVyRm9yZWdyb3VuZGVkIiwidW5kZWZpbmVkIiwiaXNMZWFkZXJTZWxlY3RlZCIsImlzTGVhZGVySGlnaGxpZ2h0ZWQiLCJ0NiIsInQ3IiwicG9pbnRlciIsInQ4IiwidDkiLCJ0MTAiLCJ0MTEiLCJ0MTIiLCJ0MTMiLCJ0MTQiLCJ0MTUiLCJ0MTYiLCJ0MTciLCJ0MTgiLCJtYXAiLCJ0ZWFtbWF0ZSIsImluZGV4IiwiaWQiLCJzXzEiLCJzIiwic18wIiwiSGlkZVJvdyIsImlzU2VsZWN0ZWQiXSwic291cmNlcyI6WyJUZWFtbWF0ZVNwaW5uZXJUcmVlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZmlndXJlcyBmcm9tICdmaWd1cmVzJ1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyBCb3gsIFRleHQsIHR5cGUgVGV4dFByb3BzIH0gZnJvbSAnLi4vLi4vaW5rLmpzJ1xuaW1wb3J0IHsgdXNlQXBwU3RhdGUgfSBmcm9tICcuLi8uLi9zdGF0ZS9BcHBTdGF0ZS5qcydcbmltcG9ydCB7IGdldFJ1bm5pbmdUZWFtbWF0ZXNTb3J0ZWQgfSBmcm9tICcuLi8uLi90YXNrcy9JblByb2Nlc3NUZWFtbWF0ZVRhc2svSW5Qcm9jZXNzVGVhbW1hdGVUYXNrLmpzJ1xuaW1wb3J0IHsgZm9ybWF0TnVtYmVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvZm9ybWF0LmpzJ1xuaW1wb3J0IHsgVGVhbW1hdGVTcGlubmVyTGluZSB9IGZyb20gJy4vVGVhbW1hdGVTcGlubmVyTGluZS5qcydcbmltcG9ydCB7IFRFQU1NQVRFX1NFTEVDVF9ISU5UIH0gZnJvbSAnLi90ZWFtbWF0ZVNlbGVjdEhpbnQuanMnXG5cbnR5cGUgUHJvcHMgPSB7XG4gIHNlbGVjdGVkSW5kZXg/OiBudW1iZXJcbiAgaXNJblNlbGVjdGlvbk1vZGU/OiBib29sZWFuXG4gIGFsbElkbGU/OiBib29sZWFuXG4gIC8qKiBMZWFkZXIncyBhY3RpdmUgdmVyYiAod2hlbiBsZWFkZXIgaXMgYWN0aXZlbHkgcHJvY2Vzc2luZykgKi9cbiAgbGVhZGVyVmVyYj86IHN0cmluZ1xuICAvKiogTGVhZGVyJ3MgdG9rZW4gY291bnQgKHdoZW4gbGVhZGVyIGlzIGFjdGl2ZWx5IHByb2Nlc3NpbmcpICovXG4gIGxlYWRlclRva2VuQ291bnQ/OiBudW1iZXJcbiAgLyoqIExlYWRlcidzIGlkbGUgc3RhdHVzIHRleHQgKHdoZW4gbGVhZGVyIGlzIGlkbGUsIGUuZy4gXCLinLsgSWRsZSBmb3IgM3NcIikgKi9cbiAgbGVhZGVySWRsZVRleHQ/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRlYW1tYXRlU3Bpbm5lclRyZWUoe1xuICBzZWxlY3RlZEluZGV4LFxuICBpc0luU2VsZWN0aW9uTW9kZSxcbiAgYWxsSWRsZSxcbiAgbGVhZGVyVmVyYixcbiAgbGVhZGVyVG9rZW5Db3VudCxcbiAgbGVhZGVySWRsZVRleHQsXG59OiBQcm9wcyk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gIGNvbnN0IHRhc2tzID0gdXNlQXBwU3RhdGUocyA9PiBzLnRhc2tzKVxuICBjb25zdCB2aWV3aW5nQWdlbnRUYXNrSWQgPSB1c2VBcHBTdGF0ZShzID0+IHMudmlld2luZ0FnZW50VGFza0lkKVxuICBjb25zdCBzaG93VGVhbW1hdGVNZXNzYWdlUHJldmlldyA9IHVzZUFwcFN0YXRlKFxuICAgIHMgPT4gcy5zaG93VGVhbW1hdGVNZXNzYWdlUHJldmlldyxcbiAgKVxuXG4gIGNvbnN0IHRlYW1tYXRlVGFza3MgPSBnZXRSdW5uaW5nVGVhbW1hdGVzU29ydGVkKHRhc2tzKVxuXG4gIC8vIERvbid0IHJlbmRlciBpZiBubyBydW5uaW5nIHRlYW1tYXRlc1xuICBpZiAodGVhbW1hdGVUYXNrcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gTGVhZGVyIGhpZ2hsaWdodGluZyBmb2xsb3dzIHNhbWUgcGF0dGVybiBhcyB0ZWFtbWF0ZXM6XG4gIC8vIGlzSGlnaGxpZ2h0ZWQgPSBpc0ZvcmVncm91bmRlZCB8fCBpc1NlbGVjdGVkXG4gIGNvbnN0IGlzTGVhZGVyRm9yZWdyb3VuZGVkID0gdmlld2luZ0FnZW50VGFza0lkID09PSB1bmRlZmluZWRcbiAgY29uc3QgaXNMZWFkZXJTZWxlY3RlZCA9IGlzSW5TZWxlY3Rpb25Nb2RlICYmIHNlbGVjdGVkSW5kZXggPT09IC0xXG4gIGNvbnN0IGlzTGVhZGVySGlnaGxpZ2h0ZWQgPSBpc0xlYWRlckZvcmVncm91bmRlZCB8fCBpc0xlYWRlclNlbGVjdGVkXG4gIGNvbnN0IGxlYWRlckNvbG9yOiBUZXh0UHJvcHNbJ2NvbG9yJ10gPSAnY3lhbl9GT1JfU1VCQUdFTlRTX09OTFknXG5cbiAgLy8gSXMgdGhlIFwiaGlkZVwiIHJvdyBzZWxlY3RlZD8gKGluZGV4ID09PSB0ZWFtbWF0ZUNvdW50IGluIHNlbGVjdGlvbiBtb2RlKVxuICBjb25zdCBpc0hpZGVTZWxlY3RlZCA9XG4gICAgaXNJblNlbGVjdGlvbk1vZGUgPT09IHRydWUgJiYgc2VsZWN0ZWRJbmRleCA9PT0gdGVhbW1hdGVUYXNrcy5sZW5ndGhcblxuICByZXR1cm4gKFxuICAgIDxCb3ggZmxleERpcmVjdGlvbj1cImNvbHVtblwiIG1hcmdpblRvcD17MX0+XG4gICAgICB7LyogTGVhZGVyIHJvdyAtIGFsd2F5cyB2aXNpYmxlLCB1c2VzIOKUjOKUgCB0byBlbmNsb3NlIHRoZSB0cmVlICovfVxuICAgICAge1xuICAgICAgICA8Qm94IHBhZGRpbmdMZWZ0PXszfT5cbiAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgY29sb3I9e2lzTGVhZGVyU2VsZWN0ZWQgPyAnc3VnZ2VzdGlvbicgOiB1bmRlZmluZWR9XG4gICAgICAgICA