reeval 0.8.0 → 0.10.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 (326) hide show
  1. package/README.md +52 -40
  2. package/THIRD_PARTY_NOTICES.md +218 -11
  3. package/assets/package.json +1 -1
  4. package/assets/pnpm-lock.yaml +30 -30
  5. package/dist/adapter-DWlpOtRn.js +279 -0
  6. package/dist/adapter-DWlpOtRn.js.map +1 -0
  7. package/dist/{agent-B72lZ6w5.js → agent-CURAwx_q.js} +6 -6
  8. package/dist/{agent-B72lZ6w5.js.map → agent-CURAwx_q.js.map} +1 -1
  9. package/dist/{agent-Cfj1wD4D.js → agent-CaS_2Sce.js} +92 -26
  10. package/dist/agent-CaS_2Sce.js.map +1 -0
  11. package/dist/{analysis-BTNnKh1w.js → analysis-Bxub9LMT.js} +4 -4
  12. package/dist/{analysis-BTNnKh1w.js.map → analysis-Bxub9LMT.js.map} +1 -1
  13. package/dist/{assemble-BbFVjHeS.js → assemble-B9Alds-z.js} +290 -30
  14. package/dist/assemble-B9Alds-z.js.map +1 -0
  15. package/dist/assemble-J5MukZFY.js +1 -0
  16. package/dist/{client-CwzU9CiW.js → assert-EUIoRdIt.js} +38 -112
  17. package/dist/assert-EUIoRdIt.js.map +1 -0
  18. package/dist/bridge/index.mjs +248 -55
  19. package/dist/{capture-BXhBfmsM.js → capture-CNb9SuU5.js} +204 -39
  20. package/dist/capture-CNb9SuU5.js.map +1 -0
  21. package/dist/capture-jquXZBKK.js +1 -0
  22. package/dist/{cli-BMjTKY-D.js → cli-D303Vj5N.js} +257 -146
  23. package/dist/cli-D303Vj5N.js.map +1 -0
  24. package/dist/{cli-spec-DSvKsOK4.js → cli-spec-BPZbQG2p.js} +38 -19
  25. package/dist/cli-spec-BPZbQG2p.js.map +1 -0
  26. package/dist/cli.js +4 -2
  27. package/dist/cli.js.map +1 -1
  28. package/dist/client-fcwgwOAD.js +106 -0
  29. package/dist/client-fcwgwOAD.js.map +1 -0
  30. package/dist/{command-JPGNzFsA.js → command-BLfT7vnQ.js} +19 -18
  31. package/dist/command-BLfT7vnQ.js.map +1 -0
  32. package/dist/{command-BK4kOgkH.js → command-BT9a37ZR.js} +381 -78
  33. package/dist/command-BT9a37ZR.js.map +1 -0
  34. package/dist/{command-BqJtFiPy.js → command-Bge8F7Ko.js} +384 -101
  35. package/dist/command-Bge8F7Ko.js.map +1 -0
  36. package/dist/command-BkFjijN2.js +1 -0
  37. package/dist/{command-BdstSEHu.js → command-CMJtHKRa.js} +14 -14
  38. package/dist/{command-BdstSEHu.js.map → command-CMJtHKRa.js.map} +1 -1
  39. package/dist/commands-1p-bIWhN.js +1 -0
  40. package/dist/{commands-B618jg3C.js → commands-BFx16WB8.js} +8 -8
  41. package/dist/commands-BFx16WB8.js.map +1 -0
  42. package/dist/config-DEgnUiU-.js +756 -0
  43. package/dist/config-DEgnUiU-.js.map +1 -0
  44. package/dist/{context-CvUv7DUb.js → context-C1mxXh80.js} +11 -7
  45. package/dist/context-C1mxXh80.js.map +1 -0
  46. package/dist/{db-DFbtGIYy.js → db-CdHizc4_.js} +582 -53
  47. package/dist/db-CdHizc4_.js.map +1 -0
  48. package/dist/db-Dm1cRJJP.js +2 -0
  49. package/dist/debug-D7bEv_UV.js +1 -0
  50. package/dist/{dist-CTzThfu_.js → dist-B8hJImYt.js} +17 -4
  51. package/dist/dist-B8hJImYt.js.map +1 -0
  52. package/dist/{docker-2qns7hJ2.js → docker-7b_2SaH7.js} +35 -22
  53. package/dist/docker-7b_2SaH7.js.map +1 -0
  54. package/dist/{docker-IFRW8K5f.js → docker-sZrNrr82.js} +3 -3
  55. package/dist/docker-sZrNrr82.js.map +1 -0
  56. package/dist/docker-yauK-9X8.js +1 -0
  57. package/dist/{doctor-B6oYTPoR.js → doctor-BYNok4UO.js} +263 -84
  58. package/dist/doctor-BYNok4UO.js.map +1 -0
  59. package/dist/{duration-JsJrIWXq.js → duration-CEOQww97.js} +2 -2
  60. package/dist/{duration-JsJrIWXq.js.map → duration-CEOQww97.js.map} +1 -1
  61. package/dist/{egress-IUKdeayc.js → egress-C4PZTSSe.js} +147 -14
  62. package/dist/egress-C4PZTSSe.js.map +1 -0
  63. package/dist/environment-DNjRk0nU.js +1133 -0
  64. package/dist/environment-DNjRk0nU.js.map +1 -0
  65. package/dist/{errors-yDAEwmZo.js → errors-B6BSMs03.js} +2 -2
  66. package/dist/errors-B6BSMs03.js.map +1 -0
  67. package/dist/{errors-C9w_ud7g.js → errors-r025B0Zb.js} +4 -4
  68. package/dist/errors-r025B0Zb.js.map +1 -0
  69. package/dist/evaluate-C1UVL21l.d.ts +92 -0
  70. package/dist/evaluate-D4zeRGBF.js +2351 -0
  71. package/dist/evaluate-D4zeRGBF.js.map +1 -0
  72. package/dist/family-D2b7WD10.js +67 -0
  73. package/dist/family-D2b7WD10.js.map +1 -0
  74. package/dist/files-BAt0i00X.js +1 -0
  75. package/dist/{files-CMSUXAEg.js → files-BXUdY8tr.js} +10 -9
  76. package/dist/{files-CMSUXAEg.js.map → files-BXUdY8tr.js.map} +1 -1
  77. package/dist/files-BhyltlDB.js +1 -0
  78. package/dist/files-Bk1mC3AN.js +43 -0
  79. package/dist/files-Bk1mC3AN.js.map +1 -0
  80. package/dist/{files-B6aVVGrk.js → files-DQmHE7pb.js} +5 -5
  81. package/dist/{files-B6aVVGrk.js.map → files-DQmHE7pb.js.map} +1 -1
  82. package/dist/files-ZZPqfAo6.js +1 -0
  83. package/dist/{git-EmdFJ4DY.js → git-DfG-YJ1u.js} +2 -2
  84. package/dist/{git-EmdFJ4DY.js.map → git-DfG-YJ1u.js.map} +1 -1
  85. package/dist/harness-B8QC9u0O.js +323 -0
  86. package/dist/harness-B8QC9u0O.js.map +1 -0
  87. package/dist/harness.d.ts +19 -31
  88. package/dist/harness.js +1 -2
  89. package/dist/{header-_F0EWob3.js → header-hK-Z_Po9.js} +10 -3
  90. package/dist/{header-_F0EWob3.js.map → header-hK-Z_Po9.js.map} +1 -1
  91. package/dist/{images-CscddrJU.js → images-0On0cztu.js} +114 -45
  92. package/dist/images-0On0cztu.js.map +1 -0
  93. package/dist/index.d.ts +10 -26
  94. package/dist/index.js +6 -2108
  95. package/dist/{init-NQfIvi-0.js → init-B77Rpcqc.js} +26 -8
  96. package/dist/init-B77Rpcqc.js.map +1 -0
  97. package/dist/init-BrOWin3W.js +1 -0
  98. package/dist/{invocations-nPvrlZPj.js → invocations-DbGfBAA_.js} +4 -4
  99. package/dist/{invocations-nPvrlZPj.js.map → invocations-DbGfBAA_.js.map} +1 -1
  100. package/dist/{judge-CeYPN8P_.js → judge-DW_GDOmB.js} +11 -19
  101. package/dist/{judge-CeYPN8P_.js.map → judge-DW_GDOmB.js.map} +1 -1
  102. package/dist/judge.d.ts +2 -2
  103. package/dist/judge.js +1 -1
  104. package/dist/{live-S0qODb6o.js → live-jlfszAbb.js} +9 -20
  105. package/dist/live-jlfszAbb.js.map +1 -0
  106. package/dist/matchers-Ddmc2z7H.js +118 -0
  107. package/dist/matchers-Ddmc2z7H.js.map +1 -0
  108. package/dist/{model-DEQo3FkZ.js → model-DaVCY3rb.js} +2 -2
  109. package/dist/{model-DEQo3FkZ.js.map → model-DaVCY3rb.js.map} +1 -1
  110. package/dist/model-NM3ID0uR.js +1 -0
  111. package/dist/{model-Cl507trk.js → model-h_cDtcRr.js} +19 -18
  112. package/dist/model-h_cDtcRr.js.map +1 -0
  113. package/dist/model-nwWJvaUR.js +1 -0
  114. package/dist/{model-BndnmcLm.js → model-oqcDplJG.js} +271 -34
  115. package/dist/model-oqcDplJG.js.map +1 -0
  116. package/dist/{node-Co7EXge0.js → node-B3ydHo6t.js} +10 -47
  117. package/dist/node-B3ydHo6t.js.map +1 -0
  118. package/dist/object-CLf2-tNq.js +9 -0
  119. package/dist/object-CLf2-tNq.js.map +1 -0
  120. package/dist/{opencode-providers-ByD85Q0l.js → opencode-providers-J9colP0-.js} +96 -21
  121. package/dist/opencode-providers-J9colP0-.js.map +1 -0
  122. package/dist/options-Bh2W63dK.js +1119 -0
  123. package/dist/options-Bh2W63dK.js.map +1 -0
  124. package/dist/{pairs-DDsjgm5F.js → pairs-CnInRu-G.js} +76 -2
  125. package/dist/{pairs-DDsjgm5F.js.map → pairs-CnInRu-G.js.map} +1 -1
  126. package/dist/{patch-CGCVipPu.js → patch-Zac5aIRM.js} +6 -6
  127. package/dist/{patch-CGCVipPu.js.map → patch-Zac5aIRM.js.map} +1 -1
  128. package/dist/{plan-PPc4-6xd.js → plan-C9Cy27Ay.js} +75 -32
  129. package/dist/plan-C9Cy27Ay.js.map +1 -0
  130. package/dist/preflight-CPWpQeBI.js +1 -0
  131. package/dist/{preflight-CddycK92.js → preflight-D7iFPKeK.js} +8 -7
  132. package/dist/preflight-D7iFPKeK.js.map +1 -0
  133. package/dist/prepare-BGjePFQl.js +2 -0
  134. package/dist/{prepare-CsP-057p.js → prepare-doGxaAGR.js} +38 -30
  135. package/dist/prepare-doGxaAGR.js.map +1 -0
  136. package/dist/process-CSVO_jsc.js +119 -0
  137. package/dist/process-CSVO_jsc.js.map +1 -0
  138. package/dist/{provenance-CsX6PHDR.js → provenance-DmE9uPVt.js} +4 -4
  139. package/dist/{provenance-CsX6PHDR.js.map → provenance-DmE9uPVt.js.map} +1 -1
  140. package/dist/provider-DehR4CMN.js +1 -0
  141. package/dist/providers-gDMko8fl.js +1 -0
  142. package/dist/providers-tAOD1NQN.js +165 -0
  143. package/dist/providers-tAOD1NQN.js.map +1 -0
  144. package/dist/{query-BUcwCYsI.js → query-Bes9Kh6Y.js} +3 -3
  145. package/dist/{query-BUcwCYsI.js.map → query-Bes9Kh6Y.js.map} +1 -1
  146. package/dist/query-C_G_svLU.js +1 -0
  147. package/dist/questions-DjAwMxZ3.js +524 -0
  148. package/dist/questions-DjAwMxZ3.js.map +1 -0
  149. package/dist/{record-BRP9vZrj.js → record-BKmMvZ6O.js} +9 -1
  150. package/dist/{record-BRP9vZrj.js.map → record-BKmMvZ6O.js.map} +1 -1
  151. package/dist/remote-HDRt16ew.js +378 -0
  152. package/dist/remote-HDRt16ew.js.map +1 -0
  153. package/dist/{results-BcSHWbgB.js → results-DuauQI3Z.js} +4 -4
  154. package/dist/{results-BcSHWbgB.js.map → results-DuauQI3Z.js.map} +1 -1
  155. package/dist/{resume-DZ9AmfPv.js → resume-BRfa8E_s.js} +10 -10
  156. package/dist/{resume-DZ9AmfPv.js.map → resume-BRfa8E_s.js.map} +1 -1
  157. package/dist/{root-CvdRlRZX.js → root-DICDHCtp.js} +4 -4
  158. package/dist/{root-CvdRlRZX.js.map → root-DICDHCtp.js.map} +1 -1
  159. package/dist/{runtime-Dfb2r-cS.js → runtime-PX_oXiCS.js} +105 -11
  160. package/dist/runtime-PX_oXiCS.js.map +1 -0
  161. package/dist/sandbox-D3A8oUb7.js +70 -0
  162. package/dist/sandbox-D3A8oUb7.js.map +1 -0
  163. package/dist/sandbox.d.ts +22 -8
  164. package/dist/sandbox.js +1 -2
  165. package/dist/server-C7sg1ndo.js +1 -0
  166. package/dist/{server-Da60oe4b.js → server-XDleKaF_.js} +11 -11
  167. package/dist/server-XDleKaF_.js.map +1 -0
  168. package/dist/shared-DYpIb1BI.js +166 -0
  169. package/dist/shared-DYpIb1BI.js.map +1 -0
  170. package/dist/{source-BVOnL3sn.js → source-C8xumIWj.js} +2 -2
  171. package/dist/{source-BVOnL3sn.js.map → source-C8xumIWj.js.map} +1 -1
  172. package/dist/source-fGd0SaKP.js +1 -0
  173. package/dist/{src-TdJuDYqB.js → src-B7treWa8.js} +1597 -292
  174. package/dist/src-B7treWa8.js.map +1 -0
  175. package/dist/{src-C1E9HDWO.js → src-C7_1SqDP.js} +3 -3
  176. package/dist/{src-C1E9HDWO.js.map → src-C7_1SqDP.js.map} +1 -1
  177. package/dist/{src-DDNXsD9H.js → src-CF17Ug08.js} +5 -4
  178. package/dist/src-CF17Ug08.js.map +1 -0
  179. package/dist/{src-D_cXqmnI.js → src-CFp86GtV.js} +60 -60
  180. package/dist/src-CFp86GtV.js.map +1 -0
  181. package/dist/src-C_lPtowT.js +2 -0
  182. package/dist/src-DIL0jST0.js +368 -0
  183. package/dist/src-DIL0jST0.js.map +1 -0
  184. package/dist/src-DNnG4e4R.js +2 -0
  185. package/dist/src-DTbrY1hi.js +2 -0
  186. package/dist/src-DdyJEh2v.js +2 -0
  187. package/dist/src-Dj9PAroc.js +2 -0
  188. package/dist/src-Du8H85Qq.js +2 -0
  189. package/dist/src-DvCg0NBs.js +324 -0
  190. package/dist/src-DvCg0NBs.js.map +1 -0
  191. package/dist/{src-CxTC5kNI.js → src-DvK0EIZx.js} +8 -10
  192. package/dist/{src-CxTC5kNI.js.map → src-DvK0EIZx.js.map} +1 -1
  193. package/dist/{src-DVy58-zZ.js → src-FGXhkEkH.js} +5 -5
  194. package/dist/{src-DVy58-zZ.js.map → src-FGXhkEkH.js.map} +1 -1
  195. package/dist/src-jzagbuqH.js +2 -0
  196. package/dist/src-ofUaYbuY.js +3 -0
  197. package/dist/src-pJZOrYR9.js +1 -0
  198. package/dist/{src-D95O-Smv.js → src-u8_ixn_F.js} +15 -11
  199. package/dist/src-u8_ixn_F.js.map +1 -0
  200. package/dist/{state-B72h_jEw.js → state-C__9swoG.js} +36 -24
  201. package/dist/state-C__9swoG.js.map +1 -0
  202. package/dist/state-CeR6oz0k.js +66 -0
  203. package/dist/state-CeR6oz0k.js.map +1 -0
  204. package/dist/state-CgjQo29K.js +1 -0
  205. package/dist/studio-app/assets/index-CwQN3f_h.css +2 -0
  206. package/dist/studio-app/assets/{index-Bgr-efZm.js → index-DrQc2Yxd.js} +12 -12
  207. package/dist/studio-app/index.html +2 -2
  208. package/dist/{summary-k3mhWWXv.js → summary-BLAVLySU.js} +202 -17
  209. package/dist/summary-BLAVLySU.js.map +1 -0
  210. package/dist/{summary-CJdxaRdM.js → summary-DgyjUh_l.js} +7 -7
  211. package/dist/{summary-CJdxaRdM.js.map → summary-DgyjUh_l.js.map} +1 -1
  212. package/dist/testing.d.ts +3 -2
  213. package/dist/testing.js +3 -2
  214. package/dist/{tool-target-BU1JnSE9.js → tool-target-D2mcYlSQ.js} +14 -7
  215. package/dist/tool-target-D2mcYlSQ.js.map +1 -0
  216. package/dist/{tools-D0gF2QoV.js → tools-GCyNYSc1.js} +7 -7
  217. package/dist/tools-GCyNYSc1.js.map +1 -0
  218. package/dist/transcript-BNNANU8A.js +64 -0
  219. package/dist/transcript-BNNANU8A.js.map +1 -0
  220. package/dist/types-C5vI3g1C.js.map +1 -1
  221. package/dist/{types-_LOFdPUf.d.ts → types-g17bRAzt.d.ts} +578 -49
  222. package/dist/{usage-DDF_6tkV.js → usage-CleNKkly.js} +4 -2
  223. package/dist/{usage-DDF_6tkV.js.map → usage-CleNKkly.js.map} +1 -1
  224. package/dist/view/index.d.ts +83 -17
  225. package/dist/view/index.js +7 -6
  226. package/dist/views-BW6oCDUQ.js +2 -0
  227. package/dist/{views-DZ1YDqey.js → views-BmQF4UCI.js} +13 -8
  228. package/dist/views-BmQF4UCI.js.map +1 -0
  229. package/dist/{worker-entry-DXeyWY-m.js → worker-entry-yOchGYYv.js} +16 -225
  230. package/dist/worker-entry-yOchGYYv.js.map +1 -0
  231. package/dist/{workspace-DpXdrslo.js → workspace-CgyHEM0l.js} +7 -7
  232. package/dist/{workspace-DpXdrslo.js.map → workspace-CgyHEM0l.js.map} +1 -1
  233. package/dist/workspace-D8sSgpiy.js +1 -0
  234. package/docker/Dockerfile +7 -5
  235. package/package.json +12 -12
  236. package/dist/agent-Cfj1wD4D.js.map +0 -1
  237. package/dist/assemble-BbFVjHeS.js.map +0 -1
  238. package/dist/assemble-CXiTVyHD.js +0 -2
  239. package/dist/capture-BXhBfmsM.js.map +0 -1
  240. package/dist/capture-N7r3yeak.js +0 -2
  241. package/dist/cli-BMjTKY-D.js.map +0 -1
  242. package/dist/cli-spec-DSvKsOK4.js.map +0 -1
  243. package/dist/client-CwzU9CiW.js.map +0 -1
  244. package/dist/command-BK4kOgkH.js.map +0 -1
  245. package/dist/command-BqJtFiPy.js.map +0 -1
  246. package/dist/command-CTVGuH8y.js +0 -2
  247. package/dist/command-JPGNzFsA.js.map +0 -1
  248. package/dist/commands-B618jg3C.js.map +0 -1
  249. package/dist/commands-Duo2ur3r.js +0 -2
  250. package/dist/config-B-E0xRkf.js +0 -447
  251. package/dist/config-B-E0xRkf.js.map +0 -1
  252. package/dist/context-CvUv7DUb.js.map +0 -1
  253. package/dist/db-CnoUy-FZ.js +0 -3
  254. package/dist/db-DFbtGIYy.js.map +0 -1
  255. package/dist/debug-SEmW4w8f.js +0 -2
  256. package/dist/dist-CTzThfu_.js.map +0 -1
  257. package/dist/docker-2qns7hJ2.js.map +0 -1
  258. package/dist/docker-D6t23fZl.js +0 -2
  259. package/dist/docker-IFRW8K5f.js.map +0 -1
  260. package/dist/doctor-B6oYTPoR.js.map +0 -1
  261. package/dist/egress-IUKdeayc.js.map +0 -1
  262. package/dist/environment-DiCljXMD.js +0 -657
  263. package/dist/environment-DiCljXMD.js.map +0 -1
  264. package/dist/errors-C9w_ud7g.js.map +0 -1
  265. package/dist/errors-yDAEwmZo.js.map +0 -1
  266. package/dist/fake-instructions-CUI33I_F.js +0 -32
  267. package/dist/fake-instructions-CUI33I_F.js.map +0 -1
  268. package/dist/files-BM78_nnF.js +0 -2
  269. package/dist/files-BpYgF2z0.js +0 -2
  270. package/dist/files-YCCVaTQC.js +0 -2
  271. package/dist/harness-iqWeJQMM.js +0 -154
  272. package/dist/harness-iqWeJQMM.js.map +0 -1
  273. package/dist/images-CscddrJU.js.map +0 -1
  274. package/dist/index.js.map +0 -1
  275. package/dist/init-DBHyi92L.js +0 -2
  276. package/dist/init-NQfIvi-0.js.map +0 -1
  277. package/dist/jiti-BcJHCtrb.js +0 -46
  278. package/dist/jiti-BcJHCtrb.js.map +0 -1
  279. package/dist/live-S0qODb6o.js.map +0 -1
  280. package/dist/model-BbLGRtOs.js +0 -2
  281. package/dist/model-BndnmcLm.js.map +0 -1
  282. package/dist/model-Cl507trk.js.map +0 -1
  283. package/dist/model-DMOraCcm.js +0 -2
  284. package/dist/node-Co7EXge0.js.map +0 -1
  285. package/dist/opencode-providers-ByD85Q0l.js.map +0 -1
  286. package/dist/options-DPUlm4FI.js +0 -735
  287. package/dist/options-DPUlm4FI.js.map +0 -1
  288. package/dist/plan-PPc4-6xd.js.map +0 -1
  289. package/dist/preflight-CddycK92.js.map +0 -1
  290. package/dist/preflight-Zumy0adT.js +0 -2
  291. package/dist/prepare-CKdMoC7e.js +0 -3
  292. package/dist/prepare-CsP-057p.js.map +0 -1
  293. package/dist/provider-BDbNOQhQ.js +0 -2
  294. package/dist/providers-DkwiLKDS.js +0 -107
  295. package/dist/providers-DkwiLKDS.js.map +0 -1
  296. package/dist/providers-yXZZcPfx.js +0 -2
  297. package/dist/query-noGbekGF.js +0 -2
  298. package/dist/questions-BEPj98fZ.js +0 -234
  299. package/dist/questions-BEPj98fZ.js.map +0 -1
  300. package/dist/runtime-Dfb2r-cS.js.map +0 -1
  301. package/dist/sandbox--ZXuscAZ.js +0 -134
  302. package/dist/sandbox--ZXuscAZ.js.map +0 -1
  303. package/dist/server-Da60oe4b.js.map +0 -1
  304. package/dist/server-DiGR4JxK.js +0 -2
  305. package/dist/source-Dqu0jKwx.js +0 -2
  306. package/dist/src-BHNiP-5A.js +0 -4
  307. package/dist/src-BT4dB5CO.js +0 -2
  308. package/dist/src-BT5pwco0.js +0 -3
  309. package/dist/src-BrMbt1B2.js +0 -3
  310. package/dist/src-D13vpMh0.js +0 -3
  311. package/dist/src-D95O-Smv.js.map +0 -1
  312. package/dist/src-DDNXsD9H.js.map +0 -1
  313. package/dist/src-D_cXqmnI.js.map +0 -1
  314. package/dist/src-DdRlaiRc.js +0 -3
  315. package/dist/src-TdJuDYqB.js.map +0 -1
  316. package/dist/src-xczuQbE6.js +0 -3
  317. package/dist/state-B72h_jEw.js.map +0 -1
  318. package/dist/state-Bf_Vq_pV.js +0 -2
  319. package/dist/studio-app/assets/index-CUx6GoL5.css +0 -2
  320. package/dist/summary-k3mhWWXv.js.map +0 -1
  321. package/dist/tool-target-BU1JnSE9.js.map +0 -1
  322. package/dist/tools-D0gF2QoV.js.map +0 -1
  323. package/dist/views-DZ1YDqey.js.map +0 -1
  324. package/dist/views-Ds0GXWtX.js +0 -3
  325. package/dist/worker-entry-DXeyWY-m.js.map +0 -1
  326. package/dist/workspace-DzNL-3iO.js +0 -2
