parasor 0.1.0

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 (633) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +208 -0
  3. package/THIRD-PARTY-NOTICES.md +138 -0
  4. package/bin/parasor.mjs +3 -0
  5. package/node_modules/@parasor/shared/dist/client.d.ts +8 -0
  6. package/node_modules/@parasor/shared/dist/client.d.ts.map +1 -0
  7. package/node_modules/@parasor/shared/dist/client.js +2 -0
  8. package/node_modules/@parasor/shared/dist/client.js.map +1 -0
  9. package/node_modules/@parasor/shared/dist/drops.d.ts +24 -0
  10. package/node_modules/@parasor/shared/dist/drops.d.ts.map +1 -0
  11. package/node_modules/@parasor/shared/dist/drops.js +2 -0
  12. package/node_modules/@parasor/shared/dist/drops.js.map +1 -0
  13. package/node_modules/@parasor/shared/dist/file-uploads.d.ts +56 -0
  14. package/node_modules/@parasor/shared/dist/file-uploads.d.ts.map +1 -0
  15. package/node_modules/@parasor/shared/dist/file-uploads.js +13 -0
  16. package/node_modules/@parasor/shared/dist/file-uploads.js.map +1 -0
  17. package/node_modules/@parasor/shared/dist/ide-commands.d.ts +8 -0
  18. package/node_modules/@parasor/shared/dist/ide-commands.d.ts.map +1 -0
  19. package/node_modules/@parasor/shared/dist/ide-commands.js +59 -0
  20. package/node_modules/@parasor/shared/dist/ide-commands.js.map +1 -0
  21. package/node_modules/@parasor/shared/dist/pane-commands.d.ts +7 -0
  22. package/node_modules/@parasor/shared/dist/pane-commands.d.ts.map +1 -0
  23. package/node_modules/@parasor/shared/dist/pane-commands.js +47 -0
  24. package/node_modules/@parasor/shared/dist/pane-commands.js.map +1 -0
  25. package/node_modules/@parasor/shared/dist/pane-model.d.ts +63 -0
  26. package/node_modules/@parasor/shared/dist/pane-model.d.ts.map +1 -0
  27. package/node_modules/@parasor/shared/dist/pane-model.js +89 -0
  28. package/node_modules/@parasor/shared/dist/pane-model.js.map +1 -0
  29. package/node_modules/@parasor/shared/dist/panes.d.ts +33 -0
  30. package/node_modules/@parasor/shared/dist/panes.d.ts.map +1 -0
  31. package/node_modules/@parasor/shared/dist/panes.js +2 -0
  32. package/node_modules/@parasor/shared/dist/panes.js.map +1 -0
  33. package/node_modules/@parasor/shared/dist/runtime.d.ts +180 -0
  34. package/node_modules/@parasor/shared/dist/runtime.d.ts.map +1 -0
  35. package/node_modules/@parasor/shared/dist/runtime.js +2 -0
  36. package/node_modules/@parasor/shared/dist/runtime.js.map +1 -0
  37. package/node_modules/@parasor/shared/dist/state.d.ts +192 -0
  38. package/node_modules/@parasor/shared/dist/state.d.ts.map +1 -0
  39. package/node_modules/@parasor/shared/dist/state.js +10 -0
  40. package/node_modules/@parasor/shared/dist/state.js.map +1 -0
  41. package/node_modules/@parasor/shared/dist/terminal.d.ts +191 -0
  42. package/node_modules/@parasor/shared/dist/terminal.d.ts.map +1 -0
  43. package/node_modules/@parasor/shared/dist/terminal.js +174 -0
  44. package/node_modules/@parasor/shared/dist/terminal.js.map +1 -0
  45. package/node_modules/@parasor/shared/dist/types.d.ts +13 -0
  46. package/node_modules/@parasor/shared/dist/types.d.ts.map +1 -0
  47. package/node_modules/@parasor/shared/dist/types.js +13 -0
  48. package/node_modules/@parasor/shared/dist/types.js.map +1 -0
  49. package/node_modules/@parasor/shared/dist/worktree-local-files.d.ts +14 -0
  50. package/node_modules/@parasor/shared/dist/worktree-local-files.d.ts.map +1 -0
  51. package/node_modules/@parasor/shared/dist/worktree-local-files.js +41 -0
  52. package/node_modules/@parasor/shared/dist/worktree-local-files.js.map +1 -0
  53. package/node_modules/@parasor/shared/dist/ws-events.d.ts +152 -0
  54. package/node_modules/@parasor/shared/dist/ws-events.d.ts.map +1 -0
  55. package/node_modules/@parasor/shared/dist/ws-events.js +2 -0
  56. package/node_modules/@parasor/shared/dist/ws-events.js.map +1 -0
  57. package/node_modules/@parasor/shared/package.json +13 -0
  58. package/package.json +61 -0
  59. package/server/agent-detector/agent-state-store.d.ts +23 -0
  60. package/server/agent-detector/agent-state-store.d.ts.map +1 -0
  61. package/server/agent-detector/agent-state-store.js +110 -0
  62. package/server/agent-detector/agent-state-store.js.map +1 -0
  63. package/server/agent-detector/detector.d.ts +80 -0
  64. package/server/agent-detector/detector.d.ts.map +1 -0
  65. package/server/agent-detector/detector.js +219 -0
  66. package/server/agent-detector/detector.js.map +1 -0
  67. package/server/agent-detector/event-map.d.ts +25 -0
  68. package/server/agent-detector/event-map.d.ts.map +1 -0
  69. package/server/agent-detector/event-map.js +136 -0
  70. package/server/agent-detector/event-map.js.map +1 -0
  71. package/server/agent-detector/manual-agent-tracker.d.ts +19 -0
  72. package/server/agent-detector/manual-agent-tracker.d.ts.map +1 -0
  73. package/server/agent-detector/manual-agent-tracker.js +123 -0
  74. package/server/agent-detector/manual-agent-tracker.js.map +1 -0
  75. package/server/agent-detector/output-eligibility.d.ts +3 -0
  76. package/server/agent-detector/output-eligibility.d.ts.map +1 -0
  77. package/server/agent-detector/output-eligibility.js +39 -0
  78. package/server/agent-detector/output-eligibility.js.map +1 -0
  79. package/server/application/files/errors.d.ts +28 -0
  80. package/server/application/files/errors.d.ts.map +1 -0
  81. package/server/application/files/errors.js +55 -0
  82. package/server/application/files/errors.js.map +1 -0
  83. package/server/application/files/local-filesystem.d.ts +36 -0
  84. package/server/application/files/local-filesystem.d.ts.map +1 -0
  85. package/server/application/files/local-filesystem.js +171 -0
  86. package/server/application/files/local-filesystem.js.map +1 -0
  87. package/server/application/files/project-file-queries.d.ts +16 -0
  88. package/server/application/files/project-file-queries.d.ts.map +1 -0
  89. package/server/application/files/project-file-queries.js +126 -0
  90. package/server/application/files/project-file-queries.js.map +1 -0
  91. package/server/application/integrations/errors.d.ts +16 -0
  92. package/server/application/integrations/errors.d.ts.map +1 -0
  93. package/server/application/integrations/errors.js +31 -0
  94. package/server/application/integrations/errors.js.map +1 -0
  95. package/server/application/integrations/hook-notify.d.ts +32 -0
  96. package/server/application/integrations/hook-notify.d.ts.map +1 -0
  97. package/server/application/integrations/hook-notify.js +118 -0
  98. package/server/application/integrations/hook-notify.js.map +1 -0
  99. package/server/application/integrations/open-url.d.ts +11 -0
  100. package/server/application/integrations/open-url.d.ts.map +1 -0
  101. package/server/application/integrations/open-url.js +23 -0
  102. package/server/application/integrations/open-url.js.map +1 -0
  103. package/server/application/ports.d.ts +11 -0
  104. package/server/application/ports.d.ts.map +1 -0
  105. package/server/application/ports.js +2 -0
  106. package/server/application/ports.js.map +1 -0
  107. package/server/application/workspace/errors.d.ts +21 -0
  108. package/server/application/workspace/errors.d.ts.map +1 -0
  109. package/server/application/workspace/errors.js +21 -0
  110. package/server/application/workspace/errors.js.map +1 -0
  111. package/server/application/workspace/pane-commands.d.ts +47 -0
  112. package/server/application/workspace/pane-commands.d.ts.map +1 -0
  113. package/server/application/workspace/pane-commands.js +193 -0
  114. package/server/application/workspace/pane-commands.js.map +1 -0
  115. package/server/application/workspace/project-commands.d.ts +34 -0
  116. package/server/application/workspace/project-commands.d.ts.map +1 -0
  117. package/server/application/workspace/project-commands.js +81 -0
  118. package/server/application/workspace/project-commands.js.map +1 -0
  119. package/server/application/workspace/project-queries.d.ts +21 -0
  120. package/server/application/workspace/project-queries.d.ts.map +1 -0
  121. package/server/application/workspace/project-queries.js +216 -0
  122. package/server/application/workspace/project-queries.js.map +1 -0
  123. package/server/application/workspace/session-commands.d.ts +24 -0
  124. package/server/application/workspace/session-commands.d.ts.map +1 -0
  125. package/server/application/workspace/session-commands.js +123 -0
  126. package/server/application/workspace/session-commands.js.map +1 -0
  127. package/server/application/workspace/session-queries.d.ts +14 -0
  128. package/server/application/workspace/session-queries.d.ts.map +1 -0
  129. package/server/application/workspace/session-queries.js +47 -0
  130. package/server/application/workspace/session-queries.js.map +1 -0
  131. package/server/application/workspace/worktree-commands.d.ts +98 -0
  132. package/server/application/workspace/worktree-commands.d.ts.map +1 -0
  133. package/server/application/workspace/worktree-commands.js +323 -0
  134. package/server/application/workspace/worktree-commands.js.map +1 -0
  135. package/server/application/workspace/worktree-local-files.d.ts +11 -0
  136. package/server/application/workspace/worktree-local-files.d.ts.map +1 -0
  137. package/server/application/workspace/worktree-local-files.js +223 -0
  138. package/server/application/workspace/worktree-local-files.js.map +1 -0
  139. package/server/application/workspace/worktree-reconcile.d.ts +21 -0
  140. package/server/application/workspace/worktree-reconcile.d.ts.map +1 -0
  141. package/server/application/workspace/worktree-reconcile.js +49 -0
  142. package/server/application/workspace/worktree-reconcile.js.map +1 -0
  143. package/server/auth/origin.d.ts +17 -0
  144. package/server/auth/origin.d.ts.map +1 -0
  145. package/server/auth/origin.js +93 -0
  146. package/server/auth/origin.js.map +1 -0
  147. package/server/auth/pairing-token.d.ts +28 -0
  148. package/server/auth/pairing-token.d.ts.map +1 -0
  149. package/server/auth/pairing-token.js +46 -0
  150. package/server/auth/pairing-token.js.map +1 -0
  151. package/server/auth/token-exchange.d.ts +11 -0
  152. package/server/auth/token-exchange.d.ts.map +1 -0
  153. package/server/auth/token-exchange.js +27 -0
  154. package/server/auth/token-exchange.js.map +1 -0
  155. package/server/auth/token.d.ts +18 -0
  156. package/server/auth/token.d.ts.map +1 -0
  157. package/server/auth/token.js +115 -0
  158. package/server/auth/token.js.map +1 -0
  159. package/server/bootstrap/create-app-server.d.ts +49 -0
  160. package/server/bootstrap/create-app-server.d.ts.map +1 -0
  161. package/server/bootstrap/create-app-server.js +154 -0
  162. package/server/bootstrap/create-app-server.js.map +1 -0
  163. package/server/bootstrap/project-runtime.d.ts +29 -0
  164. package/server/bootstrap/project-runtime.d.ts.map +1 -0
  165. package/server/bootstrap/project-runtime.js +253 -0
  166. package/server/bootstrap/project-runtime.js.map +1 -0
  167. package/server/bootstrap/pty-env.d.ts +3 -0
  168. package/server/bootstrap/pty-env.d.ts.map +1 -0
  169. package/server/bootstrap/pty-env.js +15 -0
  170. package/server/bootstrap/pty-env.js.map +1 -0
  171. package/server/bootstrap/reconcile-state.d.ts +16 -0
  172. package/server/bootstrap/reconcile-state.d.ts.map +1 -0
  173. package/server/bootstrap/reconcile-state.js +73 -0
  174. package/server/bootstrap/reconcile-state.js.map +1 -0
  175. package/server/bootstrap/runtime-loops.d.ts +51 -0
  176. package/server/bootstrap/runtime-loops.d.ts.map +1 -0
  177. package/server/bootstrap/runtime-loops.js +189 -0
  178. package/server/bootstrap/runtime-loops.js.map +1 -0
  179. package/server/bootstrap/runtime-port.d.ts +4 -0
  180. package/server/bootstrap/runtime-port.d.ts.map +1 -0
  181. package/server/bootstrap/runtime-port.js +52 -0
  182. package/server/bootstrap/runtime-port.js.map +1 -0
  183. package/server/bootstrap/safety-gate.d.ts +22 -0
  184. package/server/bootstrap/safety-gate.d.ts.map +1 -0
  185. package/server/bootstrap/safety-gate.js +43 -0
  186. package/server/bootstrap/safety-gate.js.map +1 -0
  187. package/server/bootstrap/shutdown-marker.d.ts +35 -0
  188. package/server/bootstrap/shutdown-marker.d.ts.map +1 -0
  189. package/server/bootstrap/shutdown-marker.js +100 -0
  190. package/server/bootstrap/shutdown-marker.js.map +1 -0
  191. package/server/bootstrap/shutdown-runtime.d.ts +62 -0
  192. package/server/bootstrap/shutdown-runtime.d.ts.map +1 -0
  193. package/server/bootstrap/shutdown-runtime.js +66 -0
  194. package/server/bootstrap/shutdown-runtime.js.map +1 -0
  195. package/server/bootstrap/startup-banner.d.ts +34 -0
  196. package/server/bootstrap/startup-banner.d.ts.map +1 -0
  197. package/server/bootstrap/startup-banner.js +114 -0
  198. package/server/bootstrap/startup-banner.js.map +1 -0
  199. package/server/bootstrap/wire-runtime.d.ts +42 -0
  200. package/server/bootstrap/wire-runtime.d.ts.map +1 -0
  201. package/server/bootstrap/wire-runtime.js +205 -0
  202. package/server/bootstrap/wire-runtime.js.map +1 -0
  203. package/server/cli/help.d.ts +3 -0
  204. package/server/cli/help.d.ts.map +1 -0
  205. package/server/cli/help.js +39 -0
  206. package/server/cli/help.js.map +1 -0
  207. package/server/cli/hook-client.d.ts +12 -0
  208. package/server/cli/hook-client.d.ts.map +1 -0
  209. package/server/cli/hook-client.js +81 -0
  210. package/server/cli/hook-client.js.map +1 -0
  211. package/server/cli/hook.d.ts +3 -0
  212. package/server/cli/hook.d.ts.map +1 -0
  213. package/server/cli/hook.js +152 -0
  214. package/server/cli/hook.js.map +1 -0
  215. package/server/cli/main.d.ts +2 -0
  216. package/server/cli/main.d.ts.map +1 -0
  217. package/server/cli/main.js +133 -0
  218. package/server/cli/main.js.map +1 -0
  219. package/server/cli/notify.d.ts +19 -0
  220. package/server/cli/notify.d.ts.map +1 -0
  221. package/server/cli/notify.js +77 -0
  222. package/server/cli/notify.js.map +1 -0
  223. package/server/cli/open.d.ts +2 -0
  224. package/server/cli/open.d.ts.map +1 -0
  225. package/server/cli/open.js +47 -0
  226. package/server/cli/open.js.map +1 -0
  227. package/server/cli/probe-daemon-version.d.ts +46 -0
  228. package/server/cli/probe-daemon-version.d.ts.map +1 -0
  229. package/server/cli/probe-daemon-version.js +167 -0
  230. package/server/cli/probe-daemon-version.js.map +1 -0
  231. package/server/cli/pty-host.d.ts +36 -0
  232. package/server/cli/pty-host.d.ts.map +1 -0
  233. package/server/cli/pty-host.js +390 -0
  234. package/server/cli/pty-host.js.map +1 -0
  235. package/server/cli/qr.d.ts +2 -0
  236. package/server/cli/qr.d.ts.map +1 -0
  237. package/server/cli/qr.js +70 -0
  238. package/server/cli/qr.js.map +1 -0
  239. package/server/cli/restart-confirm.d.ts +33 -0
  240. package/server/cli/restart-confirm.d.ts.map +1 -0
  241. package/server/cli/restart-confirm.js +107 -0
  242. package/server/cli/restart-confirm.js.map +1 -0
  243. package/server/cli/restart.d.ts +17 -0
  244. package/server/cli/restart.d.ts.map +1 -0
  245. package/server/cli/restart.js +145 -0
  246. package/server/cli/restart.js.map +1 -0
  247. package/server/cli/service-darwin.d.ts +70 -0
  248. package/server/cli/service-darwin.d.ts.map +1 -0
  249. package/server/cli/service-darwin.js +562 -0
  250. package/server/cli/service-darwin.js.map +1 -0
  251. package/server/cli/service-linux.d.ts +81 -0
  252. package/server/cli/service-linux.d.ts.map +1 -0
  253. package/server/cli/service-linux.js +412 -0
  254. package/server/cli/service-linux.js.map +1 -0
  255. package/server/cli/service.d.ts +33 -0
  256. package/server/cli/service.d.ts.map +1 -0
  257. package/server/cli/service.js +133 -0
  258. package/server/cli/service.js.map +1 -0
  259. package/server/cli/shim-installer.d.ts +35 -0
  260. package/server/cli/shim-installer.d.ts.map +1 -0
  261. package/server/cli/shim-installer.js +662 -0
  262. package/server/cli/shim-installer.js.map +1 -0
  263. package/server/cli/shim-open.d.ts +2 -0
  264. package/server/cli/shim-open.d.ts.map +1 -0
  265. package/server/cli/shim-open.js +128 -0
  266. package/server/cli/shim-open.js.map +1 -0
  267. package/server/cli/shutdown-deps.d.ts +41 -0
  268. package/server/cli/shutdown-deps.d.ts.map +1 -0
  269. package/server/cli/shutdown-deps.js +158 -0
  270. package/server/cli/shutdown-deps.js.map +1 -0
  271. package/server/cli/stop.d.ts +11 -0
  272. package/server/cli/stop.d.ts.map +1 -0
  273. package/server/cli/stop.js +123 -0
  274. package/server/cli/stop.js.map +1 -0
  275. package/server/cli/unknown-command.d.ts +8 -0
  276. package/server/cli/unknown-command.d.ts.map +1 -0
  277. package/server/cli/unknown-command.js +14 -0
  278. package/server/cli/unknown-command.js.map +1 -0
  279. package/server/debug/agent-status-recorder.d.ts +57 -0
  280. package/server/debug/agent-status-recorder.d.ts.map +1 -0
  281. package/server/debug/agent-status-recorder.js +209 -0
  282. package/server/debug/agent-status-recorder.js.map +1 -0
  283. package/server/debug/terminal-trace-recorder.d.ts +41 -0
  284. package/server/debug/terminal-trace-recorder.d.ts.map +1 -0
  285. package/server/debug/terminal-trace-recorder.js +112 -0
  286. package/server/debug/terminal-trace-recorder.js.map +1 -0
  287. package/server/fonts/catalog.d.ts +35 -0
  288. package/server/fonts/catalog.d.ts.map +1 -0
  289. package/server/fonts/catalog.js +76 -0
  290. package/server/fonts/catalog.js.map +1 -0
  291. package/server/fonts/installer.d.ts +45 -0
  292. package/server/fonts/installer.d.ts.map +1 -0
  293. package/server/fonts/installer.js +201 -0
  294. package/server/fonts/installer.js.map +1 -0
  295. package/server/fonts/routes.d.ts +4 -0
  296. package/server/fonts/routes.d.ts.map +1 -0
  297. package/server/fonts/routes.js +91 -0
  298. package/server/fonts/routes.js.map +1 -0
  299. package/server/fs/drops.d.ts +50 -0
  300. package/server/fs/drops.d.ts.map +1 -0
  301. package/server/fs/drops.js +137 -0
  302. package/server/fs/drops.js.map +1 -0
  303. package/server/fs/file-uploads.d.ts +57 -0
  304. package/server/fs/file-uploads.d.ts.map +1 -0
  305. package/server/fs/file-uploads.js +214 -0
  306. package/server/fs/file-uploads.js.map +1 -0
  307. package/server/fs/file-watcher.d.ts +22 -0
  308. package/server/fs/file-watcher.d.ts.map +1 -0
  309. package/server/fs/file-watcher.js +105 -0
  310. package/server/fs/file-watcher.js.map +1 -0
  311. package/server/fs/git-watcher.d.ts +76 -0
  312. package/server/fs/git-watcher.d.ts.map +1 -0
  313. package/server/fs/git-watcher.js +356 -0
  314. package/server/fs/git-watcher.js.map +1 -0
  315. package/server/fs/media.d.ts +35 -0
  316. package/server/fs/media.d.ts.map +1 -0
  317. package/server/fs/media.js +271 -0
  318. package/server/fs/media.js.map +1 -0
  319. package/server/fs/service.d.ts +97 -0
  320. package/server/fs/service.d.ts.map +1 -0
  321. package/server/fs/service.js +306 -0
  322. package/server/fs/service.js.map +1 -0
  323. package/server/fs/upload-staging.d.ts +76 -0
  324. package/server/fs/upload-staging.d.ts.map +1 -0
  325. package/server/fs/upload-staging.js +283 -0
  326. package/server/fs/upload-staging.js.map +1 -0
  327. package/server/fs/watcher-lifecycle.d.ts +24 -0
  328. package/server/fs/watcher-lifecycle.d.ts.map +1 -0
  329. package/server/fs/watcher-lifecycle.js +105 -0
  330. package/server/fs/watcher-lifecycle.js.map +1 -0
  331. package/server/index.d.ts +17 -0
  332. package/server/index.d.ts.map +1 -0
  333. package/server/index.js +510 -0
  334. package/server/index.js.map +1 -0
  335. package/server/ipc/socket-server.d.ts +28 -0
  336. package/server/ipc/socket-server.d.ts.map +1 -0
  337. package/server/ipc/socket-server.js +206 -0
  338. package/server/ipc/socket-server.js.map +1 -0
  339. package/server/lib/git-exec.d.ts +38 -0
  340. package/server/lib/git-exec.d.ts.map +1 -0
  341. package/server/lib/git-exec.js +96 -0
  342. package/server/lib/git-exec.js.map +1 -0
  343. package/server/lib/open-in-ide.d.ts +22 -0
  344. package/server/lib/open-in-ide.d.ts.map +1 -0
  345. package/server/lib/open-in-ide.js +90 -0
  346. package/server/lib/open-in-ide.js.map +1 -0
  347. package/server/lib/open-in-os.d.ts +20 -0
  348. package/server/lib/open-in-os.d.ts.map +1 -0
  349. package/server/lib/open-in-os.js +51 -0
  350. package/server/lib/open-in-os.js.map +1 -0
  351. package/server/lib/path.d.ts +2 -0
  352. package/server/lib/path.d.ts.map +1 -0
  353. package/server/lib/path.js +10 -0
  354. package/server/lib/path.js.map +1 -0
  355. package/server/lib/promise-mutex.d.ts +7 -0
  356. package/server/lib/promise-mutex.d.ts.map +1 -0
  357. package/server/lib/promise-mutex.js +26 -0
  358. package/server/lib/promise-mutex.js.map +1 -0
  359. package/server/lib/sd-notify.d.ts +8 -0
  360. package/server/lib/sd-notify.d.ts.map +1 -0
  361. package/server/lib/sd-notify.js +27 -0
  362. package/server/lib/sd-notify.js.map +1 -0
  363. package/server/net/local-machine.d.ts +7 -0
  364. package/server/net/local-machine.d.ts.map +1 -0
  365. package/server/net/local-machine.js +79 -0
  366. package/server/net/local-machine.js.map +1 -0
  367. package/server/net/reachable-host.d.ts +12 -0
  368. package/server/net/reachable-host.d.ts.map +1 -0
  369. package/server/net/reachable-host.js +25 -0
  370. package/server/net/reachable-host.js.map +1 -0
  371. package/server/network/endpoints.d.ts +14 -0
  372. package/server/network/endpoints.d.ts.map +1 -0
  373. package/server/network/endpoints.js +104 -0
  374. package/server/network/endpoints.js.map +1 -0
  375. package/server/network/qr.d.ts +16 -0
  376. package/server/network/qr.d.ts.map +1 -0
  377. package/server/network/qr.js +89 -0
  378. package/server/network/qr.js.map +1 -0
  379. package/server/port-forwarder/forwarder.d.ts +47 -0
  380. package/server/port-forwarder/forwarder.d.ts.map +1 -0
  381. package/server/port-forwarder/forwarder.js +159 -0
  382. package/server/port-forwarder/forwarder.js.map +1 -0
  383. package/server/port-scanner/scanner.d.ts +24 -0
  384. package/server/port-scanner/scanner.d.ts.map +1 -0
  385. package/server/port-scanner/scanner.js +193 -0
  386. package/server/port-scanner/scanner.js.map +1 -0
  387. package/server/pty/connection-lifecycle.d.ts +50 -0
  388. package/server/pty/connection-lifecycle.d.ts.map +1 -0
  389. package/server/pty/connection-lifecycle.js +113 -0
  390. package/server/pty/connection-lifecycle.js.map +1 -0
  391. package/server/pty/daemon-connect.d.ts +52 -0
  392. package/server/pty/daemon-connect.d.ts.map +1 -0
  393. package/server/pty/daemon-connect.js +62 -0
  394. package/server/pty/daemon-connect.js.map +1 -0
  395. package/server/pty/handshake-timeout-race.d.ts +22 -0
  396. package/server/pty/handshake-timeout-race.d.ts.map +1 -0
  397. package/server/pty/handshake-timeout-race.js +23 -0
  398. package/server/pty/handshake-timeout-race.js.map +1 -0
  399. package/server/pty/headless-replay-snapshot.d.ts +28 -0
  400. package/server/pty/headless-replay-snapshot.d.ts.map +1 -0
  401. package/server/pty/headless-replay-snapshot.js +285 -0
  402. package/server/pty/headless-replay-snapshot.js.map +1 -0
  403. package/server/pty/headless-terminal-state-cache.d.ts +31 -0
  404. package/server/pty/headless-terminal-state-cache.d.ts.map +1 -0
  405. package/server/pty/headless-terminal-state-cache.js +119 -0
  406. package/server/pty/headless-terminal-state-cache.js.map +1 -0
  407. package/server/pty/hello-ack-validator.d.ts +15 -0
  408. package/server/pty/hello-ack-validator.d.ts.map +1 -0
  409. package/server/pty/hello-ack-validator.js +30 -0
  410. package/server/pty/hello-ack-validator.js.map +1 -0
  411. package/server/pty/host-daemon/bootstrap.d.ts +100 -0
  412. package/server/pty/host-daemon/bootstrap.d.ts.map +1 -0
  413. package/server/pty/host-daemon/bootstrap.js +611 -0
  414. package/server/pty/host-daemon/bootstrap.js.map +1 -0
  415. package/server/pty/host-daemon/daemon.d.ts +111 -0
  416. package/server/pty/host-daemon/daemon.d.ts.map +1 -0
  417. package/server/pty/host-daemon/daemon.js +648 -0
  418. package/server/pty/host-daemon/daemon.js.map +1 -0
  419. package/server/pty/host-daemon/entry.d.ts +3 -0
  420. package/server/pty/host-daemon/entry.d.ts.map +1 -0
  421. package/server/pty/host-daemon/entry.js +72 -0
  422. package/server/pty/host-daemon/entry.js.map +1 -0
  423. package/server/pty/host-daemon/lockfile.d.ts +12 -0
  424. package/server/pty/host-daemon/lockfile.d.ts.map +1 -0
  425. package/server/pty/host-daemon/lockfile.js +120 -0
  426. package/server/pty/host-daemon/lockfile.js.map +1 -0
  427. package/server/pty/host-daemon/mode-marker.d.ts +77 -0
  428. package/server/pty/host-daemon/mode-marker.d.ts.map +1 -0
  429. package/server/pty/host-daemon/mode-marker.js +228 -0
  430. package/server/pty/host-daemon/mode-marker.js.map +1 -0
  431. package/server/pty/host-daemon/orphan-cleanup.d.ts +42 -0
  432. package/server/pty/host-daemon/orphan-cleanup.d.ts.map +1 -0
  433. package/server/pty/host-daemon/orphan-cleanup.js +84 -0
  434. package/server/pty/host-daemon/orphan-cleanup.js.map +1 -0
  435. package/server/pty/host-daemon/paths.d.ts +10 -0
  436. package/server/pty/host-daemon/paths.d.ts.map +1 -0
  437. package/server/pty/host-daemon/paths.js +56 -0
  438. package/server/pty/host-daemon/paths.js.map +1 -0
  439. package/server/pty/host-daemon/server-connection.d.ts +44 -0
  440. package/server/pty/host-daemon/server-connection.d.ts.map +1 -0
  441. package/server/pty/host-daemon/server-connection.js +100 -0
  442. package/server/pty/host-daemon/server-connection.js.map +1 -0
  443. package/server/pty/host-daemon/service-detection.d.ts +24 -0
  444. package/server/pty/host-daemon/service-detection.d.ts.map +1 -0
  445. package/server/pty/host-daemon/service-detection.js +16 -0
  446. package/server/pty/host-daemon/service-detection.js.map +1 -0
  447. package/server/pty/host-daemon/socket-ready.d.ts +22 -0
  448. package/server/pty/host-daemon/socket-ready.d.ts.map +1 -0
  449. package/server/pty/host-daemon/socket-ready.js +33 -0
  450. package/server/pty/host-daemon/socket-ready.js.map +1 -0
  451. package/server/pty/host-daemon/spawn-daemon.d.ts +45 -0
  452. package/server/pty/host-daemon/spawn-daemon.d.ts.map +1 -0
  453. package/server/pty/host-daemon/spawn-daemon.js +155 -0
  454. package/server/pty/host-daemon/spawn-daemon.js.map +1 -0
  455. package/server/pty/host-daemon/terminate-daemon.d.ts +16 -0
  456. package/server/pty/host-daemon/terminate-daemon.d.ts.map +1 -0
  457. package/server/pty/host-daemon/terminate-daemon.js +128 -0
  458. package/server/pty/host-daemon/terminate-daemon.js.map +1 -0
  459. package/server/pty/host-protocol/frames.d.ts +110 -0
  460. package/server/pty/host-protocol/frames.d.ts.map +1 -0
  461. package/server/pty/host-protocol/frames.js +255 -0
  462. package/server/pty/host-protocol/frames.js.map +1 -0
  463. package/server/pty/host-protocol/messages.d.ts +140 -0
  464. package/server/pty/host-protocol/messages.d.ts.map +1 -0
  465. package/server/pty/host-protocol/messages.js +117 -0
  466. package/server/pty/host-protocol/messages.js.map +1 -0
  467. package/server/pty/host.d.ts +273 -0
  468. package/server/pty/host.d.ts.map +1 -0
  469. package/server/pty/host.js +184 -0
  470. package/server/pty/host.js.map +1 -0
  471. package/server/pty/in-process-host.d.ts +224 -0
  472. package/server/pty/in-process-host.d.ts.map +1 -0
  473. package/server/pty/in-process-host.js +1183 -0
  474. package/server/pty/in-process-host.js.map +1 -0
  475. package/server/pty/osc7-lifecycle.d.ts +8 -0
  476. package/server/pty/osc7-lifecycle.d.ts.map +1 -0
  477. package/server/pty/osc7-lifecycle.js +22 -0
  478. package/server/pty/osc7-lifecycle.js.map +1 -0
  479. package/server/pty/osc7-parser.d.ts +23 -0
  480. package/server/pty/osc7-parser.d.ts.map +1 -0
  481. package/server/pty/osc7-parser.js +91 -0
  482. package/server/pty/osc7-parser.js.map +1 -0
  483. package/server/pty/remote-host.d.ts +188 -0
  484. package/server/pty/remote-host.d.ts.map +1 -0
  485. package/server/pty/remote-host.js +810 -0
  486. package/server/pty/remote-host.js.map +1 -0
  487. package/server/pty/request-correlator.d.ts +59 -0
  488. package/server/pty/request-correlator.d.ts.map +1 -0
  489. package/server/pty/request-correlator.js +75 -0
  490. package/server/pty/request-correlator.js.map +1 -0
  491. package/server/pty/scrollback-log.d.ts +130 -0
  492. package/server/pty/scrollback-log.d.ts.map +1 -0
  493. package/server/pty/scrollback-log.js +344 -0
  494. package/server/pty/scrollback-log.js.map +1 -0
  495. package/server/pty/scrollback-sanitize.d.ts +2 -0
  496. package/server/pty/scrollback-sanitize.d.ts.map +1 -0
  497. package/server/pty/scrollback-sanitize.js +54 -0
  498. package/server/pty/scrollback-sanitize.js.map +1 -0
  499. package/server/pty/session-mirror.d.ts +67 -0
  500. package/server/pty/session-mirror.d.ts.map +1 -0
  501. package/server/pty/session-mirror.js +112 -0
  502. package/server/pty/session-mirror.js.map +1 -0
  503. package/server/pty/session-policy.d.ts +85 -0
  504. package/server/pty/session-policy.d.ts.map +1 -0
  505. package/server/pty/session-policy.js +186 -0
  506. package/server/pty/session-policy.js.map +1 -0
  507. package/server/pty/version-mismatch-recovery.d.ts +71 -0
  508. package/server/pty/version-mismatch-recovery.d.ts.map +1 -0
  509. package/server/pty/version-mismatch-recovery.js +63 -0
  510. package/server/pty/version-mismatch-recovery.js.map +1 -0
  511. package/server/routes/debug-agent-status.d.ts +5 -0
  512. package/server/routes/debug-agent-status.d.ts.map +1 -0
  513. package/server/routes/debug-agent-status.js +22 -0
  514. package/server/routes/debug-agent-status.js.map +1 -0
  515. package/server/routes/debug-diagnostics.d.ts +8 -0
  516. package/server/routes/debug-diagnostics.d.ts.map +1 -0
  517. package/server/routes/debug-diagnostics.js +34 -0
  518. package/server/routes/debug-diagnostics.js.map +1 -0
  519. package/server/routes/debug-terminal-trace.d.ts +16 -0
  520. package/server/routes/debug-terminal-trace.d.ts.map +1 -0
  521. package/server/routes/debug-terminal-trace.js +545 -0
  522. package/server/routes/debug-terminal-trace.js.map +1 -0
  523. package/server/routes/drops.d.ts +13 -0
  524. package/server/routes/drops.d.ts.map +1 -0
  525. package/server/routes/drops.js +126 -0
  526. package/server/routes/drops.js.map +1 -0
  527. package/server/routes/file-uploads.d.ts +9 -0
  528. package/server/routes/file-uploads.d.ts.map +1 -0
  529. package/server/routes/file-uploads.js +119 -0
  530. package/server/routes/file-uploads.js.map +1 -0
  531. package/server/routes/files.d.ts +9 -0
  532. package/server/routes/files.d.ts.map +1 -0
  533. package/server/routes/files.js +441 -0
  534. package/server/routes/files.js.map +1 -0
  535. package/server/routes/filesystem.d.ts +6 -0
  536. package/server/routes/filesystem.d.ts.map +1 -0
  537. package/server/routes/filesystem.js +76 -0
  538. package/server/routes/filesystem.js.map +1 -0
  539. package/server/routes/git.d.ts +38 -0
  540. package/server/routes/git.d.ts.map +1 -0
  541. package/server/routes/git.js +585 -0
  542. package/server/routes/git.js.map +1 -0
  543. package/server/routes/healthz.d.ts +8 -0
  544. package/server/routes/healthz.d.ts.map +1 -0
  545. package/server/routes/healthz.js +24 -0
  546. package/server/routes/healthz.js.map +1 -0
  547. package/server/routes/hook.d.ts +14 -0
  548. package/server/routes/hook.d.ts.map +1 -0
  549. package/server/routes/hook.js +86 -0
  550. package/server/routes/hook.js.map +1 -0
  551. package/server/routes/ide-commands.d.ts +9 -0
  552. package/server/routes/ide-commands.d.ts.map +1 -0
  553. package/server/routes/ide-commands.js +23 -0
  554. package/server/routes/ide-commands.js.map +1 -0
  555. package/server/routes/lib/resolve-worktree.d.ts +30 -0
  556. package/server/routes/lib/resolve-worktree.d.ts.map +1 -0
  557. package/server/routes/lib/resolve-worktree.js +35 -0
  558. package/server/routes/lib/resolve-worktree.js.map +1 -0
  559. package/server/routes/open.d.ts +4 -0
  560. package/server/routes/open.d.ts.map +1 -0
  561. package/server/routes/open.js +21 -0
  562. package/server/routes/open.js.map +1 -0
  563. package/server/routes/pane-commands.d.ts +9 -0
  564. package/server/routes/pane-commands.d.ts.map +1 -0
  565. package/server/routes/pane-commands.js +23 -0
  566. package/server/routes/pane-commands.js.map +1 -0
  567. package/server/routes/projects.d.ts +15 -0
  568. package/server/routes/projects.d.ts.map +1 -0
  569. package/server/routes/projects.js +363 -0
  570. package/server/routes/projects.js.map +1 -0
  571. package/server/routes/server-notices.d.ts +4 -0
  572. package/server/routes/server-notices.d.ts.map +1 -0
  573. package/server/routes/server-notices.js +29 -0
  574. package/server/routes/server-notices.js.map +1 -0
  575. package/server/routes/service-config.d.ts +11 -0
  576. package/server/routes/service-config.d.ts.map +1 -0
  577. package/server/routes/service-config.js +64 -0
  578. package/server/routes/service-config.js.map +1 -0
  579. package/server/routes/sessions.d.ts +7 -0
  580. package/server/routes/sessions.d.ts.map +1 -0
  581. package/server/routes/sessions.js +218 -0
  582. package/server/routes/sessions.js.map +1 -0
  583. package/server/service/caffeinate.d.ts +33 -0
  584. package/server/service/caffeinate.d.ts.map +1 -0
  585. package/server/service/caffeinate.js +72 -0
  586. package/server/service/caffeinate.js.map +1 -0
  587. package/server/state/app-state.d.ts +167 -0
  588. package/server/state/app-state.d.ts.map +1 -0
  589. package/server/state/app-state.js +335 -0
  590. package/server/state/app-state.js.map +1 -0
  591. package/server/state/project-manager.d.ts +30 -0
  592. package/server/state/project-manager.d.ts.map +1 -0
  593. package/server/state/project-manager.js +128 -0
  594. package/server/state/project-manager.js.map +1 -0
  595. package/server/state/server-notices.d.ts +12 -0
  596. package/server/state/server-notices.d.ts.map +1 -0
  597. package/server/state/server-notices.js +32 -0
  598. package/server/state/server-notices.js.map +1 -0
  599. package/server/state/worktree-cache.d.ts +25 -0
  600. package/server/state/worktree-cache.d.ts.map +1 -0
  601. package/server/state/worktree-cache.js +53 -0
  602. package/server/state/worktree-cache.js.map +1 -0
  603. package/server/ws/events.d.ts +45 -0
  604. package/server/ws/events.d.ts.map +1 -0
  605. package/server/ws/events.js +134 -0
  606. package/server/ws/events.js.map +1 -0
  607. package/server/ws/keepalive.d.ts +27 -0
  608. package/server/ws/keepalive.d.ts.map +1 -0
  609. package/server/ws/keepalive.js +63 -0
  610. package/server/ws/keepalive.js.map +1 -0
  611. package/server/ws/terminal-attach.d.ts +13 -0
  612. package/server/ws/terminal-attach.d.ts.map +1 -0
  613. package/server/ws/terminal-attach.js +233 -0
  614. package/server/ws/terminal-attach.js.map +1 -0
  615. package/server/ws/terminal-flow.d.ts +17 -0
  616. package/server/ws/terminal-flow.d.ts.map +1 -0
  617. package/server/ws/terminal-flow.js +64 -0
  618. package/server/ws/terminal-flow.js.map +1 -0
  619. package/server/ws/terminal.d.ts +69 -0
  620. package/server/ws/terminal.d.ts.map +1 -0
  621. package/server/ws/terminal.js +311 -0
  622. package/server/ws/terminal.js.map +1 -0
  623. package/web/assets/EditorPane-CzzT3iYY.js +123 -0
  624. package/web/assets/SymbolsNerdFontMono-Regular-CwEZqMeU.woff2 +0 -0
  625. package/web/assets/TerminalPane-CjbYzePr.js +68 -0
  626. package/web/assets/TerminalPane-DkTCHfhq.css +1 -0
  627. package/web/assets/file-icons-JBi09j0r.js +6 -0
  628. package/web/assets/index-CTTkRpnn.css +2 -0
  629. package/web/assets/index-CmhewzMp.js +34 -0
  630. package/web/assets/session-resume-7f-tB-ZU.js +2 -0
  631. package/web/assets/terminal-trace-PuuFRybC.js +2803 -0
  632. package/web/assets/useVirtualKeyboard-DgJb9u9d.js +1 -0
  633. package/web/index.html +52 -0
@@ -0,0 +1,585 @@
1
+ import { Hono } from "hono";
2
+ import { fenceWorktreePathWith, validateBranchName, } from "../application/workspace/worktree-commands.js";
3
+ import { GitExecError, runGit } from "../lib/git-exec.js";
4
+ import { resolveWorktreeOrError } from "./lib/resolve-worktree.js";
5
+ function mapGitError(err) {
6
+ if (!(err instanceof GitExecError))
7
+ return null;
8
+ const message = (err.stderr || err.stdout || err.message).trim();
9
+ return { status: 409, error: message };
10
+ }
11
+ export function createGitRoutes(deps) {
12
+ const { projectManager, worktreeCache, projectRuntime } = deps;
13
+ const routes = new Hono();
14
+ const fenceWorktreePath = (projectId, worktreePath) => fenceWorktreePathWith({
15
+ projectManager,
16
+ getProjectWorktrees: (id) => worktreeCache.get()[id] ?? [],
17
+ }, projectId, worktreePath);
18
+ routes.get("/:id/git/status", async (c) => {
19
+ const projectId = c.req.param("id");
20
+ const worktreePath = c.req.query("worktreePath");
21
+ const resolved = await resolveWorktreeOrError(fenceWorktreePath, projectId, worktreePath);
22
+ if (!resolved.ok)
23
+ return c.json(resolved.body, resolved.status);
24
+ await projectRuntime.refreshGitState(projectId, resolved.resolved);
25
+ const states = projectRuntime.getGitStates();
26
+ const state = states[projectId]?.[resolved.resolved] ?? null;
27
+ return c.json({ state });
28
+ });
29
+ routes.post("/:id/git/commit", async (c) => {
30
+ const projectId = c.req.param("id");
31
+ const body = await c.req.json().catch(() => ({}));
32
+ const resolved = await resolveWorktreeOrError(fenceWorktreePath, projectId, body.worktreePath);
33
+ if (!resolved.ok)
34
+ return c.json(resolved.body, resolved.status);
35
+ const message = body.message?.trim();
36
+ if (!message) {
37
+ return c.json({ error: "message is required" }, 400);
38
+ }
39
+ if (!Array.isArray(body.paths) || body.paths.length === 0) {
40
+ return c.json({ error: "paths must be a non-empty array" }, 400);
41
+ }
42
+ if (!body.paths.every((p) => typeof p === "string" && p.length > 0)) {
43
+ return c.json({ error: "paths must be non-empty strings" }, 400);
44
+ }
45
+ // `--` terminates flag parsing so a path that happens to start with `-`
46
+ // can never be interpreted as a git option.
47
+ const paths = body.paths;
48
+ try {
49
+ await runGit(resolved.resolved, ["add", "--", ...paths]);
50
+ await runGit(resolved.resolved, [
51
+ "commit",
52
+ "-m",
53
+ message,
54
+ "--",
55
+ ...paths,
56
+ ]);
57
+ }
58
+ catch (err) {
59
+ const mapped = mapGitError(err);
60
+ if (mapped)
61
+ return c.json({ error: mapped.error }, mapped.status);
62
+ throw err;
63
+ }
64
+ await projectRuntime.refreshGitState(projectId, resolved.resolved);
65
+ return c.json({ ok: true });
66
+ });
67
+ routes.post("/:id/git/push", async (c) => {
68
+ const projectId = c.req.param("id");
69
+ const body = await c.req.json().catch(() => ({}));
70
+ const resolved = await resolveWorktreeOrError(fenceWorktreePath, projectId, body.worktreePath);
71
+ if (!resolved.ok)
72
+ return c.json(resolved.body, resolved.status);
73
+ const args = ["push"];
74
+ if (body.setUpstream === true) {
75
+ try {
76
+ const { stdout } = await runGit(resolved.resolved, [
77
+ "rev-parse",
78
+ "--abbrev-ref",
79
+ "HEAD",
80
+ ]);
81
+ const branch = stdout.trim();
82
+ if (!branch || branch === "HEAD") {
83
+ return c.json({ error: "Detached HEAD -- cannot set upstream" }, 409);
84
+ }
85
+ args.push("--set-upstream", "origin", branch);
86
+ }
87
+ catch (err) {
88
+ const mapped = mapGitError(err);
89
+ if (mapped)
90
+ return c.json({ error: mapped.error }, mapped.status);
91
+ throw err;
92
+ }
93
+ }
94
+ try {
95
+ await runGit(resolved.resolved, args, { timeoutMs: 60_000 });
96
+ }
97
+ catch (err) {
98
+ const mapped = mapGitError(err);
99
+ if (mapped)
100
+ return c.json({ error: mapped.error }, mapped.status);
101
+ throw err;
102
+ }
103
+ await projectRuntime.refreshGitState(projectId, resolved.resolved);
104
+ return c.json({ ok: true });
105
+ });
106
+ routes.post("/:id/git/pull", async (c) => {
107
+ const projectId = c.req.param("id");
108
+ const body = await c.req.json().catch(() => ({}));
109
+ const resolved = await resolveWorktreeOrError(fenceWorktreePath, projectId, body.worktreePath);
110
+ if (!resolved.ok)
111
+ return c.json(resolved.body, resolved.status);
112
+ const args = ["pull"];
113
+ if (body.rebase === true)
114
+ args.push("--rebase");
115
+ try {
116
+ await runGit(resolved.resolved, args, { timeoutMs: 60_000 });
117
+ }
118
+ catch (err) {
119
+ const mapped = mapGitError(err);
120
+ if (mapped)
121
+ return c.json({ error: mapped.error }, mapped.status);
122
+ throw err;
123
+ }
124
+ await projectRuntime.refreshGitState(projectId, resolved.resolved);
125
+ return c.json({ ok: true });
126
+ });
127
+ routes.post("/:id/git/switch", async (c) => {
128
+ const projectId = c.req.param("id");
129
+ const body = await c.req.json().catch(() => ({}));
130
+ const resolved = await resolveWorktreeOrError(fenceWorktreePath, projectId, body.worktreePath);
131
+ if (!resolved.ok)
132
+ return c.json(resolved.body, resolved.status);
133
+ const branch = body.branch?.trim();
134
+ if (!branch) {
135
+ return c.json({ error: "branch is required" }, 400);
136
+ }
137
+ const validation = validateBranchName(branch);
138
+ if (validation) {
139
+ return c.json({ error: validation }, 400);
140
+ }
141
+ try {
142
+ await runGit(resolved.resolved, ["switch", branch], {
143
+ timeoutMs: 60_000,
144
+ });
145
+ }
146
+ catch (err) {
147
+ const mapped = mapGitError(err);
148
+ if (mapped)
149
+ return c.json({ error: mapped.error }, mapped.status);
150
+ throw err;
151
+ }
152
+ await projectRuntime.refreshGitState(projectId, resolved.resolved);
153
+ return c.json({ ok: true, branch });
154
+ });
155
+ routes.post("/:id/git/branch", async (c) => {
156
+ const projectId = c.req.param("id");
157
+ const body = await c.req
158
+ .json()
159
+ .catch(() => ({}));
160
+ const resolved = await resolveWorktreeOrError(fenceWorktreePath, projectId, body.worktreePath);
161
+ if (!resolved.ok)
162
+ return c.json(resolved.body, resolved.status);
163
+ const branch = body.branch?.trim();
164
+ if (!branch) {
165
+ return c.json({ error: "branch is required" }, 400);
166
+ }
167
+ const validation = validateBranchName(branch);
168
+ if (validation) {
169
+ return c.json({ error: validation }, 400);
170
+ }
171
+ const startPoint = body.startPoint?.trim();
172
+ if (!startPoint) {
173
+ return c.json({ error: "startPoint is required" }, 400);
174
+ }
175
+ const startPointValidation = validateBranchName(startPoint);
176
+ if (startPointValidation) {
177
+ return c.json({ error: `startPoint: ${startPointValidation}` }, 400);
178
+ }
179
+ try {
180
+ await runGit(resolved.resolved, ["switch", "-c", branch, startPoint], {
181
+ timeoutMs: 60_000,
182
+ });
183
+ }
184
+ catch (err) {
185
+ const mapped = mapGitError(err);
186
+ if (mapped)
187
+ return c.json({ error: mapped.error }, mapped.status);
188
+ throw err;
189
+ }
190
+ await projectRuntime.refreshGitState(projectId, resolved.resolved);
191
+ return c.json({ ok: true, branch, startPoint });
192
+ });
193
+ // Returns the recent commit log + a flag telling the client whether the
194
+ // working tree currently has uncommitted changes (so the graph can prepend
195
+ // a virtual selectable row). Capped at 500 per page; pagination via
196
+ // `skip=<n>`; remote branches via `includeRemotes=1`.
197
+ routes.get("/:id/git/log", async (c) => {
198
+ const projectId = c.req.param("id");
199
+ const worktreePath = c.req.query("worktreePath");
200
+ const limitParam = c.req.query("limit");
201
+ const skipParam = c.req.query("skip");
202
+ const includeRemotes = c.req.query("includeRemotes") === "1";
203
+ const limit = (() => {
204
+ const n = limitParam ? parseInt(limitParam, 10) : 200;
205
+ if (!Number.isFinite(n) || n <= 0)
206
+ return 200;
207
+ return Math.min(n, 500);
208
+ })();
209
+ const skip = (() => {
210
+ const n = skipParam ? parseInt(skipParam, 10) : 0;
211
+ if (!Number.isFinite(n) || n < 0)
212
+ return 0;
213
+ return Math.min(n, 100_000);
214
+ })();
215
+ const resolved = await resolveWorktreeOrError(fenceWorktreePath, projectId, worktreePath);
216
+ if (!resolved.ok)
217
+ return c.json(resolved.body, resolved.status);
218
+ // `+1` lookahead lets the parser see the very next commit past the
219
+ // requested page so the last visible row's outputSwimlanes resolves its
220
+ // first-parent lane correctly. Without this, page-1's last commit would
221
+ // terminate its lane (parent out-of-window) while page-2 sees the same
222
+ // lane continuing -- producing a visible break at the boundary.
223
+ const fetchTotal = skip + limit + 1;
224
+ // Re-walk from the newest commit each request rather than `--skip=N`
225
+ // sliced server-side. parseGitLog computes swimlane state by walking
226
+ // commits in order; if page 2 starts fresh, the first commit's
227
+ // inputSwimlanes get reset and lanes/colors visibly snap at the page
228
+ // boundary. Pulling `skip+limit+1` from the head and slicing the
229
+ // requested window post-parse keeps the swimlane state continuous.
230
+ const args = [
231
+ "log",
232
+ `-${fetchTotal}`,
233
+ // `--decorate=full` keeps `refs/heads/`, `refs/remotes/`, `refs/tags/`
234
+ // prefixes so the parser can distinguish local vs remote branches
235
+ // (a `/` in a name like `feat/foo` is otherwise indistinguishable
236
+ // from `origin/foo`).
237
+ "--decorate=full",
238
+ // Field separator NUL, record separator RS (0x1e). Keeps subjects
239
+ // with embedded newlines intact and avoids escaping.
240
+ "--format=%H%x00%P%x00%an%x00%at%x00%D%x00%s%x1e",
241
+ ];
242
+ if (includeRemotes) {
243
+ // Walk every local branch, every remote-tracking branch, and HEAD --
244
+ // mirrors VSCode's SCM Graph default. Excludes tags/stashes which add
245
+ // noise without clarifying branch topology.
246
+ args.push("--branches", "--remotes", "HEAD");
247
+ }
248
+ let stdout = "";
249
+ try {
250
+ const result = await runGit(resolved.resolved, args);
251
+ stdout = result.stdout;
252
+ }
253
+ catch (err) {
254
+ // `git log` exits 128 on an unborn branch / empty repo; treat that as
255
+ // an empty history rather than an error so the graph shows the
256
+ // (possibly uncommitted) working tree row instead of a fatal banner.
257
+ if (err instanceof GitExecError) {
258
+ const stderr = (err.stderr || "").toLowerCase();
259
+ const isEmptyRepo = stderr.includes("does not have any commits yet") ||
260
+ stderr.includes("bad default revision") ||
261
+ stderr.includes("unknown revision or path");
262
+ if (!isEmptyRepo) {
263
+ const mapped = mapGitError(err);
264
+ if (mapped)
265
+ return c.json({ error: mapped.error }, mapped.status);
266
+ throw err;
267
+ }
268
+ // includeRemotes=1 + unborn HEAD: drop the explicit `HEAD` arg and
269
+ // retry with branches/remotes only. The repo can have remote-tracking
270
+ // branches (e.g. fresh clone before initial checkout) even when HEAD
271
+ // points at an unborn local branch -- without this retry the whole
272
+ // graph collapses to empty.
273
+ if (includeRemotes) {
274
+ try {
275
+ const retryArgs = args.filter((a) => a !== "HEAD");
276
+ const result = await runGit(resolved.resolved, retryArgs);
277
+ stdout = result.stdout;
278
+ }
279
+ catch {
280
+ // Truly empty repo (no branches, no remotes) -- fall through.
281
+ }
282
+ }
283
+ // fall through with empty stdout
284
+ }
285
+ else {
286
+ throw err;
287
+ }
288
+ }
289
+ const allCommits = parseGitLog(stdout);
290
+ // Slice the requested page after parsing the full window -- the parser
291
+ // produced correct lane state for every commit, including the one at
292
+ // index `skip` whose inputSwimlanes now reflects everything that came
293
+ // before it.
294
+ const commits = allCommits.slice(skip, skip + limit);
295
+ // Cheap dirty probe -- we don't need fileStatuses here, just a yes/no.
296
+ // Skip on paginated requests (subsequent pages don't repaint working tree).
297
+ let hasUncommitted = false;
298
+ if (skip === 0) {
299
+ try {
300
+ const { stdout: porcelain } = await runGit(resolved.resolved, [
301
+ "status",
302
+ "--porcelain",
303
+ ]);
304
+ hasUncommitted = porcelain.trim().length > 0;
305
+ }
306
+ catch {
307
+ // Status failure leaves hasUncommitted=false; the graph still renders.
308
+ }
309
+ }
310
+ const body = { commits, hasUncommitted };
311
+ return c.json(body);
312
+ });
313
+ routes.post("/:id/git/init", async (c) => {
314
+ const projectId = c.req.param("id");
315
+ const project = projectManager.get(projectId);
316
+ if (!project) {
317
+ return c.json({ error: "Project not found" }, 404);
318
+ }
319
+ // Refuse if a repo already exists at the project root. We treat this as
320
+ // an explicit user error (409) rather than silent success -- running
321
+ // `git init` on an existing repo is a no-op but the UI flow assumes
322
+ // empty-state.
323
+ try {
324
+ await runGit(project.path, ["rev-parse", "--is-inside-work-tree"]);
325
+ return c.json({ error: "Project is already a git repository" }, 409);
326
+ }
327
+ catch (err) {
328
+ if (!(err instanceof GitExecError))
329
+ throw err;
330
+ const stderr = (err.stderr || "").toLowerCase();
331
+ if (!stderr.includes("not a git repository")) {
332
+ const mapped = mapGitError(err);
333
+ if (mapped)
334
+ return c.json({ error: mapped.error }, mapped.status);
335
+ throw err;
336
+ }
337
+ // not-a-repo -> fall through to init.
338
+ }
339
+ try {
340
+ await runGit(project.path, ["init"]);
341
+ }
342
+ catch (err) {
343
+ const mapped = mapGitError(err);
344
+ if (mapped)
345
+ return c.json({ error: mapped.error }, mapped.status);
346
+ throw err;
347
+ }
348
+ await projectRuntime.refreshGitState(projectId, project.path);
349
+ return c.json({ ok: true });
350
+ });
351
+ routes.post("/:id/git/fetch", async (c) => {
352
+ const projectId = c.req.param("id");
353
+ const body = await c.req
354
+ .json()
355
+ .catch(() => ({}));
356
+ const resolved = await resolveWorktreeOrError(fenceWorktreePath, projectId, body.worktreePath);
357
+ if (!resolved.ok)
358
+ return c.json(resolved.body, resolved.status);
359
+ try {
360
+ await runGit(resolved.resolved, ["fetch", "--prune"], {
361
+ timeoutMs: 60_000,
362
+ });
363
+ }
364
+ catch (err) {
365
+ const mapped = mapGitError(err);
366
+ if (mapped)
367
+ return c.json({ error: mapped.error }, mapped.status);
368
+ throw err;
369
+ }
370
+ await projectRuntime.refreshGitState(projectId, resolved.resolved);
371
+ return c.json({ ok: true });
372
+ });
373
+ return routes;
374
+ }
375
+ const BRANCH_COLOR_COUNT = 5;
376
+ /**
377
+ * Parse `%D` decoration emitted with `--decorate=full`. The full form prefixes
378
+ * each ref with its origin namespace:
379
+ * - `refs/heads/<name>` -- local branch
380
+ * - `refs/remotes/<remote>/<name>` -- remote tracking branch
381
+ * - `refs/tags/<name>` -- tag
382
+ * - `tag: refs/tags/<name>` -- tag (annotated, with explicit `tag:` prefix)
383
+ * - `HEAD` / `HEAD -> refs/heads/<name>` -- current head
384
+ * Without `--decorate=full` the prefixes are stripped, which makes
385
+ * `feat/foo` (local with slash) ambiguous against `origin/foo` (remote).
386
+ */
387
+ function parseRefs(refsRaw) {
388
+ if (!refsRaw)
389
+ return [];
390
+ // Git's decorate format separates entries with literal ", " (comma+space).
391
+ // Refnames may contain commas but never spaces, so the two-character
392
+ // separator is unambiguous -- splitting on bare "," would let a refname like
393
+ // `foo,HEAD` slice into a fake HEAD chip.
394
+ const tokens = refsRaw
395
+ .split(", ")
396
+ .map((s) => s.trim())
397
+ .filter(Boolean)
398
+ .flatMap((r) => {
399
+ const arrow = r.split(" -> ");
400
+ return arrow.length > 1 ? arrow.map((s) => s.trim()) : [r];
401
+ });
402
+ const out = [];
403
+ for (const tok of tokens) {
404
+ if (tok === "HEAD") {
405
+ out.push({ label: "HEAD", type: "head" });
406
+ continue;
407
+ }
408
+ const tagPrefix = tok.startsWith("tag: ") ? tok.slice(5) : tok;
409
+ if (tagPrefix.startsWith("refs/tags/")) {
410
+ out.push({ label: tagPrefix.slice("refs/tags/".length), type: "tag" });
411
+ continue;
412
+ }
413
+ if (tok.startsWith("refs/heads/")) {
414
+ out.push({ label: tok.slice("refs/heads/".length), type: "local" });
415
+ continue;
416
+ }
417
+ if (tok.startsWith("refs/remotes/")) {
418
+ out.push({ label: tok.slice("refs/remotes/".length), type: "remote" });
419
+ continue;
420
+ }
421
+ // Fallback for callers that did not use `--decorate=full` (unit tests
422
+ // mostly): heuristic where a slash implies remote, otherwise local.
423
+ if (tok.startsWith("tag: ")) {
424
+ out.push({ label: tok.slice("tag: ".length), type: "tag" });
425
+ continue;
426
+ }
427
+ if (tok.includes("/")) {
428
+ out.push({ label: tok, type: "remote" });
429
+ continue;
430
+ }
431
+ out.push({ label: tok, type: "local" });
432
+ }
433
+ return out;
434
+ }
435
+ /**
436
+ * Parse `git log --format=%H%x00%P%x00%an%x00%at%x00%D%x00%s%x1e` output and
437
+ * compute lane assignment + branch coloring for the renderer.
438
+ *
439
+ * Algorithm (newest -> oldest, per-row swimlane snapshots):
440
+ * - `current[]` holds the live swimlane state. Each slot is either `null`
441
+ * (free) or `{ colorId, expectingSha }` -- the commit that lane is waiting
442
+ * to link down to.
443
+ * - For each commit, find the lane whose `expectingSha === commit.sha`.
444
+ * - Match: the commit sits in that lane and inherits its colorId.
445
+ * - No match: a new branch tip -- allocate the lowest free slot, mint a
446
+ * fresh colorId by rotating through 0..4.
447
+ * - First parent reuses this lane (trunk continues). Each additional parent
448
+ * opens a new lane with a fresh colorId, unless an existing lane already
449
+ * waits for that parent (merge target reuse).
450
+ * - After the row is emitted, the swimlane array is compacted (trailing
451
+ * nulls dropped, middle nulls left-shifted) so a side branch ending
452
+ * mid-page frees its column for the next side branch -- keeps the visible
453
+ * lane count low against the cap=5 cap the renderer enforces.
454
+ *
455
+ * `inputSwimlanes` is the state above the row, `outputSwimlanes` below;
456
+ * the renderer draws connectors between adjacent rows by reading the parent
457
+ * row's output and the child row's input (which are the same array on either
458
+ * side of the boundary).
459
+ */
460
+ export function parseGitLog(raw) {
461
+ const records = raw.split("\x1e");
462
+ const commits = [];
463
+ for (const r of records) {
464
+ const trimmed = r.replace(/^\n/, "");
465
+ if (!trimmed)
466
+ continue;
467
+ const fields = trimmed.split("\x00");
468
+ if (fields.length < 6)
469
+ continue;
470
+ const [sha, parentsRaw, author, atRaw, refsRaw, subject] = fields;
471
+ if (!sha)
472
+ continue;
473
+ const parents = parentsRaw ? parentsRaw.split(" ").filter(Boolean) : [];
474
+ const time = parseInt(atRaw, 10) || 0;
475
+ commits.push({
476
+ sha,
477
+ parents,
478
+ author,
479
+ time,
480
+ subject,
481
+ refs: parseRefs(refsRaw),
482
+ });
483
+ }
484
+ // Pre-compute the set of shas in this window so a lane whose `expectingSha`
485
+ // is unreachable (out-of-window or genuinely missing) terminates immediately
486
+ // instead of dangling forever and pushing later branch tips into ever-higher
487
+ // lane columns. Without this, a remote-only branch tip whose parent is not
488
+ // in the page consumes a permanent column even though it will never have a
489
+ // child commit drawn below it.
490
+ const inWindow = new Set(commits.map((c) => c.sha));
491
+ const reachableOrNull = (sha) => sha && inWindow.has(sha) ? sha : null;
492
+ let current = [];
493
+ let nextColor = 0;
494
+ const allocColor = () => {
495
+ const id = nextColor;
496
+ nextColor = (nextColor + 1) % BRANCH_COLOR_COUNT;
497
+ return id;
498
+ };
499
+ const out = [];
500
+ for (const c of commits) {
501
+ const inputSwimlanes = current.map((s) => s ? { ...s } : null);
502
+ // Find every lane waiting for this sha. The leftmost becomes the
503
+ // commit's lane and continues with its first parent; the others are
504
+ // merge-sink lanes that terminate here (drawn as merge curves into the
505
+ // primary lane).
506
+ const matchedLanes = [];
507
+ inputSwimlanes.forEach((s, idx) => {
508
+ if (s?.expectingSha === c.sha)
509
+ matchedLanes.push(idx);
510
+ });
511
+ let lane;
512
+ let colorId;
513
+ const next = inputSwimlanes.map((s) => s ? { ...s } : null);
514
+ const firstParentExpect = reachableOrNull(c.parents[0]);
515
+ if (matchedLanes.length === 0) {
516
+ colorId = allocColor();
517
+ const allocSnapshot = {
518
+ colorId,
519
+ expectingSha: firstParentExpect,
520
+ };
521
+ const free = next.indexOf(null);
522
+ if (free !== -1) {
523
+ next[free] = allocSnapshot;
524
+ lane = free;
525
+ }
526
+ else {
527
+ next.push(allocSnapshot);
528
+ lane = next.length - 1;
529
+ }
530
+ }
531
+ else {
532
+ lane = matchedLanes[0];
533
+ colorId = next[lane]?.colorId ?? allocColor();
534
+ next[lane] = { colorId, expectingSha: firstParentExpect };
535
+ // Merge-sink lanes terminate at this row.
536
+ for (let i = 1; i < matchedLanes.length; i++) {
537
+ next[matchedLanes[i]] = null;
538
+ }
539
+ }
540
+ // Additional parents: each opens a new lane unless an existing one
541
+ // already waits for that parent sha. Out-of-window parents are skipped
542
+ // entirely -- drawing a curve that vanishes at the next row is more
543
+ // confusing than just terminating at the merge dot.
544
+ for (let i = 1; i < c.parents.length; i++) {
545
+ const p = reachableOrNull(c.parents[i]);
546
+ if (p === null)
547
+ continue;
548
+ if (next.some((s) => s?.expectingSha === p))
549
+ continue;
550
+ const free = next.indexOf(null);
551
+ const snapshot = {
552
+ colorId: allocColor(),
553
+ expectingSha: p,
554
+ };
555
+ if (free !== -1)
556
+ next[free] = snapshot;
557
+ else
558
+ next.push(snapshot);
559
+ }
560
+ // Free any slot whose expectingSha resolved to null (root, out-of-window,
561
+ // or merge sink that left a placeholder). This must run over every slot,
562
+ // not just `lane`, because additional-parent allocation could leave such
563
+ // entries elsewhere.
564
+ for (let i = 0; i < next.length; i++) {
565
+ if (next[i]?.expectingSha === null)
566
+ next[i] = null;
567
+ }
568
+ // Compact: drop trailing nulls, left-shift middle nulls.
569
+ const compacted = next.filter((s) => s !== null);
570
+ while (next.length > 0)
571
+ next.pop();
572
+ for (const s of compacted)
573
+ next.push(s);
574
+ out.push({
575
+ ...c,
576
+ lane,
577
+ colorId,
578
+ inputSwimlanes,
579
+ outputSwimlanes: next.map((s) => (s ? { ...s } : null)),
580
+ });
581
+ current = next;
582
+ }
583
+ return out;
584
+ }
585
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/routes/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Hono } from "hono";
2
+ interface CreateHealthzRouteOptions {
3
+ /** Override for tests so they can avoid faking node-server conninfo. */
4
+ remoteAddress?: () => string | null;
5
+ }
6
+ export declare function createHealthzRoute(opts?: CreateHealthzRouteOptions): Hono;
7
+ export {};
8
+ //# sourceMappingURL=healthz.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"healthz.d.ts","sourceRoot":"","sources":["../../src/routes/healthz.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAa5B,UAAU,yBAAyB;IACjC,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;CACrC;AAED,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,yBAA8B,GAAG,IAAI,CAsB7E"}
@@ -0,0 +1,24 @@
1
+ import { getConnInfo } from "@hono/node-server/conninfo";
2
+ import { Hono } from "hono";
3
+ import { isLoopbackAddress } from "../application/integrations/hook-notify.js";
4
+ export function createHealthzRoute(opts = {}) {
5
+ const app = new Hono();
6
+ app.get("/", (c) => {
7
+ const resolve = opts.remoteAddress ??
8
+ (() => {
9
+ const info = getConnInfo(c);
10
+ return info.remote?.address ?? null;
11
+ });
12
+ const remote = resolve();
13
+ if (!isLoopbackAddress(remote)) {
14
+ return c.json({ error: "loopback only" }, 403);
15
+ }
16
+ return c.json({
17
+ status: "ok",
18
+ pid: process.pid,
19
+ uptime: Math.round(process.uptime()),
20
+ });
21
+ });
22
+ return app;
23
+ }
24
+ //# sourceMappingURL=healthz.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"healthz.js","sourceRoot":"","sources":["../../src/routes/healthz.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,4CAA4C,CAAC;AAiB/E,MAAM,UAAU,kBAAkB,CAAC,OAAkC,EAAE;IACrE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IAEvB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;QACjB,MAAM,OAAO,GACX,IAAI,CAAC,aAAa;YAClB,CAAC,GAAG,EAAE;gBACJ,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC5B,OAAO,IAAI,CAAC,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC;YACtC,CAAC,CAAC,CAAC;QACL,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,GAAG,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,MAAM,EAAE,IAAI;YACZ,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;SACrC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC"}