gitspace 0.2.0-rc.20 → 0.2.0-rc.22

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 (474) hide show
  1. package/package.json +11 -6
  2. package/.claude/settings.local.json +0 -10
  3. package/.gitspace/bundle.json +0 -50
  4. package/.gitspace/events.json +0 -11
  5. package/.gitspace/processes.json +0 -23
  6. package/.gitspace/scripts/select/01-status.sh +0 -39
  7. package/.gitspace/scripts/setup/01-install-deps.sh +0 -12
  8. package/.gitspace/scripts/setup/02-typecheck.sh +0 -16
  9. package/AGENTS.md +0 -469
  10. package/CLAUDE.md +0 -1
  11. package/bun.lock +0 -794
  12. package/docs/CONNECTION.md +0 -623
  13. package/docs/GATEWAY-WORKER.md +0 -319
  14. package/docs/GETTING-STARTED.md +0 -448
  15. package/docs/GITSPACE-PLATFORM.md +0 -1819
  16. package/docs/INFRASTRUCTURE.md +0 -1347
  17. package/docs/PROTOCOL.md +0 -619
  18. package/docs/QUICKSTART.md +0 -183
  19. package/docs/RELAY.md +0 -327
  20. package/docs/REMOTE-DESIGN.md +0 -554
  21. package/docs/ROADMAP.md +0 -564
  22. package/docs/SITE_DOCS_FIGMA_MAKE.md +0 -1176
  23. package/docs/STACK-DESIGN.md +0 -588
  24. package/docs/UNIFIED_ARCHITECTURE.md +0 -138
  25. package/experiments/pty-benchmark.ts +0 -148
  26. package/experiments/pty-latency.ts +0 -100
  27. package/experiments/router/client.ts +0 -199
  28. package/experiments/router/protocol.ts +0 -74
  29. package/experiments/router/router.ts +0 -217
  30. package/experiments/router/session.ts +0 -180
  31. package/experiments/router/test.ts +0 -133
  32. package/experiments/socket-bandwidth.ts +0 -77
  33. package/homebrew/gitspace.rb +0 -45
  34. package/landing-page/ATTRIBUTIONS.md +0 -3
  35. package/landing-page/README.md +0 -11
  36. package/landing-page/bun.lock +0 -801
  37. package/landing-page/guidelines/Guidelines.md +0 -61
  38. package/landing-page/index.html +0 -37
  39. package/landing-page/package.json +0 -90
  40. package/landing-page/postcss.config.mjs +0 -15
  41. package/landing-page/public/_redirects +0 -1
  42. package/landing-page/public/favicon.png +0 -0
  43. package/landing-page/src/app/App.tsx +0 -53
  44. package/landing-page/src/app/components/figma/ImageWithFallback.tsx +0 -27
  45. package/landing-page/src/app/components/ui/accordion.tsx +0 -66
  46. package/landing-page/src/app/components/ui/alert-dialog.tsx +0 -157
  47. package/landing-page/src/app/components/ui/alert.tsx +0 -66
  48. package/landing-page/src/app/components/ui/aspect-ratio.tsx +0 -11
  49. package/landing-page/src/app/components/ui/avatar.tsx +0 -53
  50. package/landing-page/src/app/components/ui/badge.tsx +0 -46
  51. package/landing-page/src/app/components/ui/breadcrumb.tsx +0 -109
  52. package/landing-page/src/app/components/ui/button.tsx +0 -57
  53. package/landing-page/src/app/components/ui/calendar.tsx +0 -75
  54. package/landing-page/src/app/components/ui/card.tsx +0 -92
  55. package/landing-page/src/app/components/ui/carousel.tsx +0 -241
  56. package/landing-page/src/app/components/ui/chart.tsx +0 -353
  57. package/landing-page/src/app/components/ui/checkbox.tsx +0 -32
  58. package/landing-page/src/app/components/ui/collapsible.tsx +0 -33
  59. package/landing-page/src/app/components/ui/command.tsx +0 -177
  60. package/landing-page/src/app/components/ui/context-menu.tsx +0 -252
  61. package/landing-page/src/app/components/ui/dialog.tsx +0 -135
  62. package/landing-page/src/app/components/ui/drawer.tsx +0 -132
  63. package/landing-page/src/app/components/ui/dropdown-menu.tsx +0 -257
  64. package/landing-page/src/app/components/ui/form.tsx +0 -168
  65. package/landing-page/src/app/components/ui/hover-card.tsx +0 -44
  66. package/landing-page/src/app/components/ui/input-otp.tsx +0 -77
  67. package/landing-page/src/app/components/ui/input.tsx +0 -21
  68. package/landing-page/src/app/components/ui/label.tsx +0 -24
  69. package/landing-page/src/app/components/ui/menubar.tsx +0 -276
  70. package/landing-page/src/app/components/ui/navigation-menu.tsx +0 -168
  71. package/landing-page/src/app/components/ui/pagination.tsx +0 -127
  72. package/landing-page/src/app/components/ui/popover.tsx +0 -48
  73. package/landing-page/src/app/components/ui/progress.tsx +0 -31
  74. package/landing-page/src/app/components/ui/radio-group.tsx +0 -45
  75. package/landing-page/src/app/components/ui/resizable.tsx +0 -56
  76. package/landing-page/src/app/components/ui/scroll-area.tsx +0 -58
  77. package/landing-page/src/app/components/ui/select.tsx +0 -189
  78. package/landing-page/src/app/components/ui/separator.tsx +0 -28
  79. package/landing-page/src/app/components/ui/sheet.tsx +0 -139
  80. package/landing-page/src/app/components/ui/sidebar.tsx +0 -726
  81. package/landing-page/src/app/components/ui/skeleton.tsx +0 -13
  82. package/landing-page/src/app/components/ui/slider.tsx +0 -63
  83. package/landing-page/src/app/components/ui/sonner.tsx +0 -25
  84. package/landing-page/src/app/components/ui/switch.tsx +0 -31
  85. package/landing-page/src/app/components/ui/table.tsx +0 -116
  86. package/landing-page/src/app/components/ui/tabs.tsx +0 -66
  87. package/landing-page/src/app/components/ui/textarea.tsx +0 -18
  88. package/landing-page/src/app/components/ui/toggle-group.tsx +0 -73
  89. package/landing-page/src/app/components/ui/toggle.tsx +0 -47
  90. package/landing-page/src/app/components/ui/tooltip.tsx +0 -61
  91. package/landing-page/src/app/components/ui/use-mobile.ts +0 -21
  92. package/landing-page/src/app/components/ui/utils.ts +0 -6
  93. package/landing-page/src/components/docs/DocsContent.tsx +0 -801
  94. package/landing-page/src/components/docs/DocsSidebar.tsx +0 -90
  95. package/landing-page/src/components/landing/CTA.tsx +0 -59
  96. package/landing-page/src/components/landing/Comparison.tsx +0 -84
  97. package/landing-page/src/components/landing/FaultyTerminal.tsx +0 -424
  98. package/landing-page/src/components/landing/Features.tsx +0 -201
  99. package/landing-page/src/components/landing/Hero.tsx +0 -142
  100. package/landing-page/src/components/landing/Pricing.tsx +0 -140
  101. package/landing-page/src/components/landing/Roadmap.tsx +0 -86
  102. package/landing-page/src/components/landing/Security.tsx +0 -81
  103. package/landing-page/src/components/landing/TerminalWindow.tsx +0 -27
  104. package/landing-page/src/components/landing/UseCases.tsx +0 -55
  105. package/landing-page/src/components/landing/Workflow.tsx +0 -101
  106. package/landing-page/src/components/layout/DashboardNavbar.tsx +0 -37
  107. package/landing-page/src/components/layout/Footer.tsx +0 -55
  108. package/landing-page/src/components/layout/LandingNavbar.tsx +0 -82
  109. package/landing-page/src/components/ui/badge.tsx +0 -39
  110. package/landing-page/src/components/ui/breadcrumb.tsx +0 -115
  111. package/landing-page/src/components/ui/button.tsx +0 -57
  112. package/landing-page/src/components/ui/card.tsx +0 -79
  113. package/landing-page/src/components/ui/mock-terminal.tsx +0 -68
  114. package/landing-page/src/components/ui/separator.tsx +0 -28
  115. package/landing-page/src/lib/utils.ts +0 -6
  116. package/landing-page/src/main.tsx +0 -10
  117. package/landing-page/src/pages/Dashboard.tsx +0 -133
  118. package/landing-page/src/pages/DocsPage.tsx +0 -79
  119. package/landing-page/src/pages/LandingPage.tsx +0 -31
  120. package/landing-page/src/pages/TerminalView.tsx +0 -106
  121. package/landing-page/src/styles/fonts.css +0 -0
  122. package/landing-page/src/styles/index.css +0 -3
  123. package/landing-page/src/styles/tailwind.css +0 -4
  124. package/landing-page/src/styles/theme.css +0 -181
  125. package/landing-page/vite.config.ts +0 -19
  126. package/scripts/GHOSTTY_TAB_BUG.md +0 -106
  127. package/scripts/build.ts +0 -298
  128. package/scripts/migrate-secrets.ts +0 -77
  129. package/scripts/release.ts +0 -140
  130. package/scripts/sample-events.ts +0 -263
  131. package/scripts/test-tabs-minimal.ts +0 -68
  132. package/scripts/test-tabs-workaround.ts +0 -95
  133. package/scripts/test-tabs.ts +0 -171
  134. package/src/__tests__/test-utils.ts +0 -298
  135. package/src/app/input/__tests__/sessionCommands.test.ts +0 -40
  136. package/src/app/input/sessionCommands.ts +0 -94
  137. package/src/app/session/__tests__/useAttachController.test.ts +0 -229
  138. package/src/app/session/createSessionBackend.bun.ts +0 -76
  139. package/src/app/session/createSessionBackend.web.ts +0 -104
  140. package/src/app/session/types.ts +0 -16
  141. package/src/app/session/useAttachController.ts +0 -220
  142. package/src/app/session/useProcessActions.ts +0 -201
  143. package/src/app/session/useSessionClient.ts +0 -35
  144. package/src/app/session/useWorkspaceDeleteFlow.ts +0 -170
  145. package/src/app.tui.tsx +0 -2929
  146. package/src/app.web.tsx +0 -1454
  147. package/src/commands/__tests__/connect-key.test.ts +0 -10
  148. package/src/commands/__tests__/events.test.ts +0 -201
  149. package/src/commands/__tests__/notifications.test.ts +0 -349
  150. package/src/commands/__tests__/process.test.ts +0 -251
  151. package/src/commands/__tests__/serve-messages.test.ts +0 -190
  152. package/src/commands/__tests__/serve-process-hosting.test.ts +0 -63
  153. package/src/commands/access.ts +0 -298
  154. package/src/commands/add.ts +0 -455
  155. package/src/commands/auth.ts +0 -369
  156. package/src/commands/bundle.ts +0 -232
  157. package/src/commands/config.ts +0 -242
  158. package/src/commands/connect-key.ts +0 -1
  159. package/src/commands/connect.ts +0 -576
  160. package/src/commands/directory.ts +0 -16
  161. package/src/commands/events.ts +0 -157
  162. package/src/commands/host.ts +0 -566
  163. package/src/commands/identity.ts +0 -184
  164. package/src/commands/linear.ts +0 -717
  165. package/src/commands/list.ts +0 -181
  166. package/src/commands/migrate.ts +0 -52
  167. package/src/commands/notifications.ts +0 -351
  168. package/src/commands/process.ts +0 -104
  169. package/src/commands/relay.ts +0 -315
  170. package/src/commands/remove.ts +0 -279
  171. package/src/commands/review.ts +0 -787
  172. package/src/commands/serve.ts +0 -1946
  173. package/src/commands/share.ts +0 -451
  174. package/src/commands/status.ts +0 -125
  175. package/src/commands/switch.ts +0 -361
  176. package/src/commands/tmux.ts +0 -317
  177. package/src/components/DPad.web.tsx +0 -343
  178. package/src/components/DiffViewer.web.tsx +0 -1192
  179. package/src/components/Events.tsx +0 -137
  180. package/src/components/Events.tui.tsx +0 -129
  181. package/src/components/Events.web.tsx +0 -386
  182. package/src/components/FloatingControls.web.tsx +0 -112
  183. package/src/components/FloatingJogWheel.web.tsx +0 -240
  184. package/src/components/Flow.tsx +0 -458
  185. package/src/components/Flow.tui.tsx +0 -343
  186. package/src/components/Flow.web.tsx +0 -442
  187. package/src/components/Inbox.tsx +0 -448
  188. package/src/components/Inbox.tui.tsx +0 -262
  189. package/src/components/Inbox.web.tsx +0 -329
  190. package/src/components/MachineList.tsx +0 -187
  191. package/src/components/MachineList.tui.tsx +0 -161
  192. package/src/components/MachineList.web.tsx +0 -210
  193. package/src/components/NumPad.web.tsx +0 -270
  194. package/src/components/ProjectList.tsx +0 -175
  195. package/src/components/ProjectList.tui.tsx +0 -109
  196. package/src/components/ProjectList.web.tsx +0 -143
  197. package/src/components/ProjectOnboardingStep.ts +0 -23
  198. package/src/components/ProjectOnboardingStep.tui.tsx +0 -88
  199. package/src/components/ProjectOnboardingStep.web.tsx +0 -59
  200. package/src/components/RemoteMachineScreen.tui.tsx +0 -690
  201. package/src/components/ScriptTerminal.tui.tsx +0 -160
  202. package/src/components/ScriptTerminal.web.tsx +0 -89
  203. package/src/components/SessionTerminal.tui.tsx +0 -406
  204. package/src/components/SessionTerminal.web.tsx +0 -467
  205. package/src/components/SpacesBrowser.tsx +0 -540
  206. package/src/components/SpacesBrowser.tui.tsx +0 -258
  207. package/src/components/SpacesBrowser.web.tsx +0 -332
  208. package/src/components/TerminalControls.web.tsx +0 -464
  209. package/src/components/ThreadPanel.web.tsx +0 -798
  210. package/src/components/__tests__/SpacesBrowser.test.ts +0 -541
  211. package/src/components/__tests__/SpacesBrowser.tui.test.tsx +0 -249
  212. package/src/components/__tests__/script-terminal-buffer.tui.test.ts +0 -72
  213. package/src/components/index.ts +0 -105
  214. package/src/components/review-decision-colors.ts +0 -11
  215. package/src/components/script-terminal-buffer.tui.ts +0 -37
  216. package/src/components/session-terminal-page-navigation.ts +0 -48
  217. package/src/components/terminal-bracketed-paste.tui.test.ts +0 -43
  218. package/src/components/terminal-bracketed-paste.tui.ts +0 -46
  219. package/src/core/__tests__/access.test.ts +0 -240
  220. package/src/core/__tests__/bundle-refresh.test.ts +0 -567
  221. package/src/core/__tests__/bundle.test.ts +0 -209
  222. package/src/core/__tests__/github-review.test.ts +0 -781
  223. package/src/core/__tests__/project-lifecycle.test.ts +0 -137
  224. package/src/core/__tests__/workspace-lifecycle.test.ts +0 -159
  225. package/src/core/__tests__/workspace.test.ts +0 -149
  226. package/src/core/access.ts +0 -277
  227. package/src/core/bundle-refresh.ts +0 -1064
  228. package/src/core/bundle.ts +0 -326
  229. package/src/core/config.ts +0 -405
  230. package/src/core/git.ts +0 -768
  231. package/src/core/github-review.ts +0 -761
  232. package/src/core/github.ts +0 -151
  233. package/src/core/identity.ts +0 -631
  234. package/src/core/linear.ts +0 -403
  235. package/src/core/preferences-service.ts +0 -17
  236. package/src/core/project-catalog.ts +0 -52
  237. package/src/core/project-lifecycle.ts +0 -163
  238. package/src/core/review-executor.ts +0 -316
  239. package/src/core/review.ts +0 -407
  240. package/src/core/secret-runtime.ts +0 -167
  241. package/src/core/shell.ts +0 -117
  242. package/src/core/trusted-relays.ts +0 -315
  243. package/src/core/workspace-lifecycle.ts +0 -216
  244. package/src/core/workspace.ts +0 -363
  245. package/src/hooks/__tests__/useLocalSession.tui.test.ts +0 -557
  246. package/src/hooks/index.ts +0 -8
  247. package/src/hooks/index.tui.ts +0 -32
  248. package/src/hooks/useDaemonStatus.tui.ts +0 -174
  249. package/src/hooks/useLocalSession.tui.ts +0 -395
  250. package/src/hooks/useRelayConnection.web.ts +0 -54
  251. package/src/hooks/useRemoteMachines.tui.ts +0 -166
  252. package/src/hooks/useRemoteTerminal.tui.ts +0 -22
  253. package/src/hooks/useReview.web.ts +0 -248
  254. package/src/hooks/useTerminal.web.ts +0 -36
  255. package/src/hooks/useUserActivity.ts +0 -61
  256. package/src/hooks/useVisualViewport.web.ts +0 -104
  257. package/src/index.ts +0 -1376
  258. package/src/lib/events/__tests__/collector-filter.test.ts +0 -105
  259. package/src/lib/events/__tests__/store-query.test.ts +0 -103
  260. package/src/lib/events/collector.ts +0 -494
  261. package/src/lib/events/filters.ts +0 -26
  262. package/src/lib/events/index.ts +0 -11
  263. package/src/lib/events/indexer.ts +0 -14
  264. package/src/lib/events/paths.ts +0 -69
  265. package/src/lib/events/reader.ts +0 -212
  266. package/src/lib/events/store.ts +0 -141
  267. package/src/lib/invite.web.ts +0 -58
  268. package/src/lib/preferences-service.web.ts +0 -41
  269. package/src/lib/processes/__tests__/config.test.ts +0 -83
  270. package/src/lib/processes/__tests__/names.test.ts +0 -125
  271. package/src/lib/processes/__tests__/schema.test.ts +0 -208
  272. package/src/lib/processes/__tests__/watchdog.test.ts +0 -210
  273. package/src/lib/processes/autostart.ts +0 -16
  274. package/src/lib/processes/config.ts +0 -187
  275. package/src/lib/processes/control.ts +0 -53
  276. package/src/lib/processes/editor.ts +0 -32
  277. package/src/lib/processes/events-config.ts +0 -37
  278. package/src/lib/processes/index.ts +0 -14
  279. package/src/lib/processes/instances.ts +0 -20
  280. package/src/lib/processes/manager.ts +0 -131
  281. package/src/lib/processes/names.ts +0 -71
  282. package/src/lib/processes/registry.ts +0 -26
  283. package/src/lib/processes/runner.ts +0 -211
  284. package/src/lib/processes/scheduler.ts +0 -17
  285. package/src/lib/processes/schema.ts +0 -74
  286. package/src/lib/processes/session-list.ts +0 -15
  287. package/src/lib/processes/state.ts +0 -82
  288. package/src/lib/processes/watchdog.test.ts +0 -79
  289. package/src/lib/processes/watchdog.ts +0 -106
  290. package/src/lib/remote-session/__tests__/protocol.test.ts +0 -291
  291. package/src/lib/remote-session/index.ts +0 -7
  292. package/src/lib/remote-session/protocol.ts +0 -443
  293. package/src/lib/remote-session/session-handler.ts +0 -1298
  294. package/src/lib/remote-session/workspace-scanner.ts +0 -161
  295. package/src/lib/sonner.web.ts +0 -1
  296. package/src/lib/storage/identity-store.web.ts +0 -94
  297. package/src/lib/tmux-lite/README.md +0 -81
  298. package/src/lib/tmux-lite/cli.ts +0 -855
  299. package/src/lib/tmux-lite/crypto/__tests__/helpers/handshake-runner.ts +0 -349
  300. package/src/lib/tmux-lite/crypto/__tests__/helpers/mock-relay.ts +0 -291
  301. package/src/lib/tmux-lite/crypto/__tests__/helpers/test-identities.ts +0 -142
  302. package/src/lib/tmux-lite/crypto/__tests__/integration/authorization.integration.test.ts +0 -339
  303. package/src/lib/tmux-lite/crypto/__tests__/integration/e2e-communication.integration.test.ts +0 -477
  304. package/src/lib/tmux-lite/crypto/__tests__/integration/error-handling.integration.test.ts +0 -499
  305. package/src/lib/tmux-lite/crypto/__tests__/integration/handshake.integration.test.ts +0 -371
  306. package/src/lib/tmux-lite/crypto/__tests__/integration/security.integration.test.ts +0 -573
  307. package/src/lib/tmux-lite/crypto/access-control.test.ts +0 -512
  308. package/src/lib/tmux-lite/crypto/access-control.ts +0 -320
  309. package/src/lib/tmux-lite/crypto/frames.test.ts +0 -262
  310. package/src/lib/tmux-lite/crypto/frames.ts +0 -141
  311. package/src/lib/tmux-lite/crypto/handshake.ts +0 -894
  312. package/src/lib/tmux-lite/crypto/identity.test.ts +0 -220
  313. package/src/lib/tmux-lite/crypto/identity.ts +0 -286
  314. package/src/lib/tmux-lite/crypto/index.ts +0 -51
  315. package/src/lib/tmux-lite/crypto/invites.test.ts +0 -381
  316. package/src/lib/tmux-lite/crypto/invites.ts +0 -215
  317. package/src/lib/tmux-lite/crypto/keyexchange.ts +0 -435
  318. package/src/lib/tmux-lite/crypto/keys.test.ts +0 -58
  319. package/src/lib/tmux-lite/crypto/keys.ts +0 -47
  320. package/src/lib/tmux-lite/crypto/secretbox.test.ts +0 -169
  321. package/src/lib/tmux-lite/crypto/secretbox.ts +0 -124
  322. package/src/lib/tmux-lite/handshake-handler.ts +0 -451
  323. package/src/lib/tmux-lite/process-run.integration.test.ts +0 -266
  324. package/src/lib/tmux-lite/protocol.test.ts +0 -307
  325. package/src/lib/tmux-lite/protocol.ts +0 -291
  326. package/src/lib/tmux-lite/relay-client.ts +0 -506
  327. package/src/lib/tmux-lite/server-lifecycle.test.ts +0 -212
  328. package/src/lib/tmux-lite/server.ts +0 -1412
  329. package/src/lib/tmux-lite/shell-integration.sh +0 -37
  330. package/src/lib/tmux-lite/terminal-queries.test.ts +0 -54
  331. package/src/lib/tmux-lite/terminal-queries.ts +0 -49
  332. package/src/notifications/__tests__/useNotifications.test.ts +0 -739
  333. package/src/notifications/index.ts +0 -32
  334. package/src/notifications/policy.test.ts +0 -424
  335. package/src/notifications/policy.ts +0 -139
  336. package/src/notifications/types.ts +0 -82
  337. package/src/notifications/useNotifications.ts +0 -350
  338. package/src/pages/ReviewPage.web.tsx +0 -511
  339. package/src/preferences/index.ts +0 -1
  340. package/src/preferences/types.ts +0 -9
  341. package/src/relay/__tests__/e2e-flow.test.ts +0 -1284
  342. package/src/relay/__tests__/helpers/auth.ts +0 -354
  343. package/src/relay/__tests__/helpers/ports.ts +0 -51
  344. package/src/relay/__tests__/protocol-validation.test.ts +0 -265
  345. package/src/relay/authorization.ts +0 -303
  346. package/src/relay/embedded-assets.generated.d.ts +0 -15
  347. package/src/relay/identity.ts +0 -352
  348. package/src/relay/index.ts +0 -57
  349. package/src/relay/pipes.test.ts +0 -427
  350. package/src/relay/pipes.ts +0 -195
  351. package/src/relay/protocol.ts +0 -804
  352. package/src/relay/registries.test.ts +0 -437
  353. package/src/relay/registries.ts +0 -593
  354. package/src/relay/server.test.ts +0 -1323
  355. package/src/relay/server.ts +0 -1128
  356. package/src/relay/signing.ts +0 -238
  357. package/src/relay/types.ts +0 -69
  358. package/src/relay-client/__tests__/machine-directory-client.test.ts +0 -152
  359. package/src/relay-client/__tests__/useMachineDirectory.test.ts +0 -172
  360. package/src/relay-client/adapters/browser.ts +0 -27
  361. package/src/relay-client/adapters/node.ts +0 -29
  362. package/src/relay-client/index.ts +0 -33
  363. package/src/relay-client/machine-directory-client.ts +0 -244
  364. package/src/relay-client/useMachineDirectory.ts +0 -175
  365. package/src/serve/client-session-manager.ts +0 -635
  366. package/src/serve/daemon.ts +0 -497
  367. package/src/serve/pty-session.ts +0 -236
  368. package/src/serve/types.ts +0 -174
  369. package/src/session/__tests__/backend-manager.test.ts +0 -101
  370. package/src/session/__tests__/local-session-backend.test.ts +0 -1129
  371. package/src/session/__tests__/reducer.test.ts +0 -80
  372. package/src/session/__tests__/remote-session-backend.test.ts +0 -995
  373. package/src/session/__tests__/session-name.test.ts +0 -35
  374. package/src/session/__tests__/useBundleRefreshAttachFlow.test.ts +0 -431
  375. package/src/session/__tests__/useRemoteSessionClient.test.ts +0 -424
  376. package/src/session/__tests__/workspace-shell-hooks.integration.test.ts +0 -268
  377. package/src/session/__tests__/workspace-shell-hooks.test.ts +0 -24
  378. package/src/session/adapters/browser-remote.ts +0 -101
  379. package/src/session/adapters/node-remote.ts +0 -135
  380. package/src/session/backend-key.ts +0 -5
  381. package/src/session/backend-manager.ts +0 -80
  382. package/src/session/backend.ts +0 -93
  383. package/src/session/backends/local-session-backend.ts +0 -1119
  384. package/src/session/backends/remote-session-backend.ts +0 -1378
  385. package/src/session/crypto/__tests__/web-terminal.test.ts +0 -1158
  386. package/src/session/crypto/frames.web.ts +0 -205
  387. package/src/session/crypto/handshake.web.ts +0 -396
  388. package/src/session/crypto/identity.web.ts +0 -133
  389. package/src/session/crypto/keyexchange.web.ts +0 -246
  390. package/src/session/crypto/relay-signing.web.ts +0 -53
  391. package/src/session/events.ts +0 -38
  392. package/src/session/index.ts +0 -116
  393. package/src/session/reducer.ts +0 -274
  394. package/src/session/selectors.ts +0 -28
  395. package/src/session/session-name.ts +0 -50
  396. package/src/session/types.ts +0 -101
  397. package/src/session/useBundleRefreshAttachFlow.ts +0 -608
  398. package/src/session/useRemoteSessionClient.ts +0 -424
  399. package/src/session/useSessionEngine.ts +0 -432
  400. package/src/session/workspace-shell-hooks.ts +0 -35
  401. package/src/tui/__tests__/input-text.test.ts +0 -24
  402. package/src/tui/__tests__/local-terminal-sync.test.ts +0 -82
  403. package/src/tui/__tests__/session-terminal-page-navigation.test.ts +0 -94
  404. package/src/tui/app.tsx +0 -2
  405. package/src/tui/index.ts +0 -18
  406. package/src/tui/input-text.ts +0 -38
  407. package/src/tui/local-terminal-sync.ts +0 -41
  408. package/src/types/bundle-refresh.ts +0 -42
  409. package/src/types/bundle.ts +0 -130
  410. package/src/types/config.ts +0 -287
  411. package/src/types/errors.ts +0 -292
  412. package/src/types/events.ts +0 -91
  413. package/src/types/identity.ts +0 -284
  414. package/src/types/processes.ts +0 -45
  415. package/src/types/review.ts +0 -349
  416. package/src/types/script-phase.ts +0 -3
  417. package/src/types/workspace-fuzzy.ts +0 -49
  418. package/src/types/workspace.ts +0 -151
  419. package/src/utils/__tests__/onboarding.test.ts +0 -358
  420. package/src/utils/__tests__/run-scripts.test.ts +0 -535
  421. package/src/utils/__tests__/run-workspace-scripts.test.ts +0 -406
  422. package/src/utils/__tests__/workspace-setup.integration.test.ts +0 -633
  423. package/src/utils/__tests__/workspace-state.test.ts +0 -78
  424. package/src/utils/bun-socket-writer.ts +0 -80
  425. package/src/utils/clipboard.ts +0 -53
  426. package/src/utils/deps.test.ts +0 -31
  427. package/src/utils/deps.ts +0 -145
  428. package/src/utils/device.web.ts +0 -163
  429. package/src/utils/fuzzy-match.ts +0 -125
  430. package/src/utils/hostnames.ts +0 -43
  431. package/src/utils/hunk-header.ts +0 -17
  432. package/src/utils/id.ts +0 -9
  433. package/src/utils/logger.ts +0 -127
  434. package/src/utils/markdown.ts +0 -254
  435. package/src/utils/normalize-env-key.ts +0 -13
  436. package/src/utils/onboarding.ts +0 -279
  437. package/src/utils/prompts.ts +0 -176
  438. package/src/utils/run-commands.ts +0 -112
  439. package/src/utils/run-scripts.ts +0 -337
  440. package/src/utils/run-workspace-scripts.ts +0 -355
  441. package/src/utils/sanitize.test.ts +0 -149
  442. package/src/utils/sanitize.ts +0 -162
  443. package/src/utils/secrets.ts +0 -836
  444. package/src/utils/shell-escape.ts +0 -40
  445. package/src/utils/utf8.ts +0 -79
  446. package/src/utils/workspace-id.ts +0 -55
  447. package/src/utils/workspace-state.ts +0 -427
  448. package/src/version.generated.d.ts +0 -2
  449. package/todo-security.md +0 -92
  450. package/tsconfig.json +0 -29
  451. package/web/README.md +0 -73
  452. package/web/bun.lock +0 -675
  453. package/web/eslint.config.js +0 -23
  454. package/web/index.css +0 -249
  455. package/web/index.html +0 -16
  456. package/web/main.tsx +0 -10
  457. package/web/package.json +0 -39
  458. package/web/public/vite.svg +0 -1
  459. package/web/tsconfig.app.json +0 -35
  460. package/web/tsconfig.json +0 -7
  461. package/web/tsconfig.node.json +0 -26
  462. package/web/vite.config.ts +0 -39
  463. package/worker/bun.lock +0 -237
  464. package/worker/package.json +0 -22
  465. package/worker/schema.sql +0 -96
  466. package/worker/src/handlers/auth.ts +0 -451
  467. package/worker/src/handlers/subdomains.ts +0 -376
  468. package/worker/src/handlers/user.ts +0 -98
  469. package/worker/src/index.ts +0 -70
  470. package/worker/src/middleware/auth.ts +0 -152
  471. package/worker/src/services/cloudflare.ts +0 -609
  472. package/worker/src/types.ts +0 -96
  473. package/worker/tsconfig.json +0 -15
  474. package/worker/wrangler.toml +0 -26
