gitspace 0.2.0-rc.2 → 0.2.0-rc.21
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 +68 -38
- package/package.json +36 -25
- package/.claude/settings.local.json +0 -21
- package/.gitspace/bundle.json +0 -50
- package/.gitspace/select/01-status.sh +0 -40
- package/.gitspace/setup/01-install-deps.sh +0 -12
- package/.gitspace/setup/02-typecheck.sh +0 -16
- package/AGENTS.md +0 -439
- package/CLAUDE.md +0 -1
- package/bun.lock +0 -647
- package/docs/CONNECTION.md +0 -623
- package/docs/GATEWAY-WORKER.md +0 -319
- package/docs/GETTING-STARTED.md +0 -448
- package/docs/GITSPACE-PLATFORM.md +0 -1819
- package/docs/INFRASTRUCTURE.md +0 -1347
- package/docs/PROTOCOL.md +0 -619
- package/docs/QUICKSTART.md +0 -174
- package/docs/RELAY.md +0 -327
- package/docs/REMOTE-DESIGN.md +0 -549
- package/docs/ROADMAP.md +0 -564
- package/docs/SITE_DOCS_FIGMA_MAKE.md +0 -1167
- package/docs/STACK-DESIGN.md +0 -588
- package/docs/UNIFIED_ARCHITECTURE.md +0 -292
- package/experiments/pty-benchmark.ts +0 -148
- package/experiments/pty-latency.ts +0 -100
- package/experiments/router/client.ts +0 -199
- package/experiments/router/protocol.ts +0 -74
- package/experiments/router/router.ts +0 -217
- package/experiments/router/session.ts +0 -180
- package/experiments/router/test.ts +0 -133
- package/experiments/socket-bandwidth.ts +0 -77
- package/homebrew/gitspace.rb +0 -45
- package/landing-page/ATTRIBUTIONS.md +0 -3
- package/landing-page/README.md +0 -11
- package/landing-page/bun.lock +0 -801
- package/landing-page/guidelines/Guidelines.md +0 -61
- package/landing-page/index.html +0 -37
- package/landing-page/package.json +0 -90
- package/landing-page/postcss.config.mjs +0 -15
- package/landing-page/public/_redirects +0 -1
- package/landing-page/public/favicon.png +0 -0
- package/landing-page/src/app/App.tsx +0 -53
- package/landing-page/src/app/components/figma/ImageWithFallback.tsx +0 -27
- package/landing-page/src/app/components/ui/accordion.tsx +0 -66
- package/landing-page/src/app/components/ui/alert-dialog.tsx +0 -157
- package/landing-page/src/app/components/ui/alert.tsx +0 -66
- package/landing-page/src/app/components/ui/aspect-ratio.tsx +0 -11
- package/landing-page/src/app/components/ui/avatar.tsx +0 -53
- package/landing-page/src/app/components/ui/badge.tsx +0 -46
- package/landing-page/src/app/components/ui/breadcrumb.tsx +0 -109
- package/landing-page/src/app/components/ui/button.tsx +0 -57
- package/landing-page/src/app/components/ui/calendar.tsx +0 -75
- package/landing-page/src/app/components/ui/card.tsx +0 -92
- package/landing-page/src/app/components/ui/carousel.tsx +0 -241
- package/landing-page/src/app/components/ui/chart.tsx +0 -353
- package/landing-page/src/app/components/ui/checkbox.tsx +0 -32
- package/landing-page/src/app/components/ui/collapsible.tsx +0 -33
- package/landing-page/src/app/components/ui/command.tsx +0 -177
- package/landing-page/src/app/components/ui/context-menu.tsx +0 -252
- package/landing-page/src/app/components/ui/dialog.tsx +0 -135
- package/landing-page/src/app/components/ui/drawer.tsx +0 -132
- package/landing-page/src/app/components/ui/dropdown-menu.tsx +0 -257
- package/landing-page/src/app/components/ui/form.tsx +0 -168
- package/landing-page/src/app/components/ui/hover-card.tsx +0 -44
- package/landing-page/src/app/components/ui/input-otp.tsx +0 -77
- package/landing-page/src/app/components/ui/input.tsx +0 -21
- package/landing-page/src/app/components/ui/label.tsx +0 -24
- package/landing-page/src/app/components/ui/menubar.tsx +0 -276
- package/landing-page/src/app/components/ui/navigation-menu.tsx +0 -168
- package/landing-page/src/app/components/ui/pagination.tsx +0 -127
- package/landing-page/src/app/components/ui/popover.tsx +0 -48
- package/landing-page/src/app/components/ui/progress.tsx +0 -31
- package/landing-page/src/app/components/ui/radio-group.tsx +0 -45
- package/landing-page/src/app/components/ui/resizable.tsx +0 -56
- package/landing-page/src/app/components/ui/scroll-area.tsx +0 -58
- package/landing-page/src/app/components/ui/select.tsx +0 -189
- package/landing-page/src/app/components/ui/separator.tsx +0 -28
- package/landing-page/src/app/components/ui/sheet.tsx +0 -139
- package/landing-page/src/app/components/ui/sidebar.tsx +0 -726
- package/landing-page/src/app/components/ui/skeleton.tsx +0 -13
- package/landing-page/src/app/components/ui/slider.tsx +0 -63
- package/landing-page/src/app/components/ui/sonner.tsx +0 -25
- package/landing-page/src/app/components/ui/switch.tsx +0 -31
- package/landing-page/src/app/components/ui/table.tsx +0 -116
- package/landing-page/src/app/components/ui/tabs.tsx +0 -66
- package/landing-page/src/app/components/ui/textarea.tsx +0 -18
- package/landing-page/src/app/components/ui/toggle-group.tsx +0 -73
- package/landing-page/src/app/components/ui/toggle.tsx +0 -47
- package/landing-page/src/app/components/ui/tooltip.tsx +0 -61
- package/landing-page/src/app/components/ui/use-mobile.ts +0 -21
- package/landing-page/src/app/components/ui/utils.ts +0 -6
- package/landing-page/src/components/docs/DocsContent.tsx +0 -718
- package/landing-page/src/components/docs/DocsSidebar.tsx +0 -84
- package/landing-page/src/components/landing/CTA.tsx +0 -59
- package/landing-page/src/components/landing/Comparison.tsx +0 -84
- package/landing-page/src/components/landing/FaultyTerminal.tsx +0 -424
- package/landing-page/src/components/landing/Features.tsx +0 -201
- package/landing-page/src/components/landing/Hero.tsx +0 -142
- package/landing-page/src/components/landing/Pricing.tsx +0 -140
- package/landing-page/src/components/landing/Roadmap.tsx +0 -86
- package/landing-page/src/components/landing/Security.tsx +0 -81
- package/landing-page/src/components/landing/TerminalWindow.tsx +0 -27
- package/landing-page/src/components/landing/UseCases.tsx +0 -55
- package/landing-page/src/components/landing/Workflow.tsx +0 -101
- package/landing-page/src/components/layout/DashboardNavbar.tsx +0 -37
- package/landing-page/src/components/layout/Footer.tsx +0 -55
- package/landing-page/src/components/layout/LandingNavbar.tsx +0 -82
- package/landing-page/src/components/ui/badge.tsx +0 -39
- package/landing-page/src/components/ui/breadcrumb.tsx +0 -115
- package/landing-page/src/components/ui/button.tsx +0 -57
- package/landing-page/src/components/ui/card.tsx +0 -79
- package/landing-page/src/components/ui/mock-terminal.tsx +0 -68
- package/landing-page/src/components/ui/separator.tsx +0 -28
- package/landing-page/src/lib/utils.ts +0 -6
- package/landing-page/src/main.tsx +0 -10
- package/landing-page/src/pages/Dashboard.tsx +0 -133
- package/landing-page/src/pages/DocsPage.tsx +0 -79
- package/landing-page/src/pages/LandingPage.tsx +0 -31
- package/landing-page/src/pages/TerminalView.tsx +0 -106
- package/landing-page/src/styles/fonts.css +0 -0
- package/landing-page/src/styles/index.css +0 -3
- package/landing-page/src/styles/tailwind.css +0 -4
- package/landing-page/src/styles/theme.css +0 -181
- package/landing-page/vite.config.ts +0 -19
- package/npm/darwin-arm64/bin/gssh +0 -0
- package/npm/darwin-arm64/package.json +0 -20
- package/scripts/build.ts +0 -298
- package/scripts/release.ts +0 -140
- package/src/__tests__/test-utils.ts +0 -298
- package/src/commands/__tests__/serve-messages.test.ts +0 -190
- package/src/commands/access.ts +0 -298
- package/src/commands/add.ts +0 -452
- package/src/commands/auth.ts +0 -364
- package/src/commands/connect.ts +0 -287
- package/src/commands/directory.ts +0 -16
- package/src/commands/host.ts +0 -396
- package/src/commands/identity.ts +0 -184
- package/src/commands/list.ts +0 -200
- package/src/commands/relay.ts +0 -315
- package/src/commands/remove.ts +0 -241
- package/src/commands/serve.ts +0 -1493
- package/src/commands/share.ts +0 -456
- package/src/commands/status.ts +0 -125
- package/src/commands/switch.ts +0 -353
- package/src/commands/tmux.ts +0 -317
- package/src/core/__tests__/access.test.ts +0 -240
- package/src/core/access.ts +0 -277
- package/src/core/bundle.ts +0 -342
- package/src/core/config.ts +0 -510
- package/src/core/git.ts +0 -317
- package/src/core/github.ts +0 -151
- package/src/core/identity.ts +0 -631
- package/src/core/linear.ts +0 -225
- package/src/core/shell.ts +0 -161
- package/src/core/trusted-relays.ts +0 -315
- package/src/index.ts +0 -810
- package/src/lib/remote-session/index.ts +0 -7
- package/src/lib/remote-session/protocol.ts +0 -267
- package/src/lib/remote-session/session-handler.ts +0 -581
- package/src/lib/remote-session/workspace-scanner.ts +0 -167
- package/src/lib/tmux-lite/README.md +0 -81
- package/src/lib/tmux-lite/cli.ts +0 -796
- package/src/lib/tmux-lite/crypto/__tests__/helpers/handshake-runner.ts +0 -349
- package/src/lib/tmux-lite/crypto/__tests__/helpers/mock-relay.ts +0 -291
- package/src/lib/tmux-lite/crypto/__tests__/helpers/test-identities.ts +0 -142
- package/src/lib/tmux-lite/crypto/__tests__/integration/authorization.integration.test.ts +0 -339
- package/src/lib/tmux-lite/crypto/__tests__/integration/e2e-communication.integration.test.ts +0 -477
- package/src/lib/tmux-lite/crypto/__tests__/integration/error-handling.integration.test.ts +0 -499
- package/src/lib/tmux-lite/crypto/__tests__/integration/handshake.integration.test.ts +0 -371
- package/src/lib/tmux-lite/crypto/__tests__/integration/security.integration.test.ts +0 -573
- package/src/lib/tmux-lite/crypto/access-control.test.ts +0 -512
- package/src/lib/tmux-lite/crypto/access-control.ts +0 -320
- package/src/lib/tmux-lite/crypto/frames.test.ts +0 -262
- package/src/lib/tmux-lite/crypto/frames.ts +0 -141
- package/src/lib/tmux-lite/crypto/handshake.ts +0 -894
- package/src/lib/tmux-lite/crypto/identity.test.ts +0 -220
- package/src/lib/tmux-lite/crypto/identity.ts +0 -286
- package/src/lib/tmux-lite/crypto/index.ts +0 -51
- package/src/lib/tmux-lite/crypto/invites.test.ts +0 -381
- package/src/lib/tmux-lite/crypto/invites.ts +0 -215
- package/src/lib/tmux-lite/crypto/keyexchange.ts +0 -435
- package/src/lib/tmux-lite/crypto/keys.test.ts +0 -58
- package/src/lib/tmux-lite/crypto/keys.ts +0 -47
- package/src/lib/tmux-lite/crypto/secretbox.test.ts +0 -169
- package/src/lib/tmux-lite/crypto/secretbox.ts +0 -124
- package/src/lib/tmux-lite/handshake-handler.ts +0 -451
- package/src/lib/tmux-lite/protocol.test.ts +0 -307
- package/src/lib/tmux-lite/protocol.ts +0 -266
- package/src/lib/tmux-lite/relay-client.ts +0 -506
- package/src/lib/tmux-lite/server.ts +0 -1250
- package/src/lib/tmux-lite/shell-integration.sh +0 -37
- package/src/lib/tmux-lite/terminal-queries.test.ts +0 -54
- package/src/lib/tmux-lite/terminal-queries.ts +0 -49
- package/src/relay/__tests__/e2e-flow.test.ts +0 -1284
- package/src/relay/__tests__/helpers/auth.ts +0 -354
- package/src/relay/__tests__/helpers/ports.ts +0 -51
- package/src/relay/__tests__/protocol-validation.test.ts +0 -265
- package/src/relay/authorization.ts +0 -303
- package/src/relay/embedded-assets.generated.d.ts +0 -15
- package/src/relay/identity.ts +0 -352
- package/src/relay/index.ts +0 -57
- package/src/relay/pipes.test.ts +0 -427
- package/src/relay/pipes.ts +0 -195
- package/src/relay/protocol.ts +0 -804
- package/src/relay/registries.test.ts +0 -437
- package/src/relay/registries.ts +0 -593
- package/src/relay/server.test.ts +0 -1323
- package/src/relay/server.ts +0 -1092
- package/src/relay/signing.ts +0 -238
- package/src/relay/types.ts +0 -69
- package/src/serve/client-session-manager.ts +0 -622
- package/src/serve/daemon.ts +0 -497
- package/src/serve/pty-session.ts +0 -236
- package/src/serve/types.ts +0 -169
- package/src/shared/components/Flow.tsx +0 -453
- package/src/shared/components/Flow.tui.tsx +0 -343
- package/src/shared/components/Flow.web.tsx +0 -442
- package/src/shared/components/Inbox.tsx +0 -446
- package/src/shared/components/Inbox.tui.tsx +0 -262
- package/src/shared/components/Inbox.web.tsx +0 -329
- package/src/shared/components/MachineList.tsx +0 -187
- package/src/shared/components/MachineList.tui.tsx +0 -161
- package/src/shared/components/MachineList.web.tsx +0 -210
- package/src/shared/components/ProjectList.tsx +0 -176
- package/src/shared/components/ProjectList.tui.tsx +0 -109
- package/src/shared/components/ProjectList.web.tsx +0 -143
- package/src/shared/components/SpacesBrowser.tsx +0 -332
- package/src/shared/components/SpacesBrowser.tui.tsx +0 -163
- package/src/shared/components/SpacesBrowser.web.tsx +0 -221
- package/src/shared/components/index.ts +0 -103
- package/src/shared/hooks/index.ts +0 -16
- package/src/shared/hooks/useNavigation.ts +0 -226
- package/src/shared/index.ts +0 -122
- package/src/shared/providers/LocalMachineProvider.ts +0 -425
- package/src/shared/providers/MachineProvider.ts +0 -165
- package/src/shared/providers/RemoteMachineProvider.ts +0 -444
- package/src/shared/providers/index.ts +0 -26
- package/src/shared/types.ts +0 -145
- package/src/tui/adapters.ts +0 -120
- package/src/tui/app.tsx +0 -1816
- package/src/tui/components/Terminal.tsx +0 -580
- package/src/tui/hooks/index.ts +0 -35
- package/src/tui/hooks/useAppState.ts +0 -314
- package/src/tui/hooks/useDaemonStatus.ts +0 -174
- package/src/tui/hooks/useInboxTUI.ts +0 -113
- package/src/tui/hooks/useRemoteMachines.ts +0 -209
- package/src/tui/index.ts +0 -24
- package/src/tui/state.ts +0 -299
- package/src/tui/terminal-bracketed-paste.test.ts +0 -45
- package/src/tui/terminal-bracketed-paste.ts +0 -47
- package/src/types/bundle.ts +0 -112
- package/src/types/config.ts +0 -89
- package/src/types/errors.ts +0 -206
- package/src/types/identity.ts +0 -284
- package/src/types/workspace-fuzzy.ts +0 -49
- package/src/types/workspace.ts +0 -151
- package/src/utils/bun-socket-writer.ts +0 -80
- package/src/utils/deps.ts +0 -127
- package/src/utils/fuzzy-match.ts +0 -125
- package/src/utils/logger.ts +0 -127
- package/src/utils/markdown.ts +0 -254
- package/src/utils/onboarding.ts +0 -229
- package/src/utils/prompts.ts +0 -114
- package/src/utils/run-commands.ts +0 -112
- package/src/utils/run-scripts.ts +0 -142
- package/src/utils/sanitize.ts +0 -98
- package/src/utils/secrets.ts +0 -122
- package/src/utils/shell-escape.ts +0 -40
- package/src/utils/utf8.ts +0 -79
- package/src/utils/workspace-state.ts +0 -47
- package/src/web/README.md +0 -73
- package/src/web/bun.lock +0 -575
- package/src/web/eslint.config.js +0 -23
- package/src/web/index.html +0 -16
- package/src/web/package.json +0 -37
- package/src/web/public/vite.svg +0 -1
- package/src/web/src/App.tsx +0 -604
- package/src/web/src/assets/react.svg +0 -1
- package/src/web/src/components/Terminal.tsx +0 -207
- package/src/web/src/hooks/useRelayConnection.ts +0 -224
- package/src/web/src/hooks/useTerminal.ts +0 -699
- package/src/web/src/index.css +0 -55
- package/src/web/src/lib/crypto/__tests__/web-terminal.test.ts +0 -1158
- package/src/web/src/lib/crypto/frames.ts +0 -205
- package/src/web/src/lib/crypto/handshake.ts +0 -396
- package/src/web/src/lib/crypto/identity.ts +0 -128
- package/src/web/src/lib/crypto/keyexchange.ts +0 -246
- package/src/web/src/lib/crypto/relay-signing.ts +0 -53
- package/src/web/src/lib/invite.ts +0 -58
- package/src/web/src/lib/storage/identity-store.ts +0 -94
- package/src/web/src/main.tsx +0 -10
- package/src/web/src/types/identity.ts +0 -45
- package/src/web/tsconfig.app.json +0 -28
- package/src/web/tsconfig.json +0 -7
- package/src/web/tsconfig.node.json +0 -26
- package/src/web/vite.config.ts +0 -31
- package/todo-security.md +0 -92
- package/tsconfig.json +0 -23
- package/worker/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/12b7107e435bf1b9a8713a7f320472a63e543104d633d89a26f8d21f4e4ef182.sqlite +0 -0
- package/worker/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/12b7107e435bf1b9a8713a7f320472a63e543104d633d89a26f8d21f4e4ef182.sqlite-shm +0 -0
- package/worker/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/12b7107e435bf1b9a8713a7f320472a63e543104d633d89a26f8d21f4e4ef182.sqlite-wal +0 -0
- package/worker/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/1a1ac3db1ab86ecf712f90322868a9aabc2c7dc9fe2dfbe94f9b075096276b0f.sqlite +0 -0
- package/worker/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/1a1ac3db1ab86ecf712f90322868a9aabc2c7dc9fe2dfbe94f9b075096276b0f.sqlite-shm +0 -0
- package/worker/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/1a1ac3db1ab86ecf712f90322868a9aabc2c7dc9fe2dfbe94f9b075096276b0f.sqlite-wal +0 -0
- package/worker/bun.lock +0 -237
- package/worker/package.json +0 -22
- package/worker/schema.sql +0 -96
- package/worker/src/handlers/auth.ts +0 -451
- package/worker/src/handlers/subdomains.ts +0 -376
- package/worker/src/handlers/user.ts +0 -98
- package/worker/src/index.ts +0 -70
- package/worker/src/middleware/auth.ts +0 -152
- package/worker/src/services/cloudflare.ts +0 -609
- package/worker/src/types.ts +0 -96
- package/worker/tsconfig.json +0 -15
- package/worker/wrangler.toml +0 -26
package/README.md
CHANGED
|
@@ -20,7 +20,6 @@ The following tools must be installed and available in your PATH:
|
|
|
20
20
|
- [GitHub CLI (`gh`)](https://cli.github.com/) - for listing repositories
|
|
21
21
|
- [Git](https://git-scm.com/) - for worktree management
|
|
22
22
|
- [jq](https://stedolan.github.io/jq/) - for JSON processing
|
|
23
|
-
- [Bun](https://bun.sh) - runtime for the CLI
|
|
24
23
|
|
|
25
24
|
**GitHub Authentication**: You must authenticate the GitHub CLI before using GitSpace:
|
|
26
25
|
|
|
@@ -31,7 +30,17 @@ gh auth login
|
|
|
31
30
|
## Installation
|
|
32
31
|
|
|
33
32
|
```bash
|
|
34
|
-
|
|
33
|
+
# npm
|
|
34
|
+
npm install -g gitspace
|
|
35
|
+
|
|
36
|
+
# bun
|
|
37
|
+
bun install -g gitspace
|
|
38
|
+
|
|
39
|
+
# pnpm
|
|
40
|
+
pnpm install -g gitspace
|
|
41
|
+
|
|
42
|
+
# yarn
|
|
43
|
+
yarn global add gitspace
|
|
35
44
|
|
|
36
45
|
# Verify installation
|
|
37
46
|
gssh --version
|
|
@@ -97,6 +106,22 @@ gssh switch
|
|
|
97
106
|
gssh switch my-feature
|
|
98
107
|
```
|
|
99
108
|
|
|
109
|
+
### Workspace Session Mode (`space`)
|
|
110
|
+
|
|
111
|
+
When GitSpace opens a workspace-scoped terminal session, it injects a `space` shell function (bash/zsh).
|
|
112
|
+
|
|
113
|
+
- Use `space ...` for workspace operations without repeating `--project` and `--workspace`
|
|
114
|
+
- `gssh` commands are restricted in this mode to avoid cross-workspace mistakes
|
|
115
|
+
- `gssh tmux ...` is blocked inside workspace sessions
|
|
116
|
+
|
|
117
|
+
Examples:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
space context --json
|
|
121
|
+
space review hunks src/app.ts --format json
|
|
122
|
+
space review add-hunk src/app.ts --index 1 --approve --body "Looks good"
|
|
123
|
+
```
|
|
124
|
+
|
|
100
125
|
## Repo Config Bundles
|
|
101
126
|
|
|
102
127
|
Repo config bundles allow repository owners to share onboarding configurations with their team. When someone clones a project that contains a bundle, they'll be guided through setup steps and have scripts automatically installed.
|
|
@@ -108,14 +133,15 @@ A bundle is a directory (typically `.gitspace/`) containing:
|
|
|
108
133
|
```
|
|
109
134
|
.gitspace/
|
|
110
135
|
├── bundle.json # Bundle manifest with onboarding steps
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
└──
|
|
118
|
-
└──
|
|
136
|
+
└── scripts/
|
|
137
|
+
├── pre/ # Deprecated: migrate scripts into ordered setup/
|
|
138
|
+
│ └── 01-copy-env.sh
|
|
139
|
+
├── setup/ # Scripts for setup runs (when bundle/value state changes)
|
|
140
|
+
│ └── 01-install-deps.sh
|
|
141
|
+
├── select/ # Scripts to run on each new terminal attach
|
|
142
|
+
│ └── 01-status.sh
|
|
143
|
+
└── remove/ # Scripts to run before workspace deletion
|
|
144
|
+
└── 01-cleanup.sh
|
|
119
145
|
```
|
|
120
146
|
|
|
121
147
|
### Bundle Manifest (`bundle.json`)
|
|
@@ -170,27 +196,27 @@ A bundle is a directory (typically `.gitspace/`) containing:
|
|
|
170
196
|
|
|
171
197
|
### Using Bundle Values in Scripts
|
|
172
198
|
|
|
173
|
-
Bundle values are passed to scripts as environment variables:
|
|
199
|
+
Bundle values are passed to scripts as environment variables using the configured bundle keys:
|
|
174
200
|
|
|
175
|
-
-
|
|
176
|
-
-
|
|
201
|
+
- `<KEY>` - Regular or secret value using the exact `configKey` from `bundle.json`
|
|
202
|
+
- `<NORMALIZED_KEY>` - Uppercase snake-case alias (for example, `teamName` -> `TEAM_NAME`)
|
|
177
203
|
|
|
178
204
|
**Example script:**
|
|
179
205
|
|
|
180
206
|
```bash
|
|
181
207
|
#!/bin/bash
|
|
182
|
-
# .gitspace/select/01-status.sh
|
|
208
|
+
# .gitspace/scripts/select/01-status.sh
|
|
183
209
|
|
|
184
210
|
WORKSPACE_NAME=$1
|
|
185
211
|
REPOSITORY=$2
|
|
186
212
|
|
|
187
213
|
# Access bundle values
|
|
188
|
-
if [ -n "$
|
|
189
|
-
echo "Welcome, $
|
|
214
|
+
if [ -n "$TEAM_NAME" ]; then
|
|
215
|
+
echo "Welcome, $TEAM_NAME team!"
|
|
190
216
|
fi
|
|
191
217
|
|
|
192
218
|
# Access secrets (stored securely in OS keychain)
|
|
193
|
-
if [ -n "$
|
|
219
|
+
if [ -n "$API_KEY" ]; then
|
|
194
220
|
echo "API Key configured"
|
|
195
221
|
fi
|
|
196
222
|
```
|
|
@@ -199,7 +225,7 @@ fi
|
|
|
199
225
|
|
|
200
226
|
Bundles can be loaded from:
|
|
201
227
|
|
|
202
|
-
1. **In-repo** (automatic): `.gitspace
|
|
228
|
+
1. **In-repo** (automatic): `.gitspace/` directory in the cloned repository
|
|
203
229
|
2. **Local path**: `gssh add project --bundle-path /path/to/bundle/`
|
|
204
230
|
3. **Remote URL**: `gssh add project --bundle-url https://example.com/bundle.zip`
|
|
205
231
|
|
|
@@ -347,14 +373,16 @@ Located at `~/gitspace/<project-name>/.config.json`:
|
|
|
347
373
|
|
|
348
374
|
### Custom Scripts
|
|
349
375
|
|
|
350
|
-
GitSpace uses **convention over configuration** for custom scripts
|
|
376
|
+
GitSpace uses **convention over configuration** for custom scripts. Scripts live
|
|
377
|
+
inside each workspace so they can vary by branch:
|
|
351
378
|
|
|
352
379
|
```
|
|
353
|
-
~/gitspace/<project-name>/
|
|
354
|
-
|
|
355
|
-
├──
|
|
356
|
-
├──
|
|
357
|
-
|
|
380
|
+
~/gitspace/<project-name>/workspaces/<workspace-name>/.gitspace/
|
|
381
|
+
└── scripts/
|
|
382
|
+
├── pre/ # Deprecated: run before setup (migrate to setup/)
|
|
383
|
+
├── setup/ # Run when setup state requires refresh
|
|
384
|
+
├── select/ # Run on each new terminal attach
|
|
385
|
+
└── remove/ # Run before workspace deletion
|
|
358
386
|
```
|
|
359
387
|
|
|
360
388
|
#### Script Execution Rules
|
|
@@ -363,15 +391,15 @@ GitSpace uses **convention over configuration** for custom scripts:
|
|
|
363
391
|
2. Scripts run **alphabetically** (use `01-`, `02-` prefixes)
|
|
364
392
|
3. **Working directory**: The workspace directory
|
|
365
393
|
4. **Arguments**: `$1` = workspace name, `$2` = repository name
|
|
366
|
-
5. **Environment**: Bundle values available
|
|
394
|
+
5. **Environment**: Bundle values available by key name (for example `REGION`, `PULUMI_ACCESS_TOKEN`)
|
|
367
395
|
|
|
368
396
|
#### Script Phases
|
|
369
397
|
|
|
370
398
|
| Phase | When | Use Case |
|
|
371
399
|
|-------|------|----------|
|
|
372
|
-
| `pre/` |
|
|
373
|
-
| `setup/` |
|
|
374
|
-
| `select/` | Every
|
|
400
|
+
| `pre/` | Deprecated | Move scripts into ordered `setup/` files |
|
|
401
|
+
| `setup/` | When setup state changes | Install dependencies, initial build |
|
|
402
|
+
| `select/` | Every new terminal attach | Git fetch, status checks |
|
|
375
403
|
| `remove/` | Before deletion | Cleanup, notifications |
|
|
376
404
|
|
|
377
405
|
### Environment Variables
|
|
@@ -381,8 +409,8 @@ GitSpace uses **convention over configuration** for custom scripts:
|
|
|
381
409
|
export SPACES_CURRENT_PROJECT="my-app"
|
|
382
410
|
|
|
383
411
|
# Available in scripts (from bundle onboarding):
|
|
384
|
-
#
|
|
385
|
-
#
|
|
412
|
+
# <KEY> - Value by exact bundle config key name
|
|
413
|
+
# <NORMALIZED_KEY> - Uppercase snake-case alias (e.g. teamName -> TEAM_NAME)
|
|
386
414
|
```
|
|
387
415
|
|
|
388
416
|
## Directory Structure
|
|
@@ -396,13 +424,15 @@ export SPACES_CURRENT_PROJECT="my-app"
|
|
|
396
424
|
│ ├── workspaces/ # Git worktrees
|
|
397
425
|
│ │ └── <workspace-name>/
|
|
398
426
|
│ │ ├── gitspace.lock # Setup completion marker
|
|
399
|
-
│ │
|
|
400
|
-
│ │
|
|
401
|
-
│ └──
|
|
402
|
-
│
|
|
403
|
-
│
|
|
404
|
-
│
|
|
405
|
-
│
|
|
427
|
+
│ │ ├── .prompt/ # Linear issue details (if applicable)
|
|
428
|
+
│ │ │ └── issue.md
|
|
429
|
+
│ │ └── .gitspace/
|
|
430
|
+
│ │ ├── bundle.json
|
|
431
|
+
│ │ └── scripts/ # Custom scripts (per worktree)
|
|
432
|
+
│ │ ├── pre/
|
|
433
|
+
│ │ ├── setup/
|
|
434
|
+
│ │ ├── select/
|
|
435
|
+
│ │ └── remove/
|
|
406
436
|
```
|
|
407
437
|
|
|
408
438
|
## Remote Access
|
|
@@ -578,7 +608,7 @@ Error: GitHub CLI is not authenticated
|
|
|
578
608
|
|
|
579
609
|
### Bundle secrets not available
|
|
580
610
|
|
|
581
|
-
If
|
|
611
|
+
If expected bundle key environment variables are empty, ensure:
|
|
582
612
|
1. You completed the onboarding secret steps
|
|
583
613
|
2. Your OS keychain service is running (libsecret on Linux, Keychain on macOS)
|
|
584
614
|
|
package/package.json
CHANGED
|
@@ -1,26 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gitspace",
|
|
3
|
-
"version": "0.2.0-rc.
|
|
3
|
+
"version": "0.2.0-rc.21",
|
|
4
4
|
"description": "CLI for managing GitHub workspaces with git worktrees and secure remote terminal access",
|
|
5
5
|
"bin": {
|
|
6
6
|
"gssh": "./bin/gssh"
|
|
7
7
|
},
|
|
8
|
+
"files": [
|
|
9
|
+
"bin",
|
|
10
|
+
"README.md",
|
|
11
|
+
"LICENSE"
|
|
12
|
+
],
|
|
8
13
|
"type": "module",
|
|
9
14
|
"scripts": {
|
|
10
15
|
"dev": "bun src/index.ts",
|
|
11
16
|
"typecheck": "tsc --noEmit",
|
|
12
17
|
"lint": "eslint src/",
|
|
13
|
-
"build:web": "cd
|
|
18
|
+
"build:web": "cd web && bun install && bun run build",
|
|
14
19
|
"build": "bun scripts/build.ts",
|
|
15
20
|
"build:all": "bun scripts/build.ts --all",
|
|
16
21
|
"build:npm": "bun scripts/build.ts --npm",
|
|
17
22
|
"relay": "bun src/relay/index.ts"
|
|
18
23
|
},
|
|
19
24
|
"optionalDependencies": {
|
|
20
|
-
"@gitspace/darwin-arm64": "0.2.0-rc.
|
|
21
|
-
"@gitspace/darwin-x64": "0.2.0-rc.
|
|
22
|
-
"@gitspace/linux-x64": "0.2.0-rc.
|
|
23
|
-
"@gitspace/linux-arm64": "0.2.0-rc.
|
|
25
|
+
"@gitspace/darwin-arm64": "0.2.0-rc.21",
|
|
26
|
+
"@gitspace/darwin-x64": "0.2.0-rc.21",
|
|
27
|
+
"@gitspace/linux-x64": "0.2.0-rc.21",
|
|
28
|
+
"@gitspace/linux-arm64": "0.2.0-rc.21"
|
|
24
29
|
},
|
|
25
30
|
"keywords": [
|
|
26
31
|
"cli",
|
|
@@ -35,40 +40,46 @@
|
|
|
35
40
|
"homepage": "https://gitspace.sh",
|
|
36
41
|
"repository": {
|
|
37
42
|
"type": "git",
|
|
38
|
-
"url": "https://github.com/
|
|
43
|
+
"url": "https://github.com/inKibra/gitspace.sh.git"
|
|
39
44
|
},
|
|
40
45
|
"author": "inKibra, Inc.",
|
|
41
46
|
"license": "SEE LICENSE IN LICENSE",
|
|
42
47
|
"dependencies": {
|
|
43
|
-
"@inquirer/prompts": "^7.
|
|
48
|
+
"@inquirer/prompts": "^7.10.1",
|
|
44
49
|
"@linear/sdk": "^29.0.0",
|
|
45
50
|
"@noble/curves": "^2.0.1",
|
|
46
51
|
"@noble/hashes": "^2.0.1",
|
|
47
|
-
"@opentui/
|
|
48
|
-
"@opentui/
|
|
52
|
+
"@opentui-ui/toast": "^0.0.5",
|
|
53
|
+
"@opentui/core": "^0.1.77",
|
|
54
|
+
"@opentui/react": "^0.1.77",
|
|
49
55
|
"@types/ws": "^8.18.1",
|
|
50
56
|
"@xterm/addon-serialize": "^0.13.0",
|
|
51
57
|
"@xterm/headless": "^5.5.0",
|
|
52
|
-
"ansi-escapes": "^7.
|
|
53
|
-
"chalk": "^5.
|
|
54
|
-
"
|
|
58
|
+
"ansi-escapes": "^7.3.0",
|
|
59
|
+
"chalk": "^5.6.2",
|
|
60
|
+
"clipboardy": "^5.2.1",
|
|
61
|
+
"commander": "^12.1.0",
|
|
55
62
|
"conf": "^12.0.0",
|
|
56
|
-
"ghostty-opentui": "^1.3.
|
|
63
|
+
"ghostty-opentui": "^1.3.13",
|
|
57
64
|
"open": "^11.0.0",
|
|
58
|
-
"ora": "^8.0
|
|
59
|
-
"react": "^19.2.
|
|
60
|
-
"
|
|
61
|
-
"
|
|
65
|
+
"ora": "^8.2.0",
|
|
66
|
+
"react": "^19.2.4",
|
|
67
|
+
"react-dom": "^19.2.4",
|
|
68
|
+
"simple-git": "^3.30.0",
|
|
69
|
+
"ws": "^8.19.0"
|
|
62
70
|
},
|
|
63
71
|
"devDependencies": {
|
|
64
|
-
"@
|
|
65
|
-
"@types/
|
|
66
|
-
"@types/
|
|
72
|
+
"@testing-library/react": "^16.3.2",
|
|
73
|
+
"@types/bun": "^1.3.8",
|
|
74
|
+
"@types/node": "^20.19.32",
|
|
75
|
+
"@types/react": "^19.2.13",
|
|
67
76
|
"@types/react-dom": "^19.2.3",
|
|
68
|
-
"eslint": "^8.57.
|
|
69
|
-
"
|
|
77
|
+
"eslint": "^8.57.1",
|
|
78
|
+
"happy-dom": "^20.5.0",
|
|
79
|
+
"typescript": "^5.9.3"
|
|
70
80
|
},
|
|
71
81
|
"engines": {
|
|
72
|
-
"bun": ">=1.3.
|
|
73
|
-
}
|
|
82
|
+
"bun": ">=1.3.8"
|
|
83
|
+
},
|
|
84
|
+
"packageManager": "pnpm@10.12.1+sha512.f0dda8580f0ee9481c5c79a1d927b9164f2c478e90992ad268bbb2465a736984391d6333d2c327913578b2804af33474ca554ba29c04a8b13060a717675ae3ac"
|
|
74
85
|
}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"permissions": {
|
|
3
|
-
"allow": [
|
|
4
|
-
"Bash(bun test:*)",
|
|
5
|
-
"Bash(xargs ls:*)",
|
|
6
|
-
"Bash(bun pm:*)",
|
|
7
|
-
"Bash(node -e:*)",
|
|
8
|
-
"Bash(bun run typecheck:*)",
|
|
9
|
-
"Bash(bun -e:*)",
|
|
10
|
-
"Bash(bun:*)",
|
|
11
|
-
"Bash(xargs:*)",
|
|
12
|
-
"Bash(timeout 2 bash -c 'echo \"\"invalid-base64\"\" | bun src/index.ts access add \"\"not-valid-base64-data\"\" 2>&1')",
|
|
13
|
-
"Bash(wc:*)",
|
|
14
|
-
"WebFetch(domain:ghostty.org)",
|
|
15
|
-
"Bash(xxd:*)",
|
|
16
|
-
"WebFetch(domain:ast-grep.github.io)",
|
|
17
|
-
"WebFetch(domain:developers.cloudflare.com)",
|
|
18
|
-
"WebFetch(domain:gitspace.sh)"
|
|
19
|
-
]
|
|
20
|
-
}
|
|
21
|
-
}
|
package/.gitspace/bundle.json
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": "1.0",
|
|
3
|
-
"name": "gitspace-dev",
|
|
4
|
-
"description": "Development setup for the GitSpace CLI project",
|
|
5
|
-
"onboarding": [
|
|
6
|
-
{
|
|
7
|
-
"id": "welcome",
|
|
8
|
-
"type": "info",
|
|
9
|
-
"title": "Welcome to GitSpace CLI Development",
|
|
10
|
-
"description": "This onboarding will help you set up your development environment.\n\nYou'll need:\n- Bun runtime installed\n- GitHub CLI (gh) authenticated\n\nLet's verify your setup!"
|
|
11
|
-
},
|
|
12
|
-
{
|
|
13
|
-
"id": "bun",
|
|
14
|
-
"type": "confirm",
|
|
15
|
-
"title": "Bun Runtime",
|
|
16
|
-
"description": "Bun is required to run and build the CLI.",
|
|
17
|
-
"checkCommand": "bun",
|
|
18
|
-
"installUrl": "https://bun.sh"
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
"id": "gh",
|
|
22
|
-
"type": "confirm",
|
|
23
|
-
"title": "GitHub CLI",
|
|
24
|
-
"description": "The GitHub CLI is used for repository operations. Make sure you're logged in with 'gh auth login'.",
|
|
25
|
-
"checkCommand": "gh",
|
|
26
|
-
"installUrl": "https://cli.github.com"
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
"id": "dev-name",
|
|
30
|
-
"type": "input",
|
|
31
|
-
"title": "Your Name",
|
|
32
|
-
"description": "Enter your name for the development environment (used in example scripts).",
|
|
33
|
-
"configKey": "developerName",
|
|
34
|
-
"defaultValue": "Developer"
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
"id": "api-token",
|
|
38
|
-
"type": "secret",
|
|
39
|
-
"title": "Example API Token",
|
|
40
|
-
"description": "Enter a sample API token. This demonstrates how secrets are stored securely in your OS keychain.\n\nYou can enter any value - this is just for demonstration.",
|
|
41
|
-
"configKey": "exampleApiToken"
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
"id": "ready",
|
|
45
|
-
"type": "info",
|
|
46
|
-
"title": "You're All Set!",
|
|
47
|
-
"description": "Your development environment is configured.\n\nNext steps:\n1. Run 'bun install' to install dependencies\n2. Run 'bun run dev' to start the CLI in dev mode\n3. Run 'bun run typecheck' to check types\n\nHappy coding!"
|
|
48
|
-
}
|
|
49
|
-
]
|
|
50
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Show workspace status when switching
|
|
3
|
-
#
|
|
4
|
-
# This runs every time you switch to an existing workspace.
|
|
5
|
-
#
|
|
6
|
-
# Bundle values are available as environment variables:
|
|
7
|
-
# SPACE_VALUE_<KEY> - Regular values from input steps
|
|
8
|
-
# SPACE_SECRET_<KEY> - Secret values from secret steps
|
|
9
|
-
|
|
10
|
-
WORKSPACE_NAME=$1
|
|
11
|
-
REPOSITORY=$2
|
|
12
|
-
|
|
13
|
-
echo ""
|
|
14
|
-
echo "=== Workspace: $WORKSPACE_NAME ==="
|
|
15
|
-
echo ""
|
|
16
|
-
|
|
17
|
-
# Show bundle values (proof of concept)
|
|
18
|
-
if [ -n "$SPACE_VALUE_DEVELOPERNAME" ]; then
|
|
19
|
-
echo "Welcome back, $SPACE_VALUE_DEVELOPERNAME!"
|
|
20
|
-
fi
|
|
21
|
-
|
|
22
|
-
# Show that we have access to the secret (masked)
|
|
23
|
-
if [ -n "$SPACE_SECRET_EXAMPLEAPITOKEN" ]; then
|
|
24
|
-
# Only show first 4 characters to prove we have access
|
|
25
|
-
TOKEN_PREVIEW="${SPACE_SECRET_EXAMPLEAPITOKEN:0:4}..."
|
|
26
|
-
echo "API Token available: $TOKEN_PREVIEW (stored in OS keychain)"
|
|
27
|
-
fi
|
|
28
|
-
|
|
29
|
-
echo ""
|
|
30
|
-
|
|
31
|
-
# Show git status summary
|
|
32
|
-
echo "Git Status:"
|
|
33
|
-
git status --short
|
|
34
|
-
|
|
35
|
-
# Show branch info
|
|
36
|
-
echo ""
|
|
37
|
-
echo "Branch:"
|
|
38
|
-
git branch --show-current
|
|
39
|
-
|
|
40
|
-
echo ""
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Install dependencies for gitspace development
|
|
3
|
-
#
|
|
4
|
-
# This runs once when the workspace is first created.
|
|
5
|
-
|
|
6
|
-
WORKSPACE_NAME=$1
|
|
7
|
-
REPOSITORY=$2
|
|
8
|
-
|
|
9
|
-
echo "Installing dependencies for $WORKSPACE_NAME..."
|
|
10
|
-
bun install
|
|
11
|
-
|
|
12
|
-
echo "Dependencies installed!"
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Run initial typecheck to verify setup
|
|
3
|
-
#
|
|
4
|
-
# This runs once when the workspace is first created.
|
|
5
|
-
|
|
6
|
-
WORKSPACE_NAME=$1
|
|
7
|
-
REPOSITORY=$2
|
|
8
|
-
|
|
9
|
-
echo "Running typecheck..."
|
|
10
|
-
bun run typecheck
|
|
11
|
-
|
|
12
|
-
if [ $? -eq 0 ]; then
|
|
13
|
-
echo "Typecheck passed!"
|
|
14
|
-
else
|
|
15
|
-
echo "Typecheck had issues - you may need to fix some things."
|
|
16
|
-
fi
|