@with-logic/elwood 0.2.0 → 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 (878) hide show
  1. package/CHANGELOG.md +571 -1
  2. package/CONTRIBUTING.md +3 -0
  3. package/README.md +6 -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 +9 -6
  561. package/dist/runtime/session/base.js.map +1 -1
  562. package/dist/runtime/session/commands.d.ts +6 -4
  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 +15 -13
  593. package/dist/runtime/session/picker.d.ts.map +1 -1
  594. package/dist/runtime/session/picker.js +49 -27
  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/cursor.d.ts +1 -1
  818. package/dist/terminal/cursor.d.ts.map +1 -1
  819. package/dist/terminal/cursor.js +36 -1
  820. package/dist/terminal/cursor.js.map +1 -1
  821. package/dist/terminal/headless.d.ts +1 -1
  822. package/dist/terminal/headless.d.ts.map +1 -1
  823. package/dist/terminal/headless.js +1 -3
  824. package/dist/terminal/headless.js.map +1 -1
  825. package/docs/cli-behavior.md +1218 -28
  826. package/docs/cli.md +2 -0
  827. package/docs/codex/cli.md +4 -2
  828. package/docs/embedding.md +7 -0
  829. package/docs/performance/terminal-engines.md +88 -0
  830. package/docs/performance.md +120 -0
  831. package/package.json +4 -4
  832. package/prd/04-architecture.md +32 -0
  833. package/prd/05-api/5.1-starting-claude.md +17 -1
  834. package/prd/05-api/5.2-resuming-claude.md +5 -0
  835. package/prd/05-api/5.3-claude-session-api.md +267 -40
  836. package/prd/05-api/5.4-events.md +77 -10
  837. package/prd/05-api/5.5-starting-codex.md +3 -1
  838. package/prd/05-api/5.6-resuming-codex.md +4 -1
  839. package/prd/05-api/5.7-codex-session-api.md +87 -5
  840. package/prd/05-api/5.8-session-api.md +32 -1
  841. package/prd/06-claude-hook-bridge.md +2 -0
  842. package/prd/07a-codex-hook-bridge.md +5 -0
  843. package/prd/08-state.md +63 -7
  844. package/prd/09-lifecycle.md +126 -35
  845. package/prd/10-errors.md +11 -4
  846. package/prd/12-e2e.md +81 -0
  847. package/prd/12a-cli.md +63 -9
  848. package/prd/14-conformance.md +52 -35
  849. package/prd/16-maintainer-review.md +11 -0
  850. package/dist/claude/model-composer.d.ts +0 -2
  851. package/dist/claude/model-composer.d.ts.map +0 -1
  852. package/dist/claude/model-composer.js +0 -12
  853. package/dist/claude/model-composer.js.map +0 -1
  854. package/dist/claude/transcript/drain.d.ts +0 -33
  855. package/dist/claude/transcript/drain.d.ts.map +0 -1
  856. package/dist/claude/transcript/drain.js +0 -56
  857. package/dist/claude/transcript/drain.js.map +0 -1
  858. package/dist/codex/session/cli-exit.d.ts +0 -24
  859. package/dist/codex/session/cli-exit.d.ts.map +0 -1
  860. package/dist/codex/session/cli-exit.js +0 -43
  861. package/dist/codex/session/cli-exit.js.map +0 -1
  862. package/dist/codex/transcript/drain.d.ts +0 -30
  863. package/dist/codex/transcript/drain.d.ts.map +0 -1
  864. package/dist/codex/transcript/drain.js +0 -48
  865. package/dist/codex/transcript/drain.js.map +0 -1
  866. package/dist/runtime/probe-cleanup.d.ts.map +0 -1
  867. package/dist/runtime/probe-cleanup.js.map +0 -1
  868. package/dist/runtime/probe.d.ts +0 -11
  869. package/dist/runtime/probe.d.ts.map +0 -1
  870. package/dist/runtime/probe.js +0 -113
  871. package/dist/runtime/probe.js.map +0 -1
  872. package/dist/runtime/session/foreign-picker.d.ts +0 -8
  873. package/dist/runtime/session/foreign-picker.d.ts.map +0 -1
  874. package/dist/runtime/session/foreign-picker.js +0 -18
  875. package/dist/runtime/session/foreign-picker.js.map +0 -1
  876. package/dist/runtime/session/picker-input.d.ts +0 -17
  877. package/dist/runtime/session/picker-input.d.ts.map +0 -1
  878. package/dist/runtime/session/picker-input.js.map +0 -1
@@ -0,0 +1,14 @@
1
+ import { causeDetails, ElwoodError, elwoodError } from "../../core/errors.js";
2
+ import { prepareStateDir } from "../../state/store.js";
3
+ /** State errors retain their identity; native I/O errors gain the adapter startup contract. */
4
+ export function prepareLaunchState(agent, stateDir, setup) {
5
+ try {
6
+ prepareStateDir(stateDir, setup);
7
+ }
8
+ catch (error) {
9
+ if (error instanceof ElwoodError)
10
+ throw error;
11
+ throw elwoodError(`${agent}_start_failed`, `Could not prepare ${agent} session state.`, causeDetails(error));
12
+ }
13
+ }
14
+ //# sourceMappingURL=prepare-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepare-state.js","sourceRoot":"","sources":["../../../src/runtime/session/prepare-state.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAsB,MAAM,sBAAsB,CAAC;AAE3E,+FAA+F;AAC/F,MAAM,UAAU,kBAAkB,CAChC,KAAsB,EACtB,QAAgB,EAChB,KAAoB;IAEpB,IAAI,CAAC;QACH,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,WAAW;YAAE,MAAM,KAAK,CAAC;QAC9C,MAAM,WAAW,CACf,GAAG,KAAK,eAAe,EACvB,qBAAqB,KAAK,iBAAiB,EAC3C,YAAY,CAAC,KAAK,CAAC,CACpB,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -9,11 +9,11 @@ import type { PersistedLoopDefinition } from "../../state/loop-store.ts";
9
9
  import type { SessionRuntime } from "../../state/runtime-paths.ts";
10
10
  import type { SessionRecord } from "../../state/store.ts";
