gitspace 0.2.0-rc.1

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