@botiverse/oar 0.71.0 → 0.72.0

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 (384) hide show
  1. package/README.md +23 -4
  2. package/assets/brands/NOTICE.md +12 -2
  3. package/{LICENSE → assets/brands/QWEN-LICENSE.txt} +3 -2
  4. package/assets/brands/qoder-on-dark.svg +1 -0
  5. package/assets/brands/qoder-on-light.svg +1 -0
  6. package/assets/brands/qoder.svg +1 -0
  7. package/assets/brands/qwen-on-dark.svg +6 -0
  8. package/assets/brands/qwen-on-light.svg +6 -0
  9. package/assets/brands/qwen.svg +6 -0
  10. package/dist/brands.d.ts +16 -0
  11. package/dist/brands.d.ts.map +1 -1
  12. package/dist/brands.js +9 -0
  13. package/dist/brands.js.map +1 -1
  14. package/dist/community/morph/console.js +1 -1
  15. package/dist/community/morph/console.js.map +1 -1
  16. package/dist/community/morph/session.d.ts.map +1 -1
  17. package/dist/community/morph/session.js +1 -0
  18. package/dist/community/morph/session.js.map +1 -1
  19. package/dist/contracts/deliver.d.ts +27 -5
  20. package/dist/contracts/deliver.d.ts.map +1 -1
  21. package/dist/contracts/index.d.ts +3 -2
  22. package/dist/contracts/index.d.ts.map +1 -1
  23. package/dist/contracts/index.js.map +1 -1
  24. package/dist/contracts/login.d.ts +12 -4
  25. package/dist/contracts/login.d.ts.map +1 -1
  26. package/dist/contracts/orientation.d.ts +67 -0
  27. package/dist/contracts/orientation.d.ts.map +1 -0
  28. package/dist/contracts/orientation.js +2 -0
  29. package/dist/contracts/orientation.js.map +1 -0
  30. package/dist/contracts/provider-auth.d.ts +15 -5
  31. package/dist/contracts/provider-auth.d.ts.map +1 -1
  32. package/dist/contracts/records.d.ts +1 -0
  33. package/dist/contracts/records.d.ts.map +1 -1
  34. package/dist/contracts/runtime-failure-error.d.ts +6 -2
  35. package/dist/contracts/runtime-failure-error.d.ts.map +1 -1
  36. package/dist/contracts/runtime-failure-error.js +6 -2
  37. package/dist/contracts/runtime-failure-error.js.map +1 -1
  38. package/dist/contracts/runtime.d.ts +9 -5
  39. package/dist/contracts/runtime.d.ts.map +1 -1
  40. package/dist/contracts/runtime.js.map +1 -1
  41. package/dist/contracts/session-options.d.ts +17 -3
  42. package/dist/contracts/session-options.d.ts.map +1 -1
  43. package/dist/contracts/session.d.ts +10 -4
  44. package/dist/contracts/session.d.ts.map +1 -1
  45. package/dist/index.d.ts +11 -2
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +15 -2
  48. package/dist/index.js.map +1 -1
  49. package/dist/observe/conversation.d.ts +2 -0
  50. package/dist/observe/conversation.d.ts.map +1 -1
  51. package/dist/observe/conversation.js +56 -5
  52. package/dist/observe/conversation.js.map +1 -1
  53. package/dist/observe/index.d.ts +1 -0
  54. package/dist/observe/index.d.ts.map +1 -1
  55. package/dist/observe/index.js +1 -0
  56. package/dist/observe/index.js.map +1 -1
  57. package/dist/observe/input-carries.d.ts +5 -0
  58. package/dist/observe/input-carries.d.ts.map +1 -0
  59. package/dist/observe/input-carries.js +13 -0
  60. package/dist/observe/input-carries.js.map +1 -0
  61. package/dist/observe/session-view-inputs.d.ts.map +1 -1
  62. package/dist/observe/session-view-inputs.js +17 -5
  63. package/dist/observe/session-view-inputs.js.map +1 -1
  64. package/dist/observe/usability.d.ts +4 -0
  65. package/dist/observe/usability.d.ts.map +1 -0
  66. package/dist/observe/usability.js +102 -0
  67. package/dist/observe/usability.js.map +1 -0
  68. package/dist/runtimes/antigravity/options.d.ts.map +1 -1
  69. package/dist/runtimes/antigravity/options.js +1 -0
  70. package/dist/runtimes/antigravity/options.js.map +1 -1
  71. package/dist/runtimes/claude/auth-status.d.ts.map +1 -1
  72. package/dist/runtimes/claude/auth-status.js +4 -0
  73. package/dist/runtimes/claude/auth-status.js.map +1 -1
  74. package/dist/runtimes/claude/launch.d.ts +1 -1
  75. package/dist/runtimes/claude/launch.d.ts.map +1 -1
  76. package/dist/runtimes/claude/launch.js +36 -22
  77. package/dist/runtimes/claude/launch.js.map +1 -1
  78. package/dist/runtimes/claude/list-models.d.ts.map +1 -1
  79. package/dist/runtimes/claude/list-models.js +12 -0
  80. package/dist/runtimes/claude/list-models.js.map +1 -1
  81. package/dist/runtimes/claude/projection.d.ts +11 -76
  82. package/dist/runtimes/claude/projection.d.ts.map +1 -1
  83. package/dist/runtimes/claude/projection.js +36 -148
  84. package/dist/runtimes/claude/projection.js.map +1 -1
  85. package/dist/runtimes/claude/prompt-files.d.ts +7 -0
  86. package/dist/runtimes/claude/prompt-files.d.ts.map +1 -0
  87. package/dist/runtimes/claude/prompt-files.js +32 -0
  88. package/dist/runtimes/claude/prompt-files.js.map +1 -0
  89. package/dist/runtimes/claude/service-tier.d.ts +2 -2
  90. package/dist/runtimes/claude/service-tier.d.ts.map +1 -1
  91. package/dist/runtimes/claude/service-tier.js +4 -4
  92. package/dist/runtimes/claude/service-tier.js.map +1 -1
  93. package/dist/runtimes/claude/session.d.ts +1 -0
  94. package/dist/runtimes/claude/session.d.ts.map +1 -1
  95. package/dist/runtimes/claude/session.js +17 -249
  96. package/dist/runtimes/claude/session.js.map +1 -1
  97. package/dist/runtimes/claude/user-configuration.d.ts +9 -0
  98. package/dist/runtimes/claude/user-configuration.d.ts.map +1 -0
  99. package/dist/runtimes/claude/user-configuration.js +83 -0
  100. package/dist/runtimes/claude/user-configuration.js.map +1 -0
  101. package/dist/runtimes/codex/index.d.ts +3 -2
  102. package/dist/runtimes/codex/index.d.ts.map +1 -1
  103. package/dist/runtimes/codex/index.js +2 -0
  104. package/dist/runtimes/codex/index.js.map +1 -1
  105. package/dist/runtimes/codex/login.d.ts +3 -2
  106. package/dist/runtimes/codex/login.d.ts.map +1 -1
  107. package/dist/runtimes/codex/login.js +13 -3
  108. package/dist/runtimes/codex/login.js.map +1 -1
  109. package/dist/runtimes/codex/open.d.ts.map +1 -1
  110. package/dist/runtimes/codex/open.js +7 -1
  111. package/dist/runtimes/codex/open.js.map +1 -1
  112. package/dist/runtimes/codex/options.d.ts +3 -0
  113. package/dist/runtimes/codex/options.d.ts.map +1 -0
  114. package/dist/runtimes/codex/options.js +4 -0
  115. package/dist/runtimes/codex/options.js.map +1 -0
  116. package/dist/runtimes/cursor/auth-status.d.ts +1 -1
  117. package/dist/runtimes/cursor/auth-status.d.ts.map +1 -1
  118. package/dist/runtimes/cursor/auth-status.js +10 -2
  119. package/dist/runtimes/cursor/auth-status.js.map +1 -1
  120. package/dist/runtimes/cursor/index.d.ts +1 -0
  121. package/dist/runtimes/cursor/index.d.ts.map +1 -1
  122. package/dist/runtimes/cursor/index.js +1 -0
  123. package/dist/runtimes/cursor/index.js.map +1 -1
  124. package/dist/runtimes/cursor/model.d.ts.map +1 -1
  125. package/dist/runtimes/cursor/model.js +6 -1
  126. package/dist/runtimes/cursor/model.js.map +1 -1
  127. package/dist/runtimes/cursor/native-environment.d.ts +12 -0
  128. package/dist/runtimes/cursor/native-environment.d.ts.map +1 -0
  129. package/dist/runtimes/cursor/native-environment.js +24 -0
  130. package/dist/runtimes/cursor/native-environment.js.map +1 -0
  131. package/dist/runtimes/cursor/sdk.d.ts +1 -0
  132. package/dist/runtimes/cursor/sdk.d.ts.map +1 -1
  133. package/dist/runtimes/cursor/sdk.js +14 -32
  134. package/dist/runtimes/cursor/sdk.js.map +1 -1
  135. package/dist/runtimes/grok/options.d.ts.map +1 -1
  136. package/dist/runtimes/grok/options.js +1 -0
  137. package/dist/runtimes/grok/options.js.map +1 -1
  138. package/dist/runtimes/kimi/options.d.ts.map +1 -1
  139. package/dist/runtimes/kimi/options.js +1 -0
  140. package/dist/runtimes/kimi/options.js.map +1 -1
  141. package/dist/runtimes/opencode/options.d.ts.map +1 -1
  142. package/dist/runtimes/opencode/options.js +1 -0
  143. package/dist/runtimes/opencode/options.js.map +1 -1
  144. package/dist/runtimes/pi/auth.d.ts.map +1 -1
  145. package/dist/runtimes/pi/auth.js +9 -1
  146. package/dist/runtimes/pi/auth.js.map +1 -1
  147. package/dist/runtimes/pi/index.d.ts +12 -20
  148. package/dist/runtimes/pi/index.d.ts.map +1 -1
  149. package/dist/runtimes/pi/index.js +33 -15
  150. package/dist/runtimes/pi/index.js.map +1 -1
  151. package/dist/runtimes/pi/inventory.d.ts +3 -1
  152. package/dist/runtimes/pi/inventory.d.ts.map +1 -1
  153. package/dist/runtimes/pi/inventory.js +14 -5
  154. package/dist/runtimes/pi/inventory.js.map +1 -1
  155. package/dist/runtimes/pi/lifecycle.d.ts +2 -2
  156. package/dist/runtimes/pi/lifecycle.d.ts.map +1 -1
  157. package/dist/runtimes/pi/lifecycle.js +19 -8
  158. package/dist/runtimes/pi/lifecycle.js.map +1 -1
  159. package/dist/runtimes/pi/list-models.d.ts +2 -0
  160. package/dist/runtimes/pi/list-models.d.ts.map +1 -1
  161. package/dist/runtimes/pi/list-models.js +6 -2
  162. package/dist/runtimes/pi/list-models.js.map +1 -1
  163. package/dist/runtimes/pi/open.d.ts +4 -1
  164. package/dist/runtimes/pi/open.d.ts.map +1 -1
  165. package/dist/runtimes/pi/open.js +13 -7
  166. package/dist/runtimes/pi/open.js.map +1 -1
  167. package/dist/runtimes/pi/options.d.ts +21 -0
  168. package/dist/runtimes/pi/options.d.ts.map +1 -0
  169. package/dist/runtimes/pi/options.js +2 -0
  170. package/dist/runtimes/pi/options.js.map +1 -0
  171. package/dist/runtimes/pi/project.d.ts +7 -0
  172. package/dist/runtimes/pi/project.d.ts.map +1 -0
  173. package/dist/runtimes/pi/project.js +40 -0
  174. package/dist/runtimes/pi/project.js.map +1 -0
  175. package/dist/runtimes/pi/resolve.d.ts.map +1 -1
  176. package/dist/runtimes/pi/resolve.js +19 -2
  177. package/dist/runtimes/pi/resolve.js.map +1 -1
  178. package/dist/runtimes/pi/rpc/control.d.ts +7 -0
  179. package/dist/runtimes/pi/rpc/control.d.ts.map +1 -0
  180. package/dist/runtimes/pi/rpc/control.js +53 -0
  181. package/dist/runtimes/pi/rpc/control.js.map +1 -0
  182. package/dist/runtimes/pi/rpc/credentials.d.ts +4 -0
  183. package/dist/runtimes/pi/rpc/credentials.d.ts.map +1 -0
  184. package/dist/runtimes/pi/rpc/credentials.js +24 -0
  185. package/dist/runtimes/pi/rpc/credentials.js.map +1 -0
  186. package/dist/runtimes/pi/rpc/extension.d.ts +6 -0
  187. package/dist/runtimes/pi/rpc/extension.d.ts.map +1 -0
  188. package/dist/runtimes/pi/rpc/extension.js +68 -0
  189. package/dist/runtimes/pi/rpc/extension.js.map +1 -0
  190. package/dist/runtimes/pi/rpc/launch.d.ts +7 -0
  191. package/dist/runtimes/pi/rpc/launch.d.ts.map +1 -0
  192. package/dist/runtimes/pi/rpc/launch.js +26 -0
  193. package/dist/runtimes/pi/rpc/launch.js.map +1 -0
  194. package/dist/runtimes/pi/rpc/open.d.ts +19 -0
  195. package/dist/runtimes/pi/rpc/open.d.ts.map +1 -0
  196. package/dist/runtimes/pi/rpc/open.js +132 -0
  197. package/dist/runtimes/pi/rpc/open.js.map +1 -0
  198. package/dist/runtimes/pi/rpc/prompt-files.d.ts +4 -0
  199. package/dist/runtimes/pi/rpc/prompt-files.d.ts.map +1 -0
  200. package/dist/runtimes/pi/rpc/prompt-files.js +27 -0
  201. package/dist/runtimes/pi/rpc/prompt-files.js.map +1 -0
  202. package/dist/runtimes/pi/rpc/session.d.ts +5 -0
  203. package/dist/runtimes/pi/rpc/session.d.ts.map +1 -0
  204. package/dist/runtimes/pi/rpc/session.js +217 -0
  205. package/dist/runtimes/pi/rpc/session.js.map +1 -0
  206. package/dist/runtimes/pi/rpc/version.d.ts +3 -0
  207. package/dist/runtimes/pi/rpc/version.d.ts.map +1 -0
  208. package/dist/runtimes/pi/rpc/version.js +23 -0
  209. package/dist/runtimes/pi/rpc/version.js.map +1 -0
  210. package/dist/runtimes/pi/session.d.ts +2 -0
  211. package/dist/runtimes/pi/session.d.ts.map +1 -1
  212. package/dist/runtimes/pi/session.js +6 -8
  213. package/dist/runtimes/pi/session.js.map +1 -1
  214. package/dist/runtimes/pi-durable/options.d.ts.map +1 -1
  215. package/dist/runtimes/pi-durable/options.js +7 -2
  216. package/dist/runtimes/pi-durable/options.js.map +1 -1
  217. package/dist/runtimes/qoder/auth-status.d.ts +6 -0
  218. package/dist/runtimes/qoder/auth-status.d.ts.map +1 -0
  219. package/dist/runtimes/qoder/auth-status.js +22 -0
  220. package/dist/runtimes/qoder/auth-status.js.map +1 -0
  221. package/dist/runtimes/qoder/control.d.ts +14 -0
  222. package/dist/runtimes/qoder/control.d.ts.map +1 -0
  223. package/dist/runtimes/qoder/control.js +79 -0
  224. package/dist/runtimes/qoder/control.js.map +1 -0
  225. package/dist/runtimes/qoder/index.d.ts +22 -0
  226. package/dist/runtimes/qoder/index.d.ts.map +1 -0
  227. package/dist/runtimes/qoder/index.js +16 -0
  228. package/dist/runtimes/qoder/index.js.map +1 -0
  229. package/dist/runtimes/qoder/install.d.ts +6 -0
  230. package/dist/runtimes/qoder/install.d.ts.map +1 -0
  231. package/dist/runtimes/qoder/install.js +15 -0
  232. package/dist/runtimes/qoder/install.js.map +1 -0
  233. package/dist/runtimes/qoder/installation.d.ts +2 -0
  234. package/dist/runtimes/qoder/installation.d.ts.map +1 -0
  235. package/dist/runtimes/qoder/installation.js +5 -0
  236. package/dist/runtimes/qoder/installation.js.map +1 -0
  237. package/dist/runtimes/qoder/launch.d.ts +7 -0
  238. package/dist/runtimes/qoder/launch.d.ts.map +1 -0
  239. package/dist/runtimes/qoder/launch.js +76 -0
  240. package/dist/runtimes/qoder/launch.js.map +1 -0
  241. package/dist/runtimes/qoder/list-models.d.ts +6 -0
  242. package/dist/runtimes/qoder/list-models.d.ts.map +1 -0
  243. package/dist/runtimes/qoder/list-models.js +49 -0
  244. package/dist/runtimes/qoder/list-models.js.map +1 -0
  245. package/dist/runtimes/qoder/login.d.ts +6 -0
  246. package/dist/runtimes/qoder/login.d.ts.map +1 -0
  247. package/dist/runtimes/qoder/login.js +83 -0
  248. package/dist/runtimes/qoder/login.js.map +1 -0
  249. package/dist/runtimes/qoder/options.d.ts +4 -0
  250. package/dist/runtimes/qoder/options.d.ts.map +1 -0
  251. package/dist/runtimes/qoder/options.js +19 -0
  252. package/dist/runtimes/qoder/options.js.map +1 -0
  253. package/dist/runtimes/qoder/projection.d.ts +13 -0
  254. package/dist/runtimes/qoder/projection.d.ts.map +1 -0
  255. package/dist/runtimes/qoder/projection.js +42 -0
  256. package/dist/runtimes/qoder/projection.js.map +1 -0
  257. package/dist/runtimes/qoder/session.d.ts +3 -0
  258. package/dist/runtimes/qoder/session.d.ts.map +1 -0
  259. package/dist/runtimes/qoder/session.js +68 -0
  260. package/dist/runtimes/qoder/session.js.map +1 -0
  261. package/dist/runtimes/qwen/close.d.ts +4 -0
  262. package/dist/runtimes/qwen/close.d.ts.map +1 -0
  263. package/dist/runtimes/qwen/close.js +12 -0
  264. package/dist/runtimes/qwen/close.js.map +1 -0
  265. package/dist/runtimes/qwen/control.d.ts +15 -0
  266. package/dist/runtimes/qwen/control.d.ts.map +1 -0
  267. package/dist/runtimes/qwen/control.js +66 -0
  268. package/dist/runtimes/qwen/control.js.map +1 -0
  269. package/dist/runtimes/qwen/index.d.ts +20 -0
  270. package/dist/runtimes/qwen/index.d.ts.map +1 -0
  271. package/dist/runtimes/qwen/index.js +22 -0
  272. package/dist/runtimes/qwen/index.js.map +1 -0
  273. package/dist/runtimes/qwen/install-paths.d.ts +6 -0
  274. package/dist/runtimes/qwen/install-paths.d.ts.map +1 -0
  275. package/dist/runtimes/qwen/install-paths.js +13 -0
  276. package/dist/runtimes/qwen/install-paths.js.map +1 -0
  277. package/dist/runtimes/qwen/install.d.ts +6 -0
  278. package/dist/runtimes/qwen/install.d.ts.map +1 -0
  279. package/dist/runtimes/qwen/install.js +18 -0
  280. package/dist/runtimes/qwen/install.js.map +1 -0
  281. package/dist/runtimes/qwen/installation.d.ts +2 -0
  282. package/dist/runtimes/qwen/installation.d.ts.map +1 -0
  283. package/dist/runtimes/qwen/installation.js +5 -0
  284. package/dist/runtimes/qwen/installation.js.map +1 -0
  285. package/dist/runtimes/qwen/launch.d.ts +5 -0
  286. package/dist/runtimes/qwen/launch.d.ts.map +1 -0
  287. package/dist/runtimes/qwen/launch.js +25 -0
  288. package/dist/runtimes/qwen/launch.js.map +1 -0
  289. package/dist/runtimes/qwen/list-models.d.ts +6 -0
  290. package/dist/runtimes/qwen/list-models.d.ts.map +1 -0
  291. package/dist/runtimes/qwen/list-models.js +46 -0
  292. package/dist/runtimes/qwen/list-models.js.map +1 -0
  293. package/dist/runtimes/qwen/options.d.ts +5 -0
  294. package/dist/runtimes/qwen/options.d.ts.map +1 -0
  295. package/dist/runtimes/qwen/options.js +27 -0
  296. package/dist/runtimes/qwen/options.js.map +1 -0
  297. package/dist/runtimes/qwen/projection.d.ts +14 -0
  298. package/dist/runtimes/qwen/projection.d.ts.map +1 -0
  299. package/dist/runtimes/qwen/projection.js +41 -0
  300. package/dist/runtimes/qwen/projection.js.map +1 -0
  301. package/dist/runtimes/qwen/session.d.ts +8 -0
  302. package/dist/runtimes/qwen/session.d.ts.map +1 -0
  303. package/dist/runtimes/qwen/session.js +73 -0
  304. package/dist/runtimes/qwen/session.js.map +1 -0
  305. package/dist/shared/acp/terminal.d.ts.map +1 -1
  306. package/dist/shared/acp/terminal.js +13 -3
  307. package/dist/shared/acp/terminal.js.map +1 -1
  308. package/dist/shared/control-input.d.ts +3 -1
  309. package/dist/shared/control-input.d.ts.map +1 -1
  310. package/dist/shared/control-input.js +11 -0
  311. package/dist/shared/control-input.js.map +1 -1
  312. package/dist/shared/deliver-interrupt.d.ts +49 -0
  313. package/dist/shared/deliver-interrupt.d.ts.map +1 -0
  314. package/dist/shared/deliver-interrupt.js +195 -0
  315. package/dist/shared/deliver-interrupt.js.map +1 -0
  316. package/dist/shared/deliver.d.ts.map +1 -1
  317. package/dist/shared/deliver.js +17 -2
  318. package/dist/shared/deliver.js.map +1 -1
  319. package/dist/shared/executable/process-tree.d.ts +1 -1
  320. package/dist/shared/executable/process-tree.d.ts.map +1 -1
  321. package/dist/shared/executable/process-tree.js +25 -2
  322. package/dist/shared/executable/process-tree.js.map +1 -1
  323. package/dist/shared/executable/process.d.ts +10 -5
  324. package/dist/shared/executable/process.d.ts.map +1 -1
  325. package/dist/shared/executable/process.js +25 -12
  326. package/dist/shared/executable/process.js.map +1 -1
  327. package/dist/shared/executable/run.d.ts.map +1 -1
  328. package/dist/shared/executable/run.js +7 -2
  329. package/dist/shared/executable/run.js.map +1 -1
  330. package/dist/shared/orientation/budget.d.ts +12 -0
  331. package/dist/shared/orientation/budget.d.ts.map +1 -0
  332. package/dist/shared/orientation/budget.js +61 -0
  333. package/dist/shared/orientation/budget.js.map +1 -0
  334. package/dist/shared/orientation/customization.d.ts +8 -0
  335. package/dist/shared/orientation/customization.d.ts.map +1 -0
  336. package/dist/shared/orientation/customization.js +57 -0
  337. package/dist/shared/orientation/customization.js.map +1 -0
  338. package/dist/shared/orientation/index.d.ts +5 -0
  339. package/dist/shared/orientation/index.d.ts.map +1 -0
  340. package/dist/shared/orientation/index.js +88 -0
  341. package/dist/shared/orientation/index.js.map +1 -0
  342. package/dist/shared/orientation/slots.d.ts +6 -0
  343. package/dist/shared/orientation/slots.d.ts.map +1 -0
  344. package/dist/shared/orientation/slots.js +26 -0
  345. package/dist/shared/orientation/slots.js.map +1 -0
  346. package/dist/shared/seal-session.d.ts.map +1 -1
  347. package/dist/shared/seal-session.js.map +1 -1
  348. package/dist/shared/session-kernel.d.ts.map +1 -1
  349. package/dist/shared/session-kernel.js +36 -8
  350. package/dist/shared/session-kernel.js.map +1 -1
  351. package/dist/shared/session-options.d.ts +1 -1
  352. package/dist/shared/session-options.d.ts.map +1 -1
  353. package/dist/shared/session-options.js +5 -2
  354. package/dist/shared/session-options.js.map +1 -1
  355. package/dist/{runtimes/claude → shared/stream-json}/content.d.ts +5 -5
  356. package/dist/shared/stream-json/content.d.ts.map +1 -0
  357. package/dist/{runtimes/claude → shared/stream-json}/content.js +16 -10
  358. package/dist/shared/stream-json/content.js.map +1 -0
  359. package/dist/shared/stream-json/input-lifecycle.d.ts +24 -0
  360. package/dist/shared/stream-json/input-lifecycle.d.ts.map +1 -0
  361. package/dist/{runtimes/claude → shared/stream-json}/input-lifecycle.js +15 -11
  362. package/dist/shared/stream-json/input-lifecycle.js.map +1 -0
  363. package/dist/shared/stream-json/profile.d.ts +55 -0
  364. package/dist/shared/stream-json/profile.d.ts.map +1 -0
  365. package/dist/shared/stream-json/profile.js +2 -0
  366. package/dist/shared/stream-json/profile.js.map +1 -0
  367. package/dist/shared/stream-json/projection.d.ts +28 -0
  368. package/dist/shared/stream-json/projection.d.ts.map +1 -0
  369. package/dist/shared/stream-json/projection.js +122 -0
  370. package/dist/shared/stream-json/projection.js.map +1 -0
  371. package/dist/shared/stream-json/session.d.ts +8 -0
  372. package/dist/shared/stream-json/session.d.ts.map +1 -0
  373. package/dist/shared/stream-json/session.js +270 -0
  374. package/dist/shared/stream-json/session.js.map +1 -0
  375. package/dist/shared/stream-json/state.d.ts +25 -0
  376. package/dist/shared/stream-json/state.d.ts.map +1 -0
  377. package/dist/shared/stream-json/state.js +17 -0
  378. package/dist/shared/stream-json/state.js.map +1 -0
  379. package/package.json +1 -1
  380. package/dist/runtimes/claude/content.d.ts.map +0 -1
  381. package/dist/runtimes/claude/content.js.map +0 -1
  382. package/dist/runtimes/claude/input-lifecycle.d.ts +0 -24
  383. package/dist/runtimes/claude/input-lifecycle.d.ts.map +0 -1
  384. package/dist/runtimes/claude/input-lifecycle.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { emptyInputRefusal } from "./control-input.js";
