@with-logic/elwood 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (878) hide show
  1. package/CHANGELOG.md +571 -1
  2. package/CONTRIBUTING.md +3 -0
  3. package/README.md +6 -2
  4. package/dist/bridge/socket-release.d.ts +15 -0
  5. package/dist/bridge/socket-release.d.ts.map +1 -0
  6. package/dist/bridge/socket-release.js +22 -0
  7. package/dist/bridge/socket-release.js.map +1 -0
  8. package/dist/claude/composer/border.d.ts +12 -0
  9. package/dist/claude/composer/border.d.ts.map +1 -0
  10. package/dist/claude/composer/border.js +12 -0
  11. package/dist/claude/composer/border.js.map +1 -0
  12. package/dist/claude/composer/empty-input.d.ts +15 -0
  13. package/dist/claude/composer/empty-input.d.ts.map +1 -1
  14. package/dist/claude/composer/empty-input.js +30 -11
  15. package/dist/claude/composer/empty-input.js.map +1 -1
  16. package/dist/claude/composer/footer.d.ts +26 -2
  17. package/dist/claude/composer/footer.d.ts.map +1 -1
  18. package/dist/claude/composer/footer.js +29 -2
  19. package/dist/claude/composer/footer.js.map +1 -1
  20. package/dist/claude/composer/idle.d.ts +14 -0
  21. package/dist/claude/composer/idle.d.ts.map +1 -0
  22. package/dist/claude/composer/idle.js +17 -0
  23. package/dist/claude/composer/idle.js.map +1 -0
  24. package/dist/claude/composer/last.d.ts +2 -0
  25. package/dist/claude/composer/last.d.ts.map +1 -0
  26. package/dist/claude/composer/last.js +15 -0
  27. package/dist/claude/composer/last.js.map +1 -0
  28. package/dist/claude/composer/staged-input.d.ts.map +1 -1
  29. package/dist/claude/composer/staged-input.js +2 -1
  30. package/dist/claude/composer/staged-input.js.map +1 -1
  31. package/dist/claude/hooks/stop-failure.d.ts +15 -2
  32. package/dist/claude/hooks/stop-failure.d.ts.map +1 -1
  33. package/dist/claude/hooks/stop-failure.js +32 -9
  34. package/dist/claude/hooks/stop-failure.js.map +1 -1
  35. package/dist/claude/login/stages.d.ts.map +1 -1
  36. package/dist/claude/login/stages.js +2 -2
  37. package/dist/claude/login/stages.js.map +1 -1
  38. package/dist/claude/model-picker.d.ts +1 -1
  39. package/dist/claude/model-picker.d.ts.map +1 -1
  40. package/dist/claude/model-picker.js +27 -10
  41. package/dist/claude/model-picker.js.map +1 -1
  42. package/dist/claude/preflight.d.ts +1 -1
  43. package/dist/claude/preflight.d.ts.map +1 -1
  44. package/dist/claude/preflight.js +18 -12
  45. package/dist/claude/preflight.js.map +1 -1
  46. package/dist/claude/questions/navigation.d.ts.map +1 -1
  47. package/dist/claude/questions/navigation.js +1 -2
  48. package/dist/claude/questions/navigation.js.map +1 -1
  49. package/dist/claude/questions/screen.d.ts.map +1 -1
  50. package/dist/claude/questions/screen.js +10 -2
  51. package/dist/claude/questions/screen.js.map +1 -1
  52. package/dist/claude/screen-table.d.ts +8 -5
  53. package/dist/claude/screen-table.d.ts.map +1 -1
  54. package/dist/claude/screen-table.js +20 -12
  55. package/dist/claude/screen-table.js.map +1 -1
  56. package/dist/claude/session/bridge.d.ts +2 -1
  57. package/dist/claude/session/bridge.d.ts.map +1 -1
  58. package/dist/claude/session/bridge.js +3 -1
  59. package/dist/claude/session/bridge.js.map +1 -1
  60. package/dist/claude/session/build.d.ts.map +1 -1
  61. package/dist/claude/session/build.js +13 -11
  62. package/dist/claude/session/build.js.map +1 -1
  63. package/dist/claude/session/cleanup.d.ts +18 -0
  64. package/dist/claude/session/cleanup.d.ts.map +1 -0
  65. package/dist/claude/session/cleanup.js +10 -0
  66. package/dist/claude/session/cleanup.js.map +1 -0
  67. package/dist/claude/session/index.d.ts.map +1 -1
  68. package/dist/claude/session/index.js +27 -13
  69. package/dist/claude/session/index.js.map +1 -1
  70. package/dist/claude/session/instance.d.ts +7 -8
  71. package/dist/claude/session/instance.d.ts.map +1 -1
  72. package/dist/claude/session/instance.js +9 -13
  73. package/dist/claude/session/instance.js.map +1 -1
  74. package/dist/claude/session/resume.d.ts.map +1 -1
  75. package/dist/claude/session/resume.js +14 -5
  76. package/dist/claude/session/resume.js.map +1 -1
  77. package/dist/claude/session/transcript.js +2 -2
  78. package/dist/claude/session/transcript.js.map +1 -1
  79. package/dist/claude/simple.d.ts +1 -1
  80. package/dist/claude/simple.d.ts.map +1 -1
  81. package/dist/claude/simple.js +3 -3
  82. package/dist/claude/simple.js.map +1 -1
  83. package/dist/claude/startup-prompts.d.ts +2 -0
  84. package/dist/claude/startup-prompts.d.ts.map +1 -1
  85. package/dist/claude/startup-prompts.js +5 -1
  86. package/dist/claude/startup-prompts.js.map +1 -1
  87. package/dist/claude/transcript/cursor-io.d.ts +1 -1
  88. package/dist/claude/transcript/cursor-io.d.ts.map +1 -1
  89. package/dist/claude/transcript/cursor-io.js +1 -1
  90. package/dist/claude/transcript/cursor-io.js.map +1 -1
  91. package/dist/claude/transcript/cursor.d.ts +5 -3
  92. package/dist/claude/transcript/cursor.d.ts.map +1 -1
  93. package/dist/claude/transcript/cursor.js +18 -8
  94. package/dist/claude/transcript/cursor.js.map +1 -1
  95. package/dist/claude/transcript/drain-context.d.ts +4 -3
  96. package/dist/claude/transcript/drain-context.d.ts.map +1 -1
  97. package/dist/claude/transcript/drain-context.js.map +1 -1
  98. package/dist/claude/transcript/emit.d.ts +2 -1
  99. package/dist/claude/transcript/emit.d.ts.map +1 -1
  100. package/dist/claude/transcript/emit.js +1 -0
  101. package/dist/claude/transcript/emit.js.map +1 -1
  102. package/dist/claude/transcript/index.d.ts.map +1 -1
  103. package/dist/claude/transcript/index.js +2 -2
  104. package/dist/claude/transcript/index.js.map +1 -1
  105. package/dist/claude/transcript/warnings.d.ts +2 -1
  106. package/dist/claude/transcript/warnings.d.ts.map +1 -1
  107. package/dist/claude/transcript/warnings.js +3 -2
  108. package/dist/claude/transcript/warnings.js.map +1 -1
  109. package/dist/cli/config/effective.d.ts +2 -2
  110. package/dist/cli/config/effective.d.ts.map +1 -1
  111. package/dist/cli/config/effective.js +0 -2
  112. package/dist/cli/config/effective.js.map +1 -1
  113. package/dist/cli/interactive/spawn.d.ts +0 -2
  114. package/dist/cli/interactive/spawn.d.ts.map +1 -1
  115. package/dist/cli/interactive/spawn.js +27 -24
  116. package/dist/cli/interactive/spawn.js.map +1 -1
  117. package/dist/cli/lifecycle/index.d.ts.map +1 -1
  118. package/dist/cli/lifecycle/index.js +5 -3
  119. package/dist/cli/lifecycle/index.js.map +1 -1
  120. package/dist/cli/main-failure.d.ts.map +1 -1
  121. package/dist/cli/main-failure.js +5 -2
  122. package/dist/cli/main-failure.js.map +1 -1
  123. package/dist/cli/models/combined.d.ts.map +1 -1
  124. package/dist/cli/models/combined.js +3 -2
  125. package/dist/cli/models/combined.js.map +1 -1
  126. package/dist/cli/models/render.d.ts.map +1 -1
  127. package/dist/cli/models/render.js +2 -1
  128. package/dist/cli/models/render.js.map +1 -1
  129. package/dist/cli/output/cleanup-error.d.ts +22 -0
  130. package/dist/cli/output/cleanup-error.d.ts.map +1 -0
  131. package/dist/cli/output/cleanup-error.js +67 -0
  132. package/dist/cli/output/cleanup-error.js.map +1 -0
  133. package/dist/cli/output/types.d.ts +6 -2
  134. package/dist/cli/output/types.d.ts.map +1 -1
  135. package/dist/cli/request/agent-detect.d.ts +6 -2
  136. package/dist/cli/request/agent-detect.d.ts.map +1 -1
  137. package/dist/cli/request/agent-detect.js +14 -6
  138. package/dist/cli/request/agent-detect.js.map +1 -1
  139. package/dist/cli/request/finalize.d.ts +1 -1
  140. package/dist/cli/request/finalize.d.ts.map +1 -1
  141. package/dist/cli/request/finalize.js +4 -25
  142. package/dist/cli/request/finalize.js.map +1 -1
  143. package/dist/cli/request/index.d.ts.map +1 -1
  144. package/dist/cli/request/index.js +11 -5
  145. package/dist/cli/request/index.js.map +1 -1
  146. package/dist/cli/request/path-replacement.d.ts +27 -0
  147. package/dist/cli/request/path-replacement.d.ts.map +1 -0
  148. package/dist/cli/request/path-replacement.js +79 -0
  149. package/dist/cli/request/path-replacement.js.map +1 -0
  150. package/dist/cli/request/workspace.d.ts +8 -0
  151. package/dist/cli/request/workspace.d.ts.map +1 -0
  152. package/dist/cli/request/workspace.js +50 -0
  153. package/dist/cli/request/workspace.js.map +1 -0
  154. package/dist/cli/run/output.d.ts.map +1 -1
  155. package/dist/cli/run/output.js +2 -1
  156. package/dist/cli/run/output.js.map +1 -1
  157. package/dist/cli/run/subscribe.d.ts.map +1 -1
  158. package/dist/cli/run/subscribe.js +1 -1
  159. package/dist/cli/run/subscribe.js.map +1 -1
  160. package/dist/cli/session/index.d.ts +4 -4
  161. package/dist/cli/session/index.d.ts.map +1 -1
  162. package/dist/cli/session/index.js +5 -5
  163. package/dist/cli/session/index.js.map +1 -1
  164. package/dist/cli/session/launch.d.ts +2 -2
  165. package/dist/cli/session/launch.d.ts.map +1 -1
  166. package/dist/cli/session/launch.js +12 -3
  167. package/dist/cli/session/launch.js.map +1 -1
  168. package/dist/cli/session/turn-readers.d.ts +14 -0
  169. package/dist/cli/session/turn-readers.d.ts.map +1 -0
  170. package/dist/cli/session/turn-readers.js +13 -0
  171. package/dist/cli/session/turn-readers.js.map +1 -0
  172. package/dist/codex/config/default-model.d.ts +24 -0
  173. package/dist/codex/config/default-model.d.ts.map +1 -0
  174. package/dist/codex/config/default-model.js +133 -0
  175. package/dist/codex/config/default-model.js.map +1 -0
  176. package/dist/codex/config/home.d.ts +35 -0
  177. package/dist/codex/config/home.d.ts.map +1 -0
  178. package/dist/codex/config/home.js +122 -0
  179. package/dist/codex/config/home.js.map +1 -0
  180. package/dist/codex/config/lock.d.ts +17 -11
  181. package/dist/codex/config/lock.d.ts.map +1 -1
  182. package/dist/codex/config/lock.js +102 -11
  183. package/dist/codex/config/lock.js.map +1 -1
  184. package/dist/codex/config/read.d.ts +16 -0
  185. package/dist/codex/config/read.d.ts.map +1 -0
  186. package/dist/codex/config/read.js +75 -0
  187. package/dist/codex/config/read.js.map +1 -0
  188. package/dist/codex/config/restore.d.ts +17 -7
  189. package/dist/codex/config/restore.d.ts.map +1 -1
  190. package/dist/codex/config/restore.js +33 -20
  191. package/dist/codex/config/restore.js.map +1 -1
  192. package/dist/codex/config/transaction.d.ts +6 -4
  193. package/dist/codex/config/transaction.d.ts.map +1 -1
  194. package/dist/codex/config/transaction.js +4 -3
  195. package/dist/codex/config/transaction.js.map +1 -1
  196. package/dist/codex/images/clipboard-copies.d.ts +39 -0
  197. package/dist/codex/images/clipboard-copies.d.ts.map +1 -0
  198. package/dist/codex/images/clipboard-copies.js +91 -0
  199. package/dist/codex/images/clipboard-copies.js.map +1 -0
  200. package/dist/codex/model-picker.d.ts +1 -1
  201. package/dist/codex/model-picker.d.ts.map +1 -1
  202. package/dist/codex/model-picker.js +16 -6
  203. package/dist/codex/model-picker.js.map +1 -1
  204. package/dist/codex/preflight.d.ts +2 -2
  205. package/dist/codex/preflight.d.ts.map +1 -1
  206. package/dist/codex/preflight.js +28 -21
  207. package/dist/codex/preflight.js.map +1 -1
  208. package/dist/codex/pty.d.ts +25 -3
  209. package/dist/codex/pty.d.ts.map +1 -1
  210. package/dist/codex/pty.js +53 -7
  211. package/dist/codex/pty.js.map +1 -1
  212. package/dist/codex/questions/candidates.d.ts.map +1 -1
  213. package/dist/codex/questions/candidates.js +4 -5
  214. package/dist/codex/questions/candidates.js.map +1 -1
  215. package/dist/codex/questions/driver.js +2 -2
  216. package/dist/codex/questions/driver.js.map +1 -1
  217. package/dist/codex/questions/records.d.ts +1 -1
  218. package/dist/codex/questions/records.d.ts.map +1 -1
  219. package/dist/codex/questions/records.js +1 -3
  220. package/dist/codex/questions/records.js.map +1 -1
  221. package/dist/codex/screen/clearance.d.ts +6 -0
  222. package/dist/codex/screen/clearance.d.ts.map +1 -1
  223. package/dist/codex/screen/clearance.js +10 -0
  224. package/dist/codex/screen/clearance.js.map +1 -1
  225. package/dist/codex/screen-table.d.ts.map +1 -1
  226. package/dist/codex/screen-table.js +6 -2
  227. package/dist/codex/screen-table.js.map +1 -1
  228. package/dist/codex/session/bridge.d.ts +1 -0
  229. package/dist/codex/session/bridge.d.ts.map +1 -1
  230. package/dist/codex/session/bridge.js +3 -1
  231. package/dist/codex/session/bridge.js.map +1 -1
  232. package/dist/codex/session/build.d.ts.map +1 -1
  233. package/dist/codex/session/build.js +14 -12
  234. package/dist/codex/session/build.js.map +1 -1
  235. package/dist/codex/session/cleanup.d.ts +2 -2
  236. package/dist/codex/session/cleanup.d.ts.map +1 -1
  237. package/dist/codex/session/cleanup.js +8 -11
  238. package/dist/codex/session/cleanup.js.map +1 -1
  239. package/dist/codex/session/config-switch.d.ts +20 -0
  240. package/dist/codex/session/config-switch.d.ts.map +1 -0
  241. package/dist/codex/session/config-switch.js +42 -0
  242. package/dist/codex/session/config-switch.js.map +1 -0
  243. package/dist/codex/session/hooks.d.ts.map +1 -1
  244. package/dist/codex/session/hooks.js +7 -0
  245. package/dist/codex/session/hooks.js.map +1 -1
  246. package/dist/codex/session/index.d.ts.map +1 -1
  247. package/dist/codex/session/index.js +34 -16
  248. package/dist/codex/session/index.js.map +1 -1
  249. package/dist/codex/session/instance.d.ts +10 -12
  250. package/dist/codex/session/instance.d.ts.map +1 -1
  251. package/dist/codex/session/instance.js +42 -37
  252. package/dist/codex/session/instance.js.map +1 -1
  253. package/dist/codex/session/readiness.d.ts +11 -0
  254. package/dist/codex/session/readiness.d.ts.map +1 -0
  255. package/dist/codex/session/readiness.js +22 -0
  256. package/dist/codex/session/readiness.js.map +1 -0
  257. package/dist/codex/session/resume.d.ts.map +1 -1
  258. package/dist/codex/session/resume.js +9 -4
  259. package/dist/codex/session/resume.js.map +1 -1
  260. package/dist/codex/session/transcript.d.ts.map +1 -1
  261. package/dist/codex/session/transcript.js +12 -1
  262. package/dist/codex/session/transcript.js.map +1 -1
  263. package/dist/codex/session/turn-commit.d.ts +58 -0
  264. package/dist/codex/session/turn-commit.d.ts.map +1 -0
  265. package/dist/codex/session/turn-commit.js +97 -0
  266. package/dist/codex/session/turn-commit.js.map +1 -0
  267. package/dist/codex/session/warnings.d.ts +13 -6
  268. package/dist/codex/session/warnings.d.ts.map +1 -1
  269. package/dist/codex/session/warnings.js +36 -9
  270. package/dist/codex/session/warnings.js.map +1 -1
  271. package/dist/codex/startup-prompts.d.ts +3 -0
  272. package/dist/codex/startup-prompts.d.ts.map +1 -1
  273. package/dist/codex/startup-prompts.js +20 -13
  274. package/dist/codex/startup-prompts.js.map +1 -1
  275. package/dist/codex/startup-warnings.d.ts +2 -0
  276. package/dist/codex/startup-warnings.d.ts.map +1 -1
  277. package/dist/codex/startup-warnings.js +6 -0
  278. package/dist/codex/startup-warnings.js.map +1 -1
  279. package/dist/codex/transcript/payload.d.ts +8 -0
  280. package/dist/codex/transcript/payload.d.ts.map +1 -0
  281. package/dist/codex/transcript/payload.js +11 -0
  282. package/dist/codex/transcript/payload.js.map +1 -0
  283. package/dist/codex/transcript/rejection.d.ts +15 -0
  284. package/dist/codex/transcript/rejection.d.ts.map +1 -0
  285. package/dist/codex/transcript/rejection.js +44 -0
  286. package/dist/codex/transcript/rejection.js.map +1 -0
  287. package/dist/codex/transcript/turn-end.d.ts +8 -0
  288. package/dist/codex/transcript/turn-end.d.ts.map +1 -0
  289. package/dist/codex/transcript/turn-end.js +17 -0
  290. package/dist/codex/transcript/turn-end.js.map +1 -0
  291. package/dist/codex/transcript/watcher.d.ts +5 -2
  292. package/dist/codex/transcript/watcher.d.ts.map +1 -1
  293. package/dist/codex/transcript/watcher.js +11 -6
  294. package/dist/codex/transcript/watcher.js.map +1 -1
  295. package/dist/codex/trust-retry.d.ts +12 -0
  296. package/dist/codex/trust-retry.d.ts.map +1 -0
  297. package/dist/codex/trust-retry.js +12 -0
  298. package/dist/codex/trust-retry.js.map +1 -0
  299. package/dist/codex/update/skip-attempt.d.ts +2 -0
  300. package/dist/codex/update/skip-attempt.d.ts.map +1 -1
  301. package/dist/codex/update/skip-attempt.js +4 -0
  302. package/dist/codex/update/skip-attempt.js.map +1 -1
  303. package/dist/codex/update/tracker.d.ts +2 -0
  304. package/dist/codex/update/tracker.d.ts.map +1 -1
  305. package/dist/codex/update/tracker.js +4 -0
  306. package/dist/codex/update/tracker.js.map +1 -1
  307. package/dist/core/delay.d.ts +3 -2
  308. package/dist/core/delay.d.ts.map +1 -1
  309. package/dist/core/delay.js +3 -2
  310. package/dist/core/delay.js.map +1 -1
  311. package/dist/core/errors.d.ts +33 -4
  312. package/dist/core/errors.d.ts.map +1 -1
  313. package/dist/core/errors.js +51 -7
  314. package/dist/core/errors.js.map +1 -1
  315. package/dist/core/images/materialize.d.ts +13 -4
  316. package/dist/core/images/materialize.d.ts.map +1 -1
  317. package/dist/core/images/materialize.js +48 -11
  318. package/dist/core/images/materialize.js.map +1 -1
  319. package/dist/core/input/abort.d.ts +15 -0
  320. package/dist/core/input/abort.d.ts.map +1 -1
  321. package/dist/core/input/abort.js +18 -2
  322. package/dist/core/input/abort.js.map +1 -1
  323. package/dist/core/input/constants.d.ts +4 -1
  324. package/dist/core/input/constants.d.ts.map +1 -1
  325. package/dist/core/input/constants.js +4 -1
  326. package/dist/core/input/constants.js.map +1 -1
  327. package/dist/core/input/index.d.ts +1 -1
  328. package/dist/core/input/index.d.ts.map +1 -1
  329. package/dist/core/input/index.js +1 -1
  330. package/dist/core/input/index.js.map +1 -1
  331. package/dist/core/models/clearance.d.ts +38 -0
  332. package/dist/core/models/clearance.d.ts.map +1 -0
  333. package/dist/core/models/clearance.js +38 -0
  334. package/dist/core/models/clearance.js.map +1 -0
  335. package/dist/core/models/close-wait.d.ts +17 -0
  336. package/dist/core/models/close-wait.d.ts.map +1 -0
  337. package/dist/core/models/close-wait.js +44 -0
  338. package/dist/core/models/close-wait.js.map +1 -0
  339. package/dist/core/models/dialog-region.d.ts +18 -3
  340. package/dist/core/models/dialog-region.d.ts.map +1 -1
  341. package/dist/core/models/dialog-region.js +29 -40
  342. package/dist/core/models/dialog-region.js.map +1 -1
  343. package/dist/core/models/input.d.ts +10 -1
  344. package/dist/core/models/input.d.ts.map +1 -1
  345. package/dist/core/models/input.js +15 -2
  346. package/dist/core/models/input.js.map +1 -1
  347. package/dist/core/models/intervention.d.ts +2 -2
  348. package/dist/core/models/intervention.d.ts.map +1 -1
  349. package/dist/core/models/intervention.js +6 -3
  350. package/dist/core/models/intervention.js.map +1 -1
  351. package/dist/core/models/own-picker.d.ts +21 -0
  352. package/dist/core/models/own-picker.d.ts.map +1 -0
  353. package/dist/core/models/own-picker.js +21 -0
  354. package/dist/core/models/own-picker.js.map +1 -0
  355. package/dist/core/models/picker.d.ts +34 -4
  356. package/dist/core/models/picker.d.ts.map +1 -1
  357. package/dist/core/models/picker.js +50 -44
  358. package/dist/core/models/picker.js.map +1 -1
  359. package/dist/core/models/row-block.d.ts +66 -0
  360. package/dist/core/models/row-block.d.ts.map +1 -0
  361. package/dist/core/models/row-block.js +87 -0
  362. package/dist/core/models/row-block.js.map +1 -0
  363. package/dist/core/models/rows.d.ts +32 -3
  364. package/dist/core/models/rows.d.ts.map +1 -1
  365. package/dist/core/models/rows.js +48 -20
  366. package/dist/core/models/rows.js.map +1 -1
  367. package/dist/core/models/tui-screen.d.ts +6 -1
  368. package/dist/core/models/tui-screen.d.ts.map +1 -1
  369. package/dist/core/models/tui-screen.js +25 -10
  370. package/dist/core/models/tui-screen.js.map +1 -1
  371. package/dist/core/models/window.d.ts +49 -0
  372. package/dist/core/models/window.d.ts.map +1 -0
  373. package/dist/core/models/window.js +105 -0
  374. package/dist/core/models/window.js.map +1 -0
  375. package/dist/core/path-trust.d.ts +11 -0
  376. package/dist/core/path-trust.d.ts.map +1 -0
  377. package/dist/core/path-trust.js +21 -0
  378. package/dist/core/path-trust.js.map +1 -0
  379. package/dist/core/screen-facts.d.ts +3 -1
  380. package/dist/core/screen-facts.d.ts.map +1 -1
  381. package/dist/core/screen-facts.js +1 -0
  382. package/dist/core/screen-facts.js.map +1 -1
  383. package/dist/core/simple/boundary-signal.d.ts +41 -6
  384. package/dist/core/simple/boundary-signal.d.ts.map +1 -1
  385. package/dist/core/simple/boundary-signal.js +43 -3
  386. package/dist/core/simple/boundary-signal.js.map +1 -1
  387. package/dist/core/simple/close.d.ts +2 -1
  388. package/dist/core/simple/close.d.ts.map +1 -1
  389. package/dist/core/simple/close.js +10 -2
  390. package/dist/core/simple/close.js.map +1 -1
  391. package/dist/core/simple/turn-boundary.d.ts +2 -0
  392. package/dist/core/simple/turn-boundary.d.ts.map +1 -1
  393. package/dist/core/simple/turn-boundary.js +1 -1
  394. package/dist/core/simple/turn-boundary.js.map +1 -1
  395. package/dist/core/simple/turn-types.d.ts +9 -3
  396. package/dist/core/simple/turn-types.d.ts.map +1 -1
  397. package/dist/core/simple/turn-types.js +10 -2
  398. package/dist/core/simple/turn-types.js.map +1 -1
  399. package/dist/core/simple/turn.d.ts +2 -0
  400. package/dist/core/simple/turn.d.ts.map +1 -1
  401. package/dist/core/simple/turn.js +11 -5
  402. package/dist/core/simple/turn.js.map +1 -1
  403. package/dist/core/terminal-options.d.ts +17 -1
  404. package/dist/core/terminal-options.d.ts.map +1 -1
  405. package/dist/core/terminal-options.js +20 -8
  406. package/dist/core/terminal-options.js.map +1 -1
  407. package/dist/core/transcript/cursor-io.d.ts +8 -0
  408. package/dist/core/transcript/cursor-io.d.ts.map +1 -1
  409. package/dist/core/transcript/cursor-io.js +11 -5
  410. package/dist/core/transcript/cursor-io.js.map +1 -1
  411. package/dist/core/transcript/cursor.d.ts +28 -4
  412. package/dist/core/transcript/cursor.d.ts.map +1 -1
  413. package/dist/core/transcript/cursor.js +53 -7
  414. package/dist/core/transcript/cursor.js.map +1 -1
  415. package/dist/core/transcript/drain.d.ts +43 -0
  416. package/dist/core/transcript/drain.d.ts.map +1 -0
  417. package/dist/core/transcript/drain.js +67 -0
  418. package/dist/core/transcript/drain.js.map +1 -0
  419. package/dist/core/trust/abortable.d.ts +12 -0
  420. package/dist/core/trust/abortable.d.ts.map +1 -0
  421. package/dist/core/trust/abortable.js +48 -0
  422. package/dist/core/trust/abortable.js.map +1 -0
  423. package/dist/core/trust/allowlist.d.ts +2 -0
  424. package/dist/core/trust/allowlist.d.ts.map +1 -1
  425. package/dist/core/trust/allowlist.js +4 -1
  426. package/dist/core/trust/allowlist.js.map +1 -1
  427. package/dist/core/trust/blocking.d.ts +11 -0
  428. package/dist/core/trust/blocking.d.ts.map +1 -1
  429. package/dist/core/trust/blocking.js +5 -4
  430. package/dist/core/trust/blocking.js.map +1 -1
  431. package/dist/core/trust/copy.d.ts.map +1 -1
  432. package/dist/core/trust/copy.js +7 -1
  433. package/dist/core/trust/copy.js.map +1 -1
  434. package/dist/core/trust/deadline.d.ts +24 -0
  435. package/dist/core/trust/deadline.d.ts.map +1 -0
  436. package/dist/core/trust/deadline.js +56 -0
  437. package/dist/core/trust/deadline.js.map +1 -0
  438. package/dist/core/trust/dialog.d.ts +11 -2
  439. package/dist/core/trust/dialog.d.ts.map +1 -1
  440. package/dist/core/trust/dialog.js +12 -3
  441. package/dist/core/trust/dialog.js.map +1 -1
  442. package/dist/core/trust/options.d.ts +5 -1
  443. package/dist/core/trust/options.d.ts.map +1 -1
  444. package/dist/core/trust/options.js +8 -2
  445. package/dist/core/trust/options.js.map +1 -1
  446. package/dist/core/trust/prompts.d.ts +3 -0
  447. package/dist/core/trust/prompts.d.ts.map +1 -1
  448. package/dist/core/trust/prompts.js +2 -1
  449. package/dist/core/trust/prompts.js.map +1 -1
  450. package/dist/core/trust/responder.d.ts +10 -5
  451. package/dist/core/trust/responder.d.ts.map +1 -1
  452. package/dist/core/trust/responder.js +37 -33
  453. package/dist/core/trust/responder.js.map +1 -1
  454. package/dist/core/trust/step.d.ts +67 -0
  455. package/dist/core/trust/step.d.ts.map +1 -0
  456. package/dist/core/trust/step.js +45 -0
  457. package/dist/core/trust/step.js.map +1 -0
  458. package/dist/core/trust/types.d.ts +21 -1
  459. package/dist/core/trust/types.d.ts.map +1 -1
  460. package/dist/core/trust/types.js +25 -1
  461. package/dist/core/trust/types.js.map +1 -1
  462. package/dist/core/trust/view.d.ts +2 -0
  463. package/dist/core/trust/view.d.ts.map +1 -1
  464. package/dist/core/trust/view.js +3 -0
  465. package/dist/core/trust/view.js.map +1 -1
  466. package/dist/core/trust/write.d.ts +31 -6
  467. package/dist/core/trust/write.d.ts.map +1 -1
  468. package/dist/core/trust/write.js +95 -80
  469. package/dist/core/trust/write.js.map +1 -1
  470. package/dist/core/turn-state.d.ts +18 -4
  471. package/dist/core/turn-state.d.ts.map +1 -1
  472. package/dist/core/turn-state.js +47 -25
  473. package/dist/core/turn-state.js.map +1 -1
  474. package/dist/core/warnings/images.d.ts +22 -0
  475. package/dist/core/warnings/images.d.ts.map +1 -0
  476. package/dist/core/warnings/images.js +3 -0
  477. package/dist/core/warnings/images.js.map +1 -0
  478. package/dist/core/warnings/index.d.ts +3 -2
  479. package/dist/core/warnings/index.d.ts.map +1 -1
  480. package/dist/core/warnings/lifecycle.d.ts +35 -4
  481. package/dist/core/warnings/lifecycle.d.ts.map +1 -1
  482. package/dist/core/warnings/lifecycle.js +1 -1
  483. package/dist/core/warnings/update.d.ts +8 -4
  484. package/dist/core/warnings/update.d.ts.map +1 -1
  485. package/dist/core/warnings/update.js +21 -6
  486. package/dist/core/warnings/update.js.map +1 -1
  487. package/dist/pty/exit-latch.d.ts +28 -0
  488. package/dist/pty/exit-latch.d.ts.map +1 -0
  489. package/dist/pty/exit-latch.js +50 -0
  490. package/dist/pty/exit-latch.js.map +1 -0
  491. package/dist/runtime/exit-status.d.ts +7 -0
  492. package/dist/runtime/exit-status.d.ts.map +1 -0
  493. package/dist/runtime/exit-status.js +13 -0
  494. package/dist/runtime/exit-status.js.map +1 -0
  495. package/dist/runtime/home-guard/index.d.ts +45 -0
  496. package/dist/runtime/home-guard/index.d.ts.map +1 -0
  497. package/dist/runtime/home-guard/index.js +69 -0
  498. package/dist/runtime/home-guard/index.js.map +1 -0
  499. package/dist/runtime/loop-restore.d.ts +9 -9
  500. package/dist/runtime/loop-restore.d.ts.map +1 -1
  501. package/dist/runtime/loop-restore.js +10 -10
  502. package/dist/runtime/loop-restore.js.map +1 -1
  503. package/dist/runtime/probe/capped-buffer.d.ts +16 -0
  504. package/dist/runtime/probe/capped-buffer.d.ts.map +1 -0
  505. package/dist/runtime/probe/capped-buffer.js +38 -0
  506. package/dist/runtime/probe/capped-buffer.js.map +1 -0
  507. package/dist/runtime/probe/capture.d.ts +55 -0
  508. package/dist/runtime/probe/capture.d.ts.map +1 -0
  509. package/dist/runtime/probe/capture.js +71 -0
  510. package/dist/runtime/probe/capture.js.map +1 -0
  511. package/dist/runtime/{probe-cleanup.d.ts → probe/cleanup.d.ts} +2 -2
  512. package/dist/runtime/probe/cleanup.d.ts.map +1 -0
  513. package/dist/runtime/{probe-cleanup.js → probe/cleanup.js} +3 -3
  514. package/dist/runtime/probe/cleanup.js.map +1 -0
  515. package/dist/runtime/probe/directory-key.d.ts +26 -0
  516. package/dist/runtime/probe/directory-key.d.ts.map +1 -0
  517. package/dist/runtime/probe/directory-key.js +46 -0
  518. package/dist/runtime/probe/directory-key.js.map +1 -0
  519. package/dist/runtime/probe/index.d.ts +25 -0
  520. package/dist/runtime/probe/index.d.ts.map +1 -0
  521. package/dist/runtime/probe/index.js +153 -0
  522. package/dist/runtime/probe/index.js.map +1 -0
  523. package/dist/runtime/probe/lookup.d.ts +12 -0
  524. package/dist/runtime/probe/lookup.d.ts.map +1 -0
  525. package/dist/runtime/probe/lookup.js +29 -0
  526. package/dist/runtime/probe/lookup.js.map +1 -0
  527. package/dist/runtime/probe/named-pipes.d.ts +35 -0
  528. package/dist/runtime/probe/named-pipes.d.ts.map +1 -0
  529. package/dist/runtime/probe/named-pipes.js +167 -0
  530. package/dist/runtime/probe/named-pipes.js.map +1 -0
  531. package/dist/runtime/probe/private-directory.d.ts +14 -0
  532. package/dist/runtime/probe/private-directory.d.ts.map +1 -0
  533. package/dist/runtime/probe/private-directory.js +50 -0
  534. package/dist/runtime/probe/private-directory.js.map +1 -0
  535. package/dist/runtime/probe/results.d.ts +14 -0
  536. package/dist/runtime/probe/results.d.ts.map +1 -0
  537. package/dist/runtime/probe/results.js +38 -0
  538. package/dist/runtime/probe/results.js.map +1 -0
  539. package/dist/runtime/probe/slots.d.ts +17 -0
  540. package/dist/runtime/probe/slots.d.ts.map +1 -0
  541. package/dist/runtime/probe/slots.js +35 -0
  542. package/dist/runtime/probe/slots.js.map +1 -0
  543. package/dist/runtime/probe/start.d.ts +64 -0
  544. package/dist/runtime/probe/start.d.ts.map +1 -0
  545. package/dist/runtime/probe/start.js +80 -0
  546. package/dist/runtime/probe/start.js.map +1 -0
  547. package/dist/runtime/probe-cache.d.ts +19 -0
  548. package/dist/runtime/probe-cache.d.ts.map +1 -0
  549. package/dist/runtime/probe-cache.js +56 -0
  550. package/dist/runtime/probe-cache.js.map +1 -0
  551. package/dist/runtime/readiness/initial-ready.d.ts +31 -5
  552. package/dist/runtime/readiness/initial-ready.d.ts.map +1 -1
  553. package/dist/runtime/readiness/initial-ready.js +64 -18
  554. package/dist/runtime/readiness/initial-ready.js.map +1 -1
  555. package/dist/runtime/seams.d.ts +14 -2
  556. package/dist/runtime/seams.d.ts.map +1 -1
  557. package/dist/runtime/seams.js +2 -2
  558. package/dist/runtime/seams.js.map +1 -1
  559. package/dist/runtime/session/base.d.ts.map +1 -1
  560. package/dist/runtime/session/base.js +9 -6
  561. package/dist/runtime/session/base.js.map +1 -1
  562. package/dist/runtime/session/commands.d.ts +6 -4
  563. package/dist/runtime/session/commands.d.ts.map +1 -1
  564. package/dist/runtime/session/commands.js +5 -2
  565. package/dist/runtime/session/commands.js.map +1 -1
  566. package/dist/runtime/session/frames.d.ts +12 -2
  567. package/dist/runtime/session/frames.d.ts.map +1 -1
  568. package/dist/runtime/session/frames.js +10 -3
  569. package/dist/runtime/session/frames.js.map +1 -1
  570. package/dist/runtime/session/image-attach.js +7 -2
  571. package/dist/runtime/session/image-attach.js.map +1 -1
  572. package/dist/runtime/session/launch-directory.d.ts +33 -0
  573. package/dist/runtime/session/launch-directory.d.ts.map +1 -0
  574. package/dist/runtime/session/launch-directory.js +84 -0
  575. package/dist/runtime/session/launch-directory.js.map +1 -0
  576. package/dist/runtime/session/lifecycle.d.ts +3 -3
  577. package/dist/runtime/session/lifecycle.d.ts.map +1 -1
  578. package/dist/runtime/session/lifecycle.js +1 -5
  579. package/dist/runtime/session/lifecycle.js.map +1 -1
  580. package/dist/runtime/session/loops.d.ts +1 -1
  581. package/dist/runtime/session/loops.d.ts.map +1 -1
  582. package/dist/runtime/session/loops.js +6 -3
  583. package/dist/runtime/session/loops.js.map +1 -1
  584. package/dist/runtime/session/picker-cleanup.d.ts +6 -21
  585. package/dist/runtime/session/picker-cleanup.d.ts.map +1 -1
  586. package/dist/runtime/session/picker-cleanup.js +19 -31
  587. package/dist/runtime/session/picker-cleanup.js.map +1 -1
  588. package/dist/runtime/session/picker-hold.d.ts +24 -0
  589. package/dist/runtime/session/picker-hold.d.ts.map +1 -0
  590. package/dist/runtime/session/picker-hold.js +42 -0
  591. package/dist/runtime/session/picker-hold.js.map +1 -0
  592. package/dist/runtime/session/picker.d.ts +15 -13
  593. package/dist/runtime/session/picker.d.ts.map +1 -1
  594. package/dist/runtime/session/picker.js +49 -27
  595. package/dist/runtime/session/picker.js.map +1 -1
  596. package/dist/runtime/session/prepare-state.d.ts +6 -0
  597. package/dist/runtime/session/prepare-state.d.ts.map +1 -0
  598. package/dist/runtime/session/prepare-state.js +14 -0
  599. package/dist/runtime/session/prepare-state.js.map +1 -0
  600. package/dist/runtime/session/questions.d.ts +2 -2
  601. package/dist/runtime/session/questions.d.ts.map +1 -1
  602. package/dist/runtime/session/questions.js.map +1 -1
  603. package/dist/runtime/session/readiness.d.ts +14 -5
  604. package/dist/runtime/session/readiness.d.ts.map +1 -1
  605. package/dist/runtime/session/readiness.js +22 -6
  606. package/dist/runtime/session/readiness.js.map +1 -1
  607. package/dist/runtime/session/reap.d.ts +11 -7
  608. package/dist/runtime/session/reap.d.ts.map +1 -1
  609. package/dist/runtime/session/reap.js +16 -10
  610. package/dist/runtime/session/reap.js.map +1 -1
  611. package/dist/runtime/session/runtime-cleanup.d.ts +18 -0
  612. package/dist/runtime/session/runtime-cleanup.d.ts.map +1 -0
  613. package/dist/runtime/session/runtime-cleanup.js +18 -0
  614. package/dist/runtime/session/runtime-cleanup.js.map +1 -0
  615. package/dist/runtime/session/session-input.d.ts +32 -0
  616. package/dist/runtime/session/session-input.d.ts.map +1 -0
  617. package/dist/runtime/session/{picker-input.js → session-input.js} +35 -7
  618. package/dist/runtime/session/session-input.js.map +1 -0
  619. package/dist/runtime/session/shutdown-binding.d.ts +12 -1
  620. package/dist/runtime/session/shutdown-binding.d.ts.map +1 -1
  621. package/dist/runtime/session/shutdown-binding.js +33 -1
  622. package/dist/runtime/session/shutdown-binding.js.map +1 -1
  623. package/dist/runtime/session/shutdown-cleanup.d.ts +17 -0
  624. package/dist/runtime/session/shutdown-cleanup.d.ts.map +1 -0
  625. package/dist/runtime/session/shutdown-cleanup.js +49 -0
  626. package/dist/runtime/session/shutdown-cleanup.js.map +1 -0
  627. package/dist/runtime/session/shutdown.d.ts +3 -2
  628. package/dist/runtime/session/shutdown.d.ts.map +1 -1
  629. package/dist/runtime/session/shutdown.js +13 -24
  630. package/dist/runtime/session/shutdown.js.map +1 -1
  631. package/dist/runtime/shell-quote.d.ts +8 -0
  632. package/dist/runtime/shell-quote.d.ts.map +1 -0
  633. package/dist/runtime/shell-quote.js +10 -0
  634. package/dist/runtime/shell-quote.js.map +1 -0
  635. package/dist/runtime/shell.d.ts +36 -12
  636. package/dist/runtime/shell.d.ts.map +1 -1
  637. package/dist/runtime/shell.js +90 -14
  638. package/dist/runtime/shell.js.map +1 -1
  639. package/dist/runtime/shutdown/coalesce.d.ts +15 -0
  640. package/dist/runtime/shutdown/coalesce.d.ts.map +1 -0
  641. package/dist/runtime/shutdown/coalesce.js +42 -0
  642. package/dist/runtime/shutdown/coalesce.js.map +1 -0
  643. package/dist/runtime/shutdown/detached-sweep/failures.d.ts +24 -0
  644. package/dist/runtime/shutdown/detached-sweep/failures.d.ts.map +1 -0
  645. package/dist/runtime/shutdown/detached-sweep/failures.js +32 -0
  646. package/dist/runtime/shutdown/detached-sweep/failures.js.map +1 -0
  647. package/dist/runtime/shutdown/detached-sweep/index.d.ts +55 -0
  648. package/dist/runtime/shutdown/detached-sweep/index.d.ts.map +1 -0
  649. package/dist/runtime/shutdown/detached-sweep/index.js +129 -0
  650. package/dist/runtime/shutdown/detached-sweep/index.js.map +1 -0
  651. package/dist/runtime/shutdown/detached-sweep/kill.d.ts +37 -0
  652. package/dist/runtime/shutdown/detached-sweep/kill.d.ts.map +1 -0
  653. package/dist/runtime/shutdown/detached-sweep/kill.js +87 -0
  654. package/dist/runtime/shutdown/detached-sweep/kill.js.map +1 -0
  655. package/dist/runtime/shutdown/detached-sweep/record.d.ts +67 -0
  656. package/dist/runtime/shutdown/detached-sweep/record.d.ts.map +1 -0
  657. package/dist/runtime/shutdown/detached-sweep/record.js +111 -0
  658. package/dist/runtime/shutdown/detached-sweep/record.js.map +1 -0
  659. package/dist/runtime/shutdown/detached-sweep/rounds.d.ts +78 -0
  660. package/dist/runtime/shutdown/detached-sweep/rounds.d.ts.map +1 -0
  661. package/dist/runtime/shutdown/detached-sweep/rounds.js +116 -0
  662. package/dist/runtime/shutdown/detached-sweep/rounds.js.map +1 -0
  663. package/dist/runtime/shutdown/detached-sweep/survivors.d.ts +40 -0
  664. package/dist/runtime/shutdown/detached-sweep/survivors.d.ts.map +1 -0
  665. package/dist/runtime/shutdown/detached-sweep/survivors.js +112 -0
  666. package/dist/runtime/shutdown/detached-sweep/survivors.js.map +1 -0
  667. package/dist/runtime/shutdown/leader-group.d.ts +29 -0
  668. package/dist/runtime/shutdown/leader-group.d.ts.map +1 -0
  669. package/dist/runtime/shutdown/leader-group.js +35 -0
  670. package/dist/runtime/shutdown/leader-group.js.map +1 -0
  671. package/dist/runtime/shutdown/native-read-admission.d.ts +13 -0
  672. package/dist/runtime/shutdown/native-read-admission.d.ts.map +1 -0
  673. package/dist/runtime/shutdown/native-read-admission.js +64 -0
  674. package/dist/runtime/shutdown/native-read-admission.js.map +1 -0
  675. package/dist/runtime/shutdown/process-table.d.ts +80 -0
  676. package/dist/runtime/shutdown/process-table.d.ts.map +1 -0
  677. package/dist/runtime/shutdown/process-table.js +147 -0
  678. package/dist/runtime/shutdown/process-table.js.map +1 -0
  679. package/dist/runtime/shutdown/process-tree-ops.d.ts +39 -0
  680. package/dist/runtime/shutdown/process-tree-ops.d.ts.map +1 -0
  681. package/dist/runtime/shutdown/process-tree-ops.js +73 -0
  682. package/dist/runtime/shutdown/process-tree-ops.js.map +1 -0
  683. package/dist/runtime/shutdown/read-timeout.d.ts +4 -0
  684. package/dist/runtime/shutdown/read-timeout.d.ts.map +1 -0
  685. package/dist/runtime/shutdown/read-timeout.js +6 -0
  686. package/dist/runtime/shutdown/read-timeout.js.map +1 -0
  687. package/dist/runtime/shutdown/reap-queue.d.ts +10 -0
  688. package/dist/runtime/shutdown/reap-queue.d.ts.map +1 -0
  689. package/dist/runtime/shutdown/reap-queue.js +29 -0
  690. package/dist/runtime/shutdown/reap-queue.js.map +1 -0
  691. package/dist/runtime/shutdown/reap-tree.d.ts +42 -32
  692. package/dist/runtime/shutdown/reap-tree.d.ts.map +1 -1
  693. package/dist/runtime/shutdown/reap-tree.js +78 -71
  694. package/dist/runtime/shutdown/reap-tree.js.map +1 -1
  695. package/dist/runtime/shutdown/shared-daemon.d.ts +59 -0
  696. package/dist/runtime/shutdown/shared-daemon.d.ts.map +1 -0
  697. package/dist/runtime/shutdown/shared-daemon.js +139 -0
  698. package/dist/runtime/shutdown/shared-daemon.js.map +1 -0
  699. package/dist/runtime/shutdown/teardown.d.ts +15 -0
  700. package/dist/runtime/shutdown/teardown.d.ts.map +1 -1
  701. package/dist/runtime/shutdown/teardown.js +19 -6
  702. package/dist/runtime/shutdown/teardown.js.map +1 -1
  703. package/dist/runtime/shutdown/terminate.d.ts +21 -1
  704. package/dist/runtime/shutdown/terminate.d.ts.map +1 -1
  705. package/dist/runtime/shutdown/terminate.js +83 -56
  706. package/dist/runtime/shutdown/terminate.js.map +1 -1
  707. package/dist/runtime/startup/buffer.d.ts +26 -7
  708. package/dist/runtime/startup/buffer.d.ts.map +1 -1
  709. package/dist/runtime/startup/buffer.js +42 -19
  710. package/dist/runtime/startup/buffer.js.map +1 -1
  711. package/dist/runtime/startup/cleanup.d.ts +37 -11
  712. package/dist/runtime/startup/cleanup.d.ts.map +1 -1
  713. package/dist/runtime/startup/cleanup.js +55 -25
  714. package/dist/runtime/startup/cleanup.js.map +1 -1
  715. package/dist/runtime/startup/index.d.ts +13 -1
  716. package/dist/runtime/startup/index.d.ts.map +1 -1
  717. package/dist/runtime/startup/index.js +38 -6
  718. package/dist/runtime/startup/index.js.map +1 -1
  719. package/dist/runtime/stream-marker.d.ts +17 -0
  720. package/dist/runtime/stream-marker.d.ts.map +1 -0
  721. package/dist/runtime/stream-marker.js +35 -0
  722. package/dist/runtime/stream-marker.js.map +1 -0
  723. package/dist/runtime/update/acquire.d.ts +16 -0
  724. package/dist/runtime/update/acquire.d.ts.map +1 -0
  725. package/dist/runtime/update/acquire.js +62 -0
  726. package/dist/runtime/update/acquire.js.map +1 -0
  727. package/dist/runtime/update/completion.d.ts +12 -0
  728. package/dist/runtime/update/completion.d.ts.map +1 -0
  729. package/dist/runtime/update/completion.js +50 -0
  730. package/dist/runtime/update/completion.js.map +1 -0
  731. package/dist/runtime/update/lock.d.ts +1 -1
  732. package/dist/runtime/update/lock.d.ts.map +1 -1
  733. package/dist/runtime/update/lock.js +21 -38
  734. package/dist/runtime/update/lock.js.map +1 -1
  735. package/dist/runtime/update/once.d.ts +16 -13
  736. package/dist/runtime/update/once.d.ts.map +1 -1
  737. package/dist/runtime/update/once.js +41 -31
  738. package/dist/runtime/update/once.js.map +1 -1
  739. package/dist/runtime/update/owner.js +1 -1
  740. package/dist/runtime/update/retained-lease.js +1 -1
  741. package/dist/runtime/update/waiting.d.ts +14 -1
  742. package/dist/runtime/update/waiting.d.ts.map +1 -1
  743. package/dist/runtime/update/waiting.js +20 -12
  744. package/dist/runtime/update/waiting.js.map +1 -1
  745. package/dist/state/canonical-path.d.ts +5 -0
  746. package/dist/state/canonical-path.d.ts.map +1 -1
  747. package/dist/state/canonical-path.js +11 -5
  748. package/dist/state/canonical-path.js.map +1 -1
  749. package/dist/state/directories.d.ts +31 -1
  750. package/dist/state/directories.d.ts.map +1 -1
  751. package/dist/state/directories.js +75 -13
  752. package/dist/state/directories.js.map +1 -1
  753. package/dist/state/files.d.ts +3 -3
  754. package/dist/state/files.d.ts.map +1 -1
  755. package/dist/state/files.js +4 -10
  756. package/dist/state/files.js.map +1 -1
  757. package/dist/state/launch-ownership.d.ts +4 -2
  758. package/dist/state/launch-ownership.d.ts.map +1 -1
  759. package/dist/state/launch-ownership.js +18 -10
  760. package/dist/state/launch-ownership.js.map +1 -1
  761. package/dist/state/launch-publication.d.ts +7 -1
  762. package/dist/state/launch-publication.d.ts.map +1 -1
  763. package/dist/state/launch-publication.js +14 -2
  764. package/dist/state/launch-publication.js.map +1 -1
  765. package/dist/state/loop-store.d.ts +15 -4
  766. package/dist/state/loop-store.d.ts.map +1 -1
  767. package/dist/state/loop-store.js +13 -7
  768. package/dist/state/loop-store.js.map +1 -1
  769. package/dist/state/preparation/created-directories.d.ts +13 -0
  770. package/dist/state/preparation/created-directories.d.ts.map +1 -0
  771. package/dist/state/preparation/created-directories.js +45 -0
  772. package/dist/state/preparation/created-directories.js.map +1 -0
  773. package/dist/state/preparation/ignore-sync.d.ts +9 -0
  774. package/dist/state/preparation/ignore-sync.d.ts.map +1 -0
  775. package/dist/state/preparation/ignore-sync.js +47 -0
  776. package/dist/state/preparation/ignore-sync.js.map +1 -0
  777. package/dist/state/preparation/index.d.ts +25 -0
  778. package/dist/state/preparation/index.d.ts.map +1 -0
  779. package/dist/state/preparation/index.js +31 -0
  780. package/dist/state/preparation/index.js.map +1 -0
  781. package/dist/state/preparation/install-ignore.d.ts +6 -0
  782. package/dist/state/preparation/install-ignore.d.ts.map +1 -0
  783. package/dist/state/preparation/install-ignore.js +87 -0
  784. package/dist/state/preparation/install-ignore.js.map +1 -0
  785. package/dist/state/preparation/rollback-parent.d.ts +3 -0
  786. package/dist/state/preparation/rollback-parent.d.ts.map +1 -0
  787. package/dist/state/preparation/rollback-parent.js +18 -0
  788. package/dist/state/preparation/rollback-parent.js.map +1 -0
  789. package/dist/state/preparation/root-trust.d.ts +3 -0
  790. package/dist/state/preparation/root-trust.d.ts.map +1 -0
  791. package/dist/state/preparation/root-trust.js +70 -0
  792. package/dist/state/preparation/root-trust.js.map +1 -0
  793. package/dist/state/private-session.d.ts +5 -2
  794. package/dist/state/private-session.d.ts.map +1 -1
  795. package/dist/state/private-session.js +21 -9
  796. package/dist/state/private-session.js.map +1 -1
  797. package/dist/state/root.d.ts +25 -0
  798. package/dist/state/root.d.ts.map +1 -0
  799. package/dist/state/root.js +84 -0
  800. package/dist/state/root.js.map +1 -0
  801. package/dist/state/runtime-paths.d.ts +5 -4
  802. package/dist/state/runtime-paths.d.ts.map +1 -1
  803. package/dist/state/runtime-paths.js +5 -4
  804. package/dist/state/runtime-paths.js.map +1 -1
  805. package/dist/state/setup-failure.d.ts +3 -0
  806. package/dist/state/setup-failure.d.ts.map +1 -0
  807. package/dist/state/setup-failure.js +13 -0
  808. package/dist/state/setup-failure.js.map +1 -0
  809. package/dist/state/socket-home.d.ts +17 -12
  810. package/dist/state/socket-home.d.ts.map +1 -1
  811. package/dist/state/socket-home.js +31 -14
  812. package/dist/state/socket-home.js.map +1 -1
  813. package/dist/state/store.d.ts +1 -3
  814. package/dist/state/store.d.ts.map +1 -1
  815. package/dist/state/store.js +3 -18
  816. package/dist/state/store.js.map +1 -1
  817. package/dist/terminal/cursor.d.ts +1 -1
  818. package/dist/terminal/cursor.d.ts.map +1 -1
  819. package/dist/terminal/cursor.js +36 -1
  820. package/dist/terminal/cursor.js.map +1 -1
  821. package/dist/terminal/headless.d.ts +1 -1
  822. package/dist/terminal/headless.d.ts.map +1 -1
  823. package/dist/terminal/headless.js +1 -3
  824. package/dist/terminal/headless.js.map +1 -1
  825. package/docs/cli-behavior.md +1218 -28
  826. package/docs/cli.md +2 -0
  827. package/docs/codex/cli.md +4 -2
  828. package/docs/embedding.md +7 -0
  829. package/docs/performance/terminal-engines.md +88 -0
  830. package/docs/performance.md +120 -0
  831. package/package.json +4 -4
  832. package/prd/04-architecture.md +32 -0
  833. package/prd/05-api/5.1-starting-claude.md +17 -1
  834. package/prd/05-api/5.2-resuming-claude.md +5 -0
  835. package/prd/05-api/5.3-claude-session-api.md +267 -40
  836. package/prd/05-api/5.4-events.md +77 -10
  837. package/prd/05-api/5.5-starting-codex.md +3 -1
  838. package/prd/05-api/5.6-resuming-codex.md +4 -1
  839. package/prd/05-api/5.7-codex-session-api.md +87 -5
  840. package/prd/05-api/5.8-session-api.md +32 -1
  841. package/prd/06-claude-hook-bridge.md +2 -0
  842. package/prd/07a-codex-hook-bridge.md +5 -0
  843. package/prd/08-state.md +63 -7
  844. package/prd/09-lifecycle.md +126 -35
  845. package/prd/10-errors.md +11 -4
  846. package/prd/12-e2e.md +81 -0
  847. package/prd/12a-cli.md +63 -9
  848. package/prd/14-conformance.md +52 -35
  849. package/prd/16-maintainer-review.md +11 -0
  850. package/dist/claude/model-composer.d.ts +0 -2
  851. package/dist/claude/model-composer.d.ts.map +0 -1
  852. package/dist/claude/model-composer.js +0 -12
  853. package/dist/claude/model-composer.js.map +0 -1
  854. package/dist/claude/transcript/drain.d.ts +0 -33
  855. package/dist/claude/transcript/drain.d.ts.map +0 -1
  856. package/dist/claude/transcript/drain.js +0 -56
  857. package/dist/claude/transcript/drain.js.map +0 -1
  858. package/dist/codex/session/cli-exit.d.ts +0 -24
  859. package/dist/codex/session/cli-exit.d.ts.map +0 -1
  860. package/dist/codex/session/cli-exit.js +0 -43
  861. package/dist/codex/session/cli-exit.js.map +0 -1
  862. package/dist/codex/transcript/drain.d.ts +0 -30
  863. package/dist/codex/transcript/drain.d.ts.map +0 -1
  864. package/dist/codex/transcript/drain.js +0 -48
  865. package/dist/codex/transcript/drain.js.map +0 -1
  866. package/dist/runtime/probe-cleanup.d.ts.map +0 -1
  867. package/dist/runtime/probe-cleanup.js.map +0 -1
  868. package/dist/runtime/probe.d.ts +0 -11
  869. package/dist/runtime/probe.d.ts.map +0 -1
  870. package/dist/runtime/probe.js +0 -113
  871. package/dist/runtime/probe.js.map +0 -1
  872. package/dist/runtime/session/foreign-picker.d.ts +0 -8
  873. package/dist/runtime/session/foreign-picker.d.ts.map +0 -1
  874. package/dist/runtime/session/foreign-picker.js +0 -18
  875. package/dist/runtime/session/foreign-picker.js.map +0 -1
  876. package/dist/runtime/session/picker-input.d.ts +0 -17
  877. package/dist/runtime/session/picker-input.d.ts.map +0 -1
  878. package/dist/runtime/session/picker-input.js.map +0 -1
@@ -0,0 +1,21 @@
1
+ /**
2
+ * The one gate for every picker key and every frame the window walk reads.
3
+ * Implements PRD §5.3 and C-API-24.
4
+ */
5
+ import type { ModelPickerSpec } from "./picker.ts";
6
+ /**
7
+ * True only while THIS operation's own COMPLETE picker is the bottom-most region: never its
8
+ * `painting` shell and never a `follow-up` stage. It gates every shared navigation,
9
+ * selection, and cancelling key, each adapter's selecting key, and every frame the window
10
+ * walk reads; a follow-up is answered only by the adapter's `apply`, under that stage's own
11
+ * guard (Claude's cache warning, Codex's reasoning level).
12
+ *
13
+ * Elwood is inside the transaction that wrote `/model`, so these reads carry its authority
14
+ * (`ownOperation`). A header match alone is untrusted: a transcript or the agent's own output
15
+ * can print `Select model`, so navigating or Escaping on it could send keys into a running
16
+ * turn, the real composer, or another prompt (C-API-24). The header gates only the `/model`
17
+ * open wait (`openAndParse`); the cursor-settle wait reads a parsed row, and the close wait
18
+ * (`waitUntilClosed`) reads only the bottom-most region. None of them writes.
19
+ */
20
+ export declare const isOwnCompletePicker: (spec: Pick<ModelPickerSpec, "activeDialog">) => (text: string) => boolean;
21
+ //# sourceMappingURL=own-picker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"own-picker.d.ts","sourceRoot":"","sources":["../../../src/core/models/own-picker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,mBAAmB,GAC7B,MAAM,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,MAAM,MAAM,MAAM,YACV,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * The one gate for every picker key and every frame the window walk reads.
3
+ * Implements PRD §5.3 and C-API-24.
4
+ */
5
+ import { ownOperation } from "./rows.js";
6
+ /**
7
+ * True only while THIS operation's own COMPLETE picker is the bottom-most region: never its
8
+ * `painting` shell and never a `follow-up` stage. It gates every shared navigation,
9
+ * selection, and cancelling key, each adapter's selecting key, and every frame the window
10
+ * walk reads; a follow-up is answered only by the adapter's `apply`, under that stage's own
11
+ * guard (Claude's cache warning, Codex's reasoning level).
12
+ *
13
+ * Elwood is inside the transaction that wrote `/model`, so these reads carry its authority
14
+ * (`ownOperation`). A header match alone is untrusted: a transcript or the agent's own output
15
+ * can print `Select model`, so navigating or Escaping on it could send keys into a running
16
+ * turn, the real composer, or another prompt (C-API-24). The header gates only the `/model`
17
+ * open wait (`openAndParse`); the cursor-settle wait reads a parsed row, and the close wait
18
+ * (`waitUntilClosed`) reads only the bottom-most region. None of them writes.
19
+ */
20
+ export const isOwnCompletePicker = (spec) => (text) => spec.activeDialog(text, ownOperation) === "picker";
21
+ //# sourceMappingURL=own-picker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"own-picker.js","sourceRoot":"","sources":["../../../src/core/models/own-picker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAC9B,CAAC,IAA2C,EAAE,EAAE,CAAC,CAAC,IAAY,EAAE,EAAE,CAChE,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,KAAK,QAAQ,CAAC"}
@@ -2,24 +2,39 @@
2
2
  * Shared /model picker automation for adapter sessions.
