@the-open-engine/zeroshot 6.30.1 → 6.31.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 (318) hide show
  1. package/lib/agent-cli-provider/adapters/acp.d.ts.map +1 -1
  2. package/lib/agent-cli-provider/adapters/acp.js +7 -11
  3. package/lib/agent-cli-provider/adapters/acp.js.map +1 -1
  4. package/lib/agent-cli-provider/adapters/omp-policy.d.ts +4 -0
  5. package/lib/agent-cli-provider/adapters/omp-policy.d.ts.map +1 -0
  6. package/lib/agent-cli-provider/adapters/omp-policy.js +47 -0
  7. package/lib/agent-cli-provider/adapters/omp-policy.js.map +1 -0
  8. package/lib/agent-cli-provider/adapters/omp.d.ts.map +1 -1
  9. package/lib/agent-cli-provider/adapters/omp.js +8 -158
  10. package/lib/agent-cli-provider/adapters/omp.js.map +1 -1
  11. package/lib/agent-cli-provider/adapters/pi.d.ts.map +1 -1
  12. package/lib/agent-cli-provider/adapters/pi.js +12 -124
  13. package/lib/agent-cli-provider/adapters/pi.js.map +1 -1
  14. package/lib/agent-cli-provider/assistant-stream.d.ts +27 -0
  15. package/lib/agent-cli-provider/assistant-stream.d.ts.map +1 -0
  16. package/lib/agent-cli-provider/assistant-stream.js +119 -0
  17. package/lib/agent-cli-provider/assistant-stream.js.map +1 -0
  18. package/lib/agent-cli-provider/contract-actions.d.ts.map +1 -1
  19. package/lib/agent-cli-provider/contract-actions.js +42 -1
  20. package/lib/agent-cli-provider/contract-actions.js.map +1 -1
  21. package/lib/agent-cli-provider/contract-invoke.d.ts.map +1 -1
  22. package/lib/agent-cli-provider/contract-invoke.js +68 -38
  23. package/lib/agent-cli-provider/contract-invoke.js.map +1 -1
  24. package/lib/agent-cli-provider/contract-support.d.ts +5 -6
  25. package/lib/agent-cli-provider/contract-support.d.ts.map +1 -1
  26. package/lib/agent-cli-provider/contract-support.js +99 -6
  27. package/lib/agent-cli-provider/contract-support.js.map +1 -1
  28. package/lib/agent-cli-provider/index.d.ts +8 -6
  29. package/lib/agent-cli-provider/index.d.ts.map +1 -1
  30. package/lib/agent-cli-provider/index.js +34 -10
  31. package/lib/agent-cli-provider/index.js.map +1 -1
  32. package/lib/agent-cli-provider/omp/auth-policy.d.ts +31 -0
  33. package/lib/agent-cli-provider/omp/auth-policy.d.ts.map +1 -0
  34. package/lib/agent-cli-provider/omp/auth-policy.js +98 -0
  35. package/lib/agent-cli-provider/omp/auth-policy.js.map +1 -0
  36. package/lib/agent-cli-provider/{omp-release.d.ts → omp/release.d.ts} +1 -1
  37. package/lib/agent-cli-provider/omp/release.d.ts.map +1 -0
  38. package/lib/agent-cli-provider/{omp-release.js → omp/release.js} +1 -1
  39. package/lib/agent-cli-provider/omp/release.js.map +1 -0
  40. package/lib/agent-cli-provider/{omp-rpc-bounds.d.ts → omp/rpc-bounds.d.ts} +1 -1
  41. package/lib/agent-cli-provider/omp/rpc-bounds.d.ts.map +1 -0
  42. package/lib/agent-cli-provider/{omp-rpc-bounds.js → omp/rpc-bounds.js} +1 -1
  43. package/lib/agent-cli-provider/omp/rpc-bounds.js.map +1 -0
  44. package/lib/agent-cli-provider/omp/rpc-driver-channel.d.ts +19 -0
  45. package/lib/agent-cli-provider/omp/rpc-driver-channel.d.ts.map +1 -0
  46. package/lib/agent-cli-provider/omp/rpc-driver-channel.js +109 -0
  47. package/lib/agent-cli-provider/omp/rpc-driver-channel.js.map +1 -0
  48. package/lib/agent-cli-provider/omp/rpc-driver-dispatch.d.ts +27 -0
  49. package/lib/agent-cli-provider/omp/rpc-driver-dispatch.d.ts.map +1 -0
  50. package/lib/agent-cli-provider/omp/rpc-driver-dispatch.js +135 -0
  51. package/lib/agent-cli-provider/omp/rpc-driver-dispatch.js.map +1 -0
  52. package/lib/agent-cli-provider/omp/rpc-driver-runner.d.ts +3 -0
  53. package/lib/agent-cli-provider/omp/rpc-driver-runner.d.ts.map +1 -0
  54. package/lib/agent-cli-provider/omp/rpc-driver-runner.js +205 -0
  55. package/lib/agent-cli-provider/omp/rpc-driver-runner.js.map +1 -0
  56. package/lib/agent-cli-provider/omp/rpc-driver-state.d.ts +80 -0
  57. package/lib/agent-cli-provider/omp/rpc-driver-state.d.ts.map +1 -0
  58. package/lib/agent-cli-provider/omp/rpc-driver-state.js +86 -0
  59. package/lib/agent-cli-provider/omp/rpc-driver-state.js.map +1 -0
  60. package/lib/agent-cli-provider/omp/rpc-driver.d.ts +3 -0
  61. package/lib/agent-cli-provider/omp/rpc-driver.d.ts.map +1 -0
  62. package/lib/agent-cli-provider/omp/rpc-driver.js +6 -0
  63. package/lib/agent-cli-provider/omp/rpc-driver.js.map +1 -0
  64. package/lib/agent-cli-provider/omp/rpc-event-lines.d.ts +8 -0
  65. package/lib/agent-cli-provider/omp/rpc-event-lines.d.ts.map +1 -0
  66. package/lib/agent-cli-provider/omp/rpc-event-lines.js +59 -0
  67. package/lib/agent-cli-provider/omp/rpc-event-lines.js.map +1 -0
  68. package/lib/agent-cli-provider/omp/rpc-events.d.ts +16 -0
  69. package/lib/agent-cli-provider/omp/rpc-events.d.ts.map +1 -0
  70. package/lib/agent-cli-provider/omp/rpc-events.js +115 -0
  71. package/lib/agent-cli-provider/omp/rpc-events.js.map +1 -0
  72. package/lib/agent-cli-provider/{omp-rpc-protocol.d.ts → omp/rpc-protocol-contract.d.ts} +1 -13
  73. package/lib/agent-cli-provider/omp/rpc-protocol-contract.d.ts.map +1 -0
  74. package/lib/agent-cli-provider/omp/rpc-protocol-contract.js +54 -0
  75. package/lib/agent-cli-provider/omp/rpc-protocol-contract.js.map +1 -0
  76. package/lib/agent-cli-provider/omp/rpc-protocol.d.ts +15 -0
  77. package/lib/agent-cli-provider/omp/rpc-protocol.d.ts.map +1 -0
  78. package/lib/agent-cli-provider/omp/rpc-protocol.js +208 -0
  79. package/lib/agent-cli-provider/omp/rpc-protocol.js.map +1 -0
  80. package/lib/agent-cli-provider/{omp-rpc-session.d.ts → omp/rpc-session.d.ts} +1 -1
  81. package/lib/agent-cli-provider/omp/rpc-session.d.ts.map +1 -0
  82. package/lib/agent-cli-provider/{omp-rpc-session.js → omp/rpc-session.js} +1 -1
  83. package/lib/agent-cli-provider/omp/rpc-session.js.map +1 -0
  84. package/lib/agent-cli-provider/omp/sdk-contract.d.ts +34 -0
  85. package/lib/agent-cli-provider/omp/sdk-contract.d.ts.map +1 -0
  86. package/lib/agent-cli-provider/omp/sdk-contract.js +81 -0
  87. package/lib/agent-cli-provider/omp/sdk-contract.js.map +1 -0
  88. package/lib/agent-cli-provider/omp/sdk-process-credentials.d.ts +6 -0
  89. package/lib/agent-cli-provider/omp/sdk-process-credentials.d.ts.map +1 -0
  90. package/lib/agent-cli-provider/omp/sdk-process-credentials.js +44 -0
  91. package/lib/agent-cli-provider/omp/sdk-process-credentials.js.map +1 -0
  92. package/lib/agent-cli-provider/omp/sdk-process-error.d.ts +5 -0
  93. package/lib/agent-cli-provider/omp/sdk-process-error.d.ts.map +1 -0
  94. package/lib/agent-cli-provider/omp/sdk-process-error.js +13 -0
  95. package/lib/agent-cli-provider/omp/sdk-process-error.js.map +1 -0
  96. package/lib/agent-cli-provider/omp/sdk-process-io.d.ts +18 -0
  97. package/lib/agent-cli-provider/omp/sdk-process-io.d.ts.map +1 -0
  98. package/lib/agent-cli-provider/omp/sdk-process-io.js +80 -0
  99. package/lib/agent-cli-provider/omp/sdk-process-io.js.map +1 -0
  100. package/lib/agent-cli-provider/omp/sdk-process-private-runtime.d.ts +51 -0
  101. package/lib/agent-cli-provider/omp/sdk-process-private-runtime.d.ts.map +1 -0
  102. package/lib/agent-cli-provider/omp/sdk-process-private-runtime.js +154 -0
  103. package/lib/agent-cli-provider/omp/sdk-process-private-runtime.js.map +1 -0
  104. package/lib/agent-cli-provider/omp/sdk-process-result.d.ts +26 -0
  105. package/lib/agent-cli-provider/omp/sdk-process-result.d.ts.map +1 -0
  106. package/lib/agent-cli-provider/omp/sdk-process-result.js +117 -0
  107. package/lib/agent-cli-provider/omp/sdk-process-result.js.map +1 -0
  108. package/lib/agent-cli-provider/omp/sdk-process-runner.d.ts +7 -0
  109. package/lib/agent-cli-provider/omp/sdk-process-runner.d.ts.map +1 -0
  110. package/lib/agent-cli-provider/omp/sdk-process-runner.js +204 -0
  111. package/lib/agent-cli-provider/omp/sdk-process-runner.js.map +1 -0
  112. package/lib/agent-cli-provider/omp/sdk-protocol-collector.d.ts +3 -0
  113. package/lib/agent-cli-provider/omp/sdk-protocol-collector.d.ts.map +1 -0
  114. package/lib/agent-cli-provider/omp/sdk-protocol-collector.js +145 -0
  115. package/lib/agent-cli-provider/omp/sdk-protocol-collector.js.map +1 -0
  116. package/lib/agent-cli-provider/omp/sdk-protocol-frame.d.ts +4 -0
  117. package/lib/agent-cli-provider/omp/sdk-protocol-frame.d.ts.map +1 -0
  118. package/lib/agent-cli-provider/omp/sdk-protocol-frame.js +183 -0
  119. package/lib/agent-cli-provider/omp/sdk-protocol-frame.js.map +1 -0
  120. package/lib/agent-cli-provider/omp/sdk-protocol-request.d.ts +8 -0
  121. package/lib/agent-cli-provider/omp/sdk-protocol-request.d.ts.map +1 -0
  122. package/lib/agent-cli-provider/omp/sdk-protocol-request.js +170 -0
  123. package/lib/agent-cli-provider/omp/sdk-protocol-request.js.map +1 -0
  124. package/lib/agent-cli-provider/omp/sdk-protocol-result.d.ts +5 -0
  125. package/lib/agent-cli-provider/omp/sdk-protocol-result.d.ts.map +1 -0
  126. package/lib/agent-cli-provider/omp/sdk-protocol-result.js +74 -0
  127. package/lib/agent-cli-provider/omp/sdk-protocol-result.js.map +1 -0
  128. package/lib/agent-cli-provider/omp/sdk-protocol-types.d.ts +94 -0
  129. package/lib/agent-cli-provider/omp/sdk-protocol-types.d.ts.map +1 -0
  130. package/lib/agent-cli-provider/omp/sdk-protocol-types.js +54 -0
  131. package/lib/agent-cli-provider/omp/sdk-protocol-types.js.map +1 -0
  132. package/lib/agent-cli-provider/omp/sdk-protocol-value.d.ts +18 -0
  133. package/lib/agent-cli-provider/omp/sdk-protocol-value.d.ts.map +1 -0
  134. package/lib/agent-cli-provider/omp/sdk-protocol-value.js +229 -0
  135. package/lib/agent-cli-provider/omp/sdk-protocol-value.js.map +1 -0
  136. package/lib/agent-cli-provider/omp/sdk-protocol.d.ts +7 -0
  137. package/lib/agent-cli-provider/omp/sdk-protocol.d.ts.map +1 -0
  138. package/lib/agent-cli-provider/omp/sdk-protocol.js +28 -0
  139. package/lib/agent-cli-provider/omp/sdk-protocol.js.map +1 -0
  140. package/lib/agent-cli-provider/omp/sdk-runtime.d.ts +29 -0
  141. package/lib/agent-cli-provider/omp/sdk-runtime.d.ts.map +1 -0
  142. package/lib/agent-cli-provider/omp/sdk-runtime.js +110 -0
  143. package/lib/agent-cli-provider/omp/sdk-runtime.js.map +1 -0
  144. package/lib/agent-cli-provider/omp/sdk-settings-auth.d.ts +3 -0
  145. package/lib/agent-cli-provider/omp/sdk-settings-auth.d.ts.map +1 -0
  146. package/lib/agent-cli-provider/omp/sdk-settings-auth.js +86 -0
  147. package/lib/agent-cli-provider/omp/sdk-settings-auth.js.map +1 -0
  148. package/lib/agent-cli-provider/omp/sdk-settings-constants.d.ts +26 -0
  149. package/lib/agent-cli-provider/omp/sdk-settings-constants.d.ts.map +1 -0
  150. package/lib/agent-cli-provider/omp/sdk-settings-constants.js +148 -0
  151. package/lib/agent-cli-provider/omp/sdk-settings-constants.js.map +1 -0
  152. package/lib/agent-cli-provider/omp/sdk-settings-model-fields.d.ts +5 -0
  153. package/lib/agent-cli-provider/omp/sdk-settings-model-fields.d.ts.map +1 -0
  154. package/lib/agent-cli-provider/omp/sdk-settings-model-fields.js +198 -0
  155. package/lib/agent-cli-provider/omp/sdk-settings-model-fields.js.map +1 -0
  156. package/lib/agent-cli-provider/omp/sdk-settings-model.d.ts +4 -0
  157. package/lib/agent-cli-provider/omp/sdk-settings-model.d.ts.map +1 -0
  158. package/lib/agent-cli-provider/omp/sdk-settings-model.js +163 -0
  159. package/lib/agent-cli-provider/omp/sdk-settings-model.js.map +1 -0
  160. package/lib/agent-cli-provider/omp/sdk-settings-normalize.d.ts +18 -0
  161. package/lib/agent-cli-provider/omp/sdk-settings-normalize.d.ts.map +1 -0
  162. package/lib/agent-cli-provider/omp/sdk-settings-normalize.js +148 -0
  163. package/lib/agent-cli-provider/omp/sdk-settings-normalize.js.map +1 -0
  164. package/lib/agent-cli-provider/omp/sdk-settings-selector.d.ts +3 -0
  165. package/lib/agent-cli-provider/omp/sdk-settings-selector.d.ts.map +1 -0
  166. package/lib/agent-cli-provider/omp/sdk-settings-selector.js +22 -0
  167. package/lib/agent-cli-provider/omp/sdk-settings-selector.js.map +1 -0
  168. package/lib/agent-cli-provider/omp/sdk-settings-types.d.ts +68 -0
  169. package/lib/agent-cli-provider/omp/sdk-settings-types.d.ts.map +1 -0
  170. package/lib/agent-cli-provider/omp/sdk-settings-types.js +19 -0
  171. package/lib/agent-cli-provider/omp/sdk-settings-types.js.map +1 -0
  172. package/lib/agent-cli-provider/omp/sdk-settings-values.d.ts +14 -0
  173. package/lib/agent-cli-provider/omp/sdk-settings-values.d.ts.map +1 -0
  174. package/lib/agent-cli-provider/omp/sdk-settings-values.js +112 -0
  175. package/lib/agent-cli-provider/omp/sdk-settings-values.js.map +1 -0
  176. package/lib/agent-cli-provider/omp/sdk-settings.d.ts +5 -0
  177. package/lib/agent-cli-provider/omp/sdk-settings.d.ts.map +1 -0
  178. package/lib/agent-cli-provider/omp/sdk-settings.js +16 -0
  179. package/lib/agent-cli-provider/omp/sdk-settings.js.map +1 -0
  180. package/lib/agent-cli-provider/omp/sdk-sidecar-context.d.ts +11 -0
  181. package/lib/agent-cli-provider/omp/sdk-sidecar-context.d.ts.map +1 -0
  182. package/lib/agent-cli-provider/omp/sdk-sidecar-context.js +171 -0
  183. package/lib/agent-cli-provider/omp/sdk-sidecar-context.js.map +1 -0
  184. package/lib/agent-cli-provider/omp/sdk-sidecar-credentials.d.ts +5 -0
  185. package/lib/agent-cli-provider/omp/sdk-sidecar-credentials.d.ts.map +1 -0
  186. package/lib/agent-cli-provider/omp/sdk-sidecar-credentials.js +94 -0
  187. package/lib/agent-cli-provider/omp/sdk-sidecar-credentials.js.map +1 -0
  188. package/lib/agent-cli-provider/omp/sdk-sidecar-execute.d.ts +5 -0
  189. package/lib/agent-cli-provider/omp/sdk-sidecar-execute.d.ts.map +1 -0
  190. package/lib/agent-cli-provider/omp/sdk-sidecar-execute.js +175 -0
  191. package/lib/agent-cli-provider/omp/sdk-sidecar-execute.js.map +1 -0
  192. package/lib/agent-cli-provider/omp/sdk-sidecar-output.d.ts +5 -0
  193. package/lib/agent-cli-provider/omp/sdk-sidecar-output.d.ts.map +1 -0
  194. package/lib/agent-cli-provider/omp/sdk-sidecar-output.js +216 -0
  195. package/lib/agent-cli-provider/omp/sdk-sidecar-output.js.map +1 -0
  196. package/lib/agent-cli-provider/omp/sdk-sidecar-runtime.d.ts +11 -0
  197. package/lib/agent-cli-provider/omp/sdk-sidecar-runtime.d.ts.map +1 -0
  198. package/lib/agent-cli-provider/omp/sdk-sidecar-runtime.js +265 -0
  199. package/lib/agent-cli-provider/omp/sdk-sidecar-runtime.js.map +1 -0
  200. package/lib/agent-cli-provider/omp/sdk-sidecar-types.d.ts +148 -0
  201. package/lib/agent-cli-provider/omp/sdk-sidecar-types.d.ts.map +1 -0
  202. package/lib/agent-cli-provider/omp/sdk-sidecar-types.js +84 -0
  203. package/lib/agent-cli-provider/omp/sdk-sidecar-types.js.map +1 -0
  204. package/lib/agent-cli-provider/omp/sdk-sidecar.d.ts +4 -0
  205. package/lib/agent-cli-provider/omp/sdk-sidecar.d.ts.map +1 -0
  206. package/lib/agent-cli-provider/omp/sdk-sidecar.js +9 -0
  207. package/lib/agent-cli-provider/omp/sdk-sidecar.js.map +1 -0
  208. package/lib/agent-cli-provider/process-runner.d.ts +1 -0
  209. package/lib/agent-cli-provider/process-runner.d.ts.map +1 -1
  210. package/lib/agent-cli-provider/process-runner.js +19 -6
  211. package/lib/agent-cli-provider/process-runner.js.map +1 -1
  212. package/lib/agent-cli-provider/provider-registry.d.ts +18 -4
  213. package/lib/agent-cli-provider/provider-registry.d.ts.map +1 -1
  214. package/lib/agent-cli-provider/provider-registry.js +21 -7
  215. package/lib/agent-cli-provider/provider-registry.js.map +1 -1
  216. package/lib/agent-cli-provider/single-agent-runtime.d.ts +10 -1
  217. package/lib/agent-cli-provider/single-agent-runtime.d.ts.map +1 -1
  218. package/lib/agent-cli-provider/single-agent-runtime.js +378 -11
  219. package/lib/agent-cli-provider/single-agent-runtime.js.map +1 -1
  220. package/lib/agent-cli-provider/types.d.ts +110 -2
  221. package/lib/agent-cli-provider/types.d.ts.map +1 -1
  222. package/lib/agent-cli-provider/types.js.map +1 -1
  223. package/npm-shrinkwrap.json +18116 -0
  224. package/package.json +16 -3
  225. package/scripts/omp/bun-ffi.d.ts +28 -0
  226. package/scripts/omp/host-supervisor-cleanup.ts +100 -0
  227. package/scripts/omp/host-supervisor-launch.ts +38 -0
  228. package/scripts/omp/host-supervisor-native.ts +181 -0
  229. package/scripts/omp/host-supervisor-tracker.ts +258 -0
  230. package/scripts/omp/host-supervisor.ts +298 -0
  231. package/scripts/omp/promise-gate.ts +13 -0
  232. package/scripts/omp/runtime-identities.js +283 -0
  233. package/scripts/omp/runtime-lock.js +232 -0
  234. package/scripts/omp/runtime-release.js +105 -0
  235. package/scripts/omp/runtime.js +33 -0
  236. package/scripts/omp/sidecar.ts +124 -0
  237. package/scripts/opcore-introduced-check.js +5 -0
  238. package/scripts/release-preflight.js +19 -0
  239. package/src/agent-cli-provider/adapters/acp.ts +18 -17
  240. package/src/agent-cli-provider/adapters/omp-policy.ts +45 -0
  241. package/src/agent-cli-provider/adapters/omp.ts +9 -155
  242. package/src/agent-cli-provider/adapters/pi.ts +15 -145
  243. package/src/agent-cli-provider/assistant-stream.ts +155 -0
  244. package/src/agent-cli-provider/contract-actions.ts +14 -2
  245. package/src/agent-cli-provider/contract-invoke.ts +77 -40
  246. package/src/agent-cli-provider/contract-support.ts +83 -12
  247. package/src/agent-cli-provider/index.ts +60 -5
  248. package/src/agent-cli-provider/omp/auth-policy.ts +126 -0
  249. package/src/agent-cli-provider/omp/rpc-driver-channel.ts +144 -0
  250. package/src/agent-cli-provider/omp/rpc-driver-dispatch.ts +177 -0
  251. package/src/agent-cli-provider/omp/rpc-driver-runner.ts +199 -0
  252. package/src/agent-cli-provider/omp/rpc-driver-state.ts +165 -0
  253. package/src/agent-cli-provider/omp/rpc-driver.ts +8 -0
  254. package/src/agent-cli-provider/omp/rpc-event-lines.ts +58 -0
  255. package/src/agent-cli-provider/omp/rpc-events.ts +154 -0
  256. package/src/agent-cli-provider/omp/rpc-protocol-contract.ts +77 -0
  257. package/src/agent-cli-provider/{omp-rpc-protocol.ts → omp/rpc-protocol.ts} +9 -111
  258. package/src/agent-cli-provider/omp/sdk-contract.ts +123 -0
  259. package/src/agent-cli-provider/omp/sdk-process-credentials.ts +55 -0
  260. package/src/agent-cli-provider/omp/sdk-process-error.ts +9 -0
  261. package/src/agent-cli-provider/omp/sdk-process-io.ts +92 -0
  262. package/src/agent-cli-provider/omp/sdk-process-private-runtime.ts +249 -0
  263. package/src/agent-cli-provider/omp/sdk-process-result.ts +181 -0
  264. package/src/agent-cli-provider/omp/sdk-process-runner.ts +281 -0
  265. package/src/agent-cli-provider/omp/sdk-protocol-collector.ts +140 -0
  266. package/src/agent-cli-provider/omp/sdk-protocol-frame.ts +260 -0
  267. package/src/agent-cli-provider/omp/sdk-protocol-request.ts +181 -0
  268. package/src/agent-cli-provider/omp/sdk-protocol-result.ts +80 -0
  269. package/src/agent-cli-provider/omp/sdk-protocol-types.ts +156 -0
  270. package/src/agent-cli-provider/omp/sdk-protocol-value.ts +234 -0
  271. package/src/agent-cli-provider/omp/sdk-protocol.ts +46 -0
  272. package/src/agent-cli-provider/omp/sdk-runtime.ts +159 -0
  273. package/src/agent-cli-provider/omp/sdk-settings-auth.ts +78 -0
  274. package/src/agent-cli-provider/omp/sdk-settings-constants.ts +147 -0
  275. package/src/agent-cli-provider/omp/sdk-settings-model-fields.ts +233 -0
  276. package/src/agent-cli-provider/omp/sdk-settings-model.ts +238 -0
  277. package/src/agent-cli-provider/omp/sdk-settings-normalize.ts +242 -0
  278. package/src/agent-cli-provider/omp/sdk-settings-selector.ts +28 -0
  279. package/src/agent-cli-provider/omp/sdk-settings-types.ts +88 -0
  280. package/src/agent-cli-provider/omp/sdk-settings-values.ts +118 -0
  281. package/src/agent-cli-provider/omp/sdk-settings.ts +33 -0
  282. package/src/agent-cli-provider/omp/sdk-sidecar-context.ts +199 -0
  283. package/src/agent-cli-provider/omp/sdk-sidecar-credentials.ts +100 -0
  284. package/src/agent-cli-provider/omp/sdk-sidecar-execute.ts +201 -0
  285. package/src/agent-cli-provider/omp/sdk-sidecar-output.ts +235 -0
  286. package/src/agent-cli-provider/omp/sdk-sidecar-runtime.ts +244 -0
  287. package/src/agent-cli-provider/omp/sdk-sidecar-types.ts +173 -0
  288. package/src/agent-cli-provider/omp/sdk-sidecar.ts +3 -0
  289. package/src/agent-cli-provider/process-runner.ts +22 -8
  290. package/src/agent-cli-provider/provider-registry.ts +29 -10
  291. package/src/agent-cli-provider/single-agent-runtime.ts +444 -18
  292. package/src/agent-cli-provider/types.ts +131 -3
  293. package/src/command-cleanup-ownership.js +15 -0
  294. package/task-lib/omp-sdk-runtime.js +8 -0
  295. package/task-lib/runner.js +121 -40
  296. package/task-lib/sdk-watcher.js +154 -0
  297. package/lib/agent-cli-provider/omp-release.d.ts.map +0 -1
  298. package/lib/agent-cli-provider/omp-release.js.map +0 -1
  299. package/lib/agent-cli-provider/omp-rpc-bounds.d.ts.map +0 -1
  300. package/lib/agent-cli-provider/omp-rpc-bounds.js.map +0 -1
  301. package/lib/agent-cli-provider/omp-rpc-driver.d.ts +0 -40
  302. package/lib/agent-cli-provider/omp-rpc-driver.d.ts.map +0 -1
  303. package/lib/agent-cli-provider/omp-rpc-driver.js +0 -519
  304. package/lib/agent-cli-provider/omp-rpc-driver.js.map +0 -1
  305. package/lib/agent-cli-provider/omp-rpc-events.d.ts +0 -28
  306. package/lib/agent-cli-provider/omp-rpc-events.d.ts.map +0 -1
  307. package/lib/agent-cli-provider/omp-rpc-events.js +0 -264
  308. package/lib/agent-cli-provider/omp-rpc-events.js.map +0 -1
  309. package/lib/agent-cli-provider/omp-rpc-protocol.d.ts.map +0 -1
  310. package/lib/agent-cli-provider/omp-rpc-protocol.js +0 -272
  311. package/lib/agent-cli-provider/omp-rpc-protocol.js.map +0 -1
  312. package/lib/agent-cli-provider/omp-rpc-session.d.ts.map +0 -1
  313. package/lib/agent-cli-provider/omp-rpc-session.js.map +0 -1
  314. package/src/agent-cli-provider/omp-rpc-driver.ts +0 -639
  315. package/src/agent-cli-provider/omp-rpc-events.ts +0 -318
  316. /package/src/agent-cli-provider/{omp-release.ts → omp/release.ts} +0 -0
  317. /package/src/agent-cli-provider/{omp-rpc-bounds.ts → omp/rpc-bounds.ts} +0 -0
  318. /package/src/agent-cli-provider/{omp-rpc-session.ts → omp/rpc-session.ts} +0 -0
