@with-logic/elwood 0.1.0 → 0.1.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 (777) hide show
  1. package/CHANGELOG.md +182 -3
  2. package/CONTRIBUTING.md +104 -0
  3. package/LICENSE +1 -1
  4. package/README.md +295 -26
  5. package/SECURITY.md +42 -0
  6. package/dist/claude/command.d.ts +9 -2
  7. package/dist/claude/command.d.ts.map +1 -1
  8. package/dist/claude/command.js +23 -16
  9. package/dist/claude/command.js.map +1 -1
  10. package/dist/claude/model-picker.d.ts.map +1 -1
  11. package/dist/claude/model-picker.js +4 -3
  12. package/dist/claude/model-picker.js.map +1 -1
  13. package/dist/claude/model-switch-confirmation.js +9 -1
  14. package/dist/claude/model-switch-confirmation.js.map +1 -1
  15. package/dist/claude/screen-table.js +1 -1
  16. package/dist/claude/screen-table.js.map +1 -1
  17. package/dist/claude/session/build.d.ts.map +1 -1
  18. package/dist/claude/session/build.js +3 -0
  19. package/dist/claude/session/build.js.map +1 -1
  20. package/dist/claude/session/index.d.ts.map +1 -1
  21. package/dist/claude/session/index.js +5 -2
  22. package/dist/claude/session/index.js.map +1 -1
  23. package/dist/claude/session/resume.d.ts +1 -1
  24. package/dist/claude/session/resume.d.ts.map +1 -1
  25. package/dist/claude/session/resume.js +5 -1
  26. package/dist/claude/session/resume.js.map +1 -1
  27. package/dist/claude/session/start-or-resume.js +1 -0
  28. package/dist/claude/session/start-or-resume.js.map +1 -1
  29. package/dist/claude/simple.d.ts.map +1 -1
  30. package/dist/claude/simple.js +4 -0
  31. package/dist/claude/simple.js.map +1 -1
  32. package/dist/cli/args/index.d.ts +3 -1
  33. package/dist/cli/args/index.d.ts.map +1 -1
  34. package/dist/cli/args/index.js +10 -2
  35. package/dist/cli/args/index.js.map +1 -1
  36. package/dist/cli/args/options.d.ts.map +1 -1
  37. package/dist/cli/args/options.js +2 -0
  38. package/dist/cli/args/options.js.map +1 -1
  39. package/dist/cli/args-commands.d.ts +10 -0
  40. package/dist/cli/args-commands.d.ts.map +1 -0
  41. package/dist/cli/args-commands.js +113 -0
  42. package/dist/cli/args-commands.js.map +1 -0
  43. package/dist/cli/command-types.d.ts +26 -0
  44. package/dist/cli/command-types.d.ts.map +1 -0
  45. package/dist/cli/command-types.js +9 -0
  46. package/dist/cli/command-types.js.map +1 -0
  47. package/dist/cli/config/codec-primitives.d.ts +20 -0
  48. package/dist/cli/config/codec-primitives.d.ts.map +1 -0
  49. package/dist/cli/config/codec-primitives.js +51 -0
  50. package/dist/cli/config/codec-primitives.js.map +1 -0
  51. package/dist/cli/config/codec.d.ts.map +1 -1
  52. package/dist/cli/config/codec.js +4 -46
  53. package/dist/cli/config/codec.js.map +1 -1
  54. package/dist/cli/config/effective.d.ts.map +1 -1
  55. package/dist/cli/config/effective.js +1 -0
  56. package/dist/cli/config/effective.js.map +1 -1
  57. package/dist/cli/config/keys.d.ts +1 -1
  58. package/dist/cli/config/keys.d.ts.map +1 -1
  59. package/dist/cli/config/keys.js +1 -0
  60. package/dist/cli/config/keys.js.map +1 -1
  61. package/dist/cli/entry.d.ts +4 -2
  62. package/dist/cli/entry.d.ts.map +1 -1
  63. package/dist/cli/entry.js +2 -1
  64. package/dist/cli/entry.js.map +1 -1
  65. package/dist/cli/help.d.ts +2 -2
  66. package/dist/cli/help.d.ts.map +1 -1
  67. package/dist/cli/help.js +40 -1
  68. package/dist/cli/help.js.map +1 -1
  69. package/dist/cli/interactive/index.d.ts +26 -0
  70. package/dist/cli/interactive/index.d.ts.map +1 -0
  71. package/dist/cli/interactive/index.js +33 -0
  72. package/dist/cli/interactive/index.js.map +1 -0
  73. package/dist/cli/interactive/launch.d.ts +14 -0
  74. package/dist/cli/interactive/launch.d.ts.map +1 -0
  75. package/dist/cli/interactive/launch.js +66 -0
  76. package/dist/cli/interactive/launch.js.map +1 -0
  77. package/dist/cli/interactive/spawn.d.ts +18 -0
  78. package/dist/cli/interactive/spawn.d.ts.map +1 -0
  79. package/dist/cli/interactive/spawn.js +53 -0
  80. package/dist/cli/interactive/spawn.js.map +1 -0
  81. package/dist/cli/main-failure.d.ts +28 -0
  82. package/dist/cli/main-failure.d.ts.map +1 -0
  83. package/dist/cli/main-failure.js +78 -0
  84. package/dist/cli/main-failure.js.map +1 -0
  85. package/dist/cli/main.d.ts +12 -4
  86. package/dist/cli/main.d.ts.map +1 -1
  87. package/dist/cli/main.js +27 -73
  88. package/dist/cli/main.js.map +1 -1
  89. package/dist/cli/models/index.d.ts +20 -0
  90. package/dist/cli/models/index.d.ts.map +1 -0
  91. package/dist/cli/models/index.js +63 -0
  92. package/dist/cli/models/index.js.map +1 -0
  93. package/dist/cli/models/render.d.ts +9 -0
  94. package/dist/cli/models/render.d.ts.map +1 -0
  95. package/dist/cli/models/render.js +33 -0
  96. package/dist/cli/models/render.js.map +1 -0
  97. package/dist/cli/request/index.d.ts.map +1 -1
  98. package/dist/cli/request/index.js +8 -2
  99. package/dist/cli/request/index.js.map +1 -1
  100. package/dist/cli/request/layers.d.ts +2 -0
  101. package/dist/cli/request/layers.d.ts.map +1 -1
  102. package/dist/cli/request/layers.js +9 -5
  103. package/dist/cli/request/layers.js.map +1 -1
  104. package/dist/cli/request/posture.d.ts +28 -0
  105. package/dist/cli/request/posture.d.ts.map +1 -0
  106. package/dist/cli/request/posture.js +70 -0
  107. package/dist/cli/request/posture.js.map +1 -0
  108. package/dist/cli/request/resolution-types.d.ts +1 -0
  109. package/dist/cli/request/resolution-types.d.ts.map +1 -1
  110. package/dist/cli/request/settings.d.ts +2 -12
  111. package/dist/cli/request/settings.d.ts.map +1 -1
  112. package/dist/cli/request/settings.js +2 -25
  113. package/dist/cli/request/settings.js.map +1 -1
  114. package/dist/cli/request/validation.d.ts +12 -0
  115. package/dist/cli/request/validation.d.ts.map +1 -1
  116. package/dist/cli/request/validation.js +30 -10
  117. package/dist/cli/request/validation.js.map +1 -1
  118. package/dist/cli/request/values.d.ts +1 -0
  119. package/dist/cli/request/values.d.ts.map +1 -1
  120. package/dist/cli/request/values.js +1 -0
  121. package/dist/cli/request/values.js.map +1 -1
  122. package/dist/cli/run/index.d.ts.map +1 -1
  123. package/dist/cli/run/index.js +5 -41
  124. package/dist/cli/run/index.js.map +1 -1
  125. package/dist/cli/run/subscribe.d.ts +19 -0
  126. package/dist/cli/run/subscribe.d.ts.map +1 -0
  127. package/dist/cli/run/subscribe.js +47 -0
  128. package/dist/cli/run/subscribe.js.map +1 -0
  129. package/dist/cli/session/launch.d.ts +3 -0
  130. package/dist/cli/session/launch.d.ts.map +1 -1
  131. package/dist/cli/session/launch.js +11 -0
  132. package/dist/cli/session/launch.js.map +1 -1
  133. package/dist/cli/sessions/index.d.ts +30 -0
  134. package/dist/cli/sessions/index.d.ts.map +1 -0
  135. package/dist/cli/sessions/index.js +61 -0
  136. package/dist/cli/sessions/index.js.map +1 -0
  137. package/dist/cli/sessions/list.d.ts +28 -0
  138. package/dist/cli/sessions/list.d.ts.map +1 -0
  139. package/dist/cli/sessions/list.js +63 -0
  140. package/dist/cli/sessions/list.js.map +1 -0
  141. package/dist/cli/sessions/settings.d.ts +11 -0
  142. package/dist/cli/sessions/settings.d.ts.map +1 -0
  143. package/dist/cli/sessions/settings.js +26 -0
  144. package/dist/cli/sessions/settings.js.map +1 -0
  145. package/dist/cli/table.d.ts +7 -0
  146. package/dist/cli/table.d.ts.map +1 -0
  147. package/dist/cli/table.js +14 -0
  148. package/dist/cli/table.js.map +1 -0
  149. package/dist/cli/types.d.ts +5 -1
  150. package/dist/cli/types.d.ts.map +1 -1
  151. package/dist/cli/types.js.map +1 -1
  152. package/dist/codex/command.d.ts +18 -2
  153. package/dist/codex/command.d.ts.map +1 -1
  154. package/dist/codex/command.js +39 -24
  155. package/dist/codex/command.js.map +1 -1
  156. package/dist/codex/model-picker.d.ts.map +1 -1
  157. package/dist/codex/model-picker.js +3 -2
  158. package/dist/codex/model-picker.js.map +1 -1
  159. package/dist/codex/session/build.d.ts.map +1 -1
  160. package/dist/codex/session/build.js +5 -7
  161. package/dist/codex/session/build.js.map +1 -1
  162. package/dist/codex/session/index.d.ts.map +1 -1
  163. package/dist/codex/session/index.js +5 -2
  164. package/dist/codex/session/index.js.map +1 -1
  165. package/dist/codex/session/resume.d.ts +1 -1
  166. package/dist/codex/session/resume.d.ts.map +1 -1
  167. package/dist/codex/session/resume.js +5 -1
  168. package/dist/codex/session/resume.js.map +1 -1
  169. package/dist/codex/session/start-or-resume.js +1 -0
  170. package/dist/codex/session/start-or-resume.js.map +1 -1
  171. package/dist/codex/session/types.d.ts +3 -0
  172. package/dist/codex/session/types.d.ts.map +1 -1
  173. package/dist/codex/simple.d.ts.map +1 -1
  174. package/dist/codex/simple.js +4 -0
  175. package/dist/codex/simple.js.map +1 -1
  176. package/dist/core/errors.d.ts +1 -1
  177. package/dist/core/errors.d.ts.map +1 -1
  178. package/dist/core/errors.js.map +1 -1
  179. package/dist/core/high-trust.d.ts +41 -0
  180. package/dist/core/high-trust.d.ts.map +1 -0
  181. package/dist/core/high-trust.js +50 -0
  182. package/dist/core/high-trust.js.map +1 -0
  183. package/dist/core/input/index.d.ts.map +1 -1
  184. package/dist/core/input/index.js +15 -3
  185. package/dist/core/input/index.js.map +1 -1
  186. package/dist/core/models/input.d.ts +3 -0
  187. package/dist/core/models/input.d.ts.map +1 -0
  188. package/dist/core/models/input.js +9 -0
  189. package/dist/core/models/input.js.map +1 -0
  190. package/dist/core/models/picker.d.ts +2 -1
  191. package/dist/core/models/picker.d.ts.map +1 -1
  192. package/dist/core/models/picker.js +6 -5
  193. package/dist/core/models/picker.js.map +1 -1
  194. package/dist/core/models/tui-screen.d.ts +1 -1
  195. package/dist/core/models/tui-screen.d.ts.map +1 -1
  196. package/dist/core/models/tui-screen.js +26 -3
  197. package/dist/core/models/tui-screen.js.map +1 -1
  198. package/dist/core/trust/allowlist.d.ts +56 -0
  199. package/dist/core/trust/allowlist.d.ts.map +1 -0
  200. package/dist/core/{trust-prompts.js → trust/allowlist.js} +21 -38
  201. package/dist/core/trust/allowlist.js.map +1 -0
  202. package/dist/core/trust/prompts.d.ts +4 -46
  203. package/dist/core/trust/prompts.d.ts.map +1 -1
  204. package/dist/core/trust/prompts.js +2 -73
  205. package/dist/core/trust/prompts.js.map +1 -1
  206. package/dist/core/trust/responder.d.ts +2 -0
  207. package/dist/core/trust/responder.d.ts.map +1 -1
  208. package/dist/core/trust/responder.js +4 -0
  209. package/dist/core/trust/responder.js.map +1 -1
  210. package/dist/core/types.d.ts +3 -0
  211. package/dist/core/types.d.ts.map +1 -1
  212. package/dist/runtime/launch-arguments.d.ts +12 -0
  213. package/dist/runtime/launch-arguments.d.ts.map +1 -0
  214. package/dist/runtime/launch-arguments.js +15 -0
  215. package/dist/runtime/launch-arguments.js.map +1 -0
  216. package/dist/runtime/session/base.d.ts.map +1 -1
  217. package/dist/runtime/session/base.js +4 -1
  218. package/dist/runtime/session/base.js.map +1 -1
  219. package/dist/runtime/session/commands.d.ts +2 -1
  220. package/dist/runtime/session/commands.d.ts.map +1 -1
  221. package/dist/runtime/session/commands.js +10 -4
  222. package/dist/runtime/session/commands.js.map +1 -1
  223. package/dist/runtime/session/lifecycle.d.ts +3 -4
  224. package/dist/runtime/session/lifecycle.d.ts.map +1 -1
  225. package/dist/runtime/session/lifecycle.js +6 -5
  226. package/dist/runtime/session/lifecycle.js.map +1 -1
  227. package/dist/state/directories.d.ts +4 -0
  228. package/dist/state/directories.d.ts.map +1 -0
  229. package/dist/state/directories.js +41 -0
  230. package/dist/state/directories.js.map +1 -0
  231. package/dist/state/files.d.ts.map +1 -1
  232. package/dist/state/files.js +25 -11
  233. package/dist/state/files.js.map +1 -1
  234. package/dist/state/private-session.d.ts.map +1 -1
  235. package/dist/state/private-session.js +2 -0
  236. package/dist/state/private-session.js.map +1 -1
  237. package/dist/state/store.d.ts.map +1 -1
  238. package/dist/state/store.js +7 -1
  239. package/dist/state/store.js.map +1 -1
  240. package/docs/cli-behavior.md +89 -1
  241. package/docs/cli-output.md +60 -0
  242. package/docs/cli.md +10 -2
  243. package/docs/codex/cli.md +57 -0
  244. package/docs/codex/config.md +47 -0
  245. package/docs/codex/hooks.md +70 -0
  246. package/examples/README.md +56 -0
  247. package/examples/full.ts +113 -0
  248. package/examples/minimal.ts +15 -0
  249. package/examples/stream.ts +39 -0
  250. package/examples/support.ts +71 -0
  251. package/package.json +17 -10
  252. package/prd/01-overview.md +21 -0
  253. package/prd/02-goals.md +47 -0
  254. package/prd/03-terminology.md +32 -0
  255. package/prd/04-architecture.md +121 -0
  256. package/prd/05-api/5.1-starting-claude.md +108 -0
  257. package/prd/05-api/5.2-resuming-claude.md +86 -0
  258. package/prd/05-api/5.3-claude-session-api.md +658 -0
  259. package/prd/05-api/5.4-events.md +145 -0
  260. package/prd/05-api/5.5-starting-codex.md +106 -0
  261. package/prd/05-api/5.6-resuming-codex.md +48 -0
  262. package/prd/05-api/5.7-codex-session-api.md +425 -0
  263. package/prd/05-api/5.8-session-api.md +122 -0
  264. package/prd/05-api/5.9-loops.md +170 -0
  265. package/prd/05-api/README.md +19 -0
  266. package/prd/06-claude-hook-bridge.md +164 -0
  267. package/prd/07-claude-policy.md +15 -0
  268. package/prd/07a-codex-hook-bridge.md +76 -0
  269. package/prd/08-state.md +127 -0
  270. package/prd/09-lifecycle.md +222 -0
  271. package/prd/10-errors.md +55 -0
  272. package/prd/11-test-app.md +53 -0
  273. package/prd/12-e2e.md +23 -0
  274. package/prd/12a-cli.md +375 -0
  275. package/prd/13-latitude.md +12 -0
  276. package/prd/14-conformance.md +333 -0
  277. package/prd/15-open-notes.md +8 -0
  278. package/prd/README.md +45 -0
  279. package/dist/claude/hook-dispatch.d.ts +0 -9
  280. package/dist/claude/hook-dispatch.d.ts.map +0 -1
  281. package/dist/claude/hook-dispatch.js +0 -12
  282. package/dist/claude/hook-dispatch.js.map +0 -1
  283. package/dist/claude/hook-events-extra.d.ts +0 -81
  284. package/dist/claude/hook-events-extra.d.ts.map +0 -1
  285. package/dist/claude/hook-events-extra.js +0 -6
  286. package/dist/claude/hook-events-extra.js.map +0 -1
  287. package/dist/claude/hook-events.d.ts +0 -101
  288. package/dist/claude/hook-events.d.ts.map +0 -1
  289. package/dist/claude/hook-events.js +0 -6
  290. package/dist/claude/hook-events.js.map +0 -1
  291. package/dist/claude/hook-names.d.ts +0 -24
  292. package/dist/claude/hook-names.d.ts.map +0 -1
  293. package/dist/claude/hook-names.js +0 -45
  294. package/dist/claude/hook-names.js.map +0 -1
  295. package/dist/claude/hooks.d.ts +0 -78
  296. package/dist/claude/hooks.d.ts.map +0 -1
  297. package/dist/claude/hooks.js +0 -6
  298. package/dist/claude/hooks.js.map +0 -1
  299. package/dist/claude/session-bridge.d.ts +0 -11
  300. package/dist/claude/session-bridge.d.ts.map +0 -1
  301. package/dist/claude/session-bridge.js +0 -18
  302. package/dist/claude/session-bridge.js.map +0 -1
  303. package/dist/claude/session-build.d.ts +0 -15
  304. package/dist/claude/session-build.d.ts.map +0 -1
  305. package/dist/claude/session-build.js +0 -147
  306. package/dist/claude/session-build.js.map +0 -1
  307. package/dist/claude/session-hook-handler.d.ts +0 -34
  308. package/dist/claude/session-hook-handler.d.ts.map +0 -1
  309. package/dist/claude/session-hook-handler.js +0 -42
  310. package/dist/claude/session-hook-handler.js.map +0 -1
  311. package/dist/claude/session-instance.d.ts +0 -42
  312. package/dist/claude/session-instance.d.ts.map +0 -1
  313. package/dist/claude/session-instance.js +0 -146
  314. package/dist/claude/session-instance.js.map +0 -1
  315. package/dist/claude/session-interface.d.ts +0 -49
  316. package/dist/claude/session-interface.d.ts.map +0 -1
  317. package/dist/claude/session-interface.js +0 -10
  318. package/dist/claude/session-interface.js.map +0 -1
  319. package/dist/claude/session-resume.d.ts +0 -8
  320. package/dist/claude/session-resume.d.ts.map +0 -1
  321. package/dist/claude/session-resume.js +0 -47
  322. package/dist/claude/session-resume.js.map +0 -1
  323. package/dist/claude/session-runtime.d.ts +0 -43
  324. package/dist/claude/session-runtime.d.ts.map +0 -1
  325. package/dist/claude/session-runtime.js +0 -105
  326. package/dist/claude/session-runtime.js.map +0 -1
  327. package/dist/claude/session-transcript.d.ts +0 -62
  328. package/dist/claude/session-transcript.d.ts.map +0 -1
  329. package/dist/claude/session-transcript.js +0 -88
  330. package/dist/claude/session-transcript.js.map +0 -1
  331. package/dist/claude/session.d.ts +0 -18
  332. package/dist/claude/session.d.ts.map +0 -1
  333. package/dist/claude/session.js +0 -58
  334. package/dist/claude/session.js.map +0 -1
  335. package/dist/claude/start-or-resume.d.ts +0 -12
  336. package/dist/claude/start-or-resume.d.ts.map +0 -1
  337. package/dist/claude/start-or-resume.js +0 -32
  338. package/dist/claude/start-or-resume.js.map +0 -1
  339. package/dist/claude/tool-hook-events.d.ts +0 -10
  340. package/dist/claude/tool-hook-events.d.ts.map +0 -1
  341. package/dist/claude/tool-hook-events.js +0 -18
  342. package/dist/claude/tool-hook-events.js.map +0 -1
  343. package/dist/claude/tool-types.d.ts +0 -158
  344. package/dist/claude/tool-types.d.ts.map +0 -1
  345. package/dist/claude/tool-types.js +0 -6
  346. package/dist/claude/tool-types.js.map +0 -1
  347. package/dist/claude/validate-input.d.ts +0 -8
  348. package/dist/claude/validate-input.d.ts.map +0 -1
  349. package/dist/claude/validate-input.js +0 -137
  350. package/dist/claude/validate-input.js.map +0 -1
  351. package/dist/claude/validate-permission-update.d.ts +0 -10
  352. package/dist/claude/validate-permission-update.d.ts.map +0 -1
  353. package/dist/claude/validate-permission-update.js +0 -72
  354. package/dist/claude/validate-permission-update.js.map +0 -1
  355. package/dist/claude/validate-result.d.ts +0 -7
  356. package/dist/claude/validate-result.d.ts.map +0 -1
  357. package/dist/claude/validate-result.js +0 -118
  358. package/dist/claude/validate-result.js.map +0 -1
  359. package/dist/claude/validate-shapes.d.ts +0 -22
  360. package/dist/claude/validate-shapes.d.ts.map +0 -1
  361. package/dist/claude/validate-shapes.js +0 -15
  362. package/dist/claude/validate-shapes.js.map +0 -1
  363. package/dist/claude/validate-tool-update.d.ts +0 -15
  364. package/dist/claude/validate-tool-update.d.ts.map +0 -1
  365. package/dist/claude/validate-tool-update.js +0 -122
  366. package/dist/claude/validate-tool-update.js.map +0 -1
  367. package/dist/cli/agent-detect.d.ts +0 -44
  368. package/dist/cli/agent-detect.d.ts.map +0 -1
  369. package/dist/cli/agent-detect.js +0 -66
  370. package/dist/cli/agent-detect.js.map +0 -1
  371. package/dist/cli/arg-errors.d.ts +0 -6
  372. package/dist/cli/arg-errors.d.ts.map +0 -1
  373. package/dist/cli/arg-errors.js +0 -44
  374. package/dist/cli/arg-errors.js.map +0 -1
  375. package/dist/cli/arg-options.d.ts +0 -26
  376. package/dist/cli/arg-options.d.ts.map +0 -1
  377. package/dist/cli/arg-options.js +0 -50
  378. package/dist/cli/arg-options.js.map +0 -1
  379. package/dist/cli/args.d.ts +0 -7
  380. package/dist/cli/args.d.ts.map +0 -1
  381. package/dist/cli/args.js +0 -70
  382. package/dist/cli/args.js.map +0 -1
  383. package/dist/cli/lifecycle-outcome.d.ts +0 -13
  384. package/dist/cli/lifecycle-outcome.d.ts.map +0 -1
  385. package/dist/cli/lifecycle-outcome.js +0 -20
  386. package/dist/cli/lifecycle-outcome.js.map +0 -1
  387. package/dist/cli/lifecycle.d.ts +0 -61
  388. package/dist/cli/lifecycle.d.ts.map +0 -1
  389. package/dist/cli/lifecycle.js +0 -152
  390. package/dist/cli/lifecycle.js.map +0 -1
  391. package/dist/cli/request-finalize.d.ts +0 -10
  392. package/dist/cli/request-finalize.d.ts.map +0 -1
  393. package/dist/cli/request-finalize.js +0 -135
  394. package/dist/cli/request-finalize.js.map +0 -1
  395. package/dist/cli/request-layers.d.ts +0 -30
  396. package/dist/cli/request-layers.d.ts.map +0 -1
  397. package/dist/cli/request-layers.js +0 -44
  398. package/dist/cli/request-layers.js.map +0 -1
  399. package/dist/cli/request-settings.d.ts +0 -34
  400. package/dist/cli/request-settings.d.ts.map +0 -1
  401. package/dist/cli/request-settings.js +0 -66
  402. package/dist/cli/request-settings.js.map +0 -1
  403. package/dist/cli/request-sources.d.ts +0 -13
  404. package/dist/cli/request-sources.d.ts.map +0 -1
  405. package/dist/cli/request-sources.js +0 -23
  406. package/dist/cli/request-sources.js.map +0 -1
  407. package/dist/cli/request-validation.d.ts +0 -18
  408. package/dist/cli/request-validation.d.ts.map +0 -1
  409. package/dist/cli/request-validation.js +0 -84
  410. package/dist/cli/request-validation.js.map +0 -1
  411. package/dist/cli/request-values.d.ts +0 -33
  412. package/dist/cli/request-values.d.ts.map +0 -1
  413. package/dist/cli/request-values.js +0 -73
  414. package/dist/cli/request-values.js.map +0 -1
  415. package/dist/cli/request.d.ts +0 -12
  416. package/dist/cli/request.d.ts.map +0 -1
  417. package/dist/cli/request.js +0 -103
  418. package/dist/cli/request.js.map +0 -1
  419. package/dist/cli/resolution-types.d.ts +0 -35
  420. package/dist/cli/resolution-types.d.ts.map +0 -1
  421. package/dist/cli/resolution-types.js +0 -6
  422. package/dist/cli/resolution-types.js.map +0 -1
  423. package/dist/cli/run-output-lines.d.ts +0 -14
  424. package/dist/cli/run-output-lines.d.ts.map +0 -1
  425. package/dist/cli/run-output-lines.js +0 -42
  426. package/dist/cli/run-output-lines.js.map +0 -1
  427. package/dist/cli/run-output.d.ts +0 -48
  428. package/dist/cli/run-output.d.ts.map +0 -1
  429. package/dist/cli/run-output.js +0 -150
  430. package/dist/cli/run-output.js.map +0 -1
  431. package/dist/cli/run.d.ts +0 -20
  432. package/dist/cli/run.d.ts.map +0 -1
  433. package/dist/cli/run.js +0 -126
  434. package/dist/cli/run.js.map +0 -1
  435. package/dist/cli/session-launch.d.ts +0 -23
  436. package/dist/cli/session-launch.d.ts.map +0 -1
  437. package/dist/cli/session-launch.js +0 -57
  438. package/dist/cli/session-launch.js.map +0 -1
  439. package/dist/cli/session.d.ts +0 -68
  440. package/dist/cli/session.d.ts.map +0 -1
  441. package/dist/cli/session.js +0 -124
  442. package/dist/cli/session.js.map +0 -1
  443. package/dist/codex/attach-images.d.ts +0 -20
  444. package/dist/codex/attach-images.d.ts.map +0 -1
  445. package/dist/codex/attach-images.js +0 -66
  446. package/dist/codex/attach-images.js.map +0 -1
  447. package/dist/codex/clipboard-lock.d.ts +0 -15
  448. package/dist/codex/clipboard-lock.d.ts.map +0 -1
  449. package/dist/codex/clipboard-lock.js +0 -16
  450. package/dist/codex/clipboard-lock.js.map +0 -1
  451. package/dist/codex/clipboard.d.ts +0 -32
  452. package/dist/codex/clipboard.d.ts.map +0 -1
  453. package/dist/codex/clipboard.js +0 -92
  454. package/dist/codex/clipboard.js.map +0 -1
  455. package/dist/codex/config-lock.d.ts +0 -21
  456. package/dist/codex/config-lock.d.ts.map +0 -1
  457. package/dist/codex/config-lock.js +0 -22
  458. package/dist/codex/config-lock.js.map +0 -1
  459. package/dist/codex/config-restore.d.ts +0 -33
  460. package/dist/codex/config-restore.d.ts.map +0 -1
  461. package/dist/codex/config-restore.js +0 -90
  462. package/dist/codex/config-restore.js.map +0 -1
  463. package/dist/codex/config-transaction.d.ts +0 -26
  464. package/dist/codex/config-transaction.d.ts.map +0 -1
  465. package/dist/codex/config-transaction.js +0 -47
  466. package/dist/codex/config-transaction.js.map +0 -1
  467. package/dist/codex/hook-dispatch.d.ts +0 -9
  468. package/dist/codex/hook-dispatch.d.ts.map +0 -1
  469. package/dist/codex/hook-dispatch.js +0 -14
  470. package/dist/codex/hook-dispatch.js.map +0 -1
  471. package/dist/codex/hook-names.d.ts +0 -19
  472. package/dist/codex/hook-names.d.ts.map +0 -1
  473. package/dist/codex/hook-names.js +0 -17
  474. package/dist/codex/hook-names.js.map +0 -1
  475. package/dist/codex/hooks.d.ts +0 -99
  476. package/dist/codex/hooks.d.ts.map +0 -1
  477. package/dist/codex/hooks.js +0 -6
  478. package/dist/codex/hooks.js.map +0 -1
  479. package/dist/codex/initial-ready.d.ts +0 -19
  480. package/dist/codex/initial-ready.d.ts.map +0 -1
  481. package/dist/codex/initial-ready.js +0 -19
  482. package/dist/codex/initial-ready.js.map +0 -1
  483. package/dist/codex/serialize.d.ts +0 -8
  484. package/dist/codex/serialize.d.ts.map +0 -1
  485. package/dist/codex/serialize.js +0 -48
  486. package/dist/codex/serialize.js.map +0 -1
  487. package/dist/codex/session-bridge.d.ts +0 -14
  488. package/dist/codex/session-bridge.d.ts.map +0 -1
  489. package/dist/codex/session-bridge.js +0 -20
  490. package/dist/codex/session-bridge.js.map +0 -1
  491. package/dist/codex/session-build.d.ts +0 -15
  492. package/dist/codex/session-build.d.ts.map +0 -1
  493. package/dist/codex/session-build.js +0 -144
  494. package/dist/codex/session-build.js.map +0 -1
  495. package/dist/codex/session-cleanup.d.ts +0 -12
  496. package/dist/codex/session-cleanup.d.ts.map +0 -1
  497. package/dist/codex/session-cleanup.js +0 -15
  498. package/dist/codex/session-cleanup.js.map +0 -1
  499. package/dist/codex/session-hooks.d.ts +0 -13
  500. package/dist/codex/session-hooks.d.ts.map +0 -1
  501. package/dist/codex/session-hooks.js +0 -54
  502. package/dist/codex/session-hooks.js.map +0 -1
  503. package/dist/codex/session-instance.d.ts +0 -50
  504. package/dist/codex/session-instance.d.ts.map +0 -1
  505. package/dist/codex/session-instance.js +0 -117
  506. package/dist/codex/session-instance.js.map +0 -1
  507. package/dist/codex/session-resume.d.ts +0 -7
  508. package/dist/codex/session-resume.d.ts.map +0 -1
  509. package/dist/codex/session-resume.js +0 -44
  510. package/dist/codex/session-resume.js.map +0 -1
  511. package/dist/codex/session-runtime.d.ts +0 -7
  512. package/dist/codex/session-runtime.d.ts.map +0 -1
  513. package/dist/codex/session-runtime.js +0 -10
  514. package/dist/codex/session-runtime.js.map +0 -1
  515. package/dist/codex/session-transcript.d.ts +0 -30
  516. package/dist/codex/session-transcript.d.ts.map +0 -1
  517. package/dist/codex/session-transcript.js +0 -53
  518. package/dist/codex/session-transcript.js.map +0 -1
  519. package/dist/codex/session-types.d.ts +0 -87
  520. package/dist/codex/session-types.d.ts.map +0 -1
  521. package/dist/codex/session-types.js +0 -6
  522. package/dist/codex/session-types.js.map +0 -1
  523. package/dist/codex/session-warnings.d.ts +0 -27
  524. package/dist/codex/session-warnings.d.ts.map +0 -1
  525. package/dist/codex/session-warnings.js +0 -54
  526. package/dist/codex/session-warnings.js.map +0 -1
  527. package/dist/codex/session.d.ts +0 -16
  528. package/dist/codex/session.d.ts.map +0 -1
  529. package/dist/codex/session.js +0 -61
  530. package/dist/codex/session.js.map +0 -1
  531. package/dist/codex/start-or-resume.d.ts +0 -12
  532. package/dist/codex/start-or-resume.d.ts.map +0 -1
  533. package/dist/codex/start-or-resume.js +0 -31
  534. package/dist/codex/start-or-resume.js.map +0 -1
  535. package/dist/codex/transcript/cursor-io.d.ts +0 -7
  536. package/dist/codex/transcript/cursor-io.d.ts.map +0 -1
  537. package/dist/codex/transcript/cursor-io.js +0 -7
  538. package/dist/codex/transcript/cursor-io.js.map +0 -1
  539. package/dist/codex/transcript/cursor.d.ts +0 -8
  540. package/dist/codex/transcript/cursor.d.ts.map +0 -1
  541. package/dist/codex/transcript/cursor.js +0 -8
  542. package/dist/codex/transcript/cursor.js.map +0 -1
  543. package/dist/codex/transcript/drops.d.ts +0 -9
  544. package/dist/codex/transcript/drops.d.ts.map +0 -1
  545. package/dist/codex/transcript/drops.js +0 -9
  546. package/dist/codex/transcript/drops.js.map +0 -1
  547. package/dist/codex/transcript.d.ts +0 -12
  548. package/dist/codex/transcript.d.ts.map +0 -1
  549. package/dist/codex/transcript.js +0 -10
  550. package/dist/codex/transcript.js.map +0 -1
  551. package/dist/codex/validate-result.d.ts +0 -7
  552. package/dist/codex/validate-result.d.ts.map +0 -1
  553. package/dist/codex/validate-result.js +0 -84
  554. package/dist/codex/validate-result.js.map +0 -1
  555. package/dist/codex/validate.d.ts +0 -11
  556. package/dist/codex/validate.d.ts.map +0 -1
  557. package/dist/codex/validate.js +0 -88
  558. package/dist/codex/validate.js.map +0 -1
  559. package/dist/core/activity-lifecycle.d.ts +0 -21
  560. package/dist/core/activity-lifecycle.d.ts.map +0 -1
  561. package/dist/core/activity-lifecycle.js +0 -45
  562. package/dist/core/activity-lifecycle.js.map +0 -1
  563. package/dist/core/activity-meta.d.ts +0 -13
  564. package/dist/core/activity-meta.d.ts.map +0 -1
  565. package/dist/core/activity-meta.js +0 -67
  566. package/dist/core/activity-meta.js.map +0 -1
  567. package/dist/core/activity-transcript.d.ts +0 -19
  568. package/dist/core/activity-transcript.d.ts.map +0 -1
  569. package/dist/core/activity-transcript.js +0 -60
  570. package/dist/core/activity-transcript.js.map +0 -1
  571. package/dist/core/activity.d.ts +0 -51
  572. package/dist/core/activity.d.ts.map +0 -1
  573. package/dist/core/activity.js +0 -81
  574. package/dist/core/activity.js.map +0 -1
  575. package/dist/core/control-queue-state.d.ts +0 -29
  576. package/dist/core/control-queue-state.d.ts.map +0 -1
  577. package/dist/core/control-queue-state.js +0 -95
  578. package/dist/core/control-queue-state.js.map +0 -1
  579. package/dist/core/control-queue-traits.d.ts +0 -54
  580. package/dist/core/control-queue-traits.d.ts.map +0 -1
  581. package/dist/core/control-queue-traits.js +0 -118
  582. package/dist/core/control-queue-traits.js.map +0 -1
  583. package/dist/core/control-queue-types.d.ts +0 -45
  584. package/dist/core/control-queue-types.d.ts.map +0 -1
  585. package/dist/core/control-queue-types.js +0 -7
  586. package/dist/core/control-queue-types.js.map +0 -1
  587. package/dist/core/control-queue.d.ts +0 -21
  588. package/dist/core/control-queue.d.ts.map +0 -1
  589. package/dist/core/control-queue.js +0 -98
  590. package/dist/core/control-queue.js.map +0 -1
  591. package/dist/core/list-models.d.ts +0 -44
  592. package/dist/core/list-models.d.ts.map +0 -1
  593. package/dist/core/list-models.js +0 -73
  594. package/dist/core/list-models.js.map +0 -1
  595. package/dist/core/model-picker.d.ts +0 -22
  596. package/dist/core/model-picker.d.ts.map +0 -1
  597. package/dist/core/model-picker.js +0 -58
  598. package/dist/core/model-picker.js.map +0 -1
  599. package/dist/core/model-rows.d.ts +0 -21
  600. package/dist/core/model-rows.d.ts.map +0 -1
  601. package/dist/core/model-rows.js +0 -57
  602. package/dist/core/model-rows.js.map +0 -1
  603. package/dist/core/probe-state.d.ts +0 -21
  604. package/dist/core/probe-state.d.ts.map +0 -1
  605. package/dist/core/probe-state.js +0 -39
  606. package/dist/core/probe-state.js.map +0 -1
  607. package/dist/core/session-input-abort.d.ts +0 -10
  608. package/dist/core/session-input-abort.d.ts.map +0 -1
  609. package/dist/core/session-input-abort.js +0 -44
  610. package/dist/core/session-input-abort.js.map +0 -1
  611. package/dist/core/session-input.d.ts +0 -37
  612. package/dist/core/session-input.d.ts.map +0 -1
  613. package/dist/core/session-input.js +0 -154
  614. package/dist/core/session-input.js.map +0 -1
  615. package/dist/core/session-warnings.d.ts +0 -20
  616. package/dist/core/session-warnings.d.ts.map +0 -1
  617. package/dist/core/session-warnings.js +0 -32
  618. package/dist/core/session-warnings.js.map +0 -1
  619. package/dist/core/simple/loop-controls.d.ts +0 -7
  620. package/dist/core/simple/loop-controls.d.ts.map +0 -1
  621. package/dist/core/simple/loop-controls.js +0 -7
  622. package/dist/core/simple/loop-controls.js.map +0 -1
  623. package/dist/core/startup-automation.d.ts +0 -54
  624. package/dist/core/startup-automation.d.ts.map +0 -1
  625. package/dist/core/startup-automation.js +0 -40
  626. package/dist/core/startup-automation.js.map +0 -1
  627. package/dist/core/startup-frame.d.ts +0 -39
  628. package/dist/core/startup-frame.d.ts.map +0 -1
  629. package/dist/core/startup-frame.js +0 -60
  630. package/dist/core/startup-frame.js.map +0 -1
  631. package/dist/core/startup-write.d.ts +0 -47
  632. package/dist/core/startup-write.d.ts.map +0 -1
  633. package/dist/core/startup-write.js +0 -73
  634. package/dist/core/startup-write.js.map +0 -1
  635. package/dist/core/trust-blocking.d.ts +0 -22
  636. package/dist/core/trust-blocking.d.ts.map +0 -1
  637. package/dist/core/trust-blocking.js +0 -38
  638. package/dist/core/trust-blocking.js.map +0 -1
  639. package/dist/core/trust-prompts.d.ts +0 -135
  640. package/dist/core/trust-prompts.d.ts.map +0 -1
  641. package/dist/core/trust-prompts.js.map +0 -1
  642. package/dist/core/trust-responder.d.ts +0 -48
  643. package/dist/core/trust-responder.d.ts.map +0 -1
  644. package/dist/core/trust-responder.js +0 -119
  645. package/dist/core/trust-responder.js.map +0 -1
  646. package/dist/core/tui-screen.d.ts +0 -21
  647. package/dist/core/tui-screen.d.ts.map +0 -1
  648. package/dist/core/tui-screen.js +0 -56
  649. package/dist/core/tui-screen.js.map +0 -1
  650. package/dist/core/update-warning.d.ts +0 -25
  651. package/dist/core/update-warning.d.ts.map +0 -1
  652. package/dist/core/update-warning.js +0 -33
  653. package/dist/core/update-warning.js.map +0 -1
  654. package/dist/core/warning-lifecycle.d.ts +0 -23
  655. package/dist/core/warning-lifecycle.d.ts.map +0 -1
  656. package/dist/core/warning-lifecycle.js +0 -6
  657. package/dist/core/warning-lifecycle.js.map +0 -1
  658. package/dist/core/warning-reasons.d.ts +0 -62
  659. package/dist/core/warning-reasons.d.ts.map +0 -1
  660. package/dist/core/warning-reasons.js +0 -121
  661. package/dist/core/warning-reasons.js.map +0 -1
  662. package/dist/core/warnings.d.ts +0 -145
  663. package/dist/core/warnings.d.ts.map +0 -1
  664. package/dist/core/warnings.js +0 -12
  665. package/dist/core/warnings.js.map +0 -1
  666. package/dist/runtime/cleanup-latch.d.ts +0 -27
  667. package/dist/runtime/cleanup-latch.d.ts.map +0 -1
  668. package/dist/runtime/cleanup-latch.js +0 -43
  669. package/dist/runtime/cleanup-latch.js.map +0 -1
  670. package/dist/runtime/initial-ready-advance.d.ts +0 -22
  671. package/dist/runtime/initial-ready-advance.d.ts.map +0 -1
  672. package/dist/runtime/initial-ready-advance.js +0 -39
  673. package/dist/runtime/initial-ready-advance.js.map +0 -1
  674. package/dist/runtime/initial-ready-fallback.d.ts +0 -12
  675. package/dist/runtime/initial-ready-fallback.d.ts.map +0 -1
  676. package/dist/runtime/initial-ready-fallback.js +0 -20
  677. package/dist/runtime/initial-ready-fallback.js.map +0 -1
  678. package/dist/runtime/initial-ready.d.ts +0 -49
  679. package/dist/runtime/initial-ready.d.ts.map +0 -1
  680. package/dist/runtime/initial-ready.js +0 -81
  681. package/dist/runtime/initial-ready.js.map +0 -1
  682. package/dist/runtime/reap-tree.d.ts +0 -62
  683. package/dist/runtime/reap-tree.d.ts.map +0 -1
  684. package/dist/runtime/reap-tree.js +0 -108
  685. package/dist/runtime/reap-tree.js.map +0 -1
  686. package/dist/runtime/session-base-types.d.ts +0 -36
  687. package/dist/runtime/session-base-types.d.ts.map +0 -1
  688. package/dist/runtime/session-base-types.js +0 -14
  689. package/dist/runtime/session-base-types.js.map +0 -1
  690. package/dist/runtime/session-base.d.ts +0 -48
  691. package/dist/runtime/session-base.d.ts.map +0 -1
  692. package/dist/runtime/session-base.js +0 -76
  693. package/dist/runtime/session-base.js.map +0 -1
  694. package/dist/runtime/session-commands.d.ts +0 -43
  695. package/dist/runtime/session-commands.d.ts.map +0 -1
  696. package/dist/runtime/session-commands.js +0 -52
  697. package/dist/runtime/session-commands.js.map +0 -1
  698. package/dist/runtime/session-exit.d.ts +0 -16
  699. package/dist/runtime/session-exit.d.ts.map +0 -1
  700. package/dist/runtime/session-exit.js +0 -32
  701. package/dist/runtime/session-exit.js.map +0 -1
  702. package/dist/runtime/session-image-attach.d.ts +0 -45
  703. package/dist/runtime/session-image-attach.d.ts.map +0 -1
  704. package/dist/runtime/session-image-attach.js +0 -82
  705. package/dist/runtime/session-image-attach.js.map +0 -1
  706. package/dist/runtime/session-lifecycle.d.ts +0 -61
  707. package/dist/runtime/session-lifecycle.d.ts.map +0 -1
  708. package/dist/runtime/session-lifecycle.js +0 -164
  709. package/dist/runtime/session-lifecycle.js.map +0 -1
  710. package/dist/runtime/session-loops.d.ts +0 -32
  711. package/dist/runtime/session-loops.d.ts.map +0 -1
  712. package/dist/runtime/session-loops.js +0 -62
  713. package/dist/runtime/session-loops.js.map +0 -1
  714. package/dist/runtime/session-readiness.d.ts +0 -18
  715. package/dist/runtime/session-readiness.d.ts.map +0 -1
  716. package/dist/runtime/session-readiness.js +0 -22
  717. package/dist/runtime/session-readiness.js.map +0 -1
  718. package/dist/runtime/session-reap.d.ts +0 -28
  719. package/dist/runtime/session-reap.d.ts.map +0 -1
  720. package/dist/runtime/session-reap.js +0 -51
  721. package/dist/runtime/session-reap.js.map +0 -1
  722. package/dist/runtime/session-resize.d.ts +0 -20
  723. package/dist/runtime/session-resize.d.ts.map +0 -1
  724. package/dist/runtime/session-resize.js +0 -26
  725. package/dist/runtime/session-resize.js.map +0 -1
  726. package/dist/runtime/session-shutdown-binding.d.ts +0 -30
  727. package/dist/runtime/session-shutdown-binding.d.ts.map +0 -1
  728. package/dist/runtime/session-shutdown-binding.js +0 -37
  729. package/dist/runtime/session-shutdown-binding.js.map +0 -1
  730. package/dist/runtime/session-shutdown.d.ts +0 -60
  731. package/dist/runtime/session-shutdown.d.ts.map +0 -1
  732. package/dist/runtime/session-shutdown.js +0 -140
  733. package/dist/runtime/session-shutdown.js.map +0 -1
  734. package/dist/runtime/session-status-wiring.d.ts +0 -38
  735. package/dist/runtime/session-status-wiring.d.ts.map +0 -1
  736. package/dist/runtime/session-status-wiring.js +0 -41
  737. package/dist/runtime/session-status-wiring.js.map +0 -1
  738. package/dist/runtime/session-status.d.ts +0 -7
  739. package/dist/runtime/session-status.d.ts.map +0 -1
  740. package/dist/runtime/session-status.js +0 -22
  741. package/dist/runtime/session-status.js.map +0 -1
  742. package/dist/runtime/shutdown-coordinator.d.ts +0 -57
  743. package/dist/runtime/shutdown-coordinator.d.ts.map +0 -1
  744. package/dist/runtime/shutdown-coordinator.js +0 -77
  745. package/dist/runtime/shutdown-coordinator.js.map +0 -1
  746. package/dist/runtime/startup-buffer.d.ts +0 -33
  747. package/dist/runtime/startup-buffer.d.ts.map +0 -1
  748. package/dist/runtime/startup-buffer.js +0 -53
  749. package/dist/runtime/startup-buffer.js.map +0 -1
  750. package/dist/runtime/startup-cleanup.d.ts +0 -43
  751. package/dist/runtime/startup-cleanup.d.ts.map +0 -1
  752. package/dist/runtime/startup-cleanup.js +0 -89
  753. package/dist/runtime/startup-cleanup.js.map +0 -1
  754. package/dist/runtime/startup.d.ts +0 -17
  755. package/dist/runtime/startup.d.ts.map +0 -1
  756. package/dist/runtime/startup.js +0 -47
  757. package/dist/runtime/startup.js.map +0 -1
  758. package/dist/runtime/status-emit.d.ts +0 -14
  759. package/dist/runtime/status-emit.d.ts.map +0 -1
  760. package/dist/runtime/status-emit.js +0 -15
  761. package/dist/runtime/status-emit.js.map +0 -1
  762. package/dist/runtime/teardown.d.ts +0 -15
  763. package/dist/runtime/teardown.d.ts.map +0 -1
  764. package/dist/runtime/teardown.js +0 -40
  765. package/dist/runtime/teardown.js.map +0 -1
  766. package/dist/runtime/terminate.d.ts +0 -22
  767. package/dist/runtime/terminate.d.ts.map +0 -1
  768. package/dist/runtime/terminate.js +0 -129
  769. package/dist/runtime/terminate.js.map +0 -1
  770. package/dist/runtime/update-lock.d.ts +0 -19
  771. package/dist/runtime/update-lock.d.ts.map +0 -1
  772. package/dist/runtime/update-lock.js +0 -183
  773. package/dist/runtime/update-lock.js.map +0 -1
  774. package/dist/runtime/update-once.d.ts +0 -40
  775. package/dist/runtime/update-once.d.ts.map +0 -1
  776. package/dist/runtime/update-once.js +0 -88
  777. package/dist/runtime/update-once.js.map +0 -1