@@ -1,12 +1,13 @@
1
- import { n as toolTarget, t as SKILL_LOAD_TOOLS } from "./tool-target-BU1JnSE9.js";
2
- import { t as Scheduler } from "./core-tLN-z1Be.js";
1
+ import { t as isObjectLike } from "./object-CLf2-tNq.js";
2
+ import { n as toolTarget, t as SKILL_LOAD_TOOLS } from "./tool-target-D2mcYlSQ.js";
3
+ import picomatch from "picomatch";
3
4
  //#region src/assert.ts
4
5
  /** A check the turn's harness can't answer either way, e.g. a web fetch it never reports. */
5
6
  var HarnessCapabilityError = class extends Error {
6
7
  name = "HarnessCapabilityError";
7
8
  };
8
- const isTurn = (value) => typeof value === "object" && value !== null && Array.isArray(value.transcript) && Array.isArray(value.unreported);
9
- const isContext = (value) => typeof value === "object" && value !== null && Array.isArray(value.turns);
9
+ const isTurn = (value) => isObjectLike(value) && Array.isArray(value.transcript) && Array.isArray(value.unreported);
10
+ const isContext = (value) => isObjectLike(value) && Array.isArray(value.turns);
10
11
  /** A turn from `c.send()`, or `c` (every turn so far). */
