@with-logic/elwood 0.2.1 → 0.2.2

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 (871) hide show
  1. package/CHANGELOG.md +565 -1
  2. package/CONTRIBUTING.md +3 -0
  3. package/README.md +4 -2
  4. package/dist/bridge/socket-release.d.ts +15 -0
  5. package/dist/bridge/socket-release.d.ts.map +1 -0
  6. package/dist/bridge/socket-release.js +22 -0
  7. package/dist/bridge/socket-release.js.map +1 -0
  8. package/dist/claude/composer/border.d.ts +12 -0
  9. package/dist/claude/composer/border.d.ts.map +1 -0
  10. package/dist/claude/composer/border.js +12 -0
  11. package/dist/claude/composer/border.js.map +1 -0
  12. package/dist/claude/composer/empty-input.d.ts +15 -0
  13. package/dist/claude/composer/empty-input.d.ts.map +1 -1
  14. package/dist/claude/composer/empty-input.js +30 -11
  15. package/dist/claude/composer/empty-input.js.map +1 -1
  16. package/dist/claude/composer/footer.d.ts +26 -2
  17. package/dist/claude/composer/footer.d.ts.map +1 -1
  18. package/dist/claude/composer/footer.js +29 -2
  19. package/dist/claude/composer/footer.js.map +1 -1
  20. package/dist/claude/composer/idle.d.ts +14 -0
  21. package/dist/claude/composer/idle.d.ts.map +1 -0
  22. package/dist/claude/composer/idle.js +17 -0
  23. package/dist/claude/composer/idle.js.map +1 -0
  24. package/dist/claude/composer/last.d.ts +2 -0
  25. package/dist/claude/composer/last.d.ts.map +1 -0
  26. package/dist/claude/composer/last.js +15 -0
  27. package/dist/claude/composer/last.js.map +1 -0
  28. package/dist/claude/composer/staged-input.d.ts.map +1 -1
  29. package/dist/claude/composer/staged-input.js +2 -1
  30. package/dist/claude/composer/staged-input.js.map +1 -1
  31. package/dist/claude/hooks/stop-failure.d.ts +15 -2
  32. package/dist/claude/hooks/stop-failure.d.ts.map +1 -1
  33. package/dist/claude/hooks/stop-failure.js +32 -9
  34. package/dist/claude/hooks/stop-failure.js.map +1 -1
  35. package/dist/claude/login/stages.d.ts.map +1 -1
  36. package/dist/claude/login/stages.js +2 -2
  37. package/dist/claude/login/stages.js.map +1 -1
  38. package/dist/claude/model-picker.d.ts +1 -1
  39. package/dist/claude/model-picker.d.ts.map +1 -1
  40. package/dist/claude/model-picker.js +27 -10
  41. package/dist/claude/model-picker.js.map +1 -1
  42. package/dist/claude/preflight.d.ts +1 -1
  43. package/dist/claude/preflight.d.ts.map +1 -1
  44. package/dist/claude/preflight.js +18 -12
  45. package/dist/claude/preflight.js.map +1 -1
  46. package/dist/claude/questions/navigation.d.ts.map +1 -1
  47. package/dist/claude/questions/navigation.js +1 -2
  48. package/dist/claude/questions/navigation.js.map +1 -1
  49. package/dist/claude/questions/screen.d.ts.map +1 -1
  50. package/dist/claude/questions/screen.js +10 -2
  51. package/dist/claude/questions/screen.js.map +1 -1
  52. package/dist/claude/screen-table.d.ts +8 -5
  53. package/dist/claude/screen-table.d.ts.map +1 -1
  54. package/dist/claude/screen-table.js +20 -12
  55. package/dist/claude/screen-table.js.map +1 -1
  56. package/dist/claude/session/bridge.d.ts +2 -1
  57. package/dist/claude/session/bridge.d.ts.map +1 -1
  58. package/dist/claude/session/bridge.js +3 -1
  59. package/dist/claude/session/bridge.js.map +1 -1
  60. package/dist/claude/session/build.d.ts.map +1 -1
  61. package/dist/claude/session/build.js +13 -11
  62. package/dist/claude/session/build.js.map +1 -1
  63. package/dist/claude/session/cleanup.d.ts +18 -0
  64. package/dist/claude/session/cleanup.d.ts.map +1 -0
  65. package/dist/claude/session/cleanup.js +10 -0
  66. package/dist/claude/session/cleanup.js.map +1 -0
  67. package/dist/claude/session/index.d.ts.map +1 -1
  68. package/dist/claude/session/index.js +27 -13
  69. package/dist/claude/session/index.js.map +1 -1
  70. package/dist/claude/session/instance.d.ts +7 -8
  71. package/dist/claude/session/instance.d.ts.map +1 -1
  72. package/dist/claude/session/instance.js +9 -13
  73. package/dist/claude/session/instance.js.map +1 -1
  74. package/dist/claude/session/resume.d.ts.map +1 -1
  75. package/dist/claude/session/resume.js +14 -5
  76. package/dist/claude/session/resume.js.map +1 -1
  77. package/dist/claude/session/transcript.js +2 -2
  78. package/dist/claude/session/transcript.js.map +1 -1
  79. package/dist/claude/simple.d.ts +1 -1
  80. package/dist/claude/simple.d.ts.map +1 -1
  81. package/dist/claude/simple.js +3 -3
  82. package/dist/claude/simple.js.map +1 -1
  83. package/dist/claude/startup-prompts.d.ts +2 -0
  84. package/dist/claude/startup-prompts.d.ts.map +1 -1
  85. package/dist/claude/startup-prompts.js +5 -1
  86. package/dist/claude/startup-prompts.js.map +1 -1
  87. package/dist/claude/transcript/cursor-io.d.ts +1 -1
  88. package/dist/claude/transcript/cursor-io.d.ts.map +1 -1
  89. package/dist/claude/transcript/cursor-io.js +1 -1
  90. package/dist/claude/transcript/cursor-io.js.map +1 -1
  91. package/dist/claude/transcript/cursor.d.ts +5 -3
  92. package/dist/claude/transcript/cursor.d.ts.map +1 -1
  93. package/dist/claude/transcript/cursor.js +18 -8
  94. package/dist/claude/transcript/cursor.js.map +1 -1
  95. package/dist/claude/transcript/drain-context.d.ts +4 -3
  96. package/dist/claude/transcript/drain-context.d.ts.map +1 -1
  97. package/dist/claude/transcript/drain-context.js.map +1 -1
  98. package/dist/claude/transcript/emit.d.ts +2 -1
  99. package/dist/claude/transcript/emit.d.ts.map +1 -1
  100. package/dist/claude/transcript/emit.js +1 -0
  101. package/dist/claude/transcript/emit.js.map +1 -1
  102. package/dist/claude/transcript/index.d.ts.map +1 -1
  103. package/dist/claude/transcript/index.js +2 -2
  104. package/dist/claude/transcript/index.js.map +1 -1
  105. package/dist/claude/transcript/warnings.d.ts +2 -1
  106. package/dist/claude/transcript/warnings.d.ts.map +1 -1
  107. package/dist/claude/transcript/warnings.js +3 -2
  108. package/dist/claude/transcript/warnings.js.map +1 -1
  109. package/dist/cli/config/effective.d.ts +2 -2
  110. package/dist/cli/config/effective.d.ts.map +1 -1
  111. package/dist/cli/config/effective.js +0 -2
  112. package/dist/cli/config/effective.js.map +1 -1
  113. package/dist/cli/interactive/spawn.d.ts +0 -2
  114. package/dist/cli/interactive/spawn.d.ts.map +1 -1
  115. package/dist/cli/interactive/spawn.js +27 -24
  116. package/dist/cli/interactive/spawn.js.map +1 -1
  117. package/dist/cli/lifecycle/index.d.ts.map +1 -1
  118. package/dist/cli/lifecycle/index.js +5 -3
  119. package/dist/cli/lifecycle/index.js.map +1 -1
  120. package/dist/cli/main-failure.d.ts.map +1 -1
  121. package/dist/cli/main-failure.js +5 -2
  122. package/dist/cli/main-failure.js.map +1 -1
  123. package/dist/cli/models/combined.d.ts.map +1 -1
  124. package/dist/cli/models/combined.js +3 -2
  125. package/dist/cli/models/combined.js.map +1 -1
  126. package/dist/cli/models/render.d.ts.map +1 -1
  127. package/dist/cli/models/render.js +2 -1
  128. package/dist/cli/models/render.js.map +1 -1
  129. package/dist/cli/output/cleanup-error.d.ts +22 -0
  130. package/dist/cli/output/cleanup-error.d.ts.map +1 -0
  131. package/dist/cli/output/cleanup-error.js +67 -0
  132. package/dist/cli/output/cleanup-error.js.map +1 -0
  133. package/dist/cli/output/types.d.ts +6 -2
  134. package/dist/cli/output/types.d.ts.map +1 -1
  135. package/dist/cli/request/agent-detect.d.ts +6 -2
  136. package/dist/cli/request/agent-detect.d.ts.map +1 -1
  137. package/dist/cli/request/agent-detect.js +14 -6
  138. package/dist/cli/request/agent-detect.js.map +1 -1
  139. package/dist/cli/request/finalize.d.ts +1 -1
  140. package/dist/cli/request/finalize.d.ts.map +1 -1
  141. package/dist/cli/request/finalize.js +4 -25
  142. package/dist/cli/request/finalize.js.map +1 -1
  143. package/dist/cli/request/index.d.ts.map +1 -1
  144. package/dist/cli/request/index.js +11 -5
  145. package/dist/cli/request/index.js.map +1 -1
  146. package/dist/cli/request/path-replacement.d.ts +27 -0
  147. package/dist/cli/request/path-replacement.d.ts.map +1 -0
  148. package/dist/cli/request/path-replacement.js +79 -0
  149. package/dist/cli/request/path-replacement.js.map +1 -0
  150. package/dist/cli/request/workspace.d.ts +8 -0
  151. package/dist/cli/request/workspace.d.ts.map +1 -0
  152. package/dist/cli/request/workspace.js +50 -0
  153. package/dist/cli/request/workspace.js.map +1 -0
  154. package/dist/cli/run/output.d.ts.map +1 -1
  155. package/dist/cli/run/output.js +2 -1
  156. package/dist/cli/run/output.js.map +1 -1
  157. package/dist/cli/run/subscribe.d.ts.map +1 -1
  158. package/dist/cli/run/subscribe.js +1 -1
  159. package/dist/cli/run/subscribe.js.map +1 -1
  160. package/dist/cli/session/index.d.ts +4 -4
  161. package/dist/cli/session/index.d.ts.map +1 -1
  162. package/dist/cli/session/index.js +5 -5
  163. package/dist/cli/session/index.js.map +1 -1
  164. package/dist/cli/session/launch.d.ts +2 -2
  165. package/dist/cli/session/launch.d.ts.map +1 -1
  166. package/dist/cli/session/launch.js +12 -3
  167. package/dist/cli/session/launch.js.map +1 -1
  168. package/dist/cli/session/turn-readers.d.ts +14 -0
  169. package/dist/cli/session/turn-readers.d.ts.map +1 -0
  170. package/dist/cli/session/turn-readers.js +13 -0
  171. package/dist/cli/session/turn-readers.js.map +1 -0
  172. package/dist/codex/config/default-model.d.ts +24 -0
  173. package/dist/codex/config/default-model.d.ts.map +1 -0
  174. package/dist/codex/config/default-model.js +133 -0
  175. package/dist/codex/config/default-model.js.map +1 -0
  176. package/dist/codex/config/home.d.ts +35 -0
  177. package/dist/codex/config/home.d.ts.map +1 -0
  178. package/dist/codex/config/home.js +122 -0
  179. package/dist/codex/config/home.js.map +1 -0
  180. package/dist/codex/config/lock.d.ts +17 -11
  181. package/dist/codex/config/lock.d.ts.map +1 -1
  182. package/dist/codex/config/lock.js +102 -11
  183. package/dist/codex/config/lock.js.map +1 -1
  184. package/dist/codex/config/read.d.ts +16 -0
  185. package/dist/codex/config/read.d.ts.map +1 -0
  186. package/dist/codex/config/read.js +75 -0
  187. package/dist/codex/config/read.js.map +1 -0
  188. package/dist/codex/config/restore.d.ts +17 -7
  189. package/dist/codex/config/restore.d.ts.map +1 -1
  190. package/dist/codex/config/restore.js +33 -20
  191. package/dist/codex/config/restore.js.map +1 -1
  192. package/dist/codex/config/transaction.d.ts +6 -4
  193. package/dist/codex/config/transaction.d.ts.map +1 -1
  194. package/dist/codex/config/transaction.js +4 -3
  195. package/dist/codex/config/transaction.js.map +1 -1
  196. package/dist/codex/images/clipboard-copies.d.ts +39 -0
  197. package/dist/codex/images/clipboard-copies.d.ts.map +1 -0
  198. package/dist/codex/images/clipboard-copies.js +91 -0
  199. package/dist/codex/images/clipboard-copies.js.map +1 -0
  200. package/dist/codex/model-picker.d.ts +1 -1
  201. package/dist/codex/model-picker.d.ts.map +1 -1
  202. package/dist/codex/model-picker.js +16 -6
  203. package/dist/codex/model-picker.js.map +1 -1
  204. package/dist/codex/preflight.d.ts +2 -2
  205. package/dist/codex/preflight.d.ts.map +1 -1
  206. package/dist/codex/preflight.js +28 -21
  207. package/dist/codex/preflight.js.map +1 -1
  208. package/dist/codex/pty.d.ts +25 -3
  209. package/dist/codex/pty.d.ts.map +1 -1
  210. package/dist/codex/pty.js +53 -7
  211. package/dist/codex/pty.js.map +1 -1
  212. package/dist/codex/questions/candidates.d.ts.map +1 -1
  213. package/dist/codex/questions/candidates.js +4 -5
  214. package/dist/codex/questions/candidates.js.map +1 -1
  215. package/dist/codex/questions/driver.js +2 -2
  216. package/dist/codex/questions/driver.js.map +1 -1
  217. package/dist/codex/questions/records.d.ts +1 -1
  218. package/dist/codex/questions/records.d.ts.map +1 -1
  219. package/dist/codex/questions/records.js +1 -3
  220. package/dist/codex/questions/records.js.map +1 -1
  221. package/dist/codex/screen/clearance.d.ts +6 -0
  222. package/dist/codex/screen/clearance.d.ts.map +1 -1
  223. package/dist/codex/screen/clearance.js +10 -0
  224. package/dist/codex/screen/clearance.js.map +1 -1
  225. package/dist/codex/screen-table.d.ts.map +1 -1
  226. package/dist/codex/screen-table.js +6 -2
  227. package/dist/codex/screen-table.js.map +1 -1
  228. package/dist/codex/session/bridge.d.ts +1 -0
  229. package/dist/codex/session/bridge.d.ts.map +1 -1
  230. package/dist/codex/session/bridge.js +3 -1
  231. package/dist/codex/session/bridge.js.map +1 -1
  232. package/dist/codex/session/build.d.ts.map +1 -1
  233. package/dist/codex/session/build.js +14 -12
  234. package/dist/codex/session/build.js.map +1 -1
  235. package/dist/codex/session/cleanup.d.ts +2 -2
  236. package/dist/codex/session/cleanup.d.ts.map +1 -1
  237. package/dist/codex/session/cleanup.js +8 -11
  238. package/dist/codex/session/cleanup.js.map +1 -1
  239. package/dist/codex/session/config-switch.d.ts +20 -0
  240. package/dist/codex/session/config-switch.d.ts.map +1 -0
  241. package/dist/codex/session/config-switch.js +42 -0
  242. package/dist/codex/session/config-switch.js.map +1 -0
  243. package/dist/codex/session/hooks.d.ts.map +1 -1
  244. package/dist/codex/session/hooks.js +7 -0
  245. package/dist/codex/session/hooks.js.map +1 -1
  246. package/dist/codex/session/index.d.ts.map +1 -1
  247. package/dist/codex/session/index.js +34 -16
  248. package/dist/codex/session/index.js.map +1 -1
  249. package/dist/codex/session/instance.d.ts +10 -12
  250. package/dist/codex/session/instance.d.ts.map +1 -1
  251. package/dist/codex/session/instance.js +42 -37
  252. package/dist/codex/session/instance.js.map +1 -1
  253. package/dist/codex/session/readiness.d.ts +11 -0
  254. package/dist/codex/session/readiness.d.ts.map +1 -0
  255. package/dist/codex/session/readiness.js +22 -0
  256. package/dist/codex/session/readiness.js.map +1 -0
  257. package/dist/codex/session/resume.d.ts.map +1 -1
  258. package/dist/codex/session/resume.js +9 -4
  259. package/dist/codex/session/resume.js.map +1 -1
  260. package/dist/codex/session/transcript.d.ts.map +1 -1
  261. package/dist/codex/session/transcript.js +12 -1
  262. package/dist/codex/session/transcript.js.map +1 -1
  263. package/dist/codex/session/turn-commit.d.ts +58 -0
  264. package/dist/codex/session/turn-commit.d.ts.map +1 -0
  265. package/dist/codex/session/turn-commit.js +97 -0
  266. package/dist/codex/session/turn-commit.js.map +1 -0
  267. package/dist/codex/session/warnings.d.ts +13 -6
  268. package/dist/codex/session/warnings.d.ts.map +1 -1
  269. package/dist/codex/session/warnings.js +36 -9
  270. package/dist/codex/session/warnings.js.map +1 -1
  271. package/dist/codex/startup-prompts.d.ts +3 -0
  272. package/dist/codex/startup-prompts.d.ts.map +1 -1
  273. package/dist/codex/startup-prompts.js +20 -13
  274. package/dist/codex/startup-prompts.js.map +1 -1
  275. package/dist/codex/startup-warnings.d.ts +2 -0
  276. package/dist/codex/startup-warnings.d.ts.map +1 -1
  277. package/dist/codex/startup-warnings.js +6 -0
  278. package/dist/codex/startup-warnings.js.map +1 -1
  279. package/dist/codex/transcript/payload.d.ts +8 -0
  280. package/dist/codex/transcript/payload.d.ts.map +1 -0
  281. package/dist/codex/transcript/payload.js +11 -0
  282. package/dist/codex/transcript/payload.js.map +1 -0
  283. package/dist/codex/transcript/rejection.d.ts +15 -0
  284. package/dist/codex/transcript/rejection.d.ts.map +1 -0
  285. package/dist/codex/transcript/rejection.js +44 -0
  286. package/dist/codex/transcript/rejection.js.map +1 -0
  287. package/dist/codex/transcript/turn-end.d.ts +8 -0
  288. package/dist/codex/transcript/turn-end.d.ts.map +1 -0
  289. package/dist/codex/transcript/turn-end.js +17 -0
  290. package/dist/codex/transcript/turn-end.js.map +1 -0
  291. package/dist/codex/transcript/watcher.d.ts +5 -2
  292. package/dist/codex/transcript/watcher.d.ts.map +1 -1
  293. package/dist/codex/transcript/watcher.js +11 -6
  294. package/dist/codex/transcript/watcher.js.map +1 -1
  295. package/dist/codex/trust-retry.d.ts +12 -0
  296. package/dist/codex/trust-retry.d.ts.map +1 -0
  297. package/dist/codex/trust-retry.js +12 -0
  298. package/dist/codex/trust-retry.js.map +1 -0
  299. package/dist/codex/update/skip-attempt.d.ts +2 -0
  300. package/dist/codex/update/skip-attempt.d.ts.map +1 -1
  301. package/dist/codex/update/skip-attempt.js +4 -0
  302. package/dist/codex/update/skip-attempt.js.map +1 -1
  303. package/dist/codex/update/tracker.d.ts +2 -0
  304. package/dist/codex/update/tracker.d.ts.map +1 -1
  305. package/dist/codex/update/tracker.js +4 -0
  306. package/dist/codex/update/tracker.js.map +1 -1
  307. package/dist/core/delay.d.ts +3 -2
  308. package/dist/core/delay.d.ts.map +1 -1
  309. package/dist/core/delay.js +3 -2
  310. package/dist/core/delay.js.map +1 -1
  311. package/dist/core/errors.d.ts +33 -4
  312. package/dist/core/errors.d.ts.map +1 -1
  313. package/dist/core/errors.js +51 -7
  314. package/dist/core/errors.js.map +1 -1
  315. package/dist/core/images/materialize.d.ts +13 -4
  316. package/dist/core/images/materialize.d.ts.map +1 -1
  317. package/dist/core/images/materialize.js +48 -11
  318. package/dist/core/images/materialize.js.map +1 -1
  319. package/dist/core/input/abort.d.ts +15 -0
  320. package/dist/core/input/abort.d.ts.map +1 -1
  321. package/dist/core/input/abort.js +18 -2
  322. package/dist/core/input/abort.js.map +1 -1
  323. package/dist/core/input/constants.d.ts +4 -1
  324. package/dist/core/input/constants.d.ts.map +1 -1
  325. package/dist/core/input/constants.js +4 -1
  326. package/dist/core/input/constants.js.map +1 -1
  327. package/dist/core/input/index.d.ts +1 -1
  328. package/dist/core/input/index.d.ts.map +1 -1
  329. package/dist/core/input/index.js +1 -1
  330. package/dist/core/input/index.js.map +1 -1
  331. package/dist/core/models/clearance.d.ts +38 -0
  332. package/dist/core/models/clearance.d.ts.map +1 -0
  333. package/dist/core/models/clearance.js +38 -0
  334. package/dist/core/models/clearance.js.map +1 -0
  335. package/dist/core/models/close-wait.d.ts +17 -0
  336. package/dist/core/models/close-wait.d.ts.map +1 -0
  337. package/dist/core/models/close-wait.js +44 -0
  338. package/dist/core/models/close-wait.js.map +1 -0
  339. package/dist/core/models/dialog-region.d.ts +18 -3
  340. package/dist/core/models/dialog-region.d.ts.map +1 -1
  341. package/dist/core/models/dialog-region.js +29 -40
  342. package/dist/core/models/dialog-region.js.map +1 -1
  343. package/dist/core/models/input.d.ts +10 -1
  344. package/dist/core/models/input.d.ts.map +1 -1
  345. package/dist/core/models/input.js +15 -2
  346. package/dist/core/models/input.js.map +1 -1
  347. package/dist/core/models/intervention.d.ts +2 -2
  348. package/dist/core/models/intervention.d.ts.map +1 -1
  349. package/dist/core/models/intervention.js +6 -3
  350. package/dist/core/models/intervention.js.map +1 -1
  351. package/dist/core/models/own-picker.d.ts +21 -0
  352. package/dist/core/models/own-picker.d.ts.map +1 -0
  353. package/dist/core/models/own-picker.js +21 -0
  354. package/dist/core/models/own-picker.js.map +1 -0
  355. package/dist/core/models/picker.d.ts +34 -4
  356. package/dist/core/models/picker.d.ts.map +1 -1
  357. package/dist/core/models/picker.js +50 -44
  358. package/dist/core/models/picker.js.map +1 -1
  359. package/dist/core/models/row-block.d.ts +66 -0
  360. package/dist/core/models/row-block.d.ts.map +1 -0
  361. package/dist/core/models/row-block.js +87 -0
  362. package/dist/core/models/row-block.js.map +1 -0
  363. package/dist/core/models/rows.d.ts +32 -3
  364. package/dist/core/models/rows.d.ts.map +1 -1
  365. package/dist/core/models/rows.js +48 -20
  366. package/dist/core/models/rows.js.map +1 -1
  367. package/dist/core/models/tui-screen.d.ts +6 -1
  368. package/dist/core/models/tui-screen.d.ts.map +1 -1
  369. package/dist/core/models/tui-screen.js +25 -10
  370. package/dist/core/models/tui-screen.js.map +1 -1
  371. package/dist/core/models/window.d.ts +49 -0
  372. package/dist/core/models/window.d.ts.map +1 -0
  373. package/dist/core/models/window.js +105 -0
  374. package/dist/core/models/window.js.map +1 -0
  375. package/dist/core/path-trust.d.ts +11 -0
  376. package/dist/core/path-trust.d.ts.map +1 -0
  377. package/dist/core/path-trust.js +21 -0
  378. package/dist/core/path-trust.js.map +1 -0
  379. package/dist/core/screen-facts.d.ts +3 -1
  380. package/dist/core/screen-facts.d.ts.map +1 -1
  381. package/dist/core/screen-facts.js +1 -0
  382. package/dist/core/screen-facts.js.map +1 -1
  383. package/dist/core/simple/boundary-signal.d.ts +41 -6
  384. package/dist/core/simple/boundary-signal.d.ts.map +1 -1
  385. package/dist/core/simple/boundary-signal.js +43 -3
  386. package/dist/core/simple/boundary-signal.js.map +1 -1
  387. package/dist/core/simple/close.d.ts +2 -1
  388. package/dist/core/simple/close.d.ts.map +1 -1
  389. package/dist/core/simple/close.js +10 -2
  390. package/dist/core/simple/close.js.map +1 -1
  391. package/dist/core/simple/turn-boundary.d.ts +2 -0
  392. package/dist/core/simple/turn-boundary.d.ts.map +1 -1
  393. package/dist/core/simple/turn-boundary.js +1 -1
  394. package/dist/core/simple/turn-boundary.js.map +1 -1
  395. package/dist/core/simple/turn-types.d.ts +9 -3
  396. package/dist/core/simple/turn-types.d.ts.map +1 -1
  397. package/dist/core/simple/turn-types.js +10 -2
  398. package/dist/core/simple/turn-types.js.map +1 -1
  399. package/dist/core/simple/turn.d.ts +2 -0
  400. package/dist/core/simple/turn.d.ts.map +1 -1
  401. package/dist/core/simple/turn.js +11 -5
  402. package/dist/core/simple/turn.js.map +1 -1
  403. package/dist/core/terminal-options.d.ts +17 -1
  404. package/dist/core/terminal-options.d.ts.map +1 -1
  405. package/dist/core/terminal-options.js +20 -8
  406. package/dist/core/terminal-options.js.map +1 -1
  407. package/dist/core/transcript/cursor-io.d.ts +8 -0
  408. package/dist/core/transcript/cursor-io.d.ts.map +1 -1
  409. package/dist/core/transcript/cursor-io.js +11 -5
  410. package/dist/core/transcript/cursor-io.js.map +1 -1
  411. package/dist/core/transcript/cursor.d.ts +28 -4
  412. package/dist/core/transcript/cursor.d.ts.map +1 -1
  413. package/dist/core/transcript/cursor.js +53 -7
  414. package/dist/core/transcript/cursor.js.map +1 -1
  415. package/dist/core/transcript/drain.d.ts +43 -0
  416. package/dist/core/transcript/drain.d.ts.map +1 -0
  417. package/dist/core/transcript/drain.js +67 -0
  418. package/dist/core/transcript/drain.js.map +1 -0
  419. package/dist/core/trust/abortable.d.ts +12 -0
  420. package/dist/core/trust/abortable.d.ts.map +1 -0
  421. package/dist/core/trust/abortable.js +48 -0
  422. package/dist/core/trust/abortable.js.map +1 -0
  423. package/dist/core/trust/allowlist.d.ts +2 -0
  424. package/dist/core/trust/allowlist.d.ts.map +1 -1
  425. package/dist/core/trust/allowlist.js +4 -1
  426. package/dist/core/trust/allowlist.js.map +1 -1
  427. package/dist/core/trust/blocking.d.ts +11 -0
  428. package/dist/core/trust/blocking.d.ts.map +1 -1
  429. package/dist/core/trust/blocking.js +5 -4
  430. package/dist/core/trust/blocking.js.map +1 -1
  431. package/dist/core/trust/copy.d.ts.map +1 -1
  432. package/dist/core/trust/copy.js +7 -1
  433. package/dist/core/trust/copy.js.map +1 -1
  434. package/dist/core/trust/deadline.d.ts +24 -0
  435. package/dist/core/trust/deadline.d.ts.map +1 -0
  436. package/dist/core/trust/deadline.js +56 -0
  437. package/dist/core/trust/deadline.js.map +1 -0
  438. package/dist/core/trust/dialog.d.ts +11 -2
  439. package/dist/core/trust/dialog.d.ts.map +1 -1
  440. package/dist/core/trust/dialog.js +12 -3
  441. package/dist/core/trust/dialog.js.map +1 -1
  442. package/dist/core/trust/options.d.ts +5 -1
  443. package/dist/core/trust/options.d.ts.map +1 -1
  444. package/dist/core/trust/options.js +8 -2
  445. package/dist/core/trust/options.js.map +1 -1
  446. package/dist/core/trust/prompts.d.ts +3 -0
  447. package/dist/core/trust/prompts.d.ts.map +1 -1
  448. package/dist/core/trust/prompts.js +2 -1
  449. package/dist/core/trust/prompts.js.map +1 -1
  450. package/dist/core/trust/responder.d.ts +10 -5
  451. package/dist/core/trust/responder.d.ts.map +1 -1
  452. package/dist/core/trust/responder.js +37 -33
  453. package/dist/core/trust/responder.js.map +1 -1
  454. package/dist/core/trust/step.d.ts +67 -0
  455. package/dist/core/trust/step.d.ts.map +1 -0
  456. package/dist/core/trust/step.js +45 -0
  457. package/dist/core/trust/step.js.map +1 -0
  458. package/dist/core/trust/types.d.ts +21 -1
  459. package/dist/core/trust/types.d.ts.map +1 -1
  460. package/dist/core/trust/types.js +25 -1
  461. package/dist/core/trust/types.js.map +1 -1
  462. package/dist/core/trust/view.d.ts +2 -0
  463. package/dist/core/trust/view.d.ts.map +1 -1
  464. package/dist/core/trust/view.js +3 -0
  465. package/dist/core/trust/view.js.map +1 -1
  466. package/dist/core/trust/write.d.ts +31 -6
  467. package/dist/core/trust/write.d.ts.map +1 -1
  468. package/dist/core/trust/write.js +95 -80
  469. package/dist/core/trust/write.js.map +1 -1
  470. package/dist/core/turn-state.d.ts +18 -4
  471. package/dist/core/turn-state.d.ts.map +1 -1
  472. package/dist/core/turn-state.js +47 -25
  473. package/dist/core/turn-state.js.map +1 -1
  474. package/dist/core/warnings/images.d.ts +22 -0
  475. package/dist/core/warnings/images.d.ts.map +1 -0
  476. package/dist/core/warnings/images.js +3 -0
  477. package/dist/core/warnings/images.js.map +1 -0
  478. package/dist/core/warnings/index.d.ts +3 -2
  479. package/dist/core/warnings/index.d.ts.map +1 -1
  480. package/dist/core/warnings/lifecycle.d.ts +35 -4
  481. package/dist/core/warnings/lifecycle.d.ts.map +1 -1
  482. package/dist/core/warnings/lifecycle.js +1 -1
  483. package/dist/core/warnings/update.d.ts +8 -4
  484. package/dist/core/warnings/update.d.ts.map +1 -1
  485. package/dist/core/warnings/update.js +21 -6
  486. package/dist/core/warnings/update.js.map +1 -1
  487. package/dist/pty/exit-latch.d.ts +28 -0
  488. package/dist/pty/exit-latch.d.ts.map +1 -0
  489. package/dist/pty/exit-latch.js +50 -0
  490. package/dist/pty/exit-latch.js.map +1 -0
  491. package/dist/runtime/exit-status.d.ts +7 -0
  492. package/dist/runtime/exit-status.d.ts.map +1 -0
  493. package/dist/runtime/exit-status.js +13 -0
  494. package/dist/runtime/exit-status.js.map +1 -0
  495. package/dist/runtime/home-guard/index.d.ts +45 -0
  496. package/dist/runtime/home-guard/index.d.ts.map +1 -0
  497. package/dist/runtime/home-guard/index.js +69 -0
  498. package/dist/runtime/home-guard/index.js.map +1 -0
  499. package/dist/runtime/loop-restore.d.ts +9 -9
  500. package/dist/runtime/loop-restore.d.ts.map +1 -1
  501. package/dist/runtime/loop-restore.js +10 -10
  502. package/dist/runtime/loop-restore.js.map +1 -1
  503. package/dist/runtime/probe/capped-buffer.d.ts +16 -0
  504. package/dist/runtime/probe/capped-buffer.d.ts.map +1 -0
  505. package/dist/runtime/probe/capped-buffer.js +38 -0
  506. package/dist/runtime/probe/capped-buffer.js.map +1 -0
  507. package/dist/runtime/probe/capture.d.ts +55 -0
  508. package/dist/runtime/probe/capture.d.ts.map +1 -0
  509. package/dist/runtime/probe/capture.js +71 -0
  510. package/dist/runtime/probe/capture.js.map +1 -0
  511. package/dist/runtime/{probe-cleanup.d.ts → probe/cleanup.d.ts} +2 -2
  512. package/dist/runtime/probe/cleanup.d.ts.map +1 -0
  513. package/dist/runtime/{probe-cleanup.js → probe/cleanup.js} +3 -3
  514. package/dist/runtime/probe/cleanup.js.map +1 -0
  515. package/dist/runtime/probe/directory-key.d.ts +26 -0
  516. package/dist/runtime/probe/directory-key.d.ts.map +1 -0
  517. package/dist/runtime/probe/directory-key.js +46 -0
  518. package/dist/runtime/probe/directory-key.js.map +1 -0
  519. package/dist/runtime/probe/index.d.ts +25 -0
  520. package/dist/runtime/probe/index.d.ts.map +1 -0
  521. package/dist/runtime/probe/index.js +153 -0
  522. package/dist/runtime/probe/index.js.map +1 -0
  523. package/dist/runtime/probe/lookup.d.ts +12 -0
  524. package/dist/runtime/probe/lookup.d.ts.map +1 -0
  525. package/dist/runtime/probe/lookup.js +29 -0
  526. package/dist/runtime/probe/lookup.js.map +1 -0
  527. package/dist/runtime/probe/named-pipes.d.ts +35 -0
  528. package/dist/runtime/probe/named-pipes.d.ts.map +1 -0
  529. package/dist/runtime/probe/named-pipes.js +167 -0
  530. package/dist/runtime/probe/named-pipes.js.map +1 -0
  531. package/dist/runtime/probe/private-directory.d.ts +14 -0
  532. package/dist/runtime/probe/private-directory.d.ts.map +1 -0
  533. package/dist/runtime/probe/private-directory.js +50 -0
  534. package/dist/runtime/probe/private-directory.js.map +1 -0
  535. package/dist/runtime/probe/results.d.ts +14 -0
  536. package/dist/runtime/probe/results.d.ts.map +1 -0
  537. package/dist/runtime/probe/results.js +38 -0
  538. package/dist/runtime/probe/results.js.map +1 -0
  539. package/dist/runtime/probe/slots.d.ts +17 -0
  540. package/dist/runtime/probe/slots.d.ts.map +1 -0
  541. package/dist/runtime/probe/slots.js +35 -0
  542. package/dist/runtime/probe/slots.js.map +1 -0
  543. package/dist/runtime/probe/start.d.ts +64 -0
  544. package/dist/runtime/probe/start.d.ts.map +1 -0
  545. package/dist/runtime/probe/start.js +80 -0
  546. package/dist/runtime/probe/start.js.map +1 -0
  547. package/dist/runtime/probe-cache.d.ts +19 -0
  548. package/dist/runtime/probe-cache.d.ts.map +1 -0
  549. package/dist/runtime/probe-cache.js +56 -0
  550. package/dist/runtime/probe-cache.js.map +1 -0
  551. package/dist/runtime/readiness/initial-ready.d.ts +31 -5
  552. package/dist/runtime/readiness/initial-ready.d.ts.map +1 -1
  553. package/dist/runtime/readiness/initial-ready.js +64 -18
  554. package/dist/runtime/readiness/initial-ready.js.map +1 -1
  555. package/dist/runtime/seams.d.ts +14 -2
  556. package/dist/runtime/seams.d.ts.map +1 -1
  557. package/dist/runtime/seams.js +2 -2
  558. package/dist/runtime/seams.js.map +1 -1
  559. package/dist/runtime/session/base.d.ts.map +1 -1
  560. package/dist/runtime/session/base.js +6 -5
  561. package/dist/runtime/session/base.js.map +1 -1
  562. package/dist/runtime/session/commands.d.ts +5 -3
  563. package/dist/runtime/session/commands.d.ts.map +1 -1
  564. package/dist/runtime/session/commands.js +5 -2
  565. package/dist/runtime/session/commands.js.map +1 -1
  566. package/dist/runtime/session/frames.d.ts +12 -2
  567. package/dist/runtime/session/frames.d.ts.map +1 -1
  568. package/dist/runtime/session/frames.js +10 -3
  569. package/dist/runtime/session/frames.js.map +1 -1
  570. package/dist/runtime/session/image-attach.js +7 -2
  571. package/dist/runtime/session/image-attach.js.map +1 -1
  572. package/dist/runtime/session/launch-directory.d.ts +33 -0
  573. package/dist/runtime/session/launch-directory.d.ts.map +1 -0
  574. package/dist/runtime/session/launch-directory.js +84 -0
  575. package/dist/runtime/session/launch-directory.js.map +1 -0
  576. package/dist/runtime/session/lifecycle.d.ts +3 -3
  577. package/dist/runtime/session/lifecycle.d.ts.map +1 -1
  578. package/dist/runtime/session/lifecycle.js +1 -5
  579. package/dist/runtime/session/lifecycle.js.map +1 -1
  580. package/dist/runtime/session/loops.d.ts +1 -1
  581. package/dist/runtime/session/loops.d.ts.map +1 -1
  582. package/dist/runtime/session/loops.js +6 -3
  583. package/dist/runtime/session/loops.js.map +1 -1
  584. package/dist/runtime/session/picker-cleanup.d.ts +6 -21
  585. package/dist/runtime/session/picker-cleanup.d.ts.map +1 -1
  586. package/dist/runtime/session/picker-cleanup.js +19 -31
  587. package/dist/runtime/session/picker-cleanup.js.map +1 -1
  588. package/dist/runtime/session/picker-hold.d.ts +24 -0
  589. package/dist/runtime/session/picker-hold.d.ts.map +1 -0
  590. package/dist/runtime/session/picker-hold.js +42 -0
  591. package/dist/runtime/session/picker-hold.js.map +1 -0
  592. package/dist/runtime/session/picker.d.ts +13 -11
  593. package/dist/runtime/session/picker.d.ts.map +1 -1
  594. package/dist/runtime/session/picker.js +46 -24
  595. package/dist/runtime/session/picker.js.map +1 -1
  596. package/dist/runtime/session/prepare-state.d.ts +6 -0
  597. package/dist/runtime/session/prepare-state.d.ts.map +1 -0
  598. package/dist/runtime/session/prepare-state.js +14 -0
  599. package/dist/runtime/session/prepare-state.js.map +1 -0
  600. package/dist/runtime/session/questions.d.ts +2 -2
  601. package/dist/runtime/session/questions.d.ts.map +1 -1
  602. package/dist/runtime/session/questions.js.map +1 -1
  603. package/dist/runtime/session/readiness.d.ts +14 -5
  604. package/dist/runtime/session/readiness.d.ts.map +1 -1
  605. package/dist/runtime/session/readiness.js +22 -6
  606. package/dist/runtime/session/readiness.js.map +1 -1
  607. package/dist/runtime/session/reap.d.ts +11 -7
  608. package/dist/runtime/session/reap.d.ts.map +1 -1
  609. package/dist/runtime/session/reap.js +16 -10
  610. package/dist/runtime/session/reap.js.map +1 -1
  611. package/dist/runtime/session/runtime-cleanup.d.ts +18 -0
  612. package/dist/runtime/session/runtime-cleanup.d.ts.map +1 -0
  613. package/dist/runtime/session/runtime-cleanup.js +18 -0
  614. package/dist/runtime/session/runtime-cleanup.js.map +1 -0
  615. package/dist/runtime/session/session-input.d.ts +32 -0
  616. package/dist/runtime/session/session-input.d.ts.map +1 -0
  617. package/dist/runtime/session/{picker-input.js → session-input.js} +35 -7
  618. package/dist/runtime/session/session-input.js.map +1 -0
  619. package/dist/runtime/session/shutdown-binding.d.ts +12 -1
  620. package/dist/runtime/session/shutdown-binding.d.ts.map +1 -1
  621. package/dist/runtime/session/shutdown-binding.js +33 -1
  622. package/dist/runtime/session/shutdown-binding.js.map +1 -1
  623. package/dist/runtime/session/shutdown-cleanup.d.ts +17 -0
  624. package/dist/runtime/session/shutdown-cleanup.d.ts.map +1 -0
  625. package/dist/runtime/session/shutdown-cleanup.js +49 -0
  626. package/dist/runtime/session/shutdown-cleanup.js.map +1 -0
  627. package/dist/runtime/session/shutdown.d.ts +3 -2
  628. package/dist/runtime/session/shutdown.d.ts.map +1 -1
  629. package/dist/runtime/session/shutdown.js +13 -24
  630. package/dist/runtime/session/shutdown.js.map +1 -1
  631. package/dist/runtime/shell-quote.d.ts +8 -0
  632. package/dist/runtime/shell-quote.d.ts.map +1 -0
  633. package/dist/runtime/shell-quote.js +10 -0
  634. package/dist/runtime/shell-quote.js.map +1 -0
  635. package/dist/runtime/shell.d.ts +36 -12
  636. package/dist/runtime/shell.d.ts.map +1 -1
  637. package/dist/runtime/shell.js +90 -14
  638. package/dist/runtime/shell.js.map +1 -1
  639. package/dist/runtime/shutdown/coalesce.d.ts +15 -0
  640. package/dist/runtime/shutdown/coalesce.d.ts.map +1 -0
  641. package/dist/runtime/shutdown/coalesce.js +42 -0
  642. package/dist/runtime/shutdown/coalesce.js.map +1 -0
  643. package/dist/runtime/shutdown/detached-sweep/failures.d.ts +24 -0
  644. package/dist/runtime/shutdown/detached-sweep/failures.d.ts.map +1 -0
  645. package/dist/runtime/shutdown/detached-sweep/failures.js +32 -0
  646. package/dist/runtime/shutdown/detached-sweep/failures.js.map +1 -0
  647. package/dist/runtime/shutdown/detached-sweep/index.d.ts +55 -0
  648. package/dist/runtime/shutdown/detached-sweep/index.d.ts.map +1 -0
  649. package/dist/runtime/shutdown/detached-sweep/index.js +129 -0
  650. package/dist/runtime/shutdown/detached-sweep/index.js.map +1 -0
  651. package/dist/runtime/shutdown/detached-sweep/kill.d.ts +37 -0
  652. package/dist/runtime/shutdown/detached-sweep/kill.d.ts.map +1 -0
  653. package/dist/runtime/shutdown/detached-sweep/kill.js +87 -0
  654. package/dist/runtime/shutdown/detached-sweep/kill.js.map +1 -0
  655. package/dist/runtime/shutdown/detached-sweep/record.d.ts +67 -0
  656. package/dist/runtime/shutdown/detached-sweep/record.d.ts.map +1 -0
  657. package/dist/runtime/shutdown/detached-sweep/record.js +111 -0
  658. package/dist/runtime/shutdown/detached-sweep/record.js.map +1 -0
  659. package/dist/runtime/shutdown/detached-sweep/rounds.d.ts +78 -0
  660. package/dist/runtime/shutdown/detached-sweep/rounds.d.ts.map +1 -0
  661. package/dist/runtime/shutdown/detached-sweep/rounds.js +116 -0
  662. package/dist/runtime/shutdown/detached-sweep/rounds.js.map +1 -0
  663. package/dist/runtime/shutdown/detached-sweep/survivors.d.ts +40 -0
  664. package/dist/runtime/shutdown/detached-sweep/survivors.d.ts.map +1 -0
  665. package/dist/runtime/shutdown/detached-sweep/survivors.js +112 -0
  666. package/dist/runtime/shutdown/detached-sweep/survivors.js.map +1 -0
  667. package/dist/runtime/shutdown/leader-group.d.ts +29 -0
  668. package/dist/runtime/shutdown/leader-group.d.ts.map +1 -0
  669. package/dist/runtime/shutdown/leader-group.js +35 -0
  670. package/dist/runtime/shutdown/leader-group.js.map +1 -0
  671. package/dist/runtime/shutdown/native-read-admission.d.ts +13 -0
  672. package/dist/runtime/shutdown/native-read-admission.d.ts.map +1 -0
  673. package/dist/runtime/shutdown/native-read-admission.js +64 -0
  674. package/dist/runtime/shutdown/native-read-admission.js.map +1 -0
  675. package/dist/runtime/shutdown/process-table.d.ts +80 -0
  676. package/dist/runtime/shutdown/process-table.d.ts.map +1 -0
  677. package/dist/runtime/shutdown/process-table.js +147 -0
  678. package/dist/runtime/shutdown/process-table.js.map +1 -0
  679. package/dist/runtime/shutdown/process-tree-ops.d.ts +39 -0
  680. package/dist/runtime/shutdown/process-tree-ops.d.ts.map +1 -0
  681. package/dist/runtime/shutdown/process-tree-ops.js +73 -0
  682. package/dist/runtime/shutdown/process-tree-ops.js.map +1 -0
  683. package/dist/runtime/shutdown/read-timeout.d.ts +4 -0
  684. package/dist/runtime/shutdown/read-timeout.d.ts.map +1 -0
  685. package/dist/runtime/shutdown/read-timeout.js +6 -0
  686. package/dist/runtime/shutdown/read-timeout.js.map +1 -0
  687. package/dist/runtime/shutdown/reap-queue.d.ts +10 -0
  688. package/dist/runtime/shutdown/reap-queue.d.ts.map +1 -0
  689. package/dist/runtime/shutdown/reap-queue.js +29 -0
  690. package/dist/runtime/shutdown/reap-queue.js.map +1 -0
  691. package/dist/runtime/shutdown/reap-tree.d.ts +42 -32
  692. package/dist/runtime/shutdown/reap-tree.d.ts.map +1 -1
  693. package/dist/runtime/shutdown/reap-tree.js +78 -71
  694. package/dist/runtime/shutdown/reap-tree.js.map +1 -1
  695. package/dist/runtime/shutdown/shared-daemon.d.ts +59 -0
  696. package/dist/runtime/shutdown/shared-daemon.d.ts.map +1 -0
  697. package/dist/runtime/shutdown/shared-daemon.js +139 -0
  698. package/dist/runtime/shutdown/shared-daemon.js.map +1 -0
  699. package/dist/runtime/shutdown/teardown.d.ts +15 -0
  700. package/dist/runtime/shutdown/teardown.d.ts.map +1 -1
  701. package/dist/runtime/shutdown/teardown.js +19 -6
  702. package/dist/runtime/shutdown/teardown.js.map +1 -1
  703. package/dist/runtime/shutdown/terminate.d.ts +21 -1
  704. package/dist/runtime/shutdown/terminate.d.ts.map +1 -1
  705. package/dist/runtime/shutdown/terminate.js +83 -56
  706. package/dist/runtime/shutdown/terminate.js.map +1 -1
  707. package/dist/runtime/startup/buffer.d.ts +26 -7
  708. package/dist/runtime/startup/buffer.d.ts.map +1 -1
  709. package/dist/runtime/startup/buffer.js +42 -19
  710. package/dist/runtime/startup/buffer.js.map +1 -1
  711. package/dist/runtime/startup/cleanup.d.ts +37 -11
  712. package/dist/runtime/startup/cleanup.d.ts.map +1 -1
  713. package/dist/runtime/startup/cleanup.js +55 -25
  714. package/dist/runtime/startup/cleanup.js.map +1 -1
  715. package/dist/runtime/startup/index.d.ts +13 -1
  716. package/dist/runtime/startup/index.d.ts.map +1 -1
  717. package/dist/runtime/startup/index.js +38 -6
  718. package/dist/runtime/startup/index.js.map +1 -1
  719. package/dist/runtime/stream-marker.d.ts +17 -0
  720. package/dist/runtime/stream-marker.d.ts.map +1 -0
  721. package/dist/runtime/stream-marker.js +35 -0
  722. package/dist/runtime/stream-marker.js.map +1 -0
  723. package/dist/runtime/update/acquire.d.ts +16 -0
  724. package/dist/runtime/update/acquire.d.ts.map +1 -0
  725. package/dist/runtime/update/acquire.js +62 -0
  726. package/dist/runtime/update/acquire.js.map +1 -0
  727. package/dist/runtime/update/completion.d.ts +12 -0
  728. package/dist/runtime/update/completion.d.ts.map +1 -0
  729. package/dist/runtime/update/completion.js +50 -0
  730. package/dist/runtime/update/completion.js.map +1 -0
  731. package/dist/runtime/update/lock.d.ts +1 -1
  732. package/dist/runtime/update/lock.d.ts.map +1 -1
  733. package/dist/runtime/update/lock.js +21 -38
  734. package/dist/runtime/update/lock.js.map +1 -1
  735. package/dist/runtime/update/once.d.ts +16 -13
  736. package/dist/runtime/update/once.d.ts.map +1 -1
  737. package/dist/runtime/update/once.js +41 -31
  738. package/dist/runtime/update/once.js.map +1 -1
  739. package/dist/runtime/update/owner.js +1 -1
  740. package/dist/runtime/update/retained-lease.js +1 -1
  741. package/dist/runtime/update/waiting.d.ts +14 -1
  742. package/dist/runtime/update/waiting.d.ts.map +1 -1
  743. package/dist/runtime/update/waiting.js +20 -12
  744. package/dist/runtime/update/waiting.js.map +1 -1
  745. package/dist/state/canonical-path.d.ts +5 -0
  746. package/dist/state/canonical-path.d.ts.map +1 -1
  747. package/dist/state/canonical-path.js +11 -5
  748. package/dist/state/canonical-path.js.map +1 -1
  749. package/dist/state/directories.d.ts +31 -1
  750. package/dist/state/directories.d.ts.map +1 -1
  751. package/dist/state/directories.js +75 -13
  752. package/dist/state/directories.js.map +1 -1
  753. package/dist/state/files.d.ts +3 -3
  754. package/dist/state/files.d.ts.map +1 -1
  755. package/dist/state/files.js +4 -10
  756. package/dist/state/files.js.map +1 -1
  757. package/dist/state/launch-ownership.d.ts +4 -2
  758. package/dist/state/launch-ownership.d.ts.map +1 -1
  759. package/dist/state/launch-ownership.js +18 -10
  760. package/dist/state/launch-ownership.js.map +1 -1
  761. package/dist/state/launch-publication.d.ts +7 -1
  762. package/dist/state/launch-publication.d.ts.map +1 -1
  763. package/dist/state/launch-publication.js +14 -2
  764. package/dist/state/launch-publication.js.map +1 -1
  765. package/dist/state/loop-store.d.ts +15 -4
  766. package/dist/state/loop-store.d.ts.map +1 -1
  767. package/dist/state/loop-store.js +13 -7
  768. package/dist/state/loop-store.js.map +1 -1
  769. package/dist/state/preparation/created-directories.d.ts +13 -0
  770. package/dist/state/preparation/created-directories.d.ts.map +1 -0
  771. package/dist/state/preparation/created-directories.js +45 -0
  772. package/dist/state/preparation/created-directories.js.map +1 -0
  773. package/dist/state/preparation/ignore-sync.d.ts +9 -0
  774. package/dist/state/preparation/ignore-sync.d.ts.map +1 -0
  775. package/dist/state/preparation/ignore-sync.js +47 -0
  776. package/dist/state/preparation/ignore-sync.js.map +1 -0
  777. package/dist/state/preparation/index.d.ts +25 -0
  778. package/dist/state/preparation/index.d.ts.map +1 -0
  779. package/dist/state/preparation/index.js +31 -0
  780. package/dist/state/preparation/index.js.map +1 -0
  781. package/dist/state/preparation/install-ignore.d.ts +6 -0
  782. package/dist/state/preparation/install-ignore.d.ts.map +1 -0
  783. package/dist/state/preparation/install-ignore.js +87 -0
  784. package/dist/state/preparation/install-ignore.js.map +1 -0
  785. package/dist/state/preparation/rollback-parent.d.ts +3 -0
  786. package/dist/state/preparation/rollback-parent.d.ts.map +1 -0
  787. package/dist/state/preparation/rollback-parent.js +18 -0
  788. package/dist/state/preparation/rollback-parent.js.map +1 -0
  789. package/dist/state/preparation/root-trust.d.ts +3 -0
  790. package/dist/state/preparation/root-trust.d.ts.map +1 -0
  791. package/dist/state/preparation/root-trust.js +70 -0
  792. package/dist/state/preparation/root-trust.js.map +1 -0
  793. package/dist/state/private-session.d.ts +5 -2
  794. package/dist/state/private-session.d.ts.map +1 -1
  795. package/dist/state/private-session.js +21 -9
  796. package/dist/state/private-session.js.map +1 -1
  797. package/dist/state/root.d.ts +25 -0
  798. package/dist/state/root.d.ts.map +1 -0
  799. package/dist/state/root.js +84 -0
  800. package/dist/state/root.js.map +1 -0
  801. package/dist/state/runtime-paths.d.ts +5 -4
  802. package/dist/state/runtime-paths.d.ts.map +1 -1
  803. package/dist/state/runtime-paths.js +5 -4
  804. package/dist/state/runtime-paths.js.map +1 -1
  805. package/dist/state/setup-failure.d.ts +3 -0
  806. package/dist/state/setup-failure.d.ts.map +1 -0
  807. package/dist/state/setup-failure.js +13 -0
  808. package/dist/state/setup-failure.js.map +1 -0
  809. package/dist/state/socket-home.d.ts +17 -12
  810. package/dist/state/socket-home.d.ts.map +1 -1
  811. package/dist/state/socket-home.js +31 -14
  812. package/dist/state/socket-home.js.map +1 -1
  813. package/dist/state/store.d.ts +1 -3
  814. package/dist/state/store.d.ts.map +1 -1
  815. package/dist/state/store.js +3 -18
  816. package/dist/state/store.js.map +1 -1
  817. package/dist/terminal/headless.d.ts +1 -1
  818. package/dist/terminal/headless.d.ts.map +1 -1
  819. package/dist/terminal/headless.js +1 -3
  820. package/dist/terminal/headless.js.map +1 -1
  821. package/docs/cli-behavior.md +1218 -28
  822. package/docs/cli.md +2 -0
  823. package/docs/codex/cli.md +4 -2
  824. package/package.json +4 -4
  825. package/prd/04-architecture.md +32 -0
  826. package/prd/05-api/5.1-starting-claude.md +17 -1
  827. package/prd/05-api/5.2-resuming-claude.md +5 -0
  828. package/prd/05-api/5.3-claude-session-api.md +267 -40
  829. package/prd/05-api/5.4-events.md +77 -10
  830. package/prd/05-api/5.5-starting-codex.md +3 -1
  831. package/prd/05-api/5.6-resuming-codex.md +4 -1
  832. package/prd/05-api/5.7-codex-session-api.md +87 -5
  833. package/prd/05-api/5.8-session-api.md +32 -1
  834. package/prd/06-claude-hook-bridge.md +2 -0
  835. package/prd/07a-codex-hook-bridge.md +5 -0
  836. package/prd/08-state.md +63 -7
  837. package/prd/09-lifecycle.md +126 -35
  838. package/prd/10-errors.md +11 -4
  839. package/prd/12-e2e.md +81 -0
  840. package/prd/12a-cli.md +63 -9
  841. package/prd/14-conformance.md +52 -35
  842. package/prd/16-maintainer-review.md +11 -0
  843. package/dist/claude/model-composer.d.ts +0 -2
  844. package/dist/claude/model-composer.d.ts.map +0 -1
  845. package/dist/claude/model-composer.js +0 -12
  846. package/dist/claude/model-composer.js.map +0 -1
  847. package/dist/claude/transcript/drain.d.ts +0 -33
  848. package/dist/claude/transcript/drain.d.ts.map +0 -1
  849. package/dist/claude/transcript/drain.js +0 -56
  850. package/dist/claude/transcript/drain.js.map +0 -1
  851. package/dist/codex/session/cli-exit.d.ts +0 -24
  852. package/dist/codex/session/cli-exit.d.ts.map +0 -1
  853. package/dist/codex/session/cli-exit.js +0 -43
  854. package/dist/codex/session/cli-exit.js.map +0 -1
  855. package/dist/codex/transcript/drain.d.ts +0 -30
  856. package/dist/codex/transcript/drain.d.ts.map +0 -1
  857. package/dist/codex/transcript/drain.js +0 -48
  858. package/dist/codex/transcript/drain.js.map +0 -1
  859. package/dist/runtime/probe-cleanup.d.ts.map +0 -1
  860. package/dist/runtime/probe-cleanup.js.map +0 -1
  861. package/dist/runtime/probe.d.ts +0 -11
  862. package/dist/runtime/probe.d.ts.map +0 -1
  863. package/dist/runtime/probe.js +0 -113
  864. package/dist/runtime/probe.js.map +0 -1
  865. package/dist/runtime/session/foreign-picker.d.ts +0 -8
  866. package/dist/runtime/session/foreign-picker.d.ts.map +0 -1
  867. package/dist/runtime/session/foreign-picker.js +0 -18
  868. package/dist/runtime/session/foreign-picker.js.map +0 -1
  869. package/dist/runtime/session/picker-input.d.ts +0 -17
  870. package/dist/runtime/session/picker-input.d.ts.map +0 -1
  871. package/dist/runtime/session/picker-input.js.map +0 -1
