UNPKG

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
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" }) }))] })); };