@the-open-engine/zeroshot 6.30.2 → 6.31.1

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 (320) hide show
  1. package/cli/index.js +1 -2
  2. package/lib/agent-cli-provider/adapters/acp.d.ts.map +1 -1
  3. package/lib/agent-cli-provider/adapters/acp.js +7 -11
  4. package/lib/agent-cli-provider/adapters/acp.js.map +1 -1
  5. package/lib/agent-cli-provider/adapters/omp-policy.d.ts +4 -0
  6. package/lib/agent-cli-provider/adapters/omp-policy.d.ts.map +1 -0
  7. package/lib/agent-cli-provider/adapters/omp-policy.js +47 -0
  8. package/lib/agent-cli-provider/adapters/omp-policy.js.map +1 -0
  9. package/lib/agent-cli-provider/adapters/omp.d.ts.map +1 -1
  10. package/lib/agent-cli-provider/adapters/omp.js +8 -158
  11. package/lib/agent-cli-provider/adapters/omp.js.map +1 -1
  12. package/lib/agent-cli-provider/adapters/pi.d.ts.map +1 -1
  13. package/lib/agent-cli-provider/adapters/pi.js +12 -124
  14. package/lib/agent-cli-provider/adapters/pi.js.map +1 -1
  15. package/lib/agent-cli-provider/assistant-stream.d.ts +27 -0
  16. package/lib/agent-cli-provider/assistant-stream.d.ts.map +1 -0
  17. package/lib/agent-cli-provider/assistant-stream.js +119 -0
  18. package/lib/agent-cli-provider/assistant-stream.js.map +1 -0
  19. package/lib/agent-cli-provider/contract-actions.d.ts.map +1 -1
  20. package/lib/agent-cli-provider/contract-actions.js +42 -1
  21. package/lib/agent-cli-provider/contract-actions.js.map +1 -1
  22. package/lib/agent-cli-provider/contract-invoke.d.ts.map +1 -1
  23. package/lib/agent-cli-provider/contract-invoke.js +68 -38
  24. package/lib/agent-cli-provider/contract-invoke.js.map +1 -1
  25. package/lib/agent-cli-provider/contract-support.d.ts +5 -6
  26. package/lib/agent-cli-provider/contract-support.d.ts.map +1 -1
  27. package/lib/agent-cli-provider/contract-support.js +99 -6
  28. package/lib/agent-cli-provider/contract-support.js.map +1 -1
  29. package/lib/agent-cli-provider/index.d.ts +8 -6
  30. package/lib/agent-cli-provider/index.d.ts.map +1 -1
  31. package/lib/agent-cli-provider/index.js +34 -10
  32. package/lib/agent-cli-provider/index.js.map +1 -1
  33. package/lib/agent-cli-provider/omp/auth-policy.d.ts +31 -0
  34. package/lib/agent-cli-provider/omp/auth-policy.d.ts.map +1 -0
  35. package/lib/agent-cli-provider/omp/auth-policy.js +98 -0
  36. package/lib/agent-cli-provider/omp/auth-policy.js.map +1 -0
  37. package/lib/agent-cli-provider/{omp-release.d.ts → omp/release.d.ts} +1 -1
  38. package/lib/agent-cli-provider/omp/release.d.ts.map +1 -0
  39. package/lib/agent-cli-provider/{omp-release.js → omp/release.js} +1 -1
  40. package/lib/agent-cli-provider/omp/release.js.map +1 -0
  41. package/lib/agent-cli-provider/{omp-rpc-bounds.d.ts → omp/rpc-bounds.d.ts} +1 -1
  42. package/lib/agent-cli-provider/omp/rpc-bounds.d.ts.map +1 -0
  43. package/lib/agent-cli-provider/{omp-rpc-bounds.js → omp/rpc-bounds.js} +1 -1
  44. package/lib/agent-cli-provider/omp/rpc-bounds.js.map +1 -0
  45. package/lib/agent-cli-provider/omp/rpc-driver-channel.d.ts +19 -0
  46. package/lib/agent-cli-provider/omp/rpc-driver-channel.d.ts.map +1 -0
  47. package/lib/agent-cli-provider/omp/rpc-driver-channel.js +109 -0
  48. package/lib/agent-cli-provider/omp/rpc-driver-channel.js.map +1 -0
  49. package/lib/agent-cli-provider/omp/rpc-driver-dispatch.d.ts +27 -0
  50. package/lib/agent-cli-provider/omp/rpc-driver-dispatch.d.ts.map +1 -0
  51. package/lib/agent-cli-provider/omp/rpc-driver-dispatch.js +135 -0
  52. package/lib/agent-cli-provider/omp/rpc-driver-dispatch.js.map +1 -0
  53. package/lib/agent-cli-provider/omp/rpc-driver-runner.d.ts +3 -0
  54. package/lib/agent-cli-provider/omp/rpc-driver-runner.d.ts.map +1 -0
  55. package/lib/agent-cli-provider/omp/rpc-driver-runner.js +205 -0
  56. package/lib/agent-cli-provider/omp/rpc-driver-runner.js.map +1 -0
  57. package/lib/agent-cli-provider/omp/rpc-driver-state.d.ts +80 -0
  58. package/lib/agent-cli-provider/omp/rpc-driver-state.d.ts.map +1 -0
  59. package/lib/agent-cli-provider/omp/rpc-driver-state.js +86 -0
  60. package/lib/agent-cli-provider/omp/rpc-driver-state.js.map +1 -0
  61. package/lib/agent-cli-provider/omp/rpc-driver.d.ts +3 -0
  62. package/lib/agent-cli-provider/omp/rpc-driver.d.ts.map +1 -0
  63. package/lib/agent-cli-provider/omp/rpc-driver.js +6 -0
  64. package/lib/agent-cli-provider/omp/rpc-driver.js.map +1 -0
  65. package/lib/agent-cli-provider/omp/rpc-event-lines.d.ts +8 -0
  66. package/lib/agent-cli-provider/omp/rpc-event-lines.d.ts.map +1 -0
  67. package/lib/agent-cli-provider/omp/rpc-event-lines.js +59 -0
  68. package/lib/agent-cli-provider/omp/rpc-event-lines.js.map +1 -0
  69. package/lib/agent-cli-provider/omp/rpc-events.d.ts +16 -0
  70. package/lib/agent-cli-provider/omp/rpc-events.d.ts.map +1 -0
  71. package/lib/agent-cli-provider/omp/rpc-events.js +115 -0
  72. package/lib/agent-cli-provider/omp/rpc-events.js.map +1 -0
  73. package/lib/agent-cli-provider/{omp-rpc-protocol.d.ts → omp/rpc-protocol-contract.d.ts} +1 -13
  74. package/lib/agent-cli-provider/omp/rpc-protocol-contract.d.ts.map +1 -0
  75. package/lib/agent-cli-provider/omp/rpc-protocol-contract.js +54 -0
  76. package/lib/agent-cli-provider/omp/rpc-protocol-contract.js.map +1 -0
  77. package/lib/agent-cli-provider/omp/rpc-protocol.d.ts +15 -0
  78. package/lib/agent-cli-provider/omp/rpc-protocol.d.ts.map +1 -0
  79. package/lib/agent-cli-provider/omp/rpc-protocol.js +208 -0
  80. package/lib/agent-cli-provider/omp/rpc-protocol.js.map +1 -0
  81. package/lib/agent-cli-provider/{omp-rpc-session.d.ts → omp/rpc-session.d.ts} +1 -1
  82. package/lib/agent-cli-provider/omp/rpc-session.d.ts.map +1 -0
  83. package/lib/agent-cli-provider/{omp-rpc-session.js → omp/rpc-session.js} +1 -1
  84. package/lib/agent-cli-provider/omp/rpc-session.js.map +1 -0
  85. package/lib/agent-cli-provider/omp/sdk-contract.d.ts +34 -0
  86. package/lib/agent-cli-provider/omp/sdk-contract.d.ts.map +1 -0
  87. package/lib/agent-cli-provider/omp/sdk-contract.js +81 -0
  88. package/lib/agent-cli-provider/omp/sdk-contract.js.map +1 -0
  89. package/lib/agent-cli-provider/omp/sdk-process-credentials.d.ts +6 -0
  90. package/lib/agent-cli-provider/omp/sdk-process-credentials.d.ts.map +1 -0
  91. package/lib/agent-cli-provider/omp/sdk-process-credentials.js +44 -0
  92. package/lib/agent-cli-provider/omp/sdk-process-credentials.js.map +1 -0
  93. package/lib/agent-cli-provider/omp/sdk-process-error.d.ts +5 -0
  94. package/lib/agent-cli-provider/omp/sdk-process-error.d.ts.map +1 -0
  95. package/lib/agent-cli-provider/omp/sdk-process-error.js +13 -0
  96. package/lib/agent-cli-provider/omp/sdk-process-error.js.map +1 -0
  97. package/lib/agent-cli-provider/omp/sdk-process-io.d.ts +18 -0
  98. package/lib/agent-cli-provider/omp/sdk-process-io.d.ts.map +1 -0
  99. package/lib/agent-cli-provider/omp/sdk-process-io.js +80 -0
  100. package/lib/agent-cli-provider/omp/sdk-process-io.js.map +1 -0
  101. package/lib/agent-cli-provider/omp/sdk-process-private-runtime.d.ts +51 -0
  102. package/lib/agent-cli-provider/omp/sdk-process-private-runtime.d.ts.map +1 -0
  103. package/lib/agent-cli-provider/omp/sdk-process-private-runtime.js +154 -0
  104. package/lib/agent-cli-provider/omp/sdk-process-private-runtime.js.map +1 -0
  105. package/lib/agent-cli-provider/omp/sdk-process-result.d.ts +26 -0
  106. package/lib/agent-cli-provider/omp/sdk-process-result.d.ts.map +1 -0
  107. package/lib/agent-cli-provider/omp/sdk-process-result.js +117 -0
  108. package/lib/agent-cli-provider/omp/sdk-process-result.js.map +1 -0
  109. package/lib/agent-cli-provider/omp/sdk-process-runner.d.ts +7 -0
  110. package/lib/agent-cli-provider/omp/sdk-process-runner.d.ts.map +1 -0
  111. package/lib/agent-cli-provider/omp/sdk-process-runner.js +204 -0
  112. package/lib/agent-cli-provider/omp/sdk-process-runner.js.map +1 -0
  113. package/lib/agent-cli-provider/omp/sdk-protocol-collector.d.ts +3 -0
  114. package/lib/agent-cli-provider/omp/sdk-protocol-collector.d.ts.map +1 -0
  115. package/lib/agent-cli-provider/omp/sdk-protocol-collector.js +145 -0
  116. package/lib/agent-cli-provider/omp/sdk-protocol-collector.js.map +1 -0
  117. package/lib/agent-cli-provider/omp/sdk-protocol-frame.d.ts +4 -0
  118. package/lib/agent-cli-provider/omp/sdk-protocol-frame.d.ts.map +1 -0
  119. package/lib/agent-cli-provider/omp/sdk-protocol-frame.js +183 -0
  120. package/lib/agent-cli-provider/omp/sdk-protocol-frame.js.map +1 -0
  121. package/lib/agent-cli-provider/omp/sdk-protocol-request.d.ts +8 -0
  122. package/lib/agent-cli-provider/omp/sdk-protocol-request.d.ts.map +1 -0
  123. package/lib/agent-cli-provider/omp/sdk-protocol-request.js +170 -0
  124. package/lib/agent-cli-provider/omp/sdk-protocol-request.js.map +1 -0
  125. package/lib/agent-cli-provider/omp/sdk-protocol-result.d.ts +5 -0
  126. package/lib/agent-cli-provider/omp/sdk-protocol-result.d.ts.map +1 -0
  127. package/lib/agent-cli-provider/omp/sdk-protocol-result.js +74 -0
  128. package/lib/agent-cli-provider/omp/sdk-protocol-result.js.map +1 -0
  129. package/lib/agent-cli-provider/omp/sdk-protocol-types.d.ts +94 -0
  130. package/lib/agent-cli-provider/omp/sdk-protocol-types.d.ts.map +1 -0
  131. package/lib/agent-cli-provider/omp/sdk-protocol-types.js +54 -0
  132. package/lib/agent-cli-provider/omp/sdk-protocol-types.js.map +1 -0
  133. package/lib/agent-cli-provider/omp/sdk-protocol-value.d.ts +18 -0
  134. package/lib/agent-cli-provider/omp/sdk-protocol-value.d.ts.map +1 -0
  135. package/lib/agent-cli-provider/omp/sdk-protocol-value.js +229 -0
  136. package/lib/agent-cli-provider/omp/sdk-protocol-value.js.map +1 -0
  137. package/lib/agent-cli-provider/omp/sdk-protocol.d.ts +7 -0
  138. package/lib/agent-cli-provider/omp/sdk-protocol.d.ts.map +1 -0
  139. package/lib/agent-cli-provider/omp/sdk-protocol.js +28 -0
  140. package/lib/agent-cli-provider/omp/sdk-protocol.js.map +1 -0
  141. package/lib/agent-cli-provider/omp/sdk-runtime.d.ts +29 -0
  142. package/lib/agent-cli-provider/omp/sdk-runtime.d.ts.map +1 -0
  143. package/lib/agent-cli-provider/omp/sdk-runtime.js +110 -0
  144. package/lib/agent-cli-provider/omp/sdk-runtime.js.map +1 -0
  145. package/lib/agent-cli-provider/omp/sdk-settings-auth.d.ts +3 -0
  146. package/lib/agent-cli-provider/omp/sdk-settings-auth.d.ts.map +1 -0
  147. package/lib/agent-cli-provider/omp/sdk-settings-auth.js +86 -0
  148. package/lib/agent-cli-provider/omp/sdk-settings-auth.js.map +1 -0
  149. package/lib/agent-cli-provider/omp/sdk-settings-constants.d.ts +26 -0
  150. package/lib/agent-cli-provider/omp/sdk-settings-constants.d.ts.map +1 -0
  151. package/lib/agent-cli-provider/omp/sdk-settings-constants.js +148 -0
  152. package/lib/agent-cli-provider/omp/sdk-settings-constants.js.map +1 -0
  153. package/lib/agent-cli-provider/omp/sdk-settings-model-fields.d.ts +5 -0
  154. package/lib/agent-cli-provider/omp/sdk-settings-model-fields.d.ts.map +1 -0
  155. package/lib/agent-cli-provider/omp/sdk-settings-model-fields.js +198 -0
  156. package/lib/agent-cli-provider/omp/sdk-settings-model-fields.js.map +1 -0
  157. package/lib/agent-cli-provider/omp/sdk-settings-model.d.ts +4 -0
  158. package/lib/agent-cli-provider/omp/sdk-settings-model.d.ts.map +1 -0
  159. package/lib/agent-cli-provider/omp/sdk-settings-model.js +163 -0
  160. package/lib/agent-cli-provider/omp/sdk-settings-model.js.map +1 -0
  161. package/lib/agent-cli-provider/omp/sdk-settings-normalize.d.ts +18 -0
  162. package/lib/agent-cli-provider/omp/sdk-settings-normalize.d.ts.map +1 -0
  163. package/lib/agent-cli-provider/omp/sdk-settings-normalize.js +148 -0
  164. package/lib/agent-cli-provider/omp/sdk-settings-normalize.js.map +1 -0
  165. package/lib/agent-cli-provider/omp/sdk-settings-selector.d.ts +3 -0
  166. package/lib/agent-cli-provider/omp/sdk-settings-selector.d.ts.map +1 -0
  167. package/lib/agent-cli-provider/omp/sdk-settings-selector.js +22 -0
  168. package/lib/agent-cli-provider/omp/sdk-settings-selector.js.map +1 -0
  169. package/lib/agent-cli-provider/omp/sdk-settings-types.d.ts +68 -0
  170. package/lib/agent-cli-provider/omp/sdk-settings-types.d.ts.map +1 -0
  171. package/lib/agent-cli-provider/omp/sdk-settings-types.js +19 -0
  172. package/lib/agent-cli-provider/omp/sdk-settings-types.js.map +1 -0
  173. package/lib/agent-cli-provider/omp/sdk-settings-values.d.ts +14 -0
  174. package/lib/agent-cli-provider/omp/sdk-settings-values.d.ts.map +1 -0
  175. package/lib/agent-cli-provider/omp/sdk-settings-values.js +112 -0
  176. package/lib/agent-cli-provider/omp/sdk-settings-values.js.map +1 -0
  177. package/lib/agent-cli-provider/omp/sdk-settings.d.ts +5 -0
  178. package/lib/agent-cli-provider/omp/sdk-settings.d.ts.map +1 -0
  179. package/lib/agent-cli-provider/omp/sdk-settings.js +16 -0
  180. package/lib/agent-cli-provider/omp/sdk-settings.js.map +1 -0
  181. package/lib/agent-cli-provider/omp/sdk-sidecar-context.d.ts +11 -0
  182. package/lib/agent-cli-provider/omp/sdk-sidecar-context.d.ts.map +1 -0
  183. package/lib/agent-cli-provider/omp/sdk-sidecar-context.js +171 -0
  184. package/lib/agent-cli-provider/omp/sdk-sidecar-context.js.map +1 -0
  185. package/lib/agent-cli-provider/omp/sdk-sidecar-credentials.d.ts +5 -0
  186. package/lib/agent-cli-provider/omp/sdk-sidecar-credentials.d.ts.map +1 -0
  187. package/lib/agent-cli-provider/omp/sdk-sidecar-credentials.js +94 -0
  188. package/lib/agent-cli-provider/omp/sdk-sidecar-credentials.js.map +1 -0
  189. package/lib/agent-cli-provider/omp/sdk-sidecar-execute.d.ts +5 -0
  190. package/lib/agent-cli-provider/omp/sdk-sidecar-execute.d.ts.map +1 -0
  191. package/lib/agent-cli-provider/omp/sdk-sidecar-execute.js +175 -0
  192. package/lib/agent-cli-provider/omp/sdk-sidecar-execute.js.map +1 -0
  193. package/lib/agent-cli-provider/omp/sdk-sidecar-output.d.ts +5 -0
  194. package/lib/agent-cli-provider/omp/sdk-sidecar-output.d.ts.map +1 -0
  195. package/lib/agent-cli-provider/omp/sdk-sidecar-output.js +216 -0
  196. package/lib/agent-cli-provider/omp/sdk-sidecar-output.js.map +1 -0
  197. package/lib/agent-cli-provider/omp/sdk-sidecar-runtime.d.ts +11 -0
  198. package/lib/agent-cli-provider/omp/sdk-sidecar-runtime.d.ts.map +1 -0
  199. package/lib/agent-cli-provider/omp/sdk-sidecar-runtime.js +265 -0
  200. package/lib/agent-cli-provider/omp/sdk-sidecar-runtime.js.map +1 -0
  201. package/lib/agent-cli-provider/omp/sdk-sidecar-types.d.ts +148 -0
  202. package/lib/agent-cli-provider/omp/sdk-sidecar-types.d.ts.map +1 -0
  203. package/lib/agent-cli-provider/omp/sdk-sidecar-types.js +84 -0
  204. package/lib/agent-cli-provider/omp/sdk-sidecar-types.js.map +1 -0
  205. package/lib/agent-cli-provider/omp/sdk-sidecar.d.ts +4 -0
  206. package/lib/agent-cli-provider/omp/sdk-sidecar.d.ts.map +1 -0
  207. package/lib/agent-cli-provider/omp/sdk-sidecar.js +9 -0
  208. package/lib/agent-cli-provider/omp/sdk-sidecar.js.map +1 -0
  209. package/lib/agent-cli-provider/process-runner.d.ts +1 -0
  210. package/lib/agent-cli-provider/process-runner.d.ts.map +1 -1
  211. package/lib/agent-cli-provider/process-runner.js +19 -6
  212. package/lib/agent-cli-provider/process-runner.js.map +1 -1
  213. package/lib/agent-cli-provider/provider-registry.d.ts +18 -4
  214. package/lib/agent-cli-provider/provider-registry.d.ts.map +1 -1
  215. package/lib/agent-cli-provider/provider-registry.js +21 -7
  216. package/lib/agent-cli-provider/provider-registry.js.map +1 -1
  217. package/lib/agent-cli-provider/single-agent-runtime.d.ts +10 -1
  218. package/lib/agent-cli-provider/single-agent-runtime.d.ts.map +1 -1
  219. package/lib/agent-cli-provider/single-agent-runtime.js +378 -11
  220. package/lib/agent-cli-provider/single-agent-runtime.js.map +1 -1
  221. package/lib/agent-cli-provider/types.d.ts +110 -2
  222. package/lib/agent-cli-provider/types.d.ts.map +1 -1
  223. package/lib/agent-cli-provider/types.js.map +1 -1
  224. package/npm-shrinkwrap.json +18116 -0
  225. package/package.json +16 -3
  226. package/scripts/omp/bun-ffi.d.ts +28 -0
  227. package/scripts/omp/host-supervisor-cleanup.ts +100 -0
  228. package/scripts/omp/host-supervisor-launch.ts +38 -0
  229. package/scripts/omp/host-supervisor-native.ts +181 -0
  230. package/scripts/omp/host-supervisor-tracker.ts +258 -0
  231. package/scripts/omp/host-supervisor.ts +298 -0
  232. package/scripts/omp/promise-gate.ts +13 -0
  233. package/scripts/omp/runtime-identities.js +283 -0
  234. package/scripts/omp/runtime-lock.js +232 -0
  235. package/scripts/omp/runtime-release.js +105 -0
  236. package/scripts/omp/runtime.js +33 -0
  237. package/scripts/omp/sidecar.ts +124 -0
  238. package/scripts/opcore-introduced-check.js +5 -0
  239. package/scripts/release-preflight.js +19 -0
  240. package/src/agent-cli-provider/adapters/acp.ts +18 -17
  241. package/src/agent-cli-provider/adapters/omp-policy.ts +45 -0
  242. package/src/agent-cli-provider/adapters/omp.ts +9 -155
  243. package/src/agent-cli-provider/adapters/pi.ts +15 -145
  244. package/src/agent-cli-provider/assistant-stream.ts +155 -0
  245. package/src/agent-cli-provider/contract-actions.ts +14 -2
  246. package/src/agent-cli-provider/contract-invoke.ts +77 -40
  247. package/src/agent-cli-provider/contract-support.ts +83 -12
  248. package/src/agent-cli-provider/index.ts +60 -5
  249. package/src/agent-cli-provider/omp/auth-policy.ts +126 -0
  250. package/src/agent-cli-provider/omp/rpc-driver-channel.ts +144 -0
  251. package/src/agent-cli-provider/omp/rpc-driver-dispatch.ts +177 -0
  252. package/src/agent-cli-provider/omp/rpc-driver-runner.ts +199 -0
  253. package/src/agent-cli-provider/omp/rpc-driver-state.ts +165 -0
  254. package/src/agent-cli-provider/omp/rpc-driver.ts +8 -0
  255. package/src/agent-cli-provider/omp/rpc-event-lines.ts +58 -0
  256. package/src/agent-cli-provider/omp/rpc-events.ts +154 -0
  257. package/src/agent-cli-provider/omp/rpc-protocol-contract.ts +77 -0
  258. package/src/agent-cli-provider/{omp-rpc-protocol.ts → omp/rpc-protocol.ts} +9 -111
  259. package/src/agent-cli-provider/omp/sdk-contract.ts +123 -0
  260. package/src/agent-cli-provider/omp/sdk-process-credentials.ts +55 -0
  261. package/src/agent-cli-provider/omp/sdk-process-error.ts +9 -0
  262. package/src/agent-cli-provider/omp/sdk-process-io.ts +92 -0
  263. package/src/agent-cli-provider/omp/sdk-process-private-runtime.ts +249 -0
  264. package/src/agent-cli-provider/omp/sdk-process-result.ts +181 -0
  265. package/src/agent-cli-provider/omp/sdk-process-runner.ts +281 -0
  266. package/src/agent-cli-provider/omp/sdk-protocol-collector.ts +140 -0
  267. package/src/agent-cli-provider/omp/sdk-protocol-frame.ts +260 -0
  268. package/src/agent-cli-provider/omp/sdk-protocol-request.ts +181 -0
  269. package/src/agent-cli-provider/omp/sdk-protocol-result.ts +80 -0
  270. package/src/agent-cli-provider/omp/sdk-protocol-types.ts +156 -0
  271. package/src/agent-cli-provider/omp/sdk-protocol-value.ts +234 -0
  272. package/src/agent-cli-provider/omp/sdk-protocol.ts +46 -0
  273. package/src/agent-cli-provider/omp/sdk-runtime.ts +159 -0
  274. package/src/agent-cli-provider/omp/sdk-settings-auth.ts +78 -0
  275. package/src/agent-cli-provider/omp/sdk-settings-constants.ts +147 -0
  276. package/src/agent-cli-provider/omp/sdk-settings-model-fields.ts +233 -0
  277. package/src/agent-cli-provider/omp/sdk-settings-model.ts +238 -0
  278. package/src/agent-cli-provider/omp/sdk-settings-normalize.ts +242 -0
  279. package/src/agent-cli-provider/omp/sdk-settings-selector.ts +28 -0
  280. package/src/agent-cli-provider/omp/sdk-settings-types.ts +88 -0
  281. package/src/agent-cli-provider/omp/sdk-settings-values.ts +118 -0
  282. package/src/agent-cli-provider/omp/sdk-settings.ts +33 -0
  283. package/src/agent-cli-provider/omp/sdk-sidecar-context.ts +199 -0
  284. package/src/agent-cli-provider/omp/sdk-sidecar-credentials.ts +100 -0
  285. package/src/agent-cli-provider/omp/sdk-sidecar-execute.ts +201 -0
  286. package/src/agent-cli-provider/omp/sdk-sidecar-output.ts +235 -0
  287. package/src/agent-cli-provider/omp/sdk-sidecar-runtime.ts +244 -0
  288. package/src/agent-cli-provider/omp/sdk-sidecar-types.ts +173 -0
  289. package/src/agent-cli-provider/omp/sdk-sidecar.ts +3 -0
  290. package/src/agent-cli-provider/process-runner.ts +22 -8
  291. package/src/agent-cli-provider/provider-registry.ts +29 -10
  292. package/src/agent-cli-provider/single-agent-runtime.ts +444 -18
  293. package/src/agent-cli-provider/types.ts +131 -3
  294. package/src/command-cleanup-ownership.js +15 -0
  295. package/task-lib/omp-sdk-runtime.js +8 -0
  296. package/task-lib/runner.js +121 -40
  297. package/task-lib/sdk-watcher.js +154 -0
  298. package/cli/lib/first-run.js +0 -223
  299. package/lib/agent-cli-provider/omp-release.d.ts.map +0 -1
  300. package/lib/agent-cli-provider/omp-release.js.map +0 -1
  301. package/lib/agent-cli-provider/omp-rpc-bounds.d.ts.map +0 -1
  302. package/lib/agent-cli-provider/omp-rpc-bounds.js.map +0 -1
  303. package/lib/agent-cli-provider/omp-rpc-driver.d.ts +0 -40
  304. package/lib/agent-cli-provider/omp-rpc-driver.d.ts.map +0 -1
  305. package/lib/agent-cli-provider/omp-rpc-driver.js +0 -519
  306. package/lib/agent-cli-provider/omp-rpc-driver.js.map +0 -1
  307. package/lib/agent-cli-provider/omp-rpc-events.d.ts +0 -28
  308. package/lib/agent-cli-provider/omp-rpc-events.d.ts.map +0 -1
  309. package/lib/agent-cli-provider/omp-rpc-events.js +0 -264
  310. package/lib/agent-cli-provider/omp-rpc-events.js.map +0 -1
  311. package/lib/agent-cli-provider/omp-rpc-protocol.d.ts.map +0 -1
  312. package/lib/agent-cli-provider/omp-rpc-protocol.js +0 -272
  313. package/lib/agent-cli-provider/omp-rpc-protocol.js.map +0 -1
  314. package/lib/agent-cli-provider/omp-rpc-session.d.ts.map +0 -1
  315. package/lib/agent-cli-provider/omp-rpc-session.js.map +0 -1
  316. package/src/agent-cli-provider/omp-rpc-driver.ts +0 -639
  317. package/src/agent-cli-provider/omp-rpc-events.ts +0 -318
  318. /package/src/agent-cli-provider/{omp-release.ts → omp/release.ts} +0 -0
  319. /package/src/agent-cli-provider/{omp-rpc-bounds.ts → omp/rpc-bounds.ts} +0 -0
  320. /package/src/agent-cli-provider/{omp-rpc-session.ts → omp/rpc-session.ts} +0 -0
