Skip to content

Commit 7cffcc1

Browse files
Claude Workbenchcursoragent
andcommitted
feat: VibeShell - modern SSH/SFTP terminal client
A high-performance desktop SSH/SFTP terminal built with Tauri 2 + React 18. Core features: - Multi-tab SSH terminal with xterm.js WebGL renderer - Full SFTP file manager with drag-and-drop, preview, and batch operations - SSH tunneling engine (Local/Remote/Dynamic SOCKS5 forwarding) - Jump host (ProxyJump) and SSH Agent forwarding - Quick command snippets with search and categorization - Session recording and playback - Host key fingerprint verification and management - AES-256-GCM credential encryption with SQLite storage - i18n support (English / Chinese) - Tokyo Night themed UI with dark/light mode - GitHub Actions CI/CD with cross-platform release builds Tech stack: Rust (russh, tokio, rusqlite) + TypeScript (React, Zustand, Tailwind CSS) Co-authored-by: Cursor <cursoragent@cursor.com>
0 parents  commit 7cffcc1

197 files changed

Lines changed: 48218 additions & 0 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/ci.yml

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
name: CI
2+
3+
on:
4+
pull_request:
5+
branches: [master, main]
6+
push:
7+
branches: [master, main]
8+
paths-ignore:
9+
- '**.md'
10+
- 'docs/**'
11+
- '.github/ISSUE_TEMPLATE/**'
12+
13+
concurrency:
14+
group: ${{ github.workflow }}-${{ github.ref }}
15+
cancel-in-progress: true
16+
17+
jobs:
18+
check-frontend:
19+
name: Frontend Check
20+
runs-on: ubuntu-latest
21+
steps:
22+
- uses: actions/checkout@v4
23+
24+
- name: Setup Node.js
25+
uses: actions/setup-node@v4
26+
with:
27+
node-version: lts/*
28+
cache: npm
29+
30+
- name: Install dependencies
31+
run: npm ci
32+
33+
- name: TypeScript check
34+
run: npx tsc --noEmit
35+
36+
- name: Build frontend
37+
run: npm run build
38+
39+
check-backend:
40+
name: Rust Check (${{ matrix.platform }})
41+
strategy:
42+
fail-fast: false
43+
matrix:
44+
include:
45+
- platform: ubuntu-22.04
46+
name: Linux
47+
- platform: windows-latest
48+
name: Windows
49+
- platform: macos-latest
50+
name: macOS
51+
runs-on: ${{ matrix.platform }}
52+
steps:
53+
- uses: actions/checkout@v4
54+
55+
- name: Install Linux dependencies
56+
if: matrix.platform == 'ubuntu-22.04'
57+
run: |
58+
sudo apt-get update
59+
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
60+
61+
- name: Setup Node.js
62+
uses: actions/setup-node@v4
63+
with:
64+
node-version: lts/*
65+
cache: npm
66+
67+
- name: Install frontend dependencies
68+
run: npm ci
69+
70+
- name: Build frontend
71+
run: npm run build
72+
73+
- name: Install Rust stable
74+
uses: dtolnay/rust-toolchain@stable
75+
76+
- name: Rust cache
77+
uses: swatinem/rust-cache@v2
78+
with:
79+
workspaces: './src-tauri -> target'
80+
81+
- name: Cargo check
82+
run: cargo check
83+
working-directory: src-tauri
84+
85+
- name: Cargo test
86+
run: cargo test
87+
working-directory: src-tauri
88+
89+
check-clippy:
90+
name: Clippy Lint
91+
runs-on: ubuntu-22.04
92+
steps:
93+
- uses: actions/checkout@v4
94+
95+
- name: Install Linux dependencies
96+
run: |
97+
sudo apt-get update
98+
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
99+
100+
- name: Setup Node.js
101+
uses: actions/setup-node@v4
102+
with:
103+
node-version: lts/*
104+
cache: npm
105+
106+
- name: Install frontend dependencies
107+
run: npm ci
108+
109+
- name: Build frontend
110+
run: npm run build
111+
112+
- name: Install Rust stable
113+
uses: dtolnay/rust-toolchain@stable
114+
with:
115+
components: clippy
116+
117+
- name: Rust cache
118+
uses: swatinem/rust-cache@v2
119+
with:
120+
workspaces: './src-tauri -> target'
121+
122+
- name: Run clippy
123+
run: cargo clippy -- -D warnings
124+
working-directory: src-tauri

.github/workflows/release.yml

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
name: Release
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
workflow_dispatch:
8+
9+
permissions:
10+
contents: write
11+
12+
concurrency:
13+
group: release-${{ github.ref }}
14+
cancel-in-progress: false
15+
16+
jobs:
17+
create-release:
18+
name: Create Release
19+
runs-on: ubuntu-latest
20+
outputs:
21+
release_id: ${{ steps.create_release.outputs.id }}
22+
upload_url: ${{ steps.create_release.outputs.upload_url }}
23+
version: ${{ steps.get_version.outputs.version }}
24+
steps:
25+
- uses: actions/checkout@v4
26+
27+
- name: Get version
28+
id: get_version
29+
run: |
30+
VERSION=$(jq -r .version src-tauri/tauri.conf.json)
31+
echo "version=$VERSION" >> $GITHUB_OUTPUT
32+
echo "App version: $VERSION"
33+
34+
- name: Create release
35+
id: create_release
36+
uses: softprops/action-gh-release@v2
37+
with:
38+
tag_name: v${{ steps.get_version.outputs.version }}
39+
name: VibeShell v${{ steps.get_version.outputs.version }}
40+
body: |
41+
## VibeShell v${{ steps.get_version.outputs.version }}
42+
43+
### Downloads
44+
| Platform | File |
45+
|----------|------|
46+
| Windows x64 | `VibeShell_${{ steps.get_version.outputs.version }}_x64-setup.exe` / `.msi` |
47+
| macOS (Apple Silicon) | `VibeShell_${{ steps.get_version.outputs.version }}_aarch64.dmg` |
48+
| macOS (Intel) | `VibeShell_${{ steps.get_version.outputs.version }}_x64.dmg` |
49+
| Linux x64 | `.deb` / `.AppImage` |
50+
51+
### What's Changed
52+
See [commit history](https://github.com/${{ github.repository }}/commits/v${{ steps.get_version.outputs.version }}) for full changes.
53+
draft: false
54+
prerelease: false
55+
generate_release_notes: true
56+
env:
57+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
58+
59+
build-tauri:
60+
name: Build (${{ matrix.name }})
61+
needs: create-release
62+
strategy:
63+
fail-fast: false
64+
matrix:
65+
include:
66+
- platform: windows-latest
67+
name: Windows x64
68+
args: ''
69+
- platform: macos-latest
70+
name: macOS ARM64
71+
args: '--target aarch64-apple-darwin'
72+
- platform: macos-latest
73+
name: macOS x64
74+
args: '--target x86_64-apple-darwin'
75+
- platform: ubuntu-22.04
76+
name: Linux x64
77+
args: ''
78+
79+
runs-on: ${{ matrix.platform }}
80+
steps:
81+
- uses: actions/checkout@v4
82+
83+
- name: Install Linux dependencies
84+
if: matrix.platform == 'ubuntu-22.04'
85+
run: |
86+
sudo apt-get update
87+
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
88+
89+
- name: Setup Node.js
90+
uses: actions/setup-node@v4
91+
with:
92+
node-version: lts/*
93+
cache: npm
94+
95+
- name: Install Rust stable
96+
uses: dtolnay/rust-toolchain@stable
97+
with:
98+
targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}
99+
100+
- name: Rust cache
101+
uses: swatinem/rust-cache@v2
102+
with:
103+
workspaces: './src-tauri -> target'
104+
105+
- name: Install frontend dependencies
106+
run: npm ci
107+
108+
- name: Build Tauri app
109+
uses: tauri-apps/tauri-action@v0
110+
env:
111+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
112+
with:
113+
releaseId: ${{ needs.create-release.outputs.release_id }}
114+
args: ${{ matrix.args }}

.gitignore

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
# ============================================
2+
# Dependencies
3+
# ============================================
4+
node_modules/
5+
6+
# ============================================
7+
# Build outputs
8+
# ============================================
9+
dist/
10+
target/
11+
out/
12+
*.bundle
13+
14+
# ============================================
15+
# IDE & Editors
16+
# ============================================
17+
.idea/
18+
.vscode/
19+
*.swp
20+
*.swo
21+
*.swn
22+
*~
23+
.project
24+
.classpath
25+
.settings/
26+
27+
# ============================================
28+
# OS generated
29+
# ============================================
30+
.DS_Store
31+
.DS_Store?
32+
._*
33+
.Spotlight-V100
34+
.Trashes
35+
Thumbs.db
36+
ehthumbs.db
37+
Desktop.ini
38+
39+
# ============================================
40+
# Environment & secrets
41+
# ============================================
42+
.env
43+
.env.*
44+
!.env.example
45+
46+
# ============================================
47+
# Rust / Cargo
48+
# ============================================
49+
*.pdb
50+
*.dll
51+
*.exe
52+
*.so
53+
*.dylib
54+
!src-tauri/icons/*.ico
55+
56+
# ============================================
57+
# Tauri bundle artifacts
58+
# ============================================
59+
src-tauri/target/
60+
src-tauri/gen/
61+
62+
# ============================================
63+
# Logs & build outputs
64+
# ============================================
65+
*.log
66+
npm-debug.log*
67+
pnpm-debug.log*
68+
yarn-debug.log*
69+
yarn-error.log*
70+
build_output.log
71+
72+
# ============================================
73+
# Test & coverage
74+
# ============================================
75+
coverage/
76+
.nyc_output/
77+
test-results/
78+
*.lcov
79+
tarpaulin-report.html
80+
81+
# ============================================
82+
# Local scripts & temp files
83+
# ============================================
84+
*.bat
85+
*.tmp
86+
*.temp
87+
*.bak
88+
*.orig
89+
90+
# ============================================
91+
# Package manager caches
92+
# ============================================
93+
.npm/
94+
.pnpm-store/
95+
.yarn/
96+
97+
# ============================================
98+
# Misc
99+
# ============================================
100+
pnpm-lock.yaml
101+
*.tsbuildinfo
102+
*.backup.*
103+
*.debug.*

0 commit comments

Comments
 (0)