@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,154 @@
1
+ import {
2
+ emitAssistantSnapshot,
3
+ parseAssistantDelta,
4
+ parseToolExecutionEnd,
5
+ parseToolExecutionStart,
6
+ parseToolExecutionUpdate,
7
+ parseTurnEndResult,
8
+ resetAssistantSnapshot,
9
+ } from '../assistant-stream';
10
+ import { getRecord, getString, stringifyContent } from '../json';
11
+ import type { OutputEvent } from '../types';
12
+ import { MAX_NORMALIZED_OUTPUT_BYTES } from './rpc-bounds';
13
+ import { OmpRpcProtocolError, type OmpRpcInboundFrame } from './rpc-protocol';
14
+
15
+ export interface OmpRpcEventState {
16
+ lastAssistantText: string;
17
+ lastAssistantThinking: string;
18
+ lastToolId: string | null | undefined;
19
+ normalizedBytes: number;
20
+ }
21
+
22
+ export function createOmpRpcEventState(): OmpRpcEventState {
23
+ return {
24
+ lastAssistantText: '',
25
+ lastAssistantThinking: '',
26
+ lastToolId: undefined,
27
+ normalizedBytes: 0,
28
+ };
29
+ }
30
+
31
+ function chargeBytes(state: OmpRpcEventState, value: unknown): void {
32
+ state.normalizedBytes += Buffer.byteLength(stringifyContent(value), 'utf8');
33
+ if (state.normalizedBytes > MAX_NORMALIZED_OUTPUT_BYTES) {
34
+ throw new OmpRpcProtocolError(
35
+ 'output-bound-exceeded',
36
+ `Normalized OMP RPC output exceeded the ${MAX_NORMALIZED_OUTPUT_BYTES}-byte cap for this task.`
37
+ );
38
+ }
39
+ }
40
+
41
+ function chargeEvent(state: OmpRpcEventState, event: OutputEvent): void {
42
+ switch (event.type) {
43
+ case 'text':
44
+ case 'thinking':
45
+ chargeBytes(state, event.text);
46
+ break;
47
+ case 'tool_call':
48
+ chargeBytes(state, event.input);
49
+ break;
50
+ case 'tool_result':
51
+ chargeBytes(state, event.content);
52
+ break;
53
+ case 'result':
54
+ chargeBytes(state, { result: event.result, error: event.error });
55
+ break;
56
+ default:
57
+ break;
58
+ }
59
+ }
60
+
61
+ function chargeEvents(
62
+ state: OmpRpcEventState,
63
+ events: readonly OutputEvent[]
64
+ ): readonly OutputEvent[] {
65
+ for (const event of events) chargeEvent(state, event);
66
+ return events;
67
+ }
68
+
69
+ function normalizeMessageUpdate(
70
+ frame: OmpRpcInboundFrame,
71
+ state: OmpRpcEventState
72
+ ): readonly OutputEvent[] {
73
+ const assistantMessageEvent = getRecord(frame, 'assistantMessageEvent');
74
+ if (assistantMessageEvent !== null) {
75
+ const event = parseAssistantDelta(assistantMessageEvent, state);
76
+ if (event !== null) {
77
+ chargeEvent(state, event);
78
+ return [event];
79
+ }
80
+ }
81
+ const message = getRecord(frame, 'message');
82
+ return message === null
83
+ ? []
84
+ : chargeEvents(state, emitAssistantSnapshot(message, state, { retainPreviousOnEmpty: true }));
85
+ }
86
+
87
+ function normalizeMessageSnapshot(
88
+ frame: OmpRpcInboundFrame,
89
+ state: OmpRpcEventState
90
+ ): readonly OutputEvent[] {
91
+ const message = getRecord(frame, 'message');
92
+ return message === null
93
+ ? []
94
+ : chargeEvents(state, emitAssistantSnapshot(message, state, { retainPreviousOnEmpty: true }));
95
+ }
96
+
97
+ function normalizeToolEvent(
98
+ frame: OmpRpcInboundFrame,
99
+ state: OmpRpcEventState
100
+ ): readonly OutputEvent[] {
101
+ const event =
102
+ frame.type === 'tool_execution_start'
103
+ ? parseToolExecutionStart(frame, state)
104
+ : frame.type === 'tool_execution_update'
105
+ ? parseToolExecutionUpdate(frame, state)
106
+ : parseToolExecutionEnd(frame, state);
107
+ if (event === null) return [];
108
+ chargeEvent(state, event);
109
+ return [event];
110
+ }
111
+
112
+ function normalizeTurnEnd(
113
+ frame: OmpRpcInboundFrame,
114
+ state: OmpRpcEventState
115
+ ): readonly OutputEvent[] {
116
+ const event = parseTurnEndResult(frame, {
117
+ failureMessage: 'OMP turn failed',
118
+ resultFallback: state.lastAssistantText,
119
+ });
120
+ const message = getRecord(frame, 'message');
121
+ const stopReason = message === null ? null : getString(message, 'stopReason');
122
+ const errorMessage = message === null ? null : getString(message, 'errorMessage');
123
+ chargeBytes(state, { result: event.result, error: errorMessage ?? stopReason ?? null });
124
+ return [event];
125
+ }
126
+
127
+ /**
128
+ * Normalize one decoded OMP RPC v2 event frame into zero or more OutputEvents. Control frames never
129
+ * leak into log, attach, or ledger output.
130
+ */
131
+ export function normalizeOmpRpcFrame(
132
+ frame: OmpRpcInboundFrame,
133
+ state: OmpRpcEventState
134
+ ): readonly OutputEvent[] {
135
+ switch (frame.type) {
136
+ case 'message_start':
137
+ resetAssistantSnapshot(getRecord(frame, 'message'), state);
138
+ return [];
139
+ case 'message_update':
140
+ return normalizeMessageUpdate(frame, state);
141
+ case 'message_end':
142
+ return normalizeMessageSnapshot(frame, state);
143
+ case 'tool_execution_start':
144
+ case 'tool_execution_update':
145
+ case 'tool_execution_end':
146
+ return normalizeToolEvent(frame, state);
147
+ case 'turn_end':
148
+ return normalizeTurnEnd(frame, state);
149
+ default:
150
+ return [];
151
+ }
152
+ }
153
+
154
+ export { parseNormalizedOmpRpcEventLine } from './rpc-event-lines';
@@ -0,0 +1,77 @@
1
+ import { OMP_SUPPORTED_VERSION } from './release';
2
+
3
+ export const OMP_RPC_CONTRACT_RELEASE = OMP_SUPPORTED_VERSION;
4
+
5
+ export interface OmpRpcDecoderLimits {
6
+ readonly maxPhysicalFrameBytes: number;
7
+ readonly maxReassembledFrameBytes: number;
8
+ readonly maxConcurrentReassemblies: number;
9
+ readonly maxChunksPerFrame: number;
10
+ readonly maxInflightReassemblyBytes: number;
11
+ }
12
+
13
+ export const DEFAULT_OMP_RPC_DECODER_LIMITS: OmpRpcDecoderLimits = {
14
+ maxPhysicalFrameBytes: 1024 * 1024,
15
+ maxReassembledFrameBytes: 64 * 1024 * 1024,
16
+ maxConcurrentReassemblies: 1,
17
+ maxChunksPerFrame: 256,
18
+ maxInflightReassemblyBytes: 64 * 1024 * 1024,
19
+ };
20
+
21
+ export interface OmpRpcInboundFrame {
22
+ readonly type: string;
23
+ readonly [key: string]: unknown;
24
+ }
25
+
26
+ export interface OmpRpcCommand {
27
+ readonly id?: string;
28
+ readonly type: string;
29
+ readonly [key: string]: unknown;
30
+ }
31
+
32
+ export class OmpRpcProtocolError extends Error {
33
+ readonly code: string;
34
+
35
+ constructor(code: string, message: string) {
36
+ super(message);
37
+ this.name = 'OmpRpcProtocolError';
38
+ this.code = code;
39
+ }
40
+ }
41
+
42
+ const KNOWN_PRE_NEGOTIATION_FRAME_TYPES: Readonly<Record<string, true>> = Object.freeze(Object.fromEntries([
43
+ 'ready', 'available_commands_update', 'response', 'extension_error', 'agent_start', 'agent_end',
44
+ 'turn_start', 'turn_end', 'message_start', 'message_update', 'message_end', 'tool_execution_start',
45
+ 'tool_execution_update', 'tool_execution_end', 'auto_compaction_start', 'auto_compaction_end',
46
+ 'auto_retry_start', 'auto_retry_end', 'ttsr_triggered', 'todo_reminder', 'todo_auto_clear',
47
+ 'extension_ui_request', 'host_tool_call', 'host_tool_cancel', 'host_uri_request', 'host_uri_cancel',
48
+ 'prompt_result', 'command_output', 'session_info_update', 'config_update', 'subagent_lifecycle',
49
+ 'subagent_progress', 'subagent_event',
50
+ ].map((type) => [type, true] as const)));
51
+
52
+ export function classifyOmpRpcFrameType(type: string): 'known-pre-negotiation' | 'v2-only' | 'unknown' {
53
+ if (type === 'rpc_chunk') return 'v2-only';
54
+ if (KNOWN_PRE_NEGOTIATION_FRAME_TYPES[type] === true) return 'known-pre-negotiation';
55
+ return 'unknown';
56
+ }
57
+
58
+ export function assertNoPreNegotiationRpcChunk(frameType: string, negotiatedV2: boolean): void {
59
+ if (frameType === 'rpc_chunk' && !negotiatedV2) {
60
+ throw new OmpRpcProtocolError(
61
+ 'pre-negotiation-rpc-chunk',
62
+ 'rpc_chunk frame received before protocol v2 negotiation succeeded.'
63
+ );
64
+ }
65
+ }
66
+
67
+ export function encodeOmpRpcCommand(command: OmpRpcCommand, maxFrameBytes: number): Buffer {
68
+ const line = `${JSON.stringify(command)}\n`;
69
+ const byteLength = Buffer.byteLength(line, 'utf8');
70
+ if (byteLength > maxFrameBytes) {
71
+ throw new OmpRpcProtocolError(
72
+ 'outbound-frame-too-large',
73
+ `Outbound command of ${byteLength} bytes exceeds the ${maxFrameBytes}-byte limit.`
74
+ );
75
+ }
76
+ return Buffer.from(line, 'utf8');
77
+ }
@@ -1,104 +1,13 @@
1
- import { getNumber, getString, isRecord } from './json';
2
- import { OMP_SUPPORTED_VERSION } from './omp-release';
3
-
4
- // Purely for traceability/doc; no runtime coupling to omp-release's spawn/install concerns.
5
- export const OMP_RPC_CONTRACT_RELEASE = OMP_SUPPORTED_VERSION;
6
-
7
- export interface OmpRpcDecoderLimits {
8
- readonly maxPhysicalFrameBytes: number;
9
- readonly maxReassembledFrameBytes: number;
10
- readonly maxConcurrentReassemblies: number;
11
- readonly maxChunksPerFrame: number;
12
- readonly maxInflightReassemblyBytes: number;
13
- }
14
-
15
- // Verified against the pinned OMP release's rpc-frame.ts: MAX_RPC_FRAME_BYTES=1MiB, MAX_RPC_REASSEMBLED_BYTES=64MiB,
16
- // RPC_CHUNK_PAYLOAD_BYTES=256KiB -> ceil(64MiB/256KiB)=256 chunks max. The real decoder tracks exactly one
17
- // pending sequence at a time, so maxConcurrentReassemblies/maxInflightReassemblyBytes mirror that ceiling.
18
- export const DEFAULT_OMP_RPC_DECODER_LIMITS: OmpRpcDecoderLimits = {
19
- maxPhysicalFrameBytes: 1024 * 1024,
20
- maxReassembledFrameBytes: 64 * 1024 * 1024,
21
- maxConcurrentReassemblies: 1,
22
- maxChunksPerFrame: 256,
23
- maxInflightReassemblyBytes: 64 * 1024 * 1024,
24
- };
25
-
26
- export interface OmpRpcInboundFrame {
27
- readonly type: string;
28
- readonly [key: string]: unknown;
29
- }
30
-
31
- export interface OmpRpcCommand {
32
- readonly id?: string;
33
- readonly type: string;
34
- readonly [key: string]: unknown;
35
- }
36
-
37
- export class OmpRpcProtocolError extends Error {
38
- readonly code: string;
39
-
40
- constructor(code: string, message: string) {
41
- super(message);
42
- this.name = 'OmpRpcProtocolError';
43
- this.code = code;
44
- }
45
- }
46
-
47
- const KNOWN_PRE_NEGOTIATION_FRAME_TYPES: ReadonlySet<string> = new Set([
48
- 'ready',
49
- 'available_commands_update',
50
- 'response',
51
- 'extension_error',
52
- 'agent_start',
53
- 'agent_end',
54
- 'turn_start',
55
- 'turn_end',
56
- 'message_start',
57
- 'message_update',
58
- 'message_end',
59
- 'tool_execution_start',
60
- 'tool_execution_update',
61
- 'tool_execution_end',
62
- 'auto_compaction_start',
63
- 'auto_compaction_end',
64
- 'auto_retry_start',
65
- 'auto_retry_end',
66
- 'ttsr_triggered',
67
- 'todo_reminder',
68
- 'todo_auto_clear',
69
- 'extension_ui_request',
70
- 'host_tool_call',
71
- 'host_tool_cancel',
72
- 'host_uri_request',
73
- 'host_uri_cancel',
74
- 'prompt_result',
75
- 'command_output',
76
- 'session_info_update',
77
- 'config_update',
78
- 'subagent_lifecycle',
79
- 'subagent_progress',
80
- 'subagent_event',
81
- ]);
82
-
83
- export function classifyOmpRpcFrameType(
84
- type: string
85
- ): 'known-pre-negotiation' | 'v2-only' | 'unknown' {
86
- if (type === 'rpc_chunk') return 'v2-only';
87
- if (KNOWN_PRE_NEGOTIATION_FRAME_TYPES.has(type)) return 'known-pre-negotiation';
88
- return 'unknown';
89
- }
90
-
91
- export function assertNoPreNegotiationRpcChunk(frameType: string, negotiatedV2: boolean): void {
92
- if (frameType === 'rpc_chunk' && !negotiatedV2) {
93
- throw new OmpRpcProtocolError(
94
- 'pre-negotiation-rpc-chunk',
95
- 'rpc_chunk frame received before protocol v2 negotiation succeeded.'
96
- );
97
- }
98
- }
99
-
1
+ import { getNumber, getString, isRecord } from '../json';
2
+ import {
3
+ OmpRpcProtocolError,
4
+ assertNoPreNegotiationRpcChunk,
5
+ type OmpRpcDecoderLimits,
6
+ type OmpRpcInboundFrame,
7
+ } from './rpc-protocol-contract';
8
+
9
+ export * from './rpc-protocol-contract';
100
10
  const STRICT_BASE64_PATTERN = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;
