gitspace 0.2.0-rc.4 → 0.2.0-rc.40

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 (309) hide show
  1. package/README.md +160 -148
  2. package/package.json +59 -30
  3. package/.claude/settings.local.json +0 -25
  4. package/.gitspace/bundle.json +0 -50
  5. package/.gitspace/select/01-status.sh +0 -40
  6. package/.gitspace/setup/01-install-deps.sh +0 -12
  7. package/.gitspace/setup/02-typecheck.sh +0 -16
  8. package/AGENTS.md +0 -451
  9. package/CLAUDE.md +0 -1
  10. package/bun.lock +0 -647
  11. package/docs/CONNECTION.md +0 -623
  12. package/docs/GATEWAY-WORKER.md +0 -319
  13. package/docs/GETTING-STARTED.md +0 -448
  14. package/docs/GITSPACE-PLATFORM.md +0 -1819
  15. package/docs/INFRASTRUCTURE.md +0 -1347
  16. package/docs/PROTOCOL.md +0 -619
  17. package/docs/QUICKSTART.md +0 -183
  18. package/docs/RELAY.md +0 -327
  19. package/docs/REMOTE-DESIGN.md +0 -549
  20. package/docs/ROADMAP.md +0 -564
  21. package/docs/SITE_DOCS_FIGMA_MAKE.md +0 -1169
  22. package/docs/STACK-DESIGN.md +0 -588
  23. package/docs/UNIFIED_ARCHITECTURE.md +0 -292
  24. package/experiments/pty-benchmark.ts +0 -148
  25. package/experiments/pty-latency.ts +0 -100
  26. package/experiments/router/client.ts +0 -199
  27. package/experiments/router/protocol.ts +0 -74
  28. package/experiments/router/router.ts +0 -217
  29. package/experiments/router/session.ts +0 -180
  30. package/experiments/router/test.ts +0 -133
  31. package/experiments/socket-bandwidth.ts +0 -77
  32. package/homebrew/gitspace.rb +0 -45
  33. package/landing-page/ATTRIBUTIONS.md +0 -3
  34. package/landing-page/README.md +0 -11
  35. package/landing-page/bun.lock +0 -801
  36. package/landing-page/guidelines/Guidelines.md +0 -61
  37. package/landing-page/index.html +0 -37
  38. package/landing-page/package.json +0 -90
  39. package/landing-page/postcss.config.mjs +0 -15
  40. package/landing-page/public/_redirects +0 -1
  41. package/landing-page/public/favicon.png +0 -0
  42. package/landing-page/src/app/App.tsx +0 -53
  43. package/landing-page/src/app/components/figma/ImageWithFallback.tsx +0 -27
  44. package/landing-page/src/app/components/ui/accordion.tsx +0 -66
  45. package/landing-page/src/app/components/ui/alert-dialog.tsx +0 -157
  46. package/landing-page/src/app/components/ui/alert.tsx +0 -66
  47. package/landing-page/src/app/components/ui/aspect-ratio.tsx +0 -11
  48. package/landing-page/src/app/components/ui/avatar.tsx +0 -53
  49. package/landing-page/src/app/components/ui/badge.tsx +0 -46
  50. package/landing-page/src/app/components/ui/breadcrumb.tsx +0 -109
  51. package/landing-page/src/app/components/ui/button.tsx +0 -57
  52. package/landing-page/src/app/components/ui/calendar.tsx +0 -75
  53. package/landing-page/src/app/components/ui/card.tsx +0 -92
  54. package/landing-page/src/app/components/ui/carousel.tsx +0 -241
  55. package/landing-page/src/app/components/ui/chart.tsx +0 -353
  56. package/landing-page/src/app/components/ui/checkbox.tsx +0 -32
  57. package/landing-page/src/app/components/ui/collapsible.tsx +0 -33
  58. package/landing-page/src/app/components/ui/command.tsx +0 -177
  59. package/landing-page/src/app/components/ui/context-menu.tsx +0 -252
  60. package/landing-page/src/app/components/ui/dialog.tsx +0 -135
  61. package/landing-page/src/app/components/ui/drawer.tsx +0 -132
  62. package/landing-page/src/app/components/ui/dropdown-menu.tsx +0 -257
  63. package/landing-page/src/app/components/ui/form.tsx +0 -168
  64. package/landing-page/src/app/components/ui/hover-card.tsx +0 -44
  65. package/landing-page/src/app/components/ui/input-otp.tsx +0 -77
  66. package/landing-page/src/app/components/ui/input.tsx +0 -21
  67. package/landing-page/src/app/components/ui/label.tsx +0 -24
  68. package/landing-page/src/app/components/ui/menubar.tsx +0 -276
  69. package/landing-page/src/app/components/ui/navigation-menu.tsx +0 -168
  70. package/landing-page/src/app/components/ui/pagination.tsx +0 -127
  71. package/landing-page/src/app/components/ui/popover.tsx +0 -48
  72. package/landing-page/src/app/components/ui/progress.tsx +0 -31
  73. package/landing-page/src/app/components/ui/radio-group.tsx +0 -45
  74. package/landing-page/src/app/components/ui/resizable.tsx +0 -56
  75. package/landing-page/src/app/components/ui/scroll-area.tsx +0 -58
  76. package/landing-page/src/app/components/ui/select.tsx +0 -189
  77. package/landing-page/src/app/components/ui/separator.tsx +0 -28
  78. package/landing-page/src/app/components/ui/sheet.tsx +0 -139
  79. package/landing-page/src/app/components/ui/sidebar.tsx +0 -726
  80. package/landing-page/src/app/components/ui/skeleton.tsx +0 -13
  81. package/landing-page/src/app/components/ui/slider.tsx +0 -63
  82. package/landing-page/src/app/components/ui/sonner.tsx +0 -25
  83. package/landing-page/src/app/components/ui/switch.tsx +0 -31
  84. package/landing-page/src/app/components/ui/table.tsx +0 -116
  85. package/landing-page/src/app/components/ui/tabs.tsx +0 -66
  86. package/landing-page/src/app/components/ui/textarea.tsx +0 -18
  87. package/landing-page/src/app/components/ui/toggle-group.tsx +0 -73
  88. package/landing-page/src/app/components/ui/toggle.tsx +0 -47
  89. package/landing-page/src/app/components/ui/tooltip.tsx +0 -61
  90. package/landing-page/src/app/components/ui/use-mobile.ts +0 -21
  91. package/landing-page/src/app/components/ui/utils.ts +0 -6
  92. package/landing-page/src/components/docs/DocsContent.tsx +0 -724
  93. package/landing-page/src/components/docs/DocsSidebar.tsx +0 -84
  94. package/landing-page/src/components/landing/CTA.tsx +0 -59
  95. package/landing-page/src/components/landing/Comparison.tsx +0 -84
  96. package/landing-page/src/components/landing/FaultyTerminal.tsx +0 -424
  97. package/landing-page/src/components/landing/Features.tsx +0 -201
  98. package/landing-page/src/components/landing/Hero.tsx +0 -142
  99. package/landing-page/src/components/landing/Pricing.tsx +0 -140
  100. package/landing-page/src/components/landing/Roadmap.tsx +0 -86
  101. package/landing-page/src/components/landing/Security.tsx +0 -81
  102. package/landing-page/src/components/landing/TerminalWindow.tsx +0 -27
  103. package/landing-page/src/components/landing/UseCases.tsx +0 -55
  104. package/landing-page/src/components/landing/Workflow.tsx +0 -101
  105. package/landing-page/src/components/layout/DashboardNavbar.tsx +0 -37
  106. package/landing-page/src/components/layout/Footer.tsx +0 -55
  107. package/landing-page/src/components/layout/LandingNavbar.tsx +0 -82
  108. package/landing-page/src/components/ui/badge.tsx +0 -39
  109. package/landing-page/src/components/ui/breadcrumb.tsx +0 -115
  110. package/landing-page/src/components/ui/button.tsx +0 -57
  111. package/landing-page/src/components/ui/card.tsx +0 -79
  112. package/landing-page/src/components/ui/mock-terminal.tsx +0 -68
  113. package/landing-page/src/components/ui/separator.tsx +0 -28
  114. package/landing-page/src/lib/utils.ts +0 -6
  115. package/landing-page/src/main.tsx +0 -10
  116. package/landing-page/src/pages/Dashboard.tsx +0 -133
  117. package/landing-page/src/pages/DocsPage.tsx +0 -79
  118. package/landing-page/src/pages/LandingPage.tsx +0 -31
  119. package/landing-page/src/pages/TerminalView.tsx +0 -106
  120. package/landing-page/src/styles/fonts.css +0 -0
  121. package/landing-page/src/styles/index.css +0 -3
  122. package/landing-page/src/styles/tailwind.css +0 -4
  123. package/landing-page/src/styles/theme.css +0 -181
  124. package/landing-page/vite.config.ts +0 -19
  125. package/scripts/build.ts +0 -298
  126. package/scripts/release.ts +0 -140
  127. package/src/__tests__/test-utils.ts +0 -298
  128. package/src/commands/__tests__/serve-messages.test.ts +0 -190
  129. package/src/commands/access.ts +0 -298
  130. package/src/commands/add.ts +0 -452
  131. package/src/commands/auth.ts +0 -369
  132. package/src/commands/connect.ts +0 -287
  133. package/src/commands/directory.ts +0 -16
  134. package/src/commands/host.ts +0 -468
  135. package/src/commands/identity.ts +0 -184
  136. package/src/commands/list.ts +0 -200
  137. package/src/commands/relay.ts +0 -315
  138. package/src/commands/remove.ts +0 -241
  139. package/src/commands/serve.ts +0 -1536
  140. package/src/commands/share.ts +0 -451
  141. package/src/commands/status.ts +0 -125
  142. package/src/commands/switch.ts +0 -353
  143. package/src/commands/tmux.ts +0 -317
  144. package/src/core/__tests__/access.test.ts +0 -240
  145. package/src/core/access.ts +0 -277
  146. package/src/core/bundle.ts +0 -342
  147. package/src/core/config.ts +0 -510
  148. package/src/core/git.ts +0 -317
  149. package/src/core/github.ts +0 -151
  150. package/src/core/identity.ts +0 -631
  151. package/src/core/linear.ts +0 -225
  152. package/src/core/shell.ts +0 -161
  153. package/src/core/trusted-relays.ts +0 -315
  154. package/src/index.ts +0 -838
  155. package/src/lib/remote-session/index.ts +0 -7
  156. package/src/lib/remote-session/protocol.ts +0 -267
  157. package/src/lib/remote-session/session-handler.ts +0 -581
  158. package/src/lib/remote-session/workspace-scanner.ts +0 -167
  159. package/src/lib/tmux-lite/README.md +0 -81
  160. package/src/lib/tmux-lite/cli.ts +0 -824
  161. package/src/lib/tmux-lite/crypto/__tests__/helpers/handshake-runner.ts +0 -349
  162. package/src/lib/tmux-lite/crypto/__tests__/helpers/mock-relay.ts +0 -291
  163. package/src/lib/tmux-lite/crypto/__tests__/helpers/test-identities.ts +0 -142
  164. package/src/lib/tmux-lite/crypto/__tests__/integration/authorization.integration.test.ts +0 -339
  165. package/src/lib/tmux-lite/crypto/__tests__/integration/e2e-communication.integration.test.ts +0 -477
  166. package/src/lib/tmux-lite/crypto/__tests__/integration/error-handling.integration.test.ts +0 -499
  167. package/src/lib/tmux-lite/crypto/__tests__/integration/handshake.integration.test.ts +0 -371
  168. package/src/lib/tmux-lite/crypto/__tests__/integration/security.integration.test.ts +0 -573
  169. package/src/lib/tmux-lite/crypto/access-control.test.ts +0 -512
  170. package/src/lib/tmux-lite/crypto/access-control.ts +0 -320
  171. package/src/lib/tmux-lite/crypto/frames.test.ts +0 -262
  172. package/src/lib/tmux-lite/crypto/frames.ts +0 -141
  173. package/src/lib/tmux-lite/crypto/handshake.ts +0 -894
  174. package/src/lib/tmux-lite/crypto/identity.test.ts +0 -220
  175. package/src/lib/tmux-lite/crypto/identity.ts +0 -286
  176. package/src/lib/tmux-lite/crypto/index.ts +0 -51
  177. package/src/lib/tmux-lite/crypto/invites.test.ts +0 -381
  178. package/src/lib/tmux-lite/crypto/invites.ts +0 -215
  179. package/src/lib/tmux-lite/crypto/keyexchange.ts +0 -435
  180. package/src/lib/tmux-lite/crypto/keys.test.ts +0 -58
  181. package/src/lib/tmux-lite/crypto/keys.ts +0 -47
  182. package/src/lib/tmux-lite/crypto/secretbox.test.ts +0 -169
  183. package/src/lib/tmux-lite/crypto/secretbox.ts +0 -124
  184. package/src/lib/tmux-lite/handshake-handler.ts +0 -451
  185. package/src/lib/tmux-lite/protocol.test.ts +0 -307
  186. package/src/lib/tmux-lite/protocol.ts +0 -266
  187. package/src/lib/tmux-lite/relay-client.ts +0 -506
  188. package/src/lib/tmux-lite/server-lifecycle.test.ts +0 -208
  189. package/src/lib/tmux-lite/server.ts +0 -1254
  190. package/src/lib/tmux-lite/shell-integration.sh +0 -37
  191. package/src/lib/tmux-lite/terminal-queries.test.ts +0 -54
  192. package/src/lib/tmux-lite/terminal-queries.ts +0 -49
  193. package/src/relay/__tests__/e2e-flow.test.ts +0 -1284
  194. package/src/relay/__tests__/helpers/auth.ts +0 -354
  195. package/src/relay/__tests__/helpers/ports.ts +0 -51
  196. package/src/relay/__tests__/protocol-validation.test.ts +0 -265
  197. package/src/relay/authorization.ts +0 -303
  198. package/src/relay/embedded-assets.generated.d.ts +0 -15
  199. package/src/relay/identity.ts +0 -352
  200. package/src/relay/index.ts +0 -57
  201. package/src/relay/pipes.test.ts +0 -427
  202. package/src/relay/pipes.ts +0 -195
  203. package/src/relay/protocol.ts +0 -804
  204. package/src/relay/registries.test.ts +0 -437
  205. package/src/relay/registries.ts +0 -593
  206. package/src/relay/server.test.ts +0 -1323
  207. package/src/relay/server.ts +0 -1094
  208. package/src/relay/signing.ts +0 -238
  209. package/src/relay/types.ts +0 -69
  210. package/src/serve/client-session-manager.ts +0 -622
  211. package/src/serve/daemon.ts +0 -497
  212. package/src/serve/pty-session.ts +0 -236
  213. package/src/serve/types.ts +0 -169
  214. package/src/shared/components/Flow.tsx +0 -453
  215. package/src/shared/components/Flow.tui.tsx +0 -343
  216. package/src/shared/components/Flow.web.tsx +0 -442
  217. package/src/shared/components/Inbox.tsx +0 -446
  218. package/src/shared/components/Inbox.tui.tsx +0 -262
  219. package/src/shared/components/Inbox.web.tsx +0 -329
  220. package/src/shared/components/MachineList.tsx +0 -187
  221. package/src/shared/components/MachineList.tui.tsx +0 -161
  222. package/src/shared/components/MachineList.web.tsx +0 -210
  223. package/src/shared/components/ProjectList.tsx +0 -176
  224. package/src/shared/components/ProjectList.tui.tsx +0 -109
  225. package/src/shared/components/ProjectList.web.tsx +0 -143
  226. package/src/shared/components/SpacesBrowser.tsx +0 -332
  227. package/src/shared/components/SpacesBrowser.tui.tsx +0 -163
  228. package/src/shared/components/SpacesBrowser.web.tsx +0 -221
  229. package/src/shared/components/index.ts +0 -103
  230. package/src/shared/hooks/index.ts +0 -16
  231. package/src/shared/hooks/useNavigation.ts +0 -226
  232. package/src/shared/index.ts +0 -122
  233. package/src/shared/providers/LocalMachineProvider.ts +0 -425
  234. package/src/shared/providers/MachineProvider.ts +0 -165
  235. package/src/shared/providers/RemoteMachineProvider.ts +0 -439
  236. package/src/shared/providers/index.ts +0 -26
  237. package/src/shared/types.ts +0 -145
  238. package/src/tui/adapters.ts +0 -120
  239. package/src/tui/app.tsx +0 -1816
  240. package/src/tui/components/Terminal.tsx +0 -580
  241. package/src/tui/hooks/index.ts +0 -35
  242. package/src/tui/hooks/useAppState.ts +0 -314
  243. package/src/tui/hooks/useDaemonStatus.ts +0 -174
  244. package/src/tui/hooks/useInboxTUI.ts +0 -114
  245. package/src/tui/hooks/useRemoteMachines.ts +0 -208
  246. package/src/tui/index.ts +0 -24
  247. package/src/tui/state.ts +0 -299
  248. package/src/tui/terminal-bracketed-paste.test.ts +0 -45
  249. package/src/tui/terminal-bracketed-paste.ts +0 -47
  250. package/src/types/bundle.ts +0 -112
  251. package/src/types/config.ts +0 -89
  252. package/src/types/errors.ts +0 -206
  253. package/src/types/identity.ts +0 -284
  254. package/src/types/workspace-fuzzy.ts +0 -49
  255. package/src/types/workspace.ts +0 -151
  256. package/src/utils/bun-socket-writer.ts +0 -80
  257. package/src/utils/deps.ts +0 -127
  258. package/src/utils/fuzzy-match.ts +0 -125
  259. package/src/utils/logger.ts +0 -127
  260. package/src/utils/markdown.ts +0 -254
  261. package/src/utils/onboarding.ts +0 -229
  262. package/src/utils/prompts.ts +0 -114
  263. package/src/utils/run-commands.ts +0 -112
  264. package/src/utils/run-scripts.ts +0 -142
  265. package/src/utils/sanitize.ts +0 -98
  266. package/src/utils/secrets.ts +0 -122
  267. package/src/utils/shell-escape.ts +0 -40
  268. package/src/utils/utf8.ts +0 -79
  269. package/src/utils/workspace-state.ts +0 -47
  270. package/src/web/README.md +0 -73
  271. package/src/web/bun.lock +0 -575
  272. package/src/web/eslint.config.js +0 -23
  273. package/src/web/index.html +0 -16
  274. package/src/web/package.json +0 -37
  275. package/src/web/public/vite.svg +0 -1
  276. package/src/web/src/App.tsx +0 -604
  277. package/src/web/src/assets/react.svg +0 -1
  278. package/src/web/src/components/Terminal.tsx +0 -207
  279. package/src/web/src/hooks/useRelayConnection.ts +0 -224
  280. package/src/web/src/hooks/useTerminal.ts +0 -699
  281. package/src/web/src/index.css +0 -55
  282. package/src/web/src/lib/crypto/__tests__/web-terminal.test.ts +0 -1158
  283. package/src/web/src/lib/crypto/frames.ts +0 -205
  284. package/src/web/src/lib/crypto/handshake.ts +0 -396
  285. package/src/web/src/lib/crypto/identity.ts +0 -128
  286. package/src/web/src/lib/crypto/keyexchange.ts +0 -246
  287. package/src/web/src/lib/crypto/relay-signing.ts +0 -53
  288. package/src/web/src/lib/invite.ts +0 -58
  289. package/src/web/src/lib/storage/identity-store.ts +0 -94
  290. package/src/web/src/main.tsx +0 -10
  291. package/src/web/src/types/identity.ts +0 -45
  292. package/src/web/tsconfig.app.json +0 -28
  293. package/src/web/tsconfig.json +0 -7
  294. package/src/web/tsconfig.node.json +0 -26
  295. package/src/web/vite.config.ts +0 -31
  296. package/todo-security.md +0 -92
  297. package/tsconfig.json +0 -23
  298. package/worker/bun.lock +0 -237
  299. package/worker/package.json +0 -22
  300. package/worker/schema.sql +0 -96
  301. package/worker/src/handlers/auth.ts +0 -451
  302. package/worker/src/handlers/subdomains.ts +0 -376
  303. package/worker/src/handlers/user.ts +0 -98
  304. package/worker/src/index.ts +0 -70
  305. package/worker/src/middleware/auth.ts +0 -152
  306. package/worker/src/services/cloudflare.ts +0 -609
  307. package/worker/src/types.ts +0 -96
  308. package/worker/tsconfig.json +0 -15
  309. package/worker/wrangler.toml +0 -26