1
+ import { carriesRefusal, emptyInputRefusal } from "./control-input.js";
2
2
  import { withSessionRecord } from "../observe/graph.js";
3
3
  async function settle(decide, issued) {
4
4
  try {
@@ -20,6 +20,26 @@ function deliver(observer, record) {
20
20
  export function createSessionKernel(sessionId = globalThis.crypto.randomUUID(), redact) {
21
21
  const observers = new Set();
22
22
  const log = [];
23
+ const notifications = [];
24
+ let publishing = false;
25
+ const publish = (record) => {
26
+ notifications.push(record);
27
+ if (publishing) {
28
+ return;
29
+ }
30
+ publishing = true;
31
+ try {
32
+ for (const next of notifications) {
33
+ for (const observer of observers) {
34
+ deliver(observer, next);
35
+ }
36
+ }
37
+ }
38
+ finally {
39
+ notifications.length = 0;
40
+ publishing = false;
41
+ }
42
+ };
23
43
  const nodeIds = new Set([sessionId]);
24
44
  let graph = { nodes: [{ id: sessionId }], edges: [] };
25
45
  let seq = 0;
@@ -44,9 +64,9 @@ export function createSessionKernel(sessionId = globalThis.crypto.randomUUID(),
44
64
  if (record.kind === "request" && record.direction === "toRuntime" && record.body.kind === "dispose") {
45
65
  disposing = true;
46
66
  }
47
- for (const observer of observers) {
48
- deliver(observer, retained);
49
- }
67
+ // A synchronous observer may withdraw before an adapter drains. Its new
68
+ // records are retained immediately, but every observer sees seq order.
69
+ publish(retained);
50
70
  return retained;
51
71
  };
52
72
  const unreachable = () => {
@@ -63,26 +83,34 @@ export function createSessionKernel(sessionId = globalThis.crypto.randomUUID(),
63
83
  request,
64
84
  respond,
65
85
  async control(body, decide, at) {
66
- const blocked = unreachable();
86
+ const blocked = unreachable() ?? carriesRefusal(body, log, at?.sessionId ?? sessionId, at?.agentPath ?? []);
67
87
  const issued = request("toRuntime", body, at);
68
88
  const decided = blocked ?? emptyInputRefusal(body) ?? await settle(decide, { ...issued, body });
69
89
  return { request: issued, response: respond(issued.id, decided, at) };
70
90
  },
71
91
  unreachable,
72
92
  rawEvents(observer, cursor) {
93
+ let afterSeq = cursor?.afterSeq ?? seq - 1;
94
+ const receive = (record) => {
95
+ if (record.seq <= afterSeq) {
96
+ return;
97
+ }
98
+ afterSeq = record.seq;
99
+ deliver(observer, record);
100
+ };
73
101
  if (cursor !== undefined) {
74
102
  if (cursor.sessionId !== sessionId) {
75
103
  throw new Error(`cursor belongs to session ${cursor.sessionId}, not ${sessionId}`);
76
104
  }
77
105
  for (const record of log) {
78
106
  if (record.seq > cursor.afterSeq) {
79
- deliver(observer, record);
107
+ receive(record);
80
108
  }
81
109
  }
82
110
  }
83
- observers.add(observer);
111
+ observers.add(receive);
84
112
  return () => {
85
- observers.delete(observer);
113
+ observers.delete(receive);
86
114
  };
87
115
  },
88
116
  records: () => log,
@@ -1 +1 @@
1
- {"version":3,"file":"session-kernel.js","sourceRoot":"","sources":["../../src/shared/session-kernel.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session-kernel.js","sourceRoot":"","sources":["../../src/shared/session-kernel.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import type { RefusableSessionOption, RefusedSessionOptions } from "../contracts/runtime.js";
2
2
  import type { SessionOptions } from "../contracts/session.js";
3
- /** Whether `options` gives `key`: any defined value (including an empty schema), a non-empty map for `env`, a non-empty list for list options, an entry carrying a credential for `mcpServerCredentials`. */
3
+ /** Whether `options` gives `key`: any defined value (including an empty schema), a non-empty map for `env`, a non-empty list for list options, an entry carrying a credential for `mcpServerCredentials`, `exclude` for `userConfiguration`. */
4
4
  export declare function sessionOptionGiven(options: SessionOptions, key: RefusableSessionOption): boolean;
5
5
  /**
6
6
  * Reject an open that gives an option the runtime declares refused: an
@@ -1 +1 @@
1
- {"version":3,"file":"session-options.d.ts","sourceRoot":"","sources":["../../src/shared/session-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAS9D,6MAA6M;AAC7M,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAWhG;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAWlG;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAI9D"}
1
+ {"version":3,"file":"session-options.d.ts","sourceRoot":"","sources":["../../src/shared/session-options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAC7F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAS9D,gPAAgP;AAChP,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,sBAAsB,GAAG,OAAO,CAYhG;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,cAAc,GAAG,IAAI,CAWlG;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAI9D"}
@@ -4,8 +4,11 @@ import { hasMcpCredentials } from "./mcp-servers.js";
4
4
  function credentialEntries(options) {
5
5
  return (options.mcpServers ?? []).filter((server) => hasMcpCredentials(server)).map((server) => server.name);
6
6
  }
7
- /** Whether `options` gives `key`: any defined value (including an empty schema), a non-empty map for `env`, a non-empty list for list options, an entry carrying a credential for `mcpServerCredentials`. */
7
+ /** Whether `options` gives `key`: any defined value (including an empty schema), a non-empty map for `env`, a non-empty list for list options, an entry carrying a credential for `mcpServerCredentials`, `exclude` for `userConfiguration`. */
8
8
  export function sessionOptionGiven(options, key) {
9
+ if (key === "userConfiguration") {
10
+ return options.userConfiguration === "exclude";
11
+ }
9
12
  if (key === "env") {
10
13
  return options.env !== undefined && Object.keys(options.env).length > 0;
11
14
  }
@@ -25,7 +28,7 @@ export function sessionOptionGiven(options, key) {
25
28
  * `mcpServerCredentials`.
26
29
  */
27
30
  export function refuseSessionOptions(refused, options) {
28
- for (const key of ["systemPrompt", "appendSystemPrompt", "env", "mcpServers", "mcpServerCredentials", "disallowedTools", "launchArgs", "serviceTier", "additionalDirectories", "outputSchema", "name"]) {
31
+ for (const key of ["systemPrompt", "appendSystemPrompt", "env", "mcpServers", "mcpServerCredentials", "disallowedTools", "launchArgs", "serviceTier", "additionalDirectories", "outputSchema", "name", "userConfiguration"]) {
29
32
  const reason = refused[key];
30
33
  if (reason === undefined || !sessionOptionGiven(options, key)) {
31
34
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"session-options.js","sourceRoot":"","sources":["../../src/shared/session-options.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,qHAAqH;AACrH,SAAS,iBAAiB,CAAC,OAAuB;IAChD,OAAO,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC/G,CAAC;AAED,6MAA6M;AAC7M,MAAM,UAAU,kBAAkB,CAAC,OAAuB,EAAE,GAA2B;IACrF,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,OAAO,OAAO,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,GAAG,KAAK,sBAAsB,EAAE,CAAC;QACnC,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,iBAAiB,IAAI,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,uBAAuB,EAAE,CAAC;QACjH,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;AACpC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA8B,EAAE,OAAuB;IAC1F,KAAK,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,oBAAoB,EAAE,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,CAAU,EAAE,CAAC;QAChN,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;YAC9D,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,sBAAsB,EAAE,CAAC;YACnC,MAAM,IAAI,sBAAsB,CAAC,YAAY,EAAE,GAAG,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7G,CAAC;QACD,MAAM,IAAI,sBAAsB,CAAC,GAAG,EAAE,GAAG,KAAK,iBAAiB,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACtI,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAuB;IACtD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACpG,MAAM,IAAI,sBAAsB,CAAC,MAAM,EAAE,kDAAkD,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"session-options.js","sourceRoot":"","sources":["../../src/shared/session-options.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,qHAAqH;AACrH,SAAS,iBAAiB,CAAC,OAAuB;IAChD,OAAO,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC/G,CAAC;AAED,gPAAgP;AAChP,MAAM,UAAU,kBAAkB,CAAC,OAAuB,EAAE,GAA2B;IACrF,IAAI,GAAG,KAAK,mBAAmB,EAAE,CAAC;QAAC,OAAO,OAAO,CAAC,iBAAiB,KAAK,SAAS,CAAC;IAAC,CAAC;IACpF,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;QAClB,OAAO,OAAO,CAAC,GAAG,KAAK,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,GAAG,KAAK,sBAAsB,EAAE,CAAC;QACnC,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,iBAAiB,IAAI,GAAG,KAAK,YAAY,IAAI,GAAG,KAAK,uBAAuB,EAAE,CAAC;QACjH,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/D,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;AACpC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAA8B,EAAE,OAAuB;IAC1F,KAAK,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,oBAAoB,EAAE,KAAK,EAAE,YAAY,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE,uBAAuB,EAAE,cAAc,EAAE,MAAM,EAAE,mBAAmB,CAAU,EAAE,CAAC;QACrO,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,SAAS,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;YAC9D,SAAS;QACX,CAAC;QACD,IAAI,GAAG,KAAK,sBAAsB,EAAE,CAAC;YACnC,MAAM,IAAI,sBAAsB,CAAC,YAAY,EAAE,GAAG,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7G,CAAC;QACD,MAAM,IAAI,sBAAsB,CAAC,GAAG,EAAE,GAAG,KAAK,iBAAiB,CAAC,CAAC,CAAC,GAAG,MAAM,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACtI,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAuB;IACtD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QACpG,MAAM,IAAI,sBAAsB,CAAC,MAAM,EAAE,kDAAkD,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import type { RuntimeEventBody } from "../../contracts/session.js";
2
- import { type JsonRecord } from "../../shared/json.js";
2
+ import { type JsonRecord } from "../json.js";
3
3
  interface PartialText {
4
4
  readonly type: "text" | "thinking";
5
5
  readonly text: string;
@@ -15,13 +15,13 @@ interface PartialMessage {
15
15
  readonly blocks: ReadonlyMap<number, PartialBlock>;
16
16
  }
17
17
  /** Only unfinished API messages, per agent lane. Children can stream while root is idle. */
18
- export type ClaudePartials = ReadonlyMap<string, PartialMessage>;
18
+ export type StreamJsonPartials = ReadonlyMap<string, PartialMessage>;
19
19
  export declare function contentBlocks(message: JsonRecord): readonly JsonRecord[];
20
20
  /** Pure content projection; the caller records the original frame even if events is empty. */
21
- export declare function claudeContent(partials: ClaudePartials, message: JsonRecord, agentPath: readonly string[]): {
22
- partials: ClaudePartials;
21
+ export declare function streamJsonContent(partials: StreamJsonPartials, message: JsonRecord, agentPath: readonly string[], assistantAfterMessageStop?: boolean, partialMessageIds?: boolean): {
22
+ partials: StreamJsonPartials;
23
23
  events: RuntimeEventBody[];
24
24
  };
25
- export declare function claudeToolResults(message: JsonRecord): RuntimeEventBody[];
25
+ export declare function streamJsonToolResults(message: JsonRecord): RuntimeEventBody[];
26
26
  export {};
27
27
  //# sourceMappingURL=content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../../src/shared/stream-json/content.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAEvD,UAAU,WAAW;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AACD,UAAU,WAAW;IACnB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AACD,KAAK,YAAY,GAAG,WAAW,GAAG,WAAW,CAAC;AAC9C,UAAU,cAAc;IACtB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACpD;AACD,4FAA4F;AAC5F,MAAM,MAAM,kBAAkB,GAAG,WAAW,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAErE,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,SAAS,UAAU,EAAE,CAGxE;AA0GD,8FAA8F;AAC9F,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,MAAM,EAAE,EAAE,yBAAyB,UAAQ,EAAE,iBAAiB,UAAO,GAAG;IAAE,QAAQ,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,gBAAgB,EAAE,CAAA;CAAE,CAiB5O;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,UAAU,GAAG,gBAAgB,EAAE,CAkB7E"}
@@ -1,5 +1,5 @@
1
- import { toolContent } from "../../shared/tool-output.js";
2
- import { asRecord } from "../../shared/json.js";
1
+ import { toolContent } from "../tool-output.js";
2
+ import { asRecord } from "../json.js";
3
3
  export function contentBlocks(message) {
4
4
  const content = asRecord(message.message)?.content;
5
5
  return Array.isArray(content) ? content.map((block) => asRecord(block)).filter((block) => block !== null) : [];
@@ -11,7 +11,7 @@ function textEvent(type, text, id) {
11
11
  : { kind: "reasoning", content: { kind: "text", text }, ...identity };
12
12
  }
13
13
  /** Keep only a tool's identity: argument fragments are emitted, never parsed or accumulated here. */
14
- function streamContent(previous, event) {
14
+ function streamContent(previous, event, partialMessageIds) {
15
15
  if (event.type === "message_start") {
16
16
  const id = asRecord(event.message)?.id;
17
17
  return { message: { ...(typeof id === "string" ? { id } : {}), blocks: new Map() }, events: [] };
@@ -39,19 +39,20 @@ function streamContent(previous, event) {
39
39
  }
40
40
  const value = body?.[type];
41
41
  const text = typeof value === "string" ? value : "";
42
- const prior = event.type === "content_block_start" ? undefined : blocks.get(event.index);
42
+ const candidate = event.type === "content_block_start" ? undefined : blocks.get(event.index);
43
+ const prior = !partialMessageIds && candidate?.type === type && candidate.finalized ? undefined : candidate;
43
44
  blocks.set(event.index, { type, text: (prior?.type === type ? prior.text : "") + text, finalized: false });
44
45
  return { message: { ...message, blocks }, events: text.length === 0 ? [] : [textEvent(type, text, message.id)] };
45
46
  }
46
47
  /** Native 2.1.293 emits one completed block just before its content_block_stop,
47
48
  * with the same API id for every block. Consume that block's streamed prefix
48
49
  * once, rather than treating an entire message id as already projected. */
49
- function finalContent(message, partial) {
50
+ function finalContent(message, partial, partialMessageIds) {
50
51
  const id = asRecord(message.message)?.id;
51
52
  const identity = typeof id === "string" ? { messageId: id } : {};
52
53
  const blocks = new Map(partial?.blocks);
53
54
  const remainder = (type, full) => {
54
- if (typeof id !== "string" || partial?.id !== id) {
55
+ if (typeof id !== "string" || (partial?.id !== id && (partialMessageIds || partial?.id !== undefined))) {
55
56
  return full;
56
57
  }
57
58
  const pending = [...blocks].find((entry) => entry[1].type === type && !entry[1].finalized);
@@ -111,9 +112,14 @@ function finalContent(message, partial) {
111
112
  return { message: partial === undefined ? undefined : { ...partial, blocks }, events };
112
113
  }
113
114
  /** Pure content projection; the caller records the original frame even if events is empty. */
114
- export function claudeContent(partials, message, agentPath) {
115
+ export function streamJsonContent(partials, message, agentPath, assistantAfterMessageStop = false, partialMessageIds = true) {
115
116
  const lane = JSON.stringify(agentPath);
116
117
  if (message.type === "stream_event" && asRecord(message.event)?.type === "message_stop") {
118
+ // Retain at most the latest API message in this lane until its final
119
+ // assistant arrives; the next message_start replaces it unconditionally.
120
+ if (assistantAfterMessageStop) {
121
+ return { partials, events: [] };
122
+ }
117
123
  // Every completed assistant block precedes this native boundary. Only
118
124
  // this agent is done; other agents may still have partial output pending.
119
125
  const remaining = new Map(partials);
@@ -122,11 +128,11 @@ export function claudeContent(partials, message, agentPath) {
122
128
  }
123
129
  const previous = partials.get(lane);
124
130
  const next = message.type === "stream_event"
125
- ? streamContent(previous, asRecord(message.event) ?? {})
126
- : finalContent(message, previous);
131
+ ? streamContent(previous, asRecord(message.event) ?? {}, partialMessageIds)
132
+ : finalContent(message, previous, partialMessageIds);
127
133
  return { partials: next.message === undefined ? partials : new Map([...partials, [lane, next.message]]), events: next.events };
128
134
  }
129
- export function claudeToolResults(message) {
135
+ export function streamJsonToolResults(message) {
130
136
  const out = [];
131
137
  for (const block of contentBlocks(message)) {
132
138
  if (block.type === "tool_result" && typeof block.tool_use_id === "string") {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/shared/stream-json/content.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { RuntimeEventBody } from "../../contracts/session.js";
2
+ import type { LoadedImage } from "../input-images.js";
3
+ import type { JsonRecord } from "../json.js";
4
+ import type { StreamJsonProjectionState } from "./state.js";
5
+ /** Control plane → state: a prompt clears stale abort intent and starts a new native input attempt. */
6
+ export declare function streamJsonPrompted<S extends StreamJsonProjectionState>(state: S, inputId?: string, prompted?: boolean, commandLifecycle?: boolean): S;
7
+ /** Keep an unclaimed root init until queued can prove it belongs to a spontaneous turn. */
8
+ export declare function streamJsonInitialized<S extends StreamJsonProjectionState>(state: S, root: boolean, commandLifecycle?: boolean): {
9
+ readonly state: S;
10
+ readonly events: readonly RuntimeEventBody[];
11
+ };
12
+ /** A replay/completed without queued or started since this write is a duplicate-id refusal in the lifecycle dialect. */
13
+ export declare function streamJsonDuplicateInput<S extends StreamJsonProjectionState>(state: S, inputId: string, root: boolean, duplicateReason: string): {
14
+ readonly state: S;
15
+ readonly events: readonly RuntimeEventBody[];
16
+ };
17
+ /** Only prompt-like writes own a turn. A steer can be started inside the current turn. */
18
+ export declare function streamJsonInputLifecycle<S extends StreamJsonProjectionState>(state: S, message: JsonRecord, root: boolean, duplicateReason: string): {
19
+ readonly state: S;
20
+ readonly events: readonly RuntimeEventBody[];
21
+ };
22
+ /** One stream-json user message; images go before the text, as the Messages API recommends. */
23
+ export declare function streamJsonUserMessage(text: string, inputId?: string, images?: readonly LoadedImage[]): string;
24
+ //# sourceMappingURL=input-lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-lifecycle.d.ts","sourceRoot":"","sources":["../../../src/shared/stream-json/input-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D,uGAAuG;AACvG,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,yBAAyB,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,UAAO,EAAE,gBAAgB,UAAO,GAAG,CAAC,CAK/I;AAED,2FAA2F;AAC3F,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,yBAAyB,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,UAAO,GAAG;IAC5H,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACjE,CAUA;AAWD,wHAAwH;AACxH,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,yBAAyB,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,GAAG;IAChJ,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACjE,CAKA;AAED,0FAA0F;AAC1F,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,yBAAyB,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,GAAG;IACpJ,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACjE,CAyBA;AAED,+FAA+F;AAC/F,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,GAAE,SAAS,WAAW,EAAO,GAAG,MAAM,CAYjH"}
@@ -1,15 +1,19 @@
1
1
  /** Control plane → state: a prompt clears stale abort intent and starts a new native input attempt. */
2
- export function claudePrompted(state, inputId, prompted = true) {
2
+ export function streamJsonPrompted(state, inputId, prompted = true, commandLifecycle = true) {
3
3
  return { ...state, abortRequested: false, turnActive: prompted, unclaimedInit: false, promptInputId: inputId ?? null, pendingInputId: null,
4
- promptInputs: inputId === undefined ? state.promptInputs : new Set([...state.promptInputs, inputId]),
5
- unstartedInputs: inputId === undefined ? state.unstartedInputs : new Set([...state.unstartedInputs, inputId]),
6
- unacknowledgedInputs: inputId === undefined ? state.unacknowledgedInputs : new Set([...state.unacknowledgedInputs, inputId]) };
4
+ promptInputs: !commandLifecycle || inputId === undefined ? state.promptInputs : new Set([...state.promptInputs, inputId]),
5
+ unstartedInputs: !commandLifecycle || inputId === undefined ? state.unstartedInputs : new Set([...state.unstartedInputs, inputId]),
6
+ unacknowledgedInputs: !commandLifecycle || inputId === undefined ? state.unacknowledgedInputs : new Set([...state.unacknowledgedInputs, inputId]) };
7
7
  }
8
8
  /** Keep an unclaimed root init until queued can prove it belongs to a spontaneous turn. */
9
- export function claudeInitialized(state, root) {
9
+ export function streamJsonInitialized(state, root, commandLifecycle = true) {
10
10
  if (!root) {
11
11
  return { state, events: [] };
12
12
  }
13
+ if (!commandLifecycle) {
14
+ return { state: { ...state, turnActive: true, nativeTurnActive: true },
15
+ events: [{ kind: "turn_active", ...(state.promptInputId === null ? {} : { inputId: state.promptInputId }) }] };
16
+ }
13
17
  const spontaneous = !state.turnActive;
14
18
  const unclaimedInit = state.unclaimedInit || (!spontaneous && !state.nativeTurnActive && state.promptInputId !== null && state.unstartedInputs.has(state.promptInputId));
15
19
  return { state: { ...state, turnActive: true, nativeTurnActive: true, unclaimedInit },
@@ -26,15 +30,15 @@ function forgetInput(state, inputId) {
26
30
  ...(state.promptInputId === inputId ? { promptInputId: null, turnActive: state.nativeTurnActive, unclaimedInit: false } : {}),
27
31
  ...(state.pendingInputId === inputId ? { pendingInputId: null } : {}) };
28
32
  }
29
- /** A replay/completed without queued or started since this write is Claude's duplicate-id refusal. */
30
- export function claudeDuplicateInput(state, inputId, root) {
33
+ /** A replay/completed without queued or started since this write is a duplicate-id refusal in the lifecycle dialect. */
34
+ export function streamJsonDuplicateInput(state, inputId, root, duplicateReason) {
31
35
  return root && state.promptInputs.has(inputId) && state.unacknowledgedInputs.has(inputId)
32
36
  ? { state: forgetInput(state, inputId), events: [{ kind: "input_dropped", inputId, reason: "runtime_refused", failure: "invalid_request",
33
- message: "claude ignored the input: its inputId was already used in this session" }] }
37
+ message: duplicateReason }] }
34
38
  : { state, events: [] };
35
39
  }
36
40
  /** Only prompt-like writes own a turn. A steer can be started inside the current turn. */
37
- export function claudeInputLifecycle(state, message, root) {
41
+ export function streamJsonInputLifecycle(state, message, root, duplicateReason) {
38
42
  const inputId = typeof message.command_uuid === "string" ? message.command_uuid : null;
39
43
  if (inputId === null || !state.promptInputs.has(inputId) || !root) {
40
44
  return { state, events: [] };
@@ -59,13 +63,13 @@ export function claudeInputLifecycle(state, message, root) {
59
63
  }
60
64
  // completed never ends a turn; without queued/started it confirms an ignored duplicate.
61
65
  if (message.state === "completed") {
62
- const duplicate = claudeDuplicateInput(state, inputId, root);
66
+ const duplicate = streamJsonDuplicateInput(state, inputId, root, duplicateReason);
63
67
  return { events: duplicate.events, state: forgetInput(duplicate.state, inputId) };
64
68
  }
65
69
  return { state, events: [] };
66
70
  }
67
71
  /** One stream-json user message; images go before the text, as the Messages API recommends. */
68
- export function claudeUserMessage(text, inputId, images = []) {
72
+ export function streamJsonUserMessage(text, inputId, images = []) {
69
73
  return `${JSON.stringify({
70
74
  type: "user",
71
75
  ...(inputId === undefined ? {} : { uuid: inputId }),
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-lifecycle.js","sourceRoot":"","sources":["../../../src/shared/stream-json/input-lifecycle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { RuntimeEventBody, TurnOutcome, SessionCapabilities, Session, FrameBody } from "../../contracts/session.js";
2
+ import type { LoadedImage } from "../input-images.js";
3
+ import type { JsonRecord } from "../json.js";
4
+ import type { StreamJsonProjectionState } from "./state.js";
5
+ export interface StreamJsonUpdate<S> {
6
+ readonly state: S;
7
+ readonly events: readonly RuntimeEventBody[];
8
+ }
9
+ /** Runtime meanings, never selected by a runtime name inside the shared fold. */
10
+ export interface StreamJsonProjectionProfile<S extends StreamJsonProjectionState> {
11
+ readonly name: string;
12
+ readonly duplicateReason: string;
13
+ /** Whether the native protocol acknowledges inputs with command_lifecycle frames. */
14
+ readonly commandLifecycle?: boolean;
15
+ /** Whether init starts a turn; false for dialects that emit it while idle and report command_lifecycle starts. */
16
+ readonly initStartsTurn?: boolean;
17
+ /** Keep the streamed prefix when a dialect emits its full assistant after message_stop. */
18
+ readonly assistantAfterMessageStop?: boolean;
19
+ /** False when native partial events omit message_start and the API message id. */
20
+ readonly partialMessageIds?: boolean;
21
+ readonly assistant: (state: S, message: JsonRecord, root: boolean) => S;
22
+ readonly result: (state: S, message: JsonRecord, agentPath: readonly string[]) => {
23
+ readonly state: S;
24
+ readonly outcome: TurnOutcome;
25
+ readonly before: readonly RuntimeEventBody[];
26
+ readonly after: readonly RuntimeEventBody[];
27
+ };
28
+ readonly init: (message: JsonRecord) => readonly RuntimeEventBody[];
29
+ readonly compacted: (state: S, root: boolean) => S;
30
+ readonly system: (state: S, message: JsonRecord, agentPath: readonly string[]) => StreamJsonUpdate<S>;
31
+ readonly other: (state: S, message: JsonRecord) => StreamJsonUpdate<S>;
32
+ }
33
+ /** Process-specific startup and capabilities; line framing and process ownership use LineProcess. */
34
+ export interface StreamJsonSessionProfile<S extends StreamJsonProjectionState> {
35
+ readonly projection: StreamJsonProjectionProfile<S>;
36
+ readonly initial: S;
37
+ readonly capabilities: SessionCapabilities;
38
+ readonly steer: boolean;
39
+ readonly userMessage?: (text: string, inputId?: string, images?: readonly LoadedImage[]) => string;
40
+ readonly cancelQueuedCapability?: string;
41
+ /** Private configuration/account responses must be consumed before public projection. */
42
+ readonly consume: (message: JsonRecord) => boolean;
43
+ readonly open: (projection: {
44
+ current(): S;
45
+ replace(state: S): void;
46
+ report(body: FrameBody): void;
47
+ }) => Promise<void>;
48
+ readonly exited: (code: number | null) => void;
49
+ readonly disposing: () => void;
50
+ readonly close?: (active: boolean) => Promise<void>;
51
+ readonly contextBreakdown?: Session["contextBreakdown"];
52
+ /** A native allow response, already in the runtime's own wire shape; null leaves the request unanswered. */
53
+ readonly permissionResponse?: (requestId: string, request: JsonRecord) => JsonRecord | null;
54
+ }
55
+ //# sourceMappingURL=profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/shared/stream-json/profile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/shared/stream-json/profile.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import type { FrameBody, ResponseBody } from "../../contracts/session.js";
2
+ import { type JsonRecord } from "../json.js";
3
+ import type { StreamJsonProjectionState } from "./state.js";
4
+ import type { StreamJsonProjectionProfile } from "./profile.js";
5
+ export type ProjectionCommand = {
6
+ readonly kind: "frame";
7
+ readonly body: FrameBody;
8
+ readonly agentPath: readonly string[];
9
+ }
10
+ /** The runtime answered one of our `control_request`s (interrupt): the response to that request record. */
11
+ | {
12
+ readonly kind: "respond";
13
+ readonly requestId: string;
14
+ readonly body: ResponseBody;
15
+ }
16
+ /** The runtime asked US something (`control_request`): a toApp request record, verbatim. */
17
+ | {
18
+ readonly kind: "toApp";
19
+ readonly id: string;
20
+ readonly type: string;
21
+ readonly native: unknown;
22
+ };
23
+ /** One original frame, ordered projected facts, and control commands. No transport or vendor state. */
24
+ export declare function foldStreamJsonStdout<S extends StreamJsonProjectionState>(profile: StreamJsonProjectionProfile<S>, state: S, message: JsonRecord): {
25
+ readonly state: S;
26
+ readonly commands: readonly ProjectionCommand[];
27
+ };
28
+ //# sourceMappingURL=projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projection.d.ts","sourceRoot":"","sources":["../../../src/shared/stream-json/projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1E,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAGvD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAEhE,MAAM,MAAM,iBAAiB,GACzB;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE;AAC7F,2GAA2G;GACzG;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;CAAE;AACvF,4FAA4F;GAC1F;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AAgCrG,uGAAuG;AACvG,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,yBAAyB,EACtE,OAAO,EAAE,2BAA2B,CAAC,CAAC,CAAC,EACvC,KAAK,EAAE,CAAC,EACR,OAAO,EAAE,UAAU,GAClB;IAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,iBAAiB,EAAE,CAAA;CAAE,CA2FxE"}
@@ -0,0 +1,122 @@
1
+ import { asRecord } from "../json.js";
2
+ import { streamJsonDuplicateInput, streamJsonInitialized, streamJsonInputLifecycle } from "./input-lifecycle.js";
3
+ import { streamJsonContent, streamJsonToolResults, contentBlocks } from "./content.js";
4
+ /** The agent a frame belongs to: root, or the Task call that spawned it (nested through the call's own agent). */
5
+ function attributionOf(state, message) {
6
+ const parent = message.parent_tool_use_id;
7
+ if (typeof parent !== "string" || parent.length === 0) {
8
+ return [];
9
+ }
10
+ return [...(state.agents.get(parent) ?? []), parent];
11
+ }
12
+ function rememberToolUses(state, message, agentPath) {
13
+ const event = asRecord(message.event);
14
+ const partial = event?.type === "content_block_start" ? asRecord(event.content_block) : null;
15
+ const ids = (partial === null ? contentBlocks(message) : [partial])
16
+ .filter((block) => block.type === "tool_use" && typeof block.id === "string")
17
+ .map((block) => String(block.id));
18
+ if (ids.length === 0) {
19
+ return state;
20
+ }
21
+ const agents = new Map(state.agents);
22
+ for (const id of ids) {
23
+ agents.set(id, agentPath);
24
+ }
25
+ return { ...state, agents };
26
+ }
27
+ function frameType(message) {
28
+ const type = typeof message.type === "string" ? message.type : "unknown";
29
+ return typeof message.subtype === "string" ? `${type}/${message.subtype}` : type;
30
+ }
31
+ /** One original frame, ordered projected facts, and control commands. No transport or vendor state. */
32
+ export function foldStreamJsonStdout(profile, state, message) {
33
+ const type = frameType(message);
34
+ const agentPath = attributionOf(state, message);
35
+ const event = (body, next = state) => ({ state: next, commands: [{ kind: "frame", body: { type, native: message, ...body }, agentPath }] });
36
+ switch (String(message.type)) {
37
+ case "command_lifecycle": {
38
+ const folded = streamJsonInputLifecycle(state, message, agentPath.length === 0, profile.duplicateReason);
39
+ return event({ events: folded.events }, folded.state);
40
+ }
41
+ case "assistant":
42
+ case "stream_event": {
43
+ const content = streamJsonContent(state.partials, message, agentPath, profile.assistantAfterMessageStop, profile.partialMessageIds);
44
+ const next = rememberToolUses({ ...state, partials: content.partials }, message, agentPath);
45
+ return event({ events: content.events }, message.type === "assistant" ? profile.assistant(next, message, agentPath.length === 0) : next);
46
+ }
47
+ case "user": {
48
+ const views = [...streamJsonToolResults(message)];
49
+ const body = asRecord(message.message);
50
+ if (message.isReplay === true && typeof message.uuid === "string" && Array.isArray(body?.content)) {
51
+ const input = body.content.map((part) => asRecord(part)).filter((part) => part?.type === "text").map((part) => typeof part?.text === "string" ? part.text : "").join("");
52
+ views.push({ kind: "user_message", input, inputId: message.uuid, nativeMessageId: message.uuid, evidence: "acknowledged" });
53
+ }
54
+ const duplicate = message.isReplay === true && typeof message.uuid === "string"
55
+ ? streamJsonDuplicateInput(state, message.uuid, agentPath.length === 0, profile.duplicateReason) : { state, events: [] };
56
+ return event({ events: [...views, ...duplicate.events] }, duplicate.state);
57
+ }
58
+ case "result": {
59
+ const result = profile.result(state, message, agentPath);
60
+ return event({ events: [...result.before, { kind: "turn_ended", outcome: result.outcome }, ...result.after] }, {
61
+ ...result.state,
62
+ ...(agentPath.length === 0 ? { turnActive: false, nativeTurnActive: false, unclaimedInit: false, ...(state.pendingInputId === null ? { promptInputId: null } : {}) } : {}),
63
+ abortRequested: false,
64
+ });
65
+ }
66
+ case "system": {
67
+ if (message.subtype === "compact_boundary") {
68
+ // This boundary reports completion, not the start of compaction.
69
+ const trigger = asRecord(message.compact_metadata)?.trigger;
70
+ return event({ events: [{ kind: "compaction_ended", outcome: "completed", ...(typeof trigger === "string" ? { trigger } : {}) }] }, profile.compacted(state, agentPath.length === 0));
71
+ }
72
+ if (message.subtype === "init") {
73
+ const initialized = profile.initStartsTurn === false ? { state, events: [] } : streamJsonInitialized(state, agentPath.length === 0, profile.commandLifecycle !== false);
74
+ return event({ events: [...initialized.events,
75
+ ...(typeof message.model === "string" ? [{ kind: "model", model: message.model }] : []),
76
+ ...profile.init(message)] }, initialized.state);
77
+ }
78
+ const next = profile.system(state, message, agentPath);
79
+ return event({ events: next.events }, next.state);
80
+ }
81
+ case "control_response": {
82
+ // The runtime answering one of OUR control_requests (interrupt): the frame IS
83
+ // the response record (native verbatim); one frame, one record, so it
84
+ // is not also recorded as an event. A control_response we cannot pair
85
+ // is recorded as a plain event.
86
+ const response = asRecord(message.response);
87
+ const requestId = typeof response?.request_id === "string" ? response.request_id : null;
88
+ if (requestId === null) {
89
+ return event({ events: [] });
90
+ }
91
+ const error = typeof response?.error === "string" ? response.error : null;
92
+ return { state, commands: [{
93
+ kind: "respond",
94
+ requestId,
95
+ body: response?.subtype === "error" || error !== null
96
+ ? { kind: "rejected", code: "runtime_refused", reason: error ?? "control request failed", native: message }
97
+ : { kind: "accepted", native: message },
98
+ }] };
99
+ }
100
+ case "control_request": {
101
+ // A runtime request is always visible, whether or not the profile supplies a reply.
102
+ const id = typeof message.request_id === "string" ? message.request_id : `${profile.name}-${String(Date.now())}`;
103
+ const request = asRecord(message.request);
104
+ const subtype = typeof request?.subtype === "string" ? request.subtype : "control_request";
105
+ return {
106
+ state,
107
+ commands: [
108
+ { kind: "frame", body: { type, native: message, events: [] }, agentPath },
109
+ { kind: "toApp", id, type: subtype, native: message },
110
+ ],
111
+ };
112
+ }
113
+ case "control_cancel_request":
114
+ // The runtime withdrew a request it had sent us (an interrupt cancels a pending question).
115
+ return event({ events: typeof message.request_id === "string" ? [{ kind: "app_request_cancelled", requestId: message.request_id }] : [] });
116
+ default: {
117
+ const next = profile.other(state, message);
118
+ return event({ events: next.events }, next.state);
119
+ }
120
+ }
121
+ }
122
+ //# sourceMappingURL=projection.js.map