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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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