automagik-cli
Version:
Automagik CLI - A powerful command-line interface for interacting with Automagik Hive multi-agent AI systems
61 lines (60 loc) • 2.96 kB
JavaScript
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
import { useState, useCallback } from 'react';
import { Box, Text, useInput } from 'ink';
export const InputPrompt = ({ onSubmit, inputWidth, disabled = false, placeholder = 'Type your message...', }) => {
const [input, setInput] = useState('');
const [cursorPosition, setCursorPosition] = useState(0);
const handleSubmit = useCallback(() => {
if (input.trim() && !disabled) {
onSubmit(input.trim());
setInput('');
setCursorPosition(0);
}
}, [input, onSubmit, disabled]);
useInput((inputChar, key) => {
if (disabled) {
return;
}
if (key.return) {
handleSubmit();
}
else if (key.backspace || key.delete) {
if (cursorPosition > 0) {
const newInput = input.slice(0, cursorPosition - 1) + input.slice(cursorPosition);
setInput(newInput);
setCursorPosition(Math.max(0, cursorPosition - 1));
}
}
else if (key.leftArrow) {
setCursorPosition(Math.max(0, cursorPosition - 1));
}
else if (key.rightArrow) {
setCursorPosition(Math.min(input.length, cursorPosition + 1));
}
else if (key.ctrl && inputChar === 'a') {
setCursorPosition(0);
}
else if (key.ctrl && inputChar === 'e') {
setCursorPosition(input.length);
}
else if (key.ctrl && inputChar === 'u') {
setInput('');
setCursorPosition(0);
}
else if (key.ctrl && inputChar === 'k') {
setInput(input.slice(0, cursorPosition));
}
else if (inputChar && !key.ctrl && !key.meta) {
const newInput = input.slice(0, cursorPosition) + inputChar + input.slice(cursorPosition);
setInput(newInput);
setCursorPosition(cursorPosition + 1);
}
});
const displayText = input || placeholder;
const isPlaceholder = !input;
// Create visual cursor
const beforeCursor = input.slice(0, cursorPosition);
const atCursor = input[cursorPosition] || ' ';
const afterCursor = input.slice(cursorPosition + 1);
return (_jsxs(Box, { flexDirection: "column", marginY: 1, children: [_jsxs(Box, { children: [_jsx(Text, { color: "cyan", children: '> ' }), disabled ? (_jsx(Text, { color: "gray", children: placeholder })) : (_jsx(Box, { children: isPlaceholder ? (_jsx(Text, { color: "gray", children: placeholder })) : (_jsxs(_Fragment, { children: [_jsx(Text, { children: beforeCursor }), _jsx(Text, { inverse: true, children: atCursor }), _jsx(Text, { children: afterCursor })] })) }))] }), !disabled && (_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "gray", children: "Press Enter to send \u2022 Ctrl+H for help \u2022 Ctrl+L to clear \u2022 Ctrl+C to exit" }) }))] }));
};