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,140 @@
1
+ import { Buffer } from "node:buffer";
2
+ import type { IdeCommandConfig, PaneCommandConfig, Project, ProjectState, ServiceConfig, Session, SessionCommand, SessionEndReason } from "@parasor/shared";
3
+ export declare const PROTOCOL_VERSION = "2.4.0";
4
+ export interface HelloPayload {
5
+ protocolVersion: string;
6
+ serverPid: number;
7
+ }
8
+ export interface HelloAckPayload {
9
+ protocolVersion: string;
10
+ connectionId: number;
11
+ /** stringified bigint (JSON cannot carry u64 directly). */
12
+ generation: string;
13
+ daemonPid: number;
14
+ daemonStartedAt: string;
15
+ }
16
+ export type NackCode = "version-mismatch" | "evicted" | "daemon-shutting-down" | "frame-too-large" | "frame-invalid" | "unknown-frame-type" | "handshake-required" | "session-not-found" | "create-failed" | "restart-failed" | "persist-failed" | "internal-error";
17
+ export interface NackPayload {
18
+ code: NackCode;
19
+ message: string;
20
+ }
21
+ export interface CreateReqPayload {
22
+ projectId: string;
23
+ command: SessionCommand;
24
+ cwd: string;
25
+ title?: string;
26
+ bootstrapInput?: string;
27
+ }
28
+ export interface CreateAckPayload {
29
+ session: Session;
30
+ }
31
+ export interface RestartReqPayload {
32
+ sessionId: string;
33
+ }
34
+ export interface RestartAckPayload {
35
+ session: Session;
36
+ }
37
+ export interface DisposeReqPayload {
38
+ sessionId: string;
39
+ }
40
+ export type EmptyAckPayload = Record<string, never>;
41
+ export interface InitClientReqPayload {
42
+ sessionId: string;
43
+ clientId: string;
44
+ cols: number;
45
+ rows: number;
46
+ /**
47
+ * Attach fencing: server-side monotonic counter identifying this attach.
48
+ * Daemon stamps it onto its `attachedClients` entry so a stale
49
+ * DETACH_CLIENT (delivered after the new attach already overwrote the
50
+ * map slot) can be filtered against the current entry's stamp.
51
+ * Optional for older clients/peers that predate the fence.
52
+ */
53
+ attachToken?: number;
54
+ }
55
+ export interface InitClientAckPayload {
56
+ /** false when sessionId is unknown or daemon refuses (e.g. evicted). */
57
+ accepted: boolean;
58
+ }
59
+ export interface PersistProjectDomainsReqPayload {
60
+ projects: Project[];
61
+ projectStates: Record<string, ProjectState>;
62
+ serviceConfig: ServiceConfig;
63
+ paneCommands?: PaneCommandConfig[];
64
+ ideCommands?: IdeCommandConfig[];
65
+ }
66
+ export interface ResizePayload {
67
+ sessionId: string;
68
+ cols: number;
69
+ rows: number;
70
+ }
71
+ export interface RefreshPayload {
72
+ sessionId: string;
73
+ }
74
+ export interface FlowControlPayload {
75
+ sessionId: string;
76
+ clientId: string;
77
+ }
78
+ export interface DetachClientPayload {
79
+ sessionId: string;
80
+ clientId: string;
81
+ /**
82
+ * Attach fencing: when present, the daemon only deletes the entry whose
83
+ * stored attach-token matches. A stale onClose racing a new attach
84
+ * carries the old token; the daemon's current entry already holds the
85
+ * new token, so the delete is skipped and the live listener survives.
86
+ */
87
+ attachToken?: number;
88
+ }
89
+ export interface SetTitlePayload {
90
+ sessionId: string;
91
+ title: string;
92
+ titleManual?: boolean;
93
+ }
94
+ export interface SetPinnedPayload {
95
+ sessionId: string;
96
+ pinned: boolean;
97
+ }
98
+ export interface SetPtyEnvPayload {
99
+ env: Record<string, string>;
100
+ }
101
+ export interface SessionUpdatePayload {
102
+ session: Session;
103
+ }
104
+ export interface SessionListPayload {
105
+ sessions: Session[];
106
+ }
107
+ export interface SessionExitPayload {
108
+ sessionId: string;
109
+ /** Session.generation at the time the PTY exited (restart counter). */
110
+ sessionGeneration: number;
111
+ endReason: SessionEndReason;
112
+ }
113
+ export declare function encodeJsonPayload(value: unknown): Buffer;
114
+ export declare function decodeJsonPayload<T>(payload: Buffer): T;
115
+ interface Semver {
116
+ major: number;
117
+ minor: number;
118
+ patch: number;
119
+ }
120
+ export declare function parseSemver(input: string): Semver | null;
121
+ /**
122
+ * compat rule: MAJOR must match AND daemon.MINOR ≥ client.MINOR.
123
+ * Client = the side that initiates HELLO (server). Daemon side runs this
124
+ * on receiving HELLO; server side runs it after reading HELLO_ACK to
125
+ * detect the "daemon older than server" case.
126
+ */
127
+ export declare function isCompatibleVersion(clientVersion: string, daemonVersion: string): boolean;
128
+ /**
129
+ * daemon protocol mismatch recovery -- extract `(server, daemon)` versions from the daemon-side NACK
130
+ * message format `server X.Y.Z not compatible with daemon X.Y.Z`. The
131
+ * daemon emits this verbatim (host-daemon/daemon.ts:272). Returns null
132
+ * when the message shape changes -- recovery and probe paths fall back to
133
+ * `daemonProtocolVersion: "unknown"` in that case.
134
+ */
135
+ export declare function parseVersionMismatch(msg: string): {
136
+ server: string;
137
+ daemon: string;
138
+ } | null;
139
+ export {};
140
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/pty/host-protocol/messages.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ /*
2
+ * Typed payload schemas for PtyHost IPC frames.
3
+ *
4
+ * Frame envelope (length, type, connectionId, generation, requestId) lives
5
+ * in `frames.ts`. This module defines the JSON payloads carried inside
6
+ * each frame type plus the version-compat rule. Stream-payload frames
7
+ * (WRITE / DATA / SESSION_INPUT) bypass JSON entirely -- see
8
+ * `STREAM_FRAME_TYPES` and `encodeStreamPayload` in `frames.ts`.
9
+ */
10
+ import { Buffer } from "node:buffer";
11
+ /*
12
+ * 2.4.0 -- adds `ideCommands` to PERSIST_PROJECT_DOMAINS_REQ so custom
13
+ * IDE launchers persist through the daemon single-writer path. A 2.3.x
14
+ * daemon would ACK but silently ignore that field, so the minor bump forces
15
+ * a daemon restart before the server relies on it.
16
+ *
17
+ * 2.3.0 -- adds `paneCommands` to PERSIST_PROJECT_DOMAINS_REQ so server-side
18
+ * terminal launcher commands persist through the daemon single-writer path.
19
+ * A 2.2.x daemon would ACK but silently ignore that field, so the minor bump
20
+ * forces a daemon restart before the server relies on it.
21
+ *
22
+ * 2.2.0 -- adds PAUSE_OUTPUT / RESUME_OUTPUT fire-and-forget frames so
23
+ * terminal WebSocket backpressure can reach daemon-owned PTYs. The minor
24
+ * bump forces older 2.1 daemons to restart before a new server relies on
25
+ * the new frame types.
26
+ *
27
+ * 2.1.0 -- added optional `bootstrapInput` to CREATE_REQ so the daemon can
28
+ * feed one-shot startup input into a newly-spawned PTY. A 2.0.x daemon would
29
+ * ignore that field and create an empty shell, so the MINOR bump forces the
30
+ * upgraded server to restart the daemon before command-launcher sessions run.
31
+ *
32
+ * 2.0.0 -- MAJOR bump for PTY generation gate. Both WRITE (server->daemon, INPUT) and
33
+ * DATA (daemon->server, OUTPUT) frames now carry a uint32 BE generation
34
+ * field between sessionId and data: `[idLen][sessionId][gen:u32 BE][data]`.
35
+ * This is wire-incompatible with 1.x -- a 1.x daemon that received a 2.0
36
+ * WRITE frame would mis-parse the 4-byte gen as the leading bytes of
37
+ * `data` and corrupt the new shell's stdin; a 1.x server that received
38
+ * a 2.0 DATA frame would mis-parse it the same way. The `daemon.minor ≥
39
+ * client.minor` compat rule does NOT cover the inverse direction (older
40
+ * server vs newer daemon), so we MUST bump MAJOR -- `c.major !== d.major`
41
+ * cleanly rejects every 1.x ↔ 2.x pairing at handshake and forces the
42
+ * server to cold-restart the daemon before any WRITE/DATA flows. The
43
+ * MAJOR bump also subsumes the 1.3.0 force-restart goal -- any 1.x
44
+ * daemon (including 1.3.x) is rejected at handshake, so per-session
45
+ * uploadsDir injection from upload staging isolation is also picked up by the cold-restart.
46
+ *
47
+ * 1.3.0 -- upload staging isolation . Daemon-side `InProcessPtyHost`
48
+ * now consumes `uploadsDir` and stamps `PARASOR_UPLOAD_DIR=<dir>/<sid>`
49
+ * onto every spawned PTY's env via `buildSessionEnv`. A stale 1.2.x
50
+ * daemon would still hold the before upload staging isolation global `PARASOR_UPLOAD_DIR=<root>`
51
+ * (set by the old `setPtyEnv` path in the upgraded server's predecessor)
52
+ * -- the cross-session leak we fixed. Bumping the version forces the
53
+ * handshake to NACK `version-mismatch`, which `host.ts` already
54
+ * routes through `terminateDaemon` + `spawnDaemon` so the replacement
55
+ * daemon picks up the new per-session injection. No payload schema
56
+ * changed; the bump is purely a forced-restart signal.
57
+ *
58
+ * 1.2.0 -- added `attachToken` to InitClientReq (server-minted, echoed
59
+ * on the matching ACK) and DetachClient payloads for attach fencing fencing-token
60
+ * detach. A pre-1.2.0 daemon ignores the field and treats DETACH_CLIENT
61
+ * as unconditional delete, which would re-open the same-clientId race
62
+ * during a daemon-running-across-upgrade window.
63
+ * compat rule (daemon.minor ≥ client.minor) rejects 1.1.x daemons
64
+ * at handshake so the upgraded server cold-restarts the daemon before
65
+ * any WS attaches.
66
+ *
67
+ * 1.1.0 -- added PERSIST_PROJECT_DOMAINS_REQ/ACK (frame types 0x1c/0x1d)
68
+ * for daemon state ownership single-writer-of-state.json.
69
+ *
70
+ * 1.0.0 -- initial release.
71
+ */
72
+ export const PROTOCOL_VERSION = "2.4.0";
73
+ export function encodeJsonPayload(value) {
74
+ return Buffer.from(JSON.stringify(value), "utf8");
75
+ }
76
+ export function decodeJsonPayload(payload) {
77
+ return JSON.parse(payload.toString("utf8"));
78
+ }
79
+ export function parseSemver(input) {
80
+ const m = /^(\d+)\.(\d+)\.(\d+)$/.exec(input);
81
+ if (!m)
82
+ return null;
83
+ return {
84
+ major: Number(m[1]),
85
+ minor: Number(m[2]),
86
+ patch: Number(m[3]),
87
+ };
88
+ }
89
+ /**
90
+ * compat rule: MAJOR must match AND daemon.MINOR ≥ client.MINOR.
91
+ * Client = the side that initiates HELLO (server). Daemon side runs this
92
+ * on receiving HELLO; server side runs it after reading HELLO_ACK to
93
+ * detect the "daemon older than server" case.
94
+ */
95
+ export function isCompatibleVersion(clientVersion, daemonVersion) {
96
+ const c = parseSemver(clientVersion);
97
+ const d = parseSemver(daemonVersion);
98
+ if (!c || !d)
99
+ return false;
100
+ if (c.major !== d.major)
101
+ return false;
102
+ return d.minor >= c.minor;
103
+ }
104
+ /**
105
+ * daemon protocol mismatch recovery -- extract `(server, daemon)` versions from the daemon-side NACK
106
+ * message format `server X.Y.Z not compatible with daemon X.Y.Z`. The
107
+ * daemon emits this verbatim (host-daemon/daemon.ts:272). Returns null
108
+ * when the message shape changes -- recovery and probe paths fall back to
109
+ * `daemonProtocolVersion: "unknown"` in that case.
110
+ */
111
+ export function parseVersionMismatch(msg) {
112
+ const m = msg.match(/server (\S+) not compatible with daemon (\S+)/);
113
+ if (!m)
114
+ return null;
115
+ return { server: m[1], daemon: m[2] };
116
+ }
117
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/pty/host-protocol/messages.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAYrC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAuKxC,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC9C,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAI,OAAe;IAClD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAM,CAAC;AACnD,CAAC;AAQD,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,MAAM,CAAC,GAAG,uBAAuB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACpB,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,aAAqB,EACrB,aAAqB;IAErB,MAAM,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IACrC,MAAM,CAAC,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IACrC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3B,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACtC,OAAO,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAW;IAEX,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACrE,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACxC,CAAC"}
@@ -0,0 +1,273 @@
1
+ import type { Session, SessionCommand, SessionEndReason, TerminalCapabilities, TerminalLastSeen, TerminalReplayKind, TerminalServerState } from "@parasor/shared";
2
+ import type { AppStateStore } from "../state/app-state.js";
3
+ import type { InProcessPtyHostDaemonContext } from "./in-process-host.js";
4
+ import type { ScrollbackLog } from "./scrollback-log.js";
5
+ /**
6
+ * Capability declaration sent to `attachClient` on a fresh WS attach.
7
+ * `lastSeen` is the cursor stored in the client's `sessionStorage` and
8
+ * applies only when `chunkedReplay=true`.
9
+ */
10
+ export interface AttachClientCapabilities {
11
+ binary: boolean;
12
+ chunkedReplay: boolean;
13
+ lastSeen?: TerminalLastSeen;
14
+ }
15
+ /**
16
+ * Result of a successful binary-capable `attachClient`. The host has
17
+ * already (atomically) registered the chunk listener for live broadcasts,
18
+ * computed the replay decision, and pre-loaded the chunks/payload the
19
+ * caller should hand to the WS client.
20
+ *
21
+ * `attachClient` receives the attaching client's dimensions, but those
22
+ * dimensions are authoritative only for first spawn and safe auto-resume.
23
+ * Passive attach to an already-running shared PTY must not resize it;
24
+ * later size changes flow through the explicit `resize()` method.
25
+ *
26
+ * -- the WS layer must emit init-
27
+ * ack first, then either (a) the JSON `replay` envelope (`replay="full"`)
28
+ * or (b) the binary OUTPUT frames in `chunks` (`replay="delta"`), or
29
+ * neither (`replay="none"`), before live OUTPUT can begin arriving.
30
+ */
31
+ export interface AttachClientResponse {
32
+ ok: true;
33
+ capabilities: TerminalCapabilities;
34
+ serverState: TerminalServerState;
35
+ replay: TerminalReplayKind;
36
+ /** Populated when `replay === "delta"`. Already in seq order. */
37
+ chunks?: ReadonlyArray<{
38
+ generation: number;
39
+ seq: bigint;
40
+ data: Buffer;
41
+ }>;
42
+ /** Populated when `replay === "full"`. UTF-8 string. */
43
+ fullReplay?: string;
44
+ replayDiagnostics?: {
45
+ source: "headless-state" | "headless-rebuild" | "headless-snapshot" | "headless-fallback" | "raw-tail";
46
+ rawBytes: number;
47
+ replayBytes: number;
48
+ headlessDurationMs?: number;
49
+ headlessBufferLines?: number;
50
+ headlessEmittedLines?: number;
51
+ scrollbackLines?: number;
52
+ maxBytes?: number;
53
+ };
54
+ /**
55
+ * Attach fencing fence -- monotonic identifier for this attach.
56
+ * The WS handler stashes it in its per-WS state and hands it back via
57
+ * `detachClient(..., expectedToken)` so a stale onClose firing after a
58
+ * new attach (same `clientId`) cannot wipe the new listener.
59
+ */
60
+ attachToken: number;
61
+ }
62
+ export type AttachClientResult = AttachClientResponse | {
63
+ ok: false;
64
+ };
65
+ /**
66
+ * Listener pair for binary-capable clients. The PTY broadcast site fires
67
+ * `onChunk` once per batched flush (1 broadcast = 1 seq), and `onExit`
68
+ * once when the PTY exits. Listener faults are isolated by the host so
69
+ * one bad sink does not starve siblings.
70
+ */
71
+ export interface AttachClientSink {
72
+ onChunk: (generation: number, seq: bigint, data: Buffer) => void;
73
+ onExit?: (exitCode: number) => void;
74
+ }
75
+ /**
76
+ * Inputs for `PtyHost.create()`. Shared by `InProcessPtyHost` and
77
+ * `RemotePtyHost`; kept here so the interface is independent of any one
78
+ * implementation.
79
+ */
80
+ export interface CreateSessionInput {
81
+ projectId: string;
82
+ command: SessionCommand;
83
+ cwd: string;
84
+ title?: string;
85
+ bootstrapInput?: string;
86
+ }
87
+ export type PtyHostMode = "in-process" | "remote";
88
+ /**
89
+ * Abstract PTY host.
90
+ *
91
+ * Two implementations:
92
+ * - `InProcessPtyHost`: owns the PTY descriptors
93
+ * directly inside the server process.
94
+ * - `RemotePtyHost`: proxies the same API over a local Unix socket to the
95
+ * `parasor-pty-host` daemon.
96
+ *
97
+ * The factory `createPtyHost()` picks the implementation from the
98
+ * `PARASOR_PTY_DAEMON` env. Daemon mode is the default (auto-spawned on
99
+ * first use, detached so it survives foreground parasor restarts) so
100
+ * that npm-style updates and freeze-recovery restarts can preserve PTY
101
+ * children. Set `PARASOR_PTY_DAEMON=0` to opt back into in-process mode
102
+ * (used by `pnpm dev` to keep the daemon socket scoped to the dev
103
+ * tsx-watch process and avoid colliding with a production daemon).
104
+ *
105
+ * --- Consistency contract ---
106
+ *
107
+ * Liskov substitutability is governed by the table below. Callers
108
+ * should be tolerant of `RemotePtyHost`-specific failure modes; the
109
+ * in-process path is the strict / safe-side baseline.
110
+ *
111
+ * | Aspect | InProcess | Remote (connected) | Remote (reconnecting) |
112
+ * | ------------------- | ---------------------- | ----------------------------------------------- | --------------------------------------------- |
113
+ * | list()/get() | sync, always latest | mirror, up to last SESSION_LIST | stale possible; do not trust after `reconnecting` |
114
+ * | create() ack order | sync return | resolves on IPC ack (may precede SESSION_UPDATE)| in-flight rejected (epoch fence, ) |
115
+ * | initClient() errors | spawn failures only | + ipc-timeout / version-mismatch / evicted | + connection-dropped |
116
+ * | state event order | strict (sync emit) | best-effort (commit < ack < broadcast) | snapshot rebuild on reconnect |
117
+ * | failure type | Error | Error or RemotePtyHostError(code) | RemotePtyHostError(code: "reconnecting") |
118
+ *
119
+ * `shutdownAll()` carries two meanings:
120
+ * - in-process: kills every live PTY and persists `server-graceful` end
121
+ * reasons so sessions can be restored on next start.
122
+ * - remote: `detach()` only -- closes the IPC connection but leaves
123
+ * daemon-side sessions alive. Use the dedicated `terminateAll()` CLI
124
+ * command to actually SIGTERM all daemon-side sessions.
125
+ * The interface today exposes `shutdownAll()` semantics matching
126
+ * in-process; the remote implementation will widen this when added.
127
+ */
128
+ export interface PtyHost {
129
+ /** Merge env vars into the per-PTY environment. Subsequent calls accumulate. */
130
+ setPtyEnv(env: Record<string, string>): void;
131
+ list(): Session[];
132
+ get(id: string): Session | undefined;
133
+ listByProject(projectId: string): Session[];
134
+ getScrollback(id: string): string | null;
135
+ getForegroundProcess(id: string): string | null;
136
+ create(input: CreateSessionInput): Promise<Session>;
137
+ restart(id: string): Promise<Session>;
138
+ setTitle(id: string, title: string, titleManual?: boolean): boolean;
139
+ setPinned(id: string, pinned: boolean): boolean;
140
+ /**
141
+ * Write user input to the PTY's stdin.
142
+ *
143
+ * `generation` (PTY generation gate): when supplied, the host drops the write if the
144
+ * client's tagged generation no longer matches the session's current
145
+ * one. This eliminates the auto-resume race where in-flight terminal-
146
+ * response sequences (DECRPM/DSR/DA replies the previous TUI's
147
+ * queries triggered) would otherwise land on the new shell's stdin.
148
+ * Omitted = no gating (legacy callers + non-input-path writes).
149
+ */
150
+ write(id: string, data: string, generation?: number): void;
151
+ resize(id: string, cols: number, rows: number): void;
152
+ refresh(id: string): void;
153
+ pauseOutput(id: string, clientId: string): void;
154
+ resumeOutput(id: string, clientId: string): void;
155
+ /**
156
+ * Legacy (non-binary) attach. Retained for older clients that send
157
+ * `init` without `capabilities.binary`. `cols` / `rows` follow the same
158
+ * authority rule as binary attach: first spawn and safe auto-resume may
159
+ * use them, but passive attach to an already-running shared PTY must not
160
+ * resize it. Returns `{ ok: false }` on spawn / session-unavailable
161
+ * failures, otherwise the new attach's fence token (attach fencing) the WS
162
+ * layer should hand back on detach.
163
+ *
164
+ * `attachToken` is normally minted internally and returned. It is
165
+ * caller-supplied only by the daemon's IPC handler so the daemon-side
166
+ * `attachedClients` entry stamps the same value the server-side
167
+ * `RemotePtyHost.bySession` carries -- keeping the fence consistent
168
+ * across the IPC boundary.
169
+ */
170
+ initClient(id: string, clientId: string, cols: number, rows: number, listener: (data: string) => void, attachToken?: number): Promise<{
171
+ ok: true;
172
+ attachToken: number;
173
+ } | {
174
+ ok: false;
175
+ }>;
176
+ /**
177
+ * Binary-capable attach. The WS handler routes to this method when the
178
+ * client's `init` declared `capabilities.binary`.
179
+ * Returns `{ ok: false }` for missing/unattachable sessions; otherwise
180
+ * the WS layer is responsible for emitting init-ack + replay (full or
181
+ * delta) on the wire, then registering itself for live `onChunk`s.
182
+ *
183
+ * Only `InProcessPtyHost` advertises full chunked-replay support.
184
+ * `RemotePtyHost` declares `binary=false / chunkedReplay=false` in its
185
+ * response (the daemon's STREAM_DATA frame does not yet carry chunk
186
+ * headers) but still forwards live OUTPUT through `sink.onChunk` with
187
+ * a synthetic gen=0 / per-attach seq counter; daemon-mode chunked
188
+ * replay is tracked separately.
189
+ */
190
+ attachClient(id: string, clientId: string, cols: number, rows: number, capabilities: AttachClientCapabilities, sink: AttachClientSink): Promise<AttachClientResult>;
191
+ /**
192
+ * Attach fencing fence: when `expectedToken` is supplied, the entry is
193
+ * removed only if its stored attach-token matches. A late onClose
194
+ * from a stale WS therefore cannot drop the listener that a fresh
195
+ * attach has just registered for the same `clientId`. Internal
196
+ * cleanup paths (dispose / disposeAll) keep the unconditional shape
197
+ * by omitting the argument.
198
+ */
199
+ detachClient(id: string, clientId: string, expectedToken?: number): void;
200
+ dispose(id: string): Promise<void>;
201
+ disposeAll(): Promise<void>;
202
+ shutdownAll(reason?: SessionEndReason): Promise<void>;
203
+ loadPersistedSession(session: Session, wasGracefulShutdown: boolean): void;
204
+ onSessionInput(listener: (sessionId: string, data: string) => void): void;
205
+ /**
206
+ * `generation` (PTY generation gate): the PTY generation that produced this OUTPUT
207
+ * batch. Daemon-mode broadcasters forward this to remote attached
208
+ * clients so the WS layer can stamp it into binary OUTPUT frames; the
209
+ * client then echoes it back on INPUT so this host can drop stale
210
+ * input that targets a generation that no longer exists. Always the
211
+ * spawn-time generation of the closure that produced the batch (so
212
+ * mid-flight auto-resume cannot mis-tag old PTY data with the new
213
+ * generation -- see in-process-host.ts:929).
214
+ */
215
+ onSessionData(listener: (sessionId: string, data: string, generation: number) => void): void;
216
+ onSessionExit: ((sessionId: string, generation: number, endReason: SessionEndReason) => void) | null;
217
+ }
218
+ /**
219
+ * Read the runtime mode from env. Daemon mode is the default so that a
220
+ * foreground `parasor` invocation gets the same session-survival
221
+ * properties as the canonical service install -- npm-style updates and
222
+ * server-process restarts can preserve PTY children when they live in a
223
+ * detached daemon. Set `PARASOR_PTY_DAEMON=0` to opt back into
224
+ * in-process mode (used by the dev script to keep PTYs scoped to the
225
+ * tsx-watch process and the legacy single-process layout).
226
+ */
227
+ export declare function resolvePtyHostMode(env?: NodeJS.ProcessEnv): PtyHostMode;
228
+ /**
229
+ * Factory: pick a `PtyHost` implementation from the environment.
230
+ *
231
+ * Asking for an unavailable mode throws so callers don't silently fall back
232
+ * and leak ownership semantics.
233
+ *
234
+ * The factory is intentionally lazy -- it imports `InProcessPtyHost`
235
+ * at call time so that consumers depending only on the `PtyHost`
236
+ * interface (e.g. application/route layers) don't pull in the heavy
237
+ * `node-pty` module at module-eval time.
238
+ */
239
+ export interface CreatePtyHostDeps {
240
+ store: AppStateStore;
241
+ scrollbackLog?: ScrollbackLog | null;
242
+ mode?: PtyHostMode;
243
+ /**
244
+ * In-process mode only -- passed straight through to InProcessPtyHost
245
+ * to enable SessionRecord persistence.
246
+ * Required for `parasor pty-host doctor` to surface session state in
247
+ * in-process mode; the daemon path constructs its own context inside
248
+ * bootstrap.ts. Optional so existing test sites (no orphan checks)
249
+ * keep working.
250
+ */
251
+ daemonContext?: InProcessPtyHostDaemonContext;
252
+ /**
253
+ * Canonical absolute uploads root. In-process mode uses it to inject
254
+ * a per-session `PARASOR_UPLOAD_DIR=<uploadsDir>/<sessionId>` env var
255
+ * into every spawned PTY (upload staging isolation reviewed for correctness 1). Remote mode
256
+ * ignores it -- the daemon will plumb its own value once upload staging isolation's daemon
257
+ * path is wired.
258
+ */
259
+ uploadsDir?: string;
260
+ /**
261
+ * daemon protocol mismatch recovery -- invoked once when the remote-mode bootstrap detects a
262
+ * `version-mismatch` from the running daemon, terminates it, spawns a
263
+ * fresh daemon, and successfully completes the second handshake.
264
+ * Caller (index.ts) wires this to ServerNoticesStore so the web banner
265
+ * can explain why the session list is empty post-upgrade.
266
+ */
267
+ onDaemonAutoRestarted?: (detail: {
268
+ serverProtocolVersion: string;
269
+ daemonProtocolVersion: string;
270
+ }) => void;
271
+ }
272
+ export declare function createPtyHost(deps: CreatePtyHostDeps): Promise<PtyHost>;
273
+ //# sourceMappingURL=host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/pty/host.ts"],"names":[],"mappings":"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"}