11
11
  import { SessionLifecycle } from "./lifecycle.ts";
12
- import type { PickerInputOwnership } from "./picker-input.ts";
12
+ import type { SessionInputOwnership } from "./session-input.ts";
13
13
  import type { SessionStatusEmitter } from "./status-wiring.ts";
14
14
  export declare abstract class QuestionSessionBase extends SessionLifecycle {
15
15
  private readonly questions;
16
- protected constructor(agent: ElwoodAgentKind, record: SessionRecord, stateDir: string, runtime: SessionRuntime, pty: PtyProcess, input: PickerInputOwnership, events: SessionStatusEmitter, replay: TerminalReplayBuffer, loops: readonly PersistedLoopDefinition[]);
16
+ protected constructor(agent: ElwoodAgentKind, record: SessionRecord, stateDir: string, runtime: SessionRuntime, pty: PtyProcess, input: SessionInputOwnership, events: SessionStatusEmitter, replay: TerminalReplayBuffer, loops: readonly PersistedLoopDefinition[]);
17
17
  protected configureQuestions(factory: (registry: QuestionRegistry) => QuestionAdapter): void;
18
18
  protected revokeQuestionAnswer(): void;
19
19
  protected isInputBlocked(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"questions.d.ts","sourceRoot":"","sources":["../../../src/runtime/session/questions.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EACV,oBAAoB,EACpB,2BAA2B,EAC5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,8BAAsB,mBAAoB,SAAQ,gBAAgB;IAChE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,SAAS,aACP,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,oBAAoB,EAC5B,KAAK,EAAE,SAAS,uBAAuB,EAAE;IAY3C,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,eAAe,GAAG,IAAI;IAG5F,SAAS,CAAC,oBAAoB,IAAI,IAAI;cAGnB,cAAc,IAAI,OAAO;IAG5C,aAAa;IAGb,eAAe,CACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,SAAS,oBAAoB,EAAE,EACxC,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,IAAI,CAAC;CAGjB"}
1
+ {"version":3,"file":"questions.d.ts","sourceRoot":"","sources":["../../../src/runtime/session/questions.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAEvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACzE,OAAO,KAAK,EACV,oBAAoB,EACpB,2BAA2B,EAC5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,8BAAsB,mBAAoB,SAAQ,gBAAgB;IAChE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,SAAS,aACP,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,aAAa,EACrB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,qBAAqB,EAC5B,MAAM,EAAE,oBAAoB,EAC5B,MAAM,EAAE,oBAAoB,EAC5B,KAAK,EAAE,SAAS,uBAAuB,EAAE;IAY3C,SAAS,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,eAAe,GAAG,IAAI;IAG5F,SAAS,CAAC,oBAAoB,IAAI,IAAI;cAGnB,cAAc,IAAI,OAAO;IAG5C,aAAa;IAGb,eAAe,CACb,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,SAAS,oBAAoB,EAAE,EACxC,OAAO,CAAC,EAAE,2BAA2B,GACpC,OAAO,CAAC,IAAI,CAAC;CAGjB"}
@@ -1 +1 @@
1
- {"version":3,"file":"questions.js","sourceRoot":"","sources":["../../../src/runtime/session/questions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAWtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAIlD,MAAM,OAAgB,mBAAoB,SAAQ,gBAAgB;IAC/C,SAAS,CAAmB;IAC7C,YACE,KAAsB,EACtB,MAAqB,EACrB,QAAgB,EAChB,OAAuB,EACvB,GAAe,EACf,KAA2B,EAC3B,MAA4B,EAC5B,MAA4B,EAC5B,KAAyC;QAEzC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3E,IAAI,CAAC,SAAS,GAAG,IAAI,gBAAgB,CACnC,KAAK,EACL,MAAM,CAAC,eAAe,EACtB,MAAM,EACN,KAAK,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CACpB,CAAC;IACJ,CAAC;IACS,kBAAkB,CAAC,OAAwD;QACnF,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IACS,oBAAoB;QAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;IAC1B,CAAC;IACkB,cAAc;QAC/B,OAAO,KAAK,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;IAChE,CAAC;IACD,aAAa;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IACD,eAAe,CACb,SAAiB,EACjB,OAAwC,EACxC,OAAqC;QAErC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAClF,CAAC;CACF"}
1
+ {"version":3,"file":"questions.js","sourceRoot":"","sources":["../../../src/runtime/session/questions.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AAWtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAIlD,MAAM,OAAgB,mBAAoB,SAAQ,gBAAgB;IAC/C,SAAS,CAAmB;IAC7C,YACE,KAAsB,EACtB,MAAqB,EACrB,QAAgB,EAChB,OAAuB,EACvB,GAAe,EACf,KAA4B,EAC5B,MAA4B,EAC5B,MAA4B,EAC5B,KAAyC;QAEzC,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3E,IAAI,CAAC,SAAS,GAAG,IAAI,gBAAgB,CACnC,KAAK,EACL,MAAM,CAAC,eAAe,EACtB,MAAM,EACN,KAAK,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,EACpB,IAAI,CAAC,OAAO,CAAC,MAAM,CACpB,CAAC;IACJ,CAAC;IACS,kBAAkB,CAAC,OAAwD;QACnF,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IACS,oBAAoB;QAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;IAC1B,CAAC;IACkB,cAAc;QAC/B,OAAO,KAAK,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;IAChE,CAAC;IACD,aAAa;QACX,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IACD,eAAe,CACb,SAAiB,EACjB,OAAwC,EACxC,OAAqC;QAErC,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAClF,CAAC;CACF"}
@@ -12,10 +12,19 @@ import { type InitialReady } from "../readiness/initial-ready.ts";
12
12
  export type ReadinessGate = {
13
13
  readonly ready: InitialReady;
14
14
  readonly isHeld: () => boolean;
15
- readonly observeFrameHold: (facts: ComposerReadyFacts, trustInputBlocking?: boolean) => void;
16
- /** Per rendered frame: update the blocking gate, reconcile a deferred mark, and
17
- * (on resume) mark readiness on the first quiet, non-blocking composer. */
18
- readonly observeReadinessFrame: (facts: ComposerReadyFacts, trustInputBlocking?: boolean) => void;
15
+ readonly observeFrameHold: (facts: ComposerReadyFacts, trustInputBlocking: boolean, frame: string) => void;
16
+ /** Per rendered frame: update the blocking gate, reconcile a deferred or waiting mark,
17
+ * and (on resume) mark readiness on the first quiet, non-blocking composer. */
18
+ readonly observeReadinessFrame: (facts: ComposerReadyFacts, trustInputBlocking: boolean, frame: string) => void;
19
19
  };
20
- export declare function createReadinessGate(onReady: () => void, resumed: boolean): ReadinessGate;
20
+ /**
21
+ * An adapter's `composer.configured`, when supplied, proves a rendered composer belongs
22
+ * to a configured session rather than to the boot screen (Codex's model footer). The
23
+ * initial deadline then marks only onto such a frame (C-API-28). The latest frame is
24
+ * checked only when readiness asks, never on every render.
25
+ */
26
+ export declare function createReadinessGate(onReady: () => void, resumed: boolean, composer?: {
27
+ readonly configured: (frame: string) => boolean;
28
+ readonly onBackstopRelease: () => void;
29
+ }): ReadinessGate;
21
30
  //# sourceMappingURL=readiness.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"readiness.d.ts","sourceRoot":"","sources":["../../../src/runtime/session/readiness.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EACL,KAAK,YAAY,EAGlB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,CAAC,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7F;+EAC2E;IAC3E,QAAQ,CAAC,qBAAqB,EAAE,CAAC,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;CACnG,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,aAAa,CAqBxF"}
1
+ {"version":3,"file":"readiness.d.ts","sourceRoot":"","sources":["../../../src/runtime/session/readiness.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,EAEL,KAAK,YAAY,EAGlB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,CACzB,KAAK,EAAE,kBAAkB,EACzB,kBAAkB,EAAE,OAAO,EAC3B,KAAK,EAAE,MAAM,KACV,IAAI,CAAC;IACV;mFAC+E;IAC/E,QAAQ,CAAC,qBAAqB,EAAE,CAC9B,KAAK,EAAE,kBAAkB,EACzB,kBAAkB,EAAE,OAAO,EAC3B,KAAK,EAAE,MAAM,KACV,IAAI,CAAC;CACX,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,IAAI,EACnB,OAAO,EAAE,OAAO,EAChB,QAAQ,CAAC,EAAE;IACT,QAAQ,CAAC,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;IAChD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,IAAI,CAAC;CACxC,GACA,aAAa,CAoCf"}
@@ -8,25 +8,41 @@
8
8
  * Implements PRD §5.3 (C-API-28).
9
9
  */
10
10
  import { initialReady, markReadyOnResumeComposer, } from "../readiness/initial-ready.js";
11
- export function createReadinessGate(onReady, resumed) {
11
+ /**
12
+ * An adapter's `composer.configured`, when supplied, proves a rendered composer belongs
13
+ * to a configured session rather than to the boot screen (Codex's model footer). The
14
+ * initial deadline then marks only onto such a frame (C-API-28). The latest frame is
15
+ * checked only when readiness asks, never on every render.
16
+ */
17
+ export function createReadinessGate(onReady, resumed, composer) {
12
18
  let readinessHeld = false;
13
- const observeFrameHold = (facts, trustInputBlocking = false) => {
19
+ let latest;
20
+ const observeFrameHold = (facts, trustInputBlocking, frame) => {
14
21
  // A dialog's deferred mark waits for idle; ordinary cold-start work still
15
22
  // retains the existing hook/deadline path instead of waiting on itself.
16
23
  readinessHeld =
17
24
  facts.blocking_prompt_visible ||
18
25
  trustInputBlocking ||
19
26
  (readinessHeld && (facts.working_visible === true || !facts.composer_visible));
27
+ latest = { facts, frame };
28
+ };
29
+ // Work may animate forever (a failing MCP server's retry spinner), so only the
30
+ // configured composer itself, not idleness, is required before the deadline marks.
31
+ const evidence = composer && {
32
+ shown: () => latest?.facts.composer_visible === true &&
33
+ !latest.facts.blocking_prompt_visible &&
34
+ composer.configured(latest.frame),
35
+ onBackstopRelease: composer.onBackstopRelease,
20
36
  };
21
- const ready = initialReady(onReady, undefined, () => readinessHeld);
37
+ const ready = initialReady(onReady, undefined, () => readinessHeld, evidence);
22
38
  return {
23
39
  ready,
24
40
  isHeld: () => readinessHeld,
25
41
  observeFrameHold,
26
- observeReadinessFrame: (facts, trustInputBlocking = false) => {
27
- observeFrameHold(facts, trustInputBlocking);
42
+ observeReadinessFrame: (facts, trustInputBlocking, frame) => {
43
+ observeFrameHold(facts, trustInputBlocking, frame);
28
44
  markReadyOnResumeComposer(ready, resumed, facts, readinessHeld);
29
- ready.retryWhenReleased(readinessHeld); // reconcile only after an idle clearance frame
45
+ ready.retryWhenReleased(readinessHeld);
30
46
  },
31
47
  };
32
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"readiness.js","sourceRoot":"","sources":["../../../src/runtime/session/readiness.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAEL,YAAY,EACZ,yBAAyB,GAC1B,MAAM,+BAA+B,CAAC;AAWvC,MAAM,UAAU,mBAAmB,CAAC,OAAmB,EAAE,OAAgB;IACvE,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,MAAM,gBAAgB,GAAG,CAAC,KAAyB,EAAE,kBAAkB,GAAG,KAAK,EAAE,EAAE;QACjF,0EAA0E;QAC1E,wEAAwE;QACxE,aAAa;YACX,KAAK,CAAC,uBAAuB;gBAC7B,kBAAkB;gBAClB,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,eAAe,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACnF,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC;IACpE,OAAO;QACL,KAAK;QACL,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa;QAC3B,gBAAgB;QAChB,qBAAqB,EAAE,CAAC,KAAK,EAAE,kBAAkB,GAAG,KAAK,EAAE,EAAE;YAC3D,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;YAC5C,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;YAChE,KAAK,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC,CAAC,+CAA+C;QACzF,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"readiness.js","sourceRoot":"","sources":["../../../src/runtime/session/readiness.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAGL,YAAY,EACZ,yBAAyB,GAC1B,MAAM,+BAA+B,CAAC;AAmBvC;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAAmB,EACnB,OAAgB,EAChB,QAGC;IAED,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,MAAgE,CAAC;IACrE,MAAM,gBAAgB,GAAG,CACvB,KAAyB,EACzB,kBAA2B,EAC3B,KAAa,EACb,EAAE;QACF,0EAA0E;QAC1E,wEAAwE;QACxE,aAAa;YACX,KAAK,CAAC,uBAAuB;gBAC7B,kBAAkB;gBAClB,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,eAAe,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACjF,MAAM,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC,CAAC;IACF,+EAA+E;IAC/E,mFAAmF;IACnF,MAAM,QAAQ,GAA2C,QAAQ,IAAI;QACnE,KAAK,EAAE,GAAG,EAAE,CACV,MAAM,EAAE,KAAK,CAAC,gBAAgB,KAAK,IAAI;YACvC,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB;YACrC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC;QACnC,iBAAiB,EAAE,QAAQ,CAAC,iBAAiB;KAC9C,CAAC;IACF,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC9E,OAAO;QACL,KAAK;QACL,MAAM,EAAE,GAAG,EAAE,CAAC,aAAa;QAC3B,gBAAgB;QAChB,qBAAqB,EAAE,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,EAAE;YAC1D,gBAAgB,CAAC,KAAK,EAAE,kBAAkB,EAAE,KAAK,CAAC,CAAC;YACnD,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;YAChE,KAAK,CAAC,iBAAiB,CAAC,aAAa,CAAC,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -4,12 +4,13 @@
4
4
  * - `bestEffort()` for the native unsolicited-exit callback: a reap failure must
5
5
  * never throw out of that callback, so it is contained and RETURNED as a
6
6
  * live `reap_failed` warning (emitted once when observed), never silently dropped.
7
- * - `orThrow()` for an explicit `stop()`/`kill()` on an already-terminal session:
8
- * it must NOT swallow — it throws a typed `termination_failed` so the caller
9
- * rejects with an ElwoodError (C-ERR-01) and teardown can retry the
10
- * still-unlatched reap.
11
- * `reaper` exposes the underlying one-shot for `teardown`'s retry step and the
12
- * `terminatePty` termination path, which own their own failure handling.
7
+ * - `orThrow()` for an explicit `stop()`/`kill()` on an already-terminal session
8
+ * and for `teardown`'s retry step: it must NOT swallow — it throws a typed
9
+ * `termination_failed` (with its errno and the leader's process-group id) so
10
+ * the caller rejects with an ElwoodError (C-ERR-01), and the reap stays
11
+ * unlatched for a later retry.
12
+ * `reaper` exposes the underlying one-shot for the `terminatePty` termination path,
13
+ * which owns its own failure handling.
13
14
  */
14
15
  import type { ElwoodAgentKind } from "../../core/activity/index.ts";
15
16
  import type { ElwoodWarningEvent } from "../../core/types.ts";
@@ -22,7 +23,10 @@ export declare class SessionReapPolicy {
22
23
  constructor(agent: ElwoodAgentKind, elwoodSessionId: string, leaderPid: number);
23
24
  /** Contain a native-exit reap failure as a live warning to emit; never throw. */
24
25
  bestEffort(): ElwoodWarningEvent | undefined;
25
- /** Reap on explicit shutdown; wrap any failure as a typed `termination_failed`. */
26
+ /**
27
+ * Reap on explicit shutdown, including an unresolved detached sweep; wrap any failure
28
+ * as a typed `termination_failed`.
29
+ */
26
30
  orThrow(): void;
27
31
  }
28
32
  //# sourceMappingURL=reap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reap.d.ts","sourceRoot":"","sources":["../../../src/runtime/session/reap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAO9E,iFAAiF;IACjF,UAAU,IAAI,kBAAkB,GAAG,SAAS;IAS5C,mFAAmF;IACnF,OAAO,IAAI,IAAI;CAUhB"}
1
+ {"version":3,"file":"reap.d.ts","sourceRoot":"","sources":["../../../src/runtime/session/reap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGzD,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAkB;IACxC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAO9E,iFAAiF;IACjF,UAAU,IAAI,kBAAkB,GAAG,SAAS;IAS5C;;;OAGG;IACH,OAAO,IAAI,IAAI;CAehB"}
@@ -4,16 +4,18 @@
4
4
  * - `bestEffort()` for the native unsolicited-exit callback: a reap failure must
5
5
  * never throw out of that callback, so it is contained and RETURNED as a
6
6
  * live `reap_failed` warning (emitted once when observed), never silently dropped.
7
- * - `orThrow()` for an explicit `stop()`/`kill()` on an already-terminal session:
8
- * it must NOT swallow — it throws a typed `termination_failed` so the caller
9
- * rejects with an ElwoodError (C-ERR-01) and teardown can retry the
10
- * still-unlatched reap.
11
- * `reaper` exposes the underlying one-shot for `teardown`'s retry step and the
12
- * `terminatePty` termination path, which own their own failure handling.
7
+ * - `orThrow()` for an explicit `stop()`/`kill()` on an already-terminal session
8
+ * and for `teardown`'s retry step: it must NOT swallow — it throws a typed
9
+ * `termination_failed` (with its errno and the leader's process-group id) so
10
+ * the caller rejects with an ElwoodError (C-ERR-01), and the reap stays
11
+ * unlatched for a later retry.
12
+ * `reaper` exposes the underlying one-shot for the `terminatePty` termination path,
13
+ * which owns its own failure handling.
13
14
  */
14
15
  import { reapFailureWarning } from "../../core/activity/index.js";
15
- import { causeDetails, elwoodError } from "../../core/errors.js";
16
+ import { causeDetails, elwoodError, toError } from "../../core/errors.js";
16
17
  import { SessionReaper } from "../shutdown/reap-tree.js";
18
+ import { unconfirmedGroupsDetail } from "../shutdown/terminate.js";
17
19
  export class SessionReapPolicy {
18
20
  reaper;
19
21
  agent;
@@ -35,14 +37,18 @@ export class SessionReapPolicy {
35
37
  return reapFailureWarning(this.agent, this.elwoodSessionId, this.leaderPid, error);
36
38
  }
37
39
  }
38
- /** Reap on explicit shutdown; wrap any failure as a typed `termination_failed`. */
40
+ /**
41
+ * Reap on explicit shutdown, including an unresolved detached sweep; wrap any failure
42
+ * as a typed `termination_failed`.
43
+ */
39
44
  orThrow() {
40
45
  try {
41
- this.reaper.reap();
46
+ this.reaper.reapAndThrowOnDetachedSweepFailure();
42
47
  }
43
48
  catch (error) {
44
- throw elwoodError("termination_failed", "Could not reap the PTY process group.", {
49
+ throw elwoodError("termination_failed", "Could not confirm the PTY process tree was reaped.", {
45
50
  ...causeDetails(error),
51
+ ...unconfirmedGroupsDetail(toError(error)),
46
52
  processGroupId: this.leaderPid,
47
53
  });
48
54
  }
@@ -1 +1 @@
1
- {"version":3,"file":"reap.js","sourceRoot":"","sources":["../../../src/runtime/session/reap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,MAAM,OAAO,iBAAiB;IACnB,MAAM,CAAgB;IACd,KAAK,CAAkB;IACvB,eAAe,CAAS;IACxB,SAAS,CAAS;IAEnC,YAAY,KAAsB,EAAE,eAAuB,EAAE,SAAiB;QAC5E,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED,iFAAiF;IACjF,UAAU;QACR,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED,mFAAmF;IACnF,OAAO;QACL,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,WAAW,CAAC,oBAAoB,EAAE,uCAAuC,EAAE;gBAC/E,GAAG,YAAY,CAAC,KAAK,CAAC;gBACtB,cAAc,EAAE,IAAI,CAAC,SAAS;aAC/B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"reap.js","sourceRoot":"","sources":["../../../src/runtime/session/reap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE1E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAEnE,MAAM,OAAO,iBAAiB;IACnB,MAAM,CAAgB;IACd,KAAK,CAAkB;IACvB,eAAe,CAAS;IACxB,SAAS,CAAS;IAEnC,YAAY,KAAsB,EAAE,eAAuB,EAAE,SAAiB;QAC5E,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,aAAa,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED,iFAAiF;IACjF,UAAU;QACR,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACnB,OAAO,SAAS,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,OAAO;QACL,IAAI,CAAC;YACH,IAAI,CAAC,MAAM,CAAC,kCAAkC,EAAE,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,WAAW,CACf,oBAAoB,EACpB,oDAAoD,EACpD;gBACE,GAAG,YAAY,CAAC,KAAK,CAAC;gBACtB,GAAG,uBAAuB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC1C,cAAc,EAAE,IAAI,CAAC,SAAS;aAC/B,CACF,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Session runtime cleanup, shared by the Claude and Codex adapters (PRD §9.4,
3
+ * C-LIFE-12): stop the hook bridge, finish the transcript watcher, then drain and
4
+ * dispose the terminal, in that order. It runs on every shutdown and on an unsolicited
5
+ * exit, including a shutdown whose PTY could not be terminated, so the watcher stops
6
+ * polling even while the PTY lives on.
7
+ */
8
+ import type { PtyProcess } from "../../pty/types.ts";
9
+ import type { ElwoodTerminal } from "../../terminal/headless.ts";
10
+ /** What a session's runtime cleanup stops beyond its terminal. */
11
+ export type SessionRuntimeParts = {
12
+ readonly stopBridge: () => Promise<void>;
13
+ /** One bounded final flush of what the transcript already holds, then no more polling. */
14
+ readonly finishTranscriptWatcher: () => Promise<void> | void;
15
+ };
16
+ /** Every step runs even if an earlier one rejects, so nothing is left running (§9.4). */
17
+ export declare function stopSessionRuntime(parts: SessionRuntimeParts, terminal: ElwoodTerminal, pty: Pick<PtyProcess, "onData">): Promise<void>;
18
+ //# sourceMappingURL=runtime-cleanup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-cleanup.d.ts","sourceRoot":"","sources":["../../../src/runtime/session/runtime-cleanup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAIjE,kEAAkE;AAClE,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,0FAA0F;IAC1F,QAAQ,CAAC,uBAAuB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC9D,CAAC;AAEF,yFAAyF;AACzF,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,mBAAmB,EAC1B,QAAQ,EAAE,cAAc,EACxB,GAAG,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,GAC9B,OAAO,CAAC,IAAI,CAAC,CAMf"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Session runtime cleanup, shared by the Claude and Codex adapters (PRD §9.4,
3
+ * C-LIFE-12): stop the hook bridge, finish the transcript watcher, then drain and
4
+ * dispose the terminal, in that order. It runs on every shutdown and on an unsolicited
5
+ * exit, including a shutdown whose PTY could not be terminated, so the watcher stops
6
+ * polling even while the PTY lives on.
7
+ */
8
+ import { runCleanupSteps } from "../shutdown/teardown.js";
9
+ import { drainAndDisposeTerminal } from "../shutdown/terminal.js";
10
+ /** Every step runs even if an earlier one rejects, so nothing is left running (§9.4). */
11
+ export function stopSessionRuntime(parts, terminal, pty) {
12
+ return runCleanupSteps([
13
+ () => parts.stopBridge(),
14
+ () => parts.finishTranscriptWatcher(),
15
+ () => drainAndDisposeTerminal(terminal, pty),
16
+ ]);
17
+ }
18
+ //# sourceMappingURL=runtime-cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-cleanup.js","sourceRoot":"","sources":["../../../src/runtime/session/runtime-cleanup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AASlE,yFAAyF;AACzF,MAAM,UAAU,kBAAkB,CAChC,KAA0B,EAC1B,QAAwB,EACxB,GAA+B;IAE/B,OAAO,eAAe,CAAC;QACrB,GAAG,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE;QACxB,GAAG,EAAE,CAAC,KAAK,CAAC,uBAAuB,EAAE;QACrC,GAAG,EAAE,CAAC,uBAAuB,CAAC,QAAQ,EAAE,GAAG,CAAC;KAC7C,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * One session's input ownership: caller keys reach the terminal through `caller`, and
3
+ * Elwood's operations write through `automated`. Startup responders write through their
4
+ * own guarded writers, whose sends run inside `withAutomatedInput`, the same scope.
5
+ * Raw caller input aborts `signal()`, which revokes the automation holding the terminal at
6
+ * that moment: picker operations (C-API-55), composer cleanup, and native question answers.
7
+ * Listeners registered with `onCallerInput` hear of it too, which hands the session's
8
+ * startup prompts to the caller (C-TRUST-01, C-CODEX-12).
9
+ */
10
+ import type { EmptyComposerObserver } from "../../core/input/clear-ack.ts";
11
+ import { ComposerCleanup } from "../../core/input/composer-cleanup.ts";
12
+ import type { ElwoodTerminal } from "../../terminal/headless.ts";
13
+ type AutomatedWork = () => Promise<void>;
14
+ /**
15
+ * Run `listener` whenever caller input revokes automation in this terminal's session,
16
+ * until the returned function unsubscribes it.
17
+ */
18
+ export declare function onCallerInput(terminal: {
19
+ readonly xterm: object;
20
+ }, listener: () => void): () => void;
21
+ /** Preserve the same ownership scope for startup writers that retain their own input policy. */
22
+ export declare function withAutomatedInput(terminal: ElwoodTerminal, work: AutomatedWork): Promise<void>;
23
+ export declare class SessionInputOwnership {
24
+ readonly caller: ElwoodTerminal;
25
+ readonly automated: ElwoodTerminal;
26
+ private current;
27
+ constructor(inner: ElwoodTerminal);
28
+ composerCleanup(blocked: () => boolean, closing: AbortSignal, observeEmpty: EmptyComposerObserver): ComposerCleanup["run"];
29
+ signal(): AbortSignal;
30
+ }
31
+ export {};
32
+ //# sourceMappingURL=session-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-input.d.ts","sourceRoot":"","sources":["../../../src/runtime/session/session-input.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,sCAAsC,CAAC;AAEvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjE,KAAK,aAAa,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;AASzC;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EACpC,QAAQ,EAAE,MAAM,IAAI,GACnB,MAAM,IAAI,CAMZ;AAED,gGAAgG;AAChG,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAE/F;AAED,qBAAa,qBAAqB;IAChC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,cAAc,CAAC;IACnC,OAAO,CAAC,OAAO,CAAyB;gBAE5B,KAAK,EAAE,cAAc;IA4CjC,eAAe,CACb,OAAO,EAAE,MAAM,OAAO,EACtB,OAAO,EAAE,WAAW,EACpB,YAAY,EAAE,qBAAqB,GAClC,eAAe,CAAC,KAAK,CAAC;IAWzB,MAAM,IAAI,WAAW;CAGtB"}
@@ -1,27 +1,55 @@
1
1
  import { ComposerCleanup } from "../../core/input/composer-cleanup.js";
2
- import { pickerIntervention } from "../../core/models/intervention.js";
2
+ import { callerInputIntervention } from "../../core/models/intervention.js";
3
3
  const automationScopes = new WeakMap();
4
+ /** Keyed by the session's xterm, which every terminal view of that session shares. */
5
+ const callerInputListeners = new WeakMap();
6
+ /**
7
+ * Run `listener` whenever caller input revokes automation in this terminal's session,
8
+ * until the returned function unsubscribes it.
9
+ */
10
+ export function onCallerInput(terminal, listener) {
11
+ const listeners = callerInputListeners.get(terminal.xterm);
12
+ listeners?.add(listener);
13
+ return () => {
14
+ listeners?.delete(listener);
15
+ };
16
+ }
4
17
  /** Preserve the same ownership scope for startup writers that retain their own input policy. */
5
18
  export function withAutomatedInput(terminal, work) {
6
19
  return automationScopes.get(terminal.xterm)?.(work) ?? work();
7
20
  }
8
- export class PickerInputOwnership {
21
+ export class SessionInputOwnership {
9
22
  caller;
10
23
  automated;
11
24
  current = new AbortController();
12
25
  constructor(inner) {
13
26
  let automating = false;
27
+ const listeners = new Set();
28
+ callerInputListeners.set(inner.xterm, listeners);
29
+ // Runs before the caller's keys are written: picker operations and the startup
30
+ // answers registered through onCallerInput stop, so none of their writes follow them.
14
31
  const revoke = () => {
15
- this.current.abort(pickerIntervention());
32
+ this.current.abort(callerInputIntervention());
16
33
  this.current = new AbortController();
34
+ for (const listener of listeners)
35
+ listener();
17
36
  };
18
37
  // onData also carries parser-generated protocol replies; only input invocations
19
38
  // represent caller keys. Native startup queries must not revoke draft ownership.
20
39
  const input = inner.xterm.input.bind(inner.xterm);
21
40
  inner.xterm.input = (data, wasUserInput) => {
22
- if (!automating)
23
- revoke();
24
- input(data, wasUserInput);
41
+ // Each write consumes the automation marker while xterm runs it, so input that an
42
+ // `onData` listener sends from inside an automated write is the caller's and revokes.
43
+ const automated = automating;
44
+ automating = false;
45
+ try {
46
+ if (!automated)
47
+ revoke();
48
+ input(data, wasUserInput);
49
+ }
50
+ finally {
51
+ automating = automated;
52
+ }
25
53
  };
26
54
  const automate = (work) => {
27
55
  const prior = automating;
@@ -71,4 +99,4 @@ function view(inner, sendInput) {
71
99
  dispose: () => inner.dispose(),
72
100
  };
73
101
  }
74
- //# sourceMappingURL=picker-input.js.map
102
+ //# sourceMappingURL=session-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-input.js","sourceRoot":"","sources":["../../../src/runtime/session/session-input.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
- /** Binds one session's lifecycle callbacks to coordinated shutdown (PRD §9.4). */
1
+ /** Binds one session's lifecycle callbacks to coordinated shutdown (PRD §9.1, §9.4). */
2
2
  import type { ElwoodSessionStatus } from "../../core/types.ts";
3
3
  import type { PtyProcess } from "../../pty/types.ts";
4
4
  import type { SessionRuntime } from "../../state/runtime-paths.ts";
5
+ import type { SessionStartupCleanup } from "../startup/cleanup.ts";
5
6
  import type { StatusEvidenceKind } from "../status-evidence.ts";
6
7
  import type { SessionLoops } from "./loops.ts";
7
8
  import type { SessionReapPolicy } from "./reap.ts";
@@ -18,6 +19,7 @@ type ShutdownBindingInput = {
18
19
  readonly submitEvidence: (kind: StatusEvidenceKind) => void;
19
20
  };
20
21
  export declare class SessionShutdownBinding {
22
+ private readonly input;
21
23
  private pending;
22
24
  private readonly prepareClear;
23
25
  private readonly managed;
@@ -33,6 +35,15 @@ export declare class SessionShutdownBinding {
33
35
  /** Release from submitExit finally, even when terminal-status delivery throws. */
34
36
  completeExitFinalization(): void;
35
37
  private afterExitFinalization;
38
+ /**
39
+ * The session's share of a failed startup's cleanup (PRD §9.1, C-LIFE-10). `before`
40
+ * closes the session and pauses its loops. `pty.terminate` ends the PTY with the
41
+ * session's own one-shot reaper, the one its exit path reaps with, so the group is
42
+ * reaped once. Once the session has seen the PTY exit, the leader's pid may be reused,
43
+ * so the PTY is never signaled again: only that shared reaper runs, which does nothing
44
+ * if the exit's reap succeeded and retries it if it failed.
45
+ */
46
+ startupCleanupResources(closeSession: () => void, cancelReadiness: () => void): SessionStartupCleanup;
36
47
  exitEvidence(): ShutdownEvidence | "terminal_exited";
37
48
  }
38
49
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"shutdown-binding.d.ts","sourceRoot":"","sources":["../../../src/runtime/session/shutdown-binding.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAElF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAGnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEvE,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,MAAM,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,mBAAmB,CAAC;IAC3C,QAAQ,CAAC,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC7D,CAAC;AAEF,qBAAa,sBAAsB;IACjC,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAa;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiD;IAClF,OAAO,CAAC,uBAAuB,CAA2B;gBAE9C,KAAK,EAAE,oBAAoB;IAmCvC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKzB,8FAA8F;IAC9F,qBAAqB,IAAI,IAAI;IAM7B,kFAAkF;IAClF,wBAAwB,IAAI,IAAI;IAIhC,OAAO,CAAC,qBAAqB;IAY7B,YAAY,IAAI,gBAAgB,GAAG,iBAAiB;CAGrD"}
1
+ {"version":3,"file":"shutdown-binding.d.ts","sourceRoot":"","sources":["../../../src/runtime/session/shutdown-binding.ts"],"names":[],"mappings":"AAAA,wFAAwF;AAExF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAInE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAmB,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEvE,KAAK,oBAAoB,GAAG;IAC1B,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,MAAM,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,mBAAmB,CAAC;IAC3C,QAAQ,CAAC,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC7D,CAAC;AAEF,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,OAAO,CAA+B;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAa;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqC;IAC7D,OAAO,CAAC,gBAAgB,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiD;IAClF,OAAO,CAAC,uBAAuB,CAA2B;gBAE9C,KAAK,EAAE,oBAAoB;IAoCvC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKrB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKzB,8FAA8F;IAC9F,qBAAqB,IAAI,IAAI;IAM7B,kFAAkF;IAClF,wBAAwB,IAAI,IAAI;IAIhC,OAAO,CAAC,qBAAqB;IAY7B;;;;;;;OAOG;IACH,uBAAuB,CACrB,YAAY,EAAE,MAAM,IAAI,EACxB,eAAe,EAAE,MAAM,IAAI,GAC1B,qBAAqB;IAqBxB,YAAY,IAAI,gBAAgB,GAAG,iBAAiB;CAGrD"}
@@ -1,8 +1,10 @@
1
- /** Binds one session's lifecycle callbacks to coordinated shutdown (PRD §9.4). */
1
+ /** Binds one session's lifecycle callbacks to coordinated shutdown (PRD §9.1, §9.4). */
2
2
  import { removeSessionFiles } from "../../state/store.js";
3
3
  import { ShutdownCoordinator } from "../shutdown/coordinator.js";
4
+ import { terminatePty } from "../shutdown/terminate.js";
4
5
  import { managedShutdown } from "./shutdown.js";
5
6
  export class SessionShutdownBinding {
7
+ input;
6
8
  pending;
7
9
  prepareClear;
8
10
  managed;
@@ -10,6 +12,7 @@ export class SessionShutdownBinding {
10
12
  waitingShutdowns = new Map();
11
13
  resolveExitFinalization;
12
14
  constructor(input) {
15
+ this.input = input;
13
16
  this.prepareClear = () => input.loops.prepareClear();
14
17
  this.managed = managedShutdown(new ShutdownCoordinator(), () => ({
15
18
  pty: input.pty,
@@ -79,6 +82,35 @@ export class SessionShutdownBinding {
79
82
  this.waitingShutdowns.set(work, pending);
80
83
  return pending;
81
84
  }
85
+ /**
86
+ * The session's share of a failed startup's cleanup (PRD §9.1, C-LIFE-10). `before`
87
+ * closes the session and pauses its loops. `pty.terminate` ends the PTY with the
88
+ * session's own one-shot reaper, the one its exit path reaps with, so the group is
89
+ * reaped once. Once the session has seen the PTY exit, the leader's pid may be reused,
90
+ * so the PTY is never signaled again: only that shared reaper runs, which does nothing
91
+ * if the exit's reap succeeded and retries it if it failed.
92
+ */
93
+ startupCleanupResources(closeSession, cancelReadiness) {
94
+ const { pty, reapPolicy, loops } = this.input;
95
+ return {
96
+ before: () => {
97
+ closeSession();
98
+ cancelReadiness();
99
+ loops.pause();
100
+ },
101
+ pty: {
102
+ pid: pty.pid,
103
+ terminate: async (timeouts) => {
104
+ if (this.exitFinalization === undefined) {
105
+ await terminatePty(pty, "SIGTERM", reapPolicy.reaper, timeouts);
106
+ }
107
+ else {
108
+ reapPolicy.reaper.reap();
109
+ }
110
+ },
111
+ },
112
+ };
113
+ }
82
114
  exitEvidence() {
83
115
  return this.pending ?? "terminal_exited";
84
116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shutdown-binding.js","sourceRoot":"","sources":["../../../src/runtime/session/shutdown-binding.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shutdown-binding.js","sourceRoot":"","sources":["../../../src/runtime/session/shutdown-binding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Runtime cleanup for an explicit `stop()`/`kill()` attempt (PRD §9.4 and §10,
3
+ * C-LIFE-10): cleanup runs after every attempt to terminate the PTY or, once it was
4
+ * signaled, to reap it, failed or not. So a PTY that could not be signaled, did not
5
+ * exit, or could not be reaped never leaves the session's runtime (its hook bridge and
6
+ * terminal renderer, and Codex's transcript watcher) running until a later `teardown()`.
7
+ */
8
+ /**
9
+ * Runs `attempt` (a PTY termination, or the survivor reap of an already-signaled one),
10
+ * then `cleanupRuntime` whether or not `attempt` rejected, and rejects with a typed
11
+ * `termination_failed` (C-ERR-01). The attempt's failure stays the rejection, carrying a
12
+ * cleanup failure's message alongside it in `details.cleanupError`. A cleanup
13
+ * failure alone is wrapped too: `runCleanupSteps` rejects with a bare `Error` on the
14
+ * assumption that its caller wraps it, and `stop()`/`kill()` are that caller.
15
+ */
16
+ export declare function shutdownAttemptThenCleanUp(attempt: () => Promise<void> | void, cleanupRuntime: () => Promise<void>): Promise<void>;
17
+ //# sourceMappingURL=shutdown-cleanup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shutdown-cleanup.d.ts","sourceRoot":"","sources":["../../../src/runtime/session/shutdown-cleanup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;;GAOG;AACH,wBAAsB,0BAA0B,CAC9C,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,EACnC,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAClC,OAAO,CAAC,IAAI,CAAC,CAsBf"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Runtime cleanup for an explicit `stop()`/`kill()` attempt (PRD §9.4 and §10,
3
+ * C-LIFE-10): cleanup runs after every attempt to terminate the PTY or, once it was
4
+ * signaled, to reap it, failed or not. So a PTY that could not be signaled, did not
5
+ * exit, or could not be reaped never leaves the session's runtime (its hook bridge and
6
+ * terminal renderer, and Codex's transcript watcher) running until a later `teardown()`.
7
+ */
8
+ import { causeDetails, ElwoodError, elwoodError, toError } from "../../core/errors.js";
9
+ /**
10
+ * Runs `attempt` (a PTY termination, or the survivor reap of an already-signaled one),
11
+ * then `cleanupRuntime` whether or not `attempt` rejected, and rejects with a typed
12
+ * `termination_failed` (C-ERR-01). The attempt's failure stays the rejection, carrying a
13
+ * cleanup failure's message alongside it in `details.cleanupError`. A cleanup
14
+ * failure alone is wrapped too: `runCleanupSteps` rejects with a bare `Error` on the
15
+ * assumption that its caller wraps it, and `stop()`/`kill()` are that caller.
16
+ */
17
+ export async function shutdownAttemptThenCleanUp(attempt, cleanupRuntime) {
18
+ let terminationError;
19
+ try {
20
+ await attempt();
21
+ }
22
+ catch (error) {
23
+ terminationError = asTerminationFailure(error);
24
+ }
25
+ try {
26
+ await cleanupRuntime();
27
+ }
28
+ catch (error) {
29
+ const cleanupError = toError(error).message;
30
+ if (terminationError === undefined) {
31
+ throw elwoodError("termination_failed", "Could not clean up the Elwood runtime.", {
32
+ cause: cleanupError,
33
+ });
34
+ }
35
+ throw elwoodError(terminationError.code, terminationError.message, {
36
+ ...terminationError.details,
37
+ cleanupError,
38
+ });
39
+ }
40
+ if (terminationError !== undefined)
41
+ throw terminationError;
42
+ }
43
+ /** The typed failure `stop()`/`kill()` reject with, even for an untyped throw. */
44
+ function asTerminationFailure(error) {
45
+ if (error instanceof ElwoodError)
46
+ return error;
47
+ return elwoodError("termination_failed", toError(error).message, causeDetails(error));
48
+ }
49
+ //# sourceMappingURL=shutdown-cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shutdown-cleanup.js","sourceRoot":"","sources":["../../../src/runtime/session/shutdown-cleanup.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEvF;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,OAAmC,EACnC,cAAmC;IAEnC,IAAI,gBAAyC,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,OAAO,EAAE,CAAC;IAClB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,gBAAgB,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,CAAC;QACH,MAAM,cAAc,EAAE,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;QAC5C,IAAI,gBAAgB,KAAK,SAAS,EAAE,CAAC;YACnC,MAAM,WAAW,CAAC,oBAAoB,EAAE,wCAAwC,EAAE;gBAChF,KAAK,EAAE,YAAY;aACpB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,WAAW,CAAC,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,OAAO,EAAE;YACjE,GAAG,gBAAgB,CAAC,OAAO;YAC3B,YAAY;SACb,CAAC,CAAC;IACL,CAAC;IACD,IAAI,gBAAgB,KAAK,SAAS;QAAE,MAAM,gBAAgB,CAAC;AAC7D,CAAC;AAED,kFAAkF;AAClF,SAAS,oBAAoB,CAAC,KAAc;IAC1C,IAAI,KAAK,YAAY,WAAW;QAAE,OAAO,KAAK,CAAC;IAC/C,OAAO,WAAW,CAAC,oBAAoB,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AACxF,CAAC"}