feat: Enhanced Tab Completion for Interactive Mode

Open
#12 0 comments 0 reactions 1 assignee View on GitHub

@inureyes is already working on this.

Since Dec 16, 2025.

Assessment

This issue has not been assessed yet.

Description

priority:medium status:ready type:enhancement

Overview

Implement advanced tab completion capabilities for bssh's interactive mode, including remote path completion, command completion based on remote $PATH, and history-based completion suggestions. This will significantly improve the user experience by providing context-aware autocompletion similar to modern shells.

Technical Approach

Architecture Design

The implementation will use rustyline's built-in completion framework with custom completers that leverage SSH channels to fetch remote information. We'll implement a multi-tiered completion system:

  1. Completion Engine Architecture

    • Create a composite completer that delegates to specialized completers based on context
    • Cache remote data to minimize SSH round-trips
    • Implement async completion fetching with timeout handling
    • Use a priority system: history > remote paths > remote commands
  2. Data Caching Strategy

    • Cache remote $PATH directories and executables for 5 minutes
    • Cache recently accessed directory listings for 1 minute
    • Maintain a sliding window of command history (last 1000 commands)
    • Implement cache invalidation on directory changes
  3. Context Detection

    • Parse current command line to determine completion context
    • Detect if completing a command, path, or argument
    • Handle special characters and escape sequences
    • Support both absolute and relative path completion

Key Features

  • Tab completion for remote paths with <100ms latency (cached)
  • Command completion includes all executables in remote $PATH
  • History-based suggestions appear within 50ms
  • Completion works correctly across node switches
  • Cache persists between sessions

Implementation Phases

Phase 1: Foundation and Architecture
  • Create completion module structure at src/completion/mod.rs
  • Implement context parser at src/completion/parser.rs
  • Create cache manager at src/completion/cache.rs
  • Implement SSH data fetcher at src/completion/remote_fetcher.rs
Phase 2: Core Completion Implementations
  • Implement remote path completer at src/completion/path_completer.rs
  • Implement remote command completer at src/completion/command_completer.rs
  • Implement history-based completer at src/completion/history_completer.rs
  • Create composite completer at src/completion/composite_completer.rs
Phase 3: Integration with Interactive Mode
  • Extend InteractiveCommand to use custom completer
  • Add completion configuration to InteractiveConfig
  • Implement async completion updates
  • Add multi-node completion support
Phase 4: Advanced Features and Optimization
  • Implement smart completion features (git, docker, kubectl argument completion)
  • Add visual completion enhancements (color-coding, hints, preview)
  • Optimize performance (incremental updates, bloom filters, batching)
  • Add completion debugging and metrics
Phase 5: Testing & Polish
  • Write comprehensive unit tests
  • Add integration tests
  • Update documentation
  • Polish user experience

Dependencies

External Dependencies
  • rustyline = "17.0" - Already present, provides completion framework
  • Consider adding fuzzy-matcher = "0.3" for fuzzy history matching
  • Consider adding lru = "0.12" for LRU cache implementation
  • May need shellexpand = "3.1" for path expansion
Internal Dependencies
  • Existing SSH client implementation (src/ssh/tokio_client/)
  • Existing interactive mode infrastructure (src/commands/interactive.rs)
  • Configuration system (src/config.rs)
  • Node session management

Success Criteria

Functional Requirements
  • Tab completion works for remote paths with <100ms latency (cached)
  • Command completion includes all executables in remote $PATH
  • History-based suggestions appear within 50ms
  • Completion works correctly across node switches
  • Cache persists between sessions
Performance Benchmarks
  • Initial PATH scan completes within 2 seconds
  • Subsequent completions served from cache in <10ms
  • Memory usage for caches stays under 50MB
  • No blocking of interactive input during completion
  • Support for directories with 10,000+ files
User Experience
  • Completion feels as responsive as local shell
  • Clear visual feedback for completion types
  • Intuitive behavior matching user expectations
  • Graceful handling of network issues
  • Consistent behavior across all nodes

Related Work

  • Original task document: .claude/tasks/todo/1_enhanced_tab_completion.md
Dominant language
Rust
Stars
65
Forks
7
Avg merge
1h 30m
Merged PRs (30d)
25

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from lablup/bssh

All issues in lablup/bssh

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.