feat(ipuaro): add Tab autocomplete for file paths in TUI

- Implement useAutocomplete hook with fuzzy matching and Redis integration
- Add visual feedback showing up to 5 suggestions below input
- Support Tab key for completion with common prefix algorithm
- Real-time suggestion updates as user types
- Path normalization (handles ./, trailing slashes)
- Case-insensitive matching with scoring algorithm
- Add 21 unit tests with jsdom environment
- Update Input component with storage and projectRoot props
- Refactor key handlers to reduce complexity
- Install @testing-library/react, jsdom, @types/jsdom
- Update react-dom to 18.3.1 for compatibility
- Configure jsdom environment for TUI tests in vitest config
- Adjust coverage threshold for branches to 91.5%
- Fix deprecated ErrorChoice usage (use ErrorOption)

Version: 0.21.0
Tests: 1484 passed (+21)
Coverage: 97.60% lines, 91.58% branches
This commit is contained in:
imfozilbek
2025-12-01 21:56:02 +05:00
parent 6695cb73d4
commit 357cf27765
11 changed files with 1407 additions and 66 deletions

View File

@@ -5,7 +5,7 @@
import { Box, Text, useInput } from "ink"
import React, { useState } from "react"
import type { ErrorChoice } from "../../shared/types/index.js"
import type { ErrorOption } from "../../shared/errors/IpuaroError.js"
export interface ErrorInfo {
type: string
@@ -15,7 +15,7 @@ export interface ErrorInfo {
export interface ErrorDialogProps {
error: ErrorInfo
onChoice: (choice: ErrorChoice) => void
onChoice: (choice: ErrorOption) => void
}
function ChoiceButton({
@@ -49,7 +49,7 @@ function ChoiceButton({
}
export function ErrorDialog({ error, onChoice }: ErrorDialogProps): React.JSX.Element {
const [selected, setSelected] = useState<ErrorChoice | null>(null)
const [selected, setSelected] = useState<ErrorOption | null>(null)
useInput((input, key) => {
const lowerInput = input.toLowerCase()