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,390 @@
1
+ /*
2
+ * -- `parasor pty-host` CLI subcommands.
3
+ *
4
+ * start Start the daemon (idempotent).
5
+ * stop Send SIGTERM to the running daemon, wait for graceful exit.
6
+ * status Print pid + socket path + mode (running/down/locked-by-other).
7
+ * restart stop + start in sequence (does *not* terminate sessions --
8
+ * the daemon's SIGTERM/SIGKILL escalation is governed by
9
+ * the daemon itself; restart is a one-shot supervisor op).
10
+ * doctor Diagnostic dump for support: paths, lockfile state, recorded
11
+ * pid liveness, mode-marker, last 50 lines of the daemon log,
12
+ * and the SessionRecord table from AppState.
13
+ *
14
+ * All commands take Partial<PtyHostDeps> for test seams. Production
15
+ * defaults wrap node:fs / node:child_process / node:net.
16
+ */
17
+ import { spawn as realSpawn } from "node:child_process";
18
+ import { existsSync, readFileSync } from "node:fs";
19
+ import { homedir } from "node:os";
20
+ import { join } from "node:path";
21
+ import { fileURLToPath } from "node:url";
22
+ import { markerFileFor, readMarker } from "../pty/host-daemon/mode-marker.js";
23
+ import { resolveDaemonPaths, } from "../pty/host-daemon/paths.js";
24
+ import { AppStateStore } from "../state/app-state.js";
25
+ const STOP_TIMEOUT_MS = 10_000;
26
+ const START_TIMEOUT_MS = 5_000;
27
+ const POLL_INTERVAL_MS = 100;
28
+ function defaultConfigDir() {
29
+ const fromEnv = process.env.PARASOR_CONFIG_DIR;
30
+ if (fromEnv && fromEnv.length > 0)
31
+ return fromEnv;
32
+ return join(homedir(), ".config", "parasor");
33
+ }
34
+ function defaultKill(pid, signal) {
35
+ try {
36
+ process.kill(pid, signal);
37
+ return true;
38
+ }
39
+ catch (err) {
40
+ return err.code === "EPERM";
41
+ }
42
+ }
43
+ function defaultSpawnDetached(cmd, args) {
44
+ const child = realSpawn(cmd, args, {
45
+ detached: true,
46
+ stdio: "ignore",
47
+ });
48
+ // detached spawn can emit `error` asynchronously
49
+ // (ENOENT for the binary, EACCES on platforms without immediate
50
+ // exec verification). Without a listener, unhandled error events
51
+ // crash the parent. The CLI start path polls the socket afterward --
52
+ // a failed spawn shows up as "did not become ready" rather than as
53
+ // a parent crash.
54
+ child.once("error", () => {
55
+ /* swallow -- caller relies on probe loop to detect non-startup */
56
+ });
57
+ child.unref();
58
+ return { pid: child.pid };
59
+ }
60
+ function defaultProbeSocket(path) {
61
+ return import("node:net").then((net) => new Promise((resolve) => {
62
+ const s = net.connect(path);
63
+ const finish = (outcome) => {
64
+ s.removeAllListeners();
65
+ try {
66
+ s.destroy();
67
+ }
68
+ catch {
69
+ /* ignore */
70
+ }
71
+ resolve({
72
+ socketReady: outcome === "ready",
73
+ // Connect-success and timeout both mean a live process owns
74
+ // the socket; only ECONNREFUSED / ENOENT / etc. prove the
75
+ // daemon is gone. See bootstrap.ts isSocketActive doc.
76
+ socketAlive: outcome === "ready" || outcome === "timeout",
77
+ });
78
+ };
79
+ s.once("connect", () => finish("ready"));
80
+ s.once("error", () => finish("error"));
81
+ s.setTimeout(250, () => finish("timeout"));
82
+ }));
83
+ }
84
+ function defaultReadPidFile(path) {
85
+ if (!existsSync(path))
86
+ return null;
87
+ try {
88
+ const pid = Number(readFileSync(path, "utf8").trim());
89
+ return Number.isFinite(pid) && pid > 0 ? pid : null;
90
+ }
91
+ catch {
92
+ return null;
93
+ }
94
+ }
95
+ function defaultReadLog(path, lines) {
96
+ if (!existsSync(path))
97
+ return "(no log file)";
98
+ try {
99
+ const content = readFileSync(path, "utf8");
100
+ const all = content.split(/\r?\n/);
101
+ return all.slice(-lines).join("\n");
102
+ }
103
+ catch (err) {
104
+ return `(log unreadable: ${err.message})`;
105
+ }
106
+ }
107
+ function defaultSleep(ms) {
108
+ return new Promise((r) => setTimeout(r, ms));
109
+ }
110
+ function defaultEntryPath() {
111
+ // dist/server/cli/pty-host.js -> ../pty/host-daemon/entry.js
112
+ // src/cli/pty-host.ts also resolves to the same .js after build, so
113
+ // tests that exercise via `tsx` need to override this.
114
+ const here = fileURLToPath(import.meta.url);
115
+ return join(here, "..", "..", "pty", "host-daemon", "entry.js");
116
+ }
117
+ function resolveDeps(partial) {
118
+ const appStateDir = partial?.appStateDir ?? defaultConfigDir();
119
+ return {
120
+ paths: partial?.paths ?? resolveDaemonPaths(),
121
+ appStateDir,
122
+ now: partial?.now ?? Date.now,
123
+ killProcess: partial?.killProcess ?? defaultKill,
124
+ spawnDetached: partial?.spawnDetached ?? defaultSpawnDetached,
125
+ probeSocket: partial?.probeSocket ?? defaultProbeSocket,
126
+ readPidFile: partial?.readPidFile ?? defaultReadPidFile,
127
+ readLog: partial?.readLog ?? defaultReadLog,
128
+ sleep: partial?.sleep ?? defaultSleep,
129
+ log: partial?.log ?? ((m) => console.log(m)),
130
+ error: partial?.error ?? ((m) => console.error(m)),
131
+ daemonEntryPath: partial?.daemonEntryPath ?? defaultEntryPath(),
132
+ };
133
+ }
134
+ async function probeStatus(deps) {
135
+ const probe = await deps.probeSocket(deps.paths.socketPath);
136
+ const pid = deps.readPidFile(deps.paths.pidFile);
137
+ /*
138
+ * bootstrap.isSocketActive treats a connect
139
+ * timeout as "alive" (fail-closed) to avoid double-spawn races.
140
+ * The CLI's old behavior (timeout = down) disagreed: a busy daemon
141
+ * mid-handshake could be flagged stale-pidfile and (post HIGH#2
142
+ * with --force) killed. Use socketAlive here so a live but stalled
143
+ * daemon stays classified `running` -- the user can investigate
144
+ * before forcing termination.
145
+ */
146
+ if (probe.socketAlive) {
147
+ return { state: "running", pid, socketReady: probe.socketReady };
148
+ }
149
+ if (pid !== null && deps.killProcess(pid, 0)) {
150
+ return { state: "stale-pidfile", pid, socketReady: false };
151
+ }
152
+ return { state: "down", pid: null, socketReady: false };
153
+ }
154
+ async function startCmd(deps) {
155
+ const status = await probeStatus(deps);
156
+ if (status.state === "running") {
157
+ deps.log(`parasor-pty-host already running (pid ${status.pid ?? "?"}).`);
158
+ return 0;
159
+ }
160
+ /*
161
+ * symmetry with spawn-daemon.ts. The auto-spawn
162
+ * path falls back to `entry.ts` + `--import tsx` when the compiled
163
+ * `entry.js` is missing (dev/test runs without `pnpm build`). The
164
+ * operator-recovery `parasor pty-host start` CLI must do the same,
165
+ * otherwise users on the dev tree see "entry script not found" and
166
+ * have no way to start the daemon manually.
167
+ */
168
+ const tsFallback = deps.daemonEntryPath.endsWith(".js")
169
+ ? `${deps.daemonEntryPath.slice(0, -3)}.ts`
170
+ : null;
171
+ let nodeArgs;
172
+ if (existsSync(deps.daemonEntryPath)) {
173
+ nodeArgs = [deps.daemonEntryPath];
174
+ }
175
+ else if (tsFallback && existsSync(tsFallback)) {
176
+ nodeArgs = ["--import", "tsx", tsFallback];
177
+ }
178
+ else {
179
+ deps.error(`daemon entry script not found at ${deps.daemonEntryPath} ` +
180
+ `(also tried ${tsFallback ?? "(no .ts fallback)"}). ` +
181
+ "Rebuild @parasor/server before retrying.");
182
+ return 1;
183
+ }
184
+ let spawned;
185
+ try {
186
+ spawned = deps.spawnDetached(process.execPath, nodeArgs);
187
+ }
188
+ catch (err) {
189
+ deps.error(`spawn failed: ${err.message}`);
190
+ return 1;
191
+ }
192
+ // Poll until socket accepts connections or timeout.
193
+ const deadline = deps.now() + START_TIMEOUT_MS;
194
+ while (deps.now() < deadline) {
195
+ const probe = await deps.probeSocket(deps.paths.socketPath);
196
+ if (probe.socketReady) {
197
+ const pid = deps.readPidFile(deps.paths.pidFile);
198
+ deps.log(`parasor-pty-host started (pid ${pid ?? "?"}, socket ${deps.paths.socketPath}).`);
199
+ return 0;
200
+ }
201
+ await deps.sleep(POLL_INTERVAL_MS);
202
+ }
203
+ /*
204
+ * timeout means our spawned child either crashed
205
+ * during boot or is hung. The child still holds the lockfile and may
206
+ * still finish writing the marker; without an explicit reap the next
207
+ * `start` waits 60s for proper-lockfile's stale window. Send SIGTERM
208
+ * to the child we just spawned so the next attempt has a clean slate.
209
+ * Best-effort: child may already be dead, or pid may be unknown
210
+ * (test stubs don't always populate it).
211
+ */
212
+ if (typeof spawned.pid === "number") {
213
+ deps.killProcess(spawned.pid, "SIGTERM");
214
+ }
215
+ deps.error(`daemon did not become ready within ${START_TIMEOUT_MS}ms. ` +
216
+ `Check ${deps.paths.logFile} for errors.`);
217
+ return 1;
218
+ }
219
+ async function stopCmd(deps, force) {
220
+ const status = await probeStatus(deps);
221
+ if (status.state === "down") {
222
+ deps.log("parasor-pty-host is not running.");
223
+ return 0;
224
+ }
225
+ /*
226
+ * refuse to SIGTERM a pid we cannot prove is
227
+ * the daemon. The kernel recycles PIDs; user-written or stale
228
+ * pidfiles can name an unrelated process (a long-running editor,
229
+ * sleep, etc.). Without a live socket on the daemon path we have
230
+ * no proof of ownership, so default-stop bails out and points to
231
+ * doctor for diagnosis. `--force` overrides for the rare ops case
232
+ * where the daemon crashed mid-shutdown and pidfile must be cleared.
233
+ */
234
+ if (status.state === "stale-pidfile" && !force) {
235
+ deps.error(`parasor-pty-host: socket ${deps.paths.socketPath} is unreachable but ` +
236
+ `pidfile ${deps.paths.pidFile} names a live process (pid ${status.pid ?? "?"}). ` +
237
+ `Refusing to send SIGTERM without ownership proof -- the pid may have been ` +
238
+ `recycled by the kernel. Run \`parasor pty-host doctor\` to inspect, or ` +
239
+ `pass \`--force\` if you have already verified the pid is the daemon.`);
240
+ return 1;
241
+ }
242
+ const pid = status.pid;
243
+ if (pid === null) {
244
+ deps.error(`socket reachable but pidfile missing (${deps.paths.pidFile}). ` +
245
+ "Cannot send SIGTERM safely.");
246
+ return 1;
247
+ }
248
+ if (!deps.killProcess(pid, "SIGTERM")) {
249
+ deps.error(`SIGTERM to pid ${pid} failed.`);
250
+ return 1;
251
+ }
252
+ // Poll for exit.
253
+ const deadline = deps.now() + STOP_TIMEOUT_MS;
254
+ while (deps.now() < deadline) {
255
+ if (!deps.killProcess(pid, 0)) {
256
+ deps.log(`parasor-pty-host stopped (pid ${pid}).`);
257
+ return 0;
258
+ }
259
+ await deps.sleep(POLL_INTERVAL_MS);
260
+ }
261
+ deps.error(`pid ${pid} did not exit after ${STOP_TIMEOUT_MS}ms. ` +
262
+ "Escalate manually with kill -9.");
263
+ return 1;
264
+ }
265
+ async function statusCmd(deps) {
266
+ const status = await probeStatus(deps);
267
+ const lines = [];
268
+ lines.push(`socket: ${deps.paths.socketPath}`);
269
+ lines.push(`pidfile: ${deps.paths.pidFile}`);
270
+ lines.push(`logfile: ${deps.paths.logFile}`);
271
+ lines.push(`state: ${status.state}`);
272
+ if (status.pid !== null)
273
+ lines.push(`pid: ${status.pid}`);
274
+ lines.push(`socket-ready: ${status.socketReady}`);
275
+ deps.log(lines.join("\n"));
276
+ return status.state === "running" ? 0 : 1;
277
+ }
278
+ async function restartCmd(deps, force) {
279
+ // restart honours the same --force semantics as stop: the daemon may
280
+ // be in stale-pidfile state after a crash, and the user is signalling
281
+ // they have verified the pid.
282
+ const stopRc = await stopCmd(deps, force);
283
+ if (stopRc !== 0) {
284
+ deps.error("stop failed; aborting restart.");
285
+ return stopRc;
286
+ }
287
+ // Small drain to give the lockfile time to release. proper-lockfile
288
+ // releases synchronously on graceful exit, but kernel cleanup of the
289
+ // socket inode can lag a few ms.
290
+ await deps.sleep(POLL_INTERVAL_MS);
291
+ return startCmd(deps);
292
+ }
293
+ async function doctorCmd(deps) {
294
+ const status = await probeStatus(deps);
295
+ const lines = [];
296
+ lines.push("=== parasor pty-host doctor ===");
297
+ lines.push(`runtimeDir: ${deps.paths.runtimeDir}`);
298
+ lines.push(`socket: ${deps.paths.socketPath}`);
299
+ lines.push(`pidfile: ${deps.paths.pidFile}`);
300
+ lines.push(`lockfile: ${deps.paths.lockFile}`);
301
+ lines.push(`logfile: ${deps.paths.logFile}`);
302
+ lines.push(`appStateDir: ${deps.appStateDir}`);
303
+ lines.push("");
304
+ lines.push(`state: ${status.state}`);
305
+ lines.push(`pid: ${status.pid ?? "(none)"}`);
306
+ lines.push(`socket-ready: ${status.socketReady}`);
307
+ // Mode marker -- tells us whether the AppState belongs to in-process
308
+ // or daemon and surfaces stale markers from a prior crash.
309
+ const markerFile = markerFileFor(deps.appStateDir);
310
+ const marker = readMarker(markerFile);
311
+ if (marker) {
312
+ lines.push(`mode-marker: ${marker.mode} (pid=${marker.pid}, startedAt=${marker.startedAt})`);
313
+ }
314
+ else {
315
+ lines.push("mode-marker: (none)");
316
+ }
317
+ // SessionRecord table -- both daemon and in-process modes write to it
318
+ // when a daemonContext is present, so this is the single best
319
+ // user-facing snapshot of "what PTYs are tracked".
320
+ // ensure store.destroy() runs even when get() or
321
+ // the format loop throws -- without try/finally a failing read would
322
+ // leak the AppStateStore's internal flush timer until process exit.
323
+ let store = null;
324
+ try {
325
+ store = new AppStateStore({ dir: deps.appStateDir, debounceMs: 0 });
326
+ const recs = store.get().sessionRecords;
327
+ lines.push("");
328
+ lines.push(`sessionRecords (${recs.length}):`);
329
+ for (const r of recs) {
330
+ lines.push(` ${r.id} state=${r.state} pid=${r.pid ?? "-"} pgid=${r.pgid ?? "-"} ` +
331
+ `daemonPid=${r.daemonPid} startedAt=${r.startedAt}`);
332
+ }
333
+ }
334
+ catch (err) {
335
+ lines.push(`sessionRecords: (load failed: ${err.message})`);
336
+ }
337
+ finally {
338
+ store?.destroy();
339
+ }
340
+ // Tail of the log file.
341
+ lines.push("");
342
+ lines.push("=== last 50 log lines ===");
343
+ lines.push(deps.readLog(deps.paths.logFile, 50));
344
+ deps.log(lines.join("\n"));
345
+ return 0;
346
+ }
347
+ const HELP = `Usage: parasor pty-host <subcommand> [--force]
348
+
349
+ Subcommands:
350
+ start Start the parasor-pty-host daemon (idempotent).
351
+ stop Send SIGTERM to the running daemon and wait for exit.
352
+ Refuses to kill when the socket is unreachable (pid may be
353
+ recycled). Pass --force to override after running doctor.
354
+ status Print daemon state, pid, and socket path.
355
+ restart stop then start. --force is forwarded to stop.
356
+ doctor Diagnostic dump (paths, lockfile, sessionRecords, log tail).
357
+
358
+ Environment:
359
+ PARASOR_PTY_SOCK Override socket path (also relocates pid/lock/log).
360
+ XDG_RUNTIME_DIR Linux runtime dir; defaults to ~/.parasor/run otherwise.
361
+ PARASOR_CONFIG_DIR AppState dir (default ~/.config/parasor).`;
362
+ export async function cliPtyHost(args, partial) {
363
+ const deps = resolveDeps(partial);
364
+ const sub = args[0];
365
+ // Parse --force at the subcommand argument layer rather than the top
366
+ // level so `parasor pty-host stop --force` reads naturally and the
367
+ // flag never accidentally affects start/status/doctor.
368
+ const force = args.slice(1).includes("--force");
369
+ switch (sub) {
370
+ case "start":
371
+ return startCmd(deps);
372
+ case "stop":
373
+ return stopCmd(deps, force);
374
+ case "status":
375
+ return statusCmd(deps);
376
+ case "restart":
377
+ return restartCmd(deps, force);
378
+ case "doctor":
379
+ return doctorCmd(deps);
380
+ case "help":
381
+ case "--help":
382
+ case "-h":
383
+ deps.log(HELP);
384
+ return 0;
385
+ default:
386
+ deps.error(`unknown subcommand: ${sub ?? "(none)"}\n\n${HELP}`);
387
+ return 1;
388
+ }
389
+ }
390
+ //# sourceMappingURL=pty-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pty-host.js","sourceRoot":"","sources":["../../src/cli/pty-host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAEL,kBAAkB,GACnB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAqCtD,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAC/B,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,SAAS,gBAAgB;IACvB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;IAC/C,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,OAAO,CAAC;IAClD,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,WAAW,CAAC,GAAW,EAAE,MAA0B;IAC1D,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAQ,GAA6B,CAAC,IAAI,KAAK,OAAO,CAAC;IACzD,CAAC;AACH,CAAC;AAED,SAAS,oBAAoB,CAC3B,GAAW,EACX,IAAc;IAEd,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE;QACjC,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;KAChB,CAAC,CAAC;IACH,iDAAiD;IACjD,gEAAgE;IAChE,iEAAiE;IACjE,qEAAqE;IACrE,mEAAmE;IACnE,kBAAkB;IAClB,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;QACvB,kEAAkE;IACpE,CAAC,CAAC,CAAC;IACH,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;AAC5B,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,OAAO,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAC5B,CAAC,GAAG,EAAE,EAAE,CACN,IAAI,OAAO,CAAc,CAAC,OAAO,EAAE,EAAE;QACnC,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,MAAM,GAAG,CAAC,OAAsC,EAAQ,EAAE;YAC9D,CAAC,CAAC,kBAAkB,EAAE,CAAC;YACvB,IAAI,CAAC;gBACH,CAAC,CAAC,OAAO,EAAE,CAAC;YACd,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;YACD,OAAO,CAAC;gBACN,WAAW,EAAE,OAAO,KAAK,OAAO;gBAChC,4DAA4D;gBAC5D,0DAA0D;gBAC1D,uDAAuD;gBACvD,WAAW,EAAE,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,SAAS;aAC1D,CAAC,CAAC;QACL,CAAC,CAAC;QACF,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7C,CAAC,CAAC,CACL,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAY;IACtC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,KAAa;IACjD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,eAAe,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,oBAAqB,GAAa,CAAC,OAAO,GAAG,CAAC;IACvD,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,EAAU;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,gBAAgB;IACvB,6DAA6D;IAC7D,oEAAoE;IACpE,uDAAuD;IACvD,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5C,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,WAAW,CAAC,OAA8B;IACjD,MAAM,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,gBAAgB,EAAE,CAAC;IAC/D,OAAO;QACL,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,kBAAkB,EAAE;QAC7C,WAAW;QACX,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG;QAC7B,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,WAAW;QAChD,aAAa,EAAE,OAAO,EAAE,aAAa,IAAI,oBAAoB;QAC7D,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,kBAAkB;QACvD,WAAW,EAAE,OAAO,EAAE,WAAW,IAAI,kBAAkB;QACvD,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,cAAc;QAC3C,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,YAAY;QACrC,GAAG,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpD,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1D,eAAe,EAAE,OAAO,EAAE,eAAe,IAAI,gBAAgB,EAAE;KAChE,CAAC;AACJ,CAAC;AAQD,KAAK,UAAU,WAAW,CAAC,IAAiB;IAC1C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD;;;;;;;;OAQG;IACH,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;IACnE,CAAC;IACD,IAAI,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;QAC7C,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAC7D,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AAC1D,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,IAAiB;IACvC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,yCAAyC,MAAM,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;QACzE,OAAO,CAAC,CAAC;IACX,CAAC;IACD;;;;;;;OAOG;IACH,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC;QACrD,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK;QAC3C,CAAC,CAAC,IAAI,CAAC;IACT,IAAI,QAAkB,CAAC;IACvB,IAAI,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;QACrC,QAAQ,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IACpC,CAAC;SAAM,IAAI,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAChD,QAAQ,GAAG,CAAC,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,KAAK,CACR,oCAAoC,IAAI,CAAC,eAAe,GAAG;YACzD,eAAe,UAAU,IAAI,mBAAmB,KAAK;YACrD,0CAA0C,CAC7C,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,OAA4B,CAAC;IACjC,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,KAAK,CAAC,iBAAkB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,CAAC;IACX,CAAC;IACD,oDAAoD;IACpD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,gBAAgB,CAAC;IAC/C,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5D,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjD,IAAI,CAAC,GAAG,CACN,iCAAiC,GAAG,IAAI,GAAG,YAAY,IAAI,CAAC,KAAK,CAAC,UAAU,IAAI,CACjF,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACrC,CAAC;IACD;;;;;;;;OAQG;IACH,IAAI,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAC3C,CAAC;IACD,IAAI,CAAC,KAAK,CACR,sCAAsC,gBAAgB,MAAM;QAC1D,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,cAAc,CAC5C,CAAC;IACF,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAiB,EAAE,KAAc;IACtD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QAC7C,OAAO,CAAC,CAAC;IACX,CAAC;IACD;;;;;;;;OAQG;IACH,IAAI,MAAM,CAAC,KAAK,KAAK,eAAe,IAAI,CAAC,KAAK,EAAE,CAAC;QAC/C,IAAI,CAAC,KAAK,CACR,4BAA4B,IAAI,CAAC,KAAK,CAAC,UAAU,sBAAsB;YACrE,WAAW,IAAI,CAAC,KAAK,CAAC,OAAO,8BAA8B,MAAM,CAAC,GAAG,IAAI,GAAG,KAAK;YACjF,4EAA4E;YAC5E,yEAAyE;YACzE,sEAAsE,CACzE,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IACvB,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,IAAI,CAAC,KAAK,CACR,yCAAyC,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK;YAC9D,6BAA6B,CAChC,CAAC;QACF,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,SAAS,CAAC,EAAE,CAAC;QACtC,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,UAAU,CAAC,CAAC;QAC5C,OAAO,CAAC,CAAC;IACX,CAAC;IACD,iBAAiB;IACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC;IAC9C,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,GAAG,CAAC,iCAAiC,GAAG,IAAI,CAAC,CAAC;YACnD,OAAO,CAAC,CAAC;QACX,CAAC;QACD,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACrC,CAAC;IACD,IAAI,CAAC,KAAK,CACR,OAAO,GAAG,uBAAuB,eAAe,MAAM;QACpD,iCAAiC,CACpC,CAAC;IACF,OAAO,CAAC,CAAC;AACX,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAiB;IACxC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACrC,IAAI,MAAM,CAAC,GAAG,KAAK,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAiB,EAAE,KAAc;IACzD,qEAAqE;IACrE,sEAAsE;IACtE,8BAA8B;IAC9B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC1C,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;QACjB,IAAI,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;QAC7C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,oEAAoE;IACpE,qEAAqE;IACrE,iCAAiC;IACjC,MAAM,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IACnC,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAiB;IACxC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;IACvC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC9C,KAAK,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IACnD,KAAK,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACrC,KAAK,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,GAAG,IAAI,QAAQ,EAAE,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAClD,qEAAqE;IACrE,2DAA2D;IAC3D,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;IACtC,IAAI,MAAM,EAAE,CAAC;QACX,KAAK,CAAC,IAAI,CACR,gBAAgB,MAAM,CAAC,IAAI,SAAS,MAAM,CAAC,GAAG,eAAe,MAAM,CAAC,SAAS,GAAG,CACjF,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACpC,CAAC;IACD,sEAAsE;IACtE,8DAA8D;IAC9D,mDAAmD;IACnD,iDAAiD;IACjD,qEAAqE;IACrE,oEAAoE;IACpE,IAAI,KAAK,GAAyB,IAAI,CAAC;IACvC,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,aAAa,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QACpE,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,mBAAmB,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,IAAI,IAAI,GAAG,GAAG;gBACrE,aAAa,CAAC,CAAC,SAAS,cAAc,CAAC,CAAC,SAAS,EAAE,CACtD,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,iCAAkC,GAAa,CAAC,OAAO,GAAG,CAAC,CAAC;IACzE,CAAC;YAAS,CAAC;QACT,KAAK,EAAE,OAAO,EAAE,CAAC;IACnB,CAAC;IACD,wBAAwB;IACxB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACjD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3B,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,IAAI,GAAG;;;;;;;;;;;;;;iEAcoD,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAc,EACd,OAA8B;IAE9B,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,qEAAqE;IACrE,mEAAmE;IACnE,uDAAuD;IACvD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAChD,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO;YACV,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,KAAK,MAAM;YACT,OAAO,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9B,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;QACzB,KAAK,SAAS;YACZ,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACjC,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;QACzB,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACf,OAAO,CAAC,CAAC;QACX;YACE,IAAI,CAAC,KAAK,CAAC,uBAAuB,GAAG,IAAI,QAAQ,OAAO,IAAI,EAAE,CAAC,CAAC;YAChE,OAAO,CAAC,CAAC;IACb,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function cliQr(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=qr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qr.d.ts","sourceRoot":"","sources":["../../src/cli/qr.ts"],"names":[],"mappings":"AAkBA,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CzD"}
@@ -0,0 +1,70 @@
1
+ import { createConnection } from "node:net";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+ import { buildPairingUrl, buildQrSection } from "../network/qr.js";
5
+ export async function cliQr(args) {
6
+ let iface;
7
+ for (const arg of args) {
8
+ if (arg.startsWith("--iface="))
9
+ iface = arg.slice(8);
10
+ else if (arg === "-h" || arg === "--help") {
11
+ console.log("Usage: parasor qr [--iface=<iface>]\n" +
12
+ " Displays a QR code for a running parasor server. Defaults to Tailscale, falls back to LAN.");
13
+ return;
14
+ }
15
+ }
16
+ const socketPath = process.env.PARASOR_SOCKET ??
17
+ join(process.env.PARASOR_CONFIG_DIR ?? join(homedir(), ".config", "parasor"), "parasor.sock");
18
+ const response = await sendRequest(socketPath, {
19
+ cmd: "qr",
20
+ args: { iface: iface ?? "" },
21
+ });
22
+ if (!response.ok) {
23
+ console.error(`parasor qr failed: ${response.error ?? "unknown error"}`);
24
+ process.exit(1);
25
+ }
26
+ const lines = buildQrSection({
27
+ endpoints: response.endpoints,
28
+ port: response.port,
29
+ authMode: response.authMode,
30
+ token: response.token,
31
+ makeAccessUrl: response.authMode === "token" && response.tokenKind === "pairing"
32
+ ? (endpoint) => buildPairingUrl(endpoint.address, response.port, response.token)
33
+ : undefined,
34
+ iface: iface ?? response.iface,
35
+ clickable: process.stdout.isTTY === true,
36
+ });
37
+ for (const line of lines)
38
+ console.log(line);
39
+ }
40
+ function sendRequest(socketPath, request) {
41
+ return new Promise((resolve, reject) => {
42
+ const client = createConnection(socketPath, () => {
43
+ client.write(`${JSON.stringify(request)}\n`);
44
+ });
45
+ let data = "";
46
+ client.on("data", (chunk) => {
47
+ data += chunk;
48
+ });
49
+ client.on("end", () => {
50
+ try {
51
+ resolve(JSON.parse(data.trim()));
52
+ }
53
+ catch (err) {
54
+ reject(err);
55
+ }
56
+ });
57
+ client.on("error", (err) => {
58
+ if (err.code === "ENOENT" || err.code === "ECONNREFUSED") {
59
+ reject(new Error(`No parasor server reachable at ${socketPath}. Start it with \`parasor\` first.`));
60
+ }
61
+ else {
62
+ reject(err);
63
+ }
64
+ });
65
+ client.setTimeout(2000, () => {
66
+ client.destroy(new Error("timeout"));
67
+ });
68
+ });
69
+ }
70
+ //# sourceMappingURL=qr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qr.js","sourceRoot":"","sources":["../../src/cli/qr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { type ProbeOptions, type ProbeResult } from "./probe-daemon-version.js";
2
+ export interface ConfirmRestartDeps {
3
+ isTty: boolean;
4
+ log: (message: string) => void;
5
+ /** Reads one line from stdin. Resolves to null on EOF. */
6
+ readLine: () => Promise<string | null>;
7
+ probe: (opts: ProbeOptions) => Promise<ProbeResult>;
8
+ resolvePaths: () => {
9
+ socketPath: string;
10
+ };
11
+ }
12
+ export interface ConfirmRestartOptions {
13
+ autoYes: boolean;
14
+ /** Override for tests. */
15
+ deps?: Partial<ConfirmRestartDeps>;
16
+ }
17
+ export interface ConfirmRestartResult {
18
+ proceed: boolean;
19
+ /** Human-readable explanation, surfaced to the caller's log on abort. */
20
+ reason: string;
21
+ }
22
+ export declare function confirmRestartIfMismatch(options: ConfirmRestartOptions): Promise<ConfirmRestartResult>;
23
+ /**
24
+ * Pull `--yes` / `-y` from an args array and return both the flag and the
25
+ * filtered remainder. Modeled on the existing `--all` filtering style in
26
+ * `cliService` so the help text stays consistent.
27
+ */
28
+ export declare function extractAutoYesFlag(args: string[]): {
29
+ autoYes: boolean;
30
+ rest: string[];
31
+ };
32
+ export declare function readLineFromInput(input: NodeJS.ReadableStream): Promise<string | null>;
33
+ //# sourceMappingURL=restart-confirm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart-confirm.d.ts","sourceRoot":"","sources":["../../src/cli/restart-confirm.ts"],"names":[],"mappings":"AAeA,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,WAAW,EAEjB,MAAM,2BAA2B,CAAC;AAEnC,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,OAAO,CAAC;IACf,GAAG,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,0DAA0D;IAC1D,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACvC,KAAK,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;IACpD,YAAY,EAAE,MAAM;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5C;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,0BAA0B;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,yEAAyE;IACzE,MAAM,EAAE,MAAM,CAAC;CAChB;AAaD,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,oBAAoB,CAAC,CA+D/B;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAIA;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,CAAC,cAAc,GAC3B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAexB"}
@@ -0,0 +1,107 @@
1
+ /*
2
+ * Restart confirmation -- gate restart commands behind a confirmation when the
3
+ * running daemon's PROTOCOL_VERSION is incompatible with this binary's.
4
+ *
5
+ * The mismatch path inside `pty/host.ts` SIGKILLs the daemon and every
6
+ * PTY child to recover. This module probes the daemon BEFORE we kick
7
+ * the supervisor, and prompts the user to acknowledge session loss.
8
+ *
9
+ * Non-interactive callers (launchd auto-respawn, scripted upgrades,
10
+ * CI) cannot answer prompts. They must opt in via `--yes`/`-y`,
11
+ * otherwise the restart aborts with a hint instead of hanging.
12
+ */
13
+ import { createInterface } from "node:readline";
14
+ import { resolveDaemonPaths } from "../pty/host-daemon/paths.js";
15
+ import { probeDaemonProtocolVersion, } from "./probe-daemon-version.js";
16
+ const DEFAULT_DEPS = {
17
+ isTty: Boolean(process.stdin.isTTY),
18
+ log: (msg) => process.stderr.write(`${msg}\n`),
19
+ readLine: () => readLineFromInput(process.stdin),
20
+ probe: (opts) => probeDaemonProtocolVersion(opts),
21
+ resolvePaths: () => {
22
+ const paths = resolveDaemonPaths();
23
+ return { socketPath: paths.socketPath };
24
+ },
25
+ };
26
+ export async function confirmRestartIfMismatch(options) {
27
+ const deps = { ...DEFAULT_DEPS, ...(options.deps ?? {}) };
28
+ const { socketPath } = deps.resolvePaths();
29
+ const probeResult = await deps.probe({ socketPath });
30
+ if (probeResult.status === "no-daemon") {
31
+ return { proceed: true, reason: "no daemon detected" };
32
+ }
33
+ if (probeResult.status === "compatible") {
34
+ return {
35
+ proceed: true,
36
+ reason: `daemon ${probeResult.daemonVersion} compatible with server ${probeResult.serverVersion}`,
37
+ };
38
+ }
39
+ if (probeResult.status === "unknown") {
40
+ /*
41
+ * Probe couldn't decide. Don't block the restart -- we may be
42
+ * running against a future daemon version with a different reply
43
+ * shape, or a transient IO error. Surface the reason so an
44
+ * operator can investigate, but defer to the existing in-server
45
+ * recovery path.
46
+ */
47
+ deps.log(`parasor: daemon version probe inconclusive (${probeResult.reason}); proceeding without confirmation.`);
48
+ return { proceed: true, reason: `probe unknown: ${probeResult.reason}` };
49
+ }
50
+ // probeResult.status === "mismatch"
51
+ const banner = `parasor: this binary speaks PTY host protocol ${probeResult.serverVersion}, ` +
52
+ `but the running daemon speaks ${probeResult.daemonVersion}. ` +
53
+ `Continuing will terminate the daemon and every active PTY session.`;
54
+ if (options.autoYes) {
55
+ deps.log(`${banner} (--yes supplied, proceeding)`);
56
+ return {
57
+ proceed: true,
58
+ reason: `mismatch acknowledged via --yes (server=${probeResult.serverVersion} daemon=${probeResult.daemonVersion})`,
59
+ };
60
+ }
61
+ if (!deps.isTty) {
62
+ deps.log(banner);
63
+ deps.log("parasor: stdin is not a TTY; pass --yes to acknowledge session loss in non-interactive contexts.");
64
+ return {
65
+ proceed: false,
66
+ reason: "non-interactive without --yes",
67
+ };
68
+ }
69
+ deps.log(banner);
70
+ deps.log("parasor: continue and lose all active sessions? [y/N] ");
71
+ const answer = (await deps.readLine())?.trim().toLowerCase() ?? "";
72
+ if (answer === "y" || answer === "yes") {
73
+ return {
74
+ proceed: true,
75
+ reason: `user confirmed mismatch (server=${probeResult.serverVersion} daemon=${probeResult.daemonVersion})`,
76
+ };
77
+ }
78
+ return { proceed: false, reason: "user declined" };
79
+ }
80
+ /**
81
+ * Pull `--yes` / `-y` from an args array and return both the flag and the
82
+ * filtered remainder. Modeled on the existing `--all` filtering style in
83
+ * `cliService` so the help text stays consistent.
84
+ */
85
+ export function extractAutoYesFlag(args) {
86
+ const autoYes = args.includes("--yes") || args.includes("-y");
87
+ const rest = args.filter((a) => a !== "--yes" && a !== "-y");
88
+ return { autoYes, rest };
89
+ }
90
+ export function readLineFromInput(input) {
91
+ return new Promise((resolve) => {
92
+ let settled = false;
93
+ const settle = (value) => {
94
+ if (settled)
95
+ return;
96
+ settled = true;
97
+ resolve(value);
98
+ };
99
+ const rl = createInterface({ input });
100
+ rl.once("line", (line) => {
101
+ settle(line);
102
+ rl.close();
103
+ });
104
+ rl.once("close", () => settle(null));
105
+ });
106
+ }
107
+ //# sourceMappingURL=restart-confirm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"restart-confirm.js","sourceRoot":"","sources":["../../src/cli/restart-confirm.ts"],"names":[],"mappings":"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"}