@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
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * The Codex setModel config transaction: snapshot → drive the picker → restore,
3
- * all under the process-wide config lock. Factored out of session-instance so
3
+ * all under the lock for the session's config file. Factored out of session-instance so
4
4
  * every branch (switch succeeds/rejects × restore succeeds/throws) is unit
5
5
  * testable without a live session. Implements PRD §5.3 setModel restore and
6
6
  * C-CODEX-14 (a late picker rejection must still restore, and a restore failure
@@ -9,7 +9,7 @@
9
9
  import { withCodexConfigLock } from "./lock.js";
10
10
  export function runCodexModelSwitch(io) {
11
11
  return new Promise((resolve, reject) => {
12
- const transaction = withCodexConfigLock(async () => {
12
+ const transact = async () => {
13
13
  const snapshot = io.snapshot();
14
14
  let primary;
15
15
  let failed = false;
@@ -44,7 +44,8 @@ export function runCodexModelSwitch(io) {
44
44
  restoreAfterSwitch(io, snapshot, failed || closing);
45
45
  if (failed)
46
46
  throw primary;
47
- }, io.cancel);
47
+ };
48
+ const transaction = withCodexConfigLock(io.path, transact, io.cancel);
48
49
  // A rejection already delivered above makes this one a no-op.
49
50
  transaction.then(resolve, reject);
50
51
  });
@@ -1 +1 @@
1
- {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../src/codex/config/transaction.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAuChD,MAAM,UAAU,mBAAmB,CAAC,EAAoB;IACtD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,MAAM,WAAW,GAAG,mBAAmB,CAAC,KAAK,IAAI,EAAE;YACjD,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAgB,CAAC;YACrB,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;YACnB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,GAAG,IAAI,CAAC;gBACd,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;YACD,kFAAkF;YAClF,kFAAkF;YAClF,kFAAkF;YAClF,8EAA8E;YAC9E,8EAA8E;YAC9E,MAAM,QAAQ,GAAG,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC;YACvC,oFAAoF;YACpF,mFAAmF;YACnF,mFAAmF;YACnF,0EAA0E;YAC1E,MAAM,OAAO,GAAG,QAAQ,KAAK,SAAS,CAAC;YACvC,IAAI,OAAO,EAAE,CAAC;gBACZ,iFAAiF;gBACjF,gFAAgF;gBAChF,mFAAmF;gBACnF,8EAA8E;gBAC9E,MAAM,CAAC,OAAO,CAAC,CAAC;gBAChB,MAAM,QAAQ,CAAC;YACjB,CAAC;YACD,qFAAqF;YACrF,0EAA0E;YAC1E,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,IAAI,OAAO,CAAC,CAAC;YACpD,IAAI,MAAM;gBAAE,MAAM,OAAO,CAAC;QAC5B,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QACd,8DAA8D;QAC9D,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,kBAAkB,CACzB,EAAoB,EACpB,QAA4B,EAC5B,OAAgB;IAEhB,IAAI,CAAC;QACH,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IAAC,OAAO,YAAY,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO;YAAE,MAAM,YAAY,CAAC;QACjC,IAAI,CAAC;YACH,EAAE,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,+EAA+E;QACjF,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../../src/codex/config/transaction.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAyChD,MAAM,UAAU,mBAAmB,CAAC,EAAoB;IACtD,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC3C,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;YAC1B,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;YAC/B,IAAI,OAAgB,CAAC;YACrB,IAAI,MAAM,GAAG,KAAK,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;YACnB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,GAAG,IAAI,CAAC;gBACd,OAAO,GAAG,KAAK,CAAC;YAClB,CAAC;YACD,kFAAkF;YAClF,kFAAkF;YAClF,kFAAkF;YAClF,8EAA8E;YAC9E,8EAA8E;YAC9E,MAAM,QAAQ,GAAG,EAAE,CAAC,cAAc,EAAE,EAAE,CAAC;YACvC,oFAAoF;YACpF,mFAAmF;YACnF,mFAAmF;YACnF,0EAA0E;YAC1E,MAAM,OAAO,GAAG,QAAQ,KAAK,SAAS,CAAC;YACvC,IAAI,OAAO,EAAE,CAAC;gBACZ,iFAAiF;gBACjF,gFAAgF;gBAChF,mFAAmF;gBACnF,8EAA8E;gBAC9E,MAAM,CAAC,OAAO,CAAC,CAAC;gBAChB,MAAM,QAAQ,CAAC;YACjB,CAAC;YACD,qFAAqF;YACrF,0EAA0E;YAC1E,kBAAkB,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,IAAI,OAAO,CAAC,CAAC;YACpD,IAAI,MAAM;gBAAE,MAAM,OAAO,CAAC;QAC5B,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QACtE,8DAA8D;QAC9D,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,kBAAkB,CACzB,EAAoB,EACpB,QAA4B,EAC5B,OAAgB;IAEhB,IAAI,CAAC;QACH,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC;IAAC,OAAO,YAAY,EAAE,CAAC;QACtB,IAAI,CAAC,OAAO;YAAE,MAAM,YAAY,CAAC;QACjC,IAAI,CAAC;YACH,EAAE,CAAC,cAAc,EAAE,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC;QAAC,MAAM,CAAC;YACP,+EAA+E;QACjF,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * The temp copies Codex saves of pasted images. Codex writes each image pasted into its
3
+ * composer to a `codex-clipboard-*.png` file in its temp directory and never removes it, and
4
+ * Elwood attaches every Codex image by pasting it (C-API-46). A session collects the copies
5
+ * its own transcript names, in the `local_image` parts of the user messages it records, and
6
+ * removes them once its CLI has exited. Implements PRD §5.3 (C-API-46).
7
+ */
8
+ import type { ImageCopyErrorCode } from "../../core/warnings/images.ts";
9
+ /** The `local_image` paths of a completed `UserMessage` transcript item, of any kind. */
10
+ export declare function localImagePathsIn(item: unknown): readonly string[];
11
+ /**
12
+ * The copy `path` names directly in `tempDir`, rebuilt from `tempDir` and its name, else
13
+ * `undefined`. A path with a `..` segment never counts, since a link before it could lead
14
+ * the original path out of `tempDir`; repeated separators, which Codex may write after a
15
+ * `TMPDIR` that ends in one, do.
16
+ */
17
+ export declare function clipboardCopyAt(path: string, tempDir: string): string | undefined;
18
+ /**
19
+ * The pasted-image copies a committed transcript item names: those of its `local_image`
20
+ * paths that are copies directly in `tempDir`. Any other path, such as an image the user
21
+ * named by its own path, is never a copy.
22
+ */
23
+ export declare function clipboardCopiesIn(item: unknown, tempDir: string): readonly string[];
24
+ /** The pasted-image copies one session's transcript has named. */
25
+ export declare class CodexClipboardCopies {
26
+ private readonly elwoodTempDir;
27
+ private readonly paths;
28
+ observe(item: unknown): void;
29
+ /**
30
+ * Removes every copy named so far, then calls `done` with the first failure's errno token,
31
+ * or `undefined` when every copy is gone: at once when there are none, else once the
32
+ * removals have finished. They run one at a time, so a session that pasted many images
33
+ * never blocks the event loop on them. Best-effort, as Elwood's own image temp files are
34
+ * (C-API-44): a copy that cannot be removed is left for the OS to reap. A copy already gone
35
+ * is not a failure.
36
+ */
37
+ removeAll(done: (failure: ImageCopyErrorCode | undefined) => void): void;
38
+ }
39
+ //# sourceMappingURL=clipboard-copies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard-copies.d.ts","sourceRoot":"","sources":["../../../src/codex/images/clipboard-copies.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAOxE,yFAAyF;AACzF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,MAAM,EAAE,CAUlE;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKjF;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAEnF;AAED,kEAAkE;AAClE,qBAAa,oBAAoB;IAG/B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqB;IAE3C,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAI5B;;;;;;;OAOG;IACH,SAAS,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,kBAAkB,GAAG,SAAS,KAAK,IAAI,GAAG,IAAI;CAUzE"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * The temp copies Codex saves of pasted images. Codex writes each image pasted into its
3
+ * composer to a `codex-clipboard-*.png` file in its temp directory and never removes it, and
4
+ * Elwood attaches every Codex image by pasting it (C-API-46). A session collects the copies
5
+ * its own transcript names, in the `local_image` parts of the user messages it records, and
6
+ * removes them once its CLI has exited. Implements PRD §5.3 (C-API-46).
7
+ */
8
+ import { unlink } from "node:fs/promises";
9
+ import { tmpdir } from "node:os";
10
+ import { basename, join, normalize, resolve, sep } from "node:path";
11
+ import { isErrnoToken } from "../../core/errors.js";
12
+ import { isRecord } from "../../core/predicates.js";
13
+ import { boundedErrorToken } from "../../core/warnings/reasons.js";
14
+ import { payloadOf } from "../transcript/payload.js";
15
+ /** The name Codex gives a pasted image's copy (a random suffix, six characters or a UUID). */
16
+ const copyNamePattern = /^codex-clipboard-[A-Za-z0-9_-]+\.png$/;
17
+ /** The `local_image` paths of a completed `UserMessage` transcript item, of any kind. */
18
+ export function localImagePathsIn(item) {
19
+ const payload = payloadOf(item);
20
+ const message = payload?.["type"] === "item_completed" ? payload["item"] : undefined;
21
+ if (!(isRecord(message) && message["type"] === "UserMessage"))
22
+ return [];
23
+ const content = message["content"];
24
+ if (!Array.isArray(content))
25
+ return [];
26
+ return content.flatMap((part) => {
27
+ const path = isRecord(part) && part["type"] === "local_image" ? part["path"] : undefined;
28
+ return typeof path === "string" ? [path] : [];
29
+ });
30
+ }
31
+ /**
32
+ * The copy `path` names directly in `tempDir`, rebuilt from `tempDir` and its name, else
33
+ * `undefined`. A path with a `..` segment never counts, since a link before it could lead
34
+ * the original path out of `tempDir`; repeated separators, which Codex may write after a
35
+ * `TMPDIR` that ends in one, do.
36
+ */
37
+ export function clipboardCopyAt(path, tempDir) {
38
+ const name = basename(path);
39
+ const copy = join(tempDir, name);
40
+ const direct = normalize(path) === copy && !path.split(sep).includes("..");
41
+ return copyNamePattern.test(name) && direct ? copy : undefined;
42
+ }
43
+ /**
44
+ * The pasted-image copies a committed transcript item names: those of its `local_image`
45
+ * paths that are copies directly in `tempDir`. Any other path, such as an image the user
46
+ * named by its own path, is never a copy.
47
+ */
48
+ export function clipboardCopiesIn(item, tempDir) {
49
+ return localImagePathsIn(item).flatMap((path) => clipboardCopyAt(path, tempDir) ?? []);
50
+ }
51
+ /** The pasted-image copies one session's transcript has named. */
52
+ export class CodexClipboardCopies {
53
+ // Elwood's temp dir. Codex starts through the user's login shell, which could point it
54
+ // at another; copies there are not this session's to remove (PRD §5.3).
55
+ elwoodTempDir = resolve(tmpdir());
56
+ paths = new Set();
57
+ observe(item) {
58
+ for (const path of clipboardCopiesIn(item, this.elwoodTempDir))
59
+ this.paths.add(path);
60
+ }
61
+ /**
62
+ * Removes every copy named so far, then calls `done` with the first failure's errno token,
63
+ * or `undefined` when every copy is gone: at once when there are none, else once the
64
+ * removals have finished. They run one at a time, so a session that pasted many images
65
+ * never blocks the event loop on them. Best-effort, as Elwood's own image temp files are
66
+ * (C-API-44): a copy that cannot be removed is left for the OS to reap. A copy already gone
67
+ * is not a failure.
68
+ */
69
+ removeAll(done) {
70
+ const paths = [...this.paths];
71
+ this.paths.clear();
72
+ if (paths.length === 0) {
73
+ done(undefined);
74
+ return;
75
+ }
76
+ // `done` runs outside the removal's promise, as a deferred exit already does.
77
+ void removeEach(paths).then((failure) => queueMicrotask(() => done(failure)));
78
+ }
79
+ }
80
+ async function removeEach(paths) {
81
+ let failure;
82
+ for (const path of paths) {
83
+ const code = await unlink(path).then(() => undefined,
84
+ // The errno token, else `UnknownError`: never a path or a raw message.
85
+ (error) => boundedErrorToken(error, isErrnoToken));
86
+ if (code !== undefined && code !== "ENOENT")
87
+ failure ??= code;
88
+ }
89
+ return failure;
90
+ }
91
+ //# sourceMappingURL=clipboard-copies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clipboard-copies.js","sourceRoot":"","sources":["../../../src/codex/images/clipboard-copies.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,6 @@
2
2
  * Codex /model picker automation spec.
3
3
  * Implements PRD §5.7, C-API-23, and C-API-24.
4
4
  */
5
- import type { ModelPickerSpec } from "../core/models/picker.ts";
5
+ import { type ModelPickerSpec } from "../core/models/picker.ts";
6
6
  export declare const codexModelPicker: ModelPickerSpec;
7
7
  //# sourceMappingURL=model-picker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model-picker.d.ts","sourceRoot":"","sources":["../../src/codex/model-picker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAehE,eAAO,MAAM,gBAAgB,EAAE,eAgD9B,CAAC"}
1
+ {"version":3,"file":"model-picker.d.ts","sourceRoot":"","sources":["../../src/codex/model-picker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAqBrF,eAAO,MAAM,gBAAgB,EAAE,eAgD9B,CAAC"}
@@ -3,35 +3,45 @@
3
3
  * Implements PRD §5.7, C-API-23, and C-API-24.
4
4
  */
5
5
  import { sendPickerInput } from "../core/models/input.js";
6
+ import { isOwnCompletePicker } from "../core/models/picker.js";
6
7
  import { bottomDialogCandidate, bottomDialogRow, codexModelPickerHeader, ownOperation, parseCodexModelPicker, } from "../core/models/rows.js";
7
8
  import { waitForScreen } from "../core/models/tui-screen.js";
8
9
  import { codexComposerClearance } from "./screen/clearance.js";
9
10
  const reasoningHeader = /Select Reasoning Level/;
11
+ // Both screens close with `Press enter to confirm or esc to go back` on 0.154.0 and with
12
+ // `enter select · esc back` / `enter default · s session · esc back` on 0.164.0.
13
+ const footer = /\besc (?:to go )?back\b/i;
14
+ const pickerGrammar = { header: codexModelPickerHeader, footer };
15
+ const reasoningGrammar = { header: reasoningHeader, footer };
10
16
  const changeConfirmed = /Model changed to/;
11
17
  export const codexModelPicker = {
12
18
  agent: "codex",
13
19
  isClear: codexComposerClearance,
14
- isCandidate: (text) => bottomDialogCandidate(text, codexModelPickerHeader) ||
15
- bottomDialogCandidate(text, reasoningHeader),
16
- isOpen: (text) => codexModelPickerHeader.test(text),
20
+ isCandidate: (text) => bottomDialogCandidate(text, pickerGrammar) || bottomDialogCandidate(text, reasoningGrammar),
21
+ hasPickerHeader: (text) => codexModelPickerHeader.test(text),
22
+ // Codex's switch has no dialog of the caller's own to replace the picker.
23
+ isCallerDialog: () => false,
17
24
  activeDialog: (text, authority) => {
18
25
  // Nothing on screen is our dialog unless we opened one; the grammar below only has to
19
26
  // locate Elwood's own dialog, never adjudicate arbitrary agent output (C-API-24).
20
27
  if (!authority.opened)
21
28
  return undefined;
22
- const picker = bottomDialogRow(text, codexModelPickerHeader);
23
- const level = bottomDialogRow(text, reasoningHeader);
29
+ const picker = bottomDialogRow(text, pickerGrammar);
30
+ const level = bottomDialogRow(text, reasoningGrammar);
24
31
  if (picker < 0 && level < 0)
25
32
  return undefined;
26
33
  return level > picker ? "follow-up" : "picker";
27
34
  },
28
35
  parse: parseCodexModelPicker,
36
+ // No `withDefaults` here: when Codex draws no `(default)` marker (0.164 never does), each
37
+ // listing reads the configured default from the SESSION's config.toml, so the session
38
+ // binds it (`CodexSessionImpl.picker`, PRD §5.3).
29
39
  // Enter confirms the model, then Codex asks for a reasoning level with the
30
40
  // cursor pre-set on that model's default; a second Enter keeps it.
31
41
  apply: async (io, timeoutMs) => {
32
42
  // Enter CONFIRMS a model, so it is revalidated against the operation's own picker
33
43
  // rather than a bare header a transcript could print (C-API-24).
34
- await sendPickerInput(io, "\r", (text) => codexModelPicker.activeDialog(text, ownOperation) === "picker");
44
+ await sendPickerInput(io, "\r", isOwnCompletePicker(codexModelPicker));
35
45
  await waitForScreen(io.terminal, (text) => reasoningHeader.test(text), timeoutMs, "codex reasoning level screen", io.signal);
36
46
  // Same for the reasoning stage: only our own follow-up may receive this Enter.
37
47
  await sendPickerInput(io, "\r", (text) => codexModelPicker.activeDialog(text, ownOperation) === "follow-up");
@@ -1 +1 @@
1
- {"version":3,"file":"model-picker.js","sourceRoot":"","sources":["../../src/codex/model-picker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,sBAAsB,EACtB,YAAY,EACZ,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,eAAe,GAAG,wBAAwB,CAAC;AACjD,MAAM,eAAe,GAAG,kBAAkB,CAAC;AAE3C,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC/C,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,sBAAsB;IAC/B,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CACpB,qBAAqB,CAAC,IAAI,EAAE,sBAAsB,CAAC;QACnD,qBAAqB,CAAC,IAAI,EAAE,eAAe,CAAC;IAC9C,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;IACnD,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;QAChC,sFAAsF;QACtF,kFAAkF;QAClF,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QACxC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;QACrD,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAC9C,OAAO,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;IACjD,CAAC;IACD,KAAK,EAAE,qBAAqB;IAC5B,2EAA2E;IAC3E,mEAAmE;IACnE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE;QAC7B,kFAAkF;QAClF,iEAAiE;QACjE,MAAM,eAAe,CACnB,EAAE,EACF,IAAI,EACJ,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,QAAQ,CACzE,CAAC;QACF,MAAM,aAAa,CACjB,EAAE,CAAC,QAAQ,EACX,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EACpC,SAAS,EACT,8BAA8B,EAC9B,EAAE,CAAC,MAAM,CACV,CAAC;QACF,+EAA+E;QAC/E,MAAM,eAAe,CACnB,EAAE,EACF,IAAI,EACJ,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,WAAW,CAC5E,CAAC;QACF,MAAM,aAAa,CACjB,EAAE,CAAC,QAAQ,EACX,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EACnE,SAAS,EACT,iCAAiC,EACjC,EAAE,CAAC,MAAM,CACV,CAAC;IACJ,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"model-picker.js","sourceRoot":"","sources":["../../src/codex/model-picker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAwB,MAAM,0BAA0B,CAAC;AACrF,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,sBAAsB,EAEtB,YAAY,EACZ,qBAAqB,GACtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,eAAe,GAAG,wBAAwB,CAAC;AACjD,yFAAyF;AACzF,iFAAiF;AACjF,MAAM,MAAM,GAAG,0BAA0B,CAAC;AAC1C,MAAM,aAAa,GAAkB,EAAE,MAAM,EAAE,sBAAsB,EAAE,MAAM,EAAE,CAAC;AAChF,MAAM,gBAAgB,GAAkB,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC;AAC5E,MAAM,eAAe,GAAG,kBAAkB,CAAC;AAE3C,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC/C,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,sBAAsB;IAC/B,WAAW,EAAE,CAAC,IAAI,EAAE,EAAE,CACpB,qBAAqB,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,CAAC;IAC7F,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5D,0EAA0E;IAC1E,cAAc,EAAE,GAAG,EAAE,CAAC,KAAK;IAC3B,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE;QAChC,sFAAsF;QACtF,kFAAkF;QAClF,IAAI,CAAC,SAAS,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QACxC,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;QACtD,IAAI,MAAM,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC;YAAE,OAAO,SAAS,CAAC;QAC9C,OAAO,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;IACjD,CAAC;IACD,KAAK,EAAE,qBAAqB;IAC5B,0FAA0F;IAC1F,sFAAsF;IACtF,kDAAkD;IAClD,2EAA2E;IAC3E,mEAAmE;IACnE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE;QAC7B,kFAAkF;QAClF,iEAAiE;QACjE,MAAM,eAAe,CAAC,EAAE,EAAE,IAAI,EAAE,mBAAmB,CAAC,gBAAgB,CAAC,CAAC,CAAC;QACvE,MAAM,aAAa,CACjB,EAAE,CAAC,QAAQ,EACX,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EACpC,SAAS,EACT,8BAA8B,EAC9B,EAAE,CAAC,MAAM,CACV,CAAC;QACF,+EAA+E;QAC/E,MAAM,eAAe,CACnB,EAAE,EACF,IAAI,EACJ,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,WAAW,CAC5E,CAAC;QACF,MAAM,aAAa,CACjB,EAAE,CAAC,QAAQ,EACX,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EACnE,SAAS,EACT,iCAAiC,EACjC,EAAE,CAAC,MAAM,CACV,CAAC;IACJ,CAAC;CACF,CAAC"}
@@ -11,7 +11,7 @@ export type CodexCliCapabilities = {
11
11
  export type CodexPreflightWarning = DistributiveOmit<Extract<ElwoodWarningEvent, {
12
12
  readonly code: "version_unparseable" | "agent_update_failed";
13
13
  }>, "elwoodSessionId">;
14
- export declare function preflightCodex(strictVersionCheck: boolean, autoupdate?: boolean): Promise<CodexPreflightWarning | undefined>;
15
- export declare function detectCodexCliCapabilities(): Promise<CodexCliCapabilities>;
14
+ export declare function preflightCodex(strictVersionCheck: boolean, autoupdate?: boolean, cwd?: string): Promise<CodexPreflightWarning | undefined>;
15
+ export declare function detectCodexCliCapabilities(cwd?: string): Promise<CodexCliCapabilities>;
16
16
  export declare function resetCodexPreflightCacheForTests(): void;
17
17
  //# sourceMappingURL=preflight.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/codex/preflight.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAOvF,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAC7C,MAAM,MAAM,oBAAoB,GAAG;IAAE,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAA;CAAE,CAAC;AACjF,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,CAClD,OAAO,CAAC,kBAAkB,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,qBAAqB,GAAG,qBAAqB,CAAA;CAAE,CAAC,EAC7F,iBAAiB,CAClB,CAAC;AAMF,wBAAsB,cAAc,CAClC,kBAAkB,EAAE,OAAO,EAC3B,UAAU,UAAQ,GACjB,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAqC5C;AA4BD,wBAAgB,0BAA0B,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAI1E;AAaD,wBAAgB,gCAAgC,IAAI,IAAI,CAEvD"}
1
+ {"version":3,"file":"preflight.d.ts","sourceRoot":"","sources":["../../src/codex/preflight.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAYvF,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAC7C,MAAM,MAAM,oBAAoB,GAAG;IAAE,QAAQ,CAAC,uBAAuB,EAAE,OAAO,CAAA;CAAE,CAAC;AACjF,MAAM,MAAM,qBAAqB,GAAG,gBAAgB,CAClD,OAAO,CAAC,kBAAkB,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,qBAAqB,GAAG,qBAAqB,CAAA;CAAE,CAAC,EAC7F,iBAAiB,CAClB,CAAC;AAQF,wBAAsB,cAAc,CAClC,kBAAkB,EAAE,OAAO,EAC3B,UAAU,UAAQ,EAClB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CAuC5C;AAuCD,wBAAgB,0BAA0B,CACxC,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,oBAAoB,CAAC,CAI/B;AAeD,wBAAgB,gCAAgC,IAAI,IAAI,CAEvD"}
@@ -2,36 +2,39 @@
2
2
  * Codex CLI availability and version checks.
3
3
  * Implements PRD §9.2 and §10.
4
4
  */
5
- import { elwoodError, probeFailureDetails } from "../core/errors.js";
5
+ import { elwoodError, notFoundDetails, probeFailureDetails } from "../core/errors.js";
6
6
  import { compareVersions, parseVersion } from "../core/versions.js";
7
7
  import { buildUpdateWarning } from "../core/warnings/update.js";
8
+ import { createDirectoryProbeCache, readInDirectory } from "../runtime/probe/directory-key.js";
8
9
  import { currentCommandRunner, currentPlatform } from "../runtime/seams.js";
9
10
  import { probeShellCommand, userShell } from "../runtime/shell.js";
10
- import { cachedAutoupdate, cachedVersionRead, dedupeInFlight } from "../runtime/update/once.js";
11
+ import { cachedAutoupdate, cachedVersionRead, maxSettledPreflightDirectoryResults, } from "../runtime/update/once.js";
11
12
  // Re-exported for existing importers; the implementation lives in core/versions.ts.
12
13
  export const minimumCodexVersion = "0.124.0";
13
- // Single-entry cache for the capability probe. `dedupeInFlight` shares one in-flight `codex --help`
14
- // across concurrent first spawns AND evicts on rejection, so a transient `--help` failure does not
14
+ // Matching-directory capability reads share a run and retain only the derived boolean.
15
+ // A rejected probe is not retained, so a transient `--help` failure does not
15
16
  // poison every later Codex start in the process (C-LIFE-11) — a later start re-probes.
16
- const capabilityProbe = new Map();
17
- export async function preflightCodex(strictVersionCheck, autoupdate = false) {
17
+ const capabilityProbe = createDirectoryProbeCache(maxSettledPreflightDirectoryResults);
18
+ export async function preflightCodex(strictVersionCheck, autoupdate = false, cwd) {
18
19
  // Platform check is synchronous and first: unsupported hosts throw before
19
20
  // any subprocess is spawned.
20
21
  if (currentPlatform() !== "darwin") {
21
22
  throw elwoodError("unsupported_platform", "Elwood currently supports macOS only.");
22
23
  }
24
+ const workspace = cwd ?? process.cwd();
23
25
  let updateError;
24
26
  if (autoupdate) {
25
27
  // Best-effort: the shared update never rejects; on failure we re-read and fall through to the
26
28
  // compatibility gate — fatal only when the INSTALLED CLI is below the minimum (C-LIFE-11).
29
+ // Only a test that reset the update module without setting a coordinator sees a throw here.
27
30
  const outcome = await cachedAutoupdate("codex", async () => {
28
- await readCodexVersion(); // verify existence only after owning the cross-process lease
29
- await runCodexUpdate();
31
+ await readCodexVersion(workspace); // verify existence only after owning the cross-process lease
32
+ await runCodexUpdate(workspace);
30
33
  }, () => capabilityProbe.clear());
31
34
  if (!outcome.ok)
32
35
  updateError = outcome.error;
33
36
  }
34
- const result = await readCodexVersion();
37
+ const result = await readCodexVersion(workspace);
35
38
  const version = parseVersion(result.stdout);
36
39
  if (!version) {
37
40
  if (strictVersionCheck) {
@@ -45,31 +48,35 @@ export async function preflightCodex(strictVersionCheck, autoupdate = false) {
45
48
  // Installed CLI is compatible: a failed best-effort update is a warning, not a start failure.
46
49
  return updateError === undefined ? undefined : buildUpdateWarning("codex", version, updateError);
47
50
  }
48
- async function runCodexUpdate() {
49
- const result = await currentCommandRunner()(userShell(), probeShellCommand("codex update"));
51
+ async function runCodexUpdate(cwd) {
52
+ const result = await currentCommandRunner()(userShell(), probeShellCommand("codex update"), {
53
+ cwd,
54
+ });
50
55
  if (result.status !== 0) {
51
56
  throw elwoodError("codex_update_failed", "`codex update` failed.", probeFailureDetails(result));
52
57
  }
53
58
  }
54
- async function readCodexVersion() {
59
+ async function readCodexVersion(cwd) {
55
60
  // The mapping to typed errors runs on every call (cache hit or miss) so all
56
61
  // callers throw identically; only the subprocess is deduped.
57
- const result = await cachedVersionRead("codex", () => Promise.resolve(currentCommandRunner()(userShell(), probeShellCommand("codex --version"))));
58
- if (result.error?.code === "ENOENT" || result.status === 127) {
59
- throw elwoodError("codex_not_found", "Could not find `codex` on PATH.");
62
+ const result = await cachedVersionRead("codex", () => Promise.resolve(currentCommandRunner()(userShell(), probeShellCommand("codex --version", "codex"), { cwd })), cwd);
63
+ if (result.error?.code === "ENOENT" || result.commandLookupFailed === true) {
64
+ throw elwoodError("codex_not_found", "Could not find `codex` on PATH.", notFoundDetails(result, "codex"));
60
65
  }
61
66
  if (result.status !== 0) {
62
67
  throw elwoodError("codex_start_failed", "`codex --version` failed.", probeFailureDetails(result));
63
68
  }
64
69
  return result;
65
70
  }
66
- export function detectCodexCliCapabilities() {
67
- // Shared once across concurrent first spawns; a rejected probe is evicted so a later start
68
- // re-probes rather than inheriting the failure.
69
- return dedupeInFlight(capabilityProbe, "codex", detectCapabilities);
71
+ export function detectCodexCliCapabilities(cwd = process.cwd()) {
72
+ // Matching-directory first spawns share a probe; a rejected read is not retained.
73
+ // A later start retries instead of inheriting the failure.
74
+ return readInDirectory(capabilityProbe, cwd, () => detectCapabilities(cwd));
70
75
  }
71
- async function detectCapabilities() {
72
- const result = await currentCommandRunner()(userShell(), probeShellCommand("codex --help"));
76
+ async function detectCapabilities(cwd) {
77
+ const result = await currentCommandRunner()(userShell(), probeShellCommand("codex --help"), {
78
+ cwd,
79
+ });
73
80
  // A bounded probe (timeout/overflow) or nonzero exit is a diagnosable
74
81
  // startup failure, not "capability unsupported" — surface it with cause.
75
82
  if (result.error !== undefined || result.status !== 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/codex/preflight.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"preflight.js","sourceRoot":"","sources":["../../src/codex/preflight.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAEtF,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAyB,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAC/F,OAAO,EAAsB,oBAAoB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAChG,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,mCAAmC,GACpC,MAAM,2BAA2B,CAAC;AAEnC,oFAAoF;AAEpF,MAAM,CAAC,MAAM,mBAAmB,GAAG,SAAS,CAAC;AAM7C,uFAAuF;AACvF,6EAA6E;AAC7E,uFAAuF;AACvF,MAAM,eAAe,GAAG,yBAAyB,CAC/C,mCAAmC,CACpC,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,kBAA2B,EAC3B,UAAU,GAAG,KAAK,EAClB,GAAY;IAEZ,0EAA0E;IAC1E,6BAA6B;IAC7B,IAAI,eAAe,EAAE,KAAK,QAAQ,EAAE,CAAC;QACnC,MAAM,WAAW,CAAC,sBAAsB,EAAE,uCAAuC,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,SAAS,GAAG,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACvC,IAAI,WAAoB,CAAC;IACzB,IAAI,UAAU,EAAE,CAAC;QACf,8FAA8F;QAC9F,2FAA2F;QAC3F,4FAA4F;QAC5F,MAAM,OAAO,GAAG,MAAM,gBAAgB,CACpC,OAAO,EACP,KAAK,IAAI,EAAE;YACT,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,6DAA6D;YAChG,MAAM,cAAc,CAAC,SAAS,CAAC,CAAC;QAClC,CAAC,EACD,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,CAC9B,CAAC;QACF,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC;IAC/C,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACjD,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,kBAAkB,EAAE,CAAC;YACvB,MAAM,WAAW,CAAC,2BAA2B,EAAE,oCAAoC,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;IACD,IAAI,eAAe,CAAC,OAAO,EAAE,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;QACtD,MAAM,WAAW,CACf,2BAA2B,EAC3B,aAAa,mBAAmB,yCAAyC,EACzE,EAAE,OAAO,EAAE,mBAAmB,EAAE,CACjC,CAAC;IACJ,CAAC;IACD,8FAA8F;IAC9F,OAAO,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;AACnG,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,GAAW;IACvC,MAAM,MAAM,GAAG,MAAM,oBAAoB,EAAE,CAAC,SAAS,EAAE,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAAE;QAC1F,GAAG;KACJ,CAAC,CAAC;IACH,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,WAAW,CAAC,qBAAqB,EAAE,wBAAwB,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;IAClG,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,GAAW;IACzC,4EAA4E;IAC5E,6DAA6D;IAC7D,MAAM,MAAM,GAAG,MAAM,iBAAiB,CACpC,OAAO,EACP,GAAG,EAAE,CACH,OAAO,CAAC,OAAO,CACb,oBAAoB,EAAE,CAAC,SAAS,EAAE,EAAE,iBAAiB,CAAC,iBAAiB,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,CAAC,CAC5F,EACH,GAAG,CACJ,CAAC;IACF,IAAI,MAAM,CAAC,KAAK,EAAE,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,mBAAmB,KAAK,IAAI,EAAE,CAAC;QAC3E,MAAM,WAAW,CACf,iBAAiB,EACjB,iCAAiC,EACjC,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CACjC,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,WAAW,CACf,oBAAoB,EACpB,2BAA2B,EAC3B,mBAAmB,CAAC,MAAM,CAAC,CAC5B,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,0BAA0B,CACxC,MAAc,OAAO,CAAC,GAAG,EAAE;IAE3B,kFAAkF;IAClF,2DAA2D;IAC3D,OAAO,eAAe,CAAC,eAAe,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,GAAW;IAC3C,MAAM,MAAM,GAAG,MAAM,oBAAoB,EAAE,CAAC,SAAS,EAAE,EAAE,iBAAiB,CAAC,cAAc,CAAC,EAAE;QAC1F,GAAG;KACJ,CAAC,CAAC;IACH,sEAAsE;IACtE,yEAAyE;IACzE,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtD,MAAM,WAAW,CAAC,oBAAoB,EAAE,wBAAwB,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;IACjG,CAAC;IACD,MAAM,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;IAClD,OAAO,EAAE,uBAAuB,EAAE,IAAI,CAAC,QAAQ,CAAC,iCAAiC,CAAC,EAAE,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,gCAAgC;IAC9C,eAAe,CAAC,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,OAAO;QACL,KAAK,EAAE,OAAO;QACd,MAAM,EAAE,WAAW;QACnB,IAAI,EAAE,qBAAqB;QAC3B,QAAQ,EAAE,SAAS;QACnB,OAAO,EAAE,oEAAoE;QAC7E,GAAG,EAAE,MAAM;KACZ,CAAC;AACJ,CAAC"}
@@ -1,9 +1,31 @@
1
1
  /**
2
- * Codex PTY spawning with login-shell semantics.
3
- * Implements PRD §4.1, §4.2, and §5.5.
2
+ * Codex PTY spawning with login-shell semantics, and the config path of the `CODEX_HOME`
3
+ * that launch runs with. Implements PRD §4.1, §4.2, §5.3, §5.5, §8.1, and C-CODEX-24.
4
4
  */
5
5
  import type { PtyProcess } from "../pty/types.ts";
6
+ import type { SessionRuntime } from "../state/runtime-paths.ts";
6
7
  import type { SessionRecord } from "../state/store.ts";
7
8
  import type { StartCodexOptions } from "./session/types.ts";
8
- export declare function spawnCodexPty(record: SessionRecord, bridgeScriptPath: string, options: StartCodexOptions): Promise<PtyProcess>;
9
+ export type CodexLaunch = {
10
+ readonly pty: PtyProcess;
11
+ /**
12
+ * The config.toml of the `CODEX_HOME` the launched Codex runs with, from the launch shell's
13
+ * report: waited for until `signal` aborts, then kept (C-CODEX-24).
14
+ */
15
+ readonly resolveConfigPath: (signal: AbortSignal) => Promise<string>;
16
+ };
17
+ /**
18
+ * Where a launch's `CODEX_HOME` report goes: the session's private runtime home, not its state
19
+ * directory, named after the launch's own socket file. Each launch has its own, which a
20
+ * `noclobber` shell cannot mistake for an earlier one, and a failed start can find it (§8.1).
21
+ */
22
+ export declare function codexHomeReportPath(runtime: Pick<SessionRuntime, "socketHome" | "socketPath">): string;
23
+ export declare function spawnCodexPty(record: SessionRecord, runtime: Pick<SessionRuntime, "socketHome" | "socketPath" | "bridgeScriptPath">, options: StartCodexOptions): Promise<CodexLaunch>;
24
+ /**
25
+ * A start that failed because the launch shell could not write its `CODEX_HOME` report says
26
+ * so, with the report's path (§8.1, C-CODEX-24). Codex never started then, so the exit status
27
+ * is the report step's: one after a finished report is Codex's own. The shell's own message is
28
+ * never read.
29
+ */
30
+ export declare function explainCodexStartFailure(error: unknown, reportPath: string): unknown;
9
31
  //# sourceMappingURL=pty.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pty.d.ts","sourceRoot":"","sources":["../../src/codex/pty.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,wBAAsB,aAAa,CACjC,MAAM,EAAE,aAAa,EACrB,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,UAAU,CAAC,CAerB"}
1
+ {"version":3,"file":"pty.d.ts","sourceRoot":"","sources":["../../src/codex/pty.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AASvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,MAAM,WAAW,GAAG;IACxB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,iBAAiB,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACtE,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY,GAAG,YAAY,CAAC,GACzD,MAAM,CAER;AAED,wBAAsB,aAAa,CACjC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,YAAY,GAAG,YAAY,GAAG,kBAAkB,CAAC,EAC/E,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CA+BtB;AAKD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAYpF"}
package/dist/codex/pty.js CHANGED
@@ -1,19 +1,34 @@
1
1
  /**
2
- * Codex PTY spawning with login-shell semantics.
3
- * Implements PRD §4.1, §4.2, and §5.5.
2
+ * Codex PTY spawning with login-shell semantics, and the config path of the `CODEX_HOME`
3
+ * that launch runs with. Implements PRD §4.1, §4.2, §5.3, §5.5, §8.1, and C-CODEX-24.
4
4
  */
5
+ import { rmSync } from "node:fs";
6
+ import { basename, join } from "node:path";
7
+ import { runContained } from "../core/contained.js";
5
8
  import { defaultTerminalSize } from "../core/defaults.js";
6
- import { causeDetails, elwoodError } from "../core/errors.js";
9
+ import { causeDetails, ElwoodError, elwoodError } from "../core/errors.js";
7
10
  import { currentPtyFactory } from "../runtime/seams.js";
8
11
  import { loginShellCommand, userShell } from "../runtime/shell.js";
9
12
  import { buildCodexShellCommand } from "./command.js";
13
+ import { codexHomeReported, reportCodexHomeCommand, reportedCodexConfigPath, reportFailedStatus, } from "./config/home.js";
10
14
  import * as preflight from "./preflight.js";
11
- export async function spawnCodexPty(record, bridgeScriptPath, options) {
12
- const capabilities = await preflight.detectCodexCliCapabilities();
15
+ /**
16
+ * Where a launch's `CODEX_HOME` report goes: the session's private runtime home, not its state
17
+ * directory, named after the launch's own socket file. Each launch has its own, which a
18
+ * `noclobber` shell cannot mistake for an earlier one, and a failed start can find it (§8.1).
19
+ */
20
+ export function codexHomeReportPath(runtime) {
21
+ return join(runtime.socketHome, `codex-home-${basename(runtime.socketPath, ".sock")}`);
22
+ }
23
+ export async function spawnCodexPty(record, runtime, options) {
24
+ const capabilities = await preflight.detectCodexCliCapabilities(options.cwd);
25
+ const reportPath = codexHomeReportPath(runtime);
26
+ const launch = buildCodexShellCommand(record, runtime.bridgeScriptPath, options, capabilities);
27
+ let pty;
13
28
  try {
14
- return currentPtyFactory()({
29
+ pty = currentPtyFactory()({
15
30
  command: userShell(),
16
- args: loginShellCommand(buildCodexShellCommand(record, bridgeScriptPath, options, capabilities)),
31
+ args: loginShellCommand(`${reportCodexHomeCommand(reportPath)}; ${launch}`),
17
32
  cwd: record.cwd,
18
33
  env: { ...process.env, ELWOOD_SESSION_ID: record.elwoodSessionId },
19
34
  size: options.initialSize ?? defaultTerminalSize,
@@ -22,5 +37,36 @@ export async function spawnCodexPty(record, bridgeScriptPath, options) {
22
37
  catch (error) {
23
38
  throw elwoodError("pty_start_failed", "Could not start Codex PTY.", causeDetails(error));
24
39
  }
40
+ // The report lasts as long as its launch, whether that ends in a failed start or later.
41
+ // Whether the report step failed is decided before it goes, for the start's failure to
42
+ // say so, and a report that cannot be removed never stops the PTY's other exit handlers:
43
+ // the socket home's own removal takes it.
44
+ pty.onExit((exit) => {
45
+ if (exit.exitCode === reportFailedStatus && !codexHomeReported(reportPath))
46
+ failedReportSteps.add(reportPath);
47
+ runContained(() => rmSync(reportPath, { force: true }));
48
+ });
49
+ let resolvedConfigPath;
50
+ return {
51
+ pty,
52
+ resolveConfigPath: async (signal) => (resolvedConfigPath ??= await reportedCodexConfigPath(reportPath, signal)),
53
+ };
54
+ }
55
+ /** Reports whose launch shell exited at the report step, so Codex never started. */
56
+ const failedReportSteps = new Set();
57
+ /**
58
+ * A start that failed because the launch shell could not write its `CODEX_HOME` report says
59
+ * so, with the report's path (§8.1, C-CODEX-24). Codex never started then, so the exit status
60
+ * is the report step's: one after a finished report is Codex's own. The shell's own message is
61
+ * never read.
62
+ */
63
+ export function explainCodexStartFailure(error, reportPath) {
64
+ const reportFailed = error instanceof ElwoodError &&
65
+ error.code === "codex_start_failed" &&
66
+ error.details["exitCode"] === reportFailedStatus &&
67
+ failedReportSteps.delete(reportPath);
68
+ if (!reportFailed)
69
+ return error;
70
+ return elwoodError("codex_start_failed", "Codex did not start: its launch could not write the CODEX_HOME report.", { ...error.details, phase: "codex_home_report", path: reportPath });
25
71
  }
26
72
  //# sourceMappingURL=pty.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pty.js","sourceRoot":"","sources":["../../src/codex/pty.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAG5C,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,MAAqB,EACrB,gBAAwB,EACxB,OAA0B;IAE1B,MAAM,YAAY,GAAG,MAAM,SAAS,CAAC,0BAA0B,EAAE,CAAC;IAClE,IAAI,CAAC;QACH,OAAO,iBAAiB,EAAE,CAAC;YACzB,OAAO,EAAE,SAAS,EAAE;YACpB,IAAI,EAAE,iBAAiB,CACrB,sBAAsB,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,YAAY,CAAC,CACxE;YACD,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,CAAC,eAAe,EAAE;YAClE,IAAI,EAAE,OAAO,CAAC,WAAW,IAAI,mBAAmB;SACjD,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,WAAW,CAAC,kBAAkB,EAAE,4BAA4B,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3F,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"pty.js","sourceRoot":"","sources":["../../src/codex/pty.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"candidates.d.ts","sourceRoot":"","sources":["../../../src/codex/questions/candidates.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAIxE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAChF,OAAO,EAAE,KAAK,SAAS,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAStE,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,qBAAa,uBAAwB,SAAQ,cAAc;IACzD,6FAA6F;IAC7F,YAAY,CACV,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,SAAS,uBAAuB,EAAE,EAC3C,MAAM,EAAE,WAAW,GAClB,MAAM,IAAI;IAIb,OAAO,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO;IAG5C,OAAO,CAAC,aAAa;IA2BrB,OAAO,CAAC,OAAO;IAcf,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,MAAM;CAoCf"}
1
+ {"version":3,"file":"candidates.d.ts","sourceRoot":"","sources":["../../../src/codex/questions/candidates.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAIxE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAGhF,OAAO,EAAE,KAAK,SAAS,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtE,YAAY,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEtD,qBAAa,uBAAwB,SAAQ,cAAc;IACzD,6FAA6F;IAC7F,YAAY,CACV,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,SAAS,uBAAuB,EAAE,EAC3C,MAAM,EAAE,WAAW,GAClB,MAAM,IAAI;IAIb,OAAO,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO;IAG5C,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,OAAO;IAcf,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,OAAO;IAMf,OAAO,CAAC,MAAM;CAoCf"}
@@ -1,7 +1,9 @@
1
1
  import { isRecord } from "../../core/predicates.js";
2
2
  import { questionAnswerFailed } from "../../core/questions/errors.js";
3
+ import { payloadOf } from "../transcript/payload.js";
4
+ import { isTurnEndPayload } from "../transcript/turn-end.js";
3
5
  import { CandidateStore } from "./candidate-store.js";
4
- import { jsonRecord, payloadOf, questionCall, questionEnvelope, questionReplies, } from "./records.js";
6
+ import { jsonRecord, questionCall, questionEnvelope, questionReplies } from "./records.js";
5
7
  export class CodexQuestionCandidates extends CandidateStore {
6
8
  /** Bind before driver input; the transaction signal releases values after native closure. */
7
9
  expectAnswer(candidate, answers, signal) {
@@ -18,11 +20,8 @@ export class CodexQuestionCandidates extends CandidateStore {
18
20
  const payload = payloadOf(event.raw);
19
21
  if (!payload)
20
22
  return false;
21
- const type = payload["type"];
22
- if (typeof type === "string" &&
23
- ["task_complete", "turn_complete", "turn_aborted", "turn_failed"].includes(type)) {
23
+ if (isTurnEndPayload(payload))
24
24
  return this.endTurn();
25
- }
26
25
  const native = questionEnvelope(payload);
27
26
  if (native) {
28
27
  if (this.disabled)
@@ -1 +1 @@
1
- {"version":3,"file":"candidates.js","sourceRoot":"","sources":["../../../src/codex/questions/candidates.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"candidates.js","sourceRoot":"","sources":["../../../src/codex/questions/candidates.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAGtE,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAkB,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAI3F,MAAM,OAAO,uBAAwB,SAAQ,cAAc;IACzD,6FAA6F;IAC7F,YAAY,CACV,SAAoB,EACpB,OAA2C,EAC3C,MAAmB;QAEnB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,SAAS;YAAE,MAAM,oBAAoB,EAAE,CAAC;QACzF,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,CAAC,KAA0B;QAChC,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAClE,CAAC;IACO,aAAa,CAAC,KAA0B;QAC9C,IAAI,KAAK,CAAC,KAAK,KAAK,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY;YAAE,OAAO,KAAK,CAAC;QAC3E,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC3B,IAAI,gBAAgB,CAAC,OAAO,CAAC;YAAE,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACzC,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,IAAI,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAC1D,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;gBACnC,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YAC9E,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;YACxB,CAAC;QACH,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAChC,IAAI,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACpC,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,sBAAsB,IAAI,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,QAAQ;YACtF,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC;QAC5C,OAAO,OAAO,CAAC;IACjB,CAAC;IACO,OAAO,CAAC,OAAgC;QAC9C,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;QACzC,KAAK,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,OAAO,EAAE,CAAC;YACpD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACjD,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM;gBAAE,SAAS;YAC7C,MAAM,WAAW,GACf,CAAC,SAAS,IAAI,IAAI,CAAC,YAAY,CAAC,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC;gBACvE,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,aAAa,CAAC;YACpB,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,OAAO,CAAC;QAC1D,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACO,WAAW,CAAC,OAAgC;QAClD,IAAI,OAAO,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxF,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACjC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;gBAChC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;gBAC/C,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IACO,OAAO;QACb,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACtC,KAAK,MAAM,SAAS,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC,sBAAsB,EAAE,IAAI,OAAO,CAAC;IAClD,CAAC;IACO,MAAM,CAAC,OAAgC;QAC7C,MAAM,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CACrD,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CACvD,CAAC;QACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,SAAS,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,CAAC;gBACtD,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC;gBAC5C,SAAS;YACX,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC;YACpC,MAAM,0BAA0B,GAC9B,CAAC,SAAS,CAAC,MAAM;gBACjB,CAAC,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAAC,SAAS,EAAE,OAAO,CAAC;oBAChE,CAAC,QAAQ,CAAC,OAAO,CAAC;wBAChB,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE;4BACrC,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;4BAC1C,OAAO,CACL,QAAQ,CAAC,MAAM,CAAC;gCAChB,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;gCAChC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAC7E,CAAC;wBACJ,CAAC,CAAC,CAAC,CAAC,CAAC;YACX,MAAM,SAAS,GACb,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,2CAA2C,CAAC,CAAC;YAC7F,IAAI,WAAgC,CAAC;YACrC,IAAI,0BAA0B;gBAAE,WAAW,GAAG,UAAU,CAAC;iBACpD,IAAI,SAAS;gBAAE,WAAW,GAAG,WAAW,CAAC;;gBACzC,WAAW,GAAG,aAAa,CAAC;YACjC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,OAAO,CAAC;QACpE,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -1,7 +1,7 @@
1
1
  /** Guard private native Codex question navigation and answer writes (PRD §4). */
2
2
  import { delay } from "../../core/delay.js";
3
3
  import { bracketedPasteEnd, bracketedPasteStart } from "../../core/input/constants.js";
4
- import { pasteSettleDelayMs } from "../../core/input/index.js";
4
+ import { arrowDown, arrowUp, pasteSettleDelayMs } from "../../core/input/index.js";
5
5
  import { questionAnswerFailed } from "../../core/questions/errors.js";
6
6
  import { draftMatches } from "./draft.js";
7
7
  import { assertSupportedQuestions } from "./driver-support.js";
@@ -91,7 +91,7 @@ async function stageAnswer(question, answer, io, match, initial) {
91
91
  while (view.selected !== selected) {
92
92
  const before = view.selected;
93
93
  const after = before + (before < selected ? 1 : -1);
94
- await io.write(before < selected ? "\x1b[B" : "\x1b[A", (current) => {
94
+ await io.write(before < selected ? arrowDown : arrowUp, (current) => {
95
95
  const currentView = match(current);
96
96
  return currentView?.selected === before && unownedChoice(currentView, question);
97
97
  });