11
12
  function transcriptSubject(actual, matcher) {
12
13
  if (isTurn(actual)) return actual;
@@ -19,7 +20,7 @@ function transcriptSubject(actual, matcher) {
19
20
  const matches = (value, pattern) => pattern === void 0 || (typeof pattern === "string" ? value.includes(pattern) : pattern.test(value));
20
21
  const listed = (values) => values.length ? JSON.stringify(values) : "none";
21
22
  const targetOf = (pattern) => pattern === void 0 ? "" : ` matching ${pattern}`;
22
- const record = (value) => typeof value === "object" && value !== null ? value : {};
23
+ const record = (value) => isObjectLike(value) ? value : {};
23
24
  const toolsOf = (transcript) => transcript.flatMap((e) => e.type === "tool" ? [e] : []);
24
25
  const editsOf = (transcript) => transcript.flatMap((e) => e.type === "file-edit" ? [e] : []);
25
26
  const skillLoadName = (event) => {
@@ -44,10 +45,9 @@ function inputMatches(input, expected) {
44
45
  const text = typeof input === "string" ? input : JSON.stringify(input ?? "");
45
46
  if (typeof expected === "string") return text.includes(expected);
46
47
  if (expected instanceof RegExp) return expected.test(text);
47
- if (typeof input !== "object" || input === null) return false;
48
- const rec = input;
48
+ if (!isObjectLike(input)) return false;
49
49
  return Object.entries(expected).every(([key, value]) => {
50
- const actual = rec[key];
50
+ const actual = input[key];
51
51
  if (value instanceof RegExp) return value.test(String(actual ?? ""));
52
52
  if (typeof value === "string") return actual === value || String(actual ?? "").includes(value);
53
53
  return JSON.stringify(actual) === JSON.stringify(value);
@@ -142,6 +142,34 @@ function edited(actual, path) {
142
142
  message: () => pass ? `expected no file edits${targetOf(path)}, got ${listed(seen)}` : `expected file edits${targetOf(path)}, got ${listed(seen)}`
143
143
  };
144
144
  }
145
+ const hasDiff = (value) => isObjectLike(value) && isObjectLike(value.diff) && Array.isArray(value.diff.files);
146
+ /** A turn's changed files, or `c`'s as of its latest turn: the diff is cumulative. */
147
+ function changedFiles(actual) {
148
+ if (hasDiff(actual)) return actual.diff.files;
149
+ if (isContext(actual)) return actual.turns.at(-1)?.diff.files ?? [];
150
+ throw new TypeError("toHaveChanged() expects a turn from c.send(), or c");
151
+ }
152
+ /** A glob also matches every file under the directory it names, so `test` is `test/**` too. */
153
+ const pathTest = (pattern) => {
154
+ if (pattern instanceof RegExp) return (path) => pattern.test(path);
155
+ const glob = pattern.replace(/^\.?\/+/, "").replace(/\/+$/, "");
156
+ const self = picomatch(glob, { dot: true });
157
+ const inside = picomatch(`${glob}/**`, { dot: true });
158
+ return (path) => self(path) || inside(path);
159
+ };
160
+ /** Files in the workspace diff, so every write counts: a tool's, a shell command's or a subprocess's. */
161
+ function changed(actual, paths) {
162
+ const files = changedFiles(actual);
163
+ const patterns = paths === void 0 ? [] : typeof paths === "string" || paths instanceof RegExp ? [paths] : [...paths];
164
+ const tests = patterns.map(pathTest);
165
+ const hits = files.filter((f) => tests.length === 0 || tests.some((t) => t(f.path)));
166
+ const label = (list) => list.length ? `[${list.map((f) => `${JSON.stringify(f.path)} (${f.status})`).join(", ")}]` : "none";
167
+ const target = patterns.length ? ` to ${patterns.map(String).join(", ")}` : "";
168
+ return {
169
+ pass: hits.length > 0,
170
+ message: () => hits.length > 0 ? `expected no changes${target}, got ${label(hits)}` : `expected changes${target}, got ${label(files)}`
171
+ };
172
+ }
145
173
  function searched(actual, query) {
146
174
  return webEvent("toHaveSearched", actual, "web-search", (e) => "query" in e ? e.query : "", query);
147
175
  }
@@ -149,108 +177,6 @@ function fetched(actual, url) {
149
177
  return webEvent("toHaveFetched", actual, "web-fetch", (e) => "url" in e ? e.url : "", url);
150
178
  }
151
179
  //#endregion
152
- //#region src/scheduler/client.ts
153
- var LocalTransport = class {
154
- #pending = /* @__PURE__ */ new Map();
155
- #scheduler = new Scheduler((r) => {
156
- this.#pending.get(r.id)?.resolve();
157
- this.#pending.delete(r.id);
158
- });
159
- request(id, limits, rank, pending) {
160
- this.#pending.set(id, pending);
161
- this.#scheduler.request({
162
- id,
163
- owner: "local",
164
- limits,
165
- ...rank ? { rank } : {}
166
- });
167
- }
168
- release(id) {
169
- this.#pending.delete(id);
170
- this.#scheduler.release(id);
171
- }
172
- };
173
- /** Over the worker's IPC channel to reeval's own engine: requests out, grants back. */
174
- var ChannelTransport = class {
175
- #pending = /* @__PURE__ */ new Map();
176
- #send;
177
- constructor(send) {
178
- this.#send = send;
179
- }
180
- grant(id) {
181
- const pending = this.#pending.get(id);
182
- this.#pending.delete(id);
183
- pending?.resolve();
184
- }
185
- request(id, limits, rank, pending) {
186
- this.#pending.set(id, pending);
187
- this.#send({
188
- t: "request",
189
- id,
190
- limits,
191
- ...rank ? { rank } : {}
192
- });
193
- }
194
- release(id) {
195
- this.#pending.delete(id);
196
- this.#send({
197
- t: "release",
198
- id
199
- });
200
- }
201
- };
202
- let transport;
203
- let ids = 0;
204
- /** Points this process at the run's scheduler over `send`; returns what delivers its grants. */
205
- function useSchedulerChannel(send) {
206
- const channel = new ChannelTransport(send);
207
- transport = channel;
208
- return (id) => channel.grant(id);
209
- }
210
- /**
211
- * Waits until every resource in `limits` has room, then holds a lease on each until released.
212
- * Rejects with the signal's reason if it aborts first.
213
- */
214
- function acquire(limits, options = {}) {
215
- const { rank, signal } = options;
216
- if (signal?.aborted) return Promise.reject(signal.reason);
217
- transport ??= new LocalTransport();
218
- const via = transport;
219
- const id = String(++ids);
220
- let released = false;
221
- const lease = { release() {
222
- if (released) return;
223
- released = true;
224
- via.release(id);
225
- } };
226
- return new Promise((resolve, reject) => {
227
- const onAbort = () => {
228
- lease.release();
229
- reject(signal?.reason);
230
- };
231
- signal?.addEventListener("abort", onAbort, { once: true });
232
- via.request(id, limits, rank, {
233
- resolve: () => {
234
- signal?.removeEventListener("abort", onAbort);
235
- resolve(lease);
236
- },
237
- reject: (error) => {
238
- signal?.removeEventListener("abort", onAbort);
239
- reject(error);
240
- }
241
- });
242
- });
243
- }
244
- /** Runs `fn` while holding leases on `limits`. */
245
- async function withLease(limits, fn, signal) {
246
- const lease = await acquire(limits, signal ? { signal } : {});
247
- try {
248
- return await fn();
249
- } finally {
250
- lease.release();
251
- }
252
- }
253
- //#endregion
254
- export { calledMcp as a, edited as c, searched as d, HarnessCapabilityError as i, fetched as l, useSchedulerChannel as n, calledSkill as o, withLease as r, calledTool as s, acquire as t, ran as u };
180
+ export { changed as a, ran as c, calledTool as i, searched as l, calledMcp as n, edited as o, calledSkill as r, fetched as s, HarnessCapabilityError as t };
255
181
 
256
- //# sourceMappingURL=client-CwzU9CiW.js.map
182
+ //# sourceMappingURL=assert-EUIoRdIt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assert-EUIoRdIt.js","names":[],"sources":["../src/assert.ts"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- // Modified by Invertase with patches/@ai-sdk__harness-claude-code@1.0.152.patch; see THIRD_PARTY_NOTICES.md.
1
+ // Modified by Invertase with patches/@ai-sdk__harness-claude-code@1.0.158.patch; see THIRD_PARTY_NOTICES.md.
2
2
  import { appendFile, mkdir, writeFile } from "node:fs/promises";
3
3
  import { existsSync, readFileSync } from "node:fs";
4
4
  import { randomUUID } from "node:crypto";
@@ -9,6 +9,71 @@ import * as mcpServerModule from "@modelcontextprotocol/sdk/server/mcp.js";
9
9
  import { isDeepStrictEqual } from "node:util";
10
10
  import { z } from "zod/v4";
11
11
  //#region ../harness/dist/bridge/index.js
12
+ const name = "AI_HarnessBridgeCapabilityUnsupportedError";
13
+ /**
14
+ * Signals an unsupported capability discovered inside a sandbox bridge.
15
+ * `isInstance` also recognizes the serialized error shape received by the
16
+ * host, where it can be translated to `HarnessCapabilityUnsupportedError`.
17
+ */
18
+ var HarnessBridgeCapabilityUnsupportedError = class extends Error {
19
+ constructor({ message, harnessId, cause }) {
20
+ super(message);
21
+ Object.defineProperty(this, "name", { value: name });
22
+ this.harnessId = harnessId;
23
+ this.cause = cause;
24
+ }
25
+ static isInstance(error) {
26
+ return error != null && typeof error === "object" && "name" in error && error.name === name && "message" in error && typeof error.message === "string";
27
+ }
28
+ };
29
+ function getNormalizedInlineImage(part) {
30
+ if (part.type === "file" && part.mediaType.startsWith("image/") && part.mediaType !== "image/*" && part.data.type === "data" && typeof part.data.data === "string") return {
31
+ data: part.data.data,
32
+ mediaType: part.mediaType
33
+ };
34
+ }
35
+ function convertHarnessToolModelOutput({ output }) {
36
+ switch (output.type) {
37
+ case "text":
38
+ case "error-text": return {
39
+ content: [{
40
+ type: "text",
41
+ text: output.value
42
+ }],
43
+ isError: output.type === "error-text"
44
+ };
45
+ case "json":
46
+ case "error-json": return {
47
+ content: [{
48
+ type: "text",
49
+ text: JSON.stringify(output.value)
50
+ }],
51
+ isError: output.type === "error-json"
52
+ };
53
+ case "execution-denied": return {
54
+ content: [{
55
+ type: "text",
56
+ text: output.reason ?? "Tool execution denied."
57
+ }],
58
+ isError: true
59
+ };
60
+ case "content": return {
61
+ content: output.value.map((part) => {
62
+ if (part.type === "text") return {
63
+ type: "text",
64
+ text: part.text
65
+ };
66
+ const image = getNormalizedInlineImage(part);
67
+ if (image != null) return {
68
+ type: "image",
69
+ ...image
70
+ };
71
+ throw new HarnessBridgeCapabilityUnsupportedError({ message: `Harnesses support only text and inline images in tool model output; unsupported content '${part.type}'.` });
72
+ }),
73
+ isError: false
74
+ };
75
+ }
76
+ }
12
77
  const DEBUG_LEVEL_WEIGHT = {
13
78
  error: 0,
14
79
  warn: 1,
@@ -633,12 +698,17 @@ function createClaudeStreamEventState() {
633
698
  pendingStepDeltaUsage: void 0,
634
699
  pendingStepUsage: void 0,
635
700
  pendingResponseUsage: void 0,
701
+ responseOpen: false,
636
702
  stepOpen: false,
637
703
  mcpToolCalls: /* @__PURE__ */ new Map(),
638
704
  mcpHandlerCalls: /* @__PURE__ */ new Map(),
639
705
  externalMcpToolUseIds: /* @__PURE__ */ new Set(),
640
706
  structuredOutputToolUseIds: /* @__PURE__ */ new Set(),
641
- observedTerminalError: void 0
707
+ observedTerminalError: void 0,
708
+ hostInputWaitingToolUseIds: /* @__PURE__ */ new Set(),
709
+ earlyFinishStepToolUseIds: /* @__PURE__ */ new Set(),
710
+ emittedToolCallIds: /* @__PURE__ */ new Set(),
711
+ modelResponseStreaming: false
642
712
  };
643
713
  }
644
714
  const UNRECOVERABLE_API_RETRY_STATUSES = /* @__PURE__ */ new Set([
@@ -731,12 +801,34 @@ function createEmitStreamEvent({ state, emit, emitWarning, emitTerminalError, on
731
801
  continue;
732
802
  }
733
803
  if (block.name.startsWith(HOST_TOOL_PREFIX)) {
804
+ const hostToolName = block.name.slice(20);
734
805
  state.pendingStepToolUseIds.add(block.id);
735
806
  state.mcpToolCalls.set(block.id, {
736
- toolName: block.name.slice(20),
807
+ toolName: hostToolName,
737
808
  input: block.input ?? {}
738
809
  });
739
810
  opensStep = true;
811
+ const handlerCallId = findMcpHandlerCallId({
812
+ state,
813
+ toolCallId: block.id,
814
+ toolCall: state.mcpToolCalls.get(block.id)
815
+ });
816
+ if (handlerCallId != null) {
817
+ state.mcpHandlerCalls.get(handlerCallId).toolUseId = block.id;
818
+ state.emittedToolCallIds.add(block.id);
819
+ continue;
820
+ }
821
+ state.hostInputWaitingToolUseIds.add(block.id);
822
+ if (!state.emittedToolCallIds.has(block.id)) {
823
+ state.emittedToolCallIds.add(block.id);
824
+ emit({
825
+ type: "tool-call",
826
+ toolCallId: block.id,
827
+ toolName: hostToolName,
828
+ input: JSON.stringify(block.input ?? {}),
829
+ providerExecuted: false
830
+ });
831
+ }
740
832
  continue;
741
833
  }
742
834
  state.nativeToolCallNames.set(block.id, block.name);
@@ -747,9 +839,10 @@ function createEmitStreamEvent({ state, emit, emitWarning, emitTerminalError, on
747
839
  }
748
840
  const dynamic = isExternalMcpTool(block.name);
749
841
  if (dynamic) state.externalMcpToolUseIds.add(block.id);
750
- if (state.approvalRequestedToolUseIds.has(block.id)) continue;
751
842
  state.pendingStepToolUseIds.add(block.id);
752
843
  opensStep = true;
844
+ if (state.emittedToolCallIds.has(block.id)) continue;
845
+ state.emittedToolCallIds.add(block.id);
753
846
  emit({
754
847
  type: "tool-call",
755
848
  toolCallId: block.id,
@@ -766,6 +859,10 @@ function createEmitStreamEvent({ state, emit, emitWarning, emitTerminalError, on
766
859
  state.pendingStepAssistantUsage = usage;
767
860
  updatePendingStepUsage(state);
768
861
  }
862
+ if (state.hostInputWaitingToolUseIds.size > 0) closeStepIfReady({
863
+ state,
864
+ emit
865
+ });
769
866
  }
770
867
  return;
771
868
  }
@@ -782,6 +879,7 @@ function createEmitStreamEvent({ state, emit, emitWarning, emitTerminalError, on
782
879
  });
783
880
  state.mcpToolCalls.delete(block.tool_use_id);
784
881
  state.pendingStepToolUseIds.delete(block.tool_use_id);
882
+ state.hostInputWaitingToolUseIds.delete(block.tool_use_id);
785
883
  if (handlerReportedCall) continue;
786
884
  const isError = !!block.is_error;
787
885
  const result = toolUseResult !== void 0 ? toolUseResult : resolveToolResult({
@@ -790,13 +888,16 @@ function createEmitStreamEvent({ state, emit, emitWarning, emitTerminalError, on
790
888
  isError,
791
889
  rawContent: block.content
792
890
  });
793
- emit({
794
- type: "tool-call",
795
- toolCallId: block.tool_use_id,
796
- toolName: mcpToolCall.toolName,
797
- input: JSON.stringify(mcpToolCall.input),
798
- providerExecuted: true
799
- });
891
+ if (!state.emittedToolCallIds.has(block.tool_use_id)) {
892
+ state.emittedToolCallIds.add(block.tool_use_id);
893
+ emit({
894
+ type: "tool-call",
895
+ toolCallId: block.tool_use_id,
896
+ toolName: mcpToolCall.toolName,
897
+ input: JSON.stringify(mcpToolCall.input),
898
+ providerExecuted: true
899
+ });
900
+ }
800
901
  emit({
801
902
  type: "tool-result",
802
903
  toolCallId: block.tool_use_id,
@@ -836,27 +937,40 @@ function createEmitStreamEvent({ state, emit, emitWarning, emitTerminalError, on
836
937
  };
837
938
  }
838
939
  function takeMcpHandlerCall({ state, toolCallId, toolCall }) {
839
- if (state.mcpHandlerCalls.delete(toolCallId)) return true;
840
- for (const [handlerCallId, handlerCall] of state.mcpHandlerCalls) if (handlerCall.toolName === toolCall.toolName && isDeepStrictEqual(handlerCall.input, toolCall.input)) {
841
- state.mcpHandlerCalls.delete(handlerCallId);
842
- return true;
843
- }
940
+ const handlerCallId = findMcpHandlerCallId({
941
+ state,
942
+ toolCallId,
943
+ toolCall
944
+ });
945
+ if (handlerCallId != null) return state.mcpHandlerCalls.delete(handlerCallId);
844
946
  const matchingHandlerCallIds = Array.from(state.mcpHandlerCalls).filter(([, handlerCall]) => handlerCall.toolName === toolCall.toolName).map(([handlerCallId]) => handlerCallId);
845
947
  const matchingToolCallCount = Array.from(state.mcpToolCalls.values()).filter((pendingCall) => pendingCall.toolName === toolCall.toolName).length;
846
- if (matchingHandlerCallIds.length > 0 && matchingHandlerCallIds.length === matchingToolCallCount) {
847
- state.mcpHandlerCalls.delete(matchingHandlerCallIds[0]);
848
- return true;
849
- }
948
+ if (matchingHandlerCallIds.length > 0 && matchingHandlerCallIds.length === matchingToolCallCount) return state.mcpHandlerCalls.delete(matchingHandlerCallIds[0]);
850
949
  return false;
851
950
  }
852
- function finishApprovalStep({ state, emit, approvalId }) {
951
+ function findMcpHandlerCallId({ state, toolCallId, toolCall }) {
952
+ if (state.mcpHandlerCalls.has(toolCallId)) return toolCallId;
953
+ for (const [handlerCallId, handlerCall] of state.mcpHandlerCalls) {
954
+ if (handlerCall.toolUseId != null && handlerCall.toolUseId !== toolCallId || handlerCallId !== toolCallId && state.mcpToolCalls.has(handlerCallId)) continue;
955
+ if (handlerCall.toolName === toolCall.toolName && isDeepStrictEqual(handlerCall.input, toolCall.input)) return handlerCallId;
956
+ }
957
+ }
958
+ function markWaitingOnHostInput({ state, emit, toolUseId }) {
853
959
  state.stepOpen = true;
854
- state.pendingStepToolUseIds.delete(approvalId);
960
+ state.pendingStepToolUseIds.add(toolUseId);
961
+ state.hostInputWaitingToolUseIds.add(toolUseId);
855
962
  closeStepIfReady({
856
963
  state,
857
964
  emit
858
965
  });
859
966
  }
967
+ function clearWaitingOnHostInput({ state, toolUseId }) {
968
+ state.hostInputWaitingToolUseIds.delete(toolUseId);
969
+ }
970
+ function resolveMcpHandlerToolUseId({ state, metadataToolUseId, toolName, input }) {
971
+ if (metadataToolUseId != null) return metadataToolUseId;
972
+ for (const [toolUseId, toolCall] of state.mcpToolCalls) if (!state.mcpHandlerCalls.has(toolUseId) && toolCall.toolName === toolName && isDeepStrictEqual(toolCall.input, input)) return toolUseId;
973
+ }
860
974
  function emitFinishStep({ state, emit, usage }) {
861
975
  emit({
862
976
  type: "finish-step",
@@ -871,14 +985,37 @@ function emitFinishStep({ state, emit, usage }) {
871
985
  state.pendingStepDeltaUsage = void 0;
872
986
  state.pendingStepUsage = void 0;
873
987
  state.pendingStepToolUseIds = /* @__PURE__ */ new Set();
988
+ state.earlyFinishStepToolUseIds = /* @__PURE__ */ new Set();
874
989
  state.stepOpen = false;
875
990
  }
876
991
  function closeStepIfReady({ state, emit }) {
877
- if (!state.stepOpen || state.pendingStepToolUseIds.size > 0 || state.partialBlocks.size > 0) return;
878
- emitFinishStep({
992
+ if (!state.stepOpen || state.responseOpen || state.partialBlocks.size > 0) return;
993
+ if (state.pendingStepToolUseIds.size === 0) {
994
+ emitFinishStep({
995
+ state,
996
+ emit,
997
+ usage: state.pendingStepUsage
998
+ });
999
+ return;
1000
+ }
1001
+ emitEarlyFinishStepIfReady({
879
1002
  state,
880
- emit,
881
- usage: state.pendingStepUsage
1003
+ emit
1004
+ });
1005
+ }
1006
+ function emitEarlyFinishStepIfReady({ state, emit }) {
1007
+ if (!state.stepOpen || state.partialBlocks.size > 0 || state.modelResponseStreaming || state.pendingStepToolUseIds.size === 0) return;
1008
+ const uncovered = [...state.hostInputWaitingToolUseIds].filter((toolUseId) => state.pendingStepToolUseIds.has(toolUseId) && !state.earlyFinishStepToolUseIds.has(toolUseId));
1009
+ if (uncovered.length === 0) return;
1010
+ for (const toolUseId of uncovered) state.earlyFinishStepToolUseIds.add(toolUseId);
1011
+ emit({
1012
+ type: "finish-step",
1013
+ finishReason: {
1014
+ unified: "tool-calls",
1015
+ raw: "host-input"
1016
+ },
1017
+ usage: defaultUsage(),
1018
+ harnessMetadata: { "claude-code": { inferredStep: true } }
882
1019
  });
883
1020
  }
884
1021
  function formatApiRetryWarning(msg) {
@@ -895,7 +1032,9 @@ function formatApiRetryWarning(msg) {
895
1032
  function handleStreamEvent({ event, message, state, send, toCommonName }) {
896
1033
  if (!event) return;
897
1034
  if (event.type === "message_start") {
1035
+ state.modelResponseStreaming = true;
898
1036
  state.pendingResponseUsage = toUsageRecord(event.message?.usage);
1037
+ state.responseOpen = true;
899
1038
  return;
900
1039
  }
901
1040
  if (event.type === "message_delta") {
@@ -916,6 +1055,12 @@ function handleStreamEvent({ event, message, state, send, toCommonName }) {
916
1055
  }
917
1056
  });
918
1057
  state.pendingResponseUsage = void 0;
1058
+ state.modelResponseStreaming = false;
1059
+ state.responseOpen = false;
1060
+ closeStepIfReady({
1061
+ state,
1062
+ emit: send
1063
+ });
919
1064
  return;
920
1065
  }
921
1066
  if (typeof event.index !== "number") return;
@@ -1281,6 +1426,7 @@ const NATIVE_TOOL_KINDS = {
1281
1426
  TaskGet: "readonly",
1282
1427
  TaskList: "readonly",
1283
1428
  TaskOutput: "readonly",
1429
+ ListAgents: "readonly",
1284
1430
  ListMcpResources: "readonly",
1285
1431
  ReadMcpResource: "readonly",
1286
1432
  Write: "edit",
@@ -1355,22 +1501,26 @@ function createPermissionOptions(input) {
1355
1501
  const approvalId = options.toolUseID;
1356
1502
  input.approvalRequestedToolUseIds.add(approvalId);
1357
1503
  input.nativeToolCallNames.set(approvalId, toolName);
1358
- input.emit({
1359
- type: "tool-call",
1360
- toolCallId: approvalId,
1361
- toolName: toCommonName(toolName),
1362
- nativeName: toolName,
1363
- input: JSON.stringify(toolInput ?? {}),
1364
- providerExecuted: true,
1365
- ...isExternalMcpTool(toolName) ? { dynamic: true } : {}
1366
- });
1504
+ if (!input.emittedToolCallIds.has(approvalId)) {
1505
+ input.emittedToolCallIds.add(approvalId);
1506
+ input.emit({
1507
+ type: "tool-call",
1508
+ toolCallId: approvalId,
1509
+ toolName: toCommonName(toolName),
1510
+ nativeName: toolName,
1511
+ input: JSON.stringify(toolInput ?? {}),
1512
+ providerExecuted: true,
1513
+ ...isExternalMcpTool(toolName) ? { dynamic: true } : {}
1514
+ });
1515
+ }
1516
+ const decisionPromise = input.turn.requestToolApproval(approvalId);
1367
1517
  input.emit({
1368
1518
  type: "tool-approval-request",
1369
1519
  approvalId,
1370
1520
  toolCallId: approvalId
1371
1521
  });
1372
- input.finishApprovalStep(approvalId);
1373
- const decision = await input.turn.requestToolApproval(approvalId);
1522
+ input.markWaitingOnHostInput(approvalId);
1523
+ const decision = await decisionPromise.finally(() => input.clearWaitingOnHostInput(approvalId));
1374
1524
  return decision.approved ? {
1375
1525
  behavior: "allow",
1376
1526
  updatedInput: toolInput,
@@ -1400,6 +1550,7 @@ function createQuestionPreToolUseHook(input) {
1400
1550
  providerMetadata: { "claude-code": { nativeRequest: nativeInput } }
1401
1551
  });
1402
1552
  const questionKey = claudeCodeQuestionKey(nativeInput);
1553
+ input.markWaitingOnHostInput(toolCallId);
1403
1554
  const nativeResult = toClaudeCodeQuestionResult({
1404
1555
  nativeInput,
1405
1556
  output: (await input.turn.requestToolResult({
@@ -1408,7 +1559,7 @@ function createQuestionPreToolUseHook(input) {
1408
1559
  const nativeRequest = candidate.toolResult?.providerOptions?.["claude-code"]?.nativeRequest;
1409
1560
  return nativeRequest != null && claudeCodeQuestionKey(nativeRequest) === questionKey;
1410
1561
  }
1411
- })).output
1562
+ }).finally(() => input.clearWaitingOnHostInput(toolCallId))).output
1412
1563
  });
1413
1564
  return { hookSpecificOutput: {
1414
1565
  hookEventName: "PreToolUse",
@@ -1461,19 +1612,38 @@ async function runTurn(start, turn) {
1461
1612
  }, async (...handlerArgs) => {
1462
1613
  const [input, extra] = handlerArgs;
1463
1614
  const metadataToolCallId = extra._meta?.["claudecode/toolUseId"];
1464
- const toolCallId = typeof metadataToolCallId === "string" ? metadataToolCallId : randomUUID();
1615
+ const toolCallId = resolveMcpHandlerToolUseId({
1616
+ state: streamEventState,
1617
+ metadataToolUseId: typeof metadataToolCallId === "string" ? metadataToolCallId : void 0,
1618
+ toolName: tool.name,
1619
+ input
1620
+ }) ?? randomUUID();
1465
1621
  streamEventState.mcpHandlerCalls.set(toolCallId, {
1466
1622
  toolName: tool.name,
1467
1623
  input
1468
1624
  });
1469
- emit({
1470
- type: "tool-call",
1471
- toolCallId,
1472
- toolName: tool.name,
1473
- input: JSON.stringify(input),
1474
- providerExecuted: false
1625
+ if (!streamEventState.emittedToolCallIds.has(toolCallId)) {
1626
+ streamEventState.emittedToolCallIds.add(toolCallId);
1627
+ emit({
1628
+ type: "tool-call",
1629
+ toolCallId,
1630
+ toolName: tool.name,
1631
+ input: JSON.stringify(input),
1632
+ providerExecuted: false
1633
+ });
1634
+ markWaitingOnHostInput({
1635
+ state: streamEventState,
1636
+ emit,
1637
+ toolUseId: toolCallId
1638
+ });
1639
+ }
1640
+ const { output, isError, toolResult } = await turn.requestToolResult(toolCallId).finally(() => {
1641
+ clearWaitingOnHostInput({
1642
+ state: streamEventState,
1643
+ toolUseId: toolCallId
1644
+ });
1645
+ if (!streamEventState.mcpToolCalls.has(toolCallId)) streamEventState.pendingStepToolUseIds.delete(toolCallId);
1475
1646
  });
1476
- const { output, isError } = await turn.requestToolResult(toolCallId);
1477
1647
  emit({
1478
1648
  type: "tool-result",
1479
1649
  toolCallId,
@@ -1481,6 +1651,17 @@ async function runTurn(start, turn) {
1481
1651
  result: output ?? null,
1482
1652
  isError: !!isError
1483
1653
  });
1654
+ if (toolResult != null) {
1655
+ const converted = convertHarnessToolModelOutput({ output: toolResult.output });
1656
+ return {
1657
+ content: converted.content.map((part) => part.type === "text" ? part : {
1658
+ type: "image",
1659
+ data: part.data,
1660
+ mimeType: part.mediaType
1661
+ }),
1662
+ isError: isError === true || converted.isError
1663
+ };
1664
+ }
1484
1665
  return {
1485
1666
  content: [{
1486
1667
  type: "text",
@@ -1517,20 +1698,32 @@ async function runTurn(start, turn) {
1517
1698
  inactiveNativeTools,
1518
1699
  turn,
1519
1700
  emit,
1520
- finishApprovalStep: (approvalId) => {
1521
- finishApprovalStep({
1522
- state: streamEventState,
1523
- emit,
1524
- approvalId
1525
- });
1526
- },
1701
+ markWaitingOnHostInput: (toolUseId) => markWaitingOnHostInput({
1702
+ state: streamEventState,
1703
+ emit,
1704
+ toolUseId
1705
+ }),
1706
+ clearWaitingOnHostInput: (toolUseId) => clearWaitingOnHostInput({
1707
+ state: streamEventState,
1708
+ toolUseId
1709
+ }),
1527
1710
  nativeToolCallNames: streamEventState.nativeToolCallNames,
1528
- approvalRequestedToolUseIds: streamEventState.approvalRequestedToolUseIds
1711
+ approvalRequestedToolUseIds: streamEventState.approvalRequestedToolUseIds,
1712
+ emittedToolCallIds: streamEventState.emittedToolCallIds
1529
1713
  });
1530
1714
  const questionPreToolUseHook = createQuestionPreToolUseHook({
1531
1715
  turn,
1532
1716
  emit,
1533
- nativeToolCallNames: streamEventState.nativeToolCallNames
1717
+ nativeToolCallNames: streamEventState.nativeToolCallNames,
1718
+ markWaitingOnHostInput: (toolUseId) => markWaitingOnHostInput({
1719
+ state: streamEventState,
1720
+ emit,
1721
+ toolUseId
1722
+ }),
1723
+ clearWaitingOnHostInput: (toolUseId) => clearWaitingOnHostInput({
1724
+ state: streamEventState,
1725
+ toolUseId
1726
+ })
1534
1727
  });
1535
1728
  const q = claudeSdk.query({
1536
1729
  prompt: queryInput.input,