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 @@
1
+ {"version":3,"file":"remote-host.js","sourceRoot":"","sources":["../../src/pty/remote-host.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import type { Buffer } from "node:buffer";
2
+ import type { Frame } from "./host-protocol/frames.js";
3
+ export interface PendingRequest {
4
+ resolve: (frame: Frame) => void;
5
+ reject: (err: Error) => void;
6
+ timer: ReturnType<typeof setTimeout>;
7
+ }
8
+ export interface RequestCorrelatorDeps {
9
+ /** Per-request timeout in milliseconds. */
10
+ timeoutMs: number;
11
+ /** Build the error used to reject a request that times out. The correlator
12
+ * supplies its own assigned requestId and the configured timeoutMs so the
13
+ * caller can format a domain-appropriate message without re-encoding either
14
+ * value (keeps the correlator decoupled from `RemotePtyHostError`). */
15
+ buildTimeoutError: (requestId: number, timeoutMs: number) => Error;
16
+ /** Hand the frame to the wire. Called once per `request()` with the
17
+ * correlator-assigned requestId. State-machine guards and socket-write
18
+ * failure handling stay on the caller side -- the correlator is socket /
19
+ * state agnostic. */
20
+ send: (type: number, requestId: number, payload: Buffer) => void;
21
+ }
22
+ /**
23
+ * Request/response correlation for the daemon wire-frame protocol. Owns:
24
+ * - monotonic requestId assignment (starts at 1; `requestId=0` is reserved
25
+ * by the protocol for fire-and-forget and connection-level NACK and is
26
+ * never assigned here).
27
+ * - the pending-request map (id -> {resolve, reject, timer}).
28
+ * - per-request timeout scheduling.
29
+ * - ACK / NACK dispatch to the matching pending entry.
30
+ * - bulk-reject on connection drop.
31
+ *
32
+ * The pending entry is registered **before** `send` is called so a
33
+ * synchronous send-side fault that triggers a connection drop in the caller
34
+ * can still iterate `rejectAll` and reject the just-registered Promise (the
35
+ * same ordering invariant the inline-on-`RemotePtyHost` implementation
36
+ * relied on).
37
+ */
38
+ export declare class RequestCorrelator {
39
+ private nextId;
40
+ private readonly pending;
41
+ private readonly deps;
42
+ constructor(deps: RequestCorrelatorDeps);
43
+ /** Assign a fresh requestId, register the pending entry, arm the timeout,
44
+ * and hand the frame to the wire. */
45
+ request(type: number, payload: Buffer): Promise<Frame>;
46
+ /** Resolve the pending entry keyed by `frame.requestId`, if any. Returns
47
+ * true when a pending entry was matched and resolved, false on a stale
48
+ * ACK (peer slow / fenced). */
49
+ ack(frame: Frame): boolean;
50
+ /** Reject the pending entry for `requestId` with `err`. `requestId === 0`
51
+ * is a connection-level NACK and is rejected here as a no-op (the caller
52
+ * treats it as a wire fault and drops the connection). Returns true on
53
+ * match, false on stale or `requestId === 0`. */
54
+ nack(requestId: number, err: Error): boolean;
55
+ /** Reject every pending entry with `err` and clear the map. Used on socket
56
+ * drop so in-flight Promise<X>-returning methods don't hang. */
57
+ rejectAll(err: Error): void;
58
+ }
59
+ //# sourceMappingURL=request-correlator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-correlator.d.ts","sourceRoot":"","sources":["../../src/pty/request-correlator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAChC,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAC7B,KAAK,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IACpC,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB;;;4EAGwE;IACxE,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,KAAK,CAAC;IACnE;;;0BAGsB;IACtB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAClE;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAwB;gBAEjC,IAAI,EAAE,qBAAqB;IAIvC;0CACsC;IACtC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAatD;;oCAEgC;IAChC,GAAG,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAS1B;;;sDAGkD;IAClD,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,GAAG,OAAO;IAU5C;qEACiE;IACjE,SAAS,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI;CAO5B"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Request/response correlation for the daemon wire-frame protocol. Owns:
3
+ * - monotonic requestId assignment (starts at 1; `requestId=0` is reserved
4
+ * by the protocol for fire-and-forget and connection-level NACK and is
5
+ * never assigned here).
6
+ * - the pending-request map (id -> {resolve, reject, timer}).
7
+ * - per-request timeout scheduling.
8
+ * - ACK / NACK dispatch to the matching pending entry.
9
+ * - bulk-reject on connection drop.
10
+ *
11
+ * The pending entry is registered **before** `send` is called so a
12
+ * synchronous send-side fault that triggers a connection drop in the caller
13
+ * can still iterate `rejectAll` and reject the just-registered Promise (the
14
+ * same ordering invariant the inline-on-`RemotePtyHost` implementation
15
+ * relied on).
16
+ */
17
+ export class RequestCorrelator {
18
+ nextId = 1;
19
+ pending = new Map();
20
+ deps;
21
+ constructor(deps) {
22
+ this.deps = deps;
23
+ }
24
+ /** Assign a fresh requestId, register the pending entry, arm the timeout,
25
+ * and hand the frame to the wire. */
26
+ request(type, payload) {
27
+ const requestId = this.nextId++;
28
+ return new Promise((resolve, reject) => {
29
+ const timer = setTimeout(() => {
30
+ if (this.pending.delete(requestId)) {
31
+ reject(this.deps.buildTimeoutError(requestId, this.deps.timeoutMs));
32
+ }
33
+ }, this.deps.timeoutMs);
34
+ this.pending.set(requestId, { resolve, reject, timer });
35
+ this.deps.send(type, requestId, payload);
36
+ });
37
+ }
38
+ /** Resolve the pending entry keyed by `frame.requestId`, if any. Returns
39
+ * true when a pending entry was matched and resolved, false on a stale
40
+ * ACK (peer slow / fenced). */
41
+ ack(frame) {
42
+ const entry = this.pending.get(frame.requestId);
43
+ if (!entry)
44
+ return false;
45
+ this.pending.delete(frame.requestId);
46
+ clearTimeout(entry.timer);
47
+ entry.resolve(frame);
48
+ return true;
49
+ }
50
+ /** Reject the pending entry for `requestId` with `err`. `requestId === 0`
51
+ * is a connection-level NACK and is rejected here as a no-op (the caller
52
+ * treats it as a wire fault and drops the connection). Returns true on
53
+ * match, false on stale or `requestId === 0`. */
54
+ nack(requestId, err) {
55
+ if (requestId === 0)
56
+ return false;
57
+ const entry = this.pending.get(requestId);
58
+ if (!entry)
59
+ return false;
60
+ this.pending.delete(requestId);
61
+ clearTimeout(entry.timer);
62
+ entry.reject(err);
63
+ return true;
64
+ }
65
+ /** Reject every pending entry with `err` and clear the map. Used on socket
66
+ * drop so in-flight Promise<X>-returning methods don't hang. */
67
+ rejectAll(err) {
68
+ for (const [id, entry] of this.pending) {
69
+ clearTimeout(entry.timer);
70
+ entry.reject(err);
71
+ this.pending.delete(id);
72
+ }
73
+ }
74
+ }
75
+ //# sourceMappingURL=request-correlator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-correlator.js","sourceRoot":"","sources":["../../src/pty/request-correlator.ts"],"names":[],"mappings":"AAwBA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,iBAAiB;IACpB,MAAM,GAAG,CAAC,CAAC;IACF,OAAO,GAAG,IAAI,GAAG,EAA0B,CAAC;IAC5C,IAAI,CAAwB;IAE7C,YAAY,IAA2B;QACrC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;IAED;0CACsC;IACtC,OAAO,CAAC,IAAY,EAAE,OAAe;QACnC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,OAAO,IAAI,OAAO,CAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;oBACnC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;gBACtE,CAAC;YACH,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACxB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;YACxD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;oCAEgC;IAChC,GAAG,CAAC,KAAY;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACrC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;sDAGkD;IAClD,IAAI,CAAC,SAAiB,EAAE,GAAU;QAChC,IAAI,SAAS,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC/B,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;qEACiE;IACjE,SAAS,CAAC,GAAU;QAClB,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACvC,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAClB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,130 @@
1
+ interface ScrollbackLogOptions {
2
+ maxBytes?: number;
3
+ tailBytes?: number;
4
+ /**
5
+ * Per-session in-memory chunk ring budget for delta replay
6
+ *. Disk persistence is unchanged. Override
7
+ * via the `PARASOR_IN_MEMORY_CHUNK_BUDGET` env elsewhere.
8
+ */
9
+ inMemoryChunkBudget?: number;
10
+ }
11
+ export interface ChunkRecord {
12
+ seq: bigint;
13
+ data: Buffer;
14
+ }
15
+ /**
16
+ * Result of `readSince`.
17
+ *
18
+ * - `delta`: chunk ring contains every seq after `lastSeen`.
19
+ * Sender writes the binary OUTPUTs, no JSON replay needed.
20
+ * - `full`: ring evicted before `lastSeen` OR generation mismatch.
21
+ * Sender flushes the disk tail via `readTail()` then resumes from
22
+ * the current seq.
23
+ * - `none`: client has no `lastSeen`, OR ring is empty (fresh PTY).
24
+ * Sender skips replay entirely; live OUTPUT will deliver everything.
25
+ */
26
+ export type ReadSinceResult = {
27
+ kind: "delta";
28
+ chunks: ChunkRecord[];
29
+ } | {
30
+ kind: "full";
31
+ } | {
32
+ kind: "none";
33
+ };
34
+ /**
35
+ * Per-session append-only log for scrollback. Writes are buffered (flush
36
+ * on 64KB or 100ms) to keep onData hot-paths cheap. When a file exceeds
37
+ * `maxBytes` it is truncated to the last `tailBytes` -- good-enough to give
38
+ * users visual continuity after a server restart without unbounded growth.
39
+ *
40
+ * added an in-memory chunk ring on top of the same
41
+ * structure: each broadcast writes one chunk via `appendChunk` so a
42
+ * reconnecting client with a `lastSeen: {generation, seq}` can be
43
+ * served just the missing chunks ("delta") rather than the full tail.
44
+ * The disk file remains the canonical fallback (`readTail()`) for cases
45
+ * where the ring evicted before `lastSeen` or generations diverge.
46
+ */
47
+ export declare class ScrollbackLog {
48
+ private readonly dir;
49
+ private readonly maxBytes;
50
+ private readonly tailBytes;
51
+ private readonly inMemoryBudget;
52
+ private readonly buffers;
53
+ private readonly rings;
54
+ constructor(configDir: string, options?: ScrollbackLogOptions);
55
+ /**
56
+ * Enqueue data for the given session. Buffers in memory; flushes on
57
+ * timer or threshold. Safe to call from every onData.
58
+ */
59
+ append(sessionId: string, data: string): void;
60
+ /**
61
+ * Synchronously flush all pending buffers to disk. Called on graceful
62
+ * shutdown so no outstanding writes are lost.
63
+ */
64
+ flushAll(): void;
65
+ /**
66
+ * Return the tail of the log for a session, if any. Used to rehydrate
67
+ * xterm scrollback after a server restart, and as the `replay:"full"`
68
+ * fallback in chunked replay.
69
+ *
70
+ * Flushes the session's pending append buffer synchronously before
71
+ * reading so callers see every byte already passed to `append()`.
72
+ * Without this, the 64 KiB / 100 ms write coalescing window would
73
+ * leak into the replay (e.g. the auto-resume separator appended in
74
+ * the same attach turn would be missing from the snapshot).
75
+ */
76
+ readTail(sessionId: string): string;
77
+ /**
78
+ * Append a binary chunk to the in-memory ring and return the assigned
79
+ * seq. the daemon shutdown contract-- caller passes the live PTY generation; if
80
+ * it doesn't match the ring's generation the ring is reset so we
81
+ * never emit (gen, seq) pairs that overlap a previous epoch.
82
+ *
83
+ * `seq` is uint64 (BigInt). Overflow is not handled because 1.8e19
84
+ * chunks is unreachable in practice -- a malicious client cannot
85
+ * influence chunk-allocation rate (chunks come from PTY output, not
86
+ * client input), and even at 1 chunk/ns we'd need 580 years.
87
+ */
88
+ appendChunk(sessionId: string, generation: number, data: Buffer): bigint;
89
+ /**
90
+ * Bump generation: PTY respawn (`restart`). Resets seq to 0n and
91
+ * drops the in-memory ring -- disk persistence is untouched so a
92
+ * concurrent reconnect still has a fallback path.
93
+ */
94
+ bumpGeneration(sessionId: string, newGeneration: number): void;
95
+ /**
96
+ * Current ring snapshot -- used for init-ack `serverState`. Returns
97
+ * `null` for `lastDeliveredSeq` / `oldestSeq` when the ring is empty
98
+ * (fresh session, no broadcast yet) so the client can distinguish
99
+ * "no chunks ever" from "chunk 0 was the last one".
100
+ */
101
+ ringState(sessionId: string, fallbackGeneration: number): {
102
+ generation: number;
103
+ lastDeliveredSeq: bigint | null;
104
+ oldestSeq: bigint | null;
105
+ };
106
+ /**
107
+ * Decide replay strategy for a reconnecting client.
108
+ *
109
+ * - no ring + lastSeen -> `full` (server restart, client has cursor)
110
+ * - no ring + no lastSeen -> `none`
111
+ * - generation mismatch -> `full`
112
+ * - lastSeen.seq < oldestSeq (evicted) -> `full`
113
+ * - lastSeen.seq >= nextSeq - 1 (already saw current) -> `none`
114
+ * - otherwise -> `delta` with the chunks where seq > lastSeen.seq
115
+ */
116
+ readSince(sessionId: string, lastSeen: {
117
+ generation: number;
118
+ seq: bigint;
119
+ } | undefined): ReadSinceResult;
120
+ /**
121
+ * Delete a session's log file and drop any pending buffer. Called when
122
+ * the user explicitly closes a session (dispose).
123
+ */
124
+ remove(sessionId: string): void;
125
+ private pathFor;
126
+ private flushSession;
127
+ private rotateIfNeeded;
128
+ }
129
+ export {};
130
+ //# sourceMappingURL=scrollback-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scrollback-log.d.ts","sourceRoot":"","sources":["../../src/pty/scrollback-log.ts"],"names":[],"mappings":"AA4CA,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAQD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAcD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,WAAW,EAAE,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAErB;;;;;;;;;;;;GAYG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;gBAE1C,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,oBAAyB;IAyBjE;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAsB7C;;;OAGG;IACH,QAAQ,IAAI,IAAI;IAMhB;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAanC;;;;;;;;;;OAUG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAsBxE;;;;OAIG;IACH,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAS9D;;;;;OAKG;IACH,SAAS,CACP,SAAS,EAAE,MAAM,EACjB,kBAAkB,EAAE,MAAM,GACzB;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B;IAuBD;;;;;;;;;OASG;IACH,SAAS,CACP,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,GACxD,eAAe;IAclB;;;OAGG;IACH,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAa/B,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,YAAY;IA+BpB,OAAO,CAAC,cAAc;CAsDvB"}
@@ -0,0 +1,344 @@
1
+ import { closeSync, existsSync, mkdirSync, openSync, readFileSync, readSync, renameSync, statSync, truncateSync, unlinkSync, writeSync, } from "node:fs";
2
+ import { join } from "node:path";
3
+ const DEFAULT_MAX_BYTES = 8 * 1024 * 1024;
4
+ const DEFAULT_TAIL_BYTES = 4 * 1024 * 1024;
5
+ const FLUSH_INTERVAL_MS = 100;
6
+ const FLUSH_THRESHOLD_BYTES = 64 * 1024;
7
+ const DEFAULT_IN_MEMORY_CHUNK_BUDGET_BYTES = 1 * 1024 * 1024;
8
+ /**
9
+ * Drop a leading run of UTF-8 continuation bytes (`10xx_xxxx`) from a
10
+ * tail slice. Without this, a tail boundary landing in the middle of a
11
+ * multi-byte sequence would decode the orphaned continuation bytes as
12
+ * U+FFFD. The first valid UTF-8 start byte is either ASCII (0xxxxxxx)
13
+ * or a leading byte (11xxxxxx); we scan at most 3 bytes (max multi-byte
14
+ * tail prefix length).
15
+ */
16
+ function decodeFromUtf8Boundary(slice) {
17
+ let i = 0;
18
+ while (i < slice.length && i < 3 && (slice[i] & 0xc0) === 0x80)
19
+ i++;
20
+ return slice.subarray(i).toString("utf8");
21
+ }
22
+ function readPositiveIntegerEnv(name) {
23
+ const raw = process.env[name];
24
+ if (!raw)
25
+ return null;
26
+ const value = Number(raw);
27
+ if (!Number.isSafeInteger(value) || value <= 0)
28
+ return null;
29
+ return value;
30
+ }
31
+ /**
32
+ * Per-session append-only log for scrollback. Writes are buffered (flush
33
+ * on 64KB or 100ms) to keep onData hot-paths cheap. When a file exceeds
34
+ * `maxBytes` it is truncated to the last `tailBytes` -- good-enough to give
35
+ * users visual continuity after a server restart without unbounded growth.
36
+ *
37
+ * added an in-memory chunk ring on top of the same
38
+ * structure: each broadcast writes one chunk via `appendChunk` so a
39
+ * reconnecting client with a `lastSeen: {generation, seq}` can be
40
+ * served just the missing chunks ("delta") rather than the full tail.
41
+ * The disk file remains the canonical fallback (`readTail()`) for cases
42
+ * where the ring evicted before `lastSeen` or generations diverge.
43
+ */
44
+ export class ScrollbackLog {
45
+ dir;
46
+ maxBytes;
47
+ tailBytes;
48
+ inMemoryBudget;
49
+ buffers = new Map();
50
+ rings = new Map();
51
+ constructor(configDir, options = {}) {
52
+ this.dir = join(configDir, "sessions");
53
+ this.maxBytes =
54
+ options.maxBytes ??
55
+ readPositiveIntegerEnv("PARASOR_SCROLLBACK_MAX_BYTES") ??
56
+ DEFAULT_MAX_BYTES;
57
+ this.tailBytes = Math.min(options.tailBytes ??
58
+ readPositiveIntegerEnv("PARASOR_SCROLLBACK_TAIL_BYTES") ??
59
+ DEFAULT_TAIL_BYTES, this.maxBytes);
60
+ const envBudget = Number(process.env.PARASOR_IN_MEMORY_CHUNK_BUDGET);
61
+ this.inMemoryBudget =
62
+ options.inMemoryChunkBudget ??
63
+ (Number.isFinite(envBudget) && envBudget > 0
64
+ ? envBudget
65
+ : DEFAULT_IN_MEMORY_CHUNK_BUDGET_BYTES);
66
+ try {
67
+ mkdirSync(this.dir, { recursive: true });
68
+ }
69
+ catch {
70
+ // best-effort -- appends will fail later but won't crash the server
71
+ }
72
+ }
73
+ /**
74
+ * Enqueue data for the given session. Buffers in memory; flushes on
75
+ * timer or threshold. Safe to call from every onData.
76
+ */
77
+ append(sessionId, data) {
78
+ const buf = Buffer.from(data, "utf8");
79
+ let pending = this.buffers.get(sessionId);
80
+ if (!pending) {
81
+ pending = { chunks: [], size: 0, timer: null };
82
+ this.buffers.set(sessionId, pending);
83
+ }
84
+ pending.chunks.push(buf);
85
+ pending.size += buf.length;
86
+ if (pending.size >= FLUSH_THRESHOLD_BYTES) {
87
+ this.flushSession(sessionId);
88
+ return;
89
+ }
90
+ if (!pending.timer) {
91
+ pending.timer = setTimeout(() => this.flushSession(sessionId), FLUSH_INTERVAL_MS);
92
+ }
93
+ }
94
+ /**
95
+ * Synchronously flush all pending buffers to disk. Called on graceful
96
+ * shutdown so no outstanding writes are lost.
97
+ */
98
+ flushAll() {
99
+ for (const id of [...this.buffers.keys()]) {
100
+ this.flushSession(id);
101
+ }
102
+ }
103
+ /**
104
+ * Return the tail of the log for a session, if any. Used to rehydrate
105
+ * xterm scrollback after a server restart, and as the `replay:"full"`
106
+ * fallback in chunked replay.
107
+ *
108
+ * Flushes the session's pending append buffer synchronously before
109
+ * reading so callers see every byte already passed to `append()`.
110
+ * Without this, the 64 KiB / 100 ms write coalescing window would
111
+ * leak into the replay (e.g. the auto-resume separator appended in
112
+ * the same attach turn would be missing from the snapshot).
113
+ */
114
+ readTail(sessionId) {
115
+ this.flushSession(sessionId);
116
+ const path = this.pathFor(sessionId);
117
+ if (!existsSync(path))
118
+ return "";
119
+ try {
120
+ const buf = readFileSync(path);
121
+ if (buf.length <= this.tailBytes)
122
+ return buf.toString("utf8");
123
+ return decodeFromUtf8Boundary(buf.subarray(buf.length - this.tailBytes));
124
+ }
125
+ catch {
126
+ return "";
127
+ }
128
+ }
129
+ /**
130
+ * Append a binary chunk to the in-memory ring and return the assigned
131
+ * seq. the daemon shutdown contract-- caller passes the live PTY generation; if
132
+ * it doesn't match the ring's generation the ring is reset so we
133
+ * never emit (gen, seq) pairs that overlap a previous epoch.
134
+ *
135
+ * `seq` is uint64 (BigInt). Overflow is not handled because 1.8e19
136
+ * chunks is unreachable in practice -- a malicious client cannot
137
+ * influence chunk-allocation rate (chunks come from PTY output, not
138
+ * client input), and even at 1 chunk/ns we'd need 580 years.
139
+ */
140
+ appendChunk(sessionId, generation, data) {
141
+ let ring = this.rings.get(sessionId);
142
+ if (!ring || ring.generation !== generation) {
143
+ ring = {
144
+ generation,
145
+ nextSeq: 0n,
146
+ chunks: [],
147
+ totalBytes: 0,
148
+ };
149
+ this.rings.set(sessionId, ring);
150
+ }
151
+ const seq = ring.nextSeq;
152
+ ring.nextSeq = seq + 1n;
153
+ ring.chunks.push({ seq, data });
154
+ ring.totalBytes += data.length;
155
+ while (ring.totalBytes > this.inMemoryBudget && ring.chunks.length > 1) {
156
+ const evicted = ring.chunks.shift();
157
+ if (evicted)
158
+ ring.totalBytes -= evicted.data.length;
159
+ }
160
+ return seq;
161
+ }
162
+ /**
163
+ * Bump generation: PTY respawn (`restart`). Resets seq to 0n and
164
+ * drops the in-memory ring -- disk persistence is untouched so a
165
+ * concurrent reconnect still has a fallback path.
166
+ */
167
+ bumpGeneration(sessionId, newGeneration) {
168
+ this.rings.set(sessionId, {
169
+ generation: newGeneration,
170
+ nextSeq: 0n,
171
+ chunks: [],
172
+ totalBytes: 0,
173
+ });
174
+ }
175
+ /**
176
+ * Current ring snapshot -- used for init-ack `serverState`. Returns
177
+ * `null` for `lastDeliveredSeq` / `oldestSeq` when the ring is empty
178
+ * (fresh session, no broadcast yet) so the client can distinguish
179
+ * "no chunks ever" from "chunk 0 was the last one".
180
+ */
181
+ ringState(sessionId, fallbackGeneration) {
182
+ const ring = this.rings.get(sessionId);
183
+ if (!ring) {
184
+ return {
185
+ generation: fallbackGeneration,
186
+ lastDeliveredSeq: null,
187
+ oldestSeq: null,
188
+ };
189
+ }
190
+ if (ring.chunks.length === 0) {
191
+ return {
192
+ generation: ring.generation,
193
+ lastDeliveredSeq: null,
194
+ oldestSeq: null,
195
+ };
196
+ }
197
+ return {
198
+ generation: ring.generation,
199
+ lastDeliveredSeq: ring.nextSeq - 1n,
200
+ oldestSeq: ring.chunks[0]?.seq ?? null,
201
+ };
202
+ }
203
+ /**
204
+ * Decide replay strategy for a reconnecting client.
205
+ *
206
+ * - no ring + lastSeen -> `full` (server restart, client has cursor)
207
+ * - no ring + no lastSeen -> `none`
208
+ * - generation mismatch -> `full`
209
+ * - lastSeen.seq < oldestSeq (evicted) -> `full`
210
+ * - lastSeen.seq >= nextSeq - 1 (already saw current) -> `none`
211
+ * - otherwise -> `delta` with the chunks where seq > lastSeen.seq
212
+ */
213
+ readSince(sessionId, lastSeen) {
214
+ const ring = this.rings.get(sessionId);
215
+ if (!ring)
216
+ return lastSeen ? { kind: "full" } : { kind: "none" };
217
+ if (!lastSeen)
218
+ return { kind: "none" };
219
+ if (lastSeen.generation !== ring.generation)
220
+ return { kind: "full" };
221
+ if (lastSeen.seq >= ring.nextSeq - 1n)
222
+ return { kind: "none" };
223
+ const oldest = ring.chunks[0]?.seq;
224
+ if (oldest === undefined)
225
+ return { kind: "none" };
226
+ if (lastSeen.seq < oldest - 1n)
227
+ return { kind: "full" };
228
+ const startIdx = ring.chunks.findIndex((c) => c.seq > lastSeen.seq);
229
+ if (startIdx < 0)
230
+ return { kind: "none" };
231
+ return { kind: "delta", chunks: ring.chunks.slice(startIdx) };
232
+ }
233
+ /**
234
+ * Delete a session's log file and drop any pending buffer. Called when
235
+ * the user explicitly closes a session (dispose).
236
+ */
237
+ remove(sessionId) {
238
+ const pending = this.buffers.get(sessionId);
239
+ if (pending?.timer)
240
+ clearTimeout(pending.timer);
241
+ this.buffers.delete(sessionId);
242
+ this.rings.delete(sessionId);
243
+ const path = this.pathFor(sessionId);
244
+ try {
245
+ if (existsSync(path))
246
+ unlinkSync(path);
247
+ }
248
+ catch {
249
+ // ignore
250
+ }
251
+ }
252
+ pathFor(sessionId) {
253
+ return join(this.dir, `${sessionId}.log`);
254
+ }
255
+ flushSession(sessionId) {
256
+ const pending = this.buffers.get(sessionId);
257
+ if (!pending || pending.chunks.length === 0)
258
+ return;
259
+ if (pending.timer) {
260
+ clearTimeout(pending.timer);
261
+ pending.timer = null;
262
+ }
263
+ const merged = Buffer.concat(pending.chunks, pending.size);
264
+ pending.chunks = [];
265
+ pending.size = 0;
266
+ const path = this.pathFor(sessionId);
267
+ let fd = null;
268
+ try {
269
+ fd = openSync(path, "a");
270
+ writeSync(fd, merged);
271
+ }
272
+ catch {
273
+ // best-effort; drop this chunk so we don't retry endlessly
274
+ }
275
+ finally {
276
+ if (fd !== null) {
277
+ try {
278
+ closeSync(fd);
279
+ }
280
+ catch {
281
+ // ignore
282
+ }
283
+ }
284
+ }
285
+ this.rotateIfNeeded(path);
286
+ }
287
+ rotateIfNeeded(path) {
288
+ let size;
289
+ try {
290
+ size = statSync(path).size;
291
+ }
292
+ catch {
293
+ return;
294
+ }
295
+ if (size <= this.maxBytes)
296
+ return;
297
+ // Partial read: only pull the last `tailBytes` off disk instead of
298
+ // loading the full 8 MiB file into memory. The trim is always a
299
+ // strict suffix because size > maxBytes >= tailBytes.
300
+ const tail = Buffer.alloc(this.tailBytes);
301
+ let srcFd = null;
302
+ try {
303
+ srcFd = openSync(path, "r");
304
+ let read = 0;
305
+ while (read < this.tailBytes) {
306
+ const n = readSync(srcFd, tail, read, this.tailBytes - read, size - this.tailBytes + read);
307
+ if (n === 0)
308
+ break;
309
+ read += n;
310
+ }
311
+ const trimmed = read === this.tailBytes ? tail : tail.subarray(0, read);
312
+ const tmp = `${path}.tmp`;
313
+ // Write tail to tmp, rename over original -- atomic-ish truncation.
314
+ const dstFd = openSync(tmp, "w");
315
+ try {
316
+ writeSync(dstFd, trimmed);
317
+ }
318
+ finally {
319
+ closeSync(dstFd);
320
+ }
321
+ renameSync(tmp, path);
322
+ }
323
+ catch {
324
+ // Fallback: truncate to zero so we don't grow unbounded on failure.
325
+ try {
326
+ truncateSync(path, 0);
327
+ }
328
+ catch {
329
+ // ignore
330
+ }
331
+ }
332
+ finally {
333
+ if (srcFd !== null) {
334
+ try {
335
+ closeSync(srcFd);
336
+ }
337
+ catch {
338
+ // ignore
339
+ }
340
+ }
341
+ }
342
+ }
343
+ }
344
+ //# sourceMappingURL=scrollback-log.js.map