Skip to content

Implement TextInput component with useInput hook #11769

Closed as not planned
Closed as not planned

Description

@randomm

Parent Epic

Part of #11762 (Ink-based TUI Rewrite)

Objective

Create text input handling using Ink's useInput hook, supporting line editing, history, and keyboard shortcuts.

Current Implementation

The existing input.ts (128 lines) provides LineEditor with:

  • Basic text editing (insert, delete, cursor movement)
  • Command history (up/down arrows)
  • Line submission (Enter)

Approach Options

Option A: Use ink-text-input

import TextInput from 'ink-text-input'

const InputLine = () => {
  const [value, setValue] = useState('')
  return <TextInput value={value} onChange={setValue} onSubmit={handleSubmit} />
}

Option B: Custom implementation with useInput

import { useInput } from 'ink'

const InputLine = () => {
  const [value, setValue] = useState('')
  const [cursor, setCursor] = useState(0)
  
  useInput((input, key) => {
    if (key.return) handleSubmit(value)
    else if (key.backspace) handleBackspace()
    else if (key.leftArrow) moveCursor(-1)
    else if (key.rightArrow) moveCursor(1)
    else if (key.upArrow) historyPrev()
    else if (key.downArrow) historyNext()
    else if (input) insertChar(input)
  })
  
  return <Text>{prompt}{value}</Text>
}

Recommendation: Start with ink-text-input, customize if needed.

Tasks

  • Create src/cli/ink/components/InputLine.tsx
  • Implement prompt display: agent-name ❯
  • Implement text input with cursor
  • Implement command history (up/down arrows)
  • Implement agent cycling (Shift+Tab)
  • Implement cancel (Escape during streaming)
  • Implement exit (Ctrl+C)
  • Handle multi-line input (if needed)

Keyboard Shortcuts

Key Action
Enter Submit input
Up/Down Command history
Left/Right Move cursor
Shift+Tab Cycle agents
Ctrl+C Exit
Escape Cancel current operation
Ctrl+T Toggle task list (if implemented)

Acceptance Criteria

  • Text input works with cursor display
  • History navigation works
  • Agent cycling works
  • All keyboard shortcuts functional
  • Prompt updates when agent changes

Estimated Effort

1.5 days

Risk

Low - ink-text-input handles most complexity

Dependencies

Metadata

Metadata

Assignees

Labels

opentuiThis relates to changes in v1.0, now that opencode uses opentui

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions