webtun 1.5.0 → 1.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +149 -225
- package/package.json +1 -1
- package/public/commands.js +0 -1
- package/public/favicon.png +0 -0
- package/public/icon-192.png +0 -0
- package/public/icon-512.png +0 -0
- package/public/icon.svg +1 -0
- package/public/index.html +863 -253
- package/server.js +1 -1
package/README.md
CHANGED
|
@@ -1,237 +1,140 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-

|
|
5
|
-

|
|
6
|
-

|
|
7
|
-

|
|
8
|
-
|
|
9
|
-
**Access your server from any browser — no VPN, no SSH client, no installing anything.**
|
|
10
|
-
|
|
11
|
-
[](install.sh)
|
|
12
|
-
[](https://github.com/unn-known1/webtun/releases/latest)
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## Why WebTun?
|
|
17
|
-
|
|
18
|
-
| Traditional SSH | WebTun |
|
|
19
|
-
|----------------|--------|
|
|
20
|
-
| Need SSH client installed | Open any browser |
|
|
21
|
-
| Configure VPN or port forwarding | Cloudflare Tunnel auto-configured |
|
|
22
|
-
| Can't access from phone easily | PWA works on iOS/Android |
|
|
23
|
-
| Share access requires key exchange | Web-based sharing in 1 click |
|
|
24
|
-
| Corporate firewall blocks port 22 | Runs over HTTPS (port 443) |
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
## Features
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="public/icon.svg" width="80" height="80" alt="WebTun">
|
|
3
|
+
</p>
|
|
29
4
|
|
|
30
|
-
|
|
31
|
-
- **Real shell sessions** — node-pty backed, full bash/zsh support
|
|
32
|
-
- **Multi-tab terminal** — drag tabs to reorder, side-by-side sessions like your desktop
|
|
33
|
-
- **File explorer** — browse, upload, download, rename, delete, cut/copy/paste with conflict resolution (replace, merge, keep both, skip)
|
|
34
|
-
- **WebSocket + xterm.js** — responsive, low-latency typing
|
|
35
|
-
- **Bracketed paste** — Ctrl+V works correctly in TUI apps (vim, nano, htop, mc)
|
|
36
|
-
- **Command history** — automatic capture with smart dedup, works with pasted commands
|
|
37
|
-
|
|
38
|
-
### Mobile-First UX
|
|
39
|
-
- **Touch gestures** — swipe to close tabs, swipe from edge to open sidebar, pull-to-refresh file list
|
|
40
|
-
- **Mobile keyboard bar** — ESC, Tab, arrow keys, Ctrl combos (Ctrl+C, Ctrl+D, etc.)
|
|
41
|
-
- **Virtual keyboard aware** — terminal resizes when keyboard opens, no overlap
|
|
42
|
-
- **Pinch-to-zoom** — adjust terminal font size (10–28px) with two fingers
|
|
43
|
-
- **Selection mode** — toggle between terminal interaction and text selection
|
|
44
|
-
- **Responsive** — optimized for phones (480px), tablets (1024px), and landscape orientation
|
|
45
|
-
|
|
46
|
-
### Settings
|
|
47
|
-
- **Right-click menu toggle** — enable/disable custom terminal context menu (Settings > Terminal)
|
|
48
|
-
- **Terminal scroll** — reliable mouse wheel scroll in all apps, including TUI apps with mouse tracking
|
|
5
|
+
<h1 align="center">WebTun</h1>
|
|
49
6
|
|
|
50
|
-
|
|
51
|
-
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
- **Folder download** — folders download as `.zip` archives automatically
|
|
55
|
-
- **Image viewer** — click images (.png, .jpg, .gif, .svg, .webp, .bmp, .ico) to preview inline
|
|
56
|
-
- **Cut, Copy, Paste** — multi-file support with conflict resolution dialog (replace, merge folders, keep both, skip, cancel)
|
|
57
|
-
- **Upload with progress** — per-file progress bar via XHR
|
|
58
|
-
- **Breadcrumb navigation** — tappable directory segments for quick navigation
|
|
59
|
-
- **Long-press context menu** — rename, delete, download, copy on touch devices
|
|
60
|
-
- **Text selection** — long-press file names to select and copy text on touch devices
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>Self-hosted web terminal with file explorer, Cloudflare Tunnel, and PWA support</strong><br>
|
|
9
|
+
Access your server from any browser — no VPN, no SSH client, no installing anything.
|
|
10
|
+
</p>
|
|
61
11
|
|
|
62
|
-
|
|
63
|
-
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
- Runs the server as a child process — no terminal needed
|
|
71
|
-
- Native window with system tray, copy/paste, and file dialogs
|
|
72
|
-
- Download the latest release from [GitHub Releases](https://github.com/unn-known1/webtun/releases/latest)
|
|
73
|
-
- Or build from source: `npm run dist:linux` / `npm run dist:win`
|
|
74
|
-
|
|
75
|
-
### PWA (Install as App)
|
|
76
|
-
- Add to iOS/Android home screen — looks and feels like native app
|
|
77
|
-
- Install banner prompts on first visit (Chrome) with iOS instructions fallback
|
|
78
|
-
- Works offline (shows last session state)
|
|
79
|
-
- Push notifications for tunnel status
|
|
80
|
-
|
|
81
|
-
### Cloudflare Tunnel (Zero-Config)
|
|
82
|
-
- Create tunnel from UI — no CLI commands
|
|
83
|
-
- Built-in health check warns if local server is unreachable before creating tunnel
|
|
84
|
-
- Live/orphan status + target responsiveness indicator in tunnel list
|
|
85
|
-
- Get public HTTPS URL instantly
|
|
86
|
-
- Tunnels survive server restarts
|
|
87
|
-
- Stop/kill tunnels from settings panel
|
|
12
|
+
<p align="center">
|
|
13
|
+
<a href="https://github.com/unn-known1/webtun/releases/latest"><img src="https://img.shields.io/github/v/release/unn-known1/webtun?style=flat-square&logo=github" alt="Release"></a>
|
|
14
|
+
<img src="https://img.shields.io/badge/Terminal-xterm.js-2D5B8E?style=flat-square" alt="Terminal">
|
|
15
|
+
<img src="https://img.shields.io/badge/PWA-Installable-6BA428?style=flat-square" alt="PWA">
|
|
16
|
+
<img src="https://img.shields.io/badge/Tunnel-Cloudflare-F38020?style=flat-square" alt="Tunnel">
|
|
17
|
+
<img src="https://img.shields.io/badge/Desktop-Electron-47848F?style=flat-square" alt="Electron">
|
|
18
|
+
<img src="https://img.shields.io/badge/License-MIT-green?style=flat-square" alt="License">
|
|
19
|
+
</p>
|
|
88
20
|
|
|
89
21
|
---
|
|
90
22
|
|
|
91
23
|
## Quick Start
|
|
92
24
|
|
|
93
|
-
### npm (Recommended)
|
|
94
25
|
```bash
|
|
95
26
|
npx webtun
|
|
96
27
|
```
|
|
97
28
|
|
|
98
|
-
|
|
99
|
-
```bash
|
|
100
|
-
npm install -g webtun
|
|
101
|
-
webtun
|
|
102
|
-
```
|
|
29
|
+
That's it. Open `http://localhost:3000` in your browser.
|
|
103
30
|
|
|
104
|
-
**Options:**
|
|
105
|
-
| Flag | Description |
|
|
106
|
-
|------|-------------|
|
|
107
|
-
| `--port, -p` | Port (default: 3000) |
|
|
108
|
-
| `--host, -h` | Host (default: 0.0.0.0) |
|
|
109
|
-
| `--pin` | Authentication PIN |
|
|
110
|
-
| `--tunnel, -t` | Start Cloudflare Tunnel |
|
|
111
|
-
| `--help` | Show help |
|
|
112
|
-
| `--version` | Show version |
|
|
113
|
-
|
|
114
|
-
**Environment Variables:**
|
|
115
|
-
| Variable | Description |
|
|
116
|
-
|----------|-------------|
|
|
117
|
-
| `PORT` | Server port (default: 3000) |
|
|
118
|
-
| `HOST` | Bind address (default: 0.0.0.0) |
|
|
119
|
-
| `PIN` | Authentication PIN (empty = no auth) |
|
|
120
|
-
| `SHELL` | Shell to use (default: PowerShell on Windows, bash/sh elsewhere) |
|
|
121
|
-
| `WORKSPACE_ROOT` | Root directory for file operations (default: ~) |
|
|
122
|
-
| `TRUST_PROXY` | Set to `true` if behind a reverse proxy (default: loopback only) |
|
|
123
|
-
| `WEBTUN_SHELL` | Override shell on Windows (e.g., `/usr/bin/bash` for Git Bash) |
|
|
124
|
-
|
|
125
|
-
**Examples:**
|
|
126
31
|
```bash
|
|
127
|
-
npx webtun # Start on port 3000
|
|
128
|
-
npx webtun --port 8080 # Custom port
|
|
129
32
|
npx webtun --pin secret123 # With PIN protection
|
|
130
|
-
npx webtun --tunnel # With Cloudflare Tunnel
|
|
131
|
-
npx webtun -p
|
|
33
|
+
npx webtun --tunnel # With Cloudflare Tunnel (public URL)
|
|
34
|
+
npx webtun -p 8080 -t # Custom port + tunnel
|
|
35
|
+
npx webtun --help # Show all options
|
|
36
|
+
npx webtun --version # Show version
|
|
132
37
|
```
|
|
133
38
|
|
|
134
|
-
|
|
135
|
-
```bash
|
|
136
|
-
# Allow scripts once during install
|
|
137
|
-
npm install -g --allow-scripts=webtun,node-pty webtun
|
|
39
|
+
### Install globally
|
|
138
40
|
|
|
139
|
-
|
|
140
|
-
npm config set allow-scripts=webtun,node-pty --location=user
|
|
41
|
+
```bash
|
|
141
42
|
npm install -g webtun
|
|
43
|
+
webtun
|
|
142
44
|
```
|
|
143
45
|
|
|
144
|
-
|
|
145
|
-
```bash
|
|
146
|
-
|
|
147
|
-
|
|
46
|
+
> **npm 12+ note:** Install scripts are blocked by default. Allow them for `node-pty`:
|
|
47
|
+
> ```bash
|
|
48
|
+
> npm install -g --allow-scripts=webtun,node-pty webtun
|
|
49
|
+
> ```
|
|
50
|
+
> Build tools required for native modules: `sudo apt-get install -y python3 make g++` (Debian/Ubuntu) or `xcode-select --install` (macOS).
|
|
148
51
|
|
|
149
|
-
|
|
150
|
-
xcode-select --install
|
|
151
|
-
```
|
|
52
|
+
### Other install methods
|
|
152
53
|
|
|
153
|
-
### One-Command Install
|
|
154
54
|
```bash
|
|
55
|
+
# One-command install
|
|
155
56
|
bash -c "$(curl -fsSL https://raw.githubusercontent.com/unn-Known1/webtun/main/install.sh)"
|
|
156
|
-
```
|
|
157
57
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
git clone https://github.com/unn-Known1/webtun.git
|
|
161
|
-
cd webtun
|
|
162
|
-
chmod +x setup.sh && ./setup.sh
|
|
163
|
-
npm start
|
|
164
|
-
```
|
|
165
|
-
|
|
166
|
-
### Google Colab (Instant Terminal)
|
|
167
|
-
```python
|
|
168
|
-
!rm -rf webtun && git clone https://github.com/unn-Known1/webtun.git && cd webtun && npm install --loglevel=error && node server.js > /tmp/webtun.log 2>&1 & sleep 4 && for i in 1 2 3; do curl -sf http://localhost:3000/api/auth/required >/dev/null && break; sleep 2; done && curl -s -X POST http://localhost:3000/api/tunnel -H 'Content-Type: application/json' -d '{"url":"http://localhost:3000"}' --max-time 20 | python3 -c "import sys,json; d=json.load(sys.stdin); print('🌐 WebTun ready at:', d.get('url','Error: '+d.get('error','')))"
|
|
58
|
+
# Manual setup
|
|
59
|
+
git clone https://github.com/unn-Known1/webtun.git && cd webtun && ./setup.sh && npm start
|
|
169
60
|
```
|
|
170
61
|
|
|
171
62
|
---
|
|
172
63
|
|
|
173
|
-
##
|
|
174
|
-
|
|
175
|
-
```
|
|
176
|
-
┌────────────────────────────────────────────────────────────────┐
|
|
177
|
-
│ Your Browser │
|
|
178
|
-
│ ┌──────────┐ ┌───────────┐ ┌─────────────┐ ┌───────────┐ │
|
|
179
|
-
│ │ Terminal │ │ File │ │ Tunnel │ │ Settings │ │
|
|
180
|
-
│ │ (xterm) │ │ Explorer │ │ Manager │ │ Panel │ │
|
|
181
|
-
│ └─────┬────┘ └─────┬─────┘ └──────┬──────┘ └─────┬─────┘ │
|
|
182
|
-
│ │ │ │ │ │
|
|
183
|
-
└────────┼─────────────┼───────────────┼───────────────┼─────────┘
|
|
184
|
-
│ WebSocket │ REST API │ │
|
|
185
|
-
▼ ▼ ▼ │
|
|
186
|
-
┌────────────────────────────────────────────────────────────────┐
|
|
187
|
-
│ Node.js Server │
|
|
188
|
-
│ ┌─────────────┐ ┌──────────────┐ ┌───────────────────────┐ │
|
|
189
|
-
│ │ WebSocket │ │ File API │ │ Cloudflare Tunnel │ │
|
|
190
|
-
│ │ Handler │ │ (read/write) │ │ Manager │ │
|
|
191
|
-
│ └──────┬──────┘ └──────┬───────┘ └───────────┬───────────┘ │
|
|
192
|
-
│ │ │ │ │
|
|
193
|
-
│ ▼ ▼ ▼ │
|
|
194
|
-
│ ┌──────────┐ ┌──────────────────┐ ┌──────────────────────┐ │
|
|
195
|
-
│ │ node-pty │ │ Local Filesystem │ │ cloudflared daemon │ │
|
|
196
|
-
│ │ (shell) │ │ (your server) │ │ (exposes to internet)│ │
|
|
197
|
-
│ └──────────┘ └──────────────────┘ └──────────────────────┘ │
|
|
198
|
-
└────────────────────────────────────────────────────────────────┘
|
|
199
|
-
│
|
|
200
|
-
▼
|
|
201
|
-
┌─────────────────┐
|
|
202
|
-
│ Internet Users │
|
|
203
|
-
│ (HTTPS URL) │
|
|
204
|
-
└─────────────────┘
|
|
205
|
-
```
|
|
64
|
+
## Features
|
|
206
65
|
|
|
207
|
-
|
|
66
|
+
### Terminal
|
|
67
|
+
- **Real shell sessions** — node-pty backed, full bash/zsh/PowerShell support
|
|
68
|
+
- **Multi-tab** — drag to reorder, side-by-side sessions
|
|
69
|
+
- **Bracketed paste** — Ctrl+V works in TUI apps (vim, nano, htop)
|
|
70
|
+
- **Command history** — keystroke-based capture, strips ANSI/control sequences
|
|
71
|
+
- **tmux sessions** — persistent sessions survive page reload
|
|
72
|
+
- **Keyboard Shortcuts** — reference dialog in the overflow menu (Ctrl+P/T/W/B/F, etc.)
|
|
208
73
|
|
|
209
|
-
|
|
74
|
+
### File Explorer
|
|
75
|
+
- Browse, upload, download, rename, delete files
|
|
76
|
+
- **Multi-select** — batch delete, download, zip, cut, copy
|
|
77
|
+
- **Zip/Extract** — right-click any file or folder
|
|
78
|
+
- **Image viewer** — preview inline (png, jpg, gif, svg, webp)
|
|
79
|
+
- **Conflict resolution** — replace, merge, keep both, skip
|
|
80
|
+
- **Breadcrumb navigation** — tappable directory segments
|
|
81
|
+
|
|
82
|
+
### Mobile
|
|
83
|
+
- **Touch gestures** — swipe to close tabs, pull-to-refresh
|
|
84
|
+
- **Mobile keyboard bar** — ESC, Tab, arrows, Ctrl combos
|
|
85
|
+
- **Pinch-to-zoom** — adjust font size with two fingers
|
|
86
|
+
- **Virtual keyboard aware** — no overlap when keyboard opens
|
|
87
|
+
- **Selection mode** — toggle between interaction and text selection
|
|
88
|
+
|
|
89
|
+
### Cloudflare Tunnel
|
|
90
|
+
- Create tunnels from the UI — zero CLI commands
|
|
91
|
+
- Built-in health check before tunnel creation
|
|
92
|
+
- Live status indicators, tunnels survive restarts
|
|
93
|
+
- Stop/kill tunnels from settings panel
|
|
210
94
|
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
95
|
+
### System Stats
|
|
96
|
+
- CPU, Memory, Disk, Uptime — real-time with progress bars
|
|
97
|
+
- GPU detection (nvidia-smi, system_profiler, WMI)
|
|
98
|
+
- Multi-GPU support with VRAM, utilization, temperature
|
|
99
|
+
- Top processes sorted by CPU
|
|
100
|
+
|
|
101
|
+
### Desktop (Electron)
|
|
102
|
+
- Cross-platform app for Linux, Windows, macOS
|
|
103
|
+
- Native window with system tray and file dialogs
|
|
104
|
+
- Build: `npm run dist:linux` / `npm run dist:win` / `npm run dist:mac`
|
|
105
|
+
- [Download latest release](https://github.com/unn-known1/webtun/releases/latest)
|
|
106
|
+
|
|
107
|
+
### PWA
|
|
108
|
+
- Install to iOS/Android home screen
|
|
109
|
+
- Works offline with last session state
|
|
110
|
+
- Install banner with iOS instructions fallback
|
|
219
111
|
|
|
220
112
|
---
|
|
221
113
|
|
|
222
|
-
##
|
|
114
|
+
## Configuration
|
|
223
115
|
|
|
224
|
-
|
|
225
|
-
2. Go to **Tunnel** section
|
|
226
|
-
3. Enter URL (default: `http://localhost:3000`)
|
|
227
|
-
4. Click **Create** — a health check pings the target first, warns if unreachable
|
|
228
|
-
5. Copy the public URL — share it with anyone
|
|
229
|
-
6. View all tunnels with live status indicators (green/orange)
|
|
116
|
+
### CLI Flags
|
|
230
117
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
118
|
+
| Flag | Description | Default |
|
|
119
|
+
|------|-------------|---------|
|
|
120
|
+
| `--port, -p` | Server port | `3000` |
|
|
121
|
+
| `--host, -h` | Bind address | `0.0.0.0` |
|
|
122
|
+
| `--pin` | Authentication PIN | none |
|
|
123
|
+
| `--tunnel, -t` | Start Cloudflare Tunnel | off |
|
|
124
|
+
| `--help` | Show help | — |
|
|
125
|
+
| `--version` | Show version | — |
|
|
126
|
+
|
|
127
|
+
### Environment Variables
|
|
128
|
+
|
|
129
|
+
| Variable | Description | Default |
|
|
130
|
+
|----------|-------------|---------|
|
|
131
|
+
| `PORT` | Server port | `3000` |
|
|
132
|
+
| `HOST` | Bind address | `0.0.0.0` |
|
|
133
|
+
| `PIN` | Auth PIN (empty = no auth) | none |
|
|
134
|
+
| `SHELL` | Shell to use | platform default |
|
|
135
|
+
| `WORKSPACE_ROOT` | File explorer root | `~` |
|
|
136
|
+
| `TRUST_PROXY` | Trust `X-Forwarded-For` from first proxy | `false` |
|
|
137
|
+
| `WEBTUN_SHELL` | Override shell on Windows | PowerShell |
|
|
235
138
|
|
|
236
139
|
---
|
|
237
140
|
|
|
@@ -239,10 +142,8 @@ kill $(pgrep -f 'cloudflared tunnel')
|
|
|
239
142
|
|
|
240
143
|
| Layer | Technology |
|
|
241
144
|
|-------|------------|
|
|
242
|
-
| Frontend |
|
|
243
|
-
| Backend | Node.js
|
|
244
|
-
| Terminal | xterm.js + fit addon |
|
|
245
|
-
| Protocol | WebSocket (ws) |
|
|
145
|
+
| Frontend | Vanilla JS, xterm.js, CodeMirror, PWA |
|
|
146
|
+
| Backend | Node.js, Express, node-pty |
|
|
246
147
|
| Tunnel | Cloudflare Tunnel (cloudflared) |
|
|
247
148
|
| Desktop | Electron + electron-builder |
|
|
248
149
|
| Archives | archiver v8 + yauzl |
|
|
@@ -251,11 +152,11 @@ kill $(pgrep -f 'cloudflared tunnel')
|
|
|
251
152
|
|
|
252
153
|
## Security
|
|
253
154
|
|
|
254
|
-
-
|
|
255
|
-
-
|
|
256
|
-
-
|
|
257
|
-
-
|
|
258
|
-
-
|
|
155
|
+
- PIN authentication on all API endpoints (`x-pin-token` header or `?token=` query)
|
|
156
|
+
- CSP headers restrict script sources to CDN
|
|
157
|
+
- WebSocket origin check prevents cross-site hijacking
|
|
158
|
+
- Per-IP rate limiting on auth and search endpoints
|
|
159
|
+
- npm audit clean — 0 known vulnerabilities
|
|
259
160
|
|
|
260
161
|
---
|
|
261
162
|
|
|
@@ -263,31 +164,54 @@ kill $(pgrep -f 'cloudflared tunnel')
|
|
|
263
164
|
|
|
264
165
|
| Problem | Solution |
|
|
265
166
|
|---------|----------|
|
|
266
|
-
| Tunnel
|
|
267
|
-
|
|
|
268
|
-
|
|
|
269
|
-
|
|
|
270
|
-
| Windows
|
|
271
|
-
|
|
|
272
|
-
| Tunnel persists after server restart | Tunnels are auto-managed; manual cleanup: `kill $(pgrep -f 'cloudflared tunnel')` |
|
|
273
|
-
|
|
274
|
-
---
|
|
275
|
-
|
|
276
|
-
## Contributing
|
|
277
|
-
|
|
278
|
-
1. Fork → Branch → Commit → PR
|
|
279
|
-
2. Follow existing code style (ES6+, no frameworks)
|
|
280
|
-
3. Test locally with `npm start`
|
|
281
|
-
4. Update this README if adding features
|
|
167
|
+
| Tunnel not loading | Check quota at [dash.cloudflare.com](https://dash.cloudflare.com) |
|
|
168
|
+
| Port 3000 in use | `PORT=3001 npm start` |
|
|
169
|
+
| Shell permission denied | `chsh -s /bin/bash` |
|
|
170
|
+
| Behind reverse proxy | Set `TRUST_PROXY=true` in `.env` |
|
|
171
|
+
| Windows shell wrong | Set `WEBTUN_SHELL=/usr/bin/bash` in `.env` |
|
|
172
|
+
| Tunnel persists after restart | `kill $(pgrep -f 'cloudflared tunnel')` |
|
|
282
173
|
|
|
283
174
|
---
|
|
284
175
|
|
|
285
|
-
##
|
|
286
|
-
|
|
287
|
-
|
|
176
|
+
## Changelog
|
|
177
|
+
|
|
178
|
+
### v1.5.2
|
|
179
|
+
- UI/UX audit fixes: theme-aware xterm selection color, `--fg3` across all 6 themes
|
|
180
|
+
- Replaced native `confirm()` with a theme-aware, focus-trapped dialog
|
|
181
|
+
- File explorer keyboard navigation (arrows, type-ahead, select-all) + loading state
|
|
182
|
+
- Mobile header overflow (more) menu; compact hostname restored on mobile
|
|
183
|
+
- Context menu keyboard navigation and `aria-expanded` on submenus
|
|
184
|
+
- SVG-ified remaining text glyphs; aria-labels on JS-generated icon buttons
|
|
185
|
+
- Single-line scrollable breadcrumb; tab-bar mask no longer clips new-tab
|
|
186
|
+
- Removed infinite keep-awake bounce; light-theme contrast bump
|
|
187
|
+
- `term.paste()` replaces deprecated `execCommand('insertText')`
|
|
188
|
+
- Pull-to-refresh indicator; tunnel rows use CSS classes
|
|
189
|
+
- JetBrains Mono web font + CSP `font-src`; PWA screenshots
|
|
190
|
+
- Fixed addon-webgl 404 (0.18.1 → 0.18.0); removed MiMo CLI default command
|
|
191
|
+
- Explicit Tokyo Night theme block + `color-scheme` for all 6 themes
|
|
192
|
+
- IBM Plex Sans UI font paired with JetBrains Mono (chrome vs code surfaces)
|
|
193
|
+
- Keyboard Shortcuts dialog in overflow menu; dialog `role`/`aria-modal` semantics
|
|
194
|
+
- Busy-spinner buttons + inline field errors (rename/new file/new folder/tunnel/save)
|
|
195
|
+
- Toast type icons and max 4 visible; editor unsaved-changes dot + Discard dialog
|
|
196
|
+
- Deferred CDN scripts for faster first paint; icon stroke-width normalized to 2
|
|
197
|
+
- Empty-directory quick actions; Reset settings button; skip-link + landmark roles
|
|
198
|
+
- Terminal connecting spinner; install banner clears mobile key bar
|
|
199
|
+
- Search button touch targets on coarse pointers; subtle hover on plain buttons
|
|
200
|
+
|
|
201
|
+
### v1.5.1
|
|
202
|
+
- Fixed command history saving terminal garbage instead of actual commands
|
|
203
|
+
- Fixed history 401 errors on Cloudflare tunnel URLs
|
|
204
|
+
- Fixed VT/ANSI parameter sequences leaking into history
|
|
205
|
+
- Fixed CodeMirror `defineSimpleMode` error
|
|
206
|
+
- Fixed console accessibility warnings (labels, form fields)
|
|
207
|
+
- Added safe `localStorage` wrapper for Tracking Prevention compatibility
|
|
208
|
+
- New terminal icon matching in-app logo
|
|
209
|
+
|
|
210
|
+
### v1.5.0
|
|
211
|
+
- Initial release
|
|
288
212
|
|
|
289
213
|
---
|
|
290
214
|
|
|
291
215
|
<p align="center">
|
|
292
|
-
<sub>
|
|
216
|
+
<sub>Built by <a href="https://github.com/unn-known1">Gaurang Patel</a> · MIT License</sub>
|
|
293
217
|
</p>
|
package/package.json
CHANGED
package/public/commands.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
window.DEFAULT_CMDS = [
|
|
2
2
|
{ name: 'Install OpenCode AI', cmd: 'npm install -g opencode-ai', cat: 'AI Tools' },
|
|
3
|
-
{ name: 'Install MiMo CLI', cmd: 'npm install -g @mimo-ai/cli', cat: 'AI Tools' },
|
|
4
3
|
{ name: 'Install 9Router', cmd: 'npm install -g 9router', cat: 'AI Tools' },
|
|
5
4
|
{ name: 'GitHub TUI', cmd: 'npx github-tui', cat: 'Tools' },
|
|
6
5
|
{ name: 'Colab Setup', cmd: 'curl -fsSL https://raw.githubusercontent.com/unn-Known1/unn-Known1/main/colab_setup.sh | bash', cat: 'Setup' },
|
|
Binary file
|
package/public/icon-192.png
CHANGED
|
Binary file
|
package/public/icon-512.png
CHANGED
|
Binary file
|
package/public/icon.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#c0caf5" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><rect x="2" y="4" width="20" height="16" rx="2"></rect><line x1="6" y1="8" x2="10" y2="8"></line><line x1="6" y1="12" x2="10" y2="12"></line><line x1="12" y1="8" x2="18" y2="8"></line><line x1="12" y1="12" x2="18" y2="12"></line></svg>
|