@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,60 +0,0 @@
1
- /**
2
- * Explicit shutdown/teardown orchestration for AgentSessionBase, extracted to keep
3
- * the base within the file-size cap. Implements PRD §5.3/§9.4 (C-LIFE-10): every
4
- * path ATTEMPTS/RETRIES the leader's process-group reap and propagates a reap failure
5
- * as a typed error (never swallows it), while an already-terminal session is never
6
- * re-signaled — node-pty does not replay the exit and the pid may be recycled.
7
- */
8
- import type { ElwoodSessionStatus } from "../core/types.ts";
9
- import type { PtyProcess } from "../pty/types.ts";
10
- import type { SessionReapPolicy } from "./session-reap.ts";
11
- import type { ShutdownContext, ShutdownCoordinator } from "./shutdown-coordinator.ts";
12
- import type { StatusEvidenceKind } from "./status-evidence.ts";
13
- /** Evidence kinds an explicit shutdown submits once it drives the PTY to exit. */
14
- export type ShutdownEvidence = "stop_completed" | "kill_completed" | "teardown_completed";
15
- /** The reap surface shutdown drives: the typed-throw reap plus the retryable one-shot. */
16
- export type ShutdownReapPolicy = Pick<SessionReapPolicy, "orThrow"> & {
17
- readonly reaper: Pick<SessionReapPolicy["reaper"], "reap">;
18
- };
19
- /** The session surface the shutdown/teardown orchestration drives. */
20
- export type ShutdownHost = {
21
- readonly pty: PtyProcess;
22
- readonly stateDir: string;
23
- readonly elwoodSessionId: string;
24
- /** The session's stable socket home; teardown removes it whole (§8.1). */
25
- readonly socketHome: string;
26
- readonly reapPolicy: ShutdownReapPolicy;
27
- readonly status: () => ElwoodSessionStatus;
28
- readonly claimShutdown: (evidence: ShutdownEvidence) => void;
29
- readonly pauseLoops: () => void;
30
- readonly clearLoops: (reason: "kill" | "teardown") => Promise<void>;
31
- readonly cleanupRuntime: () => Promise<void>;
32
- readonly submitEvidence: (kind: StatusEvidenceKind) => void;
33
- };
34
- /** The three public shutdown verbs bound to a coordinator and lazy host. */
35
- type ManagedShutdown = {
36
- readonly stop: () => Promise<void>;
37
- readonly kill: () => Promise<void>;
38
- readonly teardown: () => Promise<void>;
39
- };
40
- /** Binds `stop`/`kill`/`teardown` to one coordinator + lazily-built host (C-LIFE-10). */
41
- export declare function managedShutdown(coordinator: ShutdownCoordinator, host: () => ShutdownHost): ManagedShutdown;
42
- /**
43
- * Graceful stop / force kill. Does NOT re-signal when the PTY was already signaled
44
- * (by a prior shutdown, even one that threw before going terminal) or the session is
45
- * already terminal — node-pty won't replay exit (the wait would time out) and the pid
46
- * may be recycled. In that case it performs a one-shot survivor reap that rejects with
47
- * a typed error on failure and leaves the reap retryable; a first, live shutdown marks
48
- * signal ownership, terminates the PTY (which reaps on every path), and records
49
- * shutdown evidence (C-LIFE-10).
50
- */
51
- export declare function runShutdown(host: ShutdownHost, signal: "SIGTERM" | "SIGKILL", evidence: ShutdownEvidence, ctx: ShutdownContext): Promise<void>;
52
- /**
53
- * Teardown: terminate a still-live PTY (unless it was already signaled), reap
54
- * (retrying a prior failed reap), stop the runtime, record teardown evidence, and
55
- * remove owned session files. Each step runs even if an earlier one rejected, so a
56
- * leaked group is always reaped; a re-signal is refused once signal ownership is held.
57
- */
58
- export declare function runTeardown(host: ShutdownHost, ctx: ShutdownContext): Promise<void>;
59
- export {};
60
- //# sourceMappingURL=session-shutdown.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-shutdown.d.ts","sourceRoot":"","sources":["../../src/runtime/session-shutdown.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACtF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAI/D,kFAAkF;AAClF,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,oBAAoB,CAAC;AAE1F,0FAA0F;AAC1F,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,GAAG;IACpE,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC;CAC5D,CAAC;AAEF,sEAAsE;AACtE,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,0EAA0E;IAC1E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,mBAAmB,CAAC;IAC3C,QAAQ,CAAC,aAAa,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC7D,QAAQ,CAAC,UAAU,EAAE,MAAM,IAAI,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,QAAQ,CAAC,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,QAAQ,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC7D,CAAC;AAEF,4EAA4E;AAC5E,KAAK,eAAe,GAAG;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACxC,CAAC;AAEF,yFAAyF;AACzF,wBAAgB,eAAe,CAC7B,WAAW,EAAE,mBAAmB,EAChC,IAAI,EAAE,MAAM,YAAY,GACvB,eAAe,CAMjB;AAuCD;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,YAAY,EAClB,MAAM,EAAE,SAAS,GAAG,SAAS,EAC7B,QAAQ,EAAE,gBAAgB,EAC1B,GAAG,EAAE,eAAe,GACnB,OAAO,CAAC,IAAI,CAAC,CAWf;AAkBD;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBzF"}
@@ -1,140 +0,0 @@
1
- /**
2
- * Explicit shutdown/teardown orchestration for AgentSessionBase, extracted to keep
3
- * the base within the file-size cap. Implements PRD §5.3/§9.4 (C-LIFE-10): every
4
- * path ATTEMPTS/RETRIES the leader's process-group reap and propagates a reap failure
5
- * as a typed error (never swallows it), while an already-terminal session is never
6
- * re-signaled — node-pty does not replay the exit and the pid may be recycled.
7
- */
8
- import { elwoodError } from "../core/errors.js";
9
- import { terminalStatuses } from "../core/status-categories.js";
10
- import { removeSessionFiles } from "../state/store.js";
11
- import { runTeardownSteps } from "./teardown.js";
12
- import { terminatePty } from "./terminate.js";
13
- /** Binds `stop`/`kill`/`teardown` to one coordinator + lazily-built host (C-LIFE-10). */
14
- export function managedShutdown(coordinator, host) {
15
- return {
16
- stop: () => runManagedShutdown(coordinator, "stop", host),
17
- kill: () => runManagedShutdown(coordinator, "kill", host),
18
- teardown: () => runManagedShutdown(coordinator, "teardown", host),
19
- };
20
- }
21
- // Each public verb's orchestration. The host is the ONE owner of loop pausing: `stop`
22
- // pauses timers and keeps definitions for resume; `kill`/`teardown` clear them (§8.4).
23
- const shutdownVerbs = {
24
- stop: (host, ctx) => {
25
- host.pauseLoops();
26
- return runShutdown(host, "SIGTERM", "stop_completed", ctx);
27
- },
28
- kill: (host, ctx) => runKillShutdown(host, () => runShutdown(host, "SIGKILL", "kill_completed", ctx)),
29
- teardown: (host, ctx) => runTeardown(host, ctx),
30
- };
31
- /**
32
- * Route a public `stop`/`kill`/`teardown` through the session's coordinator so the
33
- * PTY is signaled at most once and overlapping callers join the in-flight shutdown
34
- * (C-LIFE-10). The host is built lazily inside the coordinated operation, which is
35
- * told whether the PTY was `alreadySignaled` so a retry never re-signals it.
36
- */
37
- function runManagedShutdown(coordinator, verb, host) {
38
- return coordinator.run(verb, (ctx) => shutdownVerbs[verb](host(), ctx));
39
- }
40
- /**
41
- * True when the PTY must NOT be signaled: either a prior shutdown already signaled it
42
- * (a predecessor that signaled+reaped but threw before submitting terminal status must
43
- * not trigger a re-signal of a possibly-recycled PID) OR the session already reached a
44
- * terminal status. Signal ownership is tracked INDEPENDENTLY of lifecycle status so a
45
- * non-terminal-but-already-signaled state still refuses a second signal (C-LIFE-10).
46
- */
47
- function mustNotSignal(host, ctx) {
48
- return ctx.alreadySignaled || terminalStatuses.has(host.status());
49
- }
50
- /**
51
- * Graceful stop / force kill. Does NOT re-signal when the PTY was already signaled
52
- * (by a prior shutdown, even one that threw before going terminal) or the session is
53
- * already terminal — node-pty won't replay exit (the wait would time out) and the pid
54
- * may be recycled. In that case it performs a one-shot survivor reap that rejects with
55
- * a typed error on failure and leaves the reap retryable; a first, live shutdown marks
56
- * signal ownership, terminates the PTY (which reaps on every path), and records
57
- * shutdown evidence (C-LIFE-10).
58
- */
59
- export async function runShutdown(host, signal, evidence, ctx) {
60
- host.claimShutdown(evidence); // Claim the exit before signaling.
61
- if (mustNotSignal(host, ctx)) {
62
- host.reapPolicy.orThrow(); // Typed rejection on failure; never swallows.
63
- await cleanupOrThrowTermination(host);
64
- return; // Already signaled / terminal: no new signal, no evidence to submit.
65
- }
66
- ctx.markSignaled();
67
- await terminatePty(host.pty, signal, host.reapPolicy.reaper);
68
- await cleanupOrThrowTermination(host);
69
- host.submitEvidence(evidence);
70
- }
71
- /**
72
- * Runs runtime cleanup, folding its raw aggregate failure into the stable public
73
- * `termination_failed` error. `runCleanupSteps` rejects with a bare `Error` on the
74
- * assumption that its caller wraps it; `stop()`/`kill()` are that caller, so without
75
- * this an untyped Error would escape the public shutdown boundary (PRD §10).
76
- */
77
- async function cleanupOrThrowTermination(host) {
78
- try {
79
- await host.cleanupRuntime();
80
- }
81
- catch (error) {
82
- throw elwoodError("termination_failed", "Could not clean up the Elwood runtime.", {
83
- cause: error instanceof Error ? error.message : String(error),
84
- });
85
- }
86
- }
87
- /**
88
- * Teardown: terminate a still-live PTY (unless it was already signaled), reap
89
- * (retrying a prior failed reap), stop the runtime, record teardown evidence, and
90
- * remove owned session files. Each step runs even if an earlier one rejected, so a
91
- * leaked group is always reaped; a re-signal is refused once signal ownership is held.
92
- */
93
- export async function runTeardown(host, ctx) {
94
- host.claimShutdown("teardown_completed");
95
- const shouldSignal = () => !mustNotSignal(host, ctx);
96
- await runPermanentShutdown(host, "teardown", () => runTeardownSteps([
97
- () => {
98
- if (!shouldSignal())
99
- return undefined;
100
- ctx.markSignaled();
101
- return terminatePty(host.pty, "SIGKILL", host.reapPolicy.reaper);
102
- },
103
- () => host.reapPolicy.reaper.reap(), // No-op once latched; retries a failed reap.
104
- () => host.cleanupRuntime(),
105
- () => host.submitEvidence("teardown_completed"),
106
- () => removeSessionFiles({
107
- stateDir: host.stateDir,
108
- elwoodSessionId: host.elwoodSessionId,
109
- socketHome: host.socketHome,
110
- }),
111
- ]));
112
- }
113
- /** Clear durable loops first, but always finish process/file cleanup before rejecting. */
114
- async function runPermanentShutdown(host, reason, cleanup) {
115
- let loopFailure;
116
- let cleanupFailure;
117
- try {
118
- await host.clearLoops(reason);
119
- }
120
- catch (error) {
121
- loopFailure = error;
122
- }
123
- try {
124
- await cleanup();
125
- }
126
- catch (error) {
127
- cleanupFailure = error;
128
- }
129
- if (loopFailure !== undefined)
130
- throw loopFailure;
131
- if (cleanupFailure !== undefined)
132
- throw cleanupFailure;
133
- }
134
- /** Kill stops live timers first, but keeps durable definitions until termination succeeds. */
135
- async function runKillShutdown(host, cleanup) {
136
- host.pauseLoops();
137
- await cleanup();
138
- await host.clearLoops("kill");
139
- }
140
- //# sourceMappingURL=session-shutdown.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-shutdown.js","sourceRoot":"","sources":["../../src/runtime/session-shutdown.ts"],"names":[],"mappings":"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"}
@@ -1,38 +0,0 @@
1
- /**
2
- * Connects lifecycle status transitions to the control queue, loops, event
3
- * delivery, and cleanup (PRD §5.3/§5.9, C-API-42). Status and activity events are
4
- * emitted here; a throwing status listener PROPAGATES by design — the
5
- * `initial_ready` transition relies on it to trigger its release-and-warn fallback.
6
- * The engine commits its live `current` status BEFORE emitting, so a throw here can
7
- * never leave the emitted event disagreeing with that live status (§8.2).
8
- */
9
- import { type ElwoodActivityEvent, type ElwoodAgentKind } from "../core/activity.ts";
10
- import type { CompactEmitter } from "../core/compact.ts";
11
- import type { ControlQueue } from "../core/control-queue.ts";
12
- import type { ElwoodSessionStatus, Unsubscribe } from "../core/types.ts";
13
- import type { LoopEventEmitter, SessionLoops } from "./session-loops.ts";
14
- import { SessionStatusEngine } from "./status-evidence.ts";
15
- type StatusEvent = {
16
- readonly elwoodSessionId: string;
17
- readonly status: ElwoodSessionStatus;
18
- };
19
- /** The emitter surface a session's status, compact, loop, and activity wiring needs. */
20
- export type SessionStatusEmitter = CompactEmitter & LoopEventEmitter & {
21
- emit(event: "status", payload: StatusEvent): void;
22
- emit(event: "activity", payload: ElwoodActivityEvent): void;
23
- on(event: "activity", handler: (event: ElwoodActivityEvent) => void): Unsubscribe;
24
- };
25
- type StatusWiringInput = {
26
- readonly agent: ElwoodAgentKind;
27
- readonly elwoodSessionId: string;
28
- readonly emitter: SessionStatusEmitter;
29
- readonly queue: ControlQueue;
30
- readonly loops: SessionLoops;
31
- readonly markReady: () => void;
32
- readonly cleanup: () => void;
33
- };
34
- export declare function createSessionStatusEngine(input: StatusWiringInput): SessionStatusEngine;
35
- /** Deliver the status event and its derived activity event (a listener throw propagates). */
36
- export declare function emitStatusEvents(emitter: SessionStatusEmitter, agent: ElwoodAgentKind, id: string, status: ElwoodSessionStatus): void;
37
- export {};
38
- //# sourceMappingURL=session-status-wiring.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-status-wiring.d.ts","sourceRoot":"","sources":["../../src/runtime/session-status-wiring.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,KAAK,WAAW,GAAG;IAAE,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAE9F,wFAAwF;AACxF,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAC/C,gBAAgB,GAAG;IACjB,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAClD,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC5D,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,mBAAmB,KAAK,IAAI,GAAG,WAAW,CAAC;CACnF,CAAC;AAEJ,KAAK,iBAAiB,GAAG;IACvB,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,iBAAiB,GAAG,mBAAmB,CAyBvF;AAED,6FAA6F;AAC7F,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,oBAAoB,EAC7B,KAAK,EAAE,eAAe,EACtB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,mBAAmB,GAC1B,IAAI,CAGN"}
@@ -1,41 +0,0 @@
1
- /**
2
- * Connects lifecycle status transitions to the control queue, loops, event
3
- * delivery, and cleanup (PRD §5.3/§5.9, C-API-42). Status and activity events are
4
- * emitted here; a throwing status listener PROPAGATES by design — the
5
- * `initial_ready` transition relies on it to trigger its release-and-warn fallback.
6
- * The engine commits its live `current` status BEFORE emitting, so a throw here can
7
- * never leave the emitted event disagreeing with that live status (§8.2).
8
- */
9
- import { activityFromStatus, } from "../core/activity.js";
10
- import { SessionStatusEngine } from "./status-evidence.js";
11
- export function createSessionStatusEngine(input) {
12
- // Both a turn in progress and a blocking dialog suspend delivery the same way:
13
- // the queue stops draining and due loops wait (§5.9: "a due loop waits while the
14
- // session is running, blocked, or otherwise unable to accept a message"). Neither
15
- // implies a NEW turn — that is `turnStarted`, driven by the queue's own submission.
16
- const suspend = () => {
17
- input.loops.running();
18
- input.queue.suspendReadiness();
19
- };
20
- return new SessionStatusEngine({
21
- onReady: input.markReady,
22
- emitStatus: (status) => emitStatusEvents(input.emitter, input.agent, input.elwoodSessionId, status),
23
- queueRunning: suspend,
24
- queueReady: () => {
25
- input.loops.ready();
26
- input.queue.markReady();
27
- },
28
- queueBlocked: suspend,
29
- queueClose: () => {
30
- input.loops.pause();
31
- input.queue.close();
32
- },
33
- cleanup: input.cleanup,
34
- });
35
- }
36
- /** Deliver the status event and its derived activity event (a listener throw propagates). */
37
- export function emitStatusEvents(emitter, agent, id, status) {
38
- emitter.emit("status", { elwoodSessionId: id, status });
39
- emitter.emit("activity", activityFromStatus(agent, id, status));
40
- }
41
- //# sourceMappingURL=session-status-wiring.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-status-wiring.js","sourceRoot":"","sources":["../../src/runtime/session-status-wiring.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,kBAAkB,GAGnB,MAAM,qBAAqB,CAAC;AAK7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAsB3D,MAAM,UAAU,yBAAyB,CAAC,KAAwB;IAChE,+EAA+E;IAC/E,iFAAiF;IACjF,kFAAkF;IAClF,oFAAoF;IACpF,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACtB,KAAK,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;IACjC,CAAC,CAAC;IACF,OAAO,IAAI,mBAAmB,CAAC;QAC7B,OAAO,EAAE,KAAK,CAAC,SAAS;QACxB,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CACrB,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,eAAe,EAAE,MAAM,CAAC;QAC7E,YAAY,EAAE,OAAO;QACrB,UAAU,EAAE,GAAG,EAAE;YACf,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACpB,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QAC1B,CAAC;QACD,YAAY,EAAE,OAAO;QACrB,UAAU,EAAE,GAAG,EAAE;YACf,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACpB,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,CAAC;QACD,OAAO,EAAE,KAAK,CAAC,OAAO;KACvB,CAAC,CAAC;AACL,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,gBAAgB,CAC9B,OAA6B,EAC7B,KAAsB,EACtB,EAAU,EACV,MAA2B;IAE3B,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAClE,CAAC"}
@@ -1,7 +0,0 @@
1
- /**
2
- * Shared lifecycle status helpers for in-memory sessions.
3
- * Implements PRD §5 lifecycle guarantees.
4
- */
5
- import type { ElwoodSessionStatus } from "../core/types.ts";
6
- export declare function canTransition(current: ElwoodSessionStatus, next: ElwoodSessionStatus): boolean;
7
- //# sourceMappingURL=session-status.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-status.d.ts","sourceRoot":"","sources":["../../src/runtime/session-status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5D,wBAAgB,aAAa,CAAC,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAW9F"}
@@ -1,22 +0,0 @@
1
- /**
2
- * Shared lifecycle status helpers for in-memory sessions.
3
- * Implements PRD §5 lifecycle guarantees.
4
- */
5
- import { terminalStatuses } from "../core/status-categories.js";
6
- export function canTransition(current, next) {
7
- if (current === next)
8
- return false;
9
- if (current === "torn_down")
10
- return false;
11
- // `teardown` is the final cleanup and may supersede any earlier terminal
12
- // status (e.g. tearing down an already-exited session).
13
- if (next === "torn_down")
14
- return true;
15
- // Otherwise a terminated session keeps its first terminal status: no
16
- // terminal status transitions to another, so a racing `exited` cannot
17
- // override a controlled `stopped`/`killed`.
18
- if (terminalStatuses.has(current))
19
- return false;
20
- return true;
21
- }
22
- //# sourceMappingURL=session-status.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"session-status.js","sourceRoot":"","sources":["../../src/runtime/session-status.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAGhE,MAAM,UAAU,aAAa,CAAC,OAA4B,EAAE,IAAyB;IACnF,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,OAAO,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IAC1C,yEAAyE;IACzE,wDAAwD;IACxD,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACtC,qEAAqE;IACrE,sEAAsE;IACtE,4CAA4C;IAC5C,IAAI,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1,57 +0,0 @@
1
- /**
2
- * Serializes a session's overlapping stop/kill/teardown so the PTY is signaled at
3
- * most once (PRD §5.3/§9.4, C-LIFE-10). Concurrent shutdown calls can each snapshot
4
- * a non-terminal status and race into `terminatePty`; if the OS process exits before
5
- * node-pty's exit callback updates status, a later caller could signal the numeric
6
- * PID again AFTER the kernel recycled it, and duplicate waiters / first-wins evidence
7
- * could mislabel a force-killed exit as merely stopped.
8
- *
9
- * Two pieces of state, tracked SEPARATELY, make this safe and still retryable:
10
- * - `signaled` — sticky, set the first time any shutdown signals the PTY. It is
11
- * NEVER cleared. A later caller that finds it set does NOT re-signal solely
12
- * because the lifecycle status is still non-terminal (a predecessor that
13
- * signaled+reaped but threw before submitting terminal status must not cause a
14
- * re-signal of a possibly-recycled PID); it may still reap/cleanup/teardown.
15
- * - `inFlight` — the current in-flight run, CLEARED on settlement (with identity
16
- * protection). A failed `stop()`/`kill()`/`teardown()` therefore does not return
17
- * a permanently rejected promise to every later caller: once it settles, a later
18
- * call starts a fresh operation that RETRIES reap/cleanup/removal without
19
- * re-signaling the PTY (C-LIFE-10 retry posture).
20
- */
21
- /** Ordered so a later request can tell whether it escalates the in-flight one. */
22
- export type ShutdownLevel = "stop" | "kill" | "teardown";
23
- /** What a coordinated shutdown operation is told about prior signal ownership. */
24
- export type ShutdownContext = {
25
- /** True once ANY prior shutdown signaled the PTY — do not re-signal, only reap/cleanup. */
26
- readonly alreadySignaled: boolean;
27
- /** Record that this operation is about to signal the PTY (idempotent). */
28
- readonly markSignaled: () => void;
29
- };
30
- type ShutdownOperation = (context: ShutdownContext) => Promise<void>;
31
- /**
32
- * One coordinator per session. `run` is claimed synchronously: it records the
33
- * in-flight request before returning control, so a concurrent caller entering the
34
- * same tick sees it and joins instead of starting a second, racing shutdown.
35
- */
36
- export declare class ShutdownCoordinator {
37
- private inFlight;
38
- private signaled;
39
- /**
40
- * Claim (or join) the in-flight shutdown for `level`, running `operation` only
41
- * when this call actually owns work:
42
- * - No in-flight run: this caller owns it; `operation` runs immediately.
43
- * - In-flight run of an equal-or-higher level: JOIN it (await the same promise);
44
- * `operation` never runs, so the PTY is not signaled a second time.
45
- * - In-flight run of a LOWER level (escalation): chain `operation` AFTER the
46
- * in-flight run settles, so it observes the terminal status that run produced.
47
- * The operation is told whether the PTY was `alreadySignaled` so it reaps/cleans
48
- * up instead of re-signaling. On settlement `inFlight` is cleared (identity-guarded)
49
- * so a later call can retry a failed reap/cleanup without re-signaling.
50
- */
51
- run(level: ShutdownLevel, operation: ShutdownOperation): Promise<void>;
52
- /** Drop the active entry once it settles, but never clobber a newer one. */
53
- private clear;
54
- private context;
55
- }
56
- export {};
57
- //# sourceMappingURL=shutdown-coordinator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shutdown-coordinator.d.ts","sourceRoot":"","sources":["../../src/runtime/shutdown-coordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,kFAAkF;AAClF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAIzD,kFAAkF;AAClF,MAAM,MAAM,eAAe,GAAG;IAC5B,2FAA2F;IAC3F,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC;IAClC,0EAA0E;IAC1E,QAAQ,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC;CACnC,CAAC;AAEF,KAAK,iBAAiB,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAGrE;;;;GAIG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAuB;IAGvC,OAAO,CAAC,QAAQ,CAAS;IAEzB;;;;;;;;;;;OAWG;IACH,GAAG,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBtE,4EAA4E;IAC5E,OAAO,CAAC,KAAK;IAIb,OAAO,CAAC,OAAO;CAQhB"}
@@ -1,77 +0,0 @@
1
- /**
2
- * Serializes a session's overlapping stop/kill/teardown so the PTY is signaled at
3
- * most once (PRD §5.3/§9.4, C-LIFE-10). Concurrent shutdown calls can each snapshot
4
- * a non-terminal status and race into `terminatePty`; if the OS process exits before
5
- * node-pty's exit callback updates status, a later caller could signal the numeric
6
- * PID again AFTER the kernel recycled it, and duplicate waiters / first-wins evidence
7
- * could mislabel a force-killed exit as merely stopped.
8
- *
9
- * Two pieces of state, tracked SEPARATELY, make this safe and still retryable:
10
- * - `signaled` — sticky, set the first time any shutdown signals the PTY. It is
11
- * NEVER cleared. A later caller that finds it set does NOT re-signal solely
12
- * because the lifecycle status is still non-terminal (a predecessor that
13
- * signaled+reaped but threw before submitting terminal status must not cause a
14
- * re-signal of a possibly-recycled PID); it may still reap/cleanup/teardown.
15
- * - `inFlight` — the current in-flight run, CLEARED on settlement (with identity
16
- * protection). A failed `stop()`/`kill()`/`teardown()` therefore does not return
17
- * a permanently rejected promise to every later caller: once it settles, a later
18
- * call starts a fresh operation that RETRIES reap/cleanup/removal without
19
- * re-signaling the PTY (C-LIFE-10 retry posture).
20
- */
21
- const levelRank = { stop: 0, kill: 1, teardown: 2 };
22
- /**
23
- * One coordinator per session. `run` is claimed synchronously: it records the
24
- * in-flight request before returning control, so a concurrent caller entering the
25
- * same tick sees it and joins instead of starting a second, racing shutdown.
26
- */
27
- export class ShutdownCoordinator {
28
- inFlight;
29
- // Sticky: once the PTY is signaled it must never be signaled again (recycled PID),
30
- // independently of whether a run reached a terminal status before it settled.
31
- signaled = false;
32
- /**
33
- * Claim (or join) the in-flight shutdown for `level`, running `operation` only
34
- * when this call actually owns work:
35
- * - No in-flight run: this caller owns it; `operation` runs immediately.
36
- * - In-flight run of an equal-or-higher level: JOIN it (await the same promise);
37
- * `operation` never runs, so the PTY is not signaled a second time.
38
- * - In-flight run of a LOWER level (escalation): chain `operation` AFTER the
39
- * in-flight run settles, so it observes the terminal status that run produced.
40
- * The operation is told whether the PTY was `alreadySignaled` so it reaps/cleans
41
- * up instead of re-signaling. On settlement `inFlight` is cleared (identity-guarded)
42
- * so a later call can retry a failed reap/cleanup without re-signaling.
43
- */
44
- run(level, operation) {
45
- const current = this.inFlight;
46
- if (current && levelRank[current.level] >= levelRank[level])
47
- return current.promise;
48
- const invoke = () => operation(this.context());
49
- // No in-flight run: this caller owns it and starts SYNCHRONOUSLY (no microtask gap
50
- // before the PTY signal). An escalation chains AFTER the lower-level in-flight run
51
- // so it observes the terminal status that run produced; the predecessor's rejection
52
- // is absorbed here (each shutdown still surfaces its own failure to its own caller).
53
- const promise = current ? current.promise.then(invoke, invoke) : invoke();
54
- const entry = { level, promise };
55
- this.inFlight = entry;
56
- // Clear on settlement so a settled failure never permanently blocks a retry — but
57
- // only if this is still the active entry (a newer run must not be clobbered). The
58
- // rejection is swallowed on THIS observer only; the `promise` returned to the
59
- // caller still rejects so each shutdown surfaces its own failure.
60
- promise.then(() => this.clear(entry), () => this.clear(entry));
61
- return promise;
62
- }
63
- /** Drop the active entry once it settles, but never clobber a newer one. */
64
- clear(entry) {
65
- if (this.inFlight === entry)
66
- this.inFlight = undefined;
67
- }
68
- context() {
69
- return {
70
- alreadySignaled: this.signaled,
71
- markSignaled: () => {
72
- this.signaled = true;
73
- },
74
- };
75
- }
76
- }
77
- //# sourceMappingURL=shutdown-coordinator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shutdown-coordinator.js","sourceRoot":"","sources":["../../src/runtime/shutdown-coordinator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAKH,MAAM,SAAS,GAA4C,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AAa7F;;;;GAIG;AACH,MAAM,OAAO,mBAAmB;IACtB,QAAQ,CAAuB;IACvC,mFAAmF;IACnF,8EAA8E;IACtE,QAAQ,GAAG,KAAK,CAAC;IAEzB;;;;;;;;;;;OAWG;IACH,GAAG,CAAC,KAAoB,EAAE,SAA4B;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC;QACpF,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC/C,mFAAmF;QACnF,mFAAmF;QACnF,oFAAoF;QACpF,qFAAqF;QACrF,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QAC1E,MAAM,KAAK,GAAa,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC3C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,kFAAkF;QAClF,kFAAkF;QAClF,8EAA8E;QAC9E,kEAAkE;QAClE,OAAO,CAAC,IAAI,CACV,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EACvB,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CACxB,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,4EAA4E;IACpE,KAAK,CAAC,KAAe;QAC3B,IAAI,IAAI,CAAC,QAAQ,KAAK,KAAK;YAAE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;IACzD,CAAC;IAEO,OAAO;QACb,OAAO;YACL,eAAe,EAAE,IAAI,CAAC,QAAQ;YAC9B,YAAY,EAAE,GAAG,EAAE;gBACjB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvB,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}
@@ -1,33 +0,0 @@
1
- /**
2
- * Bounded, release-able collector for the first PTY output of a session.
3
- *
4
- * The startup usability check (see startup.ts, `assertStartupUsable`) reads the
5
- * agent's early output exactly once at ~500ms to detect a crash or auth banner.
6
- * The PTY data handler is never detached for the session's lifetime, so a naive
7
- * `startupOutput += data` accumulates a second unbounded in-memory transcript
8
- * for the WHOLE session even though only the startup snapshot is ever consumed.
9
- *
10
- * This collector appends only while the startup gate is open and caps the buffer
11
- * so a chatty CLI cannot balloon it; once `release()` is called (right after the
12
- * usability check reads it) further chunks are dropped and the retained string is
13
- * cleared, so no per-session transcript lingers. Implements PRD §9.1 startup
14
- * usability and §9.4 resource cleanup.
15
- */
16
- import type { PtyExit } from "../pty/types.ts";
17
- import { type StartupAdapter } from "./startup.ts";
18
- export type StartupBuffer = {
19
- /** Appends a PTY chunk while the gate is open; a no-op once released. */
20
- readonly push: (data: string) => void;
21
- /** Returns the collected startup output (empty once released). */
22
- readonly read: () => string;
23
- /** Stops collecting and clears the retained buffer for the rest of the session. */
24
- readonly release: () => void;
25
- };
26
- export declare function createStartupBuffer(cap?: number): StartupBuffer;
27
- /**
28
- * Runs the ~500ms startup usability check against `buffer`, then releases it on
29
- * every path (success OR failure) so the collector stops appending and clears
30
- * its retained string for the rest of the session (§9.1, §9.4).
31
- */
32
- export declare function assertStartupThenRelease(adapter: StartupAdapter, buffer: StartupBuffer, exit: () => PtyExit | undefined): Promise<void>;
33
- //# sourceMappingURL=startup-buffer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"startup-buffer.d.ts","sourceRoot":"","sources":["../../src/runtime/startup-buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAuB,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAMxE,MAAM,MAAM,aAAa,GAAG;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,kEAAkE;IAClE,QAAQ,CAAC,IAAI,EAAE,MAAM,MAAM,CAAC;IAC5B,mFAAmF;IACnF,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAA2B,GAAG,aAAa,CAiBnF;AAED;;;;GAIG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,MAAM,OAAO,GAAG,SAAS,GAC9B,OAAO,CAAC,IAAI,CAAC,CAMf"}
@@ -1,53 +0,0 @@
1
- /**
2
- * Bounded, release-able collector for the first PTY output of a session.
3
- *
4
- * The startup usability check (see startup.ts, `assertStartupUsable`) reads the
5
- * agent's early output exactly once at ~500ms to detect a crash or auth banner.
6
- * The PTY data handler is never detached for the session's lifetime, so a naive
7
- * `startupOutput += data` accumulates a second unbounded in-memory transcript
8
- * for the WHOLE session even though only the startup snapshot is ever consumed.
9
- *
10
- * This collector appends only while the startup gate is open and caps the buffer
11
- * so a chatty CLI cannot balloon it; once `release()` is called (right after the
12
- * usability check reads it) further chunks are dropped and the retained string is
13
- * cleared, so no per-session transcript lingers. Implements PRD §9.1 startup
14
- * usability and §9.4 resource cleanup.
15
- */
16
- import { assertStartupUsable } from "./startup.js";
17
- // Startup output is tiny (a banner, a prompt); this cap is comfortably larger
18
- // than any real startup screen while still bounding a misbehaving CLI.
19
- const STARTUP_BUFFER_CAP = 64 * 1024;
20
- export function createStartupBuffer(cap = STARTUP_BUFFER_CAP) {
21
- let buffer = "";
22
- let open = true;
23
- return {
24
- push(data) {
25
- if (!open || buffer.length >= cap)
26
- return;
27
- buffer += data;
28
- if (buffer.length > cap)
29
- buffer = buffer.slice(0, cap);
30
- },
31
- read() {
32
- return buffer;
33
- },
34
- release() {
35
- open = false;
36
- buffer = "";
37
- },
38
- };
39
- }
40
- /**
41
- * Runs the ~500ms startup usability check against `buffer`, then releases it on
42
- * every path (success OR failure) so the collector stops appending and clears
43
- * its retained string for the rest of the session (§9.1, §9.4).
44
- */
45
- export async function assertStartupThenRelease(adapter, buffer, exit) {
46
- try {
47
- await assertStartupUsable({ adapter, exit, output: () => buffer.read() });
48
- }
49
- finally {
50
- buffer.release();
51
- }
52
- }
53
- //# sourceMappingURL=startup-buffer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"startup-buffer.js","sourceRoot":"","sources":["../../src/runtime/startup-buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,mBAAmB,EAAuB,MAAM,cAAc,CAAC;AAExE,8EAA8E;AAC9E,uEAAuE;AACvE,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAC;AAWrC,MAAM,UAAU,mBAAmB,CAAC,MAAc,kBAAkB;IAClE,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,OAAO;QACL,IAAI,CAAC,IAAY;YACf,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,IAAI,GAAG;gBAAE,OAAO;YAC1C,MAAM,IAAI,IAAI,CAAC;YACf,IAAI,MAAM,CAAC,MAAM,GAAG,GAAG;gBAAE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACzD,CAAC;QACD,IAAI;YACF,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO;YACL,IAAI,GAAG,KAAK,CAAC;YACb,MAAM,GAAG,EAAE,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,OAAuB,EACvB,MAAqB,EACrB,IAA+B;IAE/B,IAAI,CAAC;QACH,MAAM,mBAAmB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5E,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -1,43 +0,0 @@
1
- /**
2
- * Best-effort startup cleanup that preserves the original startup error.
3
- * Implements PRD §9.1 and §10 error stability.
4
- */
5
- import type { PtyProcess } from "../pty/types.ts";
6
- export type StartupTerminationTimeouts = {
7
- readonly gracefulMs: number;
8
- readonly forceMs: number;
9
- };
10
- export type StartupCleanupResources = {
11
- readonly before?: () => void;
12
- readonly bridge?: {
13
- readonly stop: () => Promise<void>;
14
- };
15
- readonly pty?: PtyProcess;
16
- readonly terminal?: {
17
- readonly dispose: () => void;
18
- };
19
- readonly after?: () => void;
20
- /** Overrides the bounded PTY termination window (tests only; production defaults). */
21
- readonly terminationTimeouts?: StartupTerminationTimeouts;
22
- };
23
- /**
24
- * Wraps the ENTIRE `start*FromRecord` body so the fresh per-launch socket FILE the
25
- * launch minted is removed on ANY failure before the session takes ownership — a
26
- * failed state/runtime write, bridge start, PTY start, or guarded post-spawn step
27
- * otherwise leaks a socket under `/tmp/elwood-*` (§9.1). It removes only THIS launch's
28
- * own file, never the shared stable home a concurrent launch may still own; the home is
29
- * deterministic, so the session's next start/resume/teardown collects any empty
30
- * leftover. On success ownership transfers to the returned session (teardown removes the
31
- * whole home). The cleanup is contained so it never replaces the original startup error.
32
- */
33
- export declare function withSocketHomeCleanup<T>(removeOwnSocketFile: () => void, build: () => Promise<T>): Promise<T>;
34
- export declare function cleanupStartupResources(resources: StartupCleanupResources): Promise<void>;
35
- /**
36
- * Runs the post-session-construction startup steps behind ONE cleanup boundary
37
- * (PRD §9.1, §9.4): if `region` rejects — a failed startup assertion, a PTY write
38
- * fault, anything — the now-live PTY, bridge, terminal, and any watcher
39
- * are torn down via `cleanupStartupResources` before the original error rethrows, so
40
- * a rejected `startClaude`/`startCodex` never leaks live resources.
41
- */
42
- export declare function guardStartupRegion(region: () => Promise<void>, resources: StartupCleanupResources): Promise<void>;
43
- //# sourceMappingURL=startup-cleanup.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"startup-cleanup.d.ts","sourceRoot":"","sources":["../../src/runtime/startup-cleanup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIlD,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;KAAE,CAAC;IACzD,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;KAAE,CAAC;IACrD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,sFAAsF;IACtF,QAAQ,CAAC,mBAAmB,CAAC,EAAE,0BAA0B,CAAC;CAC3D,CAAC;AAEF;;;;;;;;;GASG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,EAC3C,mBAAmB,EAAE,MAAM,IAAI,EAC/B,KAAK,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GACtB,OAAO,CAAC,CAAC,CAAC,CAWZ;AAMD,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAa/F;AAUD;;;;;;GAMG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC3B,SAAS,EAAE,uBAAuB,GACjC,OAAO,CAAC,IAAI,CAAC,CAOf"}