package/README.md CHANGED
@@ -77,7 +77,7 @@ You can also use traditional CLI commands:
77
77
  #### 1. Add Your First Project
78
78
 
79
79
  ```bash
80
- gssh add project
80
+ gssh project add
81
81
  ```
82
82
 
83
83
  Select a GitHub repository, and GitSpace will:
@@ -90,20 +90,36 @@ Select a GitHub repository, and GitSpace will:
90
90
 
91
91
  ```bash
92
92
  # Create a workspace from a Linear issue (if configured)
93
- gssh add
93
+ gssh workspace add --project my-project
94
94
 
95
95
  # Or create a workspace with a custom name
96
- gssh add my-feature
96
+ gssh workspace add my-feature --project my-project
97
97
  ```
98
98
 
99
- #### 3. Switch Between Workspaces
99
+ #### 3. Target a Workspace
100
100
 
101
101
  ```bash
102
- # Interactive selection
103
- gssh switch
102
+ # List workspaces in a project
103
+ gssh workspace list --project <project-name>
104
104
 
105
- # Switch to a specific workspace
106
- gssh switch my-feature
105
+ # Show context for a specific workspace
106
+ gssh workspace context --project my-project --workspace my-feature
107
+ ```
108
+
109
+ ### Workspace Session Mode (`space`)
110
+
111
+ When GitSpace opens a workspace-scoped terminal session, it injects a `space` shell function (bash/zsh).
112
+
113
+ - Use `space ...` for workspace operations without repeating `--project` and `--workspace`
114
+ - `gssh` commands are restricted in this mode to avoid cross-workspace mistakes
115
+ - `gssh machine tmux ...` is blocked inside workspace sessions
116
+
117
+ Examples:
118
+
119
+ ```bash
120
+ space context --json
121
+ space review hunks src/app.ts --format json
122
+ space review add-hunk src/app.ts --index 1 --approve --body "Looks good"
107
123
  ```