package/package.json CHANGED
@@ -1,10 +1,15 @@
1
1
  {
2
2
  "name": "gitspace",
3
- "version": "0.2.0-rc.20",
3
+ "version": "0.2.0-rc.22",
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",
@@ -17,10 +22,10 @@
17
22
  "relay": "bun src/relay/index.ts"
18
23
  },
19
24
  "optionalDependencies": {
20
- "@gitspace/darwin-arm64": "0.2.0-rc.20",
21
- "@gitspace/darwin-x64": "0.2.0-rc.20",
22
- "@gitspace/linux-x64": "0.2.0-rc.20",
23
- "@gitspace/linux-arm64": "0.2.0-rc.20"
25
+ "@gitspace/darwin-arm64": "0.2.0-rc.22",
26
+ "@gitspace/darwin-x64": "0.2.0-rc.22",
27
+ "@gitspace/linux-x64": "0.2.0-rc.22",
28
+ "@gitspace/linux-arm64": "0.2.0-rc.22"
24
29
  },
25
30
  "keywords": [
26
31
  "cli",
@@ -35,7 +40,7 @@
35
40
  "homepage": "https://gitspace.sh",
36
41
  "repository": {
37
42
  "type": "git",
38
- "url": "https://github.com/inkibra/gitspace.sh.git"
43
+ "url": "https://github.com/inKibra/gitspace.sh.git"
39
44
  },
40
45
  "author": "inKibra, Inc.",
41
46
  "license": "SEE LICENSE IN LICENSE",
@@ -1,10 +0,0 @@
1
- {
2
- "permissions": {
3
- "allow": [
4
- "Bash(gh api:*)",
5
- "Bash(gh search code:*)",
6
- "Bash(curl:*)",
7
- "Bash(bun scripts/build.ts:*)"
8
- ]
9
- }
10
- }
@@ -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,11 +0,0 @@
1
- {
2
- "savedFilters": [
3
- {
4
- "name": "Sample process events",
5
- "filter": {
6
- "processName": "sample-events"
7
- },
8
- "sinceMinutes": 60
9
- }
10
- ]
11
- }
@@ -1,23 +0,0 @@
1
- {
2
- "processes": [
3
- {
4
- "name": "sample-events",
5
- "command": "bun",
6
- "args": ["scripts/sample-events.ts"],
7
- "autostart": false,
8
- "events": {
9
- "keepRawOutput": false,
10
- "correlationField": "requestId",
11
- "aggregateMode": "stream",
12
- "updateIntervalMs": 200,
13
- "maxTimeline": 50
14
- },
15
- "restart": {
16
- "policy": "always",
17
- "maxAttempts": 10,
18
- "backoffMs": 2000,
19
- "maxBackoffMs": 15000
20
- }
21
- }
22
- ]
23
- }
@@ -1,39 +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 using exact keys and uppercase snake-case aliases.
7
- # Example aliases: DEVELOPER_NAME, EXAMPLE_API_TOKEN
8
-
9
- WORKSPACE_NAME=$1
10
- REPOSITORY=$2
11
-
12
- echo ""
13
- echo "=== Workspace: $WORKSPACE_NAME ==="
14
- echo ""
15
-
16
- # Show bundle values (proof of concept)
17
- if [ -n "$DEVELOPER_NAME" ]; then
18
- echo "Welcome back, $DEVELOPER_NAME!"
19
- fi
20
-
21
- # Show that we have access to the secret (masked)
22
- if [ -n "$EXAMPLE_API_TOKEN" ]; then
23
- # Only show first 4 characters to prove we have access
24
- TOKEN_PREVIEW="${EXAMPLE_API_TOKEN:0:4}..."
25
- echo "API Token available: $TOKEN_PREVIEW (stored in OS keychain)"
26
- fi
27
-
28
- echo ""
29
-
30
- # Show git status summary
31
- echo "Git Status:"
32
- git status --short
33
-
34
- # Show branch info
35
- echo ""
36
- echo "Branch:"
37
- git branch --show-current
38
-
39
- 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
package/AGENTS.md DELETED
@@ -1,469 +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 in `.gitspace/scripts/` (pre, setup, select, remove 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, 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
- - Scripts are sourced from `.gitspace/scripts/<phase>/` in the workspace (version-controlled)
31
-
32
- 3. **Sessions**: PTY terminal sessions managed by tmux-lite
33
- - Can be attached from multiple clients
34
- - State maintained by xterm-headless on server
35
-
36
- 4. **Identity**: Cryptographic keypair per machine/client
37
- - Ed25519 for signing (proving identity)
38
- - X25519 for key exchange (establishing encryption)
39
- - Stored in `~/gitspace/.identity/` directory:
40
- - `keypair.json` - Encrypted identity keypair
41
- - Access list: `~/gitspace/.access.json` - Authorized client public keys
42
- - Machine info: `~/gitspace/.machine.json` - Machine registration info
43
- - Relay config: `~/gitspace/.relay.json` - Relay configuration cache
44
-
45
- 5. **Relay**: WebSocket server for routing encrypted traffic
46
- - Connects machines to clients through NAT/firewalls
47
- - Cannot decrypt terminal content (E2E encryption)
48
-
49
- ### Directory Structure
50
-
51
- ```
52
- src/
53
- ├── index.ts # Entry point (TUI or CLI dispatch)
54
- ├── commands/ # CLI command implementations (17 files)
55
- │ ├── access.ts # Access control list (add/list/remove)
56
- │ ├── add.ts # Add projects/workspaces
57
- │ ├── auth.ts # GitHub OAuth for gitspace.sh
58
- │ ├── connect.ts # Connect to remote machine
59
- │ ├── directory.ts # Get project directory path
60
- │ ├── host.ts # Subdomain hosting (reserve/release/list)
61
- │ ├── identity.ts # Identity management (init/show)
62
- │ ├── linear.ts # Linear integration (setup/show/clear)
63
- │ ├── list.ts # List projects/workspaces
64
- │ ├── machine.ts # Remote machine management (invite/list)
65
- │ ├── relay.ts # Relay server (start/token)
66
- │ ├── remove.ts # Remove projects/workspaces
67
- │ ├── serve.ts # Machine daemon for remote access
68
- │ ├── share.ts # Create invite tokens
69
- │ ├── status.ts # Unified daemon status display
70
- │ ├── switch.ts # Switch projects/workspaces
71
- │ └── tmux.ts # tmux-lite CLI commands
72
- ├── core/ # Core business logic (8 files)
73
- │ ├── access.ts # Access list management
74
- │ ├── bundle.ts # Project template bundles
75
- │ ├── config.ts # Configuration management
76
- │ ├── git.ts # Git operations (worktrees, branches)
77
- │ ├── github.ts # GitHub API (via gh CLI)
78
- │ ├── identity.ts # Machine identity management
79
- │ ├── linear.ts # Linear API integration
80
- │ └── shell.ts # Subshell spawning
81
- ├── lib/
82
- │ ├── tmux-lite/ # Terminal multiplexer library
83
- │ │ ├── cli.ts # CLI interface for tmux-lite
84
- │ │ ├── server.ts # Session manager with xterm-headless
85
- │ │ ├── protocol.ts # Frame format (PTY/CONTROL)
86
- │ │ ├── handshake-handler.ts # X3DH handshake management
87
- │ │ ├── relay-client.ts # WebSocket client for relay
88
- │ │ └── crypto/ # Cryptography implementations
89
- │ │ ├── identity.ts # Ed25519/X25519 key generation
90
- │ │ ├── keyexchange.ts # X25519 ECDH
91
- │ │ ├── secretbox.ts # AES-256-GCM encryption
92
- │ │ ├── frames.ts # Encrypted frame format
93
- │ │ ├── handshake.ts # X3DH protocol steps
94
- │ │ ├── invites.ts # Signed invite tokens
95
- │ │ └── access-control.ts # ACL checking
96
- │ └── remote-session/ # Remote session handling
97
- │ ├── session-handler.ts # Handle remote client commands
98
- │ └── workspace-scanner.ts # Scan workspace info
99
- ├── relay/ # Relay server (8 files)
100
- │ ├── index.ts # Entry point
101
- │ ├── server.ts # WebSocket routing server
102
- │ ├── protocol.ts # Message types and validation
103
- │ ├── registries.ts # Machine/invite/auth/global access registries
104
- │ ├── jwt.ts # JWT token creation/verification (HMAC + Ed25519)
105
- │ ├── pipes.ts # Pipe abstraction for data routing
106
- │ └── types.ts # WebSocketData, RelayConfig types
107
- ├── serve/ # Machine daemon (4 files)
108
- │ ├── client-session-manager.ts # Client connection handling
109
- │ ├── daemon.ts # Daemon lifecycle (PID, status socket)
110
- │ ├── pty-session.ts # PTY session management
111
- │ └── types.ts # ServeOptions, permissions
112
- ├── shared/ # Cross-platform components
113
- │ ├── components/ # Shared UI components (16 files)
114
- │ │ ├── MachineList.tsx # Logic + hooks
115
- │ │ ├── MachineList.web.tsx # Web rendering
116
- │ │ ├── MachineList.tui.tsx # TUI rendering
117
- │ │ ├── SpacesBrowser.tsx # Workspace browser logic
118
- │ │ ├── SpacesBrowser.web.tsx
119
- │ │ ├── SpacesBrowser.tui.tsx
120
- │ │ ├── Inbox.tsx # Notification system
121
- │ │ ├── Inbox.web.tsx
122
- │ │ ├── Inbox.tui.tsx
123
- │ │ ├── Flow.tsx # Modal dialog system
124
- │ │ ├── Flow.web.tsx
125
- │ │ ├── Flow.tui.tsx
126
- │ │ ├── ProjectList.tsx
127
- │ │ ├── ProjectList.web.tsx
128
- │ │ └── ProjectList.tui.tsx
129
- │ ├── providers/ # Machine access abstraction
130
- │ │ ├── MachineProvider.ts # Interface definition
131
- │ │ └── LocalMachineProvider.ts # Direct tmux-lite access
132
- │ ├── hooks/
133
- │ │ └── useUserActivity.ts # Activity tracking for notifications
134
- │ └── types.ts # Shared type definitions
135
- ├── tui/ # Terminal UI (OpenTUI)
136
- │ ├── index.ts # TUI entry point
137
- │ ├── app.tsx # Main TUI application
138
- │ ├── components/
139
- │ │ ├── RemoteMachineScreen.tsx # Remote machine browser screen
140
- │ │ └── RemoteTerminal.tsx # Embedded session terminal
141
- │ └── hooks/
142
- │ ├── useRemoteMachines.ts
143
- │ ├── useRemoteTerminal.ts
144
- │ ├── useLocalSession.ts
145
- │ └── useDaemonStatus.ts
146
- ├── web/ # Web application (Vite + React)
147
- │ └── src/
148
- │ ├── App.tsx # Main web app
149
- │ ├── components/
150
- │ │ └── Terminal.tsx
151
- │ ├── hooks/
152
- │ │ ├── useRelayConnection.ts
153
- │ │ └── useTerminal.ts
154
- │ └── lib/
155
- │ ├── crypto/ # Client-side crypto (same as server)
156
- │ └── storage/ # LocalStorage identity
157
- ├── types/ # TypeScript type definitions
158
- │ ├── bundle.ts # Bundle format
159
- │ ├── config.ts # Global/project config
160
- │ ├── errors.ts # Error types
161
- │ ├── identity.ts # Keypairs, access, invites, X3DH
162
- │ ├── workspace.ts # Workspace types
163
- │ └── workspace-fuzzy.ts # Fuzzy search types
164
- └── utils/ # Utility functions (13 files)
165
- ├── bun-socket-writer.ts # Buffered socket writing
166
- ├── deps.ts # Dependency checking
167
- ├── fuzzy-match.ts # Fuzzy matching
168
- ├── logger.ts # Colored logging
169
- ├── markdown.ts # Markdown rendering
170
- ├── onboarding.ts # Bundle onboarding
171
- ├── prompts.ts # User prompts
172
- ├── run-commands.ts # Command execution
173
- ├── run-scripts.ts # Script discovery/execution
174
- ├── sanitize.ts # String sanitization
175
- ├── secrets.ts # Bun.secrets integration
176
- ├── shell-escape.ts # POSIX escaping
177
- └── workspace-state.ts # gitspace.lock marker
178
- ```
179
-
180
- ## CLI Commands
181
-
182
- ### Workspace Management
183
- | Command | Description |
184
- |---------|-------------|
185
- | `gssh` | Launch TUI (no args) |
186
- | `gssh add project` | Add a new project from GitHub |
187
- | `gssh add <name>` | Create workspace in current project |
188
- | `gssh switch project [name]` | Switch to a project |
189
- | `gssh switch [name]` | Switch to a workspace |
190
- | `gssh list projects` | List all projects |
191
- | `gssh list workspaces` | List workspaces in current project |
192
- | `gssh remove workspace [name]` | Remove a workspace |
193
- | `gssh remove project [name]` | Remove a project |
194
- | `gssh directory` | Print current project directory |
195
-
196
- ### Identity & Access
197
- | Command | Description |
198
- |---------|-------------|
199
- | `gssh identity init` | Create machine identity keypair |
200
- | `gssh identity show` | Display identity fingerprint |
201
- | `gssh access add <pubkey>` | Add authorized client |
202
- | `gssh access list` | List authorized clients |
203
- | `gssh access remove <key>` | Remove client access |
204
- | `gssh share create` | Create invite token |
205
-
206
- ### Remote Access
207
- | Command | Description |
208
- |---------|-------------|
209
- | `gssh serve` | Start machine daemon (foreground) |
210
- | `gssh serve start` | Start machine daemon (background) |
211
- | `gssh serve stop` | Stop machine daemon |
212
- | `gssh connect <token>` | Connect to remote machine |
213
- | `gssh status` | Show status of all daemons |
214
-
215
- ### Relay Server
216
- | Command | Description |
217
- |---------|-------------|
218
- | `gssh relay start` | Start relay server |
219
- | `gssh relay authorize <pubkey>` | Authorize a machine on relay |
220
- | `gssh relay revoke <id>` | Revoke machine authorization |
221
- | `gssh relay machines` | List authorized machines |
222
- | `gssh relay trusted` | List trusted relays |
223
- | `gssh relay untrust <url>` | Remove relay from trusted list |
224
-
225
- ### tmux-lite Daemon
226
- | Command | Description |
227
- |---------|-------------|
228
- | `gssh tmux start` | Start tmux-lite server daemon |
229
- | `gssh tmux stop` | Stop tmux-lite daemon |
230
- | `gssh tmux status` | Show tmux-lite daemon status |
231
- | `gssh tmux list` | List active terminal sessions |
232
-
233
- ### Machine Management
234
- | Command | Description |
235
- |---------|-------------|
236
- | `gssh machine invite` | Create invite for remote machine to join relay |
237
- | `gssh machine list` | List machines on relay (stub) |
238
- | `gssh machine remove <id>` | Remove machine from relay (stub) |
239
-
240
- ### Authentication (gitspace.sh)
241
- | Command | Description |
242
- |---------|-------------|
243
- | `gssh auth login` | Login via GitHub OAuth device flow |
244
- | `gssh auth logout` | Clear local credentials |
245
- | `gssh auth status` | Show authentication status |
246
-
247
- ### Hosting (gitspace.sh)
248
- | Command | Description |
249
- |---------|-------------|
250
- | `gssh host reserve <name>` | Reserve subdomain on gitspace.sh |
251
- | `gssh host release [name]` | Release a subdomain |
252
- | `gssh host list` | List your subdomains |
253
- | `gssh host set-primary <name>` | Set primary subdomain |
254
- | `gssh host status` | Show hosting status |
255
-
256
- ### Linear Integration
257
- | Command | Description |
258
- |---------|-------------|
259
- | `gssh linear setup` | Configure Linear integration (API key + teams) |
260
- | `gssh linear setup --project <name>` | Configure Linear for a specific project |
261
- | `gssh linear show` | Show user-level Linear configuration |
262
- | `gssh linear show --project <name>` | Show project-specific Linear configuration |
263
- | `gssh linear clear` | Clear user-level Linear configuration |
264
- | `gssh linear clear --project <name>` | Clear project-specific Linear configuration |
265
-
266
- ### Bundle Management
267
- | Command | Description |
268
- |---------|-------------|
269
- | `gssh bundle status` | Show bundle status for current project |
270
- | `gssh bundle refresh` | Re-run bundle onboarding (keeps previous values as defaults) |
271
- | `gssh bundle refresh --force` | Force refresh even if no changes detected |
272
-
273
- ## Remote Access Architecture
274
-
275
- ```
276
- ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
277
- │ Your Machine │ │ Relay Server │ │ Remote Client │
278
- │ │ │ │ │ │
279
- │ gssh serve │◀═════▶│ Routing only │◀═════▶│ gssh connect │
280
- │ (PTY sessions) │ WebSocket │ E2E encrypted │ WebSocket │ or browser │
281
- │ │ │ (can't decrypt)│ │ │
282
- └─────────────────┘ └─────────────────┘ └─────────────────┘
283
- ```
284
-
285
- ### Connection Flow (gitspace.sh Hosting)
286
-
287
- 1. User logs in: `gssh auth login` (GitHub OAuth)
288
- 2. User reserves subdomain: `gssh host reserve <name>`
289
- 3. Machine runs `gssh serve start` (auto-starts local relay + cloudflared tunnel)
290
- 4. Client connects via web: `https://<name>.gitspace.sh`
291
- 5. X3DH handshake establishes session keys
292
- 6. All terminal I/O is E2E encrypted
293
-
294
- ### Connection Flow (Self-Hosted Relay)
295
-
296
- 1. Machine runs `gssh serve start --relay ws://relay:4480/ws`
297
- 2. Machine registers with relay (Ed25519 challenge-response auth)
298
- 3. Machine creates invite: `gssh share create`
299
- 4. Client connects with invite: `gssh connect <token>`
300
- 5. X3DH handshake establishes session keys
301
- 6. All terminal I/O is E2E encrypted
302
-
303
- ### Cryptographic Primitives
304
-
305
- | Purpose | Algorithm |
306
- |---------|-----------|
307
- | Identity signing | Ed25519 |
308
- | Key exchange | X25519 |
309
- | Symmetric encryption | AES-256-GCM |
310
- | Key derivation | HKDF-SHA256 |
311
- | Relay authentication | Ed25519 challenge-response |
312
-
313
- ## TUI/Web Shared Component Pattern
314
-
315
- Components are split into three files:
316
- - `Component.tsx` - Logic/hooks (React-compatible)
317
- - `Component.web.tsx` - Web rendering (React DOM)
318
- - `Component.tui.tsx` - TUI rendering (OpenTUI)
319
-
320
- This allows shared business logic with platform-specific rendering.
321
-
322
- ### MachineProvider Abstraction
323
-
324
- ```typescript
325
- interface MachineProvider {
326
- getMachineInfo(): Promise<MachineInfo>;
327
- listProjects(): Promise<Project[]>;
328
- listWorkspaces(project: string): Promise<Workspace[]>;
329
- createSession(options): Promise<string>;
330
- attachSession(sessionId): Promise<SessionStream>;
331
- detachSession(sessionId): Promise<void>;
332
- getInbox(): Promise<InboxItem[]>;
333
- }
334
- ```
335
-
336
- - `LocalMachineProvider`: Direct filesystem + tmux-lite CLI
337
- - Remote machine access in UI now uses shared relay/session hooks + backend adapters (`shared/relay/*`, `shared/session/*`)
338
-
339
- ## Development Workflow
340
-
341
- ### Building and Testing
342
-
343
- ```bash
344
- # Type check
345
- bun run typecheck
346
-
347
- # Build
348
- bun run build
349
-
350
- # Run TUI
351
- bun src/index.ts
352
-
353
- # Run relay (uses Ed25519 identity from keychain)
354
- bun src/index.ts relay start
355
-
356
- # Run serve with gitspace.sh hosting (requires auth login + host reserve)
357
- bun src/index.ts serve start
358
-
359
- # Run serve with self-hosted relay
360
- bun src/index.ts serve start --relay ws://localhost:4480/ws
361
- ```
362
-
363
- ### Code Style
364
-
365
- - **TypeScript**: ESM modules, strict mode
366
- - **Error Handling**: Use typed errors from `types/errors.ts`
367
- - **Logging**: Use `logger` from `utils/logger.ts`
368
- - **User Prompts**: Use `utils/prompts.ts`
369
- - **Crypto**: Use `lib/tmux-lite/crypto/` modules
370
-
371
- ## Key Files Reference
372
-
373
- | Purpose | Location |
374
- |---------|----------|
375
- | Entry point | `src/index.ts` |
376
- | Config management | `src/core/config.ts` |
377
- | Identity/crypto | `src/core/identity.ts`, `src/lib/tmux-lite/crypto/` |
378
- | Access control | `src/core/access.ts` |
379
- | Relay server | `src/relay/server.ts` |
380
- | Relay protocol | `src/relay/protocol.ts` |
381
- | Relay registries | `src/relay/registries.ts` |
382
- | JWT tokens | `src/relay/jwt.ts` (HMAC + Ed25519) |
383
- | Machine daemon | `src/commands/serve.ts`, `src/serve/` |
384
- | Daemon lifecycle | `src/serve/daemon.ts` |
385
- | X3DH handshake | `src/lib/tmux-lite/handshake-handler.ts` |
386
- | Session management | `src/lib/tmux-lite/server.ts` |
387
- | Frame protocol | `src/lib/tmux-lite/protocol.ts` |
388
- | Encrypted frames | `src/lib/tmux-lite/crypto/frames.ts` |
389
- | Secrets/keychain | `src/utils/secrets.ts` |
390
- | GitHub auth | `src/commands/auth.ts` |
391
- | Hosting commands | `src/commands/host.ts` |
392
-
393
- ## External Dependencies
394
-
395
- **Runtime:**
396
- - `commander` - CLI framework
397
- - `@inquirer/prompts` - User prompts
398
- - `@opentui/core` - Terminal UI framework
399
- - `@linear/sdk` - Linear API client
400
- - `chalk` - Terminal colors
401
- - `ws` - WebSocket (relay)
402
- - `@noble/curves` - Ed25519/X25519 crypto
403
- - `@noble/ciphers` - AES-GCM encryption
404
- - `@noble/hashes` - HKDF, SHA256
405
- - `@xterm/headless` - Terminal state tracking
406
- - `ghostty-opentui` - TUI terminal embedding
407
-
408
- **System Commands:**
409
- - `gh` - GitHub CLI
410
- - `git` - Git operations
411
-
412
- ## Documentation
413
-
414
- | File | Description |
415
- |------|-------------|
416
- | `README.md` | User-facing documentation |
417
- | `AGENTS.md` | This file - development guide |
418
- | `docs/PROTOCOL.md` | Relay message protocol |
419
- | `docs/RELAY.md` | Relay server architecture |
420
- | `docs/GETTING-STARTED.md` | Remote access setup guide |
421
- | `docs/CONNECTION.md` | Connection state management |
422
- | `docs/REMOTE-DESIGN.md` | E2E encryption design (identity-based) |
423
- | `docs/UNIFIED_ARCHITECTURE.md` | TUI/Web architecture plan |
424
- | `docs/GATEWAY-WORKER.md` | Cloudflare Worker gateway spec |
425
- | `docs/ROADMAP.md` | Feature roadmap and vision |
426
- | `docs/INFRASTRUCTURE.md` | Future VM infrastructure (not implemented) |
427
- | `docs/STACK-DESIGN.md` | Future stacked PR feature (not implemented) |
428
-
429
- ---
430
-
431
- ## Configuration
432
-
433
- ### Config Files
434
-
435
- | File | Location | Purpose |
436
- |------|----------|---------|
437
- | Global config | `~/gitspace/.config.json` | Current project, defaults |
438
- | Project config | `~/gitspace/{project}/.config.json` | Project-specific settings |
439
- | Identity | `~/gitspace/.identity/` | Keypairs |
440
- | Access list | `~/gitspace/.access.json` | Authorized client public keys |
441
- | Machine info | `~/gitspace/.machine.json` | Machine registration |
442
- | Relay config | `~/gitspace/.relay.json` | Relay configuration cache |
443
- | Host config | `~/gitspace/host.json` | gitspace.sh subdomain config |
444
- | Daemon state | `~/gitspace/.serve/` | PID files, status sockets |
445
- | tmux-lite state | `/tmp/` | Session data (configurable via `TMUX_LITE_SESSION_DIR`) |
446
-
447
- ### Environment Variables
448
-
449
- | Variable | Description | Default |
450
- |----------|-------------|---------|
451
- | `RELAY_PORT` | Relay server port | `4480` |
452
- | `RELAY_BIND` | Relay bind address | `0.0.0.0` |
453
- | `RELAY_PRIVATE_KEY` | Base64 Ed25519 private key | Uses keychain |
454
- | `RELAY_LABEL` | Label for relay identity | None |
455
- | `GITSPACE_API_URL` | gitspace.sh API URL | `https://api.gitspace.sh` |
456
-
457
- ### Default Values
458
-
459
- | Setting | Default | Location |
460
- |---------|---------|----------|
461
- | Projects directory | `~/gitspace` | Global config |
462
- | Base branch | `main` | Global/project config |
463
- | Stale workspace days | `30` | Global config |
464
- | Relay port | `4480` | CLI/env |
465
-
466
- ---
467
-
468
- **Last Updated**: 2026-01
469
- **Runtime**: Bun 1.3+
package/CLAUDE.md DELETED
@@ -1 +0,0 @@
1
- @AGENTS.md