@@ -2,18 +2,20 @@
2
2
  * Bounded, release-able collector for the first PTY output of a session.
3
3
  *
4
4
  * The startup usability check (see index.ts, `assertStartupUsable`) reads the
5
- * agent's early output exactly once at ~500ms to detect a crash or auth banner.
5
+ * agent's early output once, at ~500ms, to detect a crash or auth banner.
6
6
  * The PTY data handler is never detached for the session's lifetime, so a naive
7
7
  * `startupOutput += data` accumulates a second unbounded in-memory transcript
8
8
  * for the WHOLE session even though only the startup snapshot is ever consumed.
9
9
  *
10
10
  * This collector appends only while the startup gate is open and caps the buffer
11
- * so a chatty CLI cannot balloon it; once `release()` is called (right after the
12
- * usability check reads it) further chunks are dropped and the retained bytes are
13
- * cleared, so no per-session transcript lingers. Implements PRD §9.1 startup
14
- * usability and §9.4 resource cleanup.
11
+ * so a chatty CLI cannot balloon it. For a launch the e2e home guard checks, it also
12
+ * watches every chunk, past the cap, for the guard's stop marker (PRD §12, C-E2E-24):
13
+ * after a status-97 exit the check waits up to a second more for that marker before
14
+ * it settles. Once `release()` is called, when the check settles, further chunks are
15
+ * dropped and the retained bytes and the watcher are cleared, so no per-session
16
+ * transcript lingers. Implements PRD §9.1 startup usability and §9.4 resource cleanup.
15
17
  */
