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.
Files changed (316) hide show
  1. package/README.md +68 -38
  2. package/package.json +36 -25
  3. package/.claude/settings.local.json +0 -21
  4. package/.gitspace/bundle.json +0 -50
  5. package/.gitspace/select/01-status.sh +0 -40
  6. package/.gitspace/setup/01-install-deps.sh +0 -12
  7. package/.gitspace/setup/02-typecheck.sh +0 -16
  8. package/AGENTS.md +0 -439
  9. package/CLAUDE.md +0 -1
  10. package/bun.lock +0 -647
  11. package/docs/CONNECTION.md +0 -623
  12. package/docs/GATEWAY-WORKER.md +0 -319
  13. package/docs/GETTING-STARTED.md +0 -448
  14. package/docs/GITSPACE-PLATFORM.md +0 -1819
  15. package/docs/INFRASTRUCTURE.md +0 -1347
  16. package/docs/PROTOCOL.md +0 -619
  17. package/docs/QUICKSTART.md +0 -174
  18. package/docs/RELAY.md +0 -327
  19. package/docs/REMOTE-DESIGN.md +0 -549
  20. package/docs/ROADMAP.md +0 -564
  21. package/docs/SITE_DOCS_FIGMA_MAKE.md +0 -1167
  22. package/docs/STACK-DESIGN.md +0 -588
  23. package/docs/UNIFIED_ARCHITECTURE.md +0 -292
  24. package/experiments/pty-benchmark.ts +0 -148
  25. package/experiments/pty-latency.ts +0 -100
  26. package/experiments/router/client.ts +0 -199
  27. package/experiments/router/protocol.ts +0 -74
  28. package/experiments/router/router.ts +0 -217
  29. package/experiments/router/session.ts +0 -180
  30. package/experiments/router/test.ts +0 -133
  31. package/experiments/socket-bandwidth.ts +0 -77
  32. package/homebrew/gitspace.rb +0 -45
  33. package/landing-page/ATTRIBUTIONS.md +0 -3
  34. package/landing-page/README.md +0 -11
  35. package/landing-page/bun.lock +0 -801
  36. package/landing-page/guidelines/Guidelines.md +0 -61
  37. package/landing-page/index.html +0 -37
  38. package/landing-page/package.json +0 -90
  39. package/landing-page/postcss.config.mjs +0 -15
  40. package/landing-page/public/_redirects +0 -1
  41. package/landing-page/public/favicon.png +0 -0
  42. package/landing-page/src/app/App.tsx +0 -53
  43. package/landing-page/src/app/components/figma/ImageWithFallback.tsx +0 -27
  44. package/landing-page/src/app/components/ui/accordion.tsx +0 -66
  45. package/landing-page/src/app/components/ui/alert-dialog.tsx +0 -157
  46. package/landing-page/src/app/components/ui/alert.tsx +0 -66
  47. package/landing-page/src/app/components/ui/aspect-ratio.tsx +0 -11
  48. package/landing-page/src/app/components/ui/avatar.tsx +0 -53
  49. package/landing-page/src/app/components/ui/badge.tsx +0 -46
  50. package/landing-page/src/app/components/ui/breadcrumb.tsx +0 -109
  51. package/landing-page/src/app/components/ui/button.tsx +0 -57
  52. package/landing-page/src/app/components/ui/calendar.tsx +0 -75
  53. package/landing-page/src/app/components/ui/card.tsx +0 -92
  54. package/landing-page/src/app/components/ui/carousel.tsx +0 -241
  55. package/landing-page/src/app/components/ui/chart.tsx +0 -353
  56. package/landing-page/src/app/components/ui/checkbox.tsx +0 -32
  57. package/landing-page/src/app/components/ui/collapsible.tsx +0 -33
  58. package/landing-page/src/app/components/ui/command.tsx +0 -177
  59. package/landing-page/src/app/components/ui/context-menu.tsx +0 -252
  60. package/landing-page/src/app/components/ui/dialog.tsx +0 -135
  61. package/landing-page/src/app/components/ui/drawer.tsx +0 -132
  62. package/landing-page/src/app/components/ui/dropdown-menu.tsx +0 -257
  63. package/landing-page/src/app/components/ui/form.tsx +0 -168
  64. package/landing-page/src/app/components/ui/hover-card.tsx +0 -44
  65. package/landing-page/src/app/components/ui/input-otp.tsx +0 -77
  66. package/landing-page/src/app/components/ui/input.tsx +0 -21
  67. package/landing-page/src/app/components/ui/label.tsx +0 -24
  68. package/landing-page/src/app/components/ui/menubar.tsx +0 -276
  69. package/landing-page/src/app/components/ui/navigation-menu.tsx +0 -168
  70. package/landing-page/src/app/components/ui/pagination.tsx +0 -127
  71. package/landing-page/src/app/components/ui/popover.tsx +0 -48
  72. package/landing-page/src/app/components/ui/progress.tsx +0 -31
  73. package/landing-page/src/app/components/ui/radio-group.tsx +0 -45
  74. package/landing-page/src/app/components/ui/resizable.tsx +0 -56
  75. package/landing-page/src/app/components/ui/scroll-area.tsx +0 -58
  76. package/landing-page/src/app/components/ui/select.tsx +0 -189
  77. package/landing-page/src/app/components/ui/separator.tsx +0 -28
  78. package/landing-page/src/app/components/ui/sheet.tsx +0 -139
  79. package/landing-page/src/app/components/ui/sidebar.tsx +0 -726
  80. package/landing-page/src/app/components/ui/skeleton.tsx +0 -13
  81. package/landing-page/src/app/components/ui/slider.tsx +0 -63
  82. package/landing-page/src/app/components/ui/sonner.tsx +0 -25
  83. package/landing-page/src/app/components/ui/switch.tsx +0 -31
  84. package/landing-page/src/app/components/ui/table.tsx +0 -116
  85. package/landing-page/src/app/components/ui/tabs.tsx +0 -66
  86. package/landing-page/src/app/components/ui/textarea.tsx +0 -18
  87. package/landing-page/src/app/components/ui/toggle-group.tsx +0 -73
  88. package/landing-page/src/app/components/ui/toggle.tsx +0 -47
  89. package/landing-page/src/app/components/ui/tooltip.tsx +0 -61
  90. package/landing-page/src/app/components/ui/use-mobile.ts +0 -21
  91. package/landing-page/src/app/components/ui/utils.ts +0 -6
  92. package/landing-page/src/components/docs/DocsContent.tsx +0 -718
  93. package/landing-page/src/components/docs/DocsSidebar.tsx +0 -84
  94. package/landing-page/src/components/landing/CTA.tsx +0 -59
  95. package/landing-page/src/components/landing/Comparison.tsx +0 -84
  96. package/landing-page/src/components/landing/FaultyTerminal.tsx +0 -424
  97. package/landing-page/src/components/landing/Features.tsx +0 -201
  98. package/landing-page/src/components/landing/Hero.tsx +0 -142
  99. package/landing-page/src/components/landing/Pricing.tsx +0 -140
  100. package/landing-page/src/components/landing/Roadmap.tsx +0 -86
  101. package/landing-page/src/components/landing/Security.tsx +0 -81
  102. package/landing-page/src/components/landing/TerminalWindow.tsx +0 -27
  103. package/landing-page/src/components/landing/UseCases.tsx +0 -55
  104. package/landing-page/src/components/landing/Workflow.tsx +0 -101
  105. package/landing-page/src/components/layout/DashboardNavbar.tsx +0 -37
  106. package/landing-page/src/components/layout/Footer.tsx +0 -55
  107. package/landing-page/src/components/layout/LandingNavbar.tsx +0 -82
  108. package/landing-page/src/components/ui/badge.tsx +0 -39
  109. package/landing-page/src/components/ui/breadcrumb.tsx +0 -115
  110. package/landing-page/src/components/ui/button.tsx +0 -57
  111. package/landing-page/src/components/ui/card.tsx +0 -79
  112. package/landing-page/src/components/ui/mock-terminal.tsx +0 -68
  113. package/landing-page/src/components/ui/separator.tsx +0 -28
  114. package/landing-page/src/lib/utils.ts +0 -6
  115. package/landing-page/src/main.tsx +0 -10
  116. package/landing-page/src/pages/Dashboard.tsx +0 -133
  117. package/landing-page/src/pages/DocsPage.tsx +0 -79
  118. package/landing-page/src/pages/LandingPage.tsx +0 -31
  119. package/landing-page/src/pages/TerminalView.tsx +0 -106
  120. package/landing-page/src/styles/fonts.css +0 -0
  121. package/landing-page/src/styles/index.css +0 -3
  122. package/landing-page/src/styles/tailwind.css +0 -4
  123. package/landing-page/src/styles/theme.css +0 -181
  124. package/landing-page/vite.config.ts +0 -19
  125. package/npm/darwin-arm64/bin/gssh +0 -0
  126. package/npm/darwin-arm64/package.json +0 -20
  127. package/scripts/build.ts +0 -298
  128. package/scripts/release.ts +0 -140
  129. package/src/__tests__/test-utils.ts +0 -298
  130. package/src/commands/__tests__/serve-messages.test.ts +0 -190
  131. package/src/commands/access.ts +0 -298
  132. package/src/commands/add.ts +0 -452
  133. package/src/commands/auth.ts +0 -364
  134. package/src/commands/connect.ts +0 -287
  135. package/src/commands/directory.ts +0 -16
  136. package/src/commands/host.ts +0 -396
  137. package/src/commands/identity.ts +0 -184
  138. package/src/commands/list.ts +0 -200
  139. package/src/commands/relay.ts +0 -315
  140. package/src/commands/remove.ts +0 -241
  141. package/src/commands/serve.ts +0 -1493
  142. package/src/commands/share.ts +0 -456
  143. package/src/commands/status.ts +0 -125
  144. package/src/commands/switch.ts +0 -353
  145. package/src/commands/tmux.ts +0 -317
  146. package/src/core/__tests__/access.test.ts +0 -240
  147. package/src/core/access.ts +0 -277
  148. package/src/core/bundle.ts +0 -342
  149. package/src/core/config.ts +0 -510
  150. package/src/core/git.ts +0 -317
  151. package/src/core/github.ts +0 -151
  152. package/src/core/identity.ts +0 -631
  153. package/src/core/linear.ts +0 -225
  154. package/src/core/shell.ts +0 -161
  155. package/src/core/trusted-relays.ts +0 -315
  156. package/src/index.ts +0 -810
  157. package/src/lib/remote-session/index.ts +0 -7
  158. package/src/lib/remote-session/protocol.ts +0 -267
  159. package/src/lib/remote-session/session-handler.ts +0 -581
  160. package/src/lib/remote-session/workspace-scanner.ts +0 -167
  161. package/src/lib/tmux-lite/README.md +0 -81
  162. package/src/lib/tmux-lite/cli.ts +0 -796
  163. package/src/lib/tmux-lite/crypto/__tests__/helpers/handshake-runner.ts +0 -349
  164. package/src/lib/tmux-lite/crypto/__tests__/helpers/mock-relay.ts +0 -291
  165. package/src/lib/tmux-lite/crypto/__tests__/helpers/test-identities.ts +0 -142
  166. package/src/lib/tmux-lite/crypto/__tests__/integration/authorization.integration.test.ts +0 -339
  167. package/src/lib/tmux-lite/crypto/__tests__/integration/e2e-communication.integration.test.ts +0 -477
  168. package/src/lib/tmux-lite/crypto/__tests__/integration/error-handling.integration.test.ts +0 -499
  169. package/src/lib/tmux-lite/crypto/__tests__/integration/handshake.integration.test.ts +0 -371
  170. package/src/lib/tmux-lite/crypto/__tests__/integration/security.integration.test.ts +0 -573
  171. package/src/lib/tmux-lite/crypto/access-control.test.ts +0 -512
  172. package/src/lib/tmux-lite/crypto/access-control.ts +0 -320
  173. package/src/lib/tmux-lite/crypto/frames.test.ts +0 -262
  174. package/src/lib/tmux-lite/crypto/frames.ts +0 -141
  175. package/src/lib/tmux-lite/crypto/handshake.ts +0 -894
  176. package/src/lib/tmux-lite/crypto/identity.test.ts +0 -220
  177. package/src/lib/tmux-lite/crypto/identity.ts +0 -286
  178. package/src/lib/tmux-lite/crypto/index.ts +0 -51
  179. package/src/lib/tmux-lite/crypto/invites.test.ts +0 -381
  180. package/src/lib/tmux-lite/crypto/invites.ts +0 -215
  181. package/src/lib/tmux-lite/crypto/keyexchange.ts +0 -435
  182. package/src/lib/tmux-lite/crypto/keys.test.ts +0 -58
  183. package/src/lib/tmux-lite/crypto/keys.ts +0 -47
  184. package/src/lib/tmux-lite/crypto/secretbox.test.ts +0 -169
  185. package/src/lib/tmux-lite/crypto/secretbox.ts +0 -124
  186. package/src/lib/tmux-lite/handshake-handler.ts +0 -451
  187. package/src/lib/tmux-lite/protocol.test.ts +0 -307
  188. package/src/lib/tmux-lite/protocol.ts +0 -266
  189. package/src/lib/tmux-lite/relay-client.ts +0 -506
  190. package/src/lib/tmux-lite/server.ts +0 -1250
  191. package/src/lib/tmux-lite/shell-integration.sh +0 -37
  192. package/src/lib/tmux-lite/terminal-queries.test.ts +0 -54
  193. package/src/lib/tmux-lite/terminal-queries.ts +0 -49
  194. package/src/relay/__tests__/e2e-flow.test.ts +0 -1284
  195. package/src/relay/__tests__/helpers/auth.ts +0 -354
  196. package/src/relay/__tests__/helpers/ports.ts +0 -51
  197. package/src/relay/__tests__/protocol-validation.test.ts +0 -265
  198. package/src/relay/authorization.ts +0 -303
  199. package/src/relay/embedded-assets.generated.d.ts +0 -15
  200. package/src/relay/identity.ts +0 -352
  201. package/src/relay/index.ts +0 -57
  202. package/src/relay/pipes.test.ts +0 -427
  203. package/src/relay/pipes.ts +0 -195
  204. package/src/relay/protocol.ts +0 -804
  205. package/src/relay/registries.test.ts +0 -437
  206. package/src/relay/registries.ts +0 -593
  207. package/src/relay/server.test.ts +0 -1323
  208. package/src/relay/server.ts +0 -1092
  209. package/src/relay/signing.ts +0 -238
  210. package/src/relay/types.ts +0 -69
  211. package/src/serve/client-session-manager.ts +0 -622
  212. package/src/serve/daemon.ts +0 -497
  213. package/src/serve/pty-session.ts +0 -236
  214. package/src/serve/types.ts +0 -169
  215. package/src/shared/components/Flow.tsx +0 -453
  216. package/src/shared/components/Flow.tui.tsx +0 -343
  217. package/src/shared/components/Flow.web.tsx +0 -442
  218. package/src/shared/components/Inbox.tsx +0 -446
  219. package/src/shared/components/Inbox.tui.tsx +0 -262
  220. package/src/shared/components/Inbox.web.tsx +0 -329
  221. package/src/shared/components/MachineList.tsx +0 -187
  222. package/src/shared/components/MachineList.tui.tsx +0 -161
  223. package/src/shared/components/MachineList.web.tsx +0 -210
  224. package/src/shared/components/ProjectList.tsx +0 -176
  225. package/src/shared/components/ProjectList.tui.tsx +0 -109
  226. package/src/shared/components/ProjectList.web.tsx +0 -143
  227. package/src/shared/components/SpacesBrowser.tsx +0 -332
  228. package/src/shared/components/SpacesBrowser.tui.tsx +0 -163
  229. package/src/shared/components/SpacesBrowser.web.tsx +0 -221
  230. package/src/shared/components/index.ts +0 -103
  231. package/src/shared/hooks/index.ts +0 -16
  232. package/src/shared/hooks/useNavigation.ts +0 -226
  233. package/src/shared/index.ts +0 -122
  234. package/src/shared/providers/LocalMachineProvider.ts +0 -425
  235. package/src/shared/providers/MachineProvider.ts +0 -165
  236. package/src/shared/providers/RemoteMachineProvider.ts +0 -444
  237. package/src/shared/providers/index.ts +0 -26
  238. package/src/shared/types.ts +0 -145
  239. package/src/tui/adapters.ts +0 -120
  240. package/src/tui/app.tsx +0 -1816
  241. package/src/tui/components/Terminal.tsx +0 -580
  242. package/src/tui/hooks/index.ts +0 -35
  243. package/src/tui/hooks/useAppState.ts +0 -314
  244. package/src/tui/hooks/useDaemonStatus.ts +0 -174
  245. package/src/tui/hooks/useInboxTUI.ts +0 -113
  246. package/src/tui/hooks/useRemoteMachines.ts +0 -209
  247. package/src/tui/index.ts +0 -24
  248. package/src/tui/state.ts +0 -299
  249. package/src/tui/terminal-bracketed-paste.test.ts +0 -45
  250. package/src/tui/terminal-bracketed-paste.ts +0 -47
  251. package/src/types/bundle.ts +0 -112
  252. package/src/types/config.ts +0 -89
  253. package/src/types/errors.ts +0 -206
  254. package/src/types/identity.ts +0 -284
  255. package/src/types/workspace-fuzzy.ts +0 -49
  256. package/src/types/workspace.ts +0 -151
  257. package/src/utils/bun-socket-writer.ts +0 -80
  258. package/src/utils/deps.ts +0 -127
  259. package/src/utils/fuzzy-match.ts +0 -125
  260. package/src/utils/logger.ts +0 -127
  261. package/src/utils/markdown.ts +0 -254
  262. package/src/utils/onboarding.ts +0 -229
  263. package/src/utils/prompts.ts +0 -114
  264. package/src/utils/run-commands.ts +0 -112
  265. package/src/utils/run-scripts.ts +0 -142
  266. package/src/utils/sanitize.ts +0 -98
  267. package/src/utils/secrets.ts +0 -122
  268. package/src/utils/shell-escape.ts +0 -40
  269. package/src/utils/utf8.ts +0 -79
  270. package/src/utils/workspace-state.ts +0 -47
  271. package/src/web/README.md +0 -73
  272. package/src/web/bun.lock +0 -575
  273. package/src/web/eslint.config.js +0 -23
  274. package/src/web/index.html +0 -16
  275. package/src/web/package.json +0 -37
  276. package/src/web/public/vite.svg +0 -1
  277. package/src/web/src/App.tsx +0 -604
  278. package/src/web/src/assets/react.svg +0 -1
  279. package/src/web/src/components/Terminal.tsx +0 -207
  280. package/src/web/src/hooks/useRelayConnection.ts +0 -224
  281. package/src/web/src/hooks/useTerminal.ts +0 -699
  282. package/src/web/src/index.css +0 -55
  283. package/src/web/src/lib/crypto/__tests__/web-terminal.test.ts +0 -1158
  284. package/src/web/src/lib/crypto/frames.ts +0 -205
  285. package/src/web/src/lib/crypto/handshake.ts +0 -396
  286. package/src/web/src/lib/crypto/identity.ts +0 -128
  287. package/src/web/src/lib/crypto/keyexchange.ts +0 -246
  288. package/src/web/src/lib/crypto/relay-signing.ts +0 -53
  289. package/src/web/src/lib/invite.ts +0 -58
  290. package/src/web/src/lib/storage/identity-store.ts +0 -94
  291. package/src/web/src/main.tsx +0 -10
  292. package/src/web/src/types/identity.ts +0 -45
  293. package/src/web/tsconfig.app.json +0 -28
  294. package/src/web/tsconfig.json +0 -7
  295. package/src/web/tsconfig.node.json +0 -26
  296. package/src/web/vite.config.ts +0 -31
  297. package/todo-security.md +0 -92
  298. package/tsconfig.json +0 -23
  299. package/worker/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/12b7107e435bf1b9a8713a7f320472a63e543104d633d89a26f8d21f4e4ef182.sqlite +0 -0
  300. package/worker/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/12b7107e435bf1b9a8713a7f320472a63e543104d633d89a26f8d21f4e4ef182.sqlite-shm +0 -0
  301. package/worker/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/12b7107e435bf1b9a8713a7f320472a63e543104d633d89a26f8d21f4e4ef182.sqlite-wal +0 -0
  302. package/worker/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/1a1ac3db1ab86ecf712f90322868a9aabc2c7dc9fe2dfbe94f9b075096276b0f.sqlite +0 -0
  303. package/worker/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/1a1ac3db1ab86ecf712f90322868a9aabc2c7dc9fe2dfbe94f9b075096276b0f.sqlite-shm +0 -0
  304. package/worker/.wrangler/state/v3/d1/miniflare-D1DatabaseObject/1a1ac3db1ab86ecf712f90322868a9aabc2c7dc9fe2dfbe94f9b075096276b0f.sqlite-wal +0 -0
  305. package/worker/bun.lock +0 -237
  306. package/worker/package.json +0 -22
  307. package/worker/schema.sql +0 -96
  308. package/worker/src/handlers/auth.ts +0 -451
  309. package/worker/src/handlers/subdomains.ts +0 -376
  310. package/worker/src/handlers/user.ts +0 -98
  311. package/worker/src/index.ts +0 -70
  312. package/worker/src/middleware/auth.ts +0 -152
  313. package/worker/src/services/cloudflare.ts +0 -609
  314. package/worker/src/types.ts +0 -96
  315. package/worker/tsconfig.json +0 -15
  316. package/worker/wrangler.toml +0 -26