108
124
 
109
125
  ## Repo Config Bundles
@@ -117,14 +133,15 @@ A bundle is a directory (typically `.gitspace/`) containing:
117
133
  ```
118
134
  .gitspace/
119
135
  ├── bundle.json # Bundle manifest with onboarding steps
120
- ├── pre/ # Scripts to run before setup
121
- │ └── 01-copy-env.sh
122
- ├── setup/ # Scripts to run on first workspace creation
123
- │ └── 01-install-deps.sh
124
- ├── select/ # Scripts to run every time workspace is opened
125
- │ └── 01-status.sh
126
- └── remove/ # Scripts to run before workspace deletion
127
- └── 01-cleanup.sh
136
+ └── scripts/
137
+ ├── pre/ # Deprecated: migrate scripts into ordered setup/
138
+ │ └── 01-copy-env.sh
139
+ ├── setup/ # Scripts for setup runs (when bundle/value state changes)
140
+ │ └── 01-install-deps.sh
141
+ ├── select/ # Scripts to run on each new terminal attach
142
+ └── 01-status.sh
143
+ └── remove/ # Scripts to run before workspace deletion
144
+ └── 01-cleanup.sh
128
145
  ```
129
146
 
130
147
  ### Bundle Manifest (`bundle.json`)
@@ -179,27 +196,27 @@ A bundle is a directory (typically `.gitspace/`) containing:
179
196
 
