gitspace 0.2.0-rc.24 → 0.2.0-rc.26
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 +100 -113
- package/package.json +9 -6
package/README.md
CHANGED
|
@@ -77,7 +77,7 @@ You can also use traditional CLI commands:
|
|
|
77
77
|
#### 1. Add Your First Project
|
|
78
78
|
|
|
79
79
|
```bash
|
|
80
|
-
gssh add
|
|
80
|
+
gssh project add
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
Select a GitHub repository, and GitSpace will:
|
|
@@ -90,20 +90,20 @@ Select a GitHub repository, and GitSpace will:
|
|
|
90
90
|
|
|
91
91
|
```bash
|
|
92
92
|
# Create a workspace from a Linear issue (if configured)
|
|
93
|
-
gssh add
|
|
93
|
+
gssh workspace add --project my-project
|
|
94
94
|
|
|
95
95
|
# Or create a workspace with a custom name
|
|
96
|
-
gssh add my-feature
|
|
96
|
+
gssh workspace add my-feature --project my-project
|
|
97
97
|
```
|
|
98
98
|
|
|
99
|
-
#### 3.
|
|
99
|
+
#### 3. Target a Workspace
|
|
100
100
|
|
|
101
101
|
```bash
|
|
102
|
-
#
|
|
103
|
-
gssh
|
|
102
|
+
# List workspaces in a project
|
|
103
|
+
gssh workspace list --project <project-name>
|
|
104
104
|
|
|
105
|
-
#
|
|
106
|
-
gssh
|
|
105
|
+
# Show context for a specific workspace
|
|
106
|
+
gssh workspace context --project my-project --workspace my-feature
|
|
107
107
|
```
|
|
108
108
|
|
|
109
109
|
### Workspace Session Mode (`space`)
|
|
@@ -112,7 +112,7 @@ When GitSpace opens a workspace-scoped terminal session, it injects a `space` sh
|
|
|
112
112
|
|
|
113
113
|
- Use `space ...` for workspace operations without repeating `--project` and `--workspace`
|
|
114
114
|
- `gssh` commands are restricted in this mode to avoid cross-workspace mistakes
|
|
115
|
-
- `gssh tmux ...` is blocked inside workspace sessions
|
|
115
|
+
- `gssh machine tmux ...` is blocked inside workspace sessions
|
|
116
116
|
|
|
117
117
|
Examples:
|
|
118
118
|
|
|
@@ -226,8 +226,8 @@ fi
|
|
|
226
226
|
Bundles can be loaded from:
|
|
227
227
|
|
|
228
228
|
1. **In-repo** (automatic): `.gitspace/` directory in the cloned repository
|
|
229
|
-
2. **Local path**: `gssh add
|
|
230
|
-
3. **Remote URL**: `gssh add
|
|
229
|
+
2. **Local path**: `gssh project add --bundle-path /path/to/bundle/`
|
|
230
|
+
3. **Remote URL**: `gssh project add --bundle-url https://example.com/bundle.zip`
|
|
231
231
|
|
|
232
232
|
## Commands Reference
|
|
233
233
|
|
|
@@ -235,12 +235,12 @@ Bundles can be loaded from:
|
|
|
235
235
|
|
|
236
236
|
Launch the interactive terminal UI.
|
|
237
237
|
|
|
238
|
-
### `gssh add
|
|
238
|
+
### `gssh project add`
|
|
239
239
|
|
|
240
240
|
Add a new project from GitHub.
|
|
241
241
|
|
|
242
242
|
```bash
|
|
243
|
-
gssh add
|
|
243
|
+
gssh project add [options]
|
|
244
244
|
|
|
245
245
|
Options:
|
|
246
246
|
--bundle-url <url> Load bundle from remote URL (zip archive)
|
|
@@ -251,12 +251,12 @@ Options:
|
|
|
251
251
|
--linear-key <key> Provide Linear API key via flag
|
|
252
252
|
```
|
|
253
253
|
|
|
254
|
-
### `gssh add [workspace-name]
|
|
254
|
+
### `gssh workspace add [workspace-name] --project <project-name>`
|
|
255
255
|
|
|
256
256
|
Create a new workspace in the current project.
|
|
257
257
|
|
|
258
258
|
```bash
|
|
259
|
-
gssh add [workspace-name] [options]
|
|
259
|
+
gssh workspace add [workspace-name] --project <project-name> [options]
|
|
260
260
|
|
|
261
261
|
Options:
|
|
262
262
|
--branch <name> Specify different branch name from workspace name
|
|
@@ -264,70 +264,52 @@ Options:
|
|
|
264
264
|
--no-setup Skip setup commands
|
|
265
265
|
```
|
|
266
266
|
|
|
267
|
-
### `gssh
|
|
267
|
+
### `gssh workspace context --project <project-name> --workspace <workspace-name>`
|
|
268
268
|
|
|
269
|
-
|
|
269
|
+
Show the resolved workspace context.
|
|
270
270
|
|
|
271
271
|
```bash
|
|
272
|
-
gssh
|
|
273
|
-
# Alias: gssh sw
|
|
272
|
+
gssh workspace context --project <project-name> --workspace <workspace-name>
|
|
274
273
|
```
|
|
275
274
|
|
|
276
|
-
|
|
275
|
+
Use `--project` on workspace commands to target a project.
|
|
277
276
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
### `gssh list [subcommand]`
|
|
277
|
+
### `gssh project list` / `gssh workspace list --project <project-name>`
|
|
281
278
|
|
|
282
279
|
List projects or workspaces.
|
|
283
280
|
|
|
284
281
|
```bash
|
|
285
|
-
gssh list [
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
Subcommands:
|
|
289
|
-
projects List all projects
|
|
290
|
-
workspaces List workspaces in current project (default)
|
|
282
|
+
gssh project list [options]
|
|
283
|
+
gssh workspace list --project <project-name> [options]
|
|
291
284
|
|
|
292
285
|
Options:
|
|
293
286
|
--json Output in JSON format
|
|
294
287
|
--verbose Show additional details
|
|
295
288
|
```
|
|
296
289
|
|
|
297
|
-
### `gssh remove
|
|
290
|
+
### `gssh workspace remove [workspace-name] --project <project-name>`
|
|
298
291
|
|
|
299
292
|
Remove a workspace.
|
|
300
293
|
|
|
301
294
|
```bash
|
|
302
|
-
gssh remove
|
|
303
|
-
# Alias: gssh rm workspace
|
|
295
|
+
gssh workspace remove [workspace-name] --project <project-name> [options]
|
|
304
296
|
|
|
305
297
|
Options:
|
|
306
298
|
--force Skip confirmation prompts
|
|
307
299
|
--keep-branch Don't delete git branch when removing workspace
|
|
308
300
|
```
|
|
309
301
|
|
|
310
|
-
### `gssh remove
|
|
302
|
+
### `gssh project remove [project-name]`
|
|
311
303
|
|
|
312
304
|
Remove a project.
|
|
313
305
|
|
|
314
306
|
```bash
|
|
315
|
-
gssh remove
|
|
316
|
-
# Alias: gssh rm project
|
|
307
|
+
gssh project remove [project-name] [options]
|
|
317
308
|
|
|
318
309
|
Options:
|
|
319
310
|
--force Skip confirmation prompts
|
|
320
311
|
```
|
|
321
312
|
|
|
322
|
-
### `gssh directory`
|
|
323
|
-
|
|
324
|
-
Print the current project directory path.
|
|
325
|
-
|
|
326
|
-
```bash
|
|
327
|
-
gssh directory
|
|
328
|
-
# Alias: gssh dir
|
|
329
|
-
```
|
|
330
|
-
|
|
331
313
|
## Configuration
|
|
332
314
|
|
|
333
315
|
### Global Configuration
|
|
@@ -405,9 +387,6 @@ inside each workspace so they can vary by branch:
|
|
|
405
387
|
### Environment Variables
|
|
406
388
|
|
|
407
389
|
```bash
|
|
408
|
-
# Set the current project (overrides global config)
|
|
409
|
-
export SPACES_CURRENT_PROJECT="my-app"
|
|
410
|
-
|
|
411
390
|
# Available in scripts (from bundle onboarding):
|
|
412
391
|
# <KEY> - Value by exact bundle config key name
|
|
413
392
|
# <NORMALIZED_KEY> - Uppercase snake-case alias (e.g. teamName -> TEAM_NAME)
|
|
@@ -444,18 +423,27 @@ GitSpace provides secure remote terminal access with **end-to-end encryption**.
|
|
|
444
423
|
The easiest way to get remote access is through [gitspace.sh](https://gitspace.sh):
|
|
445
424
|
|
|
446
425
|
```bash
|
|
447
|
-
# 1.
|
|
448
|
-
gssh
|
|
426
|
+
# 1. Initialize machine identity on your control host
|
|
427
|
+
gssh user identity init
|
|
428
|
+
gssh user identity show
|
|
429
|
+
|
|
430
|
+
# 2. Authenticate with gitspace.sh
|
|
431
|
+
gssh user auth login
|
|
449
432
|
|
|
450
|
-
#
|
|
451
|
-
gssh host reserve yourname
|
|
433
|
+
# 3. Reserve your subdomain (e.g., yourname.gitspace.sh)
|
|
434
|
+
gssh user host reserve yourname
|
|
435
|
+
gssh user host status
|
|
452
436
|
|
|
453
|
-
#
|
|
454
|
-
gssh serve
|
|
437
|
+
# 4. Start serving
|
|
438
|
+
gssh machine serve start
|
|
439
|
+
gssh machine serve status
|
|
440
|
+
gssh status
|
|
455
441
|
|
|
456
|
-
#
|
|
442
|
+
# 5. Access from browser at https://yourname.gitspace.sh
|
|
457
443
|
```
|
|
458
444
|
|
|
445
|
+
In hosted mode, this machine is your control node (owner): it runs the relay path, maintains access state, and is the place cloud-control state/secrets are managed.
|
|
446
|
+
|
|
459
447
|
### Self-Hosted Setup
|
|
460
448
|
|
|
461
449
|
For complete control, run your own relay:
|
|
@@ -464,83 +452,85 @@ For complete control, run your own relay:
|
|
|
464
452
|
# Terminal 1: Start relay server
|
|
465
453
|
gssh relay start --port 4480
|
|
466
454
|
|
|
467
|
-
# Terminal 2:
|
|
468
|
-
gssh
|
|
469
|
-
gssh serve --relay ws://localhost:4480/ws
|
|
470
|
-
|
|
471
|
-
# Terminal 3: Create invite for remote access
|
|
472
|
-
gssh share create
|
|
455
|
+
# Terminal 2: Create relay-machine invite token
|
|
456
|
+
gssh invite relay-machine create --relay ws://localhost:4480/ws --machine-signing-key <BASE64_ED25519_PUB> --machine-key-exchange-key <BASE64_X25519_PUB> --label "My MacBook"
|
|
473
457
|
|
|
474
|
-
#
|
|
458
|
+
# Terminal 3: Initialize identity, enroll, and start serving
|
|
459
|
+
gssh user identity init
|
|
460
|
+
gssh machine enroll --invite "ws://localhost:4480/ws#<TOKEN>" --label "My MacBook"
|
|
461
|
+
gssh machine serve start
|
|
475
462
|
```
|
|
476
463
|
|
|
464
|
+
When `--relay` is omitted, `gssh machine serve start` lets you choose from:
|
|
465
|
+
- local relay (`ws://127.0.0.1:4480/ws`) if running
|
|
466
|
+
- account relays (`*.gitspace.sh`) discovered from your host config/account
|
|
467
|
+
|
|
477
468
|
### Identity Management
|
|
478
469
|
|
|
479
470
|
Every machine and client has a cryptographic identity (Ed25519 + X25519 keypair):
|
|
480
471
|
|
|
481
472
|
```bash
|
|
482
|
-
# Create machine identity (stored in
|
|
483
|
-
gssh identity init
|
|
473
|
+
# Create machine identity (stored in OS keychain)
|
|
474
|
+
gssh user identity init
|
|
484
475
|
|
|
485
476
|
# View identity fingerprint
|
|
486
|
-
gssh identity show
|
|
477
|
+
gssh user identity show
|
|
487
478
|
```
|
|
488
479
|
|
|
489
|
-
### Access
|
|
480
|
+
### Owner Access Model
|
|
490
481
|
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
```bash
|
|
494
|
-
# List authorized clients
|
|
495
|
-
gssh access list
|
|
482
|
+
Remote access is owner-only at runtime.
|
|
496
483
|
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
# Remove client access
|
|
501
|
-
gssh access remove spcs_pk_abc123...
|
|
502
|
-
```
|
|
484
|
+
- Clients and machines must present device certificates derived from the same owner user root identity.
|
|
485
|
+
- There is no collaborator ACL grant path for relay or machine access.
|
|
503
486
|
|
|
504
487
|
### Creating Invites
|
|
505
488
|
|
|
506
|
-
|
|
489
|
+
Use root-signed invites for machine enrollment only:
|
|
507
490
|
|
|
508
491
|
```bash
|
|
509
|
-
# Create invite
|
|
510
|
-
gssh
|
|
492
|
+
# Create machine enrollment invite token
|
|
493
|
+
gssh invite relay-machine create --relay ws://localhost:4480/ws --machine-signing-key <BASE64_ED25519_PUB> --machine-key-exchange-key <BASE64_X25519_PUB>
|
|
511
494
|
|
|
512
|
-
#
|
|
513
|
-
gssh
|
|
495
|
+
# List/revoke enrollment invites
|
|
496
|
+
gssh invite list --relay ws://localhost:4480/ws
|
|
497
|
+
gssh invite revoke <invite-id> --relay ws://localhost:4480/ws
|
|
514
498
|
```
|
|
515
499
|
|
|
516
500
|
### Connecting Remotely
|
|
517
501
|
|
|
518
502
|
```bash
|
|
519
|
-
#
|
|
520
|
-
gssh
|
|
503
|
+
# On another owner device: recover the same user root identity
|
|
504
|
+
gssh user identity recover
|
|
521
505
|
|
|
522
|
-
# Connect
|
|
523
|
-
gssh
|
|
506
|
+
# Connect directly as owner
|
|
507
|
+
gssh client connect <machine-id>
|
|
508
|
+
|
|
509
|
+
# Browse machines on a relay
|
|
510
|
+
gssh client machines list --relay wss://relay.example.com
|
|
524
511
|
```
|
|
525
512
|
|
|
526
513
|
### Remote Access Commands
|
|
527
514
|
|
|
528
515
|
| Command | Description |
|
|
529
516
|
|---------|-------------|
|
|
530
|
-
| `gssh auth login` | Authenticate with gitspace.sh (GitHub OAuth) |
|
|
531
|
-
| `gssh auth logout` | Sign out of gitspace.sh |
|
|
532
|
-
| `gssh host reserve <name>` | Reserve a subdomain on gitspace.sh |
|
|
533
|
-
| `gssh host status` | Show hosting status |
|
|
534
|
-
| `gssh identity init` | Create
|
|
535
|
-
| `gssh identity
|
|
536
|
-
| `gssh
|
|
537
|
-
| `gssh
|
|
538
|
-
| `gssh
|
|
539
|
-
| `gssh serve` |
|
|
540
|
-
| `gssh
|
|
541
|
-
| `gssh
|
|
542
|
-
| `gssh
|
|
543
|
-
| `gssh
|
|
517
|
+
| `gssh user auth login` | Authenticate with gitspace.sh (GitHub OAuth) |
|
|
518
|
+
| `gssh user auth logout` | Sign out of gitspace.sh |
|
|
519
|
+
| `gssh user host reserve <name>` | Reserve a subdomain on gitspace.sh |
|
|
520
|
+
| `gssh user host status` | Show hosting status |
|
|
521
|
+
| `gssh user identity init` | Create user root identity |
|
|
522
|
+
| `gssh user identity recover` | Recover identity from mnemonic |
|
|
523
|
+
| `gssh user identity show` | Display identity fingerprint |
|
|
524
|
+
| `gssh machine serve start --foreground` | Start machine daemon |
|
|
525
|
+
| `gssh machine serve start` | Start serve as background daemon |
|
|
526
|
+
| `gssh machine serve stop` | Stop background serve daemon |
|
|
527
|
+
| `gssh cloud status` | Show cloud control status on current control node |
|
|
528
|
+
| `gssh cloud list` | List cloud workspaces from control store |
|
|
529
|
+
| `gssh invite relay-machine create --relay <url> --machine-signing-key <k> --machine-key-exchange-key <k>` | Create machine enrollment invite |
|
|
530
|
+
| `gssh invite list --relay <url>` | List root-signed invites |
|
|
531
|
+
| `gssh invite revoke <invite-id> --relay <url>` | Revoke root-signed invite |
|
|
532
|
+
| `gssh client connect <target>` | Connect to remote machine |
|
|
533
|
+
| `gssh client machines list --relay <url>` | List accessible remote machines |
|
|
544
534
|
| `gssh status` | Show all daemon statuses |
|
|
545
535
|
|
|
546
536
|
### Relay Server Commands
|
|
@@ -550,11 +540,11 @@ For self-hosted relay servers:
|
|
|
550
540
|
| Command | Description |
|
|
551
541
|
|---------|-------------|
|
|
552
542
|
| `gssh relay start` | Start relay server |
|
|
553
|
-
| `gssh relay
|
|
554
|
-
| `gssh relay
|
|
555
|
-
| `gssh relay
|
|
556
|
-
| `gssh relay
|
|
557
|
-
| `gssh relay
|
|
543
|
+
| `gssh relay stop` | Stop relay server |
|
|
544
|
+
| `gssh relay status` | Show relay server status |
|
|
545
|
+
| `gssh invite relay-machine create --relay <url> --machine-signing-key <k> --machine-key-exchange-key <k>` | Create machine enrollment invite |
|
|
546
|
+
| `gssh relay machines list` | List registered machines |
|
|
547
|
+
| `gssh relay machines revoke <machine-id>` | Revoke machine registration |
|
|
558
548
|
|
|
559
549
|
### Terminal Multiplexer (tmux-lite)
|
|
560
550
|
|
|
@@ -562,12 +552,12 @@ Manage terminal sessions:
|
|
|
562
552
|
|
|
563
553
|
| Command | Description |
|
|
564
554
|
|---------|-------------|
|
|
565
|
-
| `gssh tmux start` | Start tmux-lite daemon |
|
|
566
|
-
| `gssh tmux stop` | Stop tmux-lite daemon |
|
|
567
|
-
| `gssh tmux list` | List sessions |
|
|
568
|
-
| `gssh tmux attach <id>` | Attach to session |
|
|
569
|
-
| `gssh tmux new` | Create new session |
|
|
570
|
-
| `gssh tmux kill <id>` | Kill session |
|
|
555
|
+
| `gssh machine tmux start` | Start tmux-lite daemon |
|
|
556
|
+
| `gssh machine tmux stop` | Stop tmux-lite daemon |
|
|
557
|
+
| `gssh machine tmux list` | List sessions |
|
|
558
|
+
| `gssh machine tmux attach <id>` | Attach to session |
|
|
559
|
+
| `gssh machine tmux new` | Create new session |
|
|
560
|
+
| `gssh machine tmux kill <id>` | Kill session |
|
|
571
561
|
|
|
572
562
|
### Environment Variables
|
|
573
563
|
|
|
@@ -576,9 +566,6 @@ Manage terminal sessions:
|
|
|
576
566
|
RELAY_PORT=4480 # Default relay port
|
|
577
567
|
RELAY_BIND=0.0.0.0 # Bind address
|
|
578
568
|
|
|
579
|
-
# Machine identity
|
|
580
|
-
GSSH_IDENTITY_PATH=~/gitspace/.identity/ # Identity storage
|
|
581
|
-
|
|
582
569
|
# gitspace.sh
|
|
583
570
|
GITSPACE_API_URL=https://api.gitspace.sh # API endpoint
|
|
584
571
|
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gitspace",
|
|
3
|
-
"version": "0.2.0-rc.
|
|
3
|
+
"version": "0.2.0-rc.26",
|
|
4
4
|
"description": "CLI for managing GitHub workspaces with git worktrees and secure remote terminal access",
|
|
5
5
|
"bin": {
|
|
6
6
|
"gssh": "./bin/gssh"
|
|
@@ -19,13 +19,14 @@
|
|
|
19
19
|
"build": "bun scripts/build.ts",
|
|
20
20
|
"build:all": "bun scripts/build.ts --all",
|
|
21
21
|
"build:npm": "bun scripts/build.ts --npm",
|
|
22
|
-
"relay": "bun src/relay/index.ts"
|
|
22
|
+
"relay": "bun src/relay/index.ts",
|
|
23
|
+
"e2e:on-demand": "bash scripts/e2e/run-on-demand.sh"
|
|
23
24
|
},
|
|
24
25
|
"optionalDependencies": {
|
|
25
|
-
"@gitspace/darwin-arm64": "0.2.0-rc.
|
|
26
|
-
"@gitspace/darwin-x64": "0.2.0-rc.
|
|
27
|
-
"@gitspace/linux-x64": "0.2.0-rc.
|
|
28
|
-
"@gitspace/linux-arm64": "0.2.0-rc.
|
|
26
|
+
"@gitspace/darwin-arm64": "0.2.0-rc.26",
|
|
27
|
+
"@gitspace/darwin-x64": "0.2.0-rc.26",
|
|
28
|
+
"@gitspace/linux-x64": "0.2.0-rc.26",
|
|
29
|
+
"@gitspace/linux-arm64": "0.2.0-rc.26"
|
|
29
30
|
},
|
|
30
31
|
"keywords": [
|
|
31
32
|
"cli",
|
|
@@ -45,6 +46,7 @@
|
|
|
45
46
|
"author": "inKibra, Inc.",
|
|
46
47
|
"license": "SEE LICENSE IN LICENSE",
|
|
47
48
|
"dependencies": {
|
|
49
|
+
"@fly/sprites": "0.0.1-rc37",
|
|
48
50
|
"@inquirer/prompts": "^7.10.1",
|
|
49
51
|
"@linear/sdk": "^29.0.0",
|
|
50
52
|
"@noble/curves": "^2.0.1",
|
|
@@ -52,6 +54,7 @@
|
|
|
52
54
|
"@opentui-ui/toast": "^0.0.5",
|
|
53
55
|
"@opentui/core": "^0.1.77",
|
|
54
56
|
"@opentui/react": "^0.1.77",
|
|
57
|
+
"@scure/bip39": "^2.0.1",
|
|
55
58
|
"@types/ws": "^8.18.1",
|
|
56
59
|
"@xterm/addon-serialize": "^0.13.0",
|
|
57
60
|
"@xterm/headless": "^5.5.0",
|