@@ -1,68 +0,0 @@
1
- /**
2
- * Exact new/resume session facade for headless CLI execution.
3
- * Implements PRD §12A.2/§12A.5 and C-CLI-03/C-CLI-04/C-CLI-08/C-CLI-15.
4
- */
5
- import type { ElwoodAgentSession, ElwoodCommonEventMap } from "../core/agent-session.ts";
6
- import type { TurnEvent } from "../core/simple/events.ts";
7
- import { SessionBase } from "../core/simple/session.ts";
8
- import type { TurnOptions } from "../core/simple/turn-types.ts";
9
- import type { ElwoodSessionStatus, TerminalSize, Unsubscribe } from "../core/types.ts";
10
- import type { SessionRecord } from "../state/store.ts";
11
- import { finalizeRunRequest } from "./request.ts";
12
- import { type CliLaunchDependencies } from "./session-launch.ts";
13
- import type { CliAgent, EffectiveRunRequest, ResolvedRunRequest } from "./types.ts";
14
- export type CliSessionDependencies = {
15
- readonly randomId: () => string;
16
- readonly readRecord: (stateDir: string, id: string) => SessionRecord;
17
- readonly finalize: typeof finalizeRunRequest;
18
- readonly launch: CliLaunchDependencies;
19
- };
20
- export type PreparedCliSession = {
21
- readonly request: EffectiveRunRequest;
22
- readonly session: CliSessionFacade;
23
- };
24
- export interface CliSessionFacade {
25
- readonly agent: CliAgent;
26
- readonly id: string;
27
- readonly resumed: boolean;
28
- readonly status: ElwoodSessionStatus;
29
- readonly session: ElwoodAgentSession | undefined;
30
- start(): Promise<ElwoodAgentSession>;
31
- setup(): Promise<void>;
32
- stream(prompt: string, options?: TurnOptions): AsyncGenerator<TurnEvent>;
33
- send(prompt: string, options?: TurnOptions): Promise<string>;
34
- on<E extends keyof ElwoodCommonEventMap>(event: E, handler: (event: ElwoodCommonEventMap[E]) => void): Unsubscribe;
35
- interrupt(options?: {
36
- readonly timeoutMs?: number;
37
- }): Promise<void>;
38
- resize(size: TerminalSize): Promise<void>;
39
- close(): Promise<void>;
40
- kill(): Promise<void>;
41
- teardown(): Promise<void>;
42
- preservedSessionId(): string | null;
43
- }
44
- /** Resolve stored identity first, then create one lazy facade for the effective adapter. */
45
- export declare function prepareCliSession(draft: ResolvedRunRequest, dependencies?: CliSessionDependencies): Promise<PreparedCliSession>;
46
- export declare class HeadlessCliSession extends SessionBase<ElwoodAgentSession> implements CliSessionFacade {
47
- readonly agent: CliAgent;
48
- readonly id: string;
49
- readonly resumed: boolean;
50
- private readonly request;
51
- private readonly launchSession;
52
- private setupPromise;
53
- private pendingLaunch;
54
- constructor(request: EffectiveRunRequest, id: string, launch: () => Promise<ElwoodAgentSession>);
55
- protected readonly readBoundarySignal: import("../core/simple/turn-types.ts").BoundarySignalReader;
56
- protected launch(): Promise<ElwoodAgentSession>;
57
- private validatedLaunch;
58
- setup(): Promise<void>;
59
- on<E extends keyof ElwoodCommonEventMap>(event: E, handler: (event: ElwoodCommonEventMap[E]) => void): Unsubscribe;
60
- teardown(): Promise<void>;
61
- close(): Promise<void>;
62
- preservedSessionId(): string | null;
63
- private performSetup;
64
- private clearPendingLaunch;
65
- private deferPendingCleanup;
66
- private removeIdentityAfterFailedLaunch;
67
- }
68
- //# sourceMappingURL=session.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/cli/session.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAEzF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAExD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,mBAAmB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEvF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EACL,KAAK,qBAAqB,EAG3B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEpF,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,MAAM,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,aAAa,CAAC;IACrE,QAAQ,CAAC,QAAQ,EAAE,OAAO,kBAAkB,CAAC;IAC7C,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,OAAO,EAAE,mBAAmB,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;CACpC,CAAC;AAEF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,kBAAkB,GAAG,SAAS,CAAC;IACjD,KAAK,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IACzE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7D,EAAE,CAAC,CAAC,SAAS,MAAM,oBAAoB,EACrC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAAK,IAAI,GAChD,WAAW,CAAC;IACf,SAAS,CAAC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,MAAM,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAAC;CACrC;AASD,4FAA4F;AAC5F,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,kBAAkB,EACzB,YAAY,GAAE,sBAAiC,GAC9C,OAAO,CAAC,kBAAkB,CAAC,CAU7B;AAED,qBAAa,kBACX,SAAQ,WAAW,CAAC,kBAAkB,CACtC,YAAW,gBAAgB;IAE3B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsB;IAC9C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoC;IAClE,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,aAAa,CAA0C;gBAEnD,OAAO,EAAE,mBAAmB,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC;IAS/F,SAAS,CAAC,QAAQ,CAAC,kBAAkB,8DAAyB;IAE9D,SAAS,CAAC,MAAM,IAAI,OAAO,CAAC,kBAAkB,CAAC;YAUjC,eAAe;IAS7B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,EAAE,CAAC,CAAC,SAAS,MAAM,oBAAoB,EACrC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC,CAAC,KAAK,IAAI,GAChD,WAAW;IAIL,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IASzB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAU/B,kBAAkB,IAAI,MAAM,GAAG,IAAI;YAUrB,YAAY;IAQ1B,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,+BAA+B;CAOxC"}
@@ -1,124 +0,0 @@
1
- /**
2
- * Exact new/resume session facade for headless CLI execution.
3
- * Implements PRD §12A.2/§12A.5 and C-CLI-03/C-CLI-04/C-CLI-08/C-CLI-15.
4
- */
5
- import { randomUUID } from "node:crypto";
6
- import { elwoodError } from "../core/errors.js";
7
- import { SessionBase } from "../core/simple/session.js";
8
- import { defaultBoundarySignal } from "../core/simple/turn.js";
9
- import { readPrivateSessionRecord, removeSessionIdentity } from "../state/private-session.js";
10
- import { finalizeRunRequest } from "./request.js";
11
- import { createCliLaunch, defaultCliLaunchDependencies, } from "./session-launch.js";
12
- const defaults = {
13
- randomId: randomUUID,
14
- readRecord: readPrivateSessionRecord,
15
- finalize: finalizeRunRequest,
16
- launch: defaultCliLaunchDependencies,
17
- };
18
- /** Resolve stored identity first, then create one lazy facade for the effective adapter. */
19
- export async function prepareCliSession(draft, dependencies = defaults) {
20
- const stored = draft.resume === undefined ? undefined : dependencies.readRecord(draft.stateDir, draft.resume);
21
- const request = await dependencies.finalize(draft, stored === undefined ? undefined : { agent: stored.adapter, cwd: stored.cwd });
22
- const id = draft.resume ?? dependencies.randomId();
23
- const launch = createCliLaunch(request, id, dependencies.launch);
24
- return { request, session: new HeadlessCliSession(request, id, launch) };
25
- }
26
- export class HeadlessCliSession extends SessionBase {
27
- agent;
28
- id;
29
- resumed;
30
- request;
31
- launchSession;
32
- setupPromise;
33
- pendingLaunch;
34
- constructor(request, id, launch) {
35
- super();
36
- this.request = request;
37
- this.agent = request.agent;
38
- this.id = id;
39
- this.resumed = request.resume !== undefined;
40
- this.launchSession = launch;
41
- }
42
- readBoundarySignal = defaultBoundarySignal;
43
- launch() {
44
- const pending = this.validatedLaunch();
45
- this.pendingLaunch = pending;
46
- void pending.then(() => this.clearPendingLaunch(), () => this.clearPendingLaunch());
47
- return pending;
48
- }
49
- async validatedLaunch() {
50
- const session = await this.launchSession();
51
- if (session.elwoodSessionId !== this.id) {
52
- await session.kill().catch(() => undefined);
53
- throw elwoodError("state_corrupt", "Started session identity did not match its owner.");
54
- }
55
- return session;
56
- }
57
- setup() {
58
- this.setupPromise ??= this.performSetup();
59
- return this.setupPromise;
60
- }
61
- on(event, handler) {
62
- return this.subscribe(event, handler, (session) => session.on(event, handler));
63
- }
64
- teardown() {
65
- const live = this.session;
66
- if (live !== undefined)
67
- return live.teardown();
68
- this.deferPendingCleanup("teardown");
69
- return Promise.resolve().then(() => {
70
- removeSessionIdentity(this.request.stateDir, this.id, this.agent);
71
- });
72
- }
73
- close() {
74
- const live = this.session;
75
- if (live !== undefined)
76
- return this.closeLiveSession(live);
77
- if (this.pendingLaunch !== undefined && this.preservedSessionId() === null) {
78
- return this.teardown();
79
- }
80
- this.deferPendingCleanup("close");
81
- return Promise.resolve();
82
- }
83
- preservedSessionId() {
84
- try {
85
- const record = readPrivateSessionRecord(this.request.stateDir, this.id);
86
- if (record.adapter !== this.agent || !record[record.adapter].resumeId)
87
- return null;
88
- return this.id;
89
- }
90
- catch {
91
- return null;
92
- }
93
- }
94
- async performSetup() {
95
- await this.start();
96
- if (this.resumed && this.request.model !== undefined)
97
- await this.setModel(this.request.model);
98
- if (!this.resumed && this.request.persona !== undefined) {
99
- await this.send(this.request.persona);
100
- }
101
- }
102
- clearPendingLaunch() {
103
- this.pendingLaunch = undefined;
104
- }
105
- deferPendingCleanup(action) {
106
- if (this.pendingLaunch === undefined)
107
- return;
108
- void this.start().then(async (live) => {
109
- await (action === "teardown" ? live.teardown() : this.closeLiveSession(live)).catch(() => undefined);
110
- }, () => {
111
- if (action === "teardown")
112
- this.removeIdentityAfterFailedLaunch();
113
- });
114
- }
115
- removeIdentityAfterFailedLaunch() {
116
- try {
117
- removeSessionIdentity(this.request.stateDir, this.id, this.agent);
118
- }
119
- catch {
120
- // The synchronous cleanup already reported its failure; this late retry is best-effort.
121
- }
122
- }
123
- }
124
- //# sourceMappingURL=session.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/cli/session.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- /**
2
- * Codex image attachment: Codex ingests an interactive image only from the OS
3
- * clipboard via Ctrl+V (it reads `public.tiff` off the macOS NSPasteboard), so
4
- * Elwood snapshots the clipboard TEXT once (only text is captured), then for each
5
- * image sets it + Ctrl+V + waits for the `[Image #N]` chip, then restores the text
6
- * snapshot. macOS-only, and
7
- * the whole transaction holds a process-wide clipboard lock so concurrent Codex
8
- * sessions cannot cross-attach. Implements PRD §5.3 (C-API-46).
9
- */
10
- import { type AttachTerminal, type BlockedGuard } from "../core/images/chip-wait.ts";
11
- /**
12
- * Attaches every image via the clipboard under a process-wide lock, restoring
13
- * the user's clipboard text afterward (best-effort). Rejects with
14
- * `unsupported_platform` on non-macOS BEFORE touching the clipboard, and with
15
- * `image_attach_failed`/`invalid_image` on a snapshot/set/confirm failure; the
16
- * caller then submits no text. The Ctrl+V is held while a blocking dialog is on
17
- * screen so it never confirms a dialog (C-API-37/46).
18
- */
19
- export declare function attachCodexImages(terminal: AttachTerminal, paths: readonly string[], signal: AbortSignal, blocked?: BlockedGuard, onRestoreFailed?: () => void): Promise<void>;
20
- //# sourceMappingURL=attach-images.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"attach-images.d.ts","sourceRoot":"","sources":["../../src/codex/attach-images.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,YAAY,EAMlB,MAAM,6BAA6B,CAAC;AAYrC;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,MAAM,EAAE,WAAW,EACnB,OAAO,CAAC,EAAE,YAAY,EACtB,eAAe,CAAC,EAAE,MAAM,IAAI,GAC3B,OAAO,CAAC,IAAI,CAAC,CAIf"}
@@ -1,66 +0,0 @@
1
- /**
2
- * Codex image attachment: Codex ingests an interactive image only from the OS
3
- * clipboard via Ctrl+V (it reads `public.tiff` off the macOS NSPasteboard), so
4
- * Elwood snapshots the clipboard TEXT once (only text is captured), then for each
5
- * image sets it + Ctrl+V + waits for the `[Image #N]` chip, then restores the text
6
- * snapshot. macOS-only, and
7
- * the whole transaction holds a process-wide clipboard lock so concurrent Codex
8
- * sessions cannot cross-attach. Implements PRD §5.3 (C-API-46).
9
- */
10
- import { elwoodError } from "../core/errors.js";
11
- import { clearComposer, imageChipCount, sendWhenUnblocked, waitForImageChip, } from "../core/images/chip-wait.js";
12
- import { clipboardImageSupported, restoreClipboardText, setClipboardImage, snapshotClipboardText, } from "./clipboard.js";
13
- import { withClipboardLock } from "./clipboard-lock.js";
14
- const CTRL_V = "\u0016"; // Ctrl+V triggers Codex clipboard-image paste
15
- const chipWait = { settleMs: 200, timeoutMs: 10_000, pollMs: 100 };
16
- /**
17
- * Attaches every image via the clipboard under a process-wide lock, restoring
18
- * the user's clipboard text afterward (best-effort). Rejects with
19
- * `unsupported_platform` on non-macOS BEFORE touching the clipboard, and with
20
- * `image_attach_failed`/`invalid_image` on a snapshot/set/confirm failure; the
21
- * caller then submits no text. The Ctrl+V is held while a blocking dialog is on
22
- * screen so it never confirms a dialog (C-API-37/46).
23
- */
24
- export async function attachCodexImages(terminal, paths, signal, blocked, onRestoreFailed) {
25
- if (!clipboardImageSupported())
26
- throw elwoodError("unsupported_platform", "Codex image attachment requires macOS.");
27
- await withClipboardLock(() => attachUnderLock(terminal, paths, signal, blocked, onRestoreFailed));
28
- }
29
- async function attachUnderLock(terminal, paths, signal, blocked, onRestoreFailed) {
30
- // A waiter that acquired the lock only after its session closed must touch
31
- // nothing — check abort FIRST, before snapshotting or mutating the clipboard.
32
- if (signal.aborted)
33
- throw elwoodError("image_attach_failed", "Image attach aborted.");
34
- // Snapshot BEFORE mutating; a snapshot failure rejects here so we never
35
- // overwrite then "restore" an empty string over the user's clipboard.
36
- const priorClipboard = await snapshotClipboardText();
37
- let staged = false;
38
- try {
39
- for (const path of paths) {
40
- const before = imageChipCount(terminal.snapshot().text);
41
- await setClipboardImage(path);
42
- // sendWhenUnblocked rejects if the signal is already aborted, so a mid-attach
43
- // close is caught here before the Ctrl+V reaches the PTY (C-API-46).
44
- await sendWhenUnblocked(terminal, CTRL_V, blocked, signal);
45
- staged = true;
46
- await waitForImageChip(terminal, before, signal, chipWait);
47
- }
48
- }
49
- catch (error) {
50
- if (staged)
51
- await clearComposer(terminal); // discard staged chips on failure (C-API-44)
52
- throw error;
53
- }
54
- finally {
55
- // Best-effort and fully isolated: neither the restore nor its warning callback
56
- // may reject or mask the primary attach result/error (C-API-46).
57
- try {
58
- if (!(await restoreClipboardText(priorClipboard)))
59
- onRestoreFailed?.();
60
- }
61
- catch {
62
- // A throwing warning sink must not turn a successful attach into a failure.
63
- }
64
- }
65
- }
66
- //# sourceMappingURL=attach-images.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"attach-images.js","sourceRoot":"","sources":["../../src/codex/attach-images.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAIL,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,uBAAuB,EACvB,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,8CAA8C;AACvE,MAAM,QAAQ,GAAoB,EAAE,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAEpF;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAwB,EACxB,KAAwB,EACxB,MAAmB,EACnB,OAAsB,EACtB,eAA4B;IAE5B,IAAI,CAAC,uBAAuB,EAAE;QAC5B,MAAM,WAAW,CAAC,sBAAsB,EAAE,wCAAwC,CAAC,CAAC;IACtF,MAAM,iBAAiB,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC;AACpG,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,QAAwB,EACxB,KAAwB,EACxB,MAAmB,EACnB,OAAiC,EACjC,eAAyC;IAEzC,2EAA2E;IAC3E,8EAA8E;IAC9E,IAAI,MAAM,CAAC,OAAO;QAAE,MAAM,WAAW,CAAC,qBAAqB,EAAE,uBAAuB,CAAC,CAAC;IACtF,wEAAwE;IACxE,sEAAsE;IACtE,MAAM,cAAc,GAAG,MAAM,qBAAqB,EAAE,CAAC;IACrD,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,CAAC;QACH,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,MAAM,GAAG,cAAc,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC,CAAC;YACxD,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;YAC9B,8EAA8E;YAC9E,qEAAqE;YACrE,MAAM,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAC3D,MAAM,GAAG,IAAI,CAAC;YACd,MAAM,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,MAAM;YAAE,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,6CAA6C;QACxF,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,+EAA+E;QAC/E,iEAAiE;QACjE,IAAI,CAAC;YACH,IAAI,CAAC,CAAC,MAAM,oBAAoB,CAAC,cAAc,CAAC,CAAC;gBAAE,eAAe,EAAE,EAAE,CAAC;QACzE,CAAC;QAAC,MAAM,CAAC;YACP,4EAA4E;QAC9E,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,15 +0,0 @@
1
- /**
2
- * Process-wide async mutex for the macOS clipboard. The clipboard is a single
3
- * global resource, but Elwood sessions serialize only per-session, so two
4
- * concurrent Codex image attaches could interleave their snapshot/set/paste/
5
- * restore transactions and cross-attach each other's images. This serializes the
6
- * whole transaction across all sessions in the process. Implements PRD §5.3
7
- * (C-API-46).
8
- */
9
- /**
10
- * Runs `task` while holding the clipboard lock: each caller waits for the prior
11
- * holder to finish before starting, and the lock is released when `task`
12
- * settles (success or failure), so a failing attach never wedges the queue.
13
- */
14
- export declare const withClipboardLock: import("../core/async-mutex.ts").AsyncMutex;
15
- //# sourceMappingURL=clipboard-lock.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clipboard-lock.d.ts","sourceRoot":"","sources":["../../src/codex/clipboard-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,6CAAqB,CAAC"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Process-wide async mutex for the macOS clipboard. The clipboard is a single
3
- * global resource, but Elwood sessions serialize only per-session, so two
4
- * concurrent Codex image attaches could interleave their snapshot/set/paste/
5
- * restore transactions and cross-attach each other's images. This serializes the
6
- * whole transaction across all sessions in the process. Implements PRD §5.3
7
- * (C-API-46).
8
- */
9
- import { createAsyncMutex } from "../core/async-mutex.js";
10
- /**
11
- * Runs `task` while holding the clipboard lock: each caller waits for the prior
12
- * holder to finish before starting, and the lock is released when `task`
13
- * settles (success or failure), so a failing attach never wedges the queue.
14
- */
15
- export const withClipboardLock = createAsyncMutex();
16
- //# sourceMappingURL=clipboard-lock.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clipboard-lock.js","sourceRoot":"","sources":["../../src/codex/clipboard-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,gBAAgB,EAAE,CAAC"}
@@ -1,32 +0,0 @@
1
- /**
2
- * macOS clipboard save / set-image / restore for Codex image attachment. Codex
3
- * ingests an interactive image only from the OS clipboard (it reads `public.tiff`
4
- * off `NSPasteboard`), so Elwood writes the image there, triggers a paste, then
5
- * restores the user's prior clipboard TEXT (only text is snapshotted). Async (never blocks the event loop) and
6
- * Codex-local, since this is Codex/macOS-specific mechanics. Implements PRD §5.3
7
- * (C-API-46).
8
- */
9
- /** Canonical, content-free copy for the clipboard-restore-failed warning (C-API-46). */
10
- export declare const CLIPBOARD_RESTORE_FAILED_MESSAGE = "Elwood could not restore the clipboard after attaching an image.";
11
- /** True only on macOS, where the NSPasteboard-backed attach path is available. */
12
- export declare function clipboardImageSupported(): boolean;
13
- /**
14
- * The current clipboard text. Rejects with `image_attach_failed` when `pbpaste`
15
- * fails, so the caller can abort BEFORE mutating the clipboard rather than later
16
- * "restoring" an empty string over the user's real clipboard (C-API-46).
17
- */
18
- export declare function snapshotClipboardText(): Promise<string>;
19
- /**
20
- * Restores clipboard text captured by `snapshotClipboardText` (best-effort).
21
- * Returns whether the restore succeeded, so the caller can surface a content-free
22
- * warning if the user's prior clipboard may have been lost (C-API-46).
23
- */
24
- export declare function restoreClipboardText(text: string): Promise<boolean>;
25
- /**
26
- * Writes the image file at `path` onto the macOS clipboard as a native image.
27
- * A file the decoder cannot load is a bad INPUT → `invalid_image`; a pasteboard
28
- * write failure, process failure, or timeout is an OS/attach failure →
29
- * `image_attach_failed`. Either way the caller aborts before pasting (C-API-46).
30
- */
31
- export declare function setClipboardImage(path: string): Promise<void>;
32
- //# sourceMappingURL=clipboard.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../src/codex/clipboard.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAyBH,wFAAwF;AACxF,eAAO,MAAM,gCAAgC,qEACuB,CAAC;AAErE,kFAAkF;AAClF,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,CAS7D;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASzE;AAED;;;;;GAKG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASnE"}
@@ -1,92 +0,0 @@
1
- /**
2
- * macOS clipboard save / set-image / restore for Codex image attachment. Codex
3
- * ingests an interactive image only from the OS clipboard (it reads `public.tiff`
4
- * off `NSPasteboard`), so Elwood writes the image there, triggers a paste, then
5
- * restores the user's prior clipboard TEXT (only text is snapshotted). Async (never blocks the event loop) and
6
- * Codex-local, since this is Codex/macOS-specific mechanics. Implements PRD §5.3
7
- * (C-API-46).
8
- */
9
- import { execFile } from "node:child_process";
10
- import { promisify } from "node:util";
11
- import { elwoodError } from "../core/errors.js";
12
- import { currentPlatform } from "../runtime/seams.js";
13
- const run = promisify(execFile);
14
- const OSASCRIPT = "/usr/bin/osascript";
15
- const PBPASTE = "/usr/bin/pbpaste";
16
- const PBCOPY = "/usr/bin/pbcopy";
17
- // JXA hosting AppKit: load the file as an NSImage and lay it on the pasteboard
18
- // with writeObjects, which writes the canonical `public.tiff` representation the
19
- // `arboard` reader Codex uses expects. A bare JS array becomes an NSDictionary
20
- // under the bridge and is rejected, so the image is wrapped in a real NSArray.
21
- const SET_IMAGE_JXA = 'function run(argv){ObjC.import("AppKit");' +
22
- "var img=$.NSImage.alloc.initWithContentsOfFile(argv[0]);" +
23
- 'if(!img||img.isNil())throw new Error("image load failed");' +
24
- "var pb=$.NSPasteboard.generalPasteboard;pb.clearContents;" +
25
- "if(!pb.writeObjects($.NSArray.arrayWithObject(img)))" +
26
- 'throw new Error("clipboard write failed");return "ok";}';
27
- /** Canonical, content-free copy for the clipboard-restore-failed warning (C-API-46). */
28
- export const CLIPBOARD_RESTORE_FAILED_MESSAGE = "Elwood could not restore the clipboard after attaching an image.";
29
- /** True only on macOS, where the NSPasteboard-backed attach path is available. */
30
- export function clipboardImageSupported() {
31
- return currentPlatform() === "darwin";
32
- }
33
- /**
34
- * The current clipboard text. Rejects with `image_attach_failed` when `pbpaste`
35
- * fails, so the caller can abort BEFORE mutating the clipboard rather than later
36
- * "restoring" an empty string over the user's real clipboard (C-API-46).
37
- */
38
- export async function snapshotClipboardText() {
39
- try {
40
- const { stdout } = await run(PBPASTE, [], { timeout: 5_000, encoding: "utf8" });
41
- return stdout;
42
- }
43
- catch (error) {
44
- throw elwoodError("image_attach_failed", "Could not read the clipboard.", {
45
- cause: error instanceof Error ? error.message : String(error),
46
- });
47
- }
48
- }
49
- /**
50
- * Restores clipboard text captured by `snapshotClipboardText` (best-effort).
51
- * Returns whether the restore succeeded, so the caller can surface a content-free
52
- * warning if the user's prior clipboard may have been lost (C-API-46).
53
- */
54
- export async function restoreClipboardText(text) {
55
- try {
56
- const child = run(PBCOPY, [], { timeout: 5_000 });
57
- child.child.stdin?.end(text); // inside try so a synchronous spawn/stdin failure can't escape
58
- await child;
59
- return true;
60
- }
61
- catch {
62
- return false;
63
- }
64
- }
65
- /**
66
- * Writes the image file at `path` onto the macOS clipboard as a native image.
67
- * A file the decoder cannot load is a bad INPUT → `invalid_image`; a pasteboard
68
- * write failure, process failure, or timeout is an OS/attach failure →
69
- * `image_attach_failed`. Either way the caller aborts before pasting (C-API-46).
70
- */
71
- export async function setClipboardImage(path) {
72
- try {
73
- await run(OSASCRIPT, ["-l", "JavaScript", "-e", SET_IMAGE_JXA, path], { timeout: 10_000 });
74
- }
75
- catch (error) {
76
- const reason = clipboardErrorReason(error);
77
- // The JXA throws "image load failed" only when NSImage cannot decode the file.
78
- const code = /image load failed/i.test(reason) ? "invalid_image" : "image_attach_failed";
79
- throw elwoodError(code, `Could not place image on clipboard: ${reason}`, { path });
80
- }
81
- }
82
- function clipboardErrorReason(error) {
83
- if (error && typeof error === "object") {
84
- const { stderr, message } = error;
85
- if (typeof stderr === "string" && stderr.trim())
86
- return stderr.trim();
87
- if (typeof message === "string" && message.trim())
88
- return message.trim();
89
- }
90
- return "clipboard image write failed";
91
- }
92
- //# sourceMappingURL=clipboard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../src/codex/clipboard.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- /**
2
- * Process-wide async mutex for the Codex `config.toml`. The file is a single
3
- * process-global resource, but Elwood sessions serialize only per-session, so
4
- * two concurrent `setModel` switches could interleave their snapshot / picker /
5
- * compare-and-swap restore transactions on the shared file and leave the wrong
6
- * model persisted as the user's default. This serializes the whole transaction
7
- * across all sessions in the process. Mirrors clipboard-lock.ts and implements
8
- * PRD §5.3 setModel restore and C-CODEX-14.
9
- *
10
- * SCOPE: this lock is PROCESS-LOCAL. Two separate Elwood processes sharing one
11
- * `config.toml` can still interleave their transactions — an accepted current
12
- * limitation (the compare-and-swap still refuses to clobber an unrelated edit).
13
- * Closing it needs an inter-process lock on the resolved path and is separate work.
14
- */
15
- /**
16
- * Runs `task` while holding the config lock: each caller waits for the prior
17
- * holder to finish before starting, and the lock is released when `task`
18
- * settles (success or failure), so a failing switch never wedges the queue.
19
- */
20
- export declare const withCodexConfigLock: import("../core/async-mutex.ts").AsyncMutex;
21
- //# sourceMappingURL=config-lock.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-lock.d.ts","sourceRoot":"","sources":["../../src/codex/config-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,6CAAqB,CAAC"}
@@ -1,22 +0,0 @@
1
- /**
2
- * Process-wide async mutex for the Codex `config.toml`. The file is a single
3
- * process-global resource, but Elwood sessions serialize only per-session, so
4
- * two concurrent `setModel` switches could interleave their snapshot / picker /
5
- * compare-and-swap restore transactions on the shared file and leave the wrong
6
- * model persisted as the user's default. This serializes the whole transaction
7
- * across all sessions in the process. Mirrors clipboard-lock.ts and implements
8
- * PRD §5.3 setModel restore and C-CODEX-14.
9
- *
10
- * SCOPE: this lock is PROCESS-LOCAL. Two separate Elwood processes sharing one
11
- * `config.toml` can still interleave their transactions — an accepted current
12
- * limitation (the compare-and-swap still refuses to clobber an unrelated edit).
13
- * Closing it needs an inter-process lock on the resolved path and is separate work.
14
- */
15
- import { createAsyncMutex } from "../core/async-mutex.js";
16
- /**
17
- * Runs `task` while holding the config lock: each caller waits for the prior
18
- * holder to finish before starting, and the lock is released when `task`
19
- * settles (success or failure), so a failing switch never wedges the queue.
20
- */
21
- export const withCodexConfigLock = createAsyncMutex();
22
- //# sourceMappingURL=config-lock.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-lock.js","sourceRoot":"","sources":["../../src/codex/config-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,EAAE,CAAC"}
@@ -1,33 +0,0 @@
1
- /**
2
- * Compensates the Codex CLI persisting picker selections into config.toml.
3
- * Implements PRD §5.3 setModel restore and C-CODEX-14: a compare-and-swap restore
4
- * of the user's global config that never clobbers concurrent edits, written
5
- * atomically (sibling temp file + rename) so a crash mid-restore can never leave
6
- * the user's config truncated.
7
- */
8
- /**
9
- * `restored`: the snapshot was written back. `unchanged`: the picker wrote nothing.
10
- * `skipped`: the file changed in ways other than the root model keys (or vanished),
11
- * so it was left alone. `no_snapshot`: no config.toml existed before the switch and
12
- * the picker created one — Elwood has nothing to restore and leaves the new file.
13
- */
14
- type ConfigRestoreOutcome = "restored" | "skipped" | "unchanged" | "no_snapshot";
15
- export declare function codexConfigPath(): string;
16
- /**
17
- * Builds the CONTENT-FREE `raw` for a swallowed restore-failure warning: the config
18
- * path plus a bounded errno code only — never the error message, which could carry
19
- * credentials or conversation data if the failure came from a public listener.
20
- */
21
- export declare function restoreFailureRaw(path: string, error: unknown): string;
22
- export declare function snapshotCodexConfig(): string | undefined;
23
- /**
24
- * Restores the snapshot if and only if the file now differs solely in the
25
- * root-level model keys the picker writes. Anything else — a concurrent user
26
- * edit, an unexpected rewrite — skips the restore so user-owned configuration is
27
- * never clobbered. With no snapshot (no config.toml before the switch) a file the
28
- * picker created is reported as `no_snapshot` rather than misreported as a
29
- * concurrent edit.
30
- */
31
- export declare function restoreCodexConfig(snapshot: string | undefined): ConfigRestoreOutcome;
32
- export {};
33
- //# sourceMappingURL=config-restore.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config-restore.d.ts","sourceRoot":"","sources":["../../src/codex/config-restore.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgBH;;;;;GAKG;AACH,KAAK,oBAAoB,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,GAAG,aAAa,CAAC;AAEjF,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,CAEtE;AAED,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAGxD;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,oBAAoB,CAUrF"}