Skip to content

SSH Config Storage & Workspace UI #73

Description

@hellodk

Description

Add support for persistent SSH configuration storage per workspace and a UI panel in VS Code to manage SSH configurations across multi-root workspace setups.

Acceptance Criteria

  • SSH configurations are stored persistently in workspace-specific storage (e.g., .champ/ssh-config.json)
  • A workspace UI panel is implemented to display and manage SSH configurations
  • SSH config can be added, edited, and deleted from the UI panel
  • SSH configurations are properly isolated per workspace folder in multi-root workspace setups
  • SSH config values are validated before storage (e.g., host, port, user)
  • Persistence layer correctly reads/writes SSH configs without data loss
  • UI panel updates in real-time when SSH configurations change
  • SSH configurations are loaded from storage on extension activation
  • Error states are handled gracefully (invalid config, file I/O errors, validation failures)
  • Configuration changes trigger appropriate telemetry events (optional: feature tracking)

Tests Required

  • Unit tests: SSH config validation logic (valid/invalid host, port, user combinations)
  • Unit tests: SSH config storage read/write operations
  • Integration tests: SSH config persistence across workspace reloads
  • Integration tests: Multi-workspace isolation (configs in workspace A don't leak to workspace B)
  • Integration tests: Webview-to-extension communication for CRUD operations
  • E2E tests: Add/edit/delete SSH config via UI panel
  • E2E tests: Verify SSH configs survive extension restart
  • E2E tests: Verify SSH configs isolated per workspace in multi-root setup
  • Error handling tests: Malformed JSON in config file, missing file permissions, disk full scenarios

Implementation Notes

  • Consider reusing existing config structure from issue-58-multiroot-config for consistency
  • SSH config storage path: <workspace>/.champ/ssh-config.json
  • Webview component should be React/TypeScript for consistency with codebase
  • Use extension's globalState or workspaceState APIs for storage if file-based approach becomes complex

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Medium priority — this quarterfeatureNew feature

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions