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,218 @@
1
+ import { Hono } from "hono";
2
+ import { WorkspaceConflictError, WorkspaceNotFoundError, } from "../application/workspace/errors.js";
3
+ import { createSessionCommands } from "../application/workspace/session-commands.js";
4
+ import { createSessionQueries } from "../application/workspace/session-queries.js";
5
+ import { buildHeadlessReplaySnapshot } from "../pty/headless-replay-snapshot.js";
6
+ const DEFAULT_SCROLLBACK_SNAPSHOT_COLS = 80;
7
+ const DEFAULT_SCROLLBACK_SNAPSHOT_ROWS = 24;
8
+ const DEFAULT_SCROLLBACK_SNAPSHOT_MAX_BYTES = 256 * 1024;
9
+ const MAX_SCROLLBACK_SNAPSHOT_BYTES = 4 * 1024 * 1024;
10
+ const DEFAULT_SCROLLBACK_SNAPSHOT_LINES = 10_000;
11
+ const MAX_SCROLLBACK_SNAPSHOT_LINES = 160_000;
12
+ function readPositiveIntegerQuery(value, fallback) {
13
+ const parsed = Number(value);
14
+ return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : fallback;
15
+ }
16
+ function scrollbackLinesForMaxBytes(maxBytes) {
17
+ const multiplier = Math.max(1, Math.ceil(maxBytes / DEFAULT_SCROLLBACK_SNAPSHOT_MAX_BYTES));
18
+ return Math.min(DEFAULT_SCROLLBACK_SNAPSHOT_LINES * multiplier, MAX_SCROLLBACK_SNAPSHOT_LINES);
19
+ }
20
+ export function createSessionRoutes(ptyManager, eventBus, store, terminalTraceRecorder) {
21
+ const routes = new Hono();
22
+ const sessionCommands = createSessionCommands({
23
+ appStateStore: store,
24
+ eventBus,
25
+ ptyManager,
26
+ });
27
+ const sessionQueries = createSessionQueries({ ptyManager });
28
+ routes.get("/", (c) => {
29
+ const projectId = c.req.query("projectId");
30
+ return c.json({ sessions: sessionQueries.listSessions(projectId) });
31
+ });
32
+ routes.post("/", async (c) => {
33
+ const body = await c.req
34
+ .json()
35
+ .catch(() => ({}));
36
+ if (!body.projectId) {
37
+ return c.json({ error: "projectId is required" }, 400);
38
+ }
39
+ const createStart = performance.now();
40
+ terminalTraceRecorder?.record("session-create-request", {
41
+ projectId: body.projectId,
42
+ commandType: body.command?.type ?? "shell",
43
+ hasCwd: typeof body.cwd === "string",
44
+ hasTitle: typeof body.title === "string",
45
+ hasBootstrapInput: typeof body.bootstrapInput === "string",
46
+ });
47
+ try {
48
+ const session = await sessionCommands.createSession({
49
+ projectId: body.projectId,
50
+ ...(body.command !== undefined && { command: body.command }),
51
+ ...(body.cwd !== undefined && { cwd: body.cwd }),
52
+ ...(body.title !== undefined && { title: body.title }),
53
+ ...(typeof body.bootstrapInput === "string" && {
54
+ bootstrapInput: body.bootstrapInput,
55
+ }),
56
+ });
57
+ terminalTraceRecorder?.record("session-create-complete", {
58
+ projectId: session.projectId,
59
+ commandType: session.command.type,
60
+ state: session.state,
61
+ pid: session.pid ?? null,
62
+ generation: session.generation,
63
+ durationMs: Math.round((performance.now() - createStart) * 10) / 10,
64
+ }, { sessionId: session.id });
65
+ return c.json(session, 201);
66
+ }
67
+ catch (error) {
68
+ if (error instanceof WorkspaceNotFoundError) {
69
+ terminalTraceRecorder?.record("session-create-failed", {
70
+ projectId: body.projectId,
71
+ reason: "project-not-found",
72
+ durationMs: Math.round((performance.now() - createStart) * 10) / 10,
73
+ });
74
+ return c.json({ error: "Project not found" }, 404);
75
+ }
76
+ terminalTraceRecorder?.record("session-create-failed", {
77
+ projectId: body.projectId,
78
+ reason: error instanceof Error ? error.name : "unknown",
79
+ durationMs: Math.round((performance.now() - createStart) * 10) / 10,
80
+ });
81
+ throw error;
82
+ }
83
+ });
84
+ routes.get("/:id/cwd", async (c) => {
85
+ const id = c.req.param("id");
86
+ try {
87
+ return c.json(await sessionQueries.getSessionCwd(id));
88
+ }
89
+ catch (error) {
90
+ if (error instanceof WorkspaceNotFoundError) {
91
+ return c.json({ error: "Not found" }, 404);
92
+ }
93
+ if (error instanceof WorkspaceConflictError) {
94
+ return c.json({ error: error.message }, 409);
95
+ }
96
+ throw error;
97
+ }
98
+ });
99
+ routes.get("/:id/scrollback-snapshot", async (c) => {
100
+ const id = c.req.param("id");
101
+ if (!ptyManager.get(id)) {
102
+ return c.json({ error: "Not found" }, 404);
103
+ }
104
+ const scrollback = ptyManager.getScrollback(id);
105
+ if (!scrollback) {
106
+ return c.json({
107
+ text: "",
108
+ rawBytes: 0,
109
+ replayBytes: 0,
110
+ maxBytes: 0,
111
+ hasMore: false,
112
+ });
113
+ }
114
+ const cols = readPositiveIntegerQuery(c.req.query("cols"), DEFAULT_SCROLLBACK_SNAPSHOT_COLS);
115
+ const rows = readPositiveIntegerQuery(c.req.query("rows"), DEFAULT_SCROLLBACK_SNAPSHOT_ROWS);
116
+ const maxBytes = Math.min(readPositiveIntegerQuery(c.req.query("maxBytes"), DEFAULT_SCROLLBACK_SNAPSHOT_MAX_BYTES), MAX_SCROLLBACK_SNAPSHOT_BYTES);
117
+ const scrollbackLines = scrollbackLinesForMaxBytes(maxBytes);
118
+ const snapshot = await buildHeadlessReplaySnapshot(scrollback, {
119
+ cols,
120
+ rows,
121
+ scrollbackLines,
122
+ maxBytes,
123
+ });
124
+ const hitLineCap = snapshot.bufferLines >= scrollbackLines + rows;
125
+ return c.json({
126
+ text: snapshot.text,
127
+ rawBytes: snapshot.rawBytes,
128
+ replayBytes: snapshot.snapshotBytes,
129
+ maxBytes,
130
+ hasMore: snapshot.snapshotBytes >= maxBytes || hitLineCap,
131
+ bufferLines: snapshot.bufferLines,
132
+ emittedLines: snapshot.emittedLines,
133
+ scrollbackLines,
134
+ });
135
+ });
136
+ routes.post("/:id/pin", async (c) => {
137
+ const id = c.req.param("id");
138
+ const body = await c.req
139
+ .json()
140
+ .catch(() => ({}));
141
+ if (typeof body.pinned !== "boolean") {
142
+ return c.json({ error: "pinned must be a boolean" }, 400);
143
+ }
144
+ try {
145
+ const session = await sessionCommands.setSessionPinned(id, body.pinned);
146
+ return c.json(session);
147
+ }
148
+ catch (error) {
149
+ if (error instanceof WorkspaceNotFoundError) {
150
+ return c.json({ error: "Not found" }, 404);
151
+ }
152
+ throw error;
153
+ }
154
+ });
155
+ routes.post("/:id/title", async (c) => {
156
+ const id = c.req.param("id");
157
+ const body = await c.req
158
+ .json()
159
+ .catch(() => ({}));
160
+ if (typeof body.title !== "string") {
161
+ return c.json({ error: "title must be a string" }, 400);
162
+ }
163
+ try {
164
+ const session = await sessionCommands.setSessionTitle(id, body.title);
165
+ return c.json(session);
166
+ }
167
+ catch (error) {
168
+ if (error instanceof WorkspaceNotFoundError) {
169
+ return c.json({ error: "Not found" }, 404);
170
+ }
171
+ throw error;
172
+ }
173
+ });
174
+ routes.post("/:id/restart", async (c) => {
175
+ const id = c.req.param("id");
176
+ try {
177
+ const restarted = await sessionCommands.restartSession(id);
178
+ return c.json(restarted);
179
+ }
180
+ catch (error) {
181
+ if (error instanceof WorkspaceNotFoundError) {
182
+ return c.json({ error: "Not found" }, 404);
183
+ }
184
+ if (error instanceof WorkspaceConflictError) {
185
+ return c.json({ error: error.message }, 409);
186
+ }
187
+ return c.json({ error: error instanceof Error ? error.message : "Restart failed" }, 500);
188
+ }
189
+ });
190
+ routes.delete("/:id", async (c) => {
191
+ const id = c.req.param("id");
192
+ const deleteStart = performance.now();
193
+ terminalTraceRecorder?.record("session-delete-request", {}, { sessionId: id });
194
+ try {
195
+ await sessionCommands.deleteSession(id);
196
+ terminalTraceRecorder?.record("session-delete-complete", {
197
+ durationMs: Math.round((performance.now() - deleteStart) * 10) / 10,
198
+ }, { sessionId: id });
199
+ return c.json({ ok: true });
200
+ }
201
+ catch (error) {
202
+ if (error instanceof WorkspaceNotFoundError) {
203
+ terminalTraceRecorder?.record("session-delete-failed", {
204
+ reason: "not-found",
205
+ durationMs: Math.round((performance.now() - deleteStart) * 10) / 10,
206
+ }, { sessionId: id });
207
+ return c.json({ error: "Not found" }, 404);
208
+ }
209
+ terminalTraceRecorder?.record("session-delete-failed", {
210
+ reason: error instanceof Error ? error.name : "unknown",
211
+ durationMs: Math.round((performance.now() - deleteStart) * 10) / 10,
212
+ }, { sessionId: id });
213
+ throw error;
214
+ }
215
+ });
216
+ return routes;
217
+ }
218
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../../src/routes/sessions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EACL,sBAAsB,EACtB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,6CAA6C,CAAC;AAEnF,OAAO,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAKjF,MAAM,gCAAgC,GAAG,EAAE,CAAC;AAC5C,MAAM,gCAAgC,GAAG,EAAE,CAAC;AAC5C,MAAM,qCAAqC,GAAG,GAAG,GAAG,IAAI,CAAC;AACzD,MAAM,6BAA6B,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AACtD,MAAM,iCAAiC,GAAG,MAAM,CAAC;AACjD,MAAM,6BAA6B,GAAG,OAAO,CAAC;AAE9C,SAAS,wBAAwB,CAC/B,KAAyB,EACzB,QAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7B,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AACxE,CAAC;AAED,SAAS,0BAA0B,CAAC,QAAgB;IAClD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CACzB,CAAC,EACD,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,qCAAqC,CAAC,CAC5D,CAAC;IACF,OAAO,IAAI,CAAC,GAAG,CACb,iCAAiC,GAAG,UAAU,EAC9C,6BAA6B,CAC9B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,UAAmB,EACnB,QAAkB,EAClB,KAAoB,EACpB,qBAA6C;IAE7C,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;IAC1B,MAAM,eAAe,GAAG,qBAAqB,CAAC;QAC5C,aAAa,EAAE,KAAK;QACpB,QAAQ;QACR,UAAU;KACX,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,oBAAoB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IAE5D,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;QACpB,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3C,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,cAAc,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG;aACrB,IAAI,EAMD;aACH,KAAK,CACJ,GAAG,EAAE,CACH,CAAC,EAAE,CAMF,CACJ,CAAC;QAEJ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,EAAE,GAAG,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACtC,qBAAqB,EAAE,MAAM,CAAC,wBAAwB,EAAE;YACtD,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,OAAO;YAC1C,MAAM,EAAE,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ;YACpC,QAAQ,EAAE,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ;YACxC,iBAAiB,EAAE,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ;SAC3D,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,aAAa,CAAC;gBAClD,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC5D,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC;gBAChD,GAAG,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;gBACtD,GAAG,CAAC,OAAO,IAAI,CAAC,cAAc,KAAK,QAAQ,IAAI;oBAC7C,cAAc,EAAE,IAAI,CAAC,cAAc;iBACpC,CAAC;aACH,CAAC,CAAC;YACH,qBAAqB,EAAE,MAAM,CAC3B,yBAAyB,EACzB;gBACE,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI;gBACjC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,IAAI;gBACxB,UAAU,EAAE,OAAO,CAAC,UAAU;gBAC9B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;aACpE,EACD,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAC1B,CAAC;YACF,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,sBAAsB,EAAE,CAAC;gBAC5C,qBAAqB,EAAE,MAAM,CAAC,uBAAuB,EAAE;oBACrD,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,MAAM,EAAE,mBAAmB;oBAC3B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;iBACpE,CAAC,CAAC;gBACH,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,CAAC,CAAC;YACrD,CAAC;YACD,qBAAqB,EAAE,MAAM,CAAC,uBAAuB,EAAE;gBACrD,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;gBACvD,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;aACpE,CAAC,CAAC;YACH,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACjC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC;YACH,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,sBAAsB,EAAE,CAAC;gBAC5C,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;YAC7C,CAAC;YACD,IAAI,KAAK,YAAY,sBAAsB,EAAE,CAAC;gBAC5C,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;YAC/C,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,CAAC,0BAA0B,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACjD,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CAAC,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,EAAE;gBACR,QAAQ,EAAE,CAAC;gBACX,WAAW,EAAE,CAAC;gBACd,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,KAAK;aACf,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,GAAG,wBAAwB,CACnC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EACnB,gCAAgC,CACjC,CAAC;QACF,MAAM,IAAI,GAAG,wBAAwB,CACnC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,EACnB,gCAAgC,CACjC,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CACvB,wBAAwB,CACtB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,EACvB,qCAAqC,CACtC,EACD,6BAA6B,CAC9B,CAAC;QACF,MAAM,eAAe,GAAG,0BAA0B,CAAC,QAAQ,CAAC,CAAC;QAC7D,MAAM,QAAQ,GAAG,MAAM,2BAA2B,CAAC,UAAU,EAAE;YAC7D,IAAI;YACJ,IAAI;YACJ,eAAe;YACf,QAAQ;SACT,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,IAAI,eAAe,GAAG,IAAI,CAAC;QAElE,OAAO,CAAC,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,WAAW,EAAE,QAAQ,CAAC,aAAa;YACnC,QAAQ;YACR,OAAO,EAAE,QAAQ,CAAC,aAAa,IAAI,QAAQ,IAAI,UAAU;YACzD,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,YAAY,EAAE,QAAQ,CAAC,YAAY;YACnC,eAAe;SAChB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAClC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG;aACrB,IAAI,EAAwB;aAC5B,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAyB,CAAC,CAAC;QAC7C,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACrC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,0BAA0B,EAAE,EAAE,GAAG,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YACxE,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,sBAAsB,EAAE,CAAC;gBAC5C,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;YAC7C,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG;aACrB,IAAI,EAAuB;aAC3B,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAwB,CAAC,CAAC;QAC5C,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YACnC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,EAAE,GAAG,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,eAAe,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACtE,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,sBAAsB,EAAE,CAAC;gBAC5C,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;YAC7C,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QACtC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAC3D,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,sBAAsB,EAAE,CAAC;gBAC5C,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;YAC7C,CAAC;YACD,IAAI,KAAK,YAAY,sBAAsB,EAAE,CAAC;gBAC5C,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;YAC/C,CAAC;YACD,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,EAAE,EACpE,GAAG,CACJ,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;QAChC,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACtC,qBAAqB,EAAE,MAAM,CAC3B,wBAAwB,EACxB,EAAE,EACF,EAAE,SAAS,EAAE,EAAE,EAAE,CAClB,CAAC;QACF,IAAI,CAAC;YACH,MAAM,eAAe,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YACxC,qBAAqB,EAAE,MAAM,CAC3B,yBAAyB,EACzB;gBACE,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;aACpE,EACD,EAAE,SAAS,EAAE,EAAE,EAAE,CAClB,CAAC;YACF,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,sBAAsB,EAAE,CAAC;gBAC5C,qBAAqB,EAAE,MAAM,CAC3B,uBAAuB,EACvB;oBACE,MAAM,EAAE,WAAW;oBACnB,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;iBACpE,EACD,EAAE,SAAS,EAAE,EAAE,EAAE,CAClB,CAAC;gBACF,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,GAAG,CAAC,CAAC;YAC7C,CAAC;YACD,qBAAqB,EAAE,MAAM,CAC3B,uBAAuB,EACvB;gBACE,MAAM,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;gBACvD,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE;aACpE,EACD,EAAE,SAAS,EAAE,EAAE,EAAE,CAClB,CAAC;YACF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,33 @@
1
+ import { type ChildProcess } from "node:child_process";
2
+ export interface CaffeinateControllerOptions {
3
+ platform?: NodeJS.Platform;
4
+ spawner?: (command: string, args: string[]) => ChildProcess;
5
+ parentPid?: number;
6
+ }
7
+ /**
8
+ * Keeps a `caffeinate -i` child alive while the server is configured to
9
+ * prevent idle sleep AND at least one WS client is attached. No-op on
10
+ * non-darwin hosts -- callers may construct unconditionally.
11
+ *
12
+ * Uses `caffeinate -w <parent-pid>` so the child self-terminates when the
13
+ * parent process dies ungracefully (SIGKILL / crash). Without this binding
14
+ * an orphaned caffeinate would keep the Mac awake indefinitely until the
15
+ * user manually killed it.
16
+ */
17
+ export declare class CaffeinateController {
18
+ private readonly platform;
19
+ private readonly spawner;
20
+ private readonly parentPid;
21
+ private proc;
22
+ private enabled;
23
+ private clientCount;
24
+ constructor(opts?: CaffeinateControllerOptions);
25
+ setEnabled(enabled: boolean): void;
26
+ setClientCount(count: number): void;
27
+ isRunning(): boolean;
28
+ shutdown(): void;
29
+ private reconcile;
30
+ private startProc;
31
+ private killProc;
32
+ }
33
+ //# sourceMappingURL=caffeinate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caffeinate.d.ts","sourceRoot":"","sources":["../../src/service/caffeinate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAS,MAAM,oBAAoB,CAAC;AAE9D,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,YAAY,CAAC;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;GASG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoD;IAC5E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAK;gBAEZ,IAAI,GAAE,2BAAgC;IAQlD,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAMlC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAMnC,SAAS,IAAI,OAAO;IAIpB,QAAQ,IAAI,IAAI;IAIhB,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,QAAQ;CAMjB"}
@@ -0,0 +1,72 @@
1
+ import { spawn } from "node:child_process";
2
+ /**
3
+ * Keeps a `caffeinate -i` child alive while the server is configured to
4
+ * prevent idle sleep AND at least one WS client is attached. No-op on
5
+ * non-darwin hosts -- callers may construct unconditionally.
6
+ *
7
+ * Uses `caffeinate -w <parent-pid>` so the child self-terminates when the
8
+ * parent process dies ungracefully (SIGKILL / crash). Without this binding
9
+ * an orphaned caffeinate would keep the Mac awake indefinitely until the
10
+ * user manually killed it.
11
+ */
12
+ export class CaffeinateController {
13
+ platform;
14
+ spawner;
15
+ parentPid;
16
+ proc = null;
17
+ enabled = false;
18
+ clientCount = 0;
19
+ constructor(opts = {}) {
20
+ this.platform = opts.platform ?? process.platform;
21
+ this.spawner =
22
+ opts.spawner ??
23
+ ((command, args) => spawn(command, args, { stdio: "ignore" }));
24
+ this.parentPid = opts.parentPid ?? process.pid;
25
+ }
26
+ setEnabled(enabled) {
27
+ if (this.enabled === enabled)
28
+ return;
29
+ this.enabled = enabled;
30
+ this.reconcile();
31
+ }
32
+ setClientCount(count) {
33
+ if (this.clientCount === count)
34
+ return;
35
+ this.clientCount = count;
36
+ this.reconcile();
37
+ }
38
+ isRunning() {
39
+ return this.proc !== null;
40
+ }
41
+ shutdown() {
42
+ this.killProc();
43
+ }
44
+ reconcile() {
45
+ const shouldRun = this.platform === "darwin" && this.enabled && this.clientCount > 0;
46
+ if (shouldRun && this.proc === null) {
47
+ this.startProc();
48
+ }
49
+ else if (!shouldRun && this.proc !== null) {
50
+ this.killProc();
51
+ }
52
+ }
53
+ startProc() {
54
+ const proc = this.spawner("caffeinate", [
55
+ "-i",
56
+ "-w",
57
+ String(this.parentPid),
58
+ ]);
59
+ this.proc = proc;
60
+ proc.on("exit", () => {
61
+ if (this.proc === proc)
62
+ this.proc = null;
63
+ });
64
+ }
65
+ killProc() {
66
+ if (this.proc !== null) {
67
+ this.proc.kill();
68
+ this.proc = null;
69
+ }
70
+ }
71
+ }
72
+ //# sourceMappingURL=caffeinate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"caffeinate.js","sourceRoot":"","sources":["../../src/service/caffeinate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAQ9D;;;;;;;;;GASG;AACH,MAAM,OAAO,oBAAoB;IACd,QAAQ,CAAkB;IAC1B,OAAO,CAAoD;IAC3D,SAAS,CAAS;IAC3B,IAAI,GAAwB,IAAI,CAAC;IACjC,OAAO,GAAG,KAAK,CAAC;IAChB,WAAW,GAAG,CAAC,CAAC;IAExB,YAAY,OAAoC,EAAE;QAChD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;QAClD,IAAI,CAAC,OAAO;YACV,IAAI,CAAC,OAAO;gBACZ,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC;IACjD,CAAC;IAED,UAAU,CAAC,OAAgB;QACzB,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO;YAAE,OAAO;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,cAAc,CAAC,KAAa;QAC1B,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK;YAAE,OAAO;QACvC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,SAAS,EAAE,CAAC;IACnB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;IAC5B,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,QAAQ,EAAE,CAAC;IAClB,CAAC;IAEO,SAAS;QACf,MAAM,SAAS,GACb,IAAI,CAAC,QAAQ,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACrE,IAAI,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACpC,IAAI,CAAC,SAAS,EAAE,CAAC;QACnB,CAAC;aAAM,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC;IACH,CAAC;IAEO,SAAS;QACf,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;YACtC,IAAI;YACJ,IAAI;YACJ,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;SACvB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACnB,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;gBAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,QAAQ;QACd,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,167 @@
1
+ import { type AppState, type Project, type Session } from "@parasor/shared";
2
+ export interface AppStateStoreOpts {
3
+ /** Directory containing state.json. Defaults to ~/.config/parasor */
4
+ dir?: string;
5
+ /** Debounce delay in ms. Defaults to 300 */
6
+ debounceMs?: number;
7
+ /**
8
+ * -- invoked when a debounced write fails
9
+ * (delegate persist reject / writeFileSync throw). Mutator callers
10
+ * are sync `void`-returning, so without this hook a transient
11
+ * IPC NACK or disk EIO would silently swallow project / projectStates
12
+ * / serviceConfig changes. Default = `console.error`. Pass `null` to
13
+ * silence (tests) but DO NOT silence in production: the operator
14
+ * needs the signal to know state.json is stale.
15
+ */
16
+ onPersistError?: ((err: unknown) => void) | null;
17
+ }
18
+ export interface AppStatePersistenceDelegate {
19
+ /**
20
+ * Persist the *server-owned* domains. The delegate is responsible for
21
+ * resolving when persistence has actually committed (e.g. IPC ACK).
22
+ * Throws/rejects -> caller logs and (for `flush()`) propagates so the
23
+ * shutdown path can decide to skip the daemon-graceful marker.
24
+ */
25
+ persist(state: AppState): Promise<void>;
26
+ }
27
+ export type ProjectsMutateView = Pick<AppState, "projects" | "projectStates">;
28
+ export type ProjectStatesMutateView = Pick<AppState, "projectStates"> & Readonly<{
29
+ projects: ReadonlyArray<Readonly<Project>>;
30
+ sessions: ReadonlyArray<Readonly<Session>>;
31
+ }>;
32
+ export type ServiceConfigMutateView = Pick<AppState, "serviceConfig">;
33
+ export type PaneCommandsMutateView = Pick<AppState, "paneCommands">;
34
+ export type IdeCommandsMutateView = Pick<AppState, "ideCommands">;
35
+ export type SessionsMutateView = Pick<AppState, "sessions" | "sessionRecords"> & Readonly<{
36
+ projects: ReadonlyArray<Readonly<Project>>;
37
+ }>;
38
+ export declare class AppStateReadOnlyError extends Error {
39
+ constructor();
40
+ }
41
+ export declare class AppStateStore {
42
+ private state;
43
+ private readonly dir;
44
+ private readonly filePath;
45
+ private readonly tmpPath;
46
+ private readonly debounceMs;
47
+ private timer;
48
+ private destroyed;
49
+ /**
50
+ * Daemon-mode mirror guard.
51
+ * When true, only the **session domain** (`sessions`, `sessionRecords`)
52
+ * is read-only -- the daemon owns those writes. Project / projectStates
53
+ * / serviceConfig stay writable in both modes (the daemon never touches
54
+ * them; their only writer is the server). The daemon-IPC reconciler
55
+ * applies session-domain broadcasts via `internalMutate()` to bypass
56
+ * this guard. Default false (in-process mode owns all writes).
57
+ */
58
+ private sessionsReadOnly;
59
+ /**
60
+ * daemon state ownership -- when set, write() routes the in-memory state through the
61
+ * delegate instead of writing state.json directly. The remote-mode
62
+ * server installs an IPC delegate so the daemon (sole file writer)
63
+ * persists the server-owned domains. Mirror updates (internalMutate)
64
+ * skip the delegate because they reflect domain the writer already
65
+ * persisted.
66
+ */
67
+ private persistenceDelegate;
68
+ /**
69
+ * Tracks the most recent debounced-write promise. `flush()` awaits
70
+ * it BEFORE issuing its own write so a shutdown-time flush surfaces
71
+ * any in-flight failure (codex MED daemon state ownership/round 2). The promise resolves
72
+ * whether the underlying write succeeded or rejected -- failures are
73
+ * routed through `onPersistError` and then silenced here so awaiting
74
+ * never throws on a shutdown path.
75
+ */
76
+ private lastWrite;
77
+ private readonly onPersistError;
78
+ constructor(opts?: AppStateStoreOpts);
79
+ /**
80
+ * Directory containing `state.json`. Used by the mode-marker subsystem
81
+ * so the cross-mode mutex collides on the
82
+ * same directory the store persists into, regardless of overrides.
83
+ */
84
+ getDir(): string;
85
+ private load;
86
+ get(): Readonly<AppState>;
87
+ /**
88
+ * Server-owned domain: project records (`projects` array). Always
89
+ * writable, even in remote daemon mode -- the daemon never touches
90
+ * project records, so the server is unconditionally authoritative.
91
+ *
92
+ * The callback may also touch `projectStates` since both fields move
93
+ * together (project create/delete must keep the per-project state map
94
+ * in lock-step). Use `mutateProjectStates` for pure projectStates
95
+ * writes (panes, layout, focus) without project-record changes.
96
+ */
97
+ mutateProjects(fn: (state: ProjectsMutateView) => void): void;
98
+ /**
99
+ * Server-owned domain: per-project UI state (`projectStates`). Always
100
+ * writable. Pane layout, focus, file-tree state, etc. -- none of which
101
+ * the daemon knows about. `projects` and `sessions` are exposed
102
+ * read-only so reconciliation logic can compute orphan sets without
103
+ * being able to write into either domain.
104
+ */
105
+ mutateProjectStates(fn: (state: ProjectStatesMutateView) => void): void;
106
+ /**
107
+ * Server-owned domain: `serviceConfig`. Always writable. Daemon does
108
+ * not consume serviceConfig; only the server reads it.
109
+ */
110
+ mutateServiceConfig(fn: (state: ServiceConfigMutateView) => void): void;
111
+ /**
112
+ * Server-owned domain: terminal launcher commands. Always writable; the
113
+ * daemon only owns PTY sessions/sessionRecords.
114
+ */
115
+ mutatePaneCommands(fn: (state: PaneCommandsMutateView) => void): void;
116
+ mutateIdeCommands(fn: (state: IdeCommandsMutateView) => void): void;
117
+ /**
118
+ * Daemon-owned domain: `sessions` + `sessionRecords`. In remote mode
119
+ * the server is a mirror -- server-side writes throw to surface the
120
+ * ownership violation. The daemon-IPC reconciler uses `internalMutate`
121
+ * to apply broadcasts without tripping this guard. `projects` is
122
+ * exposed read-only for project-membership filters used during
123
+ * startup reconciliation.
124
+ */
125
+ mutateSessions(fn: (state: SessionsMutateView) => void): void;
126
+ /**
127
+ * Bypass the session-domain guard. Reserved for the daemon-IPC
128
+ * reconciler on the server side: SESSION_UPDATE / SESSION_LIST
129
+ * broadcasts apply here without tripping `mutateSessions`. In
130
+ * delegate mode the mutation is mirror-only -- the daemon already
131
+ * persisted these domains before broadcasting, so the server
132
+ * skips the IPC round-trip. Without a delegate (in-process / daemon
133
+ * itself), the call schedules a normal file flush so the local
134
+ * state.json stays coherent for UI reload.
135
+ */
136
+ internalMutate(fn: (state: AppState) => void): void;
137
+ /**
138
+ * Toggle the session-domain guard (narrowed by daemon state ownership). Idempotent.
139
+ * Called once at factory-time after the PtyHost mode is decided
140
+ * (in-process -> false, remote -> true) -- runtime flipping is not
141
+ * supported (by design).
142
+ */
143
+ setSessionsReadOnly(readOnly: boolean): void;
144
+ isSessionsReadOnly(): boolean;
145
+ /**
146
+ * daemon state ownership -- install/uninstall the IPC persistence delegate. In remote
147
+ * mode the server installs the delegate after RemotePtyHost.connect
148
+ * succeeds. Idempotent; pass null to fall back to direct file writes
149
+ * (e.g. when host factory recreates an in-process host). Setting the
150
+ * delegate does not flush -- callers do that explicitly if the next
151
+ * snapshot needs to land on disk before further work.
152
+ */
153
+ setPersistenceDelegate(delegate: AppStatePersistenceDelegate | null): void;
154
+ /**
155
+ * Force a flush *now* and await the underlying persistence (file
156
+ * write or IPC ACK). Used by shutdown paths that must observe IO
157
+ * errors before deciding whether to write the daemon-graceful
158
+ * marker. Synchronous in spirit (cancels the debounce timer); the
159
+ * Promise reflects the persist step.
160
+ */
161
+ flush(): Promise<void>;
162
+ /** Cancel pending timer and ignore future mutate calls (for test teardown). */
163
+ destroy(): void;
164
+ private scheduleFlush;
165
+ private write;
166
+ }
167
+ //# sourceMappingURL=app-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-state.d.ts","sourceRoot":"","sources":["../../src/state/app-state.ts"],"names":[],"mappings":"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"}