@@ -0,0 +1,177 @@
1
+ import { MAX_PENDING_REQUESTS } from './rpc-bounds';
2
+ import {
3
+ DEFAULT_OMP_RPC_DECODER_LIMITS,
4
+ OmpRpcProtocolError,
5
+ assertNoPreNegotiationRpcChunk,
6
+ type OmpRpcInboundFrame,
7
+ } from './rpc-protocol';
8
+ import { normalizeOmpRpcFrame } from './rpc-events';
9
+ import { getArray, getBoolean, getNumber, getRecord, getString } from '../json';
10
+ import type { OmpRpcChannel } from './rpc-driver-channel';
11
+ import {
12
+ OmpRpcTaskFailure,
13
+ sessionEvidenceFromState,
14
+ sessionFieldsFromRecord,
15
+ type DriverState,
16
+ type OmpRpcTaskHooks,
17
+ type OmpRpcTaskRequest,
18
+ } from './rpc-driver-state';
19
+ import type { OutputEvent } from '../types';
20
+
21
+ interface DispatchContext {
22
+ readonly request: OmpRpcTaskRequest;
23
+ readonly hooks: OmpRpcTaskHooks;
24
+ readonly state: DriverState;
25
+ readonly channel: OmpRpcChannel;
26
+ readonly spawnHook: Promise<void>;
27
+ readonly pushEvent: (event: OutputEvent) => void;
28
+ readonly fail: (stopReason: string, message: string) => void;
29
+ readonly agentEnd: () => void;
30
+ }
31
+
32
+ export class OmpRpcDispatcher {
33
+ constructor(private readonly context: DispatchContext) {}
34
+
35
+ enqueue(frame: OmpRpcInboundFrame): void {
36
+ const { state } = this.context;
37
+ if (state.queuedFrames >= MAX_PENDING_REQUESTS) {
38
+ this.context.fail(
39
+ 'pending-request-exceeded',
40
+ `More than ${MAX_PENDING_REQUESTS} RPC frames are queued awaiting dispatch.`
41
+ );
42
+ return;
43
+ }
44
+ state.queuedFrames += 1;
45
+ state.chain = state.chain
46
+ .then(() => this.dispatchFrame(frame))
47
+ .catch((error: unknown) => this.failFrom(error))
48
+ .finally(() => {
49
+ state.queuedFrames -= 1;
50
+ });
51
+ }
52
+
53
+ private failFrom(error: unknown): void {
54
+ if (error instanceof OmpRpcProtocolError) this.context.fail(error.code, error.message);
55
+ else if (error instanceof OmpRpcTaskFailure) {
56
+ this.context.fail(error.stopReason, error.message);
57
+ } else {
58
+ this.context.fail('driver-error', error instanceof Error ? error.message : String(error));
59
+ }
60
+ }
61
+
62
+ private dispatchReadyFrame(frame: OmpRpcInboundFrame): void {
63
+ const { state } = this.context;
64
+ state.readyReceived = true;
65
+ if (frame.type !== 'ready') {
66
+ throw new OmpRpcTaskFailure(
67
+ 'unsupported-protocol',
68
+ `Expected an initial ready frame, got "${frame.type}".`
69
+ );
70
+ }
71
+ const supportedVersions = getArray(frame, 'supportedProtocolVersions');
72
+ if (!supportedVersions.includes(2)) {
73
+ throw new OmpRpcTaskFailure(
74
+ 'unsupported-protocol',
75
+ `OMP ready frame did not advertise protocol v2 (supportedProtocolVersions=${JSON.stringify(supportedVersions)}).`
76
+ );
77
+ }
78
+ const maxFrameBytes = getNumber(frame, 'maxFrameBytes');
79
+ const maxReassembledFrameBytes = getNumber(frame, 'maxReassembledFrameBytes');
80
+ if (
81
+ maxFrameBytes === null ||
82
+ maxFrameBytes > DEFAULT_OMP_RPC_DECODER_LIMITS.maxPhysicalFrameBytes ||
83
+ maxReassembledFrameBytes === null ||
84
+ maxReassembledFrameBytes > DEFAULT_OMP_RPC_DECODER_LIMITS.maxReassembledFrameBytes
85
+ ) {
86
+ throw new OmpRpcTaskFailure(
87
+ 'unsupported-limits',
88
+ `OMP ready frame advertised limits above the pinned decoder caps (maxFrameBytes=${String(maxFrameBytes)}, maxReassembledFrameBytes=${String(maxReassembledFrameBytes)}).`
89
+ );
90
+ }
91
+ void this.negotiateAndPrompt().catch((error: unknown) => this.failFrom(error));
92
+ }
93
+
94
+ private async negotiateAndPrompt(): Promise<void> {
95
+ const { state, request, hooks, channel } = this.context;
96
+ await this.context.spawnHook;
97
+ if (state.settled) return;
98
+ const negotiateResponse = await channel.sendCommand({
99
+ id: 'zs-1',
100
+ type: 'negotiate_protocol',
101
+ protocolVersion: 2,
102
+ });
103
+ channel.assertSuccessfulResponse(negotiateResponse, 'negotiate_protocol', 'zs-1');
104
+ state.negotiatedV2 = true;
105
+
106
+ const stateResponse = await channel
107
+ .sendCommand({ id: 'zs-state', type: 'get_state' })
108
+ .catch(() => null);
109
+ state.sessionEvidence = sessionEvidenceFromState(stateResponse);
110
+ await hooks.onSession({ ...state.sessionEvidence, phase: 'ready' });
111
+
112
+ state.promptSent = true;
113
+ const ack = await channel.sendCommand({ id: 'zs-2', type: 'prompt', message: request.prompt });
114
+ channel.assertSuccessfulResponse(ack, 'prompt', 'zs-2');
115
+ const data = getRecord(ack, 'data');
116
+ if (data !== null && getBoolean(data, 'agentInvoked') === false) {
117
+ throw new OmpRpcTaskFailure(
118
+ 'local-only-prompt',
119
+ 'OMP resolved the prompt without invoking the agent (no agent turn).'
120
+ );
121
+ }
122
+ }
123
+
124
+ private handlePromptResultFrame(frame: OmpRpcInboundFrame): void {
125
+ if (getString(frame, 'id') !== 'zs-2') return;
126
+ if (getBoolean(frame, 'agentInvoked') === true) return;
127
+ throw new OmpRpcTaskFailure(
128
+ 'local-only-prompt',
129
+ 'OMP resolved the prompt without invoking the agent (no agent turn).'
130
+ );
131
+ }
132
+
133
+ private handleSessionInfoUpdate(frame: OmpRpcInboundFrame): Promise<void> | void {
134
+ const updates = sessionFieldsFromRecord(frame);
135
+ if (Object.keys(updates).length === 0) return;
136
+ const { state, hooks } = this.context;
137
+ state.sessionEvidence = { ...state.sessionEvidence, ...updates };
138
+ return hooks.onSession({ ...state.sessionEvidence, phase: 'ready' });
139
+ }
140
+
141
+ private dispatchFrame(frame: OmpRpcInboundFrame): void | Promise<void> {
142
+ const { state, channel } = this.context;
143
+ if (state.terminal) return;
144
+ if (!state.readyReceived) return this.dispatchReadyFrame(frame);
145
+ assertNoPreNegotiationRpcChunk(frame.type, state.negotiatedV2);
146
+ switch (frame.type) {
147
+ case 'response':
148
+ return channel.handleResponse(frame);
149
+ case 'extension_ui_request':
150
+ return channel.handleExtensionUiRequest(frame);
151
+ case 'host_tool_call':
152
+ return channel.handleHostToolCall(frame);
153
+ case 'host_uri_request':
154
+ return channel.handleHostUriRequest(frame);
155
+ case 'host_tool_cancel':
156
+ case 'host_uri_cancel':
157
+ return;
158
+ case 'extension_error':
159
+ throw new OmpRpcTaskFailure(
160
+ 'extension-error',
161
+ getString(frame, 'error') ?? 'OMP extension runner reported an error.'
162
+ );
163
+ case 'prompt_result':
164
+ return this.handlePromptResultFrame(frame);
165
+ case 'agent_end':
166
+ return this.context.agentEnd();
167
+ case 'session_info_update':
168
+ return this.handleSessionInfoUpdate(frame);
169
+ default:
170
+ if (state.promptSent) {
171
+ for (const event of normalizeOmpRpcFrame(frame, state.eventState)) {
172
+ this.context.pushEvent(event);
173
+ }
174
+ }
175
+ }
176
+ }
177
+ }
@@ -0,0 +1,199 @@
1
+ import { spawn } from 'node:child_process';
2
+
3
+ import { omitProcessControlEnv, omitUnsafeProviderEnv } from '../env-safety';
4
+ import { MAX_STDERR_TAIL_BYTES } from './rpc-bounds';
5
+ import { OmpRpcProtocolError } from './rpc-protocol';
6
+ import { OmpRpcChannel } from './rpc-driver-channel';
7
+ import { OmpRpcDispatcher } from './rpc-driver-dispatch';
8
+ import {
9
+ OmpRpcTaskFailure,
10
+ createDriverState,
11
+ type OmpRpcTaskHooks,
12
+ type OmpRpcTaskRequest,
13
+ type OmpRpcTaskResult,
14
+ } from './rpc-driver-state';
15
+ import type { OutputEvent } from '../types';
16
+
17
+ export function runOmpRpcTask(
18
+ request: OmpRpcTaskRequest,
19
+ hooks: OmpRpcTaskHooks
20
+ ): Promise<OmpRpcTaskResult> {
21
+ return new Promise<OmpRpcTaskResult>((resolvePromise, rejectPromise) => {
22
+ const { commandSpec } = request;
23
+ const state = createDriverState();
24
+ const child = spawn(commandSpec.binary, [...commandSpec.args], {
25
+ shell: false,
26
+ stdio: ['pipe', 'pipe', 'pipe'],
27
+ ...(commandSpec.cwd === undefined ? {} : { cwd: commandSpec.cwd }),
28
+ detached: process.platform !== 'win32',
29
+ windowsHide: true,
30
+ env: { ...omitProcessControlEnv(process.env), ...omitUnsafeProviderEnv(commandSpec.env) },
31
+ });
32
+
33
+ let abortTimer: NodeJS.Timeout | undefined;
34
+ let timeoutTimer: NodeJS.Timeout | undefined;
35
+ const clearTimers = (): void => {
36
+ if (abortTimer !== undefined) clearTimeout(abortTimer);
37
+ if (timeoutTimer !== undefined) clearTimeout(timeoutTimer);
38
+ };
39
+ const deriveStopReason = (): string => {
40
+ const lastResult = [...state.events].reverse().find((event) => event.type === 'result');
41
+ return lastResult?.type === 'result' && lastResult.success === false
42
+ ? 'turn-failed'
43
+ : 'completed';
44
+ };
45
+ const finish = (stopReason: string): void => {
46
+ if (state.settled) return;
47
+ state.settled = true;
48
+ clearTimers();
49
+ resolvePromise({
50
+ events: state.events,
51
+ text: state.textParts.join(''),
52
+ session: { ...state.sessionEvidence, phase: 'terminal' },
53
+ stopReason,
54
+ exitCode: state.processExit?.exitCode ?? null,
55
+ signal: state.processExit?.signal ?? null,
56
+ });
57
+ };
58
+ const pushEvent = (event: OutputEvent): void => {
59
+ state.events.push(event);
60
+ if (event.type === 'text') state.textParts.push(event.text);
61
+ void hooks.onEvent(event).catch(() => {});
62
+ };
63
+ const hasExited = (): boolean => child.exitCode !== null || child.signalCode !== null;
64
+ const terminateOwnedBoundary = (): void => {
65
+ if (state.terminationStarted || child.pid === undefined || hasExited()) return;
66
+ state.terminationStarted = true;
67
+ const pid = child.pid;
68
+ try {
69
+ if (process.platform === 'win32') child.kill('SIGTERM');
70
+ else process.kill(-pid, 'SIGTERM');
71
+ } catch {
72
+ // Process may already be gone.
73
+ }
74
+ setTimeout(() => {
75
+ if (hasExited()) return;
76
+ try {
77
+ if (process.platform === 'win32') child.kill('SIGKILL');
78
+ else process.kill(-pid, 'SIGKILL');
79
+ } catch {
80
+ // Process may already be gone.
81
+ }
82
+ }, request.exitGraceMs);
83
+ };
84
+ const failPermanently = (stopReason: string, message: string): void => {
85
+ if (state.terminal) return;
86
+ state.terminal = true;
87
+ state.pendingStopReason = stopReason;
88
+ pushEvent({
89
+ type: 'result',
90
+ success: false,
91
+ result: null,
92
+ error: `${stopReason}: ${message}`,
93
+ });
94
+ terminateOwnedBoundary();
95
+ };
96
+
97
+ const spawnHookPromise = new Promise<void>((resolveSpawnHook) => {
98
+ child.once('spawn', () => {
99
+ const pid = child.pid;
100
+ if (pid === undefined) {
101
+ failPermanently('spawn-hook-failed', 'Process spawned without a pid.');
102
+ resolveSpawnHook();
103
+ return;
104
+ }
105
+ hooks
106
+ .onSpawn({
107
+ pid,
108
+ processGroupId: process.platform === 'win32' ? null : pid,
109
+ terminationStrategy: process.platform === 'win32' ? 'process-tree' : 'process-group',
110
+ })
111
+ .then(resolveSpawnHook, (error: unknown) => {
112
+ failPermanently(
113
+ 'spawn-hook-failed',
114
+ error instanceof Error ? error.message : String(error)
115
+ );
116
+ resolveSpawnHook();
117
+ });
118
+ });
119
+ });
120
+
121
+ const channel = new OmpRpcChannel(child, state);
122
+ const agentEnd = (): void => {
123
+ if (state.terminal) return;
124
+ state.terminal = true;
125
+ state.pendingStopReason = deriveStopReason();
126
+ child.stdin.end();
127
+ setTimeout(terminateOwnedBoundary, request.exitGraceMs);
128
+ };
129
+ const dispatcher = new OmpRpcDispatcher({
130
+ request,
131
+ hooks,
132
+ state,
133
+ channel,
134
+ spawnHook: spawnHookPromise,
135
+ pushEvent,
136
+ fail: failPermanently,
137
+ agentEnd,
138
+ });
139
+
140
+ child.stdout.on('data', (chunk: Buffer) => {
141
+ try {
142
+ for (const frame of state.decoder.push(chunk, state.negotiatedV2))
143
+ dispatcher.enqueue(frame);
144
+ } catch (error) {
145
+ if (error instanceof OmpRpcProtocolError) failPermanently(error.code, error.message);
146
+ else
147
+ failPermanently('decoder-error', error instanceof Error ? error.message : String(error));
148
+ }
149
+ });
150
+ child.stderr.on('data', (chunk: Buffer) => {
151
+ state.stderrTail = (state.stderrTail + chunk.toString('utf8')).slice(-MAX_STDERR_TAIL_BYTES);
152
+ });
153
+ child.once('error', (error) => {
154
+ if (state.settled) return;
155
+ state.settled = true;
156
+ clearTimers();
157
+ rejectPromise(error);
158
+ });
159
+ child.once('close', (exitCode, signal) => {
160
+ state.processExit = { exitCode, signal: signal ?? null };
161
+ for (const command of state.pending.values()) {
162
+ command.reject(
163
+ new OmpRpcTaskFailure('process-closed', 'child process ended before a response arrived.')
164
+ );
165
+ }
166
+ state.pending.clear();
167
+ if (state.terminal) return finish(state.pendingStopReason ?? deriveStopReason());
168
+ state.terminal = true;
169
+ let detail: string;
170
+ try {
171
+ state.decoder.finish();
172
+ detail = `OMP process exited (code=${exitCode ?? 'null'}, signal=${signal ?? 'null'}) before a terminal RPC frame arrived.`;
173
+ } catch (error) {
174
+ detail = error instanceof OmpRpcProtocolError ? error.message : String(error);
175
+ }
176
+ if (state.stderrTail) detail += ` stderr: ${state.stderrTail}`;
177
+ const stopReason = state.abortStopReason ?? 'stream-ended-before-terminal';
178
+ pushEvent({
179
+ type: 'result',
180
+ success: false,
181
+ result: null,
182
+ error: `${stopReason}: ${detail}`,
183
+ });
184
+ finish(stopReason);
185
+ });
186
+
187
+ const beginAbort = (stopReason: string): void => {
188
+ if (state.settled || state.terminal || state.abortStopReason !== null) return;
189
+ state.abortStopReason = stopReason;
190
+ channel.writeFrame({ id: 'zs-abort', type: 'abort' });
191
+ abortTimer = setTimeout(() => {
192
+ if (!state.terminal) terminateOwnedBoundary();
193
+ }, request.abortGraceMs);
194
+ };
195
+ if (request.signal.aborted) beginAbort('cancelled');
196
+ else request.signal.addEventListener('abort', () => beginAbort('cancelled'), { once: true });
197
+ timeoutTimer = setTimeout(() => beginAbort('timeout'), request.timeoutMs);
198
+ });
199
+ }
@@ -0,0 +1,165 @@
1
+ import {
2
+ DEFAULT_OMP_RPC_DECODER_LIMITS,
3
+ OmpRpcFrameDecoder,
4
+ type OmpRpcCommand,
5
+ } from './rpc-protocol';
6
+ import { createOmpRpcEventState } from './rpc-events';
7
+ import { getBoolean, getRecord, getString } from '../json';
8
+ import type { OmpSessionLaunch } from './rpc-session';
9
+ import type { CommandSpec, OutputEvent } from '../types';
10
+
11
+ export interface OmpRpcSpawnEvidence {
12
+ readonly pid: number;
13
+ readonly processGroupId: number | null;
14
+ readonly terminationStrategy: 'process-group' | 'process-tree';
15
+ }
16
+
17
+ export interface OmpRpcSessionEvidence {
18
+ readonly phase: 'ready' | 'terminal';
19
+ readonly sessionId: string | null;
20
+ readonly sessionFile: string | null;
21
+ readonly selectedProvider: string;
22
+ readonly selectedModel: string;
23
+ readonly thinkingLevel: string;
24
+ }
25
+
26
+ export interface OmpRpcTaskRequest {
27
+ readonly commandSpec: CommandSpec;
28
+ readonly prompt: string;
29
+ readonly expectedVersion: string;
30
+ readonly session: OmpSessionLaunch;
31
+ readonly signal: AbortSignal;
32
+ readonly timeoutMs: number;
33
+ readonly abortGraceMs: number;
34
+ readonly exitGraceMs: number;
35
+ }
36
+
37
+ export interface OmpRpcTaskHooks {
38
+ readonly onSpawn: (evidence: OmpRpcSpawnEvidence) => Promise<void>;
39
+ readonly onEvent: (event: OutputEvent) => Promise<void>;
40
+ readonly onSession: (evidence: OmpRpcSessionEvidence) => Promise<void>;
41
+ }
42
+
43
+ export interface OmpRpcTaskResult {
44
+ readonly events: readonly OutputEvent[];
45
+ readonly text: string;
46
+ readonly session: OmpRpcSessionEvidence;
47
+ readonly stopReason: string;
48
+ readonly exitCode: number | null;
49
+ readonly signal: string | null;
50
+ }
51
+
52
+ export const UNKNOWN_SESSION_EVIDENCE: Omit<OmpRpcSessionEvidence, 'phase'> = {
53
+ sessionId: null,
54
+ sessionFile: null,
55
+ selectedProvider: '',
56
+ selectedModel: '',
57
+ thinkingLevel: '',
58
+ };
59
+
60
+ type UiResponder = (id: string) => OmpRpcCommand;
61
+
62
+ // extension_ui_request method table (docs/rpc.md "Extension UI Sub-Protocol"). Zeroshot has no
63
+ // interactive host surface, so every method resolves to a cancelled/no-op response instead of
64
+ // blocking the child indefinitely.
65
+ export const UI_RESPONDERS: Readonly<Record<string, UiResponder>> = {
66
+ confirm: (id) => ({ type: 'extension_ui_response', id, confirmed: false, cancelled: true }),
67
+ select: (id) => ({ type: 'extension_ui_response', id, cancelled: true }),
68
+ input: (id) => ({ type: 'extension_ui_response', id, cancelled: true }),
69
+ editor: (id) => ({ type: 'extension_ui_response', id, cancelled: true }),
70
+ open_url: (id) => ({ type: 'extension_ui_response', id, cancelled: true }),
71
+ notify: (id) => ({ type: 'extension_ui_response', id, cancelled: false }),
72
+ setStatus: (id) => ({ type: 'extension_ui_response', id, cancelled: false }),
73
+ setWidget: (id) => ({ type: 'extension_ui_response', id, cancelled: false }),
74
+ setTitle: (id) => ({ type: 'extension_ui_response', id, cancelled: false }),
75
+ set_editor_text: (id) => ({ type: 'extension_ui_response', id, cancelled: false }),
76
+ cancel: (id) => ({ type: 'extension_ui_response', id, cancelled: false }),
77
+ };
78
+
79
+ export class OmpRpcTaskFailure extends Error {
80
+ readonly stopReason: string;
81
+
82
+ constructor(stopReason: string, message: string) {
83
+ super(message);
84
+ this.name = 'OmpRpcTaskFailure';
85
+ this.stopReason = stopReason;
86
+ }
87
+ }
88
+
89
+ export interface PendingCommand {
90
+ readonly resolve: (frame: Record<string, unknown>) => void;
91
+ readonly reject: (error: Error) => void;
92
+ }
93
+
94
+ export interface DriverState {
95
+ readonly decoder: OmpRpcFrameDecoder;
96
+ readonly eventState: ReturnType<typeof createOmpRpcEventState>;
97
+ readonly pending: Map<string, PendingCommand>;
98
+ readonly lifetimeRequestIds: Set<string>;
99
+ queuedFrames: number;
100
+ readonly events: OutputEvent[];
101
+ readonly textParts: string[];
102
+ stderrTail: string;
103
+ negotiatedV2: boolean;
104
+ readyReceived: boolean;
105
+ promptSent: boolean;
106
+ terminal: boolean;
107
+ settled: boolean;
108
+ abortStopReason: string | null;
109
+ pendingStopReason: string | null;
110
+ terminationStarted: boolean;
111
+ sessionEvidence: Omit<OmpRpcSessionEvidence, 'phase'>;
112
+ processExit: { exitCode: number | null; signal: string | null } | null;
113
+ chain: Promise<void>;
114
+ }
115
+
116
+ export function createDriverState(): DriverState {
117
+ return {
118
+ decoder: new OmpRpcFrameDecoder(DEFAULT_OMP_RPC_DECODER_LIMITS),
119
+ eventState: createOmpRpcEventState(),
120
+ pending: new Map(),
121
+ lifetimeRequestIds: new Set(),
122
+ queuedFrames: 0,
123
+ events: [],
124
+ textParts: [],
125
+ stderrTail: '',
126
+ negotiatedV2: false,
127
+ readyReceived: false,
128
+ promptSent: false,
129
+ terminal: false,
130
+ settled: false,
131
+ abortStopReason: null,
132
+ pendingStopReason: null,
133
+ terminationStarted: false,
134
+ sessionEvidence: UNKNOWN_SESSION_EVIDENCE,
135
+ processExit: null,
136
+ chain: Promise.resolve(),
137
+ };
138
+ }
139
+
140
+ export function sessionFieldsFromRecord(
141
+ record: Record<string, unknown>
142
+ ): Partial<Pick<OmpRpcSessionEvidence, 'sessionId' | 'sessionFile'>> {
143
+ const sessionId = getString(record, 'sessionId');
144
+ const sessionFile = getString(record, 'sessionFile');
145
+ return {
146
+ ...(sessionId !== null ? { sessionId } : {}),
147
+ ...(sessionFile !== null ? { sessionFile } : {}),
148
+ };
149
+ }
150
+
151
+ export function sessionEvidenceFromState(
152
+ stateResponse: Record<string, unknown> | null
153
+ ): Omit<OmpRpcSessionEvidence, 'phase'> {
154
+ if (stateResponse === null || getBoolean(stateResponse, 'success') !== true)
155
+ return UNKNOWN_SESSION_EVIDENCE;
156
+ const data = getRecord(stateResponse, 'data');
157
+ const model = data ? getRecord(data, 'model') : null;
158
+ return {
159
+ ...UNKNOWN_SESSION_EVIDENCE,
160
+ ...(data ? sessionFieldsFromRecord(data) : {}),
161
+ selectedProvider: (model ? getString(model, 'provider') : null) ?? '',
162
+ selectedModel: (model ? getString(model, 'id') : null) ?? '',
163
+ thinkingLevel: (data ? getString(data, 'thinkingLevel') : null) ?? '',
164
+ };
165
+ }
@@ -0,0 +1,8 @@
1
+ export { runOmpRpcTask } from './rpc-driver-runner';
2
+ export type {
3
+ OmpRpcSessionEvidence,
4
+ OmpRpcSpawnEvidence,
5
+ OmpRpcTaskHooks,
6
+ OmpRpcTaskRequest,
7
+ OmpRpcTaskResult,
8
+ } from './rpc-driver-state';
@@ -0,0 +1,58 @@
1
+ import { getNumber, getOptionalString, getString, isRecord, tryParseJson } from '../json';
2
+ import type { ProviderParseResult, ProviderParserState } from '../types';
3
+
4
+ /**
5
+ * Parse one line of the rpc-stdio lane's already-normalized OutputEvent JSON stream. The driver
6
+ * normalizes raw RPC frames once; this validating passthrough keeps generic log and attach tooling
7
+ * on the provider adapter contract without re-deriving events from raw frames.
8
+ */
9
+ export function parseNormalizedOmpRpcEventLine(
10
+ line: string,
11
+ _state: ProviderParserState
12
+ ): ProviderParseResult {
13
+ const parsed = tryParseJson(line);
14
+ if (!isRecord(parsed)) return null;
15
+ switch (parsed.type) {
16
+ case 'text':
17
+ case 'thinking': {
18
+ const text = getString(parsed, 'text');
19
+ return text === null ? null : { type: parsed.type, text };
20
+ }
21
+ case 'tool_call':
22
+ return {
23
+ type: 'tool_call',
24
+ toolName: getOptionalString(parsed, 'toolName'),
25
+ toolId: getOptionalString(parsed, 'toolId'),
26
+ input: parsed.input,
27
+ };
28
+ case 'tool_result':
29
+ return {
30
+ type: 'tool_result',
31
+ toolId: getOptionalString(parsed, 'toolId'),
32
+ content: parsed.content,
33
+ isError: parsed.isError,
34
+ };
35
+ case 'result': {
36
+ if (typeof parsed.success !== 'boolean') return null;
37
+ const inputTokens = getNumber(parsed, 'inputTokens');
38
+ const outputTokens = getNumber(parsed, 'outputTokens');
39
+ const cacheReadInputTokens = getNumber(parsed, 'cacheReadInputTokens');
40
+ const cacheCreationInputTokens = getNumber(parsed, 'cacheCreationInputTokens');
41
+ return {
42
+ type: 'result',
43
+ success: parsed.success,
44
+ result: parsed.result,
45
+ error: parsed.error,
46
+ cost: parsed.cost,
47
+ duration: parsed.duration,
48
+ ...(inputTokens === null ? {} : { inputTokens }),
49
+ ...(outputTokens === null ? {} : { outputTokens }),
50
+ ...(cacheReadInputTokens === null ? {} : { cacheReadInputTokens }),
51
+ ...(cacheCreationInputTokens === null ? {} : { cacheCreationInputTokens }),
52
+ modelUsage: parsed.modelUsage,
53
+ };
54
+ }
55
+ default:
56
+ return null;
57
+ }
58
+ }