3
3
  * Implements PRD §5.3, §5.7, C-API-23, and C-API-24.
4
4
  */
5
+ import type { ElwoodAgentKind } from "../activity/index.ts";
6
+ import type { ObservedTerminal } from "../input/abort.ts";
5
7
  import type { AgentModelOption, ModelDialogAuthority, ModelDialogStage, ParsedModelPicker } from "./rows.ts";
6
- import { type ScreenTerminal } from "./tui-screen.ts";
8
+ export { isOwnCompletePicker } from "./own-picker.ts";
7
9
  export declare function pickerTimeout(options?: {
8
10
  readonly timeoutMs?: number;
9
11
  }): number;
10
12
  export type ModelPickerIo = {
11
- readonly terminal: ScreenTerminal;
13
+ /** Every key is written behind its received-output barrier (C-API-56). */
14
+ readonly terminal: ObservedTerminal;
12
15
  readonly blocked?: () => boolean;
13
16
  readonly signal?: AbortSignal;
14
17
  readonly submit: (command: string, signal: AbortSignal) => Promise<void>;
15
18
  };
16
19
  export type ModelPickerSpec = {
17
- readonly agent: string;
20
+ readonly agent: ElwoodAgentKind;
18
21
  /** A native model-dialog shell can hold input before its rows finish. */
19
22
  readonly isCandidate: (text: string) => boolean;
20
23
  /** Positive native composer evidence for releasing a foreign-dialog hold. */
21
24
  readonly isClear: (text: string) => boolean;
22
- readonly isOpen: (text: string) => boolean;
25
+ /**
26
+ * Only that the picker's title is on screen: a transcript can print it, and a picker
27
+ * still painting shows it over stale rows. It gates the `/model` open wait and may hold
28
+ * input; it never ends a close wait (which reads only the bottom-most region) and never
29
+ * authorizes a write.
30
+ */
31
+ readonly hasPickerHeader: (text: string) => boolean;
32
+ /**
33
+ * Positive evidence that the bottom-most dialog is the caller's own, which replaced
34
+ * ours: Claude's `PreModelSwitch` hook confirmation. Elwood neither answers it nor keeps
35
+ * it as a survivor; it is left for the caller (PRD §5.3).
36
+ */
37
+ readonly isCallerDialog: (text: string) => boolean;
23
38
  /**
24
39
  * The live, bottom-most model dialog: the only one Elwood may cancel or hold input on.
25
40
  * `authority` is REQUIRED and carries proof Elwood opened this dialog (see
@@ -29,8 +44,23 @@ export type ModelPickerSpec = {
29
44
  */
30
45
  readonly activeDialog: (text: string, authority: ModelDialogAuthority) => ModelDialogStage | undefined;
31
46
  readonly parse: (text: string) => ParsedModelPicker;
47
+ /**
48
+ * Completes listed rows from state the picker does not render, inside the operation's
49
+ * queue slot and under its deadline/termination `signal`. Codex reads its configured
50
+ * default here (PRD §5.3).
51
+ */
52
+ readonly withDefaults?: (options: readonly AgentModelOption[], signal: AbortSignal) => Promise<readonly AgentModelOption[]>;
32
53
  readonly apply: (io: ModelPickerIo, timeoutMs: number) => Promise<void>;
33
54
  };
55
+ /**
56
+ * Every row the picker lists, rows outside its window included. Cancels with Escape after the
57
+ * walk, so neither the model nor its effort changes, and returns once the picker is closed.
58
+ */
34
59
  export declare function listPickerModels(io: ModelPickerIo, spec: ModelPickerSpec, timeoutMs: number): Promise<readonly AgentModelOption[]>;
60
+ /**
61
+ * Selects `id`, walking a scrolling window only until that row is rendered, then moving to it
62
+ * and applying it with the adapter's own `apply`. An unknown id cancels, and the rejection
63
+ * lists every row the walk saw.
64
+ */
35
65
  export declare function setPickerModel(io: ModelPickerIo, spec: ModelPickerSpec, id: string, timeoutMs: number): Promise<void>;
36
66
  //# sourceMappingURL=picker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"picker.d.ts","sourceRoot":"","sources":["../../../src/core/models/picker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,WAAW,CAAC;AACnB,OAAO,EAGL,KAAK,cAAc,EAEpB,MAAM,iBAAiB,CAAC;AAEzB,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAE/E;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1E,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,yEAAyE;IACzE,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAChD,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC3C;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,EAAE,CACrB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,oBAAoB,KAC5B,gBAAgB,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,iBAAiB,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzE,CAAC;AAgCF,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,aAAa,EACjB,IAAI,EAAE,eAAe,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC,CAWtC;AAED,wBAAsB,cAAc,CAClC,EAAE,EAAE,aAAa,EACjB,IAAI,EAAE,eAAe,EACrB,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CA4Bf"}
1
+ {"version":3,"file":"picker.d.ts","sourceRoot":"","sources":["../../../src/core/models/picker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAK1D,OAAO,KAAK,EACV,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EAClB,MAAM,WAAW,CAAC;AAInB,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,wBAAgB,aAAa,CAAC,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAE/E;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1E,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,yEAAyE;IACzE,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAChD,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IAC5C;;;;;OAKG;IACH,QAAQ,CAAC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACpD;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;IACnD;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,EAAE,CACrB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,oBAAoB,KAC5B,gBAAgB,GAAG,SAAS,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,iBAAiB,CAAC;IACpD;;;;OAIG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,CACtB,OAAO,EAAE,SAAS,gBAAgB,EAAE,EACpC,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACzE,CAAC;AAKF;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,aAAa,EACjB,IAAI,EAAE,eAAe,EACrB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,gBAAgB,EAAE,CAAC,CAMtC;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,EAAE,EAAE,aAAa,EACjB,IAAI,EAAE,eAAe,EACrB,EAAE,EAAE,MAAM,EACV,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAuCf"}
@@ -4,77 +4,83 @@
4
4
  */
5
5
  import { delay } from "../delay.js";
6
6
  import { elwoodError } from "../errors.js";
7
+ import { arrowDown, arrowUp } from "../input/constants.js";
8
+ import { waitUntilClosed } from "./close-wait.js";
7
9
  import { sendPickerInput } from "./input.js";
8
- import { defaultModelTimeoutMs, openCommandScreen, waitForScreen, } from "./tui-screen.js";
10
+ import { isOwnCompletePicker } from "./own-picker.js";
11
+ import { defaultModelTimeoutMs, openCommandScreen, waitForScreen } from "./tui-screen.js";
12
+ import { cursorOption, revealPickerRows } from "./window.js";
13
+ export { isOwnCompletePicker } from "./own-picker.js";
9
14
  export function pickerTimeout(options) {
10
15
  return options?.timeoutMs ?? defaultModelTimeoutMs;
11
16
  }
12
- /**
13
- * Elwood is inside the transaction that wrote `/model`, so these reads carry its authority.
14
- * Every wait and write below is gated on `ours(spec)` rather than the raw `isOpen` header:
15
- * a header match alone is untrusted candidate evidence — a transcript or the agent's own
16
- * output can print `Select model` — so navigating or Escaping on it could send keys into a
17
- * running turn, the real composer, or another prompt (C-API-24).
18
- */
19
- const opened = { opened: true };
20
- /** True only while THIS operation's own dialog is the bottom-most region of the screen. */
21
- const ours = (spec) => (text) => spec.activeDialog(text, opened) !== undefined;
22
- /**
23
- * The guard for a CANCELLING Escape, which is deliberately weaker than `ours`.
24
- *
25
- * Navigation and selection must land on a fully recognized dialog, because an arrow or
26
- * Enter on the wrong screen changes something. Escape only closes, and this operation
27
- * opened the screen that is up: a picker whose rows never parsed is still OUR picker, and
28
- * abandoning it because the grammar cannot describe it would leave it open for the next
29
- * queued write. So the header is enough here, and only here.
30
- */
31
- const oursOrOpen = (spec) => (text) => ours(spec)(text) || spec.isOpen(text);
32
17
  const escapeKey = "\u001b";
33
- const arrowDown = "\u001b[B";
34
- const arrowUp = "\u001b[A";
35
18
  const arrowStepMs = 80;
19
+ /**
20
+ * Every row the picker lists, rows outside its window included. Cancels with Escape after the
21
+ * walk, so neither the model nor its effort changes, and returns once the picker is closed.
22
+ */
36
23
  export async function listPickerModels(io, spec, timeoutMs) {
37
- const parsed = await openAndParse(io, spec, timeoutMs);
38
- await sendPickerInput(io, escapeKey, oursOrOpen(spec));
39
- await waitForScreen(io.terminal, (text) => !oursOrOpen(spec)(text), timeoutMs, `${spec.agent} model picker to close`, io.signal);
40
- return parsed.options;
24
+ const opening = await openAndParse(io, spec, timeoutMs);
25
+ const { options } = await revealPickerRows(io, spec, opening, { timeoutMs });
26
+ await sendPickerInput(io, escapeKey, isOwnCompletePicker(spec));
27
+ await waitUntilClosed(io, spec, timeoutMs);
28
+ return options;
41
29
  }
30
+ /**
31
+ * Selects `id`, walking a scrolling window only until that row is rendered, then moving to it
32
+ * and applying it with the adapter's own `apply`. An unknown id cancels, and the rejection
33
+ * lists every row the walk saw.
34
+ */
42
35
  export async function setPickerModel(io, spec, id, timeoutMs) {
43
- const parsed = await openAndParse(io, spec, timeoutMs);
36
+ const opening = await openAndParse(io, spec, timeoutMs);
44
37
  const wanted = id.toLowerCase();
45
38
  // Row ids are already lower-cased labels (`rows.ts`), so matching the id
46
39
  // alone covers a caller that passes the display label in any case.
47
- const target = parsed.options.findIndex((option) => option.id === wanted);
48
- if (target === -1 || parsed.cursorIndex === -1) {
49
- await sendPickerInput(io, escapeKey, oursOrOpen(spec));
50
- const reason = target === -1 ? `Unknown model id "${id}".` : "Could not locate the picker cursor.";
40
+ const isTarget = (option) => option.id === wanted;
41
+ const ownCompletePicker = isOwnCompletePicker(spec);
42
+ // A row outside a scrolling window is as selectable as a rendered one: walk only until it
43
+ // is rendered. An unknown id walks the whole list, so the error names every row.
44
+ const walk = { timeoutMs, found: isTarget };
45
+ const { frame: parsed, options } = await revealPickerRows(io, spec, opening, walk);
46
+ const targetOptionIndex = parsed.options.findIndex(isTarget);
47
+ if (targetOptionIndex === -1 || parsed.cursorOptionIndex === -1) {
48
+ await sendPickerInput(io, escapeKey, ownCompletePicker);
49
+ const reason = targetOptionIndex === -1
50
+ ? `Unknown model id "${id}".`
51
+ : "Could not locate the picker cursor.";
51
52
  throw elwoodError("model_automation_failed", reason, {
52
- available: parsed.options.map((option) => option.id),
53
+ available: options.map((option) => option.id),
53
54
  });
54
55
  }
55
- const delta = target - parsed.cursorIndex;
56
+ const delta = targetOptionIndex - parsed.cursorOptionIndex;
56
57
  const key = delta > 0 ? arrowDown : arrowUp;
57
58
  for (let step = 0; step < Math.abs(delta); step += 1) {
58
- await sendPickerInput(io, key, ours(spec));
59
+ await sendPickerInput(io, key, ownCompletePicker);
59
60
  await delay(arrowStepMs);
60
61
  }
61
- await waitForScreen(io.terminal, (text) => spec.parse(text).cursorIndex === target, timeoutMs, `${spec.agent} picker cursor on "${id}"`, io.signal);
62
+ // Settle on the cursor row's identity, not its index: a scrolled Claude window shifts
63
+ // which rows are rendered as the cursor moves, so the target's index changes with it.
64
+ await waitForScreen(io.terminal, (text) => cursorOption(spec.parse(text))?.id === wanted, timeoutMs, `${spec.agent} picker cursor on "${id}"`, io.signal);
62
65
  await spec.apply(io, timeoutMs);
66
+ await waitUntilClosed(io, spec, timeoutMs);
63
67
  }
64
68
  async function openAndParse(io, spec, timeoutMs) {
65
- const text = await openCommandScreen({
69
+ await openCommandScreen({
66
70
  terminal: io.terminal,
67
71
  ...(io.signal === undefined ? {} : { signal: io.signal }),
68
72
  submit: (signal) => io.submit("/model", signal),
69
- isOpen: spec.isOpen,
73
+ isOpen: spec.hasPickerHeader,
70
74
  timeoutMs,
71
75
  label: `${spec.agent} model picker`,
72
76
  });
73
- const parsed = spec.parse(text);
74
- if (parsed.options.length === 0) {
75
- await sendPickerInput(io, escapeKey, oursOrOpen(spec));
76
- throw elwoodError("model_automation_failed", "Could not parse any model picker rows.");
77
- }
78
- return parsed;
77
+ // The header paints before the rows finish: Claude draws the picker over its slash-command
78
+ // menu, so a frame that merely shows `Select model` can hold three rows above stale
79
+ // commands. Parse only the complete dialog the grammar recognizes as ours, the same guard
80
+ // every key write passes, or a partial list is returned as the catalog. A picker that
81
+ // never completes is not written to here: the transaction's failure cleanup Escapes it
82
+ // once it is recognizable, and a candidate that never is keeps queued input held.
83
+ const text = await waitForScreen(io.terminal, isOwnCompletePicker(spec), timeoutMs, `${spec.agent} model picker rows`, io.signal);
84
+ return spec.parse(text);
79
85
  }
80
86
  //# sourceMappingURL=picker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"picker.js","sourceRoot":"","sources":["../../../src/core/models/picker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"picker.js","sourceRoot":"","sources":["../../../src/core/models/picker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAOtD,OAAO,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC1F,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,UAAU,aAAa,CAAC,OAAyC;IACrE,OAAO,OAAO,EAAE,SAAS,IAAI,qBAAqB,CAAC;AACrD,CAAC;AAqDD,MAAM,SAAS,GAAG,QAAQ,CAAC;AAC3B,MAAM,WAAW,GAAG,EAAE,CAAC;AAEvB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAiB,EACjB,IAAqB,EACrB,SAAiB;IAEjB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACxD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAC7E,MAAM,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,MAAM,eAAe,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IAC3C,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,EAAiB,EACjB,IAAqB,EACrB,EAAU,EACV,SAAiB;IAEjB,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACxD,MAAM,MAAM,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;IAChC,yEAAyE;IACzE,mEAAmE;IACnE,MAAM,QAAQ,GAAG,CAAC,MAAwB,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,CAAC;IACpE,MAAM,iBAAiB,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACpD,0FAA0F;IAC1F,iFAAiF;IACjF,MAAM,IAAI,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC5C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACnF,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC7D,IAAI,iBAAiB,KAAK,CAAC,CAAC,IAAI,MAAM,CAAC,iBAAiB,KAAK,CAAC,CAAC,EAAE,CAAC;QAChE,MAAM,eAAe,CAAC,EAAE,EAAE,SAAS,EAAE,iBAAiB,CAAC,CAAC;QACxD,MAAM,MAAM,GACV,iBAAiB,KAAK,CAAC,CAAC;YACtB,CAAC,CAAC,qBAAqB,EAAE,IAAI;YAC7B,CAAC,CAAC,qCAAqC,CAAC;QAC5C,MAAM,WAAW,CAAC,yBAAyB,EAAE,MAAM,EAAE;YACnD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC;SAC9C,CAAC,CAAC;IACL,CAAC;IACD,MAAM,KAAK,GAAG,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;IAC3D,MAAM,GAAG,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IAC5C,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;QACrD,MAAM,eAAe,CAAC,EAAE,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;QAClD,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3B,CAAC;IACD,sFAAsF;IACtF,sFAAsF;IACtF,MAAM,aAAa,CACjB,EAAE,CAAC,QAAQ,EACX,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,KAAK,MAAM,EACvD,SAAS,EACT,GAAG,IAAI,CAAC,KAAK,sBAAsB,EAAE,GAAG,EACxC,EAAE,CAAC,MAAM,CACV,CAAC;IACF,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAChC,MAAM,eAAe,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;AAC7C,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,EAAiB,EACjB,IAAqB,EACrB,SAAiB;IAEjB,MAAM,iBAAiB,CAAC;QACtB,QAAQ,EAAE,EAAE,CAAC,QAAQ;QACrB,GAAG,CAAC,EAAE,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC;QACzD,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC/C,MAAM,EAAE,IAAI,CAAC,eAAe;QAC5B,SAAS;QACT,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,eAAe;KACpC,CAAC,CAAC;IACH,2FAA2F;IAC3F,oFAAoF;IACpF,0FAA0F;IAC1F,sFAAsF;IACtF,uFAAuF;IACvF,kFAAkF;IAClF,MAAM,IAAI,GAAG,MAAM,aAAa,CAC9B,EAAE,CAAC,QAAQ,EACX,mBAAmB,CAAC,IAAI,CAAC,EACzB,SAAS,EACT,GAAG,IAAI,CAAC,KAAK,oBAAoB,EACjC,EAAE,CAAC,MAAM,CACV,CAAC;IACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * The one contiguous block of option rows inside a native model dialog, fed line by line.
3
+ * Split from `dialog-region.ts`, which decides what may surround the block. Implements
4
+ * C-API-24.
5
+ */
6
+ export declare const caretRow: RegExp;
7
+ export declare const numberedRow: RegExp;
8
+ /**
9
+ * How a CLI windows a list longer than its viewport, for the adapter that does. `above`
10
+ * and `below` each match a row's start through the marker it wears in the cursor column
11
+ * while rows are hidden above the window (its first visible row) or below it (its last);
12
+ * `overflow` is the line that may stand directly under that last row while any are hidden,
13
+ * which wears the `below` marker or, when the cursor is on it, the cursor in its place. The
14
+ * overflow line's `hidden` named group captures how many rows are hidden.
15
+ */
16
+ export type ScrollGrammar = {
17
+ readonly above: RegExp;
18
+ readonly below: RegExp;
19
+ readonly overflow: RegExp;
20
+ };
21
+ /** `line` with a leading scroll marker blanked, so it reads as an ordinary option row. */
22
+ export declare function unmarkedRow(line: string, scroll: ScrollGrammar | undefined): string;
23
+ /**
24
+ * Whether the overflow line may stand directly under row `line`: only a window's last row,
25
+ * which wears the `below` marker or, when the cursor is on it, the cursor in its place. The
26
+ * region grammar and the overflow-count parser (`rows.ts`) share this one rule.
27
+ */
28
+ export declare function overflowMayFollowRow(line: string, scroll: ScrollGrammar | undefined): boolean;
29
+ export declare class RowBlock {
30
+ rowCount: number;
31
+ cursorCount: number;
32
+ private nextRowNumber;
33
+ /**
34
+ * A `below` row, or the overflow line under it, ended the window: no later row belongs to
35
+ * it. A window at the bottom of the list has neither; the dialog's footer ends it.
36
+ */
37
+ private windowEnded;
38
+ /**
39
+ * The last line accepted was a row wearing the `below` marker or the cursor, which takes
40
+ * the marker's place: the only line the overflow line may stand under.
41
+ */
42
+ private overflowMayFollow;
43
+ private readonly complete;
44
+ private readonly scroll;
45
+ constructor(options: {
46
+ readonly complete: boolean;
47
+ readonly scroll: ScrollGrammar | undefined;
48
+ });
49
+ /**
50
+ * Whether `line` extends the block: its next row or, on a windowed list, the overflow line
51
+ * directly under its last row, which is `below`-marked or the cursor row. A COMPLETE dialog's rows are full picker rows
52
+ * (`1. Label Description`); while a candidate is still painting, a numbered row whose
53
+ * description has not arrived yet counts too, so the shell keeps holding input. Anything
54
+ * else — a renumbered second list, a row after the window ended, a scroll marker the
55
+ * CLI's grammar does not define — is not this dialog's.
56
+ */
57
+ accept(line: string): boolean;
58
+ /**
59
+ * Whether `row` (`line` with any scroll marker blanked) is the block's next row. Only the
60
+ * FIRST row may be numbered past 1, and only under an `above` marker: a window scrolled
61
+ * down hides the rows above it, but an unmarked list that starts at 3 is someone else's,
62
+ * and an `above` marker below the first row is not a window.
63
+ */
64
+ private isRow;
65
+ }
66
+ //# sourceMappingURL=row-block.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"row-block.d.ts","sourceRoot":"","sources":["../../../src/core/models/row-block.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,eAAO,MAAM,QAAQ,QAAa,CAAC;AACnC,eAAO,MAAM,WAAW,QAA4B,CAAC;AAErD;;;;;;;GAOG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,0FAA0F;AAC1F,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,CAGnF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,OAAO,CAE7F;AAED,qBAAa,QAAQ;IACnB,QAAQ,SAAK;IACb,WAAW,SAAK;IAChB,OAAO,CAAC,aAAa,CAAK;IAC1B;;;OAGG;IACH,OAAO,CAAC,WAAW,CAAS;IAC5B;;;OAGG;IACH,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;gBACvC,OAAO,EAAE;QACnB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;QAC3B,QAAQ,CAAC,MAAM,EAAE,aAAa,GAAG,SAAS,CAAC;KAC5C;IAKD;;;;;;;OAOG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAiB7B;;;;;OAKG;IACH,OAAO,CAAC,KAAK;CASd"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * The one contiguous block of option rows inside a native model dialog, fed line by line.
3
+ * Split from `dialog-region.ts`, which decides what may surround the block. Implements
4
+ * C-API-24.
5
+ */
6
+ import { rowPattern } from "./rows.js";
7
+ export const caretRow = /^\s*[❯›]/;
8
+ export const numberedRow = /^\s*[❯›]?\s*(\d+)[.)]\s/;
9
+ /** `line` with a leading scroll marker blanked, so it reads as an ordinary option row. */
10
+ export function unmarkedRow(line, scroll) {
11
+ const marker = [scroll?.above, scroll?.below].find((pattern) => pattern?.test(line));
12
+ return marker === undefined ? line : line.replace(marker, (start) => " ".repeat(start.length));
13
+ }
14
+ /**
15
+ * Whether the overflow line may stand directly under row `line`: only a window's last row,
16
+ * which wears the `below` marker or, when the cursor is on it, the cursor in its place. The
17
+ * region grammar and the overflow-count parser (`rows.ts`) share this one rule.
18
+ */
19
+ export function overflowMayFollowRow(line, scroll) {
20
+ return scroll?.below.test(line) === true || caretRow.test(unmarkedRow(line, scroll));
21
+ }
22
+ export class RowBlock {
23
+ rowCount = 0;
24
+ cursorCount = 0;
25
+ nextRowNumber = 1;
26
+ /**
27
+ * A `below` row, or the overflow line under it, ended the window: no later row belongs to
28
+ * it. A window at the bottom of the list has neither; the dialog's footer ends it.
29
+ */
30
+ windowEnded = false;
31
+ /**
32
+ * The last line accepted was a row wearing the `below` marker or the cursor, which takes
33
+ * the marker's place: the only line the overflow line may stand under.
34
+ */
35
+ overflowMayFollow = false;
36
+ complete;
37
+ scroll;
38
+ constructor(options) {
39
+ this.complete = options.complete;
40
+ this.scroll = options.scroll;
41
+ }
42
+ /**
43
+ * Whether `line` extends the block: its next row or, on a windowed list, the overflow line
44
+ * directly under its last row, which is `below`-marked or the cursor row. A COMPLETE dialog's rows are full picker rows
45
+ * (`1. Label Description`); while a candidate is still painting, a numbered row whose
46
+ * description has not arrived yet counts too, so the shell keeps holding input. Anything
47
+ * else — a renumbered second list, a row after the window ended, a scroll marker the
48
+ * CLI's grammar does not define — is not this dialog's.
49
+ */
50
+ accept(line) {
51
+ const mayBeOverflow = this.overflowMayFollow;
52
+ this.overflowMayFollow = false;
53
+ if (mayBeOverflow && this.scroll?.overflow.test(line) === true) {
54
+ this.windowEnded = true;
55
+ return true;
56
+ }
57
+ const row = unmarkedRow(line, this.scroll);
58
+ if (this.windowEnded || !this.isRow(line, row))
59
+ return false;
60
+ this.rowCount += 1;
61
+ this.nextRowNumber = Number(numberedRow.exec(row)?.[1]) + 1;
62
+ this.windowEnded = this.scroll?.below.test(line) === true;
63
+ if (caretRow.test(row))
64
+ this.cursorCount += 1;
65
+ this.overflowMayFollow = overflowMayFollowRow(line, this.scroll);
66
+ return true;
67
+ }
68
+ /**
69
+ * Whether `row` (`line` with any scroll marker blanked) is the block's next row. Only the
70
+ * FIRST row may be numbered past 1, and only under an `above` marker: a window scrolled
71
+ * down hides the rows above it, but an unmarked list that starts at 3 is someone else's,
72
+ * and an `above` marker below the first row is not a window.
73
+ */
74
+ isRow(line, row) {
75
+ if (!(rowPattern.test(row) || (!this.complete && numberedRow.test(row))))
76
+ return false;
77
+ const number = Number(numberedRow.exec(row)?.[1]);
78
+ // A number that rounds is not the row the CLI drew, and rows that round together would
79
+ // pass for consecutive ones.
80
+ if (!Number.isSafeInteger(number))
81
+ return false;
82
+ if (this.scroll?.above.test(line) === true)
83
+ return this.rowCount === 0 && number > 1;
84
+ return number === this.nextRowNumber;
85
+ }
86
+ }
87
+ //# sourceMappingURL=row-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"row-block.js","sourceRoot":"","sources":["../../../src/core/models/row-block.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  * model dialog only as the bottom-most native region of the viewport.
4
4
  * Implements PRD §5.3 AgentModelOption, C-API-23, and C-API-24.
5
5
  */
6
+ import { type ScrollGrammar } from "./row-block.ts";
6
7
  export type AgentModelOption = {
7
8
  readonly id: string;
8
9
  readonly label: string;
@@ -11,16 +12,44 @@ export type AgentModelOption = {
11
12
  readonly isDefault: boolean;
12
13
  readonly raw: string;
13
14
  };
15
+ /**
16
+ * One rendered option row. `absoluteRowNumber` is the row's 1-based position in the WHOLE
17
+ * list, as the CLI numbers it: a scrolled window keeps it, so `↑ 3.` is the third model even
18
+ * as the first row on screen.
19
+ */
20
+ export type PickerRow = {
21
+ readonly absoluteRowNumber: number;
22
+ readonly option: AgentModelOption;
23
+ };
14
24
  export type ParsedModelPicker = {
25
+ readonly rows: readonly PickerRow[];
26
+ /** Each row's option, in the same order as `rows`. */
15
27
  readonly options: readonly AgentModelOption[];
16
- readonly cursorIndex: number;
28
+ /** Index into `rows` and `options` of the highlighted row; -1 while none is painted. */
29
+ readonly cursorOptionIndex: number;
30
+ /**
31
+ * How many rows the window hides below its last rendered row: 0 when the window reaches
32
+ * the end of the list, the overflow line's count when one is drawn, and undefined when
33
+ * the window marks rows hidden below without a positive count, so the length is unknown.
34
+ */
35
+ readonly hiddenRowCountBelow: number | undefined;
17
36
  };
18
37
  export declare const claudeModelPickerHeader: RegExp;
19
38
  export declare const codexModelPickerHeader: RegExp;
39
+ /** `1. Label Description`, capturing the cursor glyph, absolute row number, label and description. */
20
40
  export declare const rowPattern: RegExp;
21
- export declare function parseClaudeModelPicker(text: string): ParsedModelPicker;
41
+ /**
42
+ * Claude's rendered rows. Under `scroll`, a row wearing a scroll marker (`↓ 10.`) is an
43
+ * ordinary option; its `raw` keeps the marker as rendered.
44
+ */
45
+ export declare function parseClaudeModelPicker(text: string, scroll?: ScrollGrammar): ParsedModelPicker;
46
+ /**
47
+ * Rendered markers only. Codex 0.164 draws `(current)` and never `(default)`, so a lone
48
+ * `(current)` says nothing about the default; the Codex spec marks it from config.toml.
49
+ */
22
50
  export declare function parseCodexModelPicker(text: string): ParsedModelPicker;
23
- export { bottomDialogCandidate, bottomDialogRow } from "./dialog-region.ts";
51
+ export { bottomDialogCandidate, bottomDialogRow, type DialogGrammar } from "./dialog-region.ts";
52
+ export type { ScrollGrammar } from "./row-block.ts";
24
53
  /**
25
54
  * The picker itself, the stage an accepted row opens (reasoning level, cache warning),
26
55
  * or a dialog shell still `painting`: it holds input but is never sent a key.
@@ -1 +1 @@
1
- {"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../../../src/core/models/rows.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC9C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAAiB,CAAC;AACtD,eAAO,MAAM,sBAAsB,QAA4B,CAAC;AAEhE,eAAO,MAAM,UAAU,QAAgD,CAAC;AAExE,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAUtE;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAarE;AAoBD,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE5E;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;AAEnE;;;;;;;;;;;;;;;;;GAiBG;AACH;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,oBAAuC,CAAC;AAEnE,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B,CAAC"}
1
+ {"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../../../src/core/models/rows.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAwB,KAAK,aAAa,EAAe,MAAM,gBAAgB,CAAC;AAEvF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;CACnC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;IACpC,sDAAsD;IACtD,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC9C,wFAAwF;IACxF,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC;;;;OAIG;IACH,QAAQ,CAAC,mBAAmB,EAAE,MAAM,GAAG,SAAS,CAAC;CAClD,CAAC;AAEF,eAAO,MAAM,uBAAuB,QAAiB,CAAC;AACtD,eAAO,MAAM,sBAAsB,QAA4B,CAAC;AAEhE,uGAAuG;AACvG,eAAO,MAAM,UAAU,QAAkD,CAAC;AAE1E;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,iBAAiB,CAU9F;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAOrE;AA+CD,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChG,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEpD;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;AAEnE;;;;;;;;;;;;;;;;;GAiBG;AACH;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,oBAAuC,CAAC;AAEnE,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B,CAAC"}
@@ -3,11 +3,17 @@
3
3
  * model dialog only as the bottom-most native region of the viewport.
4
4
  * Implements PRD §5.3 AgentModelOption, C-API-23, and C-API-24.
5
5
  */
6
+ import { overflowMayFollowRow, unmarkedRow } from "./row-block.js";
6
7
  export const claudeModelPickerHeader = /Select model/;
7
8
  export const codexModelPickerHeader = /Select Model and Effort/;
8
- export const rowPattern = /^\s*(❯|›)?\s*\d+\.\s+(.+?)\s{2,}(\S.*?)\s*$/;
9
- export function parseClaudeModelPicker(text) {
10
- return parseRows(pickerRegion(text, claudeModelPickerHeader), (labelText) => {
9
+ /** `1. Label Description`, capturing the cursor glyph, absolute row number, label and description. */
10
+ export const rowPattern = /^\s*(❯|›)?\s*(\d+)\.\s+(.+?)\s{2,}(\S.*?)\s*$/;
11
+ /**
12
+ * Claude's rendered rows. Under `scroll`, a row wearing a scroll marker (`↓ 10.`) is an
13
+ * ordinary option; its `raw` keeps the marker as rendered.
14
+ */
15
+ export function parseClaudeModelPicker(text, scroll) {
16
+ return parseRows(pickerRegion(text, claudeModelPickerHeader), scroll, (labelText) => {
11
17
  const isCurrent = labelText.includes("✔");
12
18
  const isDefault = /\(recommended\)/i.test(labelText);
13
19
  const label = labelText
@@ -17,35 +23,57 @@ export function parseClaudeModelPicker(text) {
17
23
  return { label, id: label.toLowerCase(), isCurrent, isDefault };
18
24
  });
19
25
  }
26
+ /**
27
+ * Rendered markers only. Codex 0.164 draws `(current)` and never `(default)`, so a lone
28
+ * `(current)` says nothing about the default; the Codex spec marks it from config.toml.
29
+ */
20
30
  export function parseCodexModelPicker(text) {
21
- const parsed = parseRows(pickerRegion(text, codexModelPickerHeader), (labelText) => {
31
+ return parseRows(pickerRegion(text, codexModelPickerHeader), undefined, (labelText) => {
22
32
  const isCurrent = /\(current\)/i.test(labelText);
23
33
  const isDefault = /\(default\)/i.test(labelText);
24
34
  const label = labelText.replace(/\((?:current|default)\)/gi, "").trim();
25
35
  return { label, id: label.toLowerCase(), isCurrent, isDefault };
26
36
  });
27
- // Codex omits the default marker when the current model is the default.
28
- if (parsed.options.some((option) => option.isDefault))
29
- return parsed;
30
- const options = parsed.options.map((option) => option.isCurrent ? { ...option, isDefault: true } : option);
31
- return { options, cursorIndex: parsed.cursorIndex };
32
37
  }
33
- function parseRows(region, decorate) {
34
- const options = [];
35
- let cursorIndex = -1;
38
+ function parseRows(region, scroll, decorate) {
39
+ const rows = [];
40
+ let cursorOptionIndex = -1;
41
+ let hiddenRowCountBelow = 0;
42
+ // As in the region grammar, a count is read only from the line directly under a row
43
+ // `overflowMayFollowRow` allows; an overflow line anywhere else leaves the length unknown.
44
+ let overflowMayFollow = false;
36
45
  for (const line of region.split("\n")) {
37
- const match = rowPattern.exec(line);
38
- if (!match)
46
+ const mayBeOverflow = overflowMayFollow;
47
+ overflowMayFollow = false;
48
+ const overflow = scroll?.overflow.exec(line);
49
+ if (overflow)
50
+ hiddenRowCountBelow = mayBeOverflow ? positiveCount(overflow.groups?.["hidden"]) : undefined;
51
+ const match = rowPattern.exec(unmarkedRow(line, scroll));
52
+ const absoluteRowNumber = Number(match?.[2]);
53
+ // As in the region grammar, a number that rounds is not the row the CLI drew.
54
+ if (!(match && Number.isSafeInteger(absoluteRowNumber)))
39
55
  continue;
40
56
  if (match[1])
41
- cursorIndex = options.length;
42
- options.push({
43
- ...decorate(match[2]),
44
- description: match[3],
45
- raw: line.trim(),
57
+ cursorOptionIndex = rows.length;
58
+ // A `below` marker says rows are hidden; only the overflow line under it says how many.
59
+ if (scroll?.below.test(line) === true)
60
+ hiddenRowCountBelow = undefined;
61
+ overflowMayFollow = overflowMayFollowRow(line, scroll);
62
+ rows.push({
63
+ absoluteRowNumber,
64
+ option: {
65
+ ...decorate(match[3]),
66
+ description: match[4],
67
+ raw: line.trim(),
68
+ },
46
69
  });
47
70
  }
48
- return { options, cursorIndex };
71
+ return { rows, options: rows.map((row) => row.option), cursorOptionIndex, hiddenRowCountBelow };
72
+ }
73
+ /** The rendered hidden-row count, returned only when it is a positive, exactly representable integer. */
74
+ function positiveCount(text) {
75
+ const count = Number(text);
76
+ return Number.isSafeInteger(count) && count > 0 ? count : undefined;
49
77
  }
50
78
  export { bottomDialogCandidate, bottomDialogRow } from "./dialog-region.js";
51
79
  /**