@@ -0,0 +1,249 @@
1
+ import { promises as fs } from 'node:fs';
2
+ import { tmpdir } from 'node:os';
3
+ import { basename, dirname, isAbsolute, join, parse, relative, resolve, sep } from 'node:path';
4
+
5
+ import {
6
+ OMP_SDK_BACKEND_VERSION,
7
+ OMP_SDK_BUN_VERSION,
8
+ type OmpSdkCollectedTerminal,
9
+ type OmpSdkProtocolProgressFrame,
10
+ } from './sdk-protocol';
11
+ import type { PreparedSingleAgentProviderCommand } from '../single-agent-runtime';
12
+ import type {
13
+ OmpSdkCleanupAttestation,
14
+ OmpSdkContainmentRequirement,
15
+ OmpSdkExecutionIdentity,
16
+ OmpSdkSemanticIdentity,
17
+ PreparedEnvironmentPolicy,
18
+ PreparedPrivateArtifacts,
19
+ PreparedProviderInvoke,
20
+ } from '../types';
21
+ import type { ProcessResult, ProcessRunnerOptions } from '../process-runner';
22
+ import { OmpSdkProcessRunnerError } from './sdk-process-error';
23
+
24
+ export { credentialPayload, redactDiagnostic } from './sdk-process-credentials';
25
+ export { OmpSdkProcessRunnerError } from './sdk-process-error';
26
+
27
+ const PRIVATE_ROOT_NAME = /^zeroshot-omp-sdk-[A-Za-z0-9_-]+$/u;
28
+ const PRIVATE_ENV_NAMES = new Set([
29
+ 'HOME',
30
+ 'XDG_CACHE_HOME',
31
+ 'XDG_CONFIG_HOME',
32
+ 'XDG_DATA_HOME',
33
+ 'XDG_STATE_HOME',
34
+ 'PI_CODING_AGENT_DIR',
35
+ ]);
36
+ const MINIMAL_ENV_NAMES = new Set([
37
+ 'ALL_PROXY',
38
+ 'HTTP_PROXY',
39
+ 'HTTPS_PROXY',
40
+ 'LANG',
41
+ 'LC_ALL',
42
+ 'NO_PROXY',
43
+ 'PATH',
44
+ 'SSL_CERT_DIR',
45
+ 'SSL_CERT_FILE',
46
+ 'TZ',
47
+ ]);
48
+
49
+ export interface OmpSdkPreparedInvocation extends PreparedSingleAgentProviderCommand {
50
+ readonly invoke: PreparedProviderInvoke & {
51
+ readonly lane: 'spawn';
52
+ readonly parser: 'omp-sdk-ndjson';
53
+ readonly ptyEligible: false;
54
+ readonly strictTerminal: true;
55
+ };
56
+ readonly environmentPolicy: PreparedEnvironmentPolicy;
57
+ readonly credentialNames: readonly string[];
58
+ readonly privateArtifacts: PreparedPrivateArtifacts;
59
+ readonly containmentRequirement: OmpSdkContainmentRequirement;
60
+ readonly executionIdentity: OmpSdkExecutionIdentity;
61
+ readonly semanticIdentity: OmpSdkSemanticIdentity;
62
+ }
63
+ export interface OmpSdkProcessRunnerOptions extends ProcessRunnerOptions {
64
+ readonly onProgress?: (frame: OmpSdkProtocolProgressFrame) => void;
65
+ readonly reapTimeoutMs?: number;
66
+ }
67
+ export interface OmpSdkProcessResult extends ProcessResult {
68
+ readonly terminal: OmpSdkCollectedTerminal;
69
+ readonly progress: readonly OmpSdkProtocolProgressFrame[];
70
+ readonly diagnosticStderr: string;
71
+ readonly cleanupAttestation: OmpSdkCleanupAttestation;
72
+ }
73
+ export interface OmpSdkRunningProcess {
74
+ readonly pid: number;
75
+ readonly result: Promise<OmpSdkProcessResult>;
76
+ cancel(): void;
77
+ }
78
+ export interface PrivateRuntime {
79
+ readonly root: string;
80
+ readonly requestPath: string;
81
+ readonly home: string;
82
+ readonly xdgConfig: string;
83
+ readonly xdgCache: string;
84
+ readonly xdgData: string;
85
+ readonly xdgState: string;
86
+ readonly piDirectory: string;
87
+ }
88
+
89
+ export function assertPrepared(
90
+ prepared: PreparedSingleAgentProviderCommand
91
+ ): asserts prepared is OmpSdkPreparedInvocation {
92
+ const valid =
93
+ prepared.invoke.lane === 'spawn' &&
94
+ prepared.invoke.parser === 'omp-sdk-ndjson' &&
95
+ prepared.invoke.ptyEligible === false &&
96
+ prepared.invoke.strictTerminal === true &&
97
+ prepared.environmentPolicy?.inherit === 'minimal' &&
98
+ prepared.privateArtifacts?.owned === true &&
99
+ prepared.containmentRequirement?.required === true &&
100
+ prepared.executionIdentity?.backend === 'omp-sdk' &&
101
+ prepared.semanticIdentity !== undefined &&
102
+ Array.isArray(prepared.credentialNames);
103
+ if (!valid)
104
+ throw new OmpSdkProcessRunnerError(
105
+ 'protocol-error',
106
+ 'OMP SDK spawn requires a complete authoritative prepared invocation.'
107
+ );
108
+ if (
109
+ prepared.executionIdentity.backendVersion !== OMP_SDK_BACKEND_VERSION ||
110
+ prepared.executionIdentity.runtime.name !== 'bun' ||
111
+ prepared.executionIdentity.runtime.version !== OMP_SDK_BUN_VERSION ||
112
+ prepared.executionIdentity.transport !== 'sdk'
113
+ ) {
114
+ throw new OmpSdkProcessRunnerError(
115
+ 'protocol-error',
116
+ 'OMP SDK prepared identity does not match the pinned runtime.'
117
+ );
118
+ }
119
+ }
120
+ export function assertHostContainment(requirement: OmpSdkContainmentRequirement): void {
121
+ if (
122
+ requirement.mode !== 'host-process-tree' ||
123
+ process.platform !== 'linux' ||
124
+ (process.arch !== 'x64' && process.arch !== 'arm64')
125
+ ) {
126
+ throw new OmpSdkProcessRunnerError(
127
+ 'containment-error',
128
+ 'OMP SDK host spawn requires the packaged Linux subreaper/pidfd supervisor; container invocations require the container spawn owner.'
129
+ );
130
+ }
131
+ }
132
+ function pathIsWithin(root: string, candidate: string): boolean {
133
+ const fragment = relative(root, candidate);
134
+ return (
135
+ fragment.length > 0 &&
136
+ fragment !== '..' &&
137
+ !fragment.startsWith(`..${sep}`) &&
138
+ !isAbsolute(fragment)
139
+ );
140
+ }
141
+ export async function makePrivateRuntime(
142
+ artifacts: PreparedPrivateArtifacts
143
+ ): Promise<PrivateRuntime> {
144
+ if (!artifacts.owned || !isAbsolute(artifacts.root) || !isAbsolute(artifacts.requestPath)) {
145
+ throw new OmpSdkProcessRunnerError(
146
+ 'cleanup-error',
147
+ 'OMP SDK private artifact ownership is invalid.'
148
+ );
149
+ }
150
+ const root = resolve(artifacts.root);
151
+ const requestPath = resolve(artifacts.requestPath);
152
+ if (
153
+ root === parse(root).root ||
154
+ root === resolve(tmpdir()) ||
155
+ root === resolve(process.cwd()) ||
156
+ dirname(root) !== resolve(tmpdir()) ||
157
+ !PRIVATE_ROOT_NAME.test(basename(root)) ||
158
+ !pathIsWithin(root, requestPath) ||
159
+ dirname(requestPath) !== root
160
+ ) {
161
+ throw new OmpSdkProcessRunnerError(
162
+ 'cleanup-error',
163
+ 'OMP SDK private artifact boundary is unsafe.'
164
+ );
165
+ }
166
+ const [rootStat, requestStat, canonicalRoot, canonicalRequest] = await Promise.all([
167
+ fs.lstat(root),
168
+ fs.lstat(requestPath),
169
+ fs.realpath(root),
170
+ fs.realpath(requestPath),
171
+ ]);
172
+ if (
173
+ !rootStat.isDirectory() ||
174
+ rootStat.isSymbolicLink() ||
175
+ (rootStat.mode & 0o077) !== 0 ||
176
+ !requestStat.isFile() ||
177
+ requestStat.isSymbolicLink() ||
178
+ (requestStat.mode & 0o077) !== 0 ||
179
+ canonicalRoot !== root ||
180
+ canonicalRequest !== requestPath
181
+ ) {
182
+ throw new OmpSdkProcessRunnerError(
183
+ 'cleanup-error',
184
+ 'OMP SDK private artifacts are not owner-only regular paths.'
185
+ );
186
+ }
187
+ await Promise.all(
188
+ ['home', 'xdg-config', 'xdg-cache', 'xdg-data', 'xdg-state', 'pi'].map((name) =>
189
+ fs.mkdir(join(root, name), { mode: 0o700, recursive: false })
190
+ )
191
+ );
192
+ return {
193
+ root,
194
+ requestPath,
195
+ home: join(root, 'home'),
196
+ xdgConfig: join(root, 'xdg-config'),
197
+ xdgCache: join(root, 'xdg-cache'),
198
+ xdgData: join(root, 'xdg-data'),
199
+ xdgState: join(root, 'xdg-state'),
200
+ piDirectory: join(root, 'pi'),
201
+ };
202
+ }
203
+ export async function removePrivateRoot(runtime: PrivateRuntime): Promise<void> {
204
+ try {
205
+ if ((await fs.realpath(runtime.root)) !== runtime.root)
206
+ throw new Error('private root changed identity');
207
+ await fs.rm(runtime.root, { force: true, maxRetries: 3, recursive: true });
208
+ try {
209
+ await fs.lstat(runtime.root);
210
+ throw new Error('private root remains');
211
+ } catch (error) {
212
+ if (!(error instanceof Error) || !('code' in error) || error.code !== 'ENOENT') throw error;
213
+ }
214
+ } catch (error) {
215
+ throw new OmpSdkProcessRunnerError(
216
+ 'cleanup-error',
217
+ 'OMP SDK owned private root could not be removed.',
218
+ { cause: error }
219
+ );
220
+ }
221
+ }
222
+
223
+ export function childEnvironment(
224
+ policy: PreparedEnvironmentPolicy,
225
+ runtime: PrivateRuntime
226
+ ): NodeJS.ProcessEnv {
227
+ const env: NodeJS.ProcessEnv = {};
228
+ for (const [name, value] of Object.entries(policy.values)) {
229
+ const normalized = name.toUpperCase();
230
+ if (
231
+ !MINIMAL_ENV_NAMES.has(normalized) ||
232
+ PRIVATE_ENV_NAMES.has(normalized) ||
233
+ /(?:^|_)(?:AUTH|CREDENTIAL|KEY|PASSWORD|SECRET|TOKEN)(?:_|$)/i.test(name)
234
+ ) {
235
+ throw new OmpSdkProcessRunnerError(
236
+ 'protocol-error',
237
+ `OMP SDK minimal environment contains unsupported key ${name}.`
238
+ );
239
+ }
240
+ env[name] = value;
241
+ }
242
+ env.HOME = runtime.home;
243
+ env.XDG_CONFIG_HOME = runtime.xdgConfig;
244
+ env.XDG_CACHE_HOME = runtime.xdgCache;
245
+ env.XDG_DATA_HOME = runtime.xdgData;
246
+ env.XDG_STATE_HOME = runtime.xdgState;
247
+ env.PI_CODING_AGENT_DIR = runtime.piDirectory;
248
+ return env;
249
+ }
@@ -0,0 +1,181 @@
1
+ import { parseOmpSdkSupervisorAttestation } from './sdk-runtime';
2
+ import type {
3
+ OmpSdkCollectedTerminal,
4
+ OmpSdkProtocolCollector,
5
+ OmpSdkSidecarRequest,
6
+ } from './sdk-protocol';
7
+ import type { OmpSdkCleanupAttestation } from '../types';
8
+ import { cancelledTerminal, type ChildOutcome } from './sdk-process-io';
9
+ import {
10
+ OmpSdkProcessRunnerError,
11
+ redactDiagnostic,
12
+ removePrivateRoot,
13
+ type OmpSdkProcessResult,
14
+ type OmpSdkProcessRunnerOptions,
15
+ type PrivateRuntime,
16
+ } from './sdk-process-private-runtime';
17
+
18
+ export interface OmpSdkSupervisionState {
19
+ timedOut: boolean;
20
+ protocolError: unknown;
21
+ readonly stderrChunks: Buffer[];
22
+ readonly attestationChunks: Buffer[];
23
+ timeout: NodeJS.Timeout | undefined;
24
+ }
25
+
26
+ interface OmpSdkResultContext {
27
+ readonly privateRuntime: PrivateRuntime;
28
+ readonly request: OmpSdkSidecarRequest;
29
+ readonly controller: AbortController;
30
+ readonly options: OmpSdkProcessRunnerOptions;
31
+ readonly collector: OmpSdkProtocolCollector;
32
+ readonly closePromise: Promise<ChildOutcome>;
33
+ readonly writePromise: Promise<void>;
34
+ readonly state: OmpSdkSupervisionState;
35
+ readonly secretValues: readonly string[];
36
+ readonly startedAt: number;
37
+ readonly externalAbort: () => void;
38
+ }
39
+
40
+ export async function collectOmpSdkProcessResult(
41
+ context: OmpSdkResultContext
42
+ ): Promise<OmpSdkProcessResult> {
43
+ const {
44
+ privateRuntime,
45
+ request,
46
+ controller,
47
+ options,
48
+ collector,
49
+ closePromise,
50
+ writePromise,
51
+ state,
52
+ secretValues,
53
+ startedAt,
54
+ externalAbort,
55
+ } = context;
56
+ let rootRemoved = false;
57
+ try {
58
+ await writePromise;
59
+ const outcome = await closePromise;
60
+ if (outcome.spawnError !== undefined) throw outcome.spawnError;
61
+
62
+ let supervisorAttestation;
63
+ try {
64
+ supervisorAttestation = parseOmpSdkSupervisorAttestation(
65
+ Buffer.concat(state.attestationChunks)
66
+ );
67
+ } catch (error) {
68
+ throw new OmpSdkProcessRunnerError(
69
+ 'cleanup-error',
70
+ 'OMP SDK supervisor cleanup attestation is malformed or unavailable.',
71
+ { cause: error }
72
+ );
73
+ }
74
+ if (supervisorAttestation.status === 'error') {
75
+ throw new OmpSdkProcessRunnerError(
76
+ supervisorAttestation.code === 'capability-unavailable'
77
+ ? 'containment-error'
78
+ : 'cleanup-error',
79
+ supervisorAttestation.code === 'capability-unavailable'
80
+ ? 'OMP SDK Linux subreaper/pidfd containment is unavailable.'
81
+ : 'OMP SDK supervisor could not attest descendant cleanup.'
82
+ );
83
+ }
84
+ if (outcome.exitCode !== 0 || outcome.signal !== null) {
85
+ throw new OmpSdkProcessRunnerError(
86
+ 'cleanup-error',
87
+ 'OMP SDK supervisor did not exit cleanly after its cleanup attestation.'
88
+ );
89
+ }
90
+ if (supervisorAttestation.cancelled !== controller.signal.aborted) {
91
+ throw new OmpSdkProcessRunnerError(
92
+ 'cleanup-error',
93
+ 'OMP SDK supervisor cancellation attestation does not match the owner state.'
94
+ );
95
+ }
96
+
97
+ let terminal: OmpSdkCollectedTerminal | undefined;
98
+ if (!controller.signal.aborted && state.protocolError === undefined) {
99
+ if (supervisorAttestation.semantic.exitCode === null) {
100
+ state.protocolError = new OmpSdkProcessRunnerError(
101
+ 'protocol-error',
102
+ 'OMP SDK sidecar terminated by signal without cancellation.'
103
+ );
104
+ } else {
105
+ try {
106
+ terminal = collector.finish(supervisorAttestation.semantic.exitCode);
107
+ } catch (error) {
108
+ state.protocolError = error;
109
+ }
110
+ }
111
+ }
112
+
113
+ await removePrivateRoot(privateRuntime);
114
+ rootRemoved = true;
115
+ const cleanupAttestation: OmpSdkCleanupAttestation = {
116
+ mode: 'host-process-tree',
117
+ terminalBuffered: true,
118
+ descendantsReaped: true,
119
+ clean: true,
120
+ };
121
+ const diagnosticStderr = redactDiagnostic(Buffer.concat(state.stderrChunks).toString('utf8'), [
122
+ ...secretValues,
123
+ request.prompt,
124
+ request.context,
125
+ ]);
126
+ if (controller.signal.aborted) {
127
+ return {
128
+ stdout: '',
129
+ stderr: diagnosticStderr,
130
+ diagnosticStderr,
131
+ exitCode: supervisorAttestation.semantic.exitCode,
132
+ signal: supervisorAttestation.semantic.signal,
133
+ durationMs: Date.now() - startedAt,
134
+ timedOut: state.timedOut,
135
+ ...(state.timedOut && options.timeoutMs !== undefined
136
+ ? { timeoutMs: options.timeoutMs }
137
+ : {}),
138
+ terminal: cancelledTerminal(request),
139
+ progress: [...collector.progress],
140
+ cleanupAttestation,
141
+ };
142
+ }
143
+ if (state.protocolError !== undefined) throw state.protocolError;
144
+ if (terminal === undefined) {
145
+ throw new OmpSdkProcessRunnerError(
146
+ 'protocol-error',
147
+ 'OMP SDK terminal frame is unavailable.'
148
+ );
149
+ }
150
+ return {
151
+ stdout: '',
152
+ stderr: diagnosticStderr,
153
+ diagnosticStderr,
154
+ exitCode: supervisorAttestation.semantic.exitCode,
155
+ signal: supervisorAttestation.semantic.signal,
156
+ durationMs: Date.now() - startedAt,
157
+ timedOut: false,
158
+ terminal,
159
+ progress: [...collector.progress],
160
+ cleanupAttestation,
161
+ };
162
+ } catch (error) {
163
+ if (!rootRemoved) {
164
+ try {
165
+ await removePrivateRoot(privateRuntime);
166
+ } catch (removeError) {
167
+ throw new OmpSdkProcessRunnerError(
168
+ 'cleanup-error',
169
+ 'OMP SDK private-root cleanup failed after supervisor shutdown.',
170
+ { cause: removeError }
171
+ );
172
+ }
173
+ }
174
+ throw error;
175
+ } finally {
176
+ clearTimeout(state.timeout);
177
+ options.signal?.removeEventListener('abort', externalAbort);
178
+ for (const chunk of state.stderrChunks) chunk.fill(0);
179
+ for (const chunk of state.attestationChunks) chunk.fill(0);
180
+ }
181
+ }
@@ -0,0 +1,281 @@
1
+ import { spawn } from 'node:child_process';
2
+ import { promises as fs } from 'node:fs';
3
+ import { isAbsolute } from 'node:path';
4
+
5
+ import {
6
+ OMP_SDK_MAX_STDOUT_BYTES,
7
+ createOmpSdkProtocolCollector,
8
+ decodeOmpSdkSidecarRequest,
9
+ } from './sdk-protocol';
10
+ import {
11
+ OMP_SDK_MAX_SUPERVISOR_ATTESTATION_BYTES,
12
+ resolveOmpSdkHostSupervisorPath,
13
+ } from './sdk-runtime';
14
+ import type { PreparedSingleAgentProviderCommand } from '../single-agent-runtime';
15
+ import {
16
+ DEFAULT_REAP_TIMEOUT_MS,
17
+ DEFAULT_TERMINATION_GRACE_MS,
18
+ MAX_STDERR_BYTES,
19
+ childClose,
20
+ credentialWriter,
21
+ duration,
22
+ testIdentityCapArgument,
23
+ writeCredentials,
24
+ } from './sdk-process-io';
25
+ import { collectOmpSdkProcessResult, type OmpSdkSupervisionState } from './sdk-process-result';
26
+ import {
27
+ OmpSdkProcessRunnerError,
28
+ assertHostContainment,
29
+ assertPrepared,
30
+ childEnvironment,
31
+ credentialPayload,
32
+ makePrivateRuntime,
33
+ removePrivateRoot,
34
+ type OmpSdkProcessResult,
35
+ type OmpSdkProcessRunnerOptions,
36
+ type OmpSdkRunningProcess,
37
+ type PrivateRuntime,
38
+ } from './sdk-process-private-runtime';
39
+
40
+ export { OmpSdkProcessRunnerError } from './sdk-process-private-runtime';
41
+ export type {
42
+ OmpSdkProcessResult,
43
+ OmpSdkProcessRunnerOptions,
44
+ OmpSdkRunningProcess,
45
+ } from './sdk-process-private-runtime';
46
+
47
+ export async function spawnOmpSdkProcess(
48
+ prepared: PreparedSingleAgentProviderCommand,
49
+ options: OmpSdkProcessRunnerOptions = {}
50
+ ): Promise<OmpSdkRunningProcess> {
51
+ assertPrepared(prepared);
52
+ let runtime: PrivateRuntime | undefined;
53
+ try {
54
+ const privateRuntime = await makePrivateRuntime(prepared.privateArtifacts);
55
+ runtime = privateRuntime;
56
+ assertHostContainment(prepared.containmentRequirement);
57
+ const requestBytes = await fs.readFile(privateRuntime.requestPath);
58
+ const request = decodeOmpSdkSidecarRequest(requestBytes);
59
+ requestBytes.fill(0);
60
+ const environment = childEnvironment(prepared.environmentPolicy, privateRuntime);
61
+ const { payload, secretValues } = credentialPayload(prepared.credentialNames, process.env);
62
+ const requestProvider = request.modelSelector.slice(0, request.modelSelector.indexOf('/'));
63
+ const sidecarPath = prepared.commandSpec.args[0] ?? '';
64
+ if (
65
+ !isAbsolute(prepared.commandSpec.binary) ||
66
+ prepared.commandSpec.args.length !== 2 ||
67
+ !isAbsolute(sidecarPath) ||
68
+ prepared.commandSpec.args[1] !== privateRuntime.requestPath ||
69
+ prepared.commandSpec.cwd !== request.cwd ||
70
+ Object.keys(prepared.commandSpec.env).length !== 0 ||
71
+ prepared.semanticIdentity.requestedModelSelector !== request.modelSelector ||
72
+ prepared.semanticIdentity.reasoningEffort !== request.reasoningEffort ||
73
+ prepared.semanticIdentity.provider !== requestProvider
74
+ ) {
75
+ payload.fill(0);
76
+ throw new OmpSdkProcessRunnerError(
77
+ 'protocol-error',
78
+ 'OMP SDK command metadata does not match its authoritative private request.'
79
+ );
80
+ }
81
+
82
+ const supervisorPath = resolveOmpSdkHostSupervisorPath();
83
+ let supervisorStat;
84
+ try {
85
+ supervisorStat = await fs.lstat(supervisorPath);
86
+ } catch (error) {
87
+ payload.fill(0);
88
+ throw new OmpSdkProcessRunnerError(
89
+ 'containment-error',
90
+ 'Pinned OMP SDK host supervisor is unavailable.',
91
+ { cause: error }
92
+ );
93
+ }
94
+ if (!supervisorStat.isFile() || supervisorStat.isSymbolicLink()) {
95
+ payload.fill(0);
96
+ throw new OmpSdkProcessRunnerError(
97
+ 'containment-error',
98
+ 'Pinned OMP SDK host supervisor is unavailable.'
99
+ );
100
+ }
101
+ const terminationGraceMs = duration(options.timeoutKillGraceMs, DEFAULT_TERMINATION_GRACE_MS);
102
+ const reapTimeoutMs = duration(options.reapTimeoutMs, DEFAULT_REAP_TIMEOUT_MS);
103
+ const startedAt = Date.now();
104
+ const collector = createOmpSdkProtocolCollector({
105
+ request,
106
+ maxStdoutBytes: OMP_SDK_MAX_STDOUT_BYTES,
107
+ });
108
+ const child = spawn(
109
+ prepared.commandSpec.binary,
110
+ [
111
+ supervisorPath,
112
+ sidecarPath,
113
+ privateRuntime.requestPath,
114
+ String(terminationGraceMs),
115
+ String(reapTimeoutMs),
116
+ ...testIdentityCapArgument(),
117
+ ],
118
+ {
119
+ cwd: prepared.commandSpec.cwd,
120
+ detached: false,
121
+ env: environment,
122
+ shell: false,
123
+ stdio: ['ignore', 'pipe', 'pipe', 'pipe', 'pipe'],
124
+ windowsHide: true,
125
+ }
126
+ );
127
+ const closePromise = childClose(child);
128
+ const pid = child.pid;
129
+ if (pid === undefined || pid <= 1) {
130
+ payload.fill(0);
131
+ const outcome = await closePromise;
132
+ throw (
133
+ outcome.spawnError ??
134
+ new OmpSdkProcessRunnerError('containment-error', 'OMP SDK supervisor PID is unavailable.')
135
+ );
136
+ }
137
+
138
+ const controller = new AbortController();
139
+ const state: OmpSdkSupervisionState = {
140
+ timedOut: false,
141
+ protocolError: undefined,
142
+ stderrChunks: [],
143
+ attestationChunks: [],
144
+ timeout: undefined,
145
+ };
146
+ let stderrBytes = 0;
147
+ let attestationBytes = 0;
148
+ const terminate = (): void => {
149
+ try {
150
+ child.kill('SIGCONT');
151
+ child.kill('SIGTERM');
152
+ } catch {
153
+ // Close/attestation decides whether cleanup is authoritative.
154
+ }
155
+ };
156
+ const externalAbort = (): void => controller.abort();
157
+ controller.signal.addEventListener('abort', terminate, { once: true });
158
+ options.signal?.addEventListener('abort', externalAbort, { once: true });
159
+ if (options.signal?.aborted) controller.abort();
160
+ if (options.timeoutMs !== undefined) {
161
+ state.timeout = setTimeout(() => {
162
+ state.timedOut = true;
163
+ controller.abort();
164
+ }, options.timeoutMs);
165
+ state.timeout.unref();
166
+ }
167
+
168
+ child.stdout?.on('data', (chunk: Buffer) => {
169
+ attestationBytes += chunk.byteLength;
170
+ if (attestationBytes > OMP_SDK_MAX_SUPERVISOR_ATTESTATION_BYTES) {
171
+ state.protocolError = new OmpSdkProcessRunnerError(
172
+ 'cleanup-error',
173
+ 'OMP SDK supervisor attestation is oversized.'
174
+ );
175
+ terminate();
176
+ } else {
177
+ state.attestationChunks.push(chunk);
178
+ }
179
+ });
180
+ child.stdout?.on('error', () => {
181
+ state.protocolError = new OmpSdkProcessRunnerError(
182
+ 'cleanup-error',
183
+ 'OMP SDK supervisor attestation channel failed.'
184
+ );
185
+ terminate();
186
+ });
187
+ const protocolChannel = child.stdio[4];
188
+ if (
189
+ protocolChannel === undefined ||
190
+ protocolChannel === null ||
191
+ typeof protocolChannel.on !== 'function'
192
+ ) {
193
+ state.protocolError = new OmpSdkProcessRunnerError(
194
+ 'protocol-error',
195
+ 'OMP SDK sidecar protocol channel was not created.'
196
+ );
197
+ terminate();
198
+ } else {
199
+ protocolChannel.on('data', (chunk: Buffer) => {
200
+ if (state.protocolError !== undefined) return;
201
+ try {
202
+ for (const frame of collector.write(chunk)) {
203
+ if (frame.type === 'progress') options.onProgress?.(frame);
204
+ }
205
+ } catch (error) {
206
+ state.protocolError = error;
207
+ terminate();
208
+ }
209
+ });
210
+ protocolChannel.on('error', (error: Error) => {
211
+ state.protocolError = new OmpSdkProcessRunnerError(
212
+ 'protocol-error',
213
+ 'OMP SDK sidecar protocol channel failed.',
214
+ { cause: error }
215
+ );
216
+ terminate();
217
+ });
218
+ }
219
+ child.stderr?.on('data', (chunk: Buffer) => {
220
+ stderrBytes += chunk.byteLength;
221
+ if (stderrBytes > MAX_STDERR_BYTES) {
222
+ state.protocolError = new OmpSdkProcessRunnerError(
223
+ 'protocol-error',
224
+ 'OMP SDK diagnostic stderr is oversized.'
225
+ );
226
+ terminate();
227
+ } else {
228
+ state.stderrChunks.push(chunk);
229
+ }
230
+ });
231
+ child.stderr?.on('error', (error: Error) => {
232
+ state.protocolError = new OmpSdkProcessRunnerError(
233
+ 'protocol-error',
234
+ 'OMP SDK diagnostic channel failed.',
235
+ { cause: error }
236
+ );
237
+ terminate();
238
+ });
239
+
240
+ const writePromise = writeCredentials(credentialWriter(child), payload).catch((error) => {
241
+ state.protocolError = new OmpSdkProcessRunnerError(
242
+ 'protocol-error',
243
+ 'OMP SDK credential channel failed.',
244
+ { cause: error }
245
+ );
246
+ terminate();
247
+ });
248
+
249
+ const result = collectOmpSdkProcessResult({
250
+ privateRuntime,
251
+ request,
252
+ controller,
253
+ options,
254
+ collector,
255
+ closePromise,
256
+ writePromise,
257
+ state,
258
+ secretValues,
259
+ startedAt,
260
+ externalAbort,
261
+ });
262
+
263
+ return {
264
+ pid,
265
+ result,
266
+ cancel: () => controller.abort(),
267
+ };
268
+ } catch (error) {
269
+ if (runtime !== undefined) {
270
+ await removePrivateRoot(runtime);
271
+ }
272
+ throw error;
273
+ }
274
+ }
275
+
276
+ export async function runOmpSdkProcess(
277
+ prepared: PreparedSingleAgentProviderCommand,
278
+ options: OmpSdkProcessRunnerOptions = {}
279
+ ): Promise<OmpSdkProcessResult> {
280
+ return (await spawnOmpSdkProcess(prepared, options)).result;
281
+ }