gitspace 0.2.0-rc.20 → 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/package.json +11 -6
- package/.claude/settings.local.json +0 -10
- package/.gitspace/bundle.json +0 -50
- package/.gitspace/events.json +0 -11
- package/.gitspace/processes.json +0 -23
- package/.gitspace/scripts/select/01-status.sh +0 -39
- package/.gitspace/scripts/setup/01-install-deps.sh +0 -12
- package/.gitspace/scripts/setup/02-typecheck.sh +0 -16
- package/AGENTS.md +0 -469
- package/CLAUDE.md +0 -1
- package/bun.lock +0 -794
- 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 -183
- package/docs/RELAY.md +0 -327
- package/docs/REMOTE-DESIGN.md +0 -554
- package/docs/ROADMAP.md +0 -564
- package/docs/SITE_DOCS_FIGMA_MAKE.md +0 -1176
- package/docs/STACK-DESIGN.md +0 -588
- package/docs/UNIFIED_ARCHITECTURE.md +0 -138
- 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 -801
- package/landing-page/src/components/docs/DocsSidebar.tsx +0 -90
- 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/scripts/GHOSTTY_TAB_BUG.md +0 -106
- package/scripts/build.ts +0 -298
- package/scripts/migrate-secrets.ts +0 -77
- package/scripts/release.ts +0 -140
- package/scripts/sample-events.ts +0 -263
- package/scripts/test-tabs-minimal.ts +0 -68
- package/scripts/test-tabs-workaround.ts +0 -95
- package/scripts/test-tabs.ts +0 -171
- package/src/__tests__/test-utils.ts +0 -298
- package/src/app/input/__tests__/sessionCommands.test.ts +0 -40
- package/src/app/input/sessionCommands.ts +0 -94
- package/src/app/session/__tests__/useAttachController.test.ts +0 -229
- package/src/app/session/createSessionBackend.bun.ts +0 -76
- package/src/app/session/createSessionBackend.web.ts +0 -104
- package/src/app/session/types.ts +0 -16
- package/src/app/session/useAttachController.ts +0 -220
- package/src/app/session/useProcessActions.ts +0 -201
- package/src/app/session/useSessionClient.ts +0 -35
- package/src/app/session/useWorkspaceDeleteFlow.ts +0 -170
- package/src/app.tui.tsx +0 -2929
- package/src/app.web.tsx +0 -1454
- package/src/commands/__tests__/connect-key.test.ts +0 -10
- package/src/commands/__tests__/events.test.ts +0 -201
- package/src/commands/__tests__/notifications.test.ts +0 -349
- package/src/commands/__tests__/process.test.ts +0 -251
- package/src/commands/__tests__/serve-messages.test.ts +0 -190
- package/src/commands/__tests__/serve-process-hosting.test.ts +0 -63
- package/src/commands/access.ts +0 -298
- package/src/commands/add.ts +0 -455
- package/src/commands/auth.ts +0 -369
- package/src/commands/bundle.ts +0 -232
- package/src/commands/config.ts +0 -242
- package/src/commands/connect-key.ts +0 -1
- package/src/commands/connect.ts +0 -576
- package/src/commands/directory.ts +0 -16
- package/src/commands/events.ts +0 -157
- package/src/commands/host.ts +0 -566
- package/src/commands/identity.ts +0 -184
- package/src/commands/linear.ts +0 -717
- package/src/commands/list.ts +0 -181
- package/src/commands/migrate.ts +0 -52
- package/src/commands/notifications.ts +0 -351
- package/src/commands/process.ts +0 -104
- package/src/commands/relay.ts +0 -315
- package/src/commands/remove.ts +0 -279
- package/src/commands/review.ts +0 -787
- package/src/commands/serve.ts +0 -1946
- package/src/commands/share.ts +0 -451
- package/src/commands/status.ts +0 -125
- package/src/commands/switch.ts +0 -361
- package/src/commands/tmux.ts +0 -317
- package/src/components/DPad.web.tsx +0 -343
- package/src/components/DiffViewer.web.tsx +0 -1192
- package/src/components/Events.tsx +0 -137
- package/src/components/Events.tui.tsx +0 -129
- package/src/components/Events.web.tsx +0 -386
- package/src/components/FloatingControls.web.tsx +0 -112
- package/src/components/FloatingJogWheel.web.tsx +0 -240
- package/src/components/Flow.tsx +0 -458
- package/src/components/Flow.tui.tsx +0 -343
- package/src/components/Flow.web.tsx +0 -442
- package/src/components/Inbox.tsx +0 -448
- package/src/components/Inbox.tui.tsx +0 -262
- package/src/components/Inbox.web.tsx +0 -329
- package/src/components/MachineList.tsx +0 -187
- package/src/components/MachineList.tui.tsx +0 -161
- package/src/components/MachineList.web.tsx +0 -210
- package/src/components/NumPad.web.tsx +0 -270
- package/src/components/ProjectList.tsx +0 -175
- package/src/components/ProjectList.tui.tsx +0 -109
- package/src/components/ProjectList.web.tsx +0 -143
- package/src/components/ProjectOnboardingStep.ts +0 -23
- package/src/components/ProjectOnboardingStep.tui.tsx +0 -88
- package/src/components/ProjectOnboardingStep.web.tsx +0 -59
- package/src/components/RemoteMachineScreen.tui.tsx +0 -690
- package/src/components/ScriptTerminal.tui.tsx +0 -160
- package/src/components/ScriptTerminal.web.tsx +0 -89
- package/src/components/SessionTerminal.tui.tsx +0 -406
- package/src/components/SessionTerminal.web.tsx +0 -467
- package/src/components/SpacesBrowser.tsx +0 -540
- package/src/components/SpacesBrowser.tui.tsx +0 -258
- package/src/components/SpacesBrowser.web.tsx +0 -332
- package/src/components/TerminalControls.web.tsx +0 -464
- package/src/components/ThreadPanel.web.tsx +0 -798
- package/src/components/__tests__/SpacesBrowser.test.ts +0 -541
- package/src/components/__tests__/SpacesBrowser.tui.test.tsx +0 -249
- package/src/components/__tests__/script-terminal-buffer.tui.test.ts +0 -72
- package/src/components/index.ts +0 -105
- package/src/components/review-decision-colors.ts +0 -11
- package/src/components/script-terminal-buffer.tui.ts +0 -37
- package/src/components/session-terminal-page-navigation.ts +0 -48
- package/src/components/terminal-bracketed-paste.tui.test.ts +0 -43
- package/src/components/terminal-bracketed-paste.tui.ts +0 -46
- package/src/core/__tests__/access.test.ts +0 -240
- package/src/core/__tests__/bundle-refresh.test.ts +0 -567
- package/src/core/__tests__/bundle.test.ts +0 -209
- package/src/core/__tests__/github-review.test.ts +0 -781
- package/src/core/__tests__/project-lifecycle.test.ts +0 -137
- package/src/core/__tests__/workspace-lifecycle.test.ts +0 -159
- package/src/core/__tests__/workspace.test.ts +0 -149
- package/src/core/access.ts +0 -277
- package/src/core/bundle-refresh.ts +0 -1064
- package/src/core/bundle.ts +0 -326
- package/src/core/config.ts +0 -405
- package/src/core/git.ts +0 -768
- package/src/core/github-review.ts +0 -761
- package/src/core/github.ts +0 -151
- package/src/core/identity.ts +0 -631
- package/src/core/linear.ts +0 -403
- package/src/core/preferences-service.ts +0 -17
- package/src/core/project-catalog.ts +0 -52
- package/src/core/project-lifecycle.ts +0 -163
- package/src/core/review-executor.ts +0 -316
- package/src/core/review.ts +0 -407
- package/src/core/secret-runtime.ts +0 -167
- package/src/core/shell.ts +0 -117
- package/src/core/trusted-relays.ts +0 -315
- package/src/core/workspace-lifecycle.ts +0 -216
- package/src/core/workspace.ts +0 -363
- package/src/hooks/__tests__/useLocalSession.tui.test.ts +0 -557
- package/src/hooks/index.ts +0 -8
- package/src/hooks/index.tui.ts +0 -32
- package/src/hooks/useDaemonStatus.tui.ts +0 -174
- package/src/hooks/useLocalSession.tui.ts +0 -395
- package/src/hooks/useRelayConnection.web.ts +0 -54
- package/src/hooks/useRemoteMachines.tui.ts +0 -166
- package/src/hooks/useRemoteTerminal.tui.ts +0 -22
- package/src/hooks/useReview.web.ts +0 -248
- package/src/hooks/useTerminal.web.ts +0 -36
- package/src/hooks/useUserActivity.ts +0 -61
- package/src/hooks/useVisualViewport.web.ts +0 -104
- package/src/index.ts +0 -1376
- package/src/lib/events/__tests__/collector-filter.test.ts +0 -105
- package/src/lib/events/__tests__/store-query.test.ts +0 -103
- package/src/lib/events/collector.ts +0 -494
- package/src/lib/events/filters.ts +0 -26
- package/src/lib/events/index.ts +0 -11
- package/src/lib/events/indexer.ts +0 -14
- package/src/lib/events/paths.ts +0 -69
- package/src/lib/events/reader.ts +0 -212
- package/src/lib/events/store.ts +0 -141
- package/src/lib/invite.web.ts +0 -58
- package/src/lib/preferences-service.web.ts +0 -41
- package/src/lib/processes/__tests__/config.test.ts +0 -83
- package/src/lib/processes/__tests__/names.test.ts +0 -125
- package/src/lib/processes/__tests__/schema.test.ts +0 -208
- package/src/lib/processes/__tests__/watchdog.test.ts +0 -210
- package/src/lib/processes/autostart.ts +0 -16
- package/src/lib/processes/config.ts +0 -187
- package/src/lib/processes/control.ts +0 -53
- package/src/lib/processes/editor.ts +0 -32
- package/src/lib/processes/events-config.ts +0 -37
- package/src/lib/processes/index.ts +0 -14
- package/src/lib/processes/instances.ts +0 -20
- package/src/lib/processes/manager.ts +0 -131
- package/src/lib/processes/names.ts +0 -71
- package/src/lib/processes/registry.ts +0 -26
- package/src/lib/processes/runner.ts +0 -211
- package/src/lib/processes/scheduler.ts +0 -17
- package/src/lib/processes/schema.ts +0 -74
- package/src/lib/processes/session-list.ts +0 -15
- package/src/lib/processes/state.ts +0 -82
- package/src/lib/processes/watchdog.test.ts +0 -79
- package/src/lib/processes/watchdog.ts +0 -106
- package/src/lib/remote-session/__tests__/protocol.test.ts +0 -291
- package/src/lib/remote-session/index.ts +0 -7
- package/src/lib/remote-session/protocol.ts +0 -443
- package/src/lib/remote-session/session-handler.ts +0 -1298
- package/src/lib/remote-session/workspace-scanner.ts +0 -161
- package/src/lib/sonner.web.ts +0 -1
- package/src/lib/storage/identity-store.web.ts +0 -94
- package/src/lib/tmux-lite/README.md +0 -81
- package/src/lib/tmux-lite/cli.ts +0 -855
- 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/process-run.integration.test.ts +0 -266
- package/src/lib/tmux-lite/protocol.test.ts +0 -307
- package/src/lib/tmux-lite/protocol.ts +0 -291
- package/src/lib/tmux-lite/relay-client.ts +0 -506
- package/src/lib/tmux-lite/server-lifecycle.test.ts +0 -212
- package/src/lib/tmux-lite/server.ts +0 -1412
- 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/notifications/__tests__/useNotifications.test.ts +0 -739
- package/src/notifications/index.ts +0 -32
- package/src/notifications/policy.test.ts +0 -424
- package/src/notifications/policy.ts +0 -139
- package/src/notifications/types.ts +0 -82
- package/src/notifications/useNotifications.ts +0 -350
- package/src/pages/ReviewPage.web.tsx +0 -511
- package/src/preferences/index.ts +0 -1
- package/src/preferences/types.ts +0 -9
- 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 -1128
- package/src/relay/signing.ts +0 -238
- package/src/relay/types.ts +0 -69
- package/src/relay-client/__tests__/machine-directory-client.test.ts +0 -152
- package/src/relay-client/__tests__/useMachineDirectory.test.ts +0 -172
- package/src/relay-client/adapters/browser.ts +0 -27
- package/src/relay-client/adapters/node.ts +0 -29
- package/src/relay-client/index.ts +0 -33
- package/src/relay-client/machine-directory-client.ts +0 -244
- package/src/relay-client/useMachineDirectory.ts +0 -175
- package/src/serve/client-session-manager.ts +0 -635
- package/src/serve/daemon.ts +0 -497
- package/src/serve/pty-session.ts +0 -236
- package/src/serve/types.ts +0 -174
- package/src/session/__tests__/backend-manager.test.ts +0 -101
- package/src/session/__tests__/local-session-backend.test.ts +0 -1129
- package/src/session/__tests__/reducer.test.ts +0 -80
- package/src/session/__tests__/remote-session-backend.test.ts +0 -995
- package/src/session/__tests__/session-name.test.ts +0 -35
- package/src/session/__tests__/useBundleRefreshAttachFlow.test.ts +0 -431
- package/src/session/__tests__/useRemoteSessionClient.test.ts +0 -424
- package/src/session/__tests__/workspace-shell-hooks.integration.test.ts +0 -268
- package/src/session/__tests__/workspace-shell-hooks.test.ts +0 -24
- package/src/session/adapters/browser-remote.ts +0 -101
- package/src/session/adapters/node-remote.ts +0 -135
- package/src/session/backend-key.ts +0 -5
- package/src/session/backend-manager.ts +0 -80
- package/src/session/backend.ts +0 -93
- package/src/session/backends/local-session-backend.ts +0 -1119
- package/src/session/backends/remote-session-backend.ts +0 -1378
- package/src/session/crypto/__tests__/web-terminal.test.ts +0 -1158
- package/src/session/crypto/frames.web.ts +0 -205
- package/src/session/crypto/handshake.web.ts +0 -396
- package/src/session/crypto/identity.web.ts +0 -133
- package/src/session/crypto/keyexchange.web.ts +0 -246
- package/src/session/crypto/relay-signing.web.ts +0 -53
- package/src/session/events.ts +0 -38
- package/src/session/index.ts +0 -116
- package/src/session/reducer.ts +0 -274
- package/src/session/selectors.ts +0 -28
- package/src/session/session-name.ts +0 -50
- package/src/session/types.ts +0 -101
- package/src/session/useBundleRefreshAttachFlow.ts +0 -608
- package/src/session/useRemoteSessionClient.ts +0 -424
- package/src/session/useSessionEngine.ts +0 -432
- package/src/session/workspace-shell-hooks.ts +0 -35
- package/src/tui/__tests__/input-text.test.ts +0 -24
- package/src/tui/__tests__/local-terminal-sync.test.ts +0 -82
- package/src/tui/__tests__/session-terminal-page-navigation.test.ts +0 -94
- package/src/tui/app.tsx +0 -2
- package/src/tui/index.ts +0 -18
- package/src/tui/input-text.ts +0 -38
- package/src/tui/local-terminal-sync.ts +0 -41
- package/src/types/bundle-refresh.ts +0 -42
- package/src/types/bundle.ts +0 -130
- package/src/types/config.ts +0 -287
- package/src/types/errors.ts +0 -292
- package/src/types/events.ts +0 -91
- package/src/types/identity.ts +0 -284
- package/src/types/processes.ts +0 -45
- package/src/types/review.ts +0 -349
- package/src/types/script-phase.ts +0 -3
- package/src/types/workspace-fuzzy.ts +0 -49
- package/src/types/workspace.ts +0 -151
- package/src/utils/__tests__/onboarding.test.ts +0 -358
- package/src/utils/__tests__/run-scripts.test.ts +0 -535
- package/src/utils/__tests__/run-workspace-scripts.test.ts +0 -406
- package/src/utils/__tests__/workspace-setup.integration.test.ts +0 -633
- package/src/utils/__tests__/workspace-state.test.ts +0 -78
- package/src/utils/bun-socket-writer.ts +0 -80
- package/src/utils/clipboard.ts +0 -53
- package/src/utils/deps.test.ts +0 -31
- package/src/utils/deps.ts +0 -145
- package/src/utils/device.web.ts +0 -163
- package/src/utils/fuzzy-match.ts +0 -125
- package/src/utils/hostnames.ts +0 -43
- package/src/utils/hunk-header.ts +0 -17
- package/src/utils/id.ts +0 -9
- package/src/utils/logger.ts +0 -127
- package/src/utils/markdown.ts +0 -254
- package/src/utils/normalize-env-key.ts +0 -13
- package/src/utils/onboarding.ts +0 -279
- package/src/utils/prompts.ts +0 -176
- package/src/utils/run-commands.ts +0 -112
- package/src/utils/run-scripts.ts +0 -337
- package/src/utils/run-workspace-scripts.ts +0 -355
- package/src/utils/sanitize.test.ts +0 -149
- package/src/utils/sanitize.ts +0 -162
- package/src/utils/secrets.ts +0 -836
- package/src/utils/shell-escape.ts +0 -40
- package/src/utils/utf8.ts +0 -79
- package/src/utils/workspace-id.ts +0 -55
- package/src/utils/workspace-state.ts +0 -427
- package/src/version.generated.d.ts +0 -2
- package/todo-security.md +0 -92
- package/tsconfig.json +0 -29
- package/web/README.md +0 -73
- package/web/bun.lock +0 -675
- package/web/eslint.config.js +0 -23
- package/web/index.css +0 -249
- package/web/index.html +0 -16
- package/web/main.tsx +0 -10
- package/web/package.json +0 -39
- package/web/public/vite.svg +0 -1
- package/web/tsconfig.app.json +0 -35
- package/web/tsconfig.json +0 -7
- package/web/tsconfig.node.json +0 -26
- package/web/vite.config.ts +0 -39
- 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/src/types/errors.ts
DELETED
|
@@ -1,292 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Custom error types for GitSpace CLI
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
export type ErrorCode = 'USER_ERROR' | 'SYSTEM_ERROR' | 'SERVICE_ERROR';
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* Base error class for GitSpace CLI
|
|
9
|
-
*/
|
|
10
|
-
export class SpacesError extends Error {
|
|
11
|
-
public readonly code: ErrorCode;
|
|
12
|
-
public readonly exitCode: number;
|
|
13
|
-
|
|
14
|
-
constructor(message: string, code: ErrorCode = 'USER_ERROR', exitCode?: number) {
|
|
15
|
-
super(message);
|
|
16
|
-
this.name = 'SpacesError';
|
|
17
|
-
this.code = code;
|
|
18
|
-
|
|
19
|
-
// Set exit code based on error type if not provided
|
|
20
|
-
if (exitCode !== undefined) {
|
|
21
|
-
this.exitCode = exitCode;
|
|
22
|
-
} else {
|
|
23
|
-
switch (code) {
|
|
24
|
-
case 'USER_ERROR':
|
|
25
|
-
this.exitCode = 1;
|
|
26
|
-
break;
|
|
27
|
-
case 'SYSTEM_ERROR':
|
|
28
|
-
this.exitCode = 2;
|
|
29
|
-
break;
|
|
30
|
-
case 'SERVICE_ERROR':
|
|
31
|
-
this.exitCode = 3;
|
|
32
|
-
break;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// Maintains proper stack trace for where error was thrown (Node/V8).
|
|
37
|
-
if (typeof Error.captureStackTrace === 'function') {
|
|
38
|
-
Error.captureStackTrace(this, this.constructor);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export function toSpacesError(error: unknown, fallbackMessage: string): SpacesError {
|
|
44
|
-
if (error instanceof SpacesError) {
|
|
45
|
-
return error;
|
|
46
|
-
}
|
|
47
|
-
if (error instanceof Error) {
|
|
48
|
-
return new SpacesError(error.message, 'SYSTEM_ERROR', 2);
|
|
49
|
-
}
|
|
50
|
-
return new SpacesError(fallbackMessage, 'SYSTEM_ERROR', 2);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
/**
|
|
54
|
-
* Error thrown when a dependency is missing
|
|
55
|
-
*/
|
|
56
|
-
export class DependencyError extends SpacesError {
|
|
57
|
-
constructor(message: string) {
|
|
58
|
-
super(message, 'SYSTEM_ERROR', 2);
|
|
59
|
-
this.name = 'DependencyError';
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Error thrown when GitHub CLI is not authenticated
|
|
65
|
-
*/
|
|
66
|
-
export class GitHubAuthError extends SpacesError {
|
|
67
|
-
constructor() {
|
|
68
|
-
super(
|
|
69
|
-
'✗ Error: GitHub CLI is not authenticated\n\nPlease run: gh auth login\n\nThen try again.',
|
|
70
|
-
'SYSTEM_ERROR',
|
|
71
|
-
2
|
|
72
|
-
);
|
|
73
|
-
this.name = 'GitHubAuthError';
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* Error thrown when a project already exists
|
|
79
|
-
*/
|
|
80
|
-
export class ProjectExistsError extends SpacesError {
|
|
81
|
-
constructor(projectName: string, projectPath: string) {
|
|
82
|
-
super(
|
|
83
|
-
`✗ Error: Project "${projectName}" already exists\n\nThe directory ${projectPath} already contains a project.\n\nTo use this project:\n gssh switch project ${projectName}\n\nTo remove and recreate:\n gssh remove project ${projectName}\n gssh add project`,
|
|
84
|
-
'USER_ERROR',
|
|
85
|
-
1
|
|
86
|
-
);
|
|
87
|
-
this.name = 'ProjectExistsError';
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Error thrown when a workspace already exists
|
|
93
|
-
*/
|
|
94
|
-
export class WorkspaceExistsError extends SpacesError {
|
|
95
|
-
constructor(workspaceName: string) {
|
|
96
|
-
super(
|
|
97
|
-
`✗ Error: Workspace "${workspaceName}" already exists\n\nTo switch to this workspace:\n gssh switch ${workspaceName}`,
|
|
98
|
-
'USER_ERROR',
|
|
99
|
-
1
|
|
100
|
-
);
|
|
101
|
-
this.name = 'WorkspaceExistsError';
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
/**
|
|
106
|
-
* Error thrown when no project is selected
|
|
107
|
-
*/
|
|
108
|
-
export class NoProjectError extends SpacesError {
|
|
109
|
-
constructor() {
|
|
110
|
-
super(
|
|
111
|
-
'✗ Error: No project selected\n\nPlease add a project first:\n gssh add project\n\nOr switch to an existing project:\n gssh switch project',
|
|
112
|
-
'USER_ERROR',
|
|
113
|
-
1
|
|
114
|
-
);
|
|
115
|
-
this.name = 'NoProjectError';
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// ============================================================================
|
|
120
|
-
// Identity & Access Control Errors
|
|
121
|
-
// ============================================================================
|
|
122
|
-
|
|
123
|
-
/**
|
|
124
|
-
* Error thrown when identity is not initialized
|
|
125
|
-
*/
|
|
126
|
-
export class NoIdentityError extends SpacesError {
|
|
127
|
-
constructor() {
|
|
128
|
-
super(
|
|
129
|
-
'✗ Error: No identity found\n\nInitialize your identity first:\n gssh identity init',
|
|
130
|
-
'USER_ERROR',
|
|
131
|
-
1
|
|
132
|
-
);
|
|
133
|
-
this.name = 'NoIdentityError';
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
/**
|
|
138
|
-
* Error thrown when password is incorrect for keypair decryption
|
|
139
|
-
*/
|
|
140
|
-
export class InvalidPasswordError extends SpacesError {
|
|
141
|
-
constructor() {
|
|
142
|
-
super(
|
|
143
|
-
'✗ Error: Invalid password\n\nThe password you entered is incorrect.',
|
|
144
|
-
'USER_ERROR',
|
|
145
|
-
1
|
|
146
|
-
);
|
|
147
|
-
this.name = 'InvalidPasswordError';
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* Error thrown when client is not in access list
|
|
153
|
-
*/
|
|
154
|
-
export class AccessDeniedError extends SpacesError {
|
|
155
|
-
constructor(identityId?: string) {
|
|
156
|
-
const msg = identityId
|
|
157
|
-
? `✗ Error: Access denied for identity ${identityId}\n\nThis identity is not in the access list.`
|
|
158
|
-
: '✗ Error: Access denied\n\nYou are not authorized to connect to this machine.';
|
|
159
|
-
super(msg, 'USER_ERROR', 1);
|
|
160
|
-
this.name = 'AccessDeniedError';
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/**
|
|
165
|
-
* Error thrown when invite token is invalid or expired
|
|
166
|
-
*/
|
|
167
|
-
export class InvalidInviteError extends SpacesError {
|
|
168
|
-
constructor(reason: string = 'Invalid or expired invite') {
|
|
169
|
-
super(
|
|
170
|
-
`✗ Error: ${reason}\n\nThe invite link may have expired or been revoked.`,
|
|
171
|
-
'USER_ERROR',
|
|
172
|
-
1
|
|
173
|
-
);
|
|
174
|
-
this.name = 'InvalidInviteError';
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Error thrown when handshake protocol fails
|
|
180
|
-
*/
|
|
181
|
-
export class HandshakeFailedError extends SpacesError {
|
|
182
|
-
constructor(reason: string = 'Handshake failed') {
|
|
183
|
-
super(
|
|
184
|
-
`✗ Error: ${reason}\n\nCould not establish secure connection.`,
|
|
185
|
-
'SERVICE_ERROR',
|
|
186
|
-
3
|
|
187
|
-
);
|
|
188
|
-
this.name = 'HandshakeFailedError';
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
/**
|
|
193
|
-
* Error thrown when identity already exists
|
|
194
|
-
*/
|
|
195
|
-
export class IdentityExistsError extends SpacesError {
|
|
196
|
-
constructor() {
|
|
197
|
-
super(
|
|
198
|
-
'✗ Error: Identity already exists\n\nTo overwrite, use:\n gssh identity init --force',
|
|
199
|
-
'USER_ERROR',
|
|
200
|
-
1
|
|
201
|
-
);
|
|
202
|
-
this.name = 'IdentityExistsError';
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
/**
|
|
207
|
-
* Error thrown when public key format is invalid
|
|
208
|
-
*/
|
|
209
|
-
export class InvalidPublicKeyError extends SpacesError {
|
|
210
|
-
constructor(reason: string = 'Invalid public key format') {
|
|
211
|
-
super(
|
|
212
|
-
`✗ Error: ${reason}\n\nPublic keys should be base64-encoded Ed25519 or X25519 keys.`,
|
|
213
|
-
'USER_ERROR',
|
|
214
|
-
1
|
|
215
|
-
);
|
|
216
|
-
this.name = 'InvalidPublicKeyError';
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
export type WorkspaceDeleteErrorCode =
|
|
221
|
-
| 'REMOVE_SCRIPT_FAILED'
|
|
222
|
-
| 'WORKSPACE_NOT_FOUND'
|
|
223
|
-
| 'WORKTREE_REMOVE_FAILED'
|
|
224
|
-
| 'DELETE_FAILED'
|
|
225
|
-
| 'NOT_FOUND'
|
|
226
|
-
| 'RESOURCE_NOT_FOUND'
|
|
227
|
-
| 'PERMISSION_DENIED'
|
|
228
|
-
| 'DELETE_TIMEOUT';
|
|
229
|
-
|
|
230
|
-
/**
|
|
231
|
-
* Error thrown when workspace deletion fails in session backends.
|
|
232
|
-
* Keeps machine-parseable delete codes for retry/UX handling.
|
|
233
|
-
*/
|
|
234
|
-
export class WorkspaceDeleteError extends Error {
|
|
235
|
-
public readonly code: WorkspaceDeleteErrorCode;
|
|
236
|
-
|
|
237
|
-
constructor(message: string, code: WorkspaceDeleteErrorCode) {
|
|
238
|
-
super(message);
|
|
239
|
-
this.name = 'WorkspaceDeleteError';
|
|
240
|
-
this.code = code;
|
|
241
|
-
|
|
242
|
-
if (typeof Error.captureStackTrace === 'function') {
|
|
243
|
-
Error.captureStackTrace(this, this.constructor);
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
export type ReviewRequestErrorCode =
|
|
249
|
-
| 'REVIEW_TIMEOUT'
|
|
250
|
-
| 'REVIEW_FAILED'
|
|
251
|
-
| 'REVIEW_MISSING_RESULT'
|
|
252
|
-
| (string & {});
|
|
253
|
-
|
|
254
|
-
/**
|
|
255
|
-
* Error thrown when remote review requests fail or time out.
|
|
256
|
-
*/
|
|
257
|
-
export class ReviewRequestError extends Error {
|
|
258
|
-
public readonly code: ReviewRequestErrorCode;
|
|
259
|
-
public readonly metadata?: { op?: string; requestId?: string };
|
|
260
|
-
|
|
261
|
-
constructor(
|
|
262
|
-
message: string,
|
|
263
|
-
code: ReviewRequestErrorCode,
|
|
264
|
-
metadata?: { op?: string; requestId?: string }
|
|
265
|
-
) {
|
|
266
|
-
super(message);
|
|
267
|
-
this.name = 'ReviewRequestError';
|
|
268
|
-
this.code = code;
|
|
269
|
-
this.metadata = metadata;
|
|
270
|
-
|
|
271
|
-
if (typeof Error.captureStackTrace === 'function') {
|
|
272
|
-
Error.captureStackTrace(this, this.constructor);
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
/**
|
|
278
|
-
* Error thrown when a requested session name already exists.
|
|
279
|
-
*/
|
|
280
|
-
export class SessionNameExistsError extends Error {
|
|
281
|
-
public readonly code: 'SESSION_ALREADY_EXISTS';
|
|
282
|
-
|
|
283
|
-
constructor(message: string) {
|
|
284
|
-
super(message);
|
|
285
|
-
this.name = 'SessionNameExistsError';
|
|
286
|
-
this.code = 'SESSION_ALREADY_EXISTS';
|
|
287
|
-
|
|
288
|
-
if (typeof Error.captureStackTrace === 'function') {
|
|
289
|
-
Error.captureStackTrace(this, this.constructor);
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
}
|
package/src/types/events.ts
DELETED
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Types for wide event logging
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
export interface WideEventTimelineItem {
|
|
6
|
-
eventName: string;
|
|
7
|
-
level: string;
|
|
8
|
-
timestamp: string;
|
|
9
|
-
timestampMs: number;
|
|
10
|
-
message: string;
|
|
11
|
-
raw: Record<string, unknown>;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export interface WideSnapshotTimelineEntry extends WideEventTimelineItem {
|
|
15
|
-
key: string;
|
|
16
|
-
eventId: string;
|
|
17
|
-
processName?: string;
|
|
18
|
-
processInstance?: number;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export interface WideSnapshotTimelineMap {
|
|
22
|
-
[key: string]: WideSnapshotTimelineEntry;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
export interface WideSnapshot {
|
|
26
|
-
correlationId: string;
|
|
27
|
-
updatedAt: number;
|
|
28
|
-
processName?: string;
|
|
29
|
-
processInstance?: number;
|
|
30
|
-
level: string;
|
|
31
|
-
message: string;
|
|
32
|
-
eventName: string;
|
|
33
|
-
lastEventId: string;
|
|
34
|
-
timelineMap: WideSnapshotTimelineMap;
|
|
35
|
-
timelineOrder: string[];
|
|
36
|
-
raw?: Record<string, unknown>;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export interface WideEvent {
|
|
40
|
-
eventId: string;
|
|
41
|
-
eventName: string;
|
|
42
|
-
level: string;
|
|
43
|
-
timestamp: string;
|
|
44
|
-
timestampMs: number;
|
|
45
|
-
message: string;
|
|
46
|
-
sessionId: string;
|
|
47
|
-
workspaceId: string;
|
|
48
|
-
projectName: string;
|
|
49
|
-
processName?: string;
|
|
50
|
-
processInstance?: number;
|
|
51
|
-
raw: Record<string, unknown>;
|
|
52
|
-
kind?: 'source' | 'wide';
|
|
53
|
-
correlationId?: string;
|
|
54
|
-
timeline?: WideEventTimelineItem[];
|
|
55
|
-
timelineMap?: WideSnapshotTimelineMap;
|
|
56
|
-
timelineOrder?: string[];
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export interface WideEventFilter {
|
|
60
|
-
eventName?: string;
|
|
61
|
-
eventId?: string;
|
|
62
|
-
level?: string;
|
|
63
|
-
message?: string;
|
|
64
|
-
processName?: string;
|
|
65
|
-
kind?: 'source' | 'wide';
|
|
66
|
-
correlationId?: string;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export interface SavedEventFilter {
|
|
70
|
-
name: string;
|
|
71
|
-
filter: WideEventFilter;
|
|
72
|
-
sinceMinutes?: number;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
export interface EventsConfigFile {
|
|
76
|
-
savedFilters?: SavedEventFilter[];
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
export interface WideEventIndex {
|
|
80
|
-
file: string;
|
|
81
|
-
minTs: number;
|
|
82
|
-
maxTs: number;
|
|
83
|
-
levels: string[];
|
|
84
|
-
eventNames: string[];
|
|
85
|
-
count: number;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export interface WideEventQueryResult {
|
|
89
|
-
events: WideEvent[];
|
|
90
|
-
liveEventIds: string[];
|
|
91
|
-
}
|
package/src/types/identity.ts
DELETED
|
@@ -1,284 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Type definitions for identity and access control
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
// ============================================================================
|
|
6
|
-
// Keypair Types
|
|
7
|
-
// ============================================================================
|
|
8
|
-
|
|
9
|
-
/** Ed25519 signing keypair */
|
|
10
|
-
export interface SigningKeypair {
|
|
11
|
-
/** 32-byte public key */
|
|
12
|
-
publicKey: Uint8Array;
|
|
13
|
-
/** 64-byte secret key (includes public key suffix per Ed25519 convention) */
|
|
14
|
-
secretKey: Uint8Array;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
/** X25519 key exchange keypair */
|
|
18
|
-
export interface KeyExchangeKeypair {
|
|
19
|
-
/** 32-byte public key */
|
|
20
|
-
publicKey: Uint8Array;
|
|
21
|
-
/** 32-byte private key */
|
|
22
|
-
privateKey: Uint8Array;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
// ============================================================================
|
|
26
|
-
// Identity Types
|
|
27
|
-
// ============================================================================
|
|
28
|
-
|
|
29
|
-
/** Complete identity (signing + key exchange) */
|
|
30
|
-
export interface Identity {
|
|
31
|
-
/** Unique identifier derived from signing public key (first 16 chars of base64url) */
|
|
32
|
-
id: string;
|
|
33
|
-
/** Ed25519 keypair for signing */
|
|
34
|
-
signing: SigningKeypair;
|
|
35
|
-
/** X25519 keypair for key exchange */
|
|
36
|
-
keyExchange: KeyExchangeKeypair;
|
|
37
|
-
/** Human-readable label */
|
|
38
|
-
label?: string;
|
|
39
|
-
/** Creation timestamp (Unix ms) */
|
|
40
|
-
createdAt: number;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/** Serializable identity for JSON storage (base64 encoded keys) */
|
|
44
|
-
export interface StoredIdentity {
|
|
45
|
-
id: string;
|
|
46
|
-
signingPublicKey: string;
|
|
47
|
-
/** Encrypted with password-derived key */
|
|
48
|
-
signingSecretKey: string;
|
|
49
|
-
keyExchangePublicKey: string;
|
|
50
|
-
/** Encrypted with password-derived key */
|
|
51
|
-
keyExchangePrivateKey: string;
|
|
52
|
-
label?: string;
|
|
53
|
-
createdAt: number;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
/** Public identity info (safe to share) */
|
|
57
|
-
export interface PublicIdentity {
|
|
58
|
-
id: string;
|
|
59
|
-
signingPublicKey: string;
|
|
60
|
-
keyExchangePublicKey: string;
|
|
61
|
-
label?: string;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
// ============================================================================
|
|
65
|
-
// Access Control Types
|
|
66
|
-
// ============================================================================
|
|
67
|
-
|
|
68
|
-
/**
|
|
69
|
-
* Access type for a client
|
|
70
|
-
* - 'full': Complete machine access (browse, create sessions, etc.)
|
|
71
|
-
* - 'session-invite': View-only access to a specific session
|
|
72
|
-
*/
|
|
73
|
-
export type AccessType = 'full' | 'session-invite';
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* @deprecated Use AccessType instead. Kept for backwards compatibility during migration.
|
|
77
|
-
*/
|
|
78
|
-
export interface AccessPermissions {
|
|
79
|
-
/** Can read terminal output */
|
|
80
|
-
read: boolean;
|
|
81
|
-
/** Can send terminal input */
|
|
82
|
-
write: boolean;
|
|
83
|
-
/** Can manage sessions (create/kill) */
|
|
84
|
-
manage: boolean;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/** Helper to convert AccessType to legacy AccessPermissions */
|
|
88
|
-
export function accessTypeToPermissions(accessType: AccessType): AccessPermissions {
|
|
89
|
-
if (accessType === 'full') {
|
|
90
|
-
return { read: true, write: true, manage: true };
|
|
91
|
-
}
|
|
92
|
-
// session-invite is read-only
|
|
93
|
-
return { read: true, write: false, manage: false };
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/** Helper to convert legacy AccessPermissions to AccessType */
|
|
97
|
-
export function permissionsToAccessType(permissions: AccessPermissions): AccessType {
|
|
98
|
-
if (permissions.write || permissions.manage) {
|
|
99
|
-
return 'full';
|
|
100
|
-
}
|
|
101
|
-
return 'session-invite';
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/** Access list entry for authorized public keys */
|
|
105
|
-
export interface AccessEntry {
|
|
106
|
-
/** Identity ID (derived from signing public key) */
|
|
107
|
-
identityId: string;
|
|
108
|
-
/** Public signing key (base64) */
|
|
109
|
-
signingPublicKey: string;
|
|
110
|
-
/** Public key exchange key (base64) */
|
|
111
|
-
keyExchangePublicKey: string;
|
|
112
|
-
/** Human-readable label */
|
|
113
|
-
label?: string;
|
|
114
|
-
/** When access was granted (Unix ms) */
|
|
115
|
-
grantedAt: number;
|
|
116
|
-
/** Access type granted */
|
|
117
|
-
accessType: AccessType;
|
|
118
|
-
/** Optional expiry time (Unix ms) */
|
|
119
|
-
expiresAt?: number;
|
|
120
|
-
/** For session-invite: the specific session ID this grants access to */
|
|
121
|
-
sessionId?: string;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// ============================================================================
|
|
125
|
-
// Invite Token Types
|
|
126
|
-
// ============================================================================
|
|
127
|
-
|
|
128
|
-
/** Signed invite token for sharing access */
|
|
129
|
-
export interface InviteToken {
|
|
130
|
-
/** Token version */
|
|
131
|
-
version: 1;
|
|
132
|
-
/** Machine's identity ID */
|
|
133
|
-
machineId: string;
|
|
134
|
-
/** Machine's public signing key (base64) */
|
|
135
|
-
machineSigningKey: string;
|
|
136
|
-
/** Machine's public key exchange key (base64) */
|
|
137
|
-
machineKeyExchangeKey: string;
|
|
138
|
-
/** Relay URL to connect */
|
|
139
|
-
relayUrl: string;
|
|
140
|
-
/** Access type being granted */
|
|
141
|
-
accessType: AccessType;
|
|
142
|
-
/** For session-invite: the specific session ID */
|
|
143
|
-
sessionId?: string;
|
|
144
|
-
/** Expiry timestamp (Unix ms) */
|
|
145
|
-
expiresAt: number;
|
|
146
|
-
/** Single use? */
|
|
147
|
-
singleUse: boolean;
|
|
148
|
-
/** Signature over token data (base64) */
|
|
149
|
-
signature: string;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
/** Options for creating an invite token */
|
|
153
|
-
export interface CreateInviteOptions {
|
|
154
|
-
/** Access type to grant (default: 'session-invite') */
|
|
155
|
-
accessType?: AccessType;
|
|
156
|
-
/** For session-invite: the specific session ID */
|
|
157
|
-
sessionId?: string;
|
|
158
|
-
/** Validity duration in milliseconds */
|
|
159
|
-
validityMs?: number;
|
|
160
|
-
/** Whether invite can only be used once */
|
|
161
|
-
singleUse?: boolean;
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
// ============================================================================
|
|
165
|
-
// Session Key Types
|
|
166
|
-
// ============================================================================
|
|
167
|
-
|
|
168
|
-
/** Derived session keys from handshake */
|
|
169
|
-
export interface SessionKeys {
|
|
170
|
-
/** Key for encrypting data we send (32 bytes) */
|
|
171
|
-
sendKey: Uint8Array;
|
|
172
|
-
/** Key for decrypting data we receive (32 bytes) */
|
|
173
|
-
receiveKey: Uint8Array;
|
|
174
|
-
/** Session ID (for key rotation tracking) */
|
|
175
|
-
sessionId: string;
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
// ============================================================================
|
|
179
|
-
// Handshake Message Types
|
|
180
|
-
// ============================================================================
|
|
181
|
-
|
|
182
|
-
/** X3DH handshake initiation message from client */
|
|
183
|
-
export interface X3DHInitMessage {
|
|
184
|
-
/** Protocol version */
|
|
185
|
-
version: 1;
|
|
186
|
-
/** Client's ephemeral X25519 public key (base64) */
|
|
187
|
-
ephemeralKey: string;
|
|
188
|
-
/** Timestamp for replay protection (Unix ms) */
|
|
189
|
-
timestamp: number;
|
|
190
|
-
/** Client nonce (base64, 32 bytes random) */
|
|
191
|
-
clientNonce: string;
|
|
192
|
-
/** Optional: Machine ID hint for routing */
|
|
193
|
-
machineIdHint?: string;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
/** X3DH response message from machine */
|
|
197
|
-
export interface X3DHResponseMessage {
|
|
198
|
-
/** Protocol version */
|
|
199
|
-
version: 1;
|
|
200
|
-
/** Machine's identity public key - Ed25519 (base64) */
|
|
201
|
-
identityKey: string;
|
|
202
|
-
/** Machine's key exchange public key - X25519 (base64) */
|
|
203
|
-
keyExchangeKey: string;
|
|
204
|
-
/** Machine's ephemeral X25519 public key (base64) */
|
|
205
|
-
ephemeralKey: string;
|
|
206
|
-
/** Machine's signed pre-key - X25519 (base64) */
|
|
207
|
-
signedPreKey: string;
|
|
208
|
-
/** Signature over signedPreKey using identity key (base64) */
|
|
209
|
-
preKeySignature: string;
|
|
210
|
-
/** Server nonce (base64, 32 bytes random) */
|
|
211
|
-
serverNonce: string;
|
|
212
|
-
/** Timestamp (Unix ms) */
|
|
213
|
-
timestamp: number;
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
/** Client authentication message */
|
|
217
|
-
export interface X3DHAuthMessage {
|
|
218
|
-
/** Protocol version */
|
|
219
|
-
version: 1;
|
|
220
|
-
/** Client's identity public key - Ed25519 (base64) */
|
|
221
|
-
identityKey: string;
|
|
222
|
-
/** Client's key exchange public key - X25519 (base64) */
|
|
223
|
-
keyExchangeKey: string;
|
|
224
|
-
/** HMAC proof binding client identity to session (base64) */
|
|
225
|
-
identityProof: string;
|
|
226
|
-
/**
|
|
227
|
-
* Ed25519 signature over handshake transcript proving key ownership (base64).
|
|
228
|
-
* Signs: clientEphemeral || serverEphemeral || clientNonce || serverNonce
|
|
229
|
-
* This proves the client possesses the private key for identityKey.
|
|
230
|
-
*/
|
|
231
|
-
identitySignature: string;
|
|
232
|
-
/** Authorization type and data */
|
|
233
|
-
authorization:
|
|
234
|
-
| { type: "access_list" }
|
|
235
|
-
| { type: "invite"; inviteToken: string };
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
/** Server authentication/result message */
|
|
239
|
-
export interface X3DHResultMessage {
|
|
240
|
-
/** Protocol version */
|
|
241
|
-
version: 1;
|
|
242
|
-
/** Machine's identity public key (base64) */
|
|
243
|
-
identityKey: string;
|
|
244
|
-
/** HMAC proof binding machine identity to session (base64) */
|
|
245
|
-
identityProof: string;
|
|
246
|
-
/** Authorization result */
|
|
247
|
-
result:
|
|
248
|
-
| { type: "accepted"; accessType: AccessType; sessionId?: string }
|
|
249
|
-
| { type: "rejected"; reason: string };
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
/** Handshake state phases */
|
|
253
|
-
export type HandshakePhase =
|
|
254
|
-
| "idle"
|
|
255
|
-
| "awaiting_server_hello"
|
|
256
|
-
| "awaiting_client_auth"
|
|
257
|
-
| "awaiting_server_auth"
|
|
258
|
-
| "established"
|
|
259
|
-
| "failed";
|
|
260
|
-
|
|
261
|
-
/** Handshake result on success */
|
|
262
|
-
export interface X3DHHandshakeResult {
|
|
263
|
-
sessionKeys: SessionKeys;
|
|
264
|
-
peerIdentityId: string;
|
|
265
|
-
accessType: AccessType;
|
|
266
|
-
/** For session-invite: the specific session ID access was granted to */
|
|
267
|
-
sessionId?: string;
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
// ============================================================================
|
|
271
|
-
// Machine Identity Types
|
|
272
|
-
// ============================================================================
|
|
273
|
-
|
|
274
|
-
/** Machine identity configuration stored locally */
|
|
275
|
-
export interface MachineIdentity {
|
|
276
|
-
/** Unique machine ID (same as identity.id) */
|
|
277
|
-
machineId: string;
|
|
278
|
-
/** Human-readable machine name */
|
|
279
|
-
machineName: string;
|
|
280
|
-
/** Relay server URL this machine uses */
|
|
281
|
-
relayUrl: string;
|
|
282
|
-
/** ISO timestamp when registered */
|
|
283
|
-
registeredAt: string;
|
|
284
|
-
}
|
package/src/types/processes.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Workspace process definitions
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
import type { EventsConfig } from './config.js';
|
|
6
|
-
|
|
7
|
-
export type ProcessRestartPolicy = 'never' | 'on-failure' | 'always';
|
|
8
|
-
|
|
9
|
-
export type ProcessPortProtocol = 'http' | 'tcp';
|
|
10
|
-
|
|
11
|
-
export interface ProcessPortConfig {
|
|
12
|
-
port: number;
|
|
13
|
-
name?: string;
|
|
14
|
-
protocol?: ProcessPortProtocol;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export interface ProcessRestartConfig {
|
|
18
|
-
policy: ProcessRestartPolicy;
|
|
19
|
-
maxAttempts: number;
|
|
20
|
-
backoffMs: number;
|
|
21
|
-
maxBackoffMs: number;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
export interface ProcessDefinition {
|
|
25
|
-
name: string;
|
|
26
|
-
command: string;
|
|
27
|
-
args?: string[];
|
|
28
|
-
cwd?: string;
|
|
29
|
-
env?: Record<string, string>;
|
|
30
|
-
instances?: number;
|
|
31
|
-
autostart?: boolean;
|
|
32
|
-
restart?: ProcessRestartConfig;
|
|
33
|
-
events?: Partial<EventsConfig> & { enabled?: boolean; keepRawOutput?: boolean };
|
|
34
|
-
ports?: ProcessPortConfig[];
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
export interface ProcessesConfig {
|
|
38
|
-
processes: ProcessDefinition[];
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
export interface ProcessInstanceSpec {
|
|
42
|
-
name: string;
|
|
43
|
-
instance: number;
|
|
44
|
-
definition: ProcessDefinition;
|
|
45
|
-
}
|