16
- import type { PtyExit } from "../../pty/types.ts";
18
+ import type { PtyExit, PtyProcess } from "../../pty/types.ts";
17
19
  import { type StartupAdapter } from "./index.ts";
18
20
  export type StartupBuffer = {
19
21
  /** Appends a PTY chunk while the gate is open; a no-op once released. */
@@ -22,8 +24,25 @@ export type StartupBuffer = {
22
24
  readonly read: () => string;
23
25
  /** Stops collecting and clears the retained buffer for the rest of the session. */
24
26
  readonly release: () => void;
27
+ /**
28
+ * Whether the output until release, past the cap included, carried the e2e home guard's stop
29
+ * marker (PRD §12, C-E2E-24): the guard writes its line after the startup files' own output,
30
+ * however long that was. `undefined` for a launch the guard does not check, whose output is
31
+ * never scanned for it.
32
+ */
33
+ readonly sawStopMarker: (() => boolean) | undefined;
25
34
  };
26
- export declare function createStartupBuffer(cap?: number): StartupBuffer;
35
+ /**
36
+ * `watchStopMarker` defaults to whether the e2e home guard checks a launch started now
37
+ * (`homeGuardChecksLaunch`), as it does the session's. Given a `source` PTY, the buffer reads
38
+ * it directly, raw and before any rendering, until release: the session's terminal stops
39
+ * reading a PTY that has exited, while the check may still be waiting for the guard's line.
40
+ */
41
+ export declare function createStartupBuffer(options?: {
42
+ readonly capBytes?: number;
43
+ readonly watchStopMarker?: boolean;
44
+ readonly source?: Pick<PtyProcess, "onData">;
45
+ }): StartupBuffer;
27
46
  /**
28
47
  * Runs the ~500ms startup usability check against `buffer`, then releases it on
29
48
  * every path (success OR failure) so the collector stops appending and clears
@@ -1 +1 @@
1
- {"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../../src/runtime/startup/buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAMtE,MAAM,MAAM,aAAa,GAAG;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,MAAM,CAAC;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAA2B,GAAG,aAAa,CAwBnF;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,OAAO,GAAG,SAAS,GAC9B,OAAO,CAAC,IAAI,CAAC,CAMf"}
1
+ {"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../../src/runtime/startup/buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAMtE,MAAM,MAAM,aAAa,GAAG;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,MAAM,CAAC;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,aAAa,EAAE,CAAC,MAAM,OAAO,CAAC,GAAG,SAAS,CAAC;CACrD,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,GAAE;IACP,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;CACzC,GACL,aAAa,CAiCf;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,OAAO,GAAG,SAAS,GAC9B,OAAO,CAAC,IAAI,CAAC,CAWf"}
@@ -2,45 +2,63 @@
2
2
  * Bounded, release-able collector for the first PTY output of a session.
3
3
  *
4
4
  * The startup usability check (see index.ts, `assertStartupUsable`) reads the
5
- * agent's early output exactly once at ~500ms to detect a crash or auth banner.
5
+ * agent's early output once, at ~500ms, to detect a crash or auth banner.
6
6
  * The PTY data handler is never detached for the session's lifetime, so a naive
7
7
  * `startupOutput += data` accumulates a second unbounded in-memory transcript
8
8
  * for the WHOLE session even though only the startup snapshot is ever consumed.
9
9
  *
10
10
  * This collector appends only while the startup gate is open and caps the buffer
11
- * so a chatty CLI cannot balloon it; once `release()` is called (right after the
12
- * usability check reads it) further chunks are dropped and the retained bytes are
13
- * cleared, so no per-session transcript lingers. Implements PRD §9.1 startup
14
- * usability and §9.4 resource cleanup.
11
+ * so a chatty CLI cannot balloon it. For a launch the e2e home guard checks, it also
12
+ * watches every chunk, past the cap, for the guard's stop marker (PRD §12, C-E2E-24):
13
+ * after a status-97 exit the check waits up to a second more for that marker before
14
+ * it settles. Once `release()` is called, when the check settles, further chunks are
15
+ * dropped and the retained bytes and the watcher are cleared, so no per-session
16
+ * transcript lingers. Implements PRD §9.1 startup usability and §9.4 resource cleanup.
15
17
  */
18
+ import { homeGuardChecksLaunch, watchForStopMarker } from "../home-guard/index.js";
16
19
  import { assertStartupUsable } from "./index.js";
17
20
  // Startup output is tiny (a banner, a prompt); this cap is comfortably larger
18
21
  // than any real startup screen while still bounding a misbehaving CLI.
19
- const STARTUP_BUFFER_CAP = 64 * 1024;
20
- export function createStartupBuffer(cap = STARTUP_BUFFER_CAP) {
22
+ const STARTUP_BUFFER_CAP_BYTES = 64 * 1024;
23
+ /**
24
+ * `watchStopMarker` defaults to whether the e2e home guard checks a launch started now
25
+ * (`homeGuardChecksLaunch`), as it does the session's. Given a `source` PTY, the buffer reads
26
+ * it directly, raw and before any rendering, until release: the session's terminal stops
27
+ * reading a PTY that has exited, while the check may still be waiting for the guard's line.
28
+ */
29
+ export function createStartupBuffer(options = {}) {
30
+ const cap = options.capBytes ?? STARTUP_BUFFER_CAP_BYTES;
21
31
  let buffer = Buffer.alloc(cap);
22
32
  let length = 0;
23
33
  let open = true;
34
+ const watched = options.watchStopMarker ?? homeGuardChecksLaunch();
35
+ let stop = watched ? watchForStopMarker() : undefined;
36
+ const push = (data) => {
37
+ stop?.feed(Buffer.from(data));
38
+ if (!open || length >= cap)
39
+ return;
40
+ const remaining = cap - length;
41
+ // UTF-8 needs at least as many bytes as UTF-16 units. Only measure chunks
42
+ // already bounded by the remaining capacity; never scan a huge receipt.
43
+ open = data.length <= remaining && Buffer.byteLength(data, "utf8") <= remaining;
44
+ // The bounded write stops before an incomplete code point and copies the
45
+ // prefix into owned storage, without retaining the original chunk string.
46
+ length += buffer.write(data.slice(0, remaining), length, remaining, "utf8");
47
+ };
48
+ const unsubscribe = options.source?.onData(push);
24
49
  return {
25
- push(data) {
26
- if (!open || length >= cap)
27
- return;
28
- const remaining = cap - length;
29
- // UTF-8 needs at least as many bytes as UTF-16 units. Only measure chunks
30
- // already bounded by the remaining capacity; never scan a huge receipt.
31
- open = data.length <= remaining && Buffer.byteLength(data, "utf8") <= remaining;
32
- // The bounded write stops before an incomplete code point and copies the
33
- // prefix into owned storage, without retaining the original chunk string.
34
- length += buffer.write(data.slice(0, remaining), length, remaining, "utf8");
35
- },
50
+ push,
36
51
  read() {
37
52
  return buffer.toString("utf8", 0, length);
38
53
  },
39
54
  release() {
55
+ unsubscribe?.();
40
56
  open = false;
41
57
  buffer = Buffer.alloc(0);
42
58
  length = 0;
59
+ stop = undefined;
43
60
  },
61
+ sawStopMarker: watched ? () => stop?.seen ?? false : undefined,
44
62
  };
45
63
  }
46
64
  /**
@@ -50,7 +68,12 @@ export function createStartupBuffer(cap = STARTUP_BUFFER_CAP) {
50
68
  */
51
69
  export async function assertStartupThenRelease(adapter, buffer, exit) {
52
70
  try {
53
- await assertStartupUsable({ adapter, exit, output: () => buffer.read() });
71
+ await assertStartupUsable({
72
+ adapter,
73
+ exit,
74
+ output: () => buffer.read(),
75
+ sawStopMarker: buffer.sawStopMarker,
76
+ });
54
77
  }
55
78
  finally {
56
79
  buffer.release();
@@ -1 +1 @@
1
- {"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../../src/runtime/startup/buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,mBAAmB,EAAuB,MAAM,YAAY,CAAC;AAEtE,8EAA8E;AAC9E,uEAAuE;AACvE,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAC;AAWrC,MAAM,UAAU,mBAAmB,CAAC,MAAc,kBAAkB;IAClE,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,OAAO;QACL,IAAI,CAAC,IAAY;YACf,IAAI,CAAC,IAAI,IAAI,MAAM,IAAI,GAAG;gBAAE,OAAO;YACnC,MAAM,SAAS,GAAG,GAAG,GAAG,MAAM,CAAC;YAC/B,0EAA0E;YAC1E,wEAAwE;YACxE,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,SAAS,CAAC;YAChF,yEAAyE;YACzE,0EAA0E;YAC1E,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI;YACF,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO;YACL,IAAI,GAAG,KAAK,CAAC;YACb,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,GAAG,CAAC,CAAC;QACb,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAuB,EACvB,MAAqB,EACrB,IAA+B;IAE/B,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5E,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../../src/runtime/startup/buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAuB,MAAM,YAAY,CAAC;AAEtE,8EAA8E;AAC9E,uEAAuE;AACvE,MAAM,wBAAwB,GAAG,EAAE,GAAG,IAAI,CAAC;AAkB3C;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAII,EAAE;IAEN,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,IAAI,wBAAwB,CAAC;IACzD,IAAI,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,IAAI,qBAAqB,EAAE,CAAC;IACnE,IAAI,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACtD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAQ,EAAE;QAClC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,MAAM,IAAI,GAAG;YAAE,OAAO;QACnC,MAAM,SAAS,GAAG,GAAG,GAAG,MAAM,CAAC;QAC/B,0EAA0E;QAC1E,wEAAwE;QACxE,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,SAAS,CAAC;QAChF,yEAAyE;QACzE,0EAA0E;QAC1E,MAAM,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;IAC9E,CAAC,CAAC;IACF,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACjD,OAAO;QACL,IAAI;QACJ,IAAI;YACF,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO;YACL,WAAW,EAAE,EAAE,CAAC;YAChB,IAAI,GAAG,KAAK,CAAC;YACb,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,GAAG,CAAC,CAAC;YACX,IAAI,GAAG,SAAS,CAAC;QACnB,CAAC;QACD,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,SAAS;KAC/D,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAuB,EACvB,MAAqB,EACrB,IAA+B;IAE/B,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC;YACxB,OAAO;YACP,IAAI;YACJ,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE;YAC3B,aAAa,EAAE,MAAM,CAAC,aAAa;SACpC,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -2,17 +2,24 @@
2
2
  * Best-effort startup cleanup that preserves the original startup error.
3
3
  * Implements PRD §9.1 and §10 error stability.
4
4
  */
5
- import type { PtyProcess } from "../../pty/types.ts";
5
+ import { type ReapErrorCode } from "../../core/warnings/reasons.ts";
6
6
  export type StartupTerminationTimeouts = {
7
7
  readonly gracefulMs: number;
8
8
  readonly forceMs: number;
9
9
  };
10
+ /** A failed startup's PTY, ended by the session that owns its exit and its reaper. */
11
+ export type StartupPty = {
12
+ /** The leader's pid, which is also its process-group id; reported, never signaled. */
13
+ readonly pid: number;
14
+ /** Ends the PTY and reaps its group; never signals a PTY whose exit was already seen. */
15
+ readonly terminate: (timeouts: StartupTerminationTimeouts) => Promise<void>;
16
+ };
10
17
  export type StartupCleanupResources = {
11
18
  readonly before?: () => void;
12
19
  readonly bridge?: {
13
20
  readonly stop: () => Promise<void>;
14
21
  };
15
- readonly pty?: PtyProcess;
22
+ readonly pty?: StartupPty;
16
23
  readonly terminal?: {
17
24
  readonly dispose: () => void;
18
25
  };
@@ -20,24 +27,43 @@ export type StartupCleanupResources = {
20
27
  /** Overrides the bounded PTY termination window (tests only; production defaults). */
21
28
  readonly terminationTimeouts?: StartupTerminationTimeouts;
22
29
  };
30
+ /** The parts of a failed startup's cleanup that the session itself owns. */
31
+ export type SessionStartupCleanup = Required<Pick<StartupCleanupResources, "before" | "pty">>;
32
+ /**
33
+ * A failed startup's PTY termination or group reap that could not be confirmed (§9.1),
34
+ * so part of the CLI's process tree may still be running. The errno token is
35
+ * allowlisted, so it is content-free. The group id is diagnostic only: once the leader is
36
+ * gone the number may be reissued to an unrelated group, so it is never signaled. This
37
+ * covers the PTY only; the other cleanup steps stay best-effort and unreported.
38
+ */
39
+ export type UnconfirmedStartupPtyCleanup = {
40
+ readonly cleanupErrorCode: ReapErrorCode;
41
+ readonly cleanupProcessGroupId: number;
42
+ };
23
43
  /**
24
44
  * Wraps the ENTIRE `start*FromRecord` body so the fresh per-launch socket FILE the
25
45
  * launch minted is removed on ANY failure before the session takes ownership — a
26
46
  * failed state/runtime write, bridge start, PTY start, or guarded post-spawn step
27
47
  * otherwise leaks a socket under `/tmp/elwood-*` (§9.1). It removes only THIS launch's
28
- * own file, never the shared stable home a concurrent launch may still own; the home is
29
- * deterministic, so the session's next start/resume/teardown collects any empty
30
- * leftover. On success ownership transfers to the returned session (teardown removes the
31
- * whole home). The cleanup is contained so it never replaces the original startup error.
48
+ * own file, and the stable home only when that leaves it empty, so a home a concurrent
49
+ * launch's socket is in stays (§8.1). On success ownership transfers to the returned
50
+ * session (teardown removes the whole home; its bridge's stop releases its socket). The
51
+ * cleanup is contained so it never replaces the original startup error.
52
+ */
53
+ export declare function withSocketHomeCleanup<T>(releaseSocket: () => void, build: () => Promise<T>): Promise<T>;
54
+ /**
55
+ * Runs every cleanup step, each best-effort. Resolves to the unconfirmed PTY cleanup, or
56
+ * `undefined` when there was no PTY or its termination and group reap were both
57
+ * confirmed. Failures of the other steps never surface here.
32
58
  */
33
- export declare function withSocketHomeCleanup<T>(removeOwnSocketFile: () => void, build: () => Promise<T>): Promise<T>;
34
- export declare function cleanupStartupResources(resources: StartupCleanupResources): Promise<void>;
59
+ export declare function cleanupStartupResources(resources: StartupCleanupResources): Promise<UnconfirmedStartupPtyCleanup | undefined>;
35
60
  /**
36
61
  * Runs the post-session-construction startup steps behind ONE cleanup boundary
37
62
  * (PRD §9.1, §9.4): if `region` rejects — a failed startup assertion, a PTY write
38
- * fault, anything — the now-live PTY, bridge, terminal, and any watcher
39
- * are torn down via `cleanupStartupResources` before the original error rethrows, so
40
- * a rejected `startClaude`/`startCodex` never leaks live resources.
63
+ * fault, anything — the now-live PTY, bridge, terminal, and any watcher are torn down
64
+ * via `cleanupStartupResources` before the original error rethrows. That teardown is
65
+ * best-effort: when the PTY's termination or group reap could not be confirmed, part of
66
+ * the process tree may remain, and a typed startup error names that in its details.
41
67
  */
42
68
  export declare function guardStartupRegion(region: () => Promise<void>, resources: StartupCleanupResources): Promise<void>;
43
69
  //# sourceMappingURL=cleanup.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../../src/runtime/startup/cleanup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIrD,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IACzD,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IACrD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,sFAAsF;IACtF,QAAQ,CAAC,mBAAmB,CAAC,EAAE,0BAA0B,CAAC;CAC3D,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,EAC3C,mBAAmB,EAAE,MAAM,IAAI,EAC/B,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACtB,OAAO,CAAC,CAAC,CAAC,CAWZ;AAMD,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa/F;AAUD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC3B,SAAS,EAAE,uBAAuB,GACjC,OAAO,CAAC,IAAI,CAAC,CAOf"}
1
+ {"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../../src/runtime/startup/cleanup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAEL,KAAK,aAAa,EAEnB,MAAM,gCAAgC,CAAC;AAExC,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,sFAAsF;AACtF,MAAM,MAAM,UAAU,GAAG;IACvB,sFAAsF;IACtF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,yFAAyF;IACzF,QAAQ,CAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,0BAA0B,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7E,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IACzD,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IACrD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,sFAAsF;IACtF,QAAQ,CAAC,mBAAmB,CAAC,EAAE,0BAA0B,CAAC;CAC3D,CAAC;AAEF,4EAA4E;AAC5E,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC,uBAAuB,EAAE,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;AAE9F;;;;;;GAMG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC,QAAQ,CAAC,gBAAgB,EAAE,aAAa,CAAC;IACzC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;CACxC,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,EAC3C,aAAa,EAAE,MAAM,IAAI,EACzB,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACtB,OAAO,CAAC,CAAC,CAAC,CAWZ;AAMD;;;;GAIG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,uBAAuB,GACjC,OAAO,CAAC,4BAA4B,GAAG,SAAS,CAAC,CAcnD;AA2BD;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC3B,SAAS,EAAE,uBAAuB,GACjC,OAAO,CAAC,IAAI,CAAC,CAMf"}
@@ -2,25 +2,25 @@
2
2
  * Best-effort startup cleanup that preserves the original startup error.
3
3
  * Implements PRD §9.1 and §10 error stability.
4
4
  */
5
- import { SessionReaper } from "../shutdown/reap-tree.js";
6
- import { terminatePty } from "../shutdown/terminate.js";
5
+ import { ElwoodError, elwoodError, underlyingErrno } from "../../core/errors.js";
6
+ import { isReapErrorCode, unknownErrorToken, } from "../../core/warnings/reasons.js";
7
7
  /**
8
8
  * Wraps the ENTIRE `start*FromRecord` body so the fresh per-launch socket FILE the
9
9
  * launch minted is removed on ANY failure before the session takes ownership — a
10
10
  * failed state/runtime write, bridge start, PTY start, or guarded post-spawn step
11
11
  * otherwise leaks a socket under `/tmp/elwood-*` (§9.1). It removes only THIS launch's
12
- * own file, never the shared stable home a concurrent launch may still own; the home is
13
- * deterministic, so the session's next start/resume/teardown collects any empty
14
- * leftover. On success ownership transfers to the returned session (teardown removes the
15
- * whole home). The cleanup is contained so it never replaces the original startup error.
12
+ * own file, and the stable home only when that leaves it empty, so a home a concurrent
13
+ * launch's socket is in stays (§8.1). On success ownership transfers to the returned
14
+ * session (teardown removes the whole home; its bridge's stop releases its socket). The
15
+ * cleanup is contained so it never replaces the original startup error.
16
16
  */
17
- export async function withSocketHomeCleanup(removeOwnSocketFile, build) {
17
+ export async function withSocketHomeCleanup(releaseSocket, build) {
18
18
  try {
19
19
  return await build();
20
20
  }
21
21
  catch (error) {
22
22
  try {
23
- removeOwnSocketFile();
23
+ releaseSocket();
24
24
  }
25
25
  catch {
26
26
  // Secondary: the original startup error is the one that rejects.
@@ -31,44 +31,74 @@ export async function withSocketHomeCleanup(removeOwnSocketFile, build) {
31
31
  // Bounded so a failed startup never hangs on an unresponsive CLI while still
32
32
  // giving the leader a chance to exit gracefully before the group SIGKILL reap.
33
33
  const startupTermination = { gracefulMs: 5_000, forceMs: 1_000 };
34
+ /**
35
+ * Runs every cleanup step, each best-effort. Resolves to the unconfirmed PTY cleanup, or
36
+ * `undefined` when there was no PTY or its termination and group reap were both
37
+ * confirmed. Failures of the other steps never surface here.
38
+ */
34
39
  export async function cleanupStartupResources(resources) {
35
40
  tryCall(resources.before);
36
- // Route the PTY through the SAME group-reaping primitive the normal exit path
37
- // uses: it signals, waits (bounded), and SIGKILLs the leader's process group on
38
- // EVERY path — even when the PTY signal throws — so CLI descendants (e.g. a
39
- // hook-bridge grandchild reparented to PID 1) cannot survive a failed startup
40
- // (PRD §9.1, §9.4, C-LIFE-10). A termination/reap failure stays SECONDARY: it is
41
- // contained here so the original startup error is the one that rejects.
42
- if (resources.pty)
43
- await reapPtyGroup(resources.pty, resources.terminationTimeouts ?? startupTermination);
41
+ // The session ends its PTY with the reaper its exit path uses, so the leader's group
42
+ // is SIGKILLed once (PRD §9.1, §9.4, C-LIFE-10). That kill is attempted even when the
43
+ // PTY signal throws, so a hook-bridge grandchild reparented to PID 1 is not left
44
+ // behind. A failure stays secondary: it is returned as a content-free diagnostic,
45
+ // never thrown in place of the startup error, and the group may still be running.
46
+ const unconfirmed = resources.pty
47
+ ? await endPty(resources.pty, resources.terminationTimeouts ?? startupTermination)
48
+ : undefined;
44
49
  await stopQuietly(resources.bridge);
45
50
  tryCall(resources.after);
46
51
  tryCall(resources.terminal?.dispose.bind(resources.terminal));
52
+ return unconfirmed;
47
53
  }
48
- async function reapPtyGroup(pty, timeouts) {
54
+ async function endPty(pty, timeouts) {
49
55
  try {
50
- await terminatePty(pty, "SIGTERM", new SessionReaper(pty.pid), timeouts);
56
+ await pty.terminate(timeouts);
57
+ return undefined;
51
58
  }
52
- catch {
53
- // Preserve the original startup error; a reap/termination failure is secondary.
59
+ catch (error) {
60
+ const errno = cleanupErrno(error);
61
+ return {
62
+ cleanupErrorCode: isReapErrorCode(errno) ? errno : unknownErrorToken,
63
+ cleanupProcessGroupId: pty.pid,
64
+ };
54
65
  }
55
66
  }
67
+ /**
68
+ * The errno to report: the failed group reap's errno when there is one, because that
69
+ * reap decides whether descendants may still be running; otherwise the termination's.
70
+ */
71
+ function cleanupErrno(error) {
72
+ const reapErrno = error instanceof ElwoodError ? error.details["reapErrno"] : undefined;
73
+ return typeof reapErrno === "string" ? reapErrno : underlyingErrno(error);
74
+ }
56
75
  /**
57
76
  * Runs the post-session-construction startup steps behind ONE cleanup boundary
58
77
  * (PRD §9.1, §9.4): if `region` rejects — a failed startup assertion, a PTY write
59
- * fault, anything — the now-live PTY, bridge, terminal, and any watcher
60
- * are torn down via `cleanupStartupResources` before the original error rethrows, so
61
- * a rejected `startClaude`/`startCodex` never leaks live resources.
78
+ * fault, anything — the now-live PTY, bridge, terminal, and any watcher are torn down
79
+ * via `cleanupStartupResources` before the original error rethrows. That teardown is
80
+ * best-effort: when the PTY's termination or group reap could not be confirmed, part of
81
+ * the process tree may remain, and a typed startup error names that in its details.
62
82
  */
63
83
  export async function guardStartupRegion(region, resources) {
64
84
  try {
65
85
  await region();
66
86
  }
67
87
  catch (error) {
68
- await cleanupStartupResources(resources);
69
- throw error;
88
+ throw withCleanupFailure(error, await cleanupStartupResources(resources));
70
89
  }
71
90
  }
91
+ /**
92
+ * Keeps the startup error's code, message, and stack and adds the unconfirmed-cleanup
93
+ * details. Only Elwood's own typed errors gain them: any other startup error is
94
+ * rethrown unchanged, never wrapped or mutated.
95
+ */
96
+ function withCleanupFailure(error, unconfirmed) {
97
+ if (unconfirmed === undefined || !(error instanceof ElwoodError))
98
+ return error;
99
+ const enriched = elwoodError(error.code, error.message, { ...error.details, ...unconfirmed });
100
+ return Object.assign(enriched, { stack: error.stack });
101
+ }
72
102
  /** Stops the bridge if one exists; a sync throw or rejection stays secondary. */
73
103
  async function stopQuietly(bridge) {
74
104
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../../src/runtime/startup/cleanup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAiBxD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,mBAA+B,EAC/B,KAAuB;IAEvB,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC;YACH,mBAAmB,EAAE,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;QACnE,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,+EAA+E;AAC/E,MAAM,kBAAkB,GAA+B,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAE7F,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,SAAkC;IAC9E,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAC1B,8EAA8E;IAC9E,gFAAgF;IAChF,4EAA4E;IAC5E,8EAA8E;IAC9E,iFAAiF;IACjF,wEAAwE;IACxE,IAAI,SAAS,CAAC,GAAG;QACf,MAAM,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,mBAAmB,IAAI,kBAAkB,CAAC,CAAC;IACzF,MAAM,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACzB,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,GAAe,EAAE,QAAoC;IAC/E,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC3E,CAAC;IAAC,MAAM,CAAC;QACP,gFAAgF;IAClF,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,MAA2B,EAC3B,SAAkC;IAElC,IAAI,CAAC;QACH,MAAM,MAAM,EAAE,CAAC;IACjB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,iFAAiF;AACjF,KAAK,UAAU,WAAW,CAAC,MAAyC;IAClE,IAAI,CAAC;QACH,MAAM,MAAM,EAAE,IAAI,EAAE,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,QAAkC;IACjD,IAAI,CAAC;QACH,QAAQ,EAAE,EAAE,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../../src/runtime/startup/cleanup.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,28 @@
1
1
  /**
2
2
  * Startup readiness checks for newly spawned agent PTYs.
3
- * Implements PRD §9.1 and §10.
3
+ * Implements PRD §9.1 and §10, and names the e2e home guard of §12 (C-E2E-24).
4
4
  */
5
5
  import type { PtyExit } from "../../pty/types.ts";
6
6
  export type StartupAdapter = "claude" | "codex";
7
7
  type StartupValue<T> = T | (() => T);
8
8
  export declare function setStartupWaitMsForTests(value: number): void;
9
9
  export declare function resetStartupWaitMsForTests(): void;
10
+ /**
11
+ * Fails a session's start when its CLI exited or asked for a login during startup. It waits
12
+ * `waitMs` (500 ms by default) first, then reads the exit and the output once. A status-97
13
+ * exit of a launch the e2e home guard checks (`sawStopMarker` set) may wait up to
14
+ * `stopMarkerGraceMs` more for the guard's line (PRD §12, C-E2E-24); any other check adds no
15
+ * wait.
16
+ */
10
17
  export declare function assertStartupUsable(input: {
11
18
  readonly adapter: StartupAdapter;
12
19
  readonly exit: StartupValue<PtyExit | undefined>;
13
20
  readonly output: StartupValue<string>;
21
+ /**
22
+ * Whether the output carried the e2e home guard's stop marker, past any cap on `output`;
23
+ * `undefined` for a launch the guard does not check.
24
+ */
25
+ readonly sawStopMarker?: (() => boolean) | undefined;
14
26
  readonly waitMs?: number;
15
27
  }): Promise<void>;
16
28
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/startup/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC;AAChD,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAGrC,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE5D;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAED,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,IAAI,CAAC,CAehB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/startup/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAOlD,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,OAAO,CAAC;AAChD,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAUrC,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE5D;AAED,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,OAAO,GAAG,SAAS,CAAC,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IACtC;;;OAGG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,IAAI,CAAC,CAoBhB"}
@@ -1,29 +1,61 @@
1
1
  /**
2
2
  * Startup readiness checks for newly spawned agent PTYs.
3
- * Implements PRD §9.1 and §10.
3
+ * Implements PRD §9.1 and §10, and names the e2e home guard of §12 (C-E2E-24).
4
4
  */
5
5
  import { isClaudeReauthRequiredText } from "../../claude/login/expiry-screen.js";
6
+ import { delay } from "../../core/delay.js";
6
7
  import { elwoodError } from "../../core/errors.js";
8
+ import { homeGuardExitCode, homeGuardStopped, homeGuardStoppedReason, } from "../home-guard/index.js";
7
9
  let startupWaitMs = 500;
10
+ /**
11
+ * Once the check sees a status-97 exit of a launch the e2e home guard checks, the longest it
12
+ * waits for the guard's line: a PTY's last output can arrive after its exit (§9.4).
13
+ */
14
+ const stopMarkerGraceMs = 1_000;
15
+ /** How often that wait looks for the line: often enough to add little to a stop's report. */
16
+ const stopMarkerPollMs = 10;
8
17
  export function setStartupWaitMsForTests(value) {
9
18
  startupWaitMs = value;
10
19
  }
11
20
  export function resetStartupWaitMsForTests() {
12
21
  startupWaitMs = 500;
13
22
  }
23
+ /**
24
+ * Fails a session's start when its CLI exited or asked for a login during startup. It waits
25
+ * `waitMs` (500 ms by default) first, then reads the exit and the output once. A status-97
26
+ * exit of a launch the e2e home guard checks (`sawStopMarker` set) may wait up to
27
+ * `stopMarkerGraceMs` more for the guard's line (PRD §12, C-E2E-24); any other check adds no
28
+ * wait.
29
+ */
14
30
  export async function assertStartupUsable(input) {
15
- await new Promise((resolve) => setTimeout(resolve, input.waitMs ?? startupWaitMs));
31
+ await delay(input.waitMs ?? startupWaitMs);
16
32
  const exit = readStartupValue(input.exit);
17
33
  if (exit) {
18
- throw elwoodError(`${input.adapter}_start_failed`, `${input.adapter} exited during startup.`, {
19
- exitCode: exit.exitCode,
20
- signal: exit.signal,
21
- });
34
+ // The guard's own line is in the output, among the user's startup output: name the guard
35
+ // instead of forwarding that output.
36
+ const stopped = await stoppedByGuard(exit.exitCode, input.sawStopMarker);
37
+ const guard = stopped ? `: ${homeGuardStoppedReason}` : "";
38
+ throw elwoodError(`${input.adapter}_start_failed`, `${input.adapter} exited during startup${guard}.`, { exitCode: exit.exitCode, signal: exit.signal });
22
39
  }
23
40
  if (isAuthFailure(input.adapter, readStartupValue(input.output))) {
24
41
  throw elwoodError(`${input.adapter}_not_authenticated`, `${input.adapter} is not authenticated.`);
25
42
  }
26
43
  }
44
+ /**
45
+ * Whether the e2e home guard stopped a session's login shell that exited with `exitCode`. For
46
+ * a launch the guard checks, a status-97 exit first waits, up to `stopMarkerGraceMs`, for the
47
+ * guard's line to arrive. A launch it does not check fails at once.
48
+ */
49
+ async function stoppedByGuard(exitCode, sawMarker) {
50
+ if (sawMarker === undefined)
51
+ return false;
52
+ if (exitCode === homeGuardExitCode) {
53
+ const deadline = performance.now() + stopMarkerGraceMs;
54
+ while (!sawMarker() && performance.now() < deadline)
55
+ await delay(stopMarkerPollMs);
56
+ }
57
+ return homeGuardStopped(exitCode, sawMarker);
58
+ }
27
59
  function isAuthFailure(adapter, output) {
28
60
  // Claude's re-authentication banner ("Login expired" then "Please run /login")
29
61
  // spans multiple lines, so it is matched against the WHOLE output, not per line,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/startup/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,0BAA0B,EAAE,MAAM,qCAAqC,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAKnD,IAAI,aAAa,GAAG,GAAG,CAAC;AAExB,MAAM,UAAU,wBAAwB,CAAC,KAAa;IACpD,aAAa,GAAG,KAAK,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,0BAA0B;IACxC,aAAa,GAAG,GAAG,CAAC;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAKzC;IACC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,CAAC;IACnF,MAAM,IAAI,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,IAAI,EAAE,CAAC;QACT,MAAM,WAAW,CAAC,GAAG,KAAK,CAAC,OAAO,eAAe,EAAE,GAAG,KAAK,CAAC,OAAO,yBAAyB,EAAE;YAC5F,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC,CAAC;IACL,CAAC;IACD,IAAI,aAAa,CAAC,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QACjE,MAAM,WAAW,CACf,GAAG,KAAK,CAAC,OAAO,oBAAoB,EACpC,GAAG,KAAK,CAAC,OAAO,wBAAwB,CACzC,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,OAAuB,EAAE,MAAc;IAC5D,+EAA+E;IAC/E,iFAAiF;IACjF,iFAAiF;IACjF,IAAI,OAAO,KAAK,QAAQ,IAAI,0BAA0B,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5E,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAuB,EAAE,IAAY;IAC9D,IAAI,yDAAyD,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,OAAO,KAAK,OAAO,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACtE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,gBAAgB,CAAI,KAAsB;IACjD,OAAO,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAE,KAAiB,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACpE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/startup/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Watches one byte stream for a marker its chunks may split anywhere. A watcher keeps that
3
+ * stream's state, so each stream needs its own. Shared by the probe shell's start line
4
+ * (PRD §9.2, C-PERF-05) and the e2e home guard's stop marker (PRD §12, C-E2E-24), so both
5
+ * read a split marker the same way.
6
+ */
7
+ export declare class StreamMarkerWatcher {
8
+ private readonly marker;
9
+ private tail;
10
+ private found;
11
+ constructor(marker: Buffer);
12
+ /** Whether the stream has carried the marker. */
13
+ get seen(): boolean;
14
+ /** True exactly once: for the chunk that completes the marker. */
15
+ feed(chunk: Buffer): boolean;
16
+ }
17
+ //# sourceMappingURL=stream-marker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-marker.d.ts","sourceRoot":"","sources":["../../src/runtime/stream-marker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,IAAI,CAAmB;IAC/B,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,MAAM;IAI1B,iDAAiD;IACjD,IAAI,IAAI,IAAI,OAAO,CAElB;IAED,kEAAkE;IAClE,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;CAc7B"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Watches one byte stream for a marker its chunks may split anywhere. A watcher keeps that
3
+ * stream's state, so each stream needs its own. Shared by the probe shell's start line
4
+ * (PRD §9.2, C-PERF-05) and the e2e home guard's stop marker (PRD §12, C-E2E-24), so both
5
+ * read a split marker the same way.
6
+ */
7
+ export class StreamMarkerWatcher {
8
+ marker;
9
+ tail = Buffer.alloc(0);
10
+ found = false;
11
+ constructor(marker) {
12
+ this.marker = marker;
13
+ }
14
+ /** Whether the stream has carried the marker. */
15
+ get seen() {
16
+ return this.found;
17
+ }
18
+ /** True exactly once: for the chunk that completes the marker. */
19
+ feed(chunk) {
20
+ if (this.found)
21
+ return false;
22
+ const window = Buffer.concat([this.tail, chunk]);
23
+ if (window.includes(this.marker)) {
24
+ this.found = true;
25
+ this.tail = Buffer.alloc(0);
26
+ return true;
27
+ }
28
+ // Keep a copy of only what could still begin a split marker: a view would pin the whole
29
+ // chunk for as long as the watcher lives, as an unresolved probe's reaper retains it.
30
+ const keep = this.marker.length - 1;
31
+ this.tail = Buffer.from(window.subarray(Math.max(0, window.length - keep)));
32
+ return false;
33
+ }
34
+ }
35
+ //# sourceMappingURL=stream-marker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-marker.js","sourceRoot":"","sources":["../../src/runtime/stream-marker.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,OAAO,mBAAmB;IACb,MAAM,CAAS;IACxB,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,KAAK,GAAG,KAAK,CAAC;IAEtB,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,iDAAiD;IACjD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,kEAAkE;IAClE,IAAI,CAAC,KAAa;QAChB,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;QACjD,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,wFAAwF;QACxF,sFAAsF;QACtF,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5E,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,16 @@
1
+ import type { UpdateAdapter } from "./lock.ts";
2
+ import { type LeaseOwner } from "./owner.ts";
3
+ type Acquisition = {
4
+ readonly adapter: UpdateAdapter;
5
+ readonly leasePath: string;
6
+ readonly owner: LeaseOwner;
7
+ readonly completionMarkerPath: string;
8
+ readonly pollMs: number;
9
+ readonly staleMs: number;
10
+ readonly waitUntilMs: number;
11
+ readonly claim: () => Promise<boolean>;
12
+ };
13
+ /** True grants update ownership; false means no update lease acquired. */
14
+ export declare function acquireUpdateLease({ adapter, leasePath, owner, completionMarkerPath, pollMs, staleMs, waitUntilMs, claim, }: Acquisition): Promise<boolean>;
15
+ export {};
16
+ //# sourceMappingURL=acquire.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acquire.d.ts","sourceRoot":"","sources":["../../../src/runtime/update/acquire.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,KAAK,UAAU,EAAgB,MAAM,YAAY,CAAC;AAG3D,KAAK,WAAW,GAAG;IACjB,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CACxC,CAAC;AAEF,0EAA0E;AAC1E,wBAAsB,kBAAkB,CAAC,EACvC,OAAO,EACP,SAAS,EACT,KAAK,EACL,oBAAoB,EACpB,MAAM,EACN,OAAO,EACP,WAAW,EACX,KAAK,GACN,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CA6ChC"}