Rhodawk Bot
feat(openclaude): vendor OpenClaude as headless gRPC daemon, eliminate aider
39e315a
Raw
History Blame Contribute Delete
2.22 kB
import * as React from 'react';
import { Box, Text } from '../../ink.js';
import { Select } from '../CustomSelect/select.js';
import { PermissionDialog } from '../permissions/PermissionDialog.js';
type Props = {
pluginName: string;
pluginDescription?: string;
marketplaceName: string;
sourceCommand: string;
onResponse: (response: 'yes' | 'no' | 'disable') => void;
};
const AUTO_DISMISS_MS = 30_000;
export function PluginHintMenu({
pluginName,
pluginDescription,
marketplaceName,
sourceCommand,
onResponse
}: Props): React.ReactNode {
const onResponseRef = React.useRef(onResponse);
onResponseRef.current = onResponse;
React.useEffect(() => {
const timeoutId = setTimeout(ref => ref.current('no'), AUTO_DISMISS_MS, onResponseRef);
return () => clearTimeout(timeoutId);
}, []);
function onSelect(value: string): void {
switch (value) {
case 'yes':
onResponse('yes');
break;
case 'disable':
onResponse('disable');
break;
default:
onResponse('no');
}
}
const options = [{
label: <Text>
Yes, install <Text bold>{pluginName}</Text>
</Text>,
value: 'yes'
}, {
label: 'No',
value: 'no'
}, {
label: "No, and don't show plugin installation hints again",
value: 'disable'
}];
return <PermissionDialog title="Plugin Recommendation">
<Box flexDirection="column" paddingX={2} paddingY={1}>
<Box marginBottom={1}>
<Text dimColor>
The <Text bold>{sourceCommand}</Text> command suggests installing a
plugin.
</Text>
</Box>
<Box>
<Text dimColor>Plugin:</Text>
<Text> {pluginName}</Text>
</Box>
<Box>
<Text dimColor>Marketplace:</Text>
<Text> {marketplaceName}</Text>
</Box>
{pluginDescription && <Box>
<Text dimColor>{pluginDescription}</Text>
</Box>}
<Box marginTop={1}>
<Text>Would you like to install it?</Text>
</Box>
<Box>
<Select options={options} onChange={onSelect} onCancel={() => onResponse('no')} />
</Box>
</Box>
</PermissionDialog>;
}