101
-
102
11
  function decodeStrictBase64(data: unknown): Buffer {
103
12
  if (typeof data !== 'string' || data.length === 0 || !STRICT_BASE64_PATTERN.test(data)) {
104
13
  throw new OmpRpcProtocolError(
@@ -388,14 +297,3 @@ export class OmpRpcFrameDecoder {
388
297
  }
389
298
  }
390
299
 
391
- export function encodeOmpRpcCommand(command: OmpRpcCommand, maxFrameBytes: number): Buffer {
392
- const line = `${JSON.stringify(command)}\n`;
393
- const byteLength = Buffer.byteLength(line, 'utf8');
394
- if (byteLength > maxFrameBytes) {
395
- throw new OmpRpcProtocolError(
396
- 'outbound-frame-too-large',
397
- `Outbound command of ${byteLength} bytes exceeds the ${maxFrameBytes}-byte limit.`
398
- );
399
- }
400
- return Buffer.from(line, 'utf8');
401
- }
@@ -0,0 +1,123 @@
1
+ import { isRecord } from '../json';
2
+ import type { OmpSdkErrorCategory } from './sdk-protocol';
3
+ import type { ProcessResult } from '../process-runner';
4
+ import type { ErrorClassification } from '../types';
5
+
6
+ export type ContractOmpSdkTerminal =
7
+ | {
8
+ readonly type: 'result';
9
+ readonly frame: Readonly<Record<string, unknown>>;
10
+ readonly event: Readonly<Record<string, unknown>> & {
11
+ readonly type: 'result';
12
+ readonly success: boolean;
13
+ };
14
+ }
15
+ | {
16
+ readonly type: 'error';
17
+ readonly frame: Readonly<Record<string, unknown>> & {
18
+ readonly error: {
19
+ readonly category: OmpSdkErrorCategory;
20
+ readonly retryable: boolean;
21
+ };
22
+ };
23
+ };
24
+
25
+ export interface ContractOmpSdkProcessResult extends ProcessResult {
26
+ readonly terminal: ContractOmpSdkTerminal;
27
+ readonly progress: readonly unknown[];
28
+ readonly diagnosticStderr: string;
29
+ readonly cleanupAttestation: Readonly<Record<string, unknown>>;
30
+ }
31
+
32
+ export function isOmpSdkErrorCategory(value: unknown): value is OmpSdkErrorCategory {
33
+ switch (value) {
34
+ case 'request':
35
+ case 'model':
36
+ case 'auth':
37
+ case 'rate-limit':
38
+ case 'timeout':
39
+ case 'provider':
40
+ case 'schema':
41
+ case 'cancelled':
42
+ case 'sdk':
43
+ case 'cleanup':
44
+ case 'internal':
45
+ return true;
46
+ default:
47
+ return false;
48
+ }
49
+ }
50
+
51
+ export function isContractOmpSdkTerminal(value: unknown): value is ContractOmpSdkTerminal {
52
+ if (!isRecord(value) || !isRecord(value.frame) || value.frame.type !== value.type) {
53
+ return false;
54
+ }
55
+ if (value.type === 'result') {
56
+ return (
57
+ isRecord(value.event) &&
58
+ value.event.type === 'result' &&
59
+ typeof value.event.success === 'boolean'
60
+ );
61
+ }
62
+ if (value.type !== 'error' || !isRecord(value.frame.error)) return false;
63
+ return (
64
+ isOmpSdkErrorCategory(value.frame.error.category) &&
65
+ typeof value.frame.error.retryable === 'boolean'
66
+ );
67
+ }
68
+
69
+ export function isContractOmpSdkProcessResult(
70
+ result: ProcessResult
71
+ ): result is ContractOmpSdkProcessResult {
72
+ return (
73
+ 'terminal' in result &&
74
+ isContractOmpSdkTerminal(result.terminal) &&
75
+ 'progress' in result &&
76
+ Array.isArray(result.progress) &&
77
+ 'diagnosticStderr' in result &&
78
+ typeof result.diagnosticStderr === 'string' &&
79
+ 'cleanupAttestation' in result &&
80
+ isRecord(result.cleanupAttestation)
81
+ );
82
+ }
83
+
84
+ export type OmpSdkErrorClassification = ErrorClassification & {
85
+ readonly category: OmpSdkErrorCategory;
86
+ };
87
+
88
+ export function ompSdkFailureClassification(
89
+ result: ContractOmpSdkProcessResult
90
+ ): OmpSdkErrorClassification | null {
91
+ if (result.terminal.type !== 'error') return null;
92
+ const { category, retryable } = result.terminal.frame.error;
93
+ return {
94
+ category,
95
+ retryable,
96
+ kind:
97
+ category === 'cancelled'
98
+ ? 'cancelled'
99
+ : retryable
100
+ ? 'unknown-retryable'
101
+ : 'permanent-pattern',
102
+ };
103
+ }
104
+
105
+ export function invokeEvidence(
106
+ result: ProcessResult,
107
+ timeoutMs: number | undefined
108
+ ): Record<string, unknown> {
109
+ const sdkResult = isContractOmpSdkProcessResult(result) ? result : null;
110
+ return {
111
+ exitCode: result.exitCode,
112
+ signal: result.signal,
113
+ durationMs: result.durationMs,
114
+ timedOut: result.timedOut ?? false,
115
+ timeoutMs: result.timeoutMs ?? timeoutMs ?? null,
116
+ ...(sdkResult === null
117
+ ? {}
118
+ : {
119
+ terminal: sdkResult.terminal.frame,
120
+ cleanupAttestation: sdkResult.cleanupAttestation,
121
+ }),
122
+ };
123
+ }
@@ -0,0 +1,55 @@
1
+ import { OMP_SDK_MAX_CREDENTIAL_BYTES } from './sdk-protocol';
2
+ import { OmpSdkProcessRunnerError } from './sdk-process-error';
3
+
4
+ const CREDENTIAL_NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
5
+ const MAX_CREDENTIAL_COUNT = 32;
6
+ const MAX_CREDENTIAL_NAME_BYTES = 128;
7
+ const MAX_CREDENTIAL_VALUE_BYTES = 16 * 1024;
8
+
9
+ export function credentialPayload(
10
+ names: readonly string[],
11
+ source: Readonly<Record<string, string | undefined>>
12
+ ): { readonly payload: Buffer; readonly secretValues: readonly string[] } {
13
+ if (names.length > MAX_CREDENTIAL_COUNT || new Set(names).size !== names.length) {
14
+ throw new OmpSdkProcessRunnerError(
15
+ 'credential-error',
16
+ 'OMP SDK credential name set is invalid.'
17
+ );
18
+ }
19
+ const values: Record<string, string> = {};
20
+ const secretValues: string[] = [];
21
+ for (const name of names) {
22
+ const value = source[name];
23
+ if (
24
+ !CREDENTIAL_NAME.test(name) ||
25
+ Buffer.byteLength(name) > MAX_CREDENTIAL_NAME_BYTES ||
26
+ typeof value !== 'string' ||
27
+ value.length === 0 ||
28
+ Buffer.byteLength(value) > MAX_CREDENTIAL_VALUE_BYTES
29
+ ) {
30
+ throw new OmpSdkProcessRunnerError(
31
+ 'credential-error',
32
+ `OMP SDK credential ${name} is missing or invalid.`
33
+ );
34
+ }
35
+ values[name] = value;
36
+ secretValues.push(value);
37
+ }
38
+ const payload = Buffer.from(JSON.stringify({ protocolVersion: 1, values }), 'utf8');
39
+ if (payload.byteLength > OMP_SDK_MAX_CREDENTIAL_BYTES) {
40
+ payload.fill(0);
41
+ throw new OmpSdkProcessRunnerError(
42
+ 'credential-error',
43
+ 'OMP SDK credential document is oversized.'
44
+ );
45
+ }
46
+ return { payload, secretValues };
47
+ }
48
+
49
+ export function redactDiagnostic(value: string, secrets: readonly string[]): string {
50
+ let redacted = value;
51
+ for (const secret of secrets) {
52
+ if (secret.length > 0) redacted = redacted.split(secret).join('[REDACTED]');
53
+ }
54
+ return redacted;
55
+ }
@@ -0,0 +1,9 @@
1
+ export class OmpSdkProcessRunnerError extends Error {
2
+ readonly code: 'cleanup-error' | 'containment-error' | 'credential-error' | 'protocol-error';
3
+
4
+ constructor(code: OmpSdkProcessRunnerError['code'], message: string, options?: ErrorOptions) {
5
+ super(message, options);
6
+ this.name = 'OmpSdkProcessRunnerError';
7
+ this.code = code;
8
+ }
9
+ }
@@ -0,0 +1,92 @@
1
+ import type { ChildProcess } from 'node:child_process';
2
+ import { Writable } from 'node:stream';
3
+
4
+ import {
5
+ OMP_SDK_BACKEND_VERSION,
6
+ OMP_SDK_BUN_VERSION,
7
+ parseOmpSdkProtocolFrame,
8
+ type OmpSdkCollectedTerminal,
9
+ type OmpSdkSidecarRequest,
10
+ } from './sdk-protocol';
11
+ import { OmpSdkProcessRunnerError } from './sdk-process-private-runtime';
12
+
13
+ export const MAX_STDERR_BYTES = 64 * 1024;
14
+ export const DEFAULT_TERMINATION_GRACE_MS = 250;
15
+ export const DEFAULT_REAP_TIMEOUT_MS = 2_000;
16
+ const TEST_IDENTITY_CAP_ENV = 'ZEROSHOT_OMP_TEST_IDENTITY_CAP';
17
+ export interface ChildOutcome {
18
+ readonly exitCode: number | null;
19
+ readonly signal: NodeJS.Signals | null;
20
+ readonly spawnError?: Error;
21
+ }
22
+
23
+ export function cancelledTerminal(request: OmpSdkSidecarRequest): OmpSdkCollectedTerminal {
24
+ const frame = parseOmpSdkProtocolFrame({
25
+ protocolVersion: 1,
26
+ type: 'error',
27
+ runId: request.runId,
28
+ backend: { id: 'omp-sdk', version: OMP_SDK_BACKEND_VERSION },
29
+ runtime: { name: 'bun', version: OMP_SDK_BUN_VERSION },
30
+ error: { code: 'cancelled', category: 'cancelled', retryable: false, redacted: true },
31
+ });
32
+ if (frame.type !== 'error') throw new Error('cancelled terminal construction failed');
33
+ return { type: 'error', frame };
34
+ }
35
+
36
+ export function childClose(child: ChildProcess): Promise<ChildOutcome> {
37
+ return new Promise((resolveClose) => {
38
+ const spawned = child.pid !== undefined;
39
+ let spawnError: Error | undefined;
40
+ child.once('error', (error) => {
41
+ if (!spawned) spawnError = error;
42
+ });
43
+ child.once('close', (exitCode, signal) => {
44
+ resolveClose({ exitCode, signal, ...(spawnError === undefined ? {} : { spawnError }) });
45
+ });
46
+ });
47
+ }
48
+
49
+ export function credentialWriter(child: ChildProcess): Writable {
50
+ const channel = child.stdio[3];
51
+ if (!(channel instanceof Writable)) {
52
+ throw new OmpSdkProcessRunnerError(
53
+ 'protocol-error',
54
+ 'OMP SDK credential channel was not created.'
55
+ );
56
+ }
57
+ channel.on('error', () => {
58
+ // Keep late peer-reset errors observed after the one-shot write callback from becoming uncaught.
59
+ });
60
+ return channel;
61
+ }
62
+
63
+ export async function writeCredentials(channel: Writable, payload: Buffer): Promise<void> {
64
+ try {
65
+ await new Promise<void>((resolveWrite, rejectWrite) => {
66
+ channel.once('error', rejectWrite);
67
+ channel.end(payload, () => {
68
+ channel.removeListener('error', rejectWrite);
69
+ resolveWrite();
70
+ });
71
+ });
72
+ } finally {
73
+ payload.fill(0);
74
+ }
75
+ }
76
+
77
+ export function duration(value: number | undefined, fallback: number): number {
78
+ return value !== undefined && Number.isFinite(value) && value >= 0 ? value : fallback;
79
+ }
80
+
81
+ export function testIdentityCapArgument(): readonly string[] {
82
+ const source = process.env.NODE_ENV === 'test' ? process.env[TEST_IDENTITY_CAP_ENV] : undefined;
83
+ if (source === undefined) return [];
84
+ const cap = Number(source);
85
+ if (!Number.isSafeInteger(cap) || cap < 8 || cap > 4_096) {
86
+ throw new OmpSdkProcessRunnerError(
87
+ 'protocol-error',
88
+ 'OMP SDK private test identity cap is invalid.'
89
+ );
90
+ }
91
+ return [String(cap)];
92
+ }