180
197
  ### Using Bundle Values in Scripts
181
198
 
182
- Bundle values are passed to scripts as environment variables:
199
+ Bundle values are passed to scripts as environment variables using the configured bundle keys:
183
200
 
184
- - `SPACE_VALUE_<KEY>` - Regular values from input steps
185
- - `SPACE_SECRET_<KEY>` - Secret values from secret steps (fetched from OS keychain)
201
+ - `<KEY>` - Regular or secret value using the exact `configKey` from `bundle.json`
202
+ - `<NORMALIZED_KEY>` - Uppercase snake-case alias (for example, `teamName` -> `TEAM_NAME`)
186
203
 
187
204
  **Example script:**
188
205
 
189
206
  ```bash
190
207
  #!/bin/bash
191
- # .gitspace/select/01-status.sh
208
+ # .gitspace/scripts/select/01-status.sh
192
209
 
193
210
  WORKSPACE_NAME=$1
194
211
  REPOSITORY=$2
195
212
 
196
213
  # Access bundle values
197
- if [ -n "$SPACE_VALUE_TEAMNAME" ]; then
198
- echo "Welcome, $SPACE_VALUE_TEAMNAME team!"
214
+ if [ -n "$TEAM_NAME" ]; then
215
+ echo "Welcome, $TEAM_NAME team!"
199
216
  fi
200
217
 
201
218
  # Access secrets (stored securely in OS keychain)
202
- if [ -n "$SPACE_SECRET_APIKEY" ]; then
219
+ if [ -n "$API_KEY" ]; then
203
220
  echo "API Key configured"
204
221
  fi
205
222
  ```
@@ -208,9 +225,9 @@ fi
208
225
 
209
226
  Bundles can be loaded from:
210
227
 
