mirror of
http://10.0.2.1:3031/sauer/claude-code.git
synced 2026-06-30 18:16:58 +10:00
207 lines
18 KiB
TypeScript
207 lines
18 KiB
TypeScript
|
|
import { c as _c } from "react/compiler-runtime";
|
||
|
|
import * as React from 'react';
|
||
|
|
import { useCallback, useEffect, useState } from 'react';
|
||
|
|
// eslint-disable-next-line custom-rules/prefer-use-keybindings -- 'r' is a view-specific key, not a global keybinding
|
||
|
|
import { Box, Text, useInput } from '../../../ink.js';
|
||
|
|
import { type AutoModeDenial, getAutoModeDenials } from '../../../utils/autoModeDenials.js';
|
||
|
|
import { Select } from '../../CustomSelect/select.js';
|
||
|
|
import { StatusIcon } from '../../design-system/StatusIcon.js';
|
||
|
|
import { useTabHeaderFocus } from '../../design-system/Tabs.js';
|
||
|
|
type Props = {
|
||
|
|
onHeaderFocusChange?: (focused: boolean) => void;
|
||
|
|
/** Called when approved/retry state changes so parent can act on exit */
|
||
|
|
onStateChange: (state: {
|
||
|
|
approved: Set<number>;
|
||
|
|
retry: Set<number>;
|
||
|
|
denials: readonly AutoModeDenial[];
|
||
|
|
}) => void;
|
||
|
|
};
|
||
|
|
export function RecentDenialsTab(t0) {
|
||
|
|
const $ = _c(30);
|
||
|
|
const {
|
||
|
|
onHeaderFocusChange,
|
||
|
|
onStateChange
|
||
|
|
} = t0;
|
||
|
|
const {
|
||
|
|
headerFocused,
|
||
|
|
focusHeader
|
||
|
|
} = useTabHeaderFocus();
|
||
|
|
let t1;
|
||
|
|
let t2;
|
||
|
|
if ($[0] !== headerFocused || $[1] !== onHeaderFocusChange) {
|
||
|
|
t1 = () => {
|
||
|
|
onHeaderFocusChange?.(headerFocused);
|
||
|
|
};
|
||
|
|
t2 = [headerFocused, onHeaderFocusChange];
|
||
|
|
$[0] = headerFocused;
|
||
|
|
$[1] = onHeaderFocusChange;
|
||
|
|
$[2] = t1;
|
||
|
|
$[3] = t2;
|
||
|
|
} else {
|
||
|
|
t1 = $[2];
|
||
|
|
t2 = $[3];
|
||
|
|
}
|
||
|
|
useEffect(t1, t2);
|
||
|
|
const [denials] = useState(_temp);
|
||
|
|
const [approved, setApproved] = useState(_temp2);
|
||
|
|
const [retry, setRetry] = useState(_temp3);
|
||
|
|
const [focusedIdx, setFocusedIdx] = useState(0);
|
||
|
|
let t3;
|
||
|
|
let t4;
|
||
|
|
if ($[4] !== approved || $[5] !== denials || $[6] !== onStateChange || $[7] !== retry) {
|
||
|
|
t3 = () => {
|
||
|
|
onStateChange({
|
||
|
|
approved,
|
||
|
|
retry,
|
||
|
|
denials
|
||
|
|
});
|
||
|
|
};
|
||
|
|
t4 = [approved, retry, denials, onStateChange];
|
||
|
|
$[4] = approved;
|
||
|
|
$[5] = denials;
|
||
|
|
$[6] = onStateChange;
|
||
|
|
$[7] = retry;
|
||
|
|
$[8] = t3;
|
||
|
|
$[9] = t4;
|
||
|
|
} else {
|
||
|
|
t3 = $[8];
|
||
|
|
t4 = $[9];
|
||
|
|
}
|
||
|
|
useEffect(t3, t4);
|
||
|
|
let t5;
|
||
|
|
if ($[10] === Symbol.for("react.memo_cache_sentinel")) {
|
||
|
|
t5 = value => {
|
||
|
|
const idx = Number(value);
|
||
|
|
setApproved(prev => {
|
||
|
|
const next = new Set(prev);
|
||
|
|
if (next.has(idx)) {
|
||
|
|
next.delete(idx);
|
||
|
|
} else {
|
||
|
|
next.add(idx);
|
||
|
|
}
|
||
|
|
return next;
|
||
|
|
});
|
||
|
|
};
|
||
|
|
$[10] = t5;
|
||
|
|
} else {
|
||
|
|
t5 = $[10];
|
||
|
|
}
|
||
|
|
const handleSelect = t5;
|
||
|
|
let t6;
|
||
|
|
if ($[11] === Symbol.for("react.memo_cache_sentinel")) {
|
||
|
|
t6 = value_0 => {
|
||
|
|
setFocusedIdx(Number(value_0));
|
||
|
|
};
|
||
|
|
$[11] = t6;
|
||
|
|
} else {
|
||
|
|
t6 = $[11];
|
||
|
|
}
|
||
|
|
const handleFocus = t6;
|
||
|
|
let t7;
|
||
|
|
if ($[12] !== focusedIdx) {
|
||
|
|
t7 = (input, _key) => {
|
||
|
|
if (input === "r") {
|
||
|
|
setRetry(prev_0 => {
|
||
|
|
const next_0 = new Set(prev_0);
|
||
|
|
if (next_0.has(focusedIdx)) {
|
||
|
|
next_0.delete(focusedIdx);
|
||
|
|
} else {
|
||
|
|
next_0.add(focusedIdx);
|
||
|
|
}
|
||
|
|
return next_0;
|
||
|
|
});
|
||
|
|
setApproved(prev_1 => {
|
||
|
|
if (prev_1.has(focusedIdx)) {
|
||
|
|
return prev_1;
|
||
|
|
}
|
||
|
|
const next_1 = new Set(prev_1);
|
||
|
|
next_1.add(focusedIdx);
|
||
|
|
return next_1;
|
||
|
|
});
|
||
|
|
}
|
||
|
|
};
|
||
|
|
$[12] = focusedIdx;
|
||
|
|
$[13] = t7;
|
||
|
|
} else {
|
||
|
|
t7 = $[13];
|
||
|
|
}
|
||
|
|
const t8 = denials.length > 0;
|
||
|
|
let t9;
|
||
|
|
if ($[14] !== t8) {
|
||
|
|
t9 = {
|
||
|
|
isActive: t8
|
||
|
|
};
|
||
|
|
$[14] = t8;
|
||
|
|
$[15] = t9;
|
||
|
|
} else {
|
||
|
|
t9 = $[15];
|
||
|
|
}
|
||
|
|
useInput(t7, t9);
|
||
|
|
if (denials.length === 0) {
|
||
|
|
let t10;
|
||
|
|
if ($[16] === Symbol.for("react.memo_cache_sentinel")) {
|
||
|
|
t10 = <Text dimColor={true}>No recent denials. Commands denied by the auto mode classifier will appear here.</Text>;
|
||
|
|
$[16] = t10;
|
||
|
|
} else {
|
||
|
|
t10 = $[16];
|
||
|
|
}
|
||
|
|
return t10;
|
||
|
|
}
|
||
|
|
let t10;
|
||
|
|
if ($[17] !== approved || $[18] !== denials || $[19] !== retry) {
|
||
|
|
let t11;
|
||
|
|
if ($[21] !== approved || $[22] !== retry) {
|
||
|
|
t11 = (d, idx_0) => {
|
||
|
|
const isApproved = approved.has(idx_0);
|
||
|
|
const suffix = retry.has(idx_0) ? " (retry)" : "";
|
||
|
|
return {
|
||
|
|
label: <Text><StatusIcon status={isApproved ? "success" : "error"} withSpace={true} />{d.display}<Text dimColor={true}>{suffix}</Text></Text>,
|
||
|
|
value: String(idx_0)
|
||
|
|
};
|
||
|
|
};
|
||
|
|
$[21] = approved;
|
||
|
|
$[22] = retry;
|
||
|
|
$[23] = t11;
|
||
|
|
} else {
|
||
|
|
t11 = $[23];
|
||
|
|
}
|
||
|
|
t10 = denials.map(t11);
|
||
|
|
$[17] = approved;
|
||
|
|
$[18] = denials;
|
||
|
|
$[19] = retry;
|
||
|
|
$[20] = t10;
|
||
|
|
} else {
|
||
|
|
t10 = $[20];
|
||
|
|
}
|
||
|
|
const options = t10;
|
||
|
|
let t11;
|
||
|
|
if ($[24] === Symbol.for("react.memo_cache_sentinel")) {
|
||
|
|
t11 = <Text>Commands recently denied by the auto mode classifier.</Text>;
|
||
|
|
$[24] = t11;
|
||
|
|
} else {
|
||
|
|
t11 = $[24];
|
||
|
|
}
|
||
|
|
const t12 = Math.min(10, options.length);
|
||
|
|
let t13;
|
||
|
|
if ($[25] !== focusHeader || $[26] !== headerFocused || $[27] !== options || $[28] !== t12) {
|
||
|
|
t13 = <Box flexDirection="column">{t11}<Box marginTop={1}><Select options={options} onChange={handleSelect} onFocus={handleFocus} visibleOptionCount={t12} isDisabled={headerFocused} onUpFromFirstItem={focusHeader} /></Box></Box>;
|
||
|
|
$[25] = focusHeader;
|
||
|
|
$[26] = headerFocused;
|
||
|
|
$[27] = options;
|
||
|
|
$[28] = t12;
|
||
|
|
$[29] = t13;
|
||
|
|
} else {
|
||
|
|
t13 = $[29];
|
||
|
|
}
|
||
|
|
return t13;
|
||
|
|
}
|
||
|
|
function _temp3() {
|
||
|
|
return new Set();
|
||
|
|
}
|
||
|
|
function _temp2() {
|
||
|
|
return new Set();
|
||
|
|
}
|
||
|
|
function _temp() {
|
||
|
|
return getAutoModeDenials();
|
||
|
|
}
|
||
|
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNhbGxiYWNrIiwidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJCb3giLCJUZXh0IiwidXNlSW5wdXQiLCJBdXRvTW9kZURlbmlhbCIsImdldEF1dG9Nb2RlRGVuaWFscyIsIlNlbGVjdCIsIlN0YXR1c0ljb24iLCJ1c2VUYWJIZWFkZXJGb2N1cyIsIlByb3BzIiwib25IZWFkZXJGb2N1c0NoYW5nZSIsImZvY3VzZWQiLCJvblN0YXRlQ2hhbmdlIiwic3RhdGUiLCJhcHByb3ZlZCIsIlNldCIsInJldHJ5IiwiZGVuaWFscyIsIlJlY2VudERlbmlhbHNUYWIiLCJ0MCIsIiQiLCJfYyIsImhlYWRlckZvY3VzZWQiLCJmb2N1c0hlYWRlciIsInQxIiwidDIiLCJfdGVtcCIsInNldEFwcHJvdmVkIiwiX3RlbXAyIiwic2V0UmV0cnkiLCJfdGVtcDMiLCJmb2N1c2VkSWR4Iiwic2V0Rm9jdXNlZElkeCIsInQzIiwidDQiLCJ0NSIsIlN5bWJvbCIsImZvciIsInZhbHVlIiwiaWR4IiwiTnVtYmVyIiwicHJldiIsIm5leHQiLCJoYXMiLCJkZWxldGUiLCJhZGQiLCJoYW5kbGVTZWxlY3QiLCJ0NiIsInZhbHVlXzAiLCJoYW5kbGVGb2N1cyIsInQ3IiwiaW5wdXQiLCJfa2V5IiwicHJldl8wIiwibmV4dF8wIiwicHJldl8xIiwibmV4dF8xIiwidDgiLCJsZW5ndGgiLCJ0OSIsImlzQWN0aXZlIiwidDEwIiwidDExIiwiZCIsImlkeF8wIiwiaXNBcHByb3ZlZCIsInN1ZmZpeCIsImxhYmVsIiwiZGlzcGxheSIsIlN0cmluZyIsIm1hcCIsIm9wdGlvbnMiLCJ0MTIiLCJNYXRoIiwibWluIiwidDEzIl0sInNvdXJjZXMiOlsiUmVjZW50RGVuaWFsc1RhYi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gJ3JlYWN0J1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGN1c3RvbS1ydWxlcy9wcmVmZXItdXNlLWtleWJpbmRpbmdzIC0tICdyJyBpcyBhIHZpZXctc3BlY2lmaWMga2V5LCBub3QgYSBnbG9iYWwga2V5YmluZGluZ1xuaW1wb3J0IHsgQm94LCBUZXh0LCB1c2VJbnB1dCB9IGZyb20gJy4uLy4uLy4uL2luay5qcydcbmltcG9ydCB7XG4gIHR5cGUgQXV0b01vZGVEZW5pYWwsXG4gIGdldEF1dG9Nb2RlRGVuaWFscyxcbn0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvYXV0b01vZGVEZW5pYWxzLmpzJ1xuaW1wb3J0IHsgU2VsZWN0IH0gZnJvbSAnLi4vLi4vQ3VzdG9tU2VsZWN0L3NlbGVjdC5qcydcbmltcG9ydCB7IFN0YXR1c0ljb24gfSBmcm9tICcuLi8uLi9kZXNpZ24tc3lzdGVtL1N0YXR1c0ljb24uanMnXG5pbXBvcnQgeyB1c2VUYWJIZWFkZXJGb2N1cyB9IGZyb20gJy4uLy4uL2Rlc2lnbi1zeXN0ZW0vVGFicy5qcydcblxudHlwZSBQcm9wcyA9IHtcbiAgb25IZWFkZXJGb2N1c0NoYW5nZT86IChmb2N1c2VkOiBib29sZWFuKSA9PiB2b2lkXG4gIC8qKiBDYWxsZWQgd2hlbiBhcHByb3ZlZC9yZXRyeSBzdGF0ZSBjaGFuZ2VzIHNvIHBhcmVudCBjYW4gYWN0IG9uIGV4aXQgKi9cbiAgb25TdGF0ZUNoYW5nZTogKHN0YXRlOiB7XG4gICAgYXBwcm92ZWQ6IFNldDxudW1iZXI+XG4gICAgcmV0cnk6IFNldDxudW1iZXI+XG4gICAgZGVuaWFsczogcmVhZG9ubHkgQXV0b01vZGVEZW5pYWxbXVxuICB9KSA9PiB2b2lkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZWNlbnREZW5pYWxzVGFiKHtcbiAgb25IZWFkZXJGb2N1c0NoYW5nZSxcbiAgb25TdGF0ZUNoYW5nZSxcbn06IFByb3BzKTogUmVhY3QuUmVhY3ROb2RlIHtcbiAgY29uc3QgeyBoZWFkZXJGb2N1c2VkLCBmb2N1c0hlYWRlciB9ID0gdXNlVGFiSGVhZGVyRm9jdXMoKVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIG9uSGVhZGVyRm9jdXNDaGFuZ2U/LihoZWFkZXJGb2N1c2VkKVxuICB9LCBbaGVhZGVyRm9jdXNlZCwgb25IZWFkZXJGb2N1c0NoYW5nZV0pXG5cbiAgLy8gU25hcHNob3Qgb24gbW91bnQg4oCUIGFwcHJvdmVkL3JldHJ5IFNldHMga2V5IGJ5IGluZGV4LCBhbmQgdGhlIGxpdmUgc3RvcmVcbiAgLy8gcHJlcGVuZHMuIEEgY29uY3VycmVudCBkZW5pYWwgd291bGQgc2hpZnQgYWxsIGluZGljZXMgbWlkLWVkaXQuXG4gIGNvbnN0IFtkZW5pYWxzXSA9IHVzZVN0YXRlKCgpID0+IGdldEF1dG9Nb2RlRGVuaWFscygpKVxuXG4gIGNvbnN0IFthcHByb3ZlZCwgc2V0QXBwcm92ZWRdID0gdXNlU3RhdGU8U2V0PG51bWJlcj4+KCgpID0+IG5ldyBTZXQoKSlcbiAgY29uc3QgW3JldHJ5LCBzZXRSZXRyeV0gPSB1c2VTdGF0ZTxTZXQ8bnVtYmVyPj4oKCkgPT4gbmV3IFNldCgpKVxuICBjb25zdCBbZm9jdXNlZElkeCwgc2V0Rm9jdXNlZElkeF0gPSB1c2VTdGF0ZSgwKVxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgb25TdGF0ZUNoYW5nZSh7IGFwcHJvdmVkLCByZXRyeSwgZGVuaWFscyB9KVxuICB9LCBbYXBwcm92ZWQsIHJldHJ5LCBkZW5pYWxzLCBvblN0YXRlQ2hhbmdlXSlcblxuICBjb25zdCBoYW5kbGVTZWxlY3QgPSB1c2VDYWxsYmFjaygodmFsdWU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGlkeCA9IE51bWJlcih2YWx1ZSlcbiAgICBzZXRBcHByb3ZlZChwcmV2ID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSBuZXcgU2V0KHByZXYpXG4gICAgICBpZiAobmV4dC5oYXMoaWR4KSkgbmV4dC5kZWxldGUoaWR4KVxuICAgICAgZWxzZSBuZXh0LmFkZChpZHgpXG4gICAgICByZXR1cm4gbmV4dFxuICAgIH0pXG4gIH0sIFtdKVxuXG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gdXNlQ2FsbGJhY2soKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICBzZXRGb2N1c2VkSWR4KE51bWJlcih2YWx1ZSkpXG4gIH0sIFtdKVxuXG4gIHVzZUlucHV0KFxuICAgIChpbnB1dCwgX2tleSkgPT4ge1xuICAgICAgaWYgKGlucHV0ID09PSAncicpIHtcbiAgICAgICAgc2V0UmV0cnkocHJldiA9PiB7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IG5ldyBTZXQocHJldilcbiAgICAgICAgICBpZiAobmV4dC5oYXMoZm9jdXNlZElkeCkpIG5leHQuZGVsZXRlKGZvY3VzZWRJZHgpXG4gICAgICAgICAgZWxzZSBuZXh0LmF
|