package/AGENTS.md DELETED
@@ -1,439 +0,0 @@
1
- # Claude Code Development Guide
2
-
3
- This document provides comprehensive information for AI assistants working on the GitSpace CLI project.
4
-
5
- ## Project Overview
6
-
7
- **GitSpace** is a powerful CLI tool for managing GitHub repository workspaces using git worktrees, with secure remote terminal access via an E2E encrypted relay system. It features both a TUI (Terminal User Interface) and web interface for interactive management.
8
-
9
- **Key Capabilities:**
10
- - Git worktrees for parallel branch development
11
- - Interactive TUI for workspace management
12
- - **Remote terminal access** via E2E encrypted relay
13
- - **Identity-based access control** with Ed25519/X25519 keys
14
- - **X3DH handshake** for forward-secret session encryption
15
- - Web terminal interface (React + xterm.js)
16
- - Linear issue integration for workspace creation
17
- - Convention-based custom scripts (pre, setup, select phases)
18
-
19
- ## Architecture
20
-
21
- ### Core Concepts
22
-
23
- 1. **Projects**: Top-level containers for a GitHub repository
24
- - Located at `~/gitspace/<project-name>/`
25
- - Contains: base repo clone, workspaces, scripts, config
26
-
27
- 2. **Workspaces**: Individual git worktrees for features/branches
28
- - Located at `~/gitspace/<project-name>/workspaces/<workspace-name>/`
29
- - Each workspace has its own branch
30
-
31
- 3. **Sessions**: PTY terminal sessions managed by tmux-lite
32
- - Can be attached from multiple clients
33
- - State maintained by xterm-headless on server
34
-
35
- 4. **Identity**: Cryptographic keypair per machine/client
36
- - Ed25519 for signing (proving identity)
37
- - X25519 for key exchange (establishing encryption)
38
- - Stored in `~/gitspace/.identity/` directory:
39
- - `keypair.json` - Encrypted identity keypair
40
- - Access list: `~/gitspace/.access.json` - Authorized client public keys
41
- - Machine info: `~/gitspace/.machine.json` - Machine registration info
42
- - Relay config: `~/gitspace/.relay.json` - Relay configuration cache
43
-
44
- 5. **Relay**: WebSocket server for routing encrypted traffic
45
- - Connects machines to clients through NAT/firewalls
46
- - Cannot decrypt terminal content (E2E encryption)
47
-
48
- ### Directory Structure
49
-
50
- ```
51
- src/
52
- ├── index.ts # Entry point (TUI or CLI dispatch)
53
- ├── commands/ # CLI command implementations (16 files)
54
- │ ├── access.ts # Access control list (add/list/remove)
55
- │ ├── add.ts # Add projects/workspaces
56
- │ ├── auth.ts # GitHub OAuth for gitspace.sh
57
- │ ├── connect.ts # Connect to remote machine
58
- │ ├── directory.ts # Get project directory path
59
- │ ├── host.ts # Subdomain hosting (reserve/release/list)
60
- │ ├── identity.ts # Identity management (init/show)
61
- │ ├── list.ts # List projects/workspaces
62
- │ ├── machine.ts # Remote machine management (invite/list)
63
- │ ├── relay.ts # Relay server (start/token)
64
- │ ├── remove.ts # Remove projects/workspaces
65
- │ ├── serve.ts # Machine daemon for remote access
66
- │ ├── share.ts # Create invite tokens
67
- │ ├── status.ts # Unified daemon status display
68
- │ ├── switch.ts # Switch projects/workspaces
69
- │ └── tmux.ts # tmux-lite CLI commands
70
- ├── core/ # Core business logic (8 files)
71
- │ ├── access.ts # Access list management
72
- │ ├── bundle.ts # Project template bundles
73
- │ ├── config.ts # Configuration management
74
- │ ├── git.ts # Git operations (worktrees, branches)
75
- │ ├── github.ts # GitHub API (via gh CLI)
76
- │ ├── identity.ts # Machine identity management
77
- │ ├── linear.ts # Linear API integration
78
- │ └── shell.ts # Subshell spawning
79
- ├── lib/
80
- │ ├── tmux-lite/ # Terminal multiplexer library
81
- │ │ ├── cli.ts # CLI interface for tmux-lite
82
- │ │ ├── server.ts # Session manager with xterm-headless
83
- │ │ ├── protocol.ts # Frame format (PTY/CONTROL)
84
- │ │ ├── handshake-handler.ts # X3DH handshake management
85
- │ │ ├── relay-client.ts # WebSocket client for relay
86
- │ │ └── crypto/ # Cryptography implementations
87
- │ │ ├── identity.ts # Ed25519/X25519 key generation
88
- │ │ ├── keyexchange.ts # X25519 ECDH
89
- │ │ ├── secretbox.ts # AES-256-GCM encryption
90
- │ │ ├── frames.ts # Encrypted frame format
91
- │ │ ├── handshake.ts # X3DH protocol steps
92
- │ │ ├── invites.ts # Signed invite tokens
93
- │ │ └── access-control.ts # ACL checking
94
- │ └── remote-session/ # Remote session handling
95
- │ ├── session-handler.ts # Handle remote client commands
96
- │ └── workspace-scanner.ts # Scan workspace info
97
- ├── relay/ # Relay server (8 files)
98
- │ ├── index.ts # Entry point
99
- │ ├── server.ts # WebSocket routing server
100
- │ ├── protocol.ts # Message types and validation
101
- │ ├── registries.ts # Machine/invite/auth/global access registries
102
- │ ├── jwt.ts # JWT token creation/verification (HMAC + Ed25519)
103
- │ ├── pipes.ts # Pipe abstraction for data routing
104
- │ └── types.ts # WebSocketData, RelayConfig types
105
- ├── serve/ # Machine daemon (4 files)
106
- │ ├── client-session-manager.ts # Client connection handling
107
- │ ├── daemon.ts # Daemon lifecycle (PID, status socket)
108
- │ ├── pty-session.ts # PTY session management
109
- │ └── types.ts # ServeOptions, permissions
110
- ├── shared/ # Cross-platform components
111
- │ ├── components/ # Shared UI components (16 files)
112
- │ │ ├── MachineList.tsx # Logic + hooks
113
- │ │ ├── MachineList.web.tsx # Web rendering
114
- │ │ ├── MachineList.tui.tsx # TUI rendering
115
- │ │ ├── SpacesBrowser.tsx # Workspace browser logic
116
- │ │ ├── SpacesBrowser.web.tsx
117
- │ │ ├── SpacesBrowser.tui.tsx
118
- │ │ ├── Inbox.tsx # Notification system
119
- │ │ ├── Inbox.web.tsx
120
- │ │ ├── Inbox.tui.tsx
121
- │ │ ├── Flow.tsx # Modal dialog system
122
- │ │ ├── Flow.web.tsx
123
- │ │ ├── Flow.tui.tsx
124
- │ │ ├── ProjectList.tsx
125
- │ │ ├── ProjectList.web.tsx
126
- │ │ └── ProjectList.tui.tsx
127
- │ ├── providers/ # Machine access abstraction
128
- │ │ ├── MachineProvider.ts # Interface definition
129
- │ │ ├── LocalMachineProvider.ts # Direct tmux-lite access
130
- │ │ └── RemoteMachineProvider.ts # Via relay
131
- │ ├── hooks/
132
- │ │ └── useNavigation.ts # Navigation state management
133
- │ └── types.ts # Shared type definitions
134
- ├── tui/ # Terminal UI (OpenTUI)
135
- │ ├── index.ts # TUI entry point
136
- │ ├── app.tsx # Main TUI application
137
- │ ├── state.ts # State management
138
- │ ├── adapters.ts # Local/remote machine adapters
139
- │ ├── components/
140
- │ │ └── Terminal.tsx # Embedded terminal
141
- │ └── hooks/
142
- │ ├── useAppState.ts
143
- │ ├── useRemoteMachines.ts
144
- │ └── useInboxTUI.ts
145
- ├── web/ # Web application (Vite + React)
146
- │ └── src/
147
- │ ├── App.tsx # Main web app
148
- │ ├── components/
149
- │ │ └── Terminal.tsx
150
- │ ├── hooks/
151
- │ │ ├── useRelayConnection.ts
152
- │ │ └── useTerminal.ts
153
- │ └── lib/
154
- │ ├── crypto/ # Client-side crypto (same as server)
155
- │ └── storage/ # LocalStorage identity
156
- ├── types/ # TypeScript type definitions
157
- │ ├── bundle.ts # Bundle format
158
- │ ├── config.ts # Global/project config
159
- │ ├── errors.ts # Error types
160
- │ ├── identity.ts # Keypairs, access, invites, X3DH
161
- │ ├── workspace.ts # Workspace types
162
- │ └── workspace-fuzzy.ts # Fuzzy search types
163
- └── utils/ # Utility functions (13 files)
164
- ├── bun-socket-writer.ts # Buffered socket writing
165
- ├── deps.ts # Dependency checking
166
- ├── fuzzy-match.ts # Fuzzy matching
167
- ├── logger.ts # Colored logging
168
- ├── markdown.ts # Markdown rendering
169
- ├── onboarding.ts # Bundle onboarding
170
- ├── prompts.ts # User prompts
171
- ├── run-commands.ts # Command execution
172
- ├── run-scripts.ts # Script discovery/execution
173
- ├── sanitize.ts # String sanitization
174
- ├── secrets.ts # Bun.secrets integration
175
- ├── shell-escape.ts # POSIX escaping
176
- └── workspace-state.ts # gitspace.lock marker
177
- ```
178
-
179
- ## CLI Commands
180
-
181
- ### Workspace Management
182
- | Command | Description |
183
- |---------|-------------|
184
- | `gssh` | Launch TUI (no args) |
185
- | `gssh add project` | Add a new project from GitHub |
186
- | `gssh add <name>` | Create workspace in current project |
187
- | `gssh switch project [name]` | Switch to a project |
188
- | `gssh switch [name]` | Switch to a workspace |
189
- | `gssh list projects` | List all projects |
190
- | `gssh list workspaces` | List workspaces in current project |
191
- | `gssh remove workspace [name]` | Remove a workspace |
192
- | `gssh remove project [name]` | Remove a project |
193
- | `gssh directory` | Print current project directory |
194
-
195
- ### Identity & Access
196
- | Command | Description |
197
- |---------|-------------|
198
- | `gssh identity init` | Create machine identity keypair |
199
- | `gssh identity show` | Display identity fingerprint |
200
- | `gssh access add <pubkey>` | Add authorized client |
201
- | `gssh access list` | List authorized clients |
202
- | `gssh access remove <key>` | Remove client access |
203
- | `gssh share create` | Create invite token |
204
-
205
- ### Remote Access
206
- | Command | Description |
207
- |---------|-------------|
208
- | `gssh serve` | Start machine daemon (foreground) |
209
- | `gssh serve start` | Start machine daemon (background) |
210
- | `gssh serve stop` | Stop machine daemon |
211
- | `gssh connect <token>` | Connect to remote machine |
212
- | `gssh status` | Show status of all daemons |
213
-
214
- ### Relay Server
215
- | Command | Description |
216
- |---------|-------------|
217
- | `gssh relay start` | Start relay server |
218
- | `gssh relay token` | Create account JWT (HMAC) |
219
- | `gssh relay authorize <pubkey>` | Authorize a client on relay |
220
- | `gssh relay revoke <id>` | Revoke client authorization |
221
- | `gssh relay machines` | List authorized machines |
222
-
223
- ### tmux-lite Daemon
224
- | Command | Description |
225
- |---------|-------------|
226
- | `gssh tmux start` | Start tmux-lite server daemon |
227
- | `gssh tmux stop` | Stop tmux-lite daemon |
228
- | `gssh tmux status` | Show tmux-lite daemon status |
229
- | `gssh tmux list` | List active terminal sessions |
230
-
231
- ### Machine Management
232
- | Command | Description |
233
- |---------|-------------|
234
- | `gssh machine invite` | Create invite for remote machine to join relay |
235
- | `gssh machine list` | List machines on relay (stub) |
236
- | `gssh machine remove <id>` | Remove machine from relay (stub) |
237
-
238
- ### Authentication (gitspace.sh)
239
- | Command | Description |
240
- |---------|-------------|
241
- | `gssh auth login` | Login via GitHub OAuth device flow |
242
- | `gssh auth logout` | Clear local credentials |
243
- | `gssh auth status` | Show authentication status |
244
-
245
- ### Hosting (gitspace.sh)
246
- | Command | Description |
247
- |---------|-------------|
248
- | `gssh host reserve <name>` | Reserve subdomain on gitspace.sh |
249
- | `gssh host release [name]` | Release a subdomain |
250
- | `gssh host list` | List your subdomains |
251
- | `gssh host set-primary <name>` | Set primary subdomain |
252
- | `gssh host status` | Show hosting status |
253
-
254
- ## Remote Access Architecture
255
-
256
- ```
257
- ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
258
- │ Your Machine │ │ Relay Server │ │ Remote Client │
259
- │ │ │ │ │ │
260
- │ gssh serve │◀═════▶│ Routing only │◀═════▶│ gssh connect │
261
- │ (PTY sessions) │ WebSocket │ E2E encrypted │ WebSocket │ or browser │
262
- │ │ │ (can't decrypt)│ │ │
263
- └─────────────────┘ └─────────────────┘ └─────────────────┘
264
- ```
265
-
266
- ### Connection Flow
267
-
268
- 1. Machine runs `gssh serve --relay <url> --token <jwt>`
269
- 2. Machine registers with relay (sends public keys)
270
- 3. Machine creates invite: `gssh share create`
271
- 4. Client connects with invite: `gssh connect <token>`
272
- 5. X3DH handshake establishes session keys
273
- 6. All terminal I/O is E2E encrypted
274
-
275
- ### Cryptographic Primitives
276
-
277
- | Purpose | Algorithm |
278
- |---------|-----------|
279
- | Identity signing | Ed25519 |
280
- | Key exchange | X25519 |
281
- | Symmetric encryption | AES-256-GCM |
282
- | Key derivation | HKDF-SHA256 |
283
- | JWT signing | HMAC-SHA256 |
284
-
285
- ## TUI/Web Shared Component Pattern
286
-
287
- Components are split into three files:
288
- - `Component.tsx` - Logic/hooks (React-compatible)
289
- - `Component.web.tsx` - Web rendering (React DOM)
290
- - `Component.tui.tsx` - TUI rendering (OpenTUI)
291
-
292
- This allows shared business logic with platform-specific rendering.
293
-
294
- ### MachineProvider Abstraction
295
-
296
- ```typescript
297
- interface MachineProvider {
298
- getMachineInfo(): Promise<MachineInfo>;
299
- listProjects(): Promise<Project[]>;
300
- listWorkspaces(project: string): Promise<Workspace[]>;
301
- createSession(options): Promise<string>;
302
- attachSession(sessionId): Promise<SessionStream>;
303
- detachSession(sessionId): Promise<void>;
304
- getInbox(): Promise<InboxItem[]>;
305
- }
306
- ```
307
-
308
- - `LocalMachineProvider`: Direct filesystem + tmux-lite CLI
309
- - `RemoteMachineProvider`: Via relay WebSocket
310
-
311
- ## Development Workflow
312
-
313
- ### Building and Testing
314
-
315
- ```bash
316
- # Type check
317
- bun run typecheck
318
-
319
- # Build
320
- bun run build
321
-
322
- # Run TUI
323
- bun src/index.ts
324
-
325
- # Run relay
326
- RELAY_SIGNING_SECRET=secret bun src/index.ts relay start
327
-
328
- # Run serve
329
- bun src/index.ts serve --relay ws://localhost:8080/ws --token <jwt>
330
- ```
331
-
332
- ### Code Style
333
-
334
- - **TypeScript**: ESM modules, strict mode
335
- - **Error Handling**: Use typed errors from `types/errors.ts`
336
- - **Logging**: Use `logger` from `utils/logger.ts`
337
- - **User Prompts**: Use `utils/prompts.ts`
338
- - **Crypto**: Use `lib/tmux-lite/crypto/` modules
339
-
340
- ## Key Files Reference
341
-
342
- | Purpose | Location |
343
- |---------|----------|
344
- | Entry point | `src/index.ts` |
345
- | Config management | `src/core/config.ts` |
346
- | Identity/crypto | `src/core/identity.ts`, `src/lib/tmux-lite/crypto/` |
347
- | Access control | `src/core/access.ts` |
348
- | Relay server | `src/relay/server.ts` |
349
- | Relay protocol | `src/relay/protocol.ts` |
350
- | Relay registries | `src/relay/registries.ts` |
351
- | JWT tokens | `src/relay/jwt.ts` (HMAC + Ed25519) |
352
- | Machine daemon | `src/commands/serve.ts`, `src/serve/` |
353
- | Daemon lifecycle | `src/serve/daemon.ts` |
354
- | X3DH handshake | `src/lib/tmux-lite/handshake-handler.ts` |
355
- | Session management | `src/lib/tmux-lite/server.ts` |
356
- | Frame protocol | `src/lib/tmux-lite/protocol.ts` |
357
- | Encrypted frames | `src/lib/tmux-lite/crypto/frames.ts` |
358
- | Secrets/keychain | `src/utils/secrets.ts` |
359
- | GitHub auth | `src/commands/auth.ts` |
360
- | Hosting commands | `src/commands/host.ts` |
361
-
362
- ## External Dependencies
363
-
364
- **Runtime:**
365
- - `commander` - CLI framework
366
- - `@inquirer/prompts` - User prompts
367
- - `@opentui/core` - Terminal UI framework
368
- - `@linear/sdk` - Linear API client
369
- - `chalk` - Terminal colors
370
- - `ws` - WebSocket (relay)
371
- - `@noble/curves` - Ed25519/X25519 crypto
372
- - `@noble/ciphers` - AES-GCM encryption
373
- - `@noble/hashes` - HKDF, SHA256
374
- - `@xterm/headless` - Terminal state tracking
375
- - `ghostty-opentui` - TUI terminal embedding
376
-
377
- **System Commands:**
378
- - `gh` - GitHub CLI
379
- - `git` - Git operations
380
-
381
- ## Documentation
382
-
383
- | File | Description |
384
- |------|-------------|
385
- | `README.md` | User-facing documentation |
386
- | `AGENTS.md` | This file - development guide |
387
- | `docs/PROTOCOL.md` | Relay message protocol |
388
- | `docs/RELAY.md` | Relay server architecture |
389
- | `docs/GETTING-STARTED.md` | Remote access setup guide |
390
- | `docs/CONNECTION.md` | Connection state management |
391
- | `docs/REMOTE-DESIGN.md` | E2E encryption design (identity-based) |
392
- | `docs/UNIFIED_ARCHITECTURE.md` | TUI/Web architecture plan |
393
- | `docs/GATEWAY-WORKER.md` | Cloudflare Worker gateway spec |
394
- | `docs/ROADMAP.md` | Feature roadmap and vision |
395
- | `docs/INFRASTRUCTURE.md` | Future VM infrastructure (not implemented) |
396
- | `docs/STACK-DESIGN.md` | Future stacked PR feature (not implemented) |
397
-
398
- ---
399
-
400
- ## Configuration
401
-
402
- ### Config Files
403
-
404
- | File | Location | Purpose |
405
- |------|----------|---------|
406
- | Global config | `~/gitspace/.config.json` | Current project, defaults |
407
- | Project config | `~/gitspace/{project}/.config.json` | Project-specific settings |
408
- | Identity | `~/gitspace/.identity/` | Keypairs |
409
- | Access list | `~/gitspace/.access.json` | Authorized client public keys |
410
- | Machine info | `~/gitspace/.machine.json` | Machine registration |
411
- | Relay config | `~/gitspace/.relay.json` | Relay configuration cache |
412
- | Daemon state | `~/gitspace/.serve/` | PID files, status sockets |
413
- | tmux-lite state | `/tmp/` | Session data (configurable via `TMUX_LITE_SESSION_DIR`) |
414
-
415
- ### Environment Variables
416
-
417
- | Variable | Description | Default |
418
- |----------|-------------|---------|
419
- | `RELAY_PORT` | Relay server port | `4480` |
420
- | `RELAY_BIND` | Relay bind address | `0.0.0.0` |
421
- | `RELAY_SIGNING_SECRET` | Secret for HMAC JWT signing | Required |
422
- | `RELAY_PRIVATE_KEY` | Base64 Ed25519 private key | Uses keychain |
423
- | `SPACES_CURRENT_PROJECT` | Override current project | From config |
424
- | `GITSPACE_API_URL` | gitspace.sh API URL | `https://api.gitspace.sh` |
425
-
426
- ### Default Values
427
-
428
- | Setting | Default | Location |
429
- |---------|---------|----------|
430
- | Projects directory | `~/gitspace` | Global config |
431
- | Base branch | `main` | Global/project config |
432
- | Stale workspace days | `30` | Global config |
433
- | Relay port | `4480` | CLI/env |
434
- | Default relay URL | `wss://relay.gitspace.sh` | CLI |
435
-
436
- ---
437
-
438
- **Last Updated**: 2025-01
439
- **Runtime**: Bun / Node.js 18+
package/CLAUDE.md DELETED
@@ -1 +0,0 @@
1
- @AGENTS.md