211
- 1. **In-repo** (automatic): `.gitspace/`, `.gitspace-config/`, `.spaces-config/`, or `.spaces/` in the cloned repository
212
- 2. **Local path**: `gssh add project --bundle-path /path/to/bundle/`
213
- 3. **Remote URL**: `gssh add project --bundle-url https://example.com/bundle.zip`
228
+ 1. **In-repo** (automatic): `.gitspace/` directory in the cloned repository
229
+ 2. **Local path**: `gssh project add --bundle-path /path/to/bundle/`
230
+ 3. **Remote URL**: `gssh project add --bundle-url https://example.com/bundle.zip`
214
231
 
215
232
  ## Commands Reference
216
233
 
@@ -218,12 +235,12 @@ Bundles can be loaded from:
218
235
 
219
236
  Launch the interactive terminal UI.
220
237
 
221
- ### `gssh add project`
238
+ ### `gssh project add`
222
239
 
223
240
  Add a new project from GitHub.
224
241
 
225
242
  ```bash
226
- gssh add project [options]
243
+ gssh project add [options]
227
244
 
228
245
  Options:
229
246
  --bundle-url <url> Load bundle from remote URL (zip archive)
@@ -234,12 +251,12 @@ Options:
234
251
  --linear-key <key> Provide Linear API key via flag
235
252
  ```
236
253
 
237
- ### `gssh add [workspace-name]`
254
+ ### `gssh workspace add [workspace-name] --project <project-name>`
238
255
 
239
256
  Create a new workspace in the current project.
240
257
 
241
258
  ```bash
242
- gssh add [workspace-name] [options]
259
+ gssh workspace add [workspace-name] --project <project-name> [options]
243
260
 
244
261
  Options:
245
262
  --branch <name> Specify different branch name from workspace name
@@ -247,70 +264,52 @@ Options:
247
264
  --no-setup Skip setup commands
248
265
  ```
249
266
 
250
- ### `gssh switch [workspace-name]`
267
+ ### `gssh workspace context --project <project-name> --workspace <workspace-name>`
251
268
 
252
- Switch to a workspace in the current project.
269
+ Show the resolved workspace context.
253
270
 
254
271
  ```bash
255
- gssh switch [workspace-name]
256
- # Alias: gssh sw
272
+ gssh workspace context --project <project-name> --workspace <workspace-name>
257
273
  ```
258
274
 
259
- ### `gssh switch project [project-name]`
275
+ Use `--project` on workspace commands to target a project.
260
276
 
261
- Switch to a different project.
262
-
263
- ### `gssh list [subcommand]`
277
+ ### `gssh project list` / `gssh workspace list --project <project-name>`
264
278
 
265
279
  List projects or workspaces.
266
280
 
267
281
  ```bash
268
- gssh list [subcommand] [options]
269
- # Alias: gssh ls
270
-
271
- Subcommands:
272
- projects List all projects
273
- workspaces List workspaces in current project (default)
282
+ gssh project list [options]
283
+ gssh workspace list --project <project-name> [options]
274
284
 
275
285
  Options:
276
286
  --json Output in JSON format
277
287
  --verbose Show additional details
278
288
  ```
279
289
 
280
- ### `gssh remove workspace [workspace-name]`
290
+ ### `gssh workspace remove [workspace-name] --project <project-name>`
281
291
 
282
292
  Remove a workspace.
283
293
 
284
294
  ```bash
285
- gssh remove workspace [workspace-name] [options]
286
- # Alias: gssh rm workspace
295
+ gssh workspace remove [workspace-name] --project <project-name> [options]
287
296
 
288
297
  Options:
289
298
  --force Skip confirmation prompts
290
299
  --keep-branch Don't delete git branch when removing workspace
291
300
  ```
292
301
 
293
- ### `gssh remove project [project-name]`
302
+ ### `gssh project remove [project-name]`
294
303
 
295
304
  Remove a project.
296
305
 
297
306
  ```bash
298
- gssh remove project [project-name] [options]
299
- # Alias: gssh rm project
307
+ gssh project remove [project-name] [options]
300
308
 
301
309
  Options:
302
310
  --force Skip confirmation prompts
303
311
  ```
304
312
 
305
- ### `gssh directory`
306
-
307
- Print the current project directory path.
308
-
309
- ```bash
310
- gssh directory
311
- # Alias: gssh dir
312
- ```
313
-
314
313
  ## Configuration
315
314
 
316
315
  ### Global Configuration
@@ -356,14 +355,16 @@ Located at `~/gitspace/<project-name>/.config.json`:
356
355
 
357
356
  ### Custom Scripts
358
357
 
359
- GitSpace uses **convention over configuration** for custom scripts:
358
+ GitSpace uses **convention over configuration** for custom scripts. Scripts live
359
+ inside each workspace so they can vary by branch:
360
360
 
361
361
  ```
362
- ~/gitspace/<project-name>/scripts/
363
- ├── pre/ # Run before setup (terminal)
364
- ├── setup/ # Run once on workspace creation
365
- ├── select/ # Run every time workspace is opened
366
- └── remove/ # Run before workspace deletion
362
+ ~/gitspace/<project-name>/workspaces/<workspace-name>/.gitspace/
363
+ └── scripts/
364
+ ├── pre/ # Deprecated: run before setup (migrate to setup/)
365
+ ├── setup/ # Run when setup state requires refresh
366
+ ├── select/ # Run on each new terminal attach
367
+ └── remove/ # Run before workspace deletion
367
368
  ```
368
369
 
369
370
  #### Script Execution Rules
@@ -372,26 +373,23 @@ GitSpace uses **convention over configuration** for custom scripts:
372
373
  2. Scripts run **alphabetically** (use `01-`, `02-` prefixes)
373
374
  3. **Working directory**: The workspace directory
374
375
  4. **Arguments**: `$1` = workspace name, `$2` = repository name
375
- 5. **Environment**: Bundle values available as `SPACE_VALUE_*` and `SPACE_SECRET_*`
376
+ 5. **Environment**: Bundle values available by key name (for example `REGION`, `PULUMI_ACCESS_TOKEN`)
376
377
 
377
378
  #### Script Phases
378
379
 
379
380
  | Phase | When | Use Case |
380
381
  |-------|------|----------|
381
- | `pre/` | Once, before setup | Copy .env files, create directories |
382
- | `setup/` | Once, on workspace creation | Install dependencies, initial build |
383
- | `select/` | Every workspace open | Git fetch, status checks |
382
+ | `pre/` | Deprecated | Move scripts into ordered `setup/` files |
383
+ | `setup/` | When setup state changes | Install dependencies, initial build |
384
+ | `select/` | Every new terminal attach | Git fetch, status checks |
384
385
  | `remove/` | Before deletion | Cleanup, notifications |
385
386
 
386
387
  ### Environment Variables
387
388
 
388
389
  ```bash
389
- # Set the current project (overrides global config)
390
- export SPACES_CURRENT_PROJECT="my-app"
391
-
392
390
  # Available in scripts (from bundle onboarding):
393
- # SPACE_VALUE_<KEY> - Regular values
394
- # SPACE_SECRET_<KEY> - Secret values (from OS keychain)
391
+ # <KEY> - Value by exact bundle config key name
392
+ # <NORMALIZED_KEY> - Uppercase snake-case alias (e.g. teamName -> TEAM_NAME)
395
393
  ```
396
394
 
397
395
  ## Directory Structure
@@ -405,13 +403,15 @@ export SPACES_CURRENT_PROJECT="my-app"
405
403
  │ ├── workspaces/ # Git worktrees
406
404
  │ │ └── <workspace-name>/
407
405
  │ │ ├── gitspace.lock # Setup completion marker
408
- │ │ └── .prompt/ # Linear issue details (if applicable)
409
- │ │ └── issue.md
410
- │ └── scripts/ # Custom scripts
411
- ├── pre/
412
- ├── setup/
413
- ├── select/
414
- └── remove/
406
+ │ │ ├── .prompt/ # Linear issue details (if applicable)
407
+ │ │└── issue.md
408
+ └── .gitspace/
409
+ ├── bundle.json
410
+ │ └── scripts/ # Custom scripts (per worktree)
411
+ ├── pre/
412
+ │ ├── setup/
413
+ │ │ ├── select/
414
+ │ │ └── remove/
415
415
  ```
416
416
 
417
417
  ## Remote Access
@@ -423,18 +423,27 @@ GitSpace provides secure remote terminal access with **end-to-end encryption**.
423
423
  The easiest way to get remote access is through [gitspace.sh](https://gitspace.sh):
424
424
 
425
425
  ```bash
426
- # 1. Authenticate with GitHub
427
- gssh auth login
426
+ # 1. Initialize machine identity on your control host
427
+ gssh user identity init
428
+ gssh user identity show
428
429
 
429
- # 2. Reserve your subdomain (e.g., yourname.gitspace.sh)
430
- gssh host reserve yourname
430
+ # 2. Authenticate with gitspace.sh
431
+ gssh user auth login
431
432
 
432
- # 3. Start serving (creates identity if needed)
433
- gssh serve
433
+ # 3. Reserve your subdomain (e.g., yourname.gitspace.sh)
434
+ gssh user host reserve yourname
435
+ gssh user host status
434
436
 
435
- # 4. Access from browser at https://yourname.gitspace.sh
437
+ # 4. Start serving
438
+ gssh machine serve start
439
+ gssh machine serve status
440
+ gssh status
441
+
442
+ # 5. Access from browser at https://yourname.gitspace.sh
436
443
  ```
437
444
 
445
+ In hosted mode, this machine is your control node (owner): it runs the relay path, maintains access state, and is the place cloud-control state/secrets are managed.
446
+
438
447
  ### Self-Hosted Setup
439
448
 
440
449
  For complete control, run your own relay:
@@ -443,83 +452,89 @@ For complete control, run your own relay:
443
452
  # Terminal 1: Start relay server
444
453
  gssh relay start --port 4480
445
454
 
446
- # Terminal 2: Initialize identity and start serving
447
- gssh identity init --label "My MacBook"
448
- gssh serve --relay ws://localhost:4480/ws
455
+ # Terminal 2: Create relay-machine invite token
456
+ gssh invite relay-machine create --relay ws://localhost:4480/ws --machine-signing-key <BASE64_ED25519_PUB> --machine-key-exchange-key <BASE64_X25519_PUB> --label "My MacBook"
449
457
 
450
- # Terminal 3: Create invite for remote access
451
- gssh share create
452
-
453
- # Share the invite URL with collaborators
458
+ # Terminal 3: Initialize identity, enroll, and start serving
459
+ gssh user identity init
460
+ gssh machine enroll --invite "ws://localhost:4480/ws#<TOKEN>" --label "My MacBook"
461
+ gssh machine serve start
454
462
  ```
455
463
 
464
+ When `--relay` is omitted, `gssh machine serve start` lets you choose from:
465
+ - local relay (`ws://127.0.0.1:4480/ws`) if running
466
+ - account relays (`*.gitspace.sh`) discovered from your host config/account
467
+
468
+ `gssh relay start` always keeps the relay reachable locally. If account hosting is configured,
469
+ `auto` and `hosted` modes add a `*.gitspace.sh` tunnel on top of the same local relay instead of
470
+ replacing loopback access.
471
+
456
472
  ### Identity Management
457
473
 
458
474
  Every machine and client has a cryptographic identity (Ed25519 + X25519 keypair):
459
475
 
460
476
  ```bash
461
- # Create machine identity (stored in ~/gitspace/.identity/)
462
- gssh identity init --label "My MacBook"
477
+ # Create machine identity (stored in OS keychain)
478
+ gssh user identity init
463
479
 
464
480
  # View identity fingerprint
465
- gssh identity show
481
+ gssh user identity show
466
482
  ```
467
483
 
468
- ### Access Control
484
+ ### Owner Access Model
469
485
 
470
- Control who can connect to your machine:
486
+ Remote access is owner-only at runtime.
471
487
 
472
- ```bash
473
- # List authorized clients
474
- gssh access list
475
-
476
- # Add a client by public key
477
- gssh access add spcs_pk_abc123... --label "Work Laptop"
478
-
479
- # Remove client access
480
- gssh access remove spcs_pk_abc123...
481
- ```
488
+ - Clients and machines must present device certificates derived from the same owner user root identity.
489
+ - There is no collaborator ACL grant path for relay or machine access.
482
490
 
483
491
  ### Creating Invites
484
492
 
485
- Share access via signed invite tokens:
493
+ Use root-signed invites for machine enrollment only:
486
494
 
487
495
  ```bash
488
- # Create invite (24h default)
489
- gssh share create
496
+ # Create machine enrollment invite token
497
+ gssh invite relay-machine create --relay ws://localhost:4480/ws --machine-signing-key <BASE64_ED25519_PUB> --machine-key-exchange-key <BASE64_X25519_PUB>
490
498
 
491
- # Custom expiration
492
- gssh share create --expires 7d
499
+ # List/revoke enrollment invites
500
+ gssh invite list --relay ws://localhost:4480/ws
501
+ gssh invite revoke <invite-id> --relay ws://localhost:4480/ws
493
502
  ```
494
503
 
495
504
  ### Connecting Remotely
496
505
 
497
506
  ```bash
498
- # Connect using invite token
499
- gssh connect <invite-token>
507
+ # On another owner device: recover the same user root identity
508
+ gssh user identity recover
509
+
510
+ # Connect directly as owner
511
+ gssh client connect <machine-id>
500
512
 
501
- # Connect via TUI with relay
502
- gssh --relay wss://relay.example.com
513
+ # Browse machines on a relay
514
+ gssh client machines list --relay wss://relay.example.com
503
515
  ```
504
516
 
505
517
  ### Remote Access Commands
506
518
 
507
519
  | Command | Description |
508
520
  |---------|-------------|
509
- | `gssh auth login` | Authenticate with gitspace.sh (GitHub OAuth) |
510
- | `gssh auth logout` | Sign out of gitspace.sh |
511
- | `gssh host reserve <name>` | Reserve a subdomain on gitspace.sh |
512
- | `gssh host status` | Show hosting status |
513
- | `gssh identity init` | Create machine/client identity |
514
- | `gssh identity show` | Display identity fingerprint |
515
- | `gssh access add <key>` | Authorize a client |
516
- | `gssh access list` | List authorized clients |
517
- | `gssh access remove <key>` | Revoke client access |
518
- | `gssh serve` | Start machine daemon |
519
- | `gssh serve start` | Start serve as background daemon |
520
- | `gssh serve stop` | Stop background serve daemon |
521
- | `gssh share create` | Create invite token |
522
- | `gssh connect <token>` | Connect to remote machine |
521
+ | `gssh user auth login` | Authenticate with gitspace.sh (GitHub OAuth) |
522
+ | `gssh user auth logout` | Sign out of gitspace.sh |
523
+ | `gssh user host reserve <name>` | Reserve a subdomain on gitspace.sh |
524
+ | `gssh user host status` | Show hosting status |
525
+ | `gssh user identity init` | Create user root identity |
526
+ | `gssh user identity recover` | Recover identity from mnemonic |
527
+ | `gssh user identity show` | Display identity fingerprint |
528
+ | `gssh machine serve start --foreground` | Start machine daemon |
529
+ | `gssh machine serve start` | Start serve as background daemon |
530
+ | `gssh machine serve stop` | Stop background serve daemon |
531
+ | `gssh cloud status` | Show cloud control status on current control node |
532
+ | `gssh cloud list` | List cloud workspaces from control store |
533
+ | `gssh invite relay-machine create --relay <url> --machine-signing-key <k> --machine-key-exchange-key <k>` | Create machine enrollment invite |
534
+ | `gssh invite list --relay <url>` | List root-signed invites |
535
+ | `gssh invite revoke <invite-id> --relay <url>` | Revoke root-signed invite |
536
+ | `gssh client connect <target>` | Connect to remote machine |
537
+ | `gssh client machines list --relay <url>` | List accessible remote machines |
523
538
  | `gssh status` | Show all daemon statuses |
524
539
 
525
540
  ### Relay Server Commands
@@ -529,11 +544,11 @@ For self-hosted relay servers:
529
544
  | Command | Description |
530
545
  |---------|-------------|
531
546
  | `gssh relay start` | Start relay server |
532
- | `gssh relay authorize <key>` | Authorize a machine |
533
- | `gssh relay revoke <key>` | Revoke machine authorization |
534
- | `gssh relay machines` | List registered machines |
535
- | `gssh relay trusted` | List trusted relays |
536
- | `gssh relay untrust <url>` | Remove relay trust |
547
+ | `gssh relay stop` | Stop relay server |
548
+ | `gssh relay status` | Show relay server status |
549
+ | `gssh invite relay-machine create --relay <url> --machine-signing-key <k> --machine-key-exchange-key <k>` | Create machine enrollment invite |
550
+ | `gssh relay machines list` | List registered machines |
551
+ | `gssh relay machines revoke <machine-id>` | Revoke machine registration |
537
552
 
538
553
  ### Terminal Multiplexer (tmux-lite)
539
554
 
@@ -541,12 +556,12 @@ Manage terminal sessions:
541
556
 
542
557
  | Command | Description |
543
558
  |---------|-------------|
544
- | `gssh tmux start` | Start tmux-lite daemon |
545
- | `gssh tmux stop` | Stop tmux-lite daemon |
546
- | `gssh tmux list` | List sessions |
547
- | `gssh tmux attach <id>` | Attach to session |
548
- | `gssh tmux new` | Create new session |
549
- | `gssh tmux kill <id>` | Kill session |
559
+ | `gssh machine tmux start` | Start tmux-lite daemon |
560
+ | `gssh machine tmux stop` | Stop tmux-lite daemon |
561
+ | `gssh machine tmux list` | List sessions |
562
+ | `gssh machine tmux attach <id>` | Attach to session |
563
+ | `gssh machine tmux new` | Create new session |
564
+ | `gssh machine tmux kill <id>` | Kill session |
550
565
 
551
566
  ### Environment Variables
552
567
 
@@ -555,9 +570,6 @@ Manage terminal sessions:
555
570
  RELAY_PORT=4480 # Default relay port
556
571
  RELAY_BIND=0.0.0.0 # Bind address
557
572
 
558
- # Machine identity
559
- GSSH_IDENTITY_PATH=~/gitspace/.identity/ # Identity storage
560
-
561
573
  # gitspace.sh
562
574
  GITSPACE_API_URL=https://api.gitspace.sh # API endpoint
563
575
  ```
@@ -587,7 +599,7 @@ Error: GitHub CLI is not authenticated
587
599
 
588
600
  ### Bundle secrets not available
589
601
 
590
- If `SPACE_SECRET_*` variables are empty, ensure:
602
+ If expected bundle key environment variables are empty, ensure:
591
603
  1. You completed the onboarding secret steps
592
604
  2. Your OS keychain service is running (libsecret on Linux, Keychain on macOS)
593
605
 
package/package.json CHANGED
@@ -1,26 +1,36 @@
1
1
  {
2
2
  "name": "gitspace",
3
- "version": "0.2.0-rc.4",
3
+ "version": "0.2.0-rc.40",
4
4
  "description": "CLI for managing GitHub workspaces with git worktrees and secure remote terminal access",
5
5
  "bin": {
6
6
  "gssh": "./bin/gssh"
7
7
  },
8
+ "files": [
9
+ "bin",
10
+ "README.md",
11
+ "LICENSE"
12
+ ],
8
13
  "type": "module",
9
14
  "scripts": {
10
15
  "dev": "bun src/index.ts",
11
- "typecheck": "tsc --noEmit",
16
+ "dev:web": "bun scripts/dev.ts",
17
+ "check:lockfile-sync": "bun scripts/check-lockfile-sync.ts",
18
+ "typecheck": "tsgo --noEmit -p tsconfig.json",
12
19
  "lint": "eslint src/",
13
- "build:web": "cd src/web && bun install && bun run build",
20
+ "build:web": "cd web && bun install && bun run build",
14
21
  "build": "bun scripts/build.ts",
15
22
  "build:all": "bun scripts/build.ts --all",
16
23
  "build:npm": "bun scripts/build.ts --npm",
17
- "relay": "bun src/relay/index.ts"
24
+ "relay": "bun src/relay/index.ts",
25
+ "e2e:on-demand": "bash scripts/e2e/run-on-demand.sh",
26
+ "check:arch": "node node_modules/.bin/depcruise src --config .dependency-cruiser.cjs --output-type err",
27
+ "check:arch:json": "node node_modules/.bin/depcruise src --config .dependency-cruiser.cjs --output-type json"
18
28
  },
19
29
  "optionalDependencies": {
20
- "@gitspace/darwin-arm64": "0.2.0-rc.4",
21
- "@gitspace/darwin-x64": "0.2.0-rc.4",
22
- "@gitspace/linux-x64": "0.2.0-rc.4",
23
- "@gitspace/linux-arm64": "0.2.0-rc.4"
30
+ "@gitspace/darwin-arm64": "0.2.0-rc.40",
31
+ "@gitspace/darwin-x64": "0.2.0-rc.40",
32
+ "@gitspace/linux-x64": "0.2.0-rc.40",
33
+ "@gitspace/linux-arm64": "0.2.0-rc.40"
24
34
  },
25
35
  "keywords": [
26
36
  "cli",
@@ -35,41 +45,60 @@
35
45
  "homepage": "https://gitspace.sh",
36
46
  "repository": {
37
47
  "type": "git",
38
- "url": "https://github.com/inkibra/gitspace.sh.git"
48
+ "url": "https://github.com/inKibra/gitspace.sh.git"
39
49
  },
40
50
  "author": "inKibra, Inc.",
41
51
  "license": "SEE LICENSE IN LICENSE",
42
52
  "dependencies": {
43
- "@inquirer/prompts": "^7.2.0",
44
- "@linear/sdk": "^29.0.0",
53
+ "@fly/sprites": "0.0.1-rc37",
54
+ "@inquirer/prompts": "^7.10.1",
55
+ "@linear/sdk": "^80.1.0",
45
56
  "@noble/curves": "^2.0.1",
46
57
  "@noble/hashes": "^2.0.1",
47
- "@opentui/core": "^0.1.60",
48
- "@opentui/react": "^0.1.60",
58
+ "@oh-my-pi/pi-ai": "13.17.5",
59
+ "@oh-my-pi/pi-coding-agent": "13.17.5",
60
+ "@oh-my-pi/pi-tui": "13.17.5",
61
+ "@opentui-ui/toast": "^0.0.5",
62
+ "@opentui/core": "^0.1.77",
63
+ "@opentui/react": "^0.1.77",
64
+ "@scure/bip39": "^2.0.1",
49
65
  "@types/ws": "^8.18.1",
50
- "@xterm/addon-serialize": "^0.13.0",
51
- "@xterm/headless": "^5.5.0",
52
- "ansi-escapes": "^7.2.0",
53
- "chalk": "^5.3.0",
54
- "commander": "^12.0.0",
66
+ "@xterm/addon-serialize": "^0.14.0",
67
+ "@xterm/headless": "^6.0.0",
68
+ "ansi-escapes": "^7.3.0",
69
+ "chalk": "^5.6.2",
70
+ "clipboardy": "^5.2.1",
71
+ "commander": "^12.1.0",
55
72
  "conf": "^12.0.0",
56
- "ghostty-opentui": "^1.3.11",
73
+ "diff": "^8.0.4",
74
+ "ghostty-opentui": "^1.3.13",
75
+ "hono": "^4.6.0",
57
76
  "open": "^11.0.0",
58
- "ora": "^8.0.1",
59
- "react": "^19.2.3",
60
- "simple-git": "^3.23.0",
61
- "ws": "^8.18.3"
77
+ "ora": "^8.2.0",
78
+ "react": "^19.2.4",
79
+ "react-dom": "^19.2.4",
80
+ "simple-git": "^3.30.0",
81
+ "ws": "^8.19.0"
62
82
  },
63
83
  "devDependencies": {
64
- "@types/bun": "^1.3.4",
65
- "@types/node": "^20.11.20",
66
- "@types/react": "^19.2.7",
84
+ "@testing-library/react": "^16.3.2",
85
+ "@types/bun": "^1.3.8",
86
+ "@types/node": "^20.19.32",
87
+ "@types/react": "^19.2.13",
67
88
  "@types/react-dom": "^19.2.3",
68
- "eslint": "^8.57.0",
69
- "typescript": "^5.3.3"
89
+ "@typescript/native-preview": "^7.0.0-dev.20260302.1",
90
+ "dependency-cruiser": "^17.3.9",
91
+ "eslint": "^8.57.1",
92
+ "happy-dom": "^20.5.0",
93
+ "miniflare": "^3.20250718.3"
70
94
  },
71
95
  "engines": {
72
- "bun": ">=1.3.5"
96
+ "bun": ">=1.3.8"
73
97
  },
74
- "packageManager": "pnpm@10.12.1+sha512.f0dda8580f0ee9481c5c79a1d927b9164f2c478e90992ad268bbb2465a736984391d6333d2c327913578b2804af33474ca554ba29c04a8b13060a717675ae3ac"
98
+ "patchedDependencies": {
99
+ "@oh-my-pi/pi-coding-agent@13.17.5": "patches/@oh-my-pi%2Fpi-coding-agent@13.17.5.patch",
100
+ "@oh-my-pi/pi-utils@13.17.5": "patches/@oh-my-pi%2Fpi-utils@13.17.5.patch",
101
+ "markit-ai@0.5.0": "patches/markit-ai@0.5.0.patch",
102
+ "@oh-my-pi/pi-natives@13.17.5": "patches/@oh-my-pi%2Fpi-natives@13.17.5.patch"
103
+ }
75
104
  }