niceeval 0.15.1-canary.76 → 0.16.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 (714) hide show
  1. package/INDEX.md +45 -40
  2. package/dist/adapter-execution-trace.cjs.map +1 -1
  3. package/dist/adapter-execution-trace.d.cts +26 -0
  4. package/dist/adapter-execution-trace.d.mts +26 -0
  5. package/dist/adapter-execution-trace.d.ts +26 -0
  6. package/dist/adapter-usage.cjs.map +1 -1
  7. package/dist/adapter-usage.d.cts +9 -0
  8. package/dist/adapter-usage.d.mts +9 -0
  9. package/dist/adapter-usage.d.ts +9 -0
  10. package/dist/adapter.cjs +19 -4
  11. package/dist/adapter.cjs.map +1 -1
  12. package/dist/adapter.d.cts +37 -12
  13. package/dist/adapter.d.mts +37 -12
  14. package/dist/adapter.d.ts +37 -12
  15. package/dist/agents/ai-sdk.cjs +3 -0
  16. package/dist/agents/ai-sdk.cjs.map +1 -1
  17. package/dist/agents/bub.cjs +3 -0
  18. package/dist/agents/bub.cjs.map +1 -1
  19. package/dist/agents/claude-code-native.cjs +28 -2
  20. package/dist/agents/claude-code-native.cjs.map +1 -1
  21. package/dist/agents/claude-code.cjs +3 -0
  22. package/dist/agents/claude-code.cjs.map +1 -1
  23. package/dist/agents/codex.cjs +3 -0
  24. package/dist/agents/codex.cjs.map +1 -1
  25. package/dist/agents/coding-cli-versions.cjs +9 -10
  26. package/dist/agents/coding-cli-versions.cjs.map +1 -1
  27. package/dist/agents/coding-cli-versions.d.cts +1 -1
  28. package/dist/agents/coding-cli-versions.d.mts +1 -1
  29. package/dist/agents/coding-cli-versions.d.ts +1 -1
  30. package/dist/agents/deepseek-harness.cjs +3 -0
  31. package/dist/agents/deepseek-harness.cjs.map +1 -1
  32. package/dist/agents/hermes.cjs +3 -0
  33. package/dist/agents/hermes.cjs.map +1 -1
  34. package/dist/agents/index.cjs.map +1 -1
  35. package/dist/agents/index.d.cts +3 -2
  36. package/dist/agents/index.d.mts +3 -2
  37. package/dist/agents/index.d.ts +3 -2
  38. package/dist/agents/omp.cjs +3 -0
  39. package/dist/agents/omp.cjs.map +1 -1
  40. package/dist/agents/openai-compat.cjs +6 -0
  41. package/dist/agents/openai-compat.cjs.map +1 -1
  42. package/dist/agents/openclaw.cjs +3 -0
  43. package/dist/agents/openclaw.cjs.map +1 -1
  44. package/dist/agents/opencode.cjs +3 -0
  45. package/dist/agents/opencode.cjs.map +1 -1
  46. package/dist/agents/sdk-streams.cjs +9 -0
  47. package/dist/agents/sdk-streams.cjs.map +1 -1
  48. package/dist/agents/ui-message-stream.cjs +3 -0
  49. package/dist/agents/ui-message-stream.cjs.map +1 -1
  50. package/dist/assertions/api.cjs.map +1 -1
  51. package/dist/assertions/api.d.cts +27 -5
  52. package/dist/assertions/api.d.mts +27 -5
  53. package/dist/assertions/api.d.ts +27 -5
  54. package/dist/assertions/collection.cjs +6 -0
  55. package/dist/assertions/collection.cjs.map +1 -1
  56. package/dist/assertions/collection.d.cts +4 -2
  57. package/dist/assertions/collection.d.mts +4 -2
  58. package/dist/assertions/collection.d.ts +4 -2
  59. package/dist/assertions/collection.js +12 -8
  60. package/dist/assertions/context-match.cjs +70 -0
  61. package/dist/assertions/context-match.cjs.map +1 -0
  62. package/dist/assertions/context-match.d.cts +107 -0
  63. package/dist/assertions/context-match.d.mts +107 -0
  64. package/dist/assertions/context-match.d.ts +107 -0
  65. package/dist/assertions/context-match.js +12 -0
  66. package/dist/assertions/context-match.js.map +1 -0
  67. package/dist/assertions/full-content.cjs +109 -0
  68. package/dist/assertions/full-content.cjs.map +1 -0
  69. package/dist/assertions/full-content.d.cts +6 -0
  70. package/dist/assertions/full-content.d.mts +6 -0
  71. package/dist/assertions/full-content.d.ts +6 -0
  72. package/dist/assertions/full-content.js +12 -0
  73. package/dist/assertions/full-content.js.map +1 -0
  74. package/dist/assertions/judge-presets.cjs +2 -34
  75. package/dist/assertions/judge-presets.cjs.map +1 -1
  76. package/dist/assertions/judge-presets.d.cts +6 -9
  77. package/dist/assertions/judge-presets.d.mts +6 -9
  78. package/dist/assertions/judge-presets.d.ts +6 -9
  79. package/dist/assertions/judge-presets.js +8 -8
  80. package/dist/assertions/judge.cjs +107 -29
  81. package/dist/assertions/judge.cjs.map +1 -1
  82. package/dist/assertions/judge.d.cts +2 -0
  83. package/dist/assertions/judge.d.mts +2 -0
  84. package/dist/assertions/judge.d.ts +2 -0
  85. package/dist/assertions/match.cjs +244 -5
  86. package/dist/assertions/match.cjs.map +1 -1
  87. package/dist/assertions/match.d.cts +43 -3
  88. package/dist/assertions/match.d.mts +43 -3
  89. package/dist/assertions/match.d.ts +43 -3
  90. package/dist/assertions/match.js +88 -78
  91. package/dist/assertions/material.cjs +520 -0
  92. package/dist/assertions/material.cjs.map +1 -0
  93. package/dist/assertions/material.d.cts +56 -0
  94. package/dist/assertions/material.d.mts +56 -0
  95. package/dist/assertions/material.d.ts +56 -0
  96. package/dist/assertions/material.js +20 -0
  97. package/dist/assertions/material.js.map +1 -0
  98. package/dist/assertions/record/attachment.cjs +5 -2
  99. package/dist/assertions/record/attachment.cjs.map +1 -1
  100. package/dist/assertions/record/codec.cjs +2 -1
  101. package/dist/assertions/record/codec.cjs.map +1 -1
  102. package/dist/assertions/record/model.cjs.map +1 -1
  103. package/dist/assertions/record/model.d.cts +6 -1
  104. package/dist/assertions/record/model.d.mts +6 -1
  105. package/dist/assertions/record/model.d.ts +6 -1
  106. package/dist/assertions/runtime.cjs +207 -14
  107. package/dist/assertions/runtime.cjs.map +1 -1
  108. package/dist/assertions/runtime.d.cts +9 -0
  109. package/dist/assertions/runtime.d.mts +9 -0
  110. package/dist/assertions/runtime.d.ts +9 -0
  111. package/dist/assertions/runtime.js +14 -8
  112. package/dist/assertions/score-match-audit.cjs +18 -8
  113. package/dist/assertions/score-match-audit.cjs.map +1 -1
  114. package/dist/assertions/score-match-gateway.cjs +83 -25
  115. package/dist/assertions/score-match-gateway.cjs.map +1 -1
  116. package/dist/assertions/score-match-gateway.d.cts +2 -0
  117. package/dist/assertions/score-match-gateway.d.mts +2 -0
  118. package/dist/assertions/score-match-gateway.d.ts +2 -0
  119. package/dist/assertions/value-composition.test-d.cjs +77 -0
  120. package/dist/assertions/value-composition.test-d.cjs.map +1 -0
  121. package/dist/assertions/value-composition.test-d.d.cts +1 -0
  122. package/dist/assertions/value-composition.test-d.d.mts +1 -0
  123. package/dist/assertions/value-composition.test-d.d.ts +1 -0
  124. package/dist/assertions/value-composition.test-d.js +4 -0
  125. package/dist/assertions/value-composition.test-d.js.map +1 -0
  126. package/dist/context/assert-first.cjs +207 -213
  127. package/dist/context/assert-first.cjs.map +1 -1
  128. package/dist/context/assert-first.d.cts +49 -23
  129. package/dist/context/assert-first.d.mts +49 -23
  130. package/dist/context/assert-first.d.ts +49 -23
  131. package/dist/context/session.cjs +111 -9
  132. package/dist/context/session.cjs.map +1 -1
  133. package/dist/context/session.d.cts +18 -0
  134. package/dist/context/session.d.mts +18 -0
  135. package/dist/context/session.d.ts +18 -0
  136. package/dist/define.cjs +17 -1
  137. package/dist/define.cjs.map +1 -1
  138. package/dist/eval/cli/contribution.cjs +2 -0
  139. package/dist/eval/cli/contribution.cjs.map +1 -1
  140. package/dist/eval/host/index.cjs +2 -0
  141. package/dist/eval/host/index.cjs.map +1 -1
  142. package/dist/eval/record/evaluation.cjs +3 -0
  143. package/dist/eval/record/evaluation.cjs.map +1 -1
  144. package/dist/eval/record/membership-provenance.d.cts +15 -15
  145. package/dist/eval/record/membership-provenance.d.mts +15 -15
  146. package/dist/eval/record/membership-provenance.d.ts +15 -15
  147. package/dist/eval/record/score.cjs +7 -0
  148. package/dist/eval/record/score.cjs.map +1 -1
  149. package/dist/eval/record/sealed-assertion.cjs +3 -0
  150. package/dist/eval/record/sealed-assertion.cjs.map +1 -1
  151. package/dist/eval/record/verdict.cjs +7 -0
  152. package/dist/eval/record/verdict.cjs.map +1 -1
  153. package/dist/expect/index.cjs +8 -2
  154. package/dist/expect/index.cjs.map +1 -1
  155. package/dist/expect/index.d.cts +9 -4
  156. package/dist/expect/index.d.mts +9 -4
  157. package/dist/expect/index.d.ts +9 -4
  158. package/dist/expect/index.js +72 -62
  159. package/dist/expect/index.mjs +72 -62
  160. package/dist/experiment/host/cli/contribution.cjs +37 -23
  161. package/dist/experiment/host/cli/contribution.cjs.map +1 -1
  162. package/dist/experiment/host/cli/contribution.d.cts +9 -1
  163. package/dist/experiment/host/cli/contribution.d.mts +9 -1
  164. package/dist/experiment/host/cli/contribution.d.ts +9 -1
  165. package/dist/experiment/host/current.cjs +74 -0
  166. package/dist/experiment/host/current.cjs.map +1 -0
  167. package/dist/experiment/host/current.d.cts +33 -0
  168. package/dist/experiment/host/current.d.mts +33 -0
  169. package/dist/experiment/host/current.d.ts +33 -0
  170. package/dist/experiment/host/current.js +10 -0
  171. package/dist/experiment/host/current.js.map +1 -0
  172. package/dist/experiment/host/index.cjs +17 -174
  173. package/dist/experiment/host/index.cjs.map +1 -1
  174. package/dist/experiment/host/index.d.cts +8 -54
  175. package/dist/experiment/host/index.d.mts +8 -54
  176. package/dist/experiment/host/index.d.ts +8 -54
  177. package/dist/experiment/host/operations.cjs +33 -10
  178. package/dist/experiment/host/operations.cjs.map +1 -1
  179. package/dist/experiment/host/operations.d.cts +29 -1
  180. package/dist/experiment/host/operations.d.mts +29 -1
  181. package/dist/experiment/host/operations.d.ts +29 -1
  182. package/dist/experiment/host/operations.js +6 -4
  183. package/dist/experiment/host/requirements.cjs +3 -0
  184. package/dist/experiment/host/requirements.cjs.map +1 -0
  185. package/dist/experiment/host/requirements.d.cts +3 -0
  186. package/dist/experiment/host/requirements.d.mts +3 -0
  187. package/dist/experiment/host/requirements.d.ts +3 -0
  188. package/dist/experiment/host/requirements.js +4 -0
  189. package/dist/experiment/host/requirements.js.map +1 -0
  190. package/dist/experiment/host/runtime.cjs +179 -0
  191. package/dist/experiment/host/runtime.cjs.map +1 -0
  192. package/dist/experiment/host/runtime.d.cts +79 -0
  193. package/dist/experiment/host/runtime.d.mts +79 -0
  194. package/dist/experiment/host/runtime.d.ts +79 -0
  195. package/dist/experiment/host/runtime.js +6 -0
  196. package/dist/experiment/host/runtime.js.map +1 -0
  197. package/dist/experiment/host/types.cjs.map +1 -1
  198. package/dist/experiment/host/types.d.cts +17 -16
  199. package/dist/experiment/host/types.d.mts +17 -16
  200. package/dist/experiment/host/types.d.ts +17 -16
  201. package/dist/fresh-import.cjs +2 -1
  202. package/dist/fresh-import.cjs.map +1 -1
  203. package/dist/index.cjs +4 -2
  204. package/dist/index.cjs.map +1 -1
  205. package/dist/index.d.cts +12 -6
  206. package/dist/index.d.mts +12 -6
  207. package/dist/index.d.ts +12 -6
  208. package/dist/index.js +32 -30
  209. package/dist/index.mjs +32 -30
  210. package/dist/inspection/artifacts.cjs +83 -54
  211. package/dist/inspection/artifacts.cjs.map +1 -1
  212. package/dist/inspection/artifacts.d.cts +8 -0
  213. package/dist/inspection/artifacts.d.mts +8 -0
  214. package/dist/inspection/artifacts.d.ts +8 -0
  215. package/dist/inspection/artifacts.js +2 -0
  216. package/dist/inspection/assertions.cjs +4 -1
  217. package/dist/inspection/assertions.cjs.map +1 -1
  218. package/dist/inspection/cli/contribution.cjs +27 -4
  219. package/dist/inspection/cli/contribution.cjs.map +1 -1
  220. package/dist/inspection/cli/contribution.d.cts +2 -1
  221. package/dist/inspection/cli/contribution.d.mts +2 -1
  222. package/dist/inspection/cli/contribution.d.ts +2 -1
  223. package/dist/inspection/execution-traces.cjs +114 -8
  224. package/dist/inspection/execution-traces.cjs.map +1 -1
  225. package/dist/inspection/execution-traces.d.cts +38 -0
  226. package/dist/inspection/execution-traces.d.mts +38 -0
  227. package/dist/inspection/execution-traces.d.ts +38 -0
  228. package/dist/inspection/facts.cjs +12 -0
  229. package/dist/inspection/facts.cjs.map +1 -1
  230. package/dist/inspection/limits.cjs +5 -1
  231. package/dist/inspection/limits.cjs.map +1 -1
  232. package/dist/inspection/limits.d.cts +4 -0
  233. package/dist/inspection/limits.d.mts +4 -0
  234. package/dist/inspection/limits.d.ts +4 -0
  235. package/dist/inspection/limits.js +6 -2
  236. package/dist/inspection/overview.cjs +74 -33
  237. package/dist/inspection/overview.cjs.map +1 -1
  238. package/dist/inspection/overview.d.cts +19 -1
  239. package/dist/inspection/overview.d.mts +19 -1
  240. package/dist/inspection/overview.d.ts +19 -1
  241. package/dist/inspection/overview.js +4 -2
  242. package/dist/inspection/project-input.cjs +9 -0
  243. package/dist/inspection/project-input.cjs.map +1 -0
  244. package/dist/inspection/project-input.d.cts +20 -0
  245. package/dist/inspection/project-input.d.mts +20 -0
  246. package/dist/inspection/project-input.d.ts +20 -0
  247. package/dist/inspection/project-input.js +8 -0
  248. package/dist/inspection/project-input.js.map +1 -0
  249. package/dist/inspection/project-result.cjs +60 -0
  250. package/dist/inspection/project-result.cjs.map +1 -0
  251. package/dist/inspection/project-result.d.cts +1264 -0
  252. package/dist/inspection/project-result.d.mts +1264 -0
  253. package/dist/inspection/project-result.d.ts +1264 -0
  254. package/dist/inspection/project-result.js +10 -0
  255. package/dist/inspection/project-result.js.map +1 -0
  256. package/dist/inspection/project-source.cjs +109 -0
  257. package/dist/inspection/project-source.cjs.map +1 -0
  258. package/dist/inspection/project-source.d.cts +10 -0
  259. package/dist/inspection/project-source.d.mts +10 -0
  260. package/dist/inspection/project-source.d.ts +10 -0
  261. package/dist/inspection/project-source.js +6 -0
  262. package/dist/inspection/project-source.js.map +1 -0
  263. package/dist/inspection/project.cjs +100 -0
  264. package/dist/inspection/project.cjs.map +1 -0
  265. package/dist/inspection/project.d.cts +3 -0
  266. package/dist/inspection/project.d.mts +3 -0
  267. package/dist/inspection/project.d.ts +3 -0
  268. package/dist/inspection/project.js +6 -0
  269. package/dist/inspection/project.js.map +1 -0
  270. package/dist/inspection/protocol.cjs +19 -9
  271. package/dist/inspection/protocol.cjs.map +1 -1
  272. package/dist/inspection/protocol.d.cts +5506 -38189
  273. package/dist/inspection/protocol.d.mts +5506 -38189
  274. package/dist/inspection/protocol.d.ts +5506 -38189
  275. package/dist/inspection/public.mjs +896 -84
  276. package/dist/inspection/query.cjs +2 -0
  277. package/dist/inspection/query.cjs.map +1 -1
  278. package/dist/inspection/results.cjs +234 -29
  279. package/dist/inspection/results.cjs.map +1 -1
  280. package/dist/inspection/results.d.cts +870 -13
  281. package/dist/inspection/results.d.mts +870 -13
  282. package/dist/inspection/results.d.ts +870 -13
  283. package/dist/inspection/results.js +36 -34
  284. package/dist/inspection/select.cjs +126 -14
  285. package/dist/inspection/select.cjs.map +1 -1
  286. package/dist/inspection/select.d.cts +1 -1
  287. package/dist/inspection/select.d.mts +1 -1
  288. package/dist/inspection/select.d.ts +1 -1
  289. package/dist/inspection/source.cjs +4 -0
  290. package/dist/inspection/source.cjs.map +1 -1
  291. package/dist/inspection/sources.cjs +5 -0
  292. package/dist/inspection/sources.cjs.map +1 -1
  293. package/dist/inspection/trace.cjs +82 -84
  294. package/dist/inspection/trace.cjs.map +1 -1
  295. package/dist/inspection/trace.d.cts +7 -2
  296. package/dist/inspection/trace.d.mts +7 -2
  297. package/dist/inspection/trace.d.ts +7 -2
  298. package/dist/model-slots.cjs +35 -0
  299. package/dist/model-slots.cjs.map +1 -0
  300. package/dist/model-slots.d.cts +19 -0
  301. package/dist/model-slots.d.mts +19 -0
  302. package/dist/model-slots.d.ts +19 -0
  303. package/dist/model-slots.js +8 -0
  304. package/dist/model-slots.js.map +1 -0
  305. package/dist/o11y/adapter-call-price.cjs +4 -0
  306. package/dist/o11y/adapter-call-price.cjs.map +1 -1
  307. package/dist/o11y/adapter-call-price.d.cts +24 -0
  308. package/dist/o11y/adapter-call-price.d.mts +24 -0
  309. package/dist/o11y/adapter-call-price.d.ts +24 -0
  310. package/dist/o11y/adapter-call-price.js +6 -2
  311. package/dist/o11y/adapter-usage-projection.cjs +158 -0
  312. package/dist/o11y/adapter-usage-projection.cjs.map +1 -0
  313. package/dist/o11y/adapter-usage-projection.d.cts +141 -0
  314. package/dist/o11y/adapter-usage-projection.d.mts +141 -0
  315. package/dist/o11y/adapter-usage-projection.d.ts +141 -0
  316. package/dist/o11y/adapter-usage-projection.js +20 -0
  317. package/dist/o11y/adapter-usage-projection.js.map +1 -0
  318. package/dist/o11y/eval-usage.cjs +149 -0
  319. package/dist/o11y/eval-usage.cjs.map +1 -0
  320. package/dist/o11y/eval-usage.d.cts +46 -0
  321. package/dist/o11y/eval-usage.d.mts +46 -0
  322. package/dist/o11y/eval-usage.d.ts +46 -0
  323. package/dist/o11y/eval-usage.js +8 -0
  324. package/dist/o11y/eval-usage.js.map +1 -0
  325. package/dist/o11y/judge-call-price.cjs +62 -0
  326. package/dist/o11y/judge-call-price.cjs.map +1 -0
  327. package/dist/o11y/judge-call-price.d.cts +3 -0
  328. package/dist/o11y/judge-call-price.d.mts +3 -0
  329. package/dist/o11y/judge-call-price.d.ts +3 -0
  330. package/dist/o11y/judge-call-price.js +6 -0
  331. package/dist/o11y/judge-call-price.js.map +1 -0
  332. package/dist/o11y/judge-usage-projection.cjs +134 -0
  333. package/dist/o11y/judge-usage-projection.cjs.map +1 -0
  334. package/dist/o11y/judge-usage-projection.d.cts +18 -0
  335. package/dist/o11y/judge-usage-projection.d.mts +18 -0
  336. package/dist/o11y/judge-usage-projection.d.ts +18 -0
  337. package/dist/o11y/judge-usage-projection.js +20 -0
  338. package/dist/o11y/judge-usage-projection.js.map +1 -0
  339. package/dist/o11y/judge-usage-receipt.cjs +135 -0
  340. package/dist/o11y/judge-usage-receipt.cjs.map +1 -0
  341. package/dist/o11y/judge-usage-receipt.d.cts +5 -0
  342. package/dist/o11y/judge-usage-receipt.d.mts +5 -0
  343. package/dist/o11y/judge-usage-receipt.d.ts +5 -0
  344. package/dist/o11y/judge-usage-receipt.js +6 -0
  345. package/dist/o11y/judge-usage-receipt.js.map +1 -0
  346. package/dist/o11y/judge-usage.cjs +171 -0
  347. package/dist/o11y/judge-usage.cjs.map +1 -0
  348. package/dist/o11y/judge-usage.d.cts +35 -0
  349. package/dist/o11y/judge-usage.d.mts +35 -0
  350. package/dist/o11y/judge-usage.d.ts +35 -0
  351. package/dist/o11y/judge-usage.js +6 -0
  352. package/dist/o11y/judge-usage.js.map +1 -0
  353. package/dist/plugin/contracts.cjs +2 -0
  354. package/dist/plugin/contracts.cjs.map +1 -1
  355. package/dist/plugin/link.cjs +7 -0
  356. package/dist/plugin/link.cjs.map +1 -1
  357. package/dist/record/attachment/protocol.cjs +8 -6
  358. package/dist/record/attachment/protocol.cjs.map +1 -1
  359. package/dist/record/attachment/protocol.d.cts +10 -0
  360. package/dist/record/attachment/protocol.d.mts +10 -0
  361. package/dist/record/attachment/protocol.d.ts +10 -0
  362. package/dist/record/attachment/protocol.js +38 -36
  363. package/dist/record/codec/seal-manifest.d.cts +3 -3
  364. package/dist/record/codec/seal-manifest.d.mts +3 -3
  365. package/dist/record/codec/seal-manifest.d.ts +3 -3
  366. package/dist/record/family/adapter-usage/definition.d.cts +1 -0
  367. package/dist/record/family/adapter-usage/definition.d.mts +1 -0
  368. package/dist/record/family/adapter-usage/definition.d.ts +1 -0
  369. package/dist/record/family/adapter-usage/persistence.cjs +1 -1
  370. package/dist/record/family/adapter-usage/persistence.cjs.map +1 -1
  371. package/dist/record/family/adapter-usage/persistence.d.cts +2 -1
  372. package/dist/record/family/adapter-usage/persistence.d.mts +2 -1
  373. package/dist/record/family/adapter-usage/persistence.d.ts +2 -1
  374. package/dist/record/family/adapter-usage/schema.cjs +21 -2
  375. package/dist/record/family/adapter-usage/schema.cjs.map +1 -1
  376. package/dist/record/family/adapter-usage/schema.d.cts +85 -0
  377. package/dist/record/family/adapter-usage/schema.d.mts +85 -0
  378. package/dist/record/family/adapter-usage/schema.d.ts +85 -0
  379. package/dist/record/family/adapter-usage/schema.js +18 -12
  380. package/dist/record/family/catalog.cjs +31 -27
  381. package/dist/record/family/catalog.cjs.map +1 -1
  382. package/dist/record/family/catalog.d.cts +94 -3
  383. package/dist/record/family/catalog.d.mts +94 -3
  384. package/dist/record/family/catalog.d.ts +94 -3
  385. package/dist/record/family/current.cjs +45 -42
  386. package/dist/record/family/current.cjs.map +1 -1
  387. package/dist/record/family/current.d.cts +240 -1
  388. package/dist/record/family/current.d.mts +240 -1
  389. package/dist/record/family/current.d.ts +240 -1
  390. package/dist/record/family/execution-traces/definition.d.cts +26 -0
  391. package/dist/record/family/execution-traces/definition.d.mts +26 -0
  392. package/dist/record/family/execution-traces/definition.d.ts +26 -0
  393. package/dist/record/family/execution-traces/definition.js +20 -14
  394. package/dist/record/family/execution-traces/schema.cjs +57 -1
  395. package/dist/record/family/execution-traces/schema.cjs.map +1 -1
  396. package/dist/record/family/execution-traces/schema.d.cts +114 -0
  397. package/dist/record/family/execution-traces/schema.d.mts +114 -0
  398. package/dist/record/family/execution-traces/schema.d.ts +114 -0
  399. package/dist/record/family/execution-traces/schema.js +18 -12
  400. package/dist/record/family/judge-usage/definition.cjs +12 -0
  401. package/dist/record/family/judge-usage/definition.cjs.map +1 -0
  402. package/dist/record/family/judge-usage/definition.d.cts +91 -0
  403. package/dist/record/family/judge-usage/definition.d.mts +91 -0
  404. package/dist/record/family/judge-usage/definition.d.ts +91 -0
  405. package/dist/record/family/judge-usage/definition.js +6 -0
  406. package/dist/record/family/judge-usage/definition.js.map +1 -0
  407. package/dist/record/family/judge-usage/persistence.cjs +10 -0
  408. package/dist/record/family/judge-usage/persistence.cjs.map +1 -0
  409. package/dist/record/family/judge-usage/persistence.d.cts +91 -0
  410. package/dist/record/family/judge-usage/persistence.d.mts +91 -0
  411. package/dist/record/family/judge-usage/persistence.d.ts +91 -0
  412. package/dist/record/family/judge-usage/persistence.js +6 -0
  413. package/dist/record/family/judge-usage/persistence.js.map +1 -0
  414. package/dist/record/family/judge-usage/schema.cjs +307 -0
  415. package/dist/record/family/judge-usage/schema.cjs.map +1 -0
  416. package/dist/record/family/judge-usage/schema.d.cts +351 -0
  417. package/dist/record/family/judge-usage/schema.d.mts +351 -0
  418. package/dist/record/family/judge-usage/schema.d.ts +351 -0
  419. package/dist/record/family/judge-usage/schema.js +18 -0
  420. package/dist/record/family/judge-usage/schema.js.map +1 -0
  421. package/dist/record/host/sqlite-host.cjs +55 -9
  422. package/dist/record/host/sqlite-host.cjs.map +1 -1
  423. package/dist/record/host/types.cjs.map +1 -1
  424. package/dist/record/host/types.d.cts +7 -0
  425. package/dist/record/host/types.d.mts +7 -0
  426. package/dist/record/host/types.d.ts +7 -0
  427. package/dist/record/model/run-context.cjs +7 -1
  428. package/dist/record/model/run-context.cjs.map +1 -1
  429. package/dist/record/model/run-context.d.cts +4 -0
  430. package/dist/record/model/run-context.d.mts +4 -0
  431. package/dist/record/model/run-context.d.ts +4 -0
  432. package/dist/record/model/seal-manifest.d.cts +1 -1
  433. package/dist/record/model/seal-manifest.d.mts +1 -1
  434. package/dist/record/model/seal-manifest.d.ts +1 -1
  435. package/dist/record/sqlite/client.cjs +18 -5
  436. package/dist/record/sqlite/client.cjs.map +1 -1
  437. package/dist/record/sqlite/client.d.cts +1 -1
  438. package/dist/record/sqlite/client.d.mts +1 -1
  439. package/dist/record/sqlite/client.d.ts +1 -1
  440. package/dist/record/sqlite/project-state-database.cjs +29 -8
  441. package/dist/record/sqlite/project-state-database.cjs.map +1 -1
  442. package/dist/run/host/runtime.cjs +4 -0
  443. package/dist/run/host/runtime.cjs.map +1 -1
  444. package/dist/run/storage/sqlite.cjs +20 -0
  445. package/dist/run/storage/sqlite.cjs.map +1 -1
  446. package/dist/runner/adapter-execution-trace.cjs +125 -2
  447. package/dist/runner/adapter-execution-trace.cjs.map +1 -1
  448. package/dist/runner/adapter-execution-trace.d.cts +1 -1
  449. package/dist/runner/adapter-execution-trace.d.mts +1 -1
  450. package/dist/runner/adapter-execution-trace.d.ts +1 -1
  451. package/dist/runner/adapter-usage.cjs +55 -7
  452. package/dist/runner/adapter-usage.cjs.map +1 -1
  453. package/dist/runner/adapter-usage.d.cts +9 -2
  454. package/dist/runner/adapter-usage.d.mts +9 -2
  455. package/dist/runner/adapter-usage.d.ts +9 -2
  456. package/dist/runner/adoption.cjs +9 -0
  457. package/dist/runner/adoption.cjs.map +1 -1
  458. package/dist/runner/attempt-cancellation.cjs +12 -0
  459. package/dist/runner/attempt-cancellation.cjs.map +1 -0
  460. package/dist/runner/attempt-cancellation.d.cts +6 -0
  461. package/dist/runner/attempt-cancellation.d.mts +6 -0
  462. package/dist/runner/attempt-cancellation.d.ts +6 -0
  463. package/dist/runner/attempt-cancellation.js +6 -0
  464. package/dist/runner/attempt-cancellation.js.map +1 -0
  465. package/dist/runner/attempt-resources.cjs +10 -4
  466. package/dist/runner/attempt-resources.cjs.map +1 -1
  467. package/dist/runner/attempt-resources.d.cts +2 -1
  468. package/dist/runner/attempt-resources.d.mts +2 -1
  469. package/dist/runner/attempt-resources.d.ts +2 -1
  470. package/dist/runner/attempt.cjs +1177 -1139
  471. package/dist/runner/attempt.cjs.map +1 -1
  472. package/dist/runner/config-identity.cjs +20 -1
  473. package/dist/runner/config-identity.cjs.map +1 -1
  474. package/dist/runner/config-identity.d.cts +5 -0
  475. package/dist/runner/config-identity.d.mts +5 -0
  476. package/dist/runner/config-identity.d.ts +5 -0
  477. package/dist/runner/discover.cjs +14 -0
  478. package/dist/runner/discover.cjs.map +1 -1
  479. package/dist/runner/discover.d.cts +3 -0
  480. package/dist/runner/discover.d.mts +3 -0
  481. package/dist/runner/discover.d.ts +3 -0
  482. package/dist/runner/feedback/human.cjs +9 -4
  483. package/dist/runner/feedback/human.cjs.map +1 -1
  484. package/dist/runner/fingerprint.cjs +1 -0
  485. package/dist/runner/fingerprint.cjs.map +1 -1
  486. package/dist/runner/judge-usage.cjs +18 -0
  487. package/dist/runner/judge-usage.cjs.map +1 -0
  488. package/dist/runner/judge-usage.d.cts +5 -0
  489. package/dist/runner/judge-usage.d.mts +5 -0
  490. package/dist/runner/judge-usage.d.ts +5 -0
  491. package/dist/runner/judge-usage.js +8 -0
  492. package/dist/runner/judge-usage.js.map +1 -0
  493. package/dist/runner/project-target.cjs.map +1 -1
  494. package/dist/runner/project-target.d.cts +2 -0
  495. package/dist/runner/project-target.d.mts +2 -0
  496. package/dist/runner/project-target.d.ts +2 -0
  497. package/dist/runner/record/planning.cjs +1 -0
  498. package/dist/runner/record/planning.cjs.map +1 -1
  499. package/dist/runner/record.cjs +4 -0
  500. package/dist/runner/record.cjs.map +1 -1
  501. package/dist/runner/reporters/braintrust.cjs +2 -0
  502. package/dist/runner/reporters/braintrust.cjs.map +1 -1
  503. package/dist/runner/reuse-diagnostics.cjs +9 -10
  504. package/dist/runner/reuse-diagnostics.cjs.map +1 -1
  505. package/dist/runner/reuse-diagnostics.d.cts +5 -6
  506. package/dist/runner/reuse-diagnostics.d.mts +5 -6
  507. package/dist/runner/reuse-diagnostics.d.ts +5 -6
  508. package/dist/runner/reuse-diagnostics.js +4 -4
  509. package/dist/runner/reuse-plan.cjs +100 -48
  510. package/dist/runner/reuse-plan.cjs.map +1 -1
  511. package/dist/runner/reuse-plan.d.cts +60 -3
  512. package/dist/runner/reuse-plan.d.mts +60 -3
  513. package/dist/runner/reuse-plan.d.ts +60 -3
  514. package/dist/runner/reuse-plan.js +14 -10
  515. package/dist/runner/run.cjs +8 -6
  516. package/dist/runner/run.cjs.map +1 -1
  517. package/dist/runner/session.cjs +1 -1
  518. package/dist/runner/session.cjs.map +1 -1
  519. package/dist/runner/session.d.cts +1 -1
  520. package/dist/runner/session.d.mts +1 -1
  521. package/dist/runner/session.d.ts +1 -1
  522. package/dist/runner/source-producer.cjs +3 -1
  523. package/dist/runner/source-producer.cjs.map +1 -1
  524. package/dist/runner/types.cjs.map +1 -1
  525. package/dist/runner/types.d.cts +26 -5
  526. package/dist/runner/types.d.mts +26 -5
  527. package/dist/runner/types.d.ts +26 -5
  528. package/dist/sandbox/action.cjs +3 -0
  529. package/dist/sandbox/action.cjs.map +1 -1
  530. package/dist/sandbox/commands.cjs +3 -0
  531. package/dist/sandbox/commands.cjs.map +1 -1
  532. package/dist/sandbox/compose.cjs +6 -0
  533. package/dist/sandbox/compose.cjs.map +1 -1
  534. package/dist/sandbox/docker-profile/registry.cjs +7 -0
  535. package/dist/sandbox/docker-profile/registry.cjs.map +1 -1
  536. package/dist/sandbox/docker-profile/runtime.cjs +3 -0
  537. package/dist/sandbox/docker-profile/runtime.cjs.map +1 -1
  538. package/dist/sandbox/docker-profile/schema.cjs +7 -0
  539. package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
  540. package/dist/sandbox/incus.cjs +7 -0
  541. package/dist/sandbox/incus.cjs.map +1 -1
  542. package/dist/sandbox/layer.cjs +12 -0
  543. package/dist/sandbox/layer.cjs.map +1 -1
  544. package/dist/shared/adapter-cleanup.cjs +18 -0
  545. package/dist/shared/adapter-cleanup.cjs.map +1 -0
  546. package/dist/shared/adapter-cleanup.d.cts +4 -0
  547. package/dist/shared/adapter-cleanup.d.mts +4 -0
  548. package/dist/shared/adapter-cleanup.d.ts +4 -0
  549. package/dist/shared/adapter-cleanup.js +10 -0
  550. package/dist/shared/adapter-cleanup.js.map +1 -0
  551. package/dist/shared/attempt-lifecycle.cjs +3 -0
  552. package/dist/shared/attempt-lifecycle.cjs.map +1 -0
  553. package/dist/shared/attempt-lifecycle.d.cts +13 -0
  554. package/dist/shared/attempt-lifecycle.d.mts +13 -0
  555. package/dist/shared/attempt-lifecycle.d.ts +13 -0
  556. package/dist/shared/attempt-lifecycle.js +4 -0
  557. package/dist/shared/attempt-lifecycle.js.map +1 -0
  558. package/dist/show/contribution.cjs +52 -14
  559. package/dist/show/contribution.cjs.map +1 -1
  560. package/dist/show/contribution.d.cts +23 -1
  561. package/dist/show/contribution.d.mts +23 -1
  562. package/dist/show/contribution.d.ts +23 -1
  563. package/dist/show/model.cjs +8 -1
  564. package/dist/show/model.cjs.map +1 -1
  565. package/dist/show/model.d.cts +10 -1
  566. package/dist/show/model.d.mts +10 -1
  567. package/dist/show/model.d.ts +10 -1
  568. package/dist/show/render.cjs +287 -49
  569. package/dist/show/render.cjs.map +1 -1
  570. package/dist/show/render.d.cts +3 -0
  571. package/dist/show/render.d.mts +3 -0
  572. package/dist/show/render.d.ts +3 -0
  573. package/dist/sources/projector.cjs +3 -0
  574. package/dist/sources/projector.cjs.map +1 -1
  575. package/dist/types.cjs.map +1 -1
  576. package/dist/types.d.cts +1 -1
  577. package/dist/types.d.mts +1 -1
  578. package/dist/types.d.ts +1 -1
  579. package/dist/view/app-dist/.vite/manifest.json +2 -2
  580. package/dist/view/app-dist/assets/index-CmVoXbwG.js +63 -0
  581. package/dist/view/app-dist/assets/{quality-cost-scatter-CFB3wnkN.js → quality-cost-scatter-BuLISaH4.js} +1 -1
  582. package/dist/view/app-dist/index.html +1 -1
  583. package/dist/view/cli/contribution.cjs +54 -21
  584. package/dist/view/cli/contribution.cjs.map +1 -1
  585. package/dist/view/cli/contribution.d.cts +2 -1
  586. package/dist/view/cli/contribution.d.mts +2 -1
  587. package/dist/view/cli/contribution.d.ts +2 -1
  588. package/dist/view/function-runtime.mjs +13231 -11647
  589. package/dist/view/http-protocol.cjs +3 -0
  590. package/dist/view/http-protocol.cjs.map +1 -1
  591. package/dist/view/http-protocol.d.cts +8 -0
  592. package/dist/view/http-protocol.d.mts +8 -0
  593. package/dist/view/http-protocol.d.ts +8 -0
  594. package/dist/view/inspection-host.cjs +17 -1
  595. package/dist/view/inspection-host.cjs.map +1 -1
  596. package/dist/view/render.cjs +1 -0
  597. package/dist/view/render.cjs.map +1 -1
  598. package/dist/view/render.d.cts +2 -1
  599. package/dist/view/render.d.mts +2 -1
  600. package/dist/view/render.d.ts +2 -1
  601. package/dist/view/revision.cjs.map +1 -1
  602. package/dist/view/revision.d.cts +12 -0
  603. package/dist/view/revision.d.mts +12 -0
  604. package/dist/view/revision.d.ts +12 -0
  605. package/dist/view/server.cjs +10 -9
  606. package/dist/view/server.cjs.map +1 -1
  607. package/docs-site/zh/examples/ai-agent-application.mdx +1 -1
  608. package/docs-site/zh/explanation/adapter.mdx +2 -2
  609. package/docs-site/zh/explanation/assert.mdx +60 -24
  610. package/docs-site/zh/explanation/drive.mdx +1 -1
  611. package/docs-site/zh/explanation/evals.mdx +31 -29
  612. package/docs-site/zh/explanation/experiment.mdx +15 -15
  613. package/docs-site/zh/explanation/judge.mdx +23 -15
  614. package/docs-site/zh/explanation/overview.mdx +44 -21
  615. package/docs-site/zh/explanation/record.mdx +28 -13
  616. package/docs-site/zh/explanation/results-flow.mdx +37 -0
  617. package/docs-site/zh/explanation/runner.mdx +27 -6
  618. package/docs-site/zh/index.mdx +22 -115
  619. package/docs-site/zh/introduction.mdx +89 -61
  620. package/docs-site/zh/reference/cli.mdx +50 -26
  621. package/docs-site/zh/reference/define-agent.mdx +37 -5
  622. package/docs-site/zh/reference/define-eval.mdx +130 -29
  623. package/docs-site/zh/reference/define-experiment.mdx +251 -0
  624. package/docs-site/zh/reference/events.mdx +34 -30
  625. package/docs-site/zh/reference/expect.mdx +77 -2
  626. package/docs-site/zh/reference/official-adapters.mdx +2 -2
  627. package/docs-site/zh/troubleshooting/debug-sandbox.mdx +43 -24
  628. package/docs-site/zh/troubleshooting/debugging.mdx +65 -42
  629. package/docs-site/zh/troubleshooting/recover-after-kill.mdx +35 -28
  630. package/docs-site/zh/tutorials/accept-results.mdx +34 -24
  631. package/docs-site/zh/tutorials/agent-feedback-loop.mdx +74 -43
  632. package/docs-site/zh/tutorials/agent-onboarding.mdx +27 -20
  633. package/docs-site/zh/tutorials/authoring.mdx +138 -121
  634. package/docs-site/zh/tutorials/ci-integration.mdx +46 -22
  635. package/docs-site/zh/tutorials/compare-runs.mdx +40 -13
  636. package/docs-site/zh/tutorials/concurrency.mdx +66 -62
  637. package/docs-site/zh/tutorials/configuration.mdx +17 -17
  638. package/docs-site/zh/tutorials/connect-otel.mdx +48 -37
  639. package/docs-site/zh/tutorials/connect-your-agent.mdx +80 -173
  640. package/docs-site/zh/tutorials/control-run-cost.mdx +63 -12
  641. package/docs-site/zh/tutorials/criteria-files.mdx +28 -21
  642. package/docs-site/zh/tutorials/custom-application.mdx +75 -55
  643. package/docs-site/zh/tutorials/dataset-fanout.mdx +32 -22
  644. package/docs-site/zh/tutorials/debug-lifecycle-plan.mdx +38 -31
  645. package/docs-site/zh/tutorials/docker-in-docker.mdx +83 -89
  646. package/docs-site/zh/tutorials/eval-groups.mdx +70 -89
  647. package/docs-site/zh/tutorials/evaluation-kinds.mdx +12 -5
  648. package/docs-site/zh/tutorials/experiment-services.mdx +243 -0
  649. package/docs-site/zh/tutorials/fixtures.mdx +42 -26
  650. package/docs-site/zh/tutorials/handle-execution-failures.mdx +41 -19
  651. package/docs-site/zh/tutorials/install-custom-sandbox-agent.mdx +21 -16
  652. package/docs-site/zh/tutorials/niceeval-taste-application.mdx +394 -0
  653. package/docs-site/zh/tutorials/niceeval-taste.mdx +190 -0
  654. package/docs-site/zh/tutorials/nixos-managed-dind.mdx +51 -39
  655. package/docs-site/zh/tutorials/plugins.mdx +55 -31
  656. package/docs-site/zh/tutorials/prebuilt-sandbox.mdx +204 -0
  657. package/docs-site/zh/tutorials/quickstart.mdx +91 -47
  658. package/docs-site/zh/tutorials/reporters.mdx +45 -30
  659. package/docs-site/zh/tutorials/rerun-and-cache.mdx +39 -40
  660. package/docs-site/zh/tutorials/sandbox-agent.mdx +65 -40
  661. package/docs-site/zh/tutorials/sandbox-providers.mdx +104 -282
  662. package/docs-site/zh/tutorials/sandbox-reuse.mdx +65 -97
  663. package/docs-site/zh/tutorials/select-and-preview.mdx +25 -20
  664. package/docs-site/zh/tutorials/verify-judge.mdx +49 -26
  665. package/docs-site/zh/tutorials/viewing-results.mdx +130 -80
  666. package/docs-site/zh/tutorials/write-experiment.mdx +116 -298
  667. package/docs-site/zh/tutorials/write-send.mdx +53 -52
  668. package/node_modules/undici/docs/docs/api/Agent.md +8 -8
  669. package/node_modules/undici/docs/docs/api/DiagnosticsChannel.md +9 -6
  670. package/node_modules/undici/docs/docs/api/Errors.md +25 -0
  671. package/node_modules/undici/docs/docs/api/Interceptors.md +4 -3
  672. package/node_modules/undici/docs/docs/api/Pool.md +5 -6
  673. package/node_modules/undici/lib/api/readable.js +1 -2
  674. package/node_modules/undici/lib/core/request.js +23 -2
  675. package/node_modules/undici/lib/core/util.js +0 -39
  676. package/node_modules/undici/lib/dispatcher/client-h1.js +11 -4
  677. package/node_modules/undici/lib/dispatcher/client-h2.js +52 -8
  678. package/node_modules/undici/lib/dispatcher/client.js +1 -1
  679. package/node_modules/undici/lib/dispatcher/dispatcher1-wrapper.js +3 -2
  680. package/node_modules/undici/lib/dispatcher/env-http-proxy-agent.js +21 -6
  681. package/node_modules/undici/lib/dispatcher/pool-base.js +63 -2
  682. package/node_modules/undici/lib/dispatcher/pool.js +90 -7
  683. package/node_modules/undici/lib/dispatcher/proxy-agent.js +16 -3
  684. package/node_modules/undici/lib/handler/deduplication-handler.js +24 -11
  685. package/node_modules/undici/lib/handler/redirect-handler.js +5 -0
  686. package/node_modules/undici/lib/handler/retry-handler.js +72 -13
  687. package/node_modules/undici/lib/interceptor/cache.js +4 -1
  688. package/node_modules/undici/lib/interceptor/decompress.js +236 -69
  689. package/node_modules/undici/lib/web/cache/cache.js +17 -8
  690. package/node_modules/undici/lib/web/cache/cachestorage.js +11 -5
  691. package/node_modules/undici/lib/web/cookies/index.js +19 -7
  692. package/node_modules/undici/lib/web/cookies/util.js +3 -1
  693. package/node_modules/undici/lib/web/eventsource/eventsource.js +25 -1
  694. package/node_modules/undici/lib/web/fetch/body.js +22 -15
  695. package/node_modules/undici/lib/web/fetch/data-url.js +6 -6
  696. package/node_modules/undici/lib/web/fetch/formdata.js +30 -36
  697. package/node_modules/undici/lib/web/fetch/headers.js +34 -31
  698. package/node_modules/undici/lib/web/fetch/index.js +38 -14
  699. package/node_modules/undici/lib/web/fetch/request.js +74 -79
  700. package/node_modules/undici/lib/web/fetch/response.js +43 -44
  701. package/node_modules/undici/lib/web/fetch/util.js +7 -7
  702. package/node_modules/undici/lib/web/infra/index.js +16 -1
  703. package/node_modules/undici/lib/web/webidl/index.js +2 -14
  704. package/node_modules/undici/lib/web/websocket/events.js +43 -26
  705. package/node_modules/undici/lib/web/websocket/receiver.js +5 -0
  706. package/node_modules/undici/lib/web/websocket/stream/websocketerror.js +13 -10
  707. package/node_modules/undici/lib/web/websocket/websocket.js +44 -41
  708. package/node_modules/undici/package.json +1 -1
  709. package/node_modules/undici/types/diagnostics-channel.d.ts +2 -1
  710. package/node_modules/undici/types/interceptors.d.ts +1 -1
  711. package/node_modules/undici/types/webidl.d.ts +13 -7
  712. package/package.json +4 -4
  713. package/dist/view/app-dist/assets/index-DFzw1L97.js +0 -63
  714. package/docs-site/zh/tutorials/experiments.mdx +0 -101
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAAA,uEAAuE;AACvE,4CAAqE;AAA5D,2GAAA,aAAa,OAAA;AAAE,mHAAA,qBAAqB,OAAA;AAI7C,0CAA+D;AAAtD,wGAAA,WAAW,OAAA;AAAE,+GAAA,kBAAkB,OAAA;AACxC,qDAAsD;AAA7C,oHAAA,iBAAiB,OAAA;AAC1B,yCAAqC;AAA5B,mGAAA,MAAM,OAAA;AAEf,iDAAkE;AAAzD,sHAAA,qBAAqB,OAAA;AAAE,yGAAA,QAAQ,OAAA;AAExC,2DAA6D;AAApD,2HAAA,qBAAqB,OAAA;AAC9B,8DAA8D;AAC9D,iEAAiE;AACjE,yDAAqE;AAA5D,uHAAA,wBAAwB,OAAA;AAEjC,qDAAqD;AACrD,2EAA2E;AAC3E,uDAAuD;AACvD,uEAAuK;AAA9J,mIAAA,0BAA0B,OAAA;AAAE,0HAAA,iBAAiB,OAAA;AAAE,gIAAA,uBAAuB,OAAA;AAAE,6HAAA,oBAAoB,OAAA;AAAE,gIAAA,uBAAuB,OAAA;AAE9H,+DAA+D;AAC/D,qDAAqD;AACrD,wCAAwC;AACxC,qDAAqD;AACrD,gEAA+E;AAAtE,mHAAA,eAAe,OAAA;AAAE,mHAAA,eAAe,OAAA;AAGzC,iEAAmH;AAA1G,8HAAA,yBAAyB,OAAA;AAAE,sHAAA,iBAAiB,OAAA;AAAE,2HAAA,sBAAsB,OAAA;AAE7E,iEAAiE;AACjE,mEAAmE;AACnE,2DAA2D;AAC3D,8EAA8E;AAC9E,0DAAkE;AAAzD,uGAAA,OAAO,OAAA;AAAE,4GAAA,YAAY,OAAA;AAE9B,0DAA8D;AAArD,yGAAA,aAAa,OAAA;AACtB,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA;AAE7B,qDAAqD;AACrD,yBAAyB;AACzB,uDAA2I;AAAlI,kIAAA,8BAA8B,OAAA;AAAE,6HAAA,yBAAyB,OAAA;AAAE,0HAAA,sBAAsB,OAAA;AAAE,qHAAA,iBAAiB,OAAA;AAE7G,0DAA0D;AAC1D,mDAAqI;AAA5H,+GAAA,aAAa,OAAA;AAAE,4HAAA,0BAA0B,OAAA;AAAE,0HAAA,wBAAwB,OAAA;AAAE,8HAAA,4BAA4B,OAAA;AAE1G,2DAA2D;AAC3D,+CAA4D;AAAnD,0HAAA,0BAA0B,OAAA;AAEnC,kFAAkF;AAClF,qDAAqD;AACrD,iDAAiD;AACjD,+DAA+D;AAC/D,+CAA+D;AAAtD,gHAAA,gBAAgB,OAAA;AAAE,2GAAA,WAAW,OAAA;AAEtC,mEAAmE;AACnE,yDAAyD;AACzD,yCAAwD;AAA/C,0GAAA,aAAa,OAAA;AAAE,uGAAA,UAAU,OAAA;AAElC,2CAA8C;AAArC,4GAAA,cAAc,OAAA;AACvB,mDAAmD;AAA1C,iHAAA,eAAe,OAAA;AACxB,uCAAwC;AAA/B,sGAAA,UAAU,OAAA;AACnB,mCAAoC;AAA3B,kGAAA,QAAQ,OAAA;AACjB,6CAA8C;AAArC,4GAAA,aAAa,OAAA;AACtB,yCAA0C;AAAjC,wGAAA,WAAW,OAAA;AACpB,6CAA8C;AAArC,4GAAA,aAAa,OAAA;AACtB,mCAAoC;AAA3B,kGAAA,QAAQ,OAAA;AACjB,6DAA6D;AAApD,2HAAA,oBAAoB,OAAA","sourcesContent":["// niceeval/adapter 公开导出:「连到哪个 AI」相关的类型 + 内置 adapter + 自定义 adapter 的入口。\nexport { defineAdapter, defineAdapterContract } from \"../adapter.ts\";\nexport type { AssertionCheck, PolymorphicBooleanAssertionHandle, PolymorphicMeasurementAssertionHandle, } from \"../assertions/api.ts\";\nexport type { Adapter, AdapterAssertionsFactory, AdapterAssertionsFactoryContext, AdapterCleanupContext, AdapterContract, AdapterCreateContext, AdapterDefinition, AdapterEvalDefinition, AdapterEvalInput, AdapterIdentity, AdapterImplementation, AdapterImplementationInput, AdapterRuntimeDefinition, AdapterScoreEvalInput, EvalContext, ReservedAdapterContextKey, } from \"../adapter.ts\";\nexport type { ExecutionTraceActor, ExecutionTraceEvent, ExecutionTraceEvidence, ExecutionTraceInput, ExecutionTraceLimitation, ExecutionTraceLink, ExecutionTraceReceipt, ExecutionTraceScope, ExecutionTraceScopeMembership, ExecutionTraceSource, ExecutionTraceTime, TraceJson, } from \"../adapter-execution-trace.ts\";\nexport { defineAgent, defineSandboxAgent } from \"../define.ts\";\nexport { createSessionSlot } from \"./session-slot.ts\";\nexport { shared } from \"./shared.ts\";\nexport type { Shared } from \"./shared.ts\";\nexport { createNpmCliInstaller, agentBin } from \"./npm-staged.ts\";\nexport type { NpmCliInstallerOptions } from \"./npm-staged.ts\";\nexport { acquireManagedProcess } from \"./managed-process.ts\";\n// 证据覆盖声明:官方 SDK 适配器声明全通道 complete 用 completeEvidenceCoverage;\n// 手写映射按实际情况声明(见 docs/feature/adapters/architecture/evidence.md)。\nexport { completeEvidenceCoverage } from \"../assertions/coverage.ts\";\nexport type { EvidenceCoverageStatus, EvidenceCoverageEntry, EvidenceCoverage, TurnEvidenceCoverage, } from \"../types.ts\";\n// tool operation 的 command 分类只能由 Adapter 根据原生协议事实产生。\n// structured argv 走 commandProjection() 与同一 logical-command/v1 normalizer;\n// 无法安全取得 argv 时显式 opaque,确认不是 command 时显式 not-command。\nexport { LOGICAL_COMMAND_NORMALIZER, commandProjection, normalizeLogicalCommand, notCommandProjection, opaqueCommandProjection, } from \"../o11y/command-projection.ts\";\nexport type { CommandProjection, LogicalCommandInvocation, LogicalCommandNormalizer, OriginalCommandInvocation, OriginalCommandOpaqueReason, } from \"../o11y/types.ts\";\n// 执行失败分类:`Agent.classifySendFailure` 认的结构化 envelope 与同源摘要。两轴词表\n// (FailureClass / FailureScope)与包根导出的是同一个形状——adapter\n// 作者与 eval 作者各自的入口拿到同一份类型。判据、分类链与重试执行体见\n// docs/feature/error-classification/architecture.md。\nexport { makeSendFailure, sendFailureText } from \"../context/send-failures.ts\";\nexport type { SendFailure, SendFailureClassifier } from \"../context/send-failures.ts\";\nexport type { FailureClass, FailureScope } from \"../shared/failure-class.ts\";\nexport { externalCauseMessageChain, externalCauseText, normalizeExternalCause } from \"../shared/external-cause.ts\";\nexport type { ExternalCause, ExternalCauseFact, ExternalCauseLink } from \"../shared/external-cause.ts\";\n// span → canonical GenAI 归一(只服务瀑布图,不喂断言)。私有埋点写自己的 spanMapper 时用:\n// tagSpan 把判定写回 span(原属性只增不改),heuristicTag 是通用兜底判定;mapCodexSpans 是\n// 现成的参考实现(无侵入接 codex 后端时直接声明 `spanMapper: mapCodexSpans`)。\n// 映射目标(什么属性亮起瀑布图的什么)见 apps/docs-site/zh/tutorials/connect-otel.mdx「瀑布图画得准不准」。\nexport { tagSpan, heuristicTag } from \"../o11y/otlp/canonical.ts\";\nexport type { SpanTag } from \"../o11y/otlp/canonical.ts\";\nexport { mapCodexSpans } from \"../o11y/otlp/mappers/codex.ts\";\nexport { uiMessageStreamAgent } from \"./ui-message-stream.ts\";\nexport type { UiMessageStreamAgentOptions, UIMessageLike, UIMessagePartLike } from \"./ui-message-stream.ts\";\n// 两种 OpenAI 响应形状(不限于 OpenAI 官方,任何声明兼容这两种协议形状的服务都能用)的\n// 官方转换器:整段响应 → Turn,零映射。\nexport { chatCompletionEvidenceCoverage, responsesEvidenceCoverage, turnFromChatCompletion, turnFromResponses, } from \"./openai-compat.ts\";\nexport type { ChatCompletionLike, ChatCompletionCustomToolCallLike, ChatCompletionFunctionToolCallLike, ChatCompletionMessageLike, ChatCompletionToolCallLike, ChatCompletionUnknownToolCallLike, ChatCompletionUsageLike, ResponseFunctionCallItemLike, ResponseLike, ResponseMessageItemLike, ResponseOutputItemLike, ResponseOutputTextLike, ResponseUsageLike, } from \"./openai-compat.ts\";\n// SDK 原生事件流 → 标准事件的官方转换器(无侵入 adapter 只剩传输粘合)+ 通用 SSE 读帧器。\nexport { sseJsonFrames, createClaudeSdkEventStream, createPiAgentEventStream, createCodexThreadEventStream } from \"./sdk-streams.ts\";\nexport type { SseFrameCursor, ClaudeSdkMessageLike, ClaudeSdkStream, PiAgentEventLike, PiAgentStream, CodexThreadEventLike, CodexThreadStream, } from \"./sdk-streams.ts\";\n// LangGraph 官方事件流转换器(不绑定 transport,不提供 langGraphAgent 工厂)。\nexport { createLangGraphEventStream } from \"./langgraph.ts\";\nexport type { LangGraphEventLike, LangGraphContentBlockLike, LangGraphStream } from \"./langgraph.ts\";\n// 通用「拼装方式」件:逐帧驱动循环、逐 token/参数增量累加器。见 apps/docs-site/zh/tutorials/write-send.mdx——\n// 这些和任何具体协议无关,自己写 adapter 时优先拿这些拼,只有 transport(怎么发)与\n// 「帧类型 → 操作」这张映射表才是真正要手写的。会话续接与 HITL 停轮现场不再是可选件,\n// 而是 ctx.session(AgentSession)本身的 typed slot 与 id/capture 存取器。\nexport { driveFrameStream, deltaStream } from \"./streaming.ts\";\nexport type { FrameReducer, FrameHook, DeltaOp, DeltaStreamSpec } from \"./streaming.ts\";\n// tracing 管线的内置实现 aiSdkOtel() 在 `niceeval/adapter/otel`(独立子路径,不从这里\n// re-export):OTel 三件套是可选 peer 依赖,只有 import 那个入口的项目才需要安装。\nexport { turnFromAiSdk, aiSdkAgent } from \"./ai-sdk.ts\";\nexport type { AiSdkAgentOptions, AiSdkGenerateContext, AiSdkResultLike, AiSdkStepLike, AiSdkTelemetrySettings, AiSdkToolCallLike, AiSdkToolResultLike, AiSdkTracing, AiSdkTurn, AiSdkTurnTelemetry, AiSdkUsageLike, } from \"./ai-sdk.ts\";\nexport { BUILTIN_AGENTS } from \"./builtin.ts\";\nexport { claudeCodeAgent } from \"./claude-code.ts\";\nexport { codexAgent } from \"./codex.ts\";\nexport { bubAgent } from \"./bub.ts\";\nexport { openCodeAgent } from \"./opencode.ts\";\nexport { hermesAgent } from \"./hermes.ts\";\nexport { openClawAgent } from \"./openclaw.ts\";\nexport { ompAgent } from \"./omp.ts\";\nexport { deepSeekHarnessAgent } from \"./deepseek-harness.ts\";\nexport type { ClaudeCodeConfig, ClaudeCodePluginSpec } from \"./claude-code.ts\";\nexport type { CodexConfig, CodexPluginSpec } from \"./codex.ts\";\nexport type { BubConfig, PythonPluginSpec } from \"./bub.ts\";\nexport type { OpenCodeConfig } from \"./opencode.ts\";\nexport type { HermesConfig } from \"./hermes.ts\";\nexport type { OpenClawConfig } from \"./openclaw.ts\";\nexport type { OmpConfig } from \"./omp.ts\";\nexport type { DeepSeekHarnessConfig } from \"./deepseek-harness.ts\";\nexport type { Agent, AgentContext, AgentIdentity, AgentInstallMode, AgentArtifactPlatform, AgentStagedArtifact, AgentEnsureOutcome, AgentEnsure, AgentInstaller, AgentArtifactContext, AgentInstallContext, StagedAgentInstallContext, DirectAgent, DirectAgentDef, DirectAgentSetup, DirectAgentTeardown, AgentSession, SessionSlot, AgentSetup, AgentSetupManifest, AgentSetupSkill, AgentTeardown, AgentTracing, SpanMapper, Telemetry, SandboxAgentDef, SandboxAgent, SandboxAgentContext, SandboxAgentSetupContext, McpServer, SkillSpec, } from \"../types.ts\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAAA,uEAAuE;AACvE,4CAAqE;AAA5D,2GAAA,aAAa,OAAA;AAAE,mHAAA,qBAAqB,OAAA;AAI7C,0CAA+D;AAAtD,wGAAA,WAAW,OAAA;AAAE,+GAAA,kBAAkB,OAAA;AACxC,qDAAsD;AAA7C,oHAAA,iBAAiB,OAAA;AAC1B,yCAAqC;AAA5B,mGAAA,MAAM,OAAA;AAEf,iDAAkE;AAAzD,sHAAA,qBAAqB,OAAA;AAAE,yGAAA,QAAQ,OAAA;AAExC,2DAA6D;AAApD,2HAAA,qBAAqB,OAAA;AAC9B,8DAA8D;AAC9D,iEAAiE;AACjE,yDAAqE;AAA5D,uHAAA,wBAAwB,OAAA;AAEjC,qDAAqD;AACrD,2EAA2E;AAC3E,uDAAuD;AACvD,uEAAuK;AAA9J,mIAAA,0BAA0B,OAAA;AAAE,0HAAA,iBAAiB,OAAA;AAAE,gIAAA,uBAAuB,OAAA;AAAE,6HAAA,oBAAoB,OAAA;AAAE,gIAAA,uBAAuB,OAAA;AAE9H,+DAA+D;AAC/D,qDAAqD;AACrD,wCAAwC;AACxC,qDAAqD;AACrD,gEAA+E;AAAtE,mHAAA,eAAe,OAAA;AAAE,mHAAA,eAAe,OAAA;AAGzC,iEAAmH;AAA1G,8HAAA,yBAAyB,OAAA;AAAE,sHAAA,iBAAiB,OAAA;AAAE,2HAAA,sBAAsB,OAAA;AAE7E,iEAAiE;AACjE,mEAAmE;AACnE,2DAA2D;AAC3D,8EAA8E;AAC9E,0DAAkE;AAAzD,uGAAA,OAAO,OAAA;AAAE,4GAAA,YAAY,OAAA;AAE9B,0DAA8D;AAArD,yGAAA,aAAa,OAAA;AACtB,+DAA8D;AAArD,4HAAA,oBAAoB,OAAA;AAE7B,qDAAqD;AACrD,yBAAyB;AACzB,uDAA2I;AAAlI,kIAAA,8BAA8B,OAAA;AAAE,6HAAA,yBAAyB,OAAA;AAAE,0HAAA,sBAAsB,OAAA;AAAE,qHAAA,iBAAiB,OAAA;AAE7G,0DAA0D;AAC1D,mDAAqI;AAA5H,+GAAA,aAAa,OAAA;AAAE,4HAAA,0BAA0B,OAAA;AAAE,0HAAA,wBAAwB,OAAA;AAAE,8HAAA,4BAA4B,OAAA;AAE1G,2DAA2D;AAC3D,+CAA4D;AAAnD,0HAAA,0BAA0B,OAAA;AAEnC,kFAAkF;AAClF,qDAAqD;AACrD,iDAAiD;AACjD,+DAA+D;AAC/D,+CAA+D;AAAtD,gHAAA,gBAAgB,OAAA;AAAE,2GAAA,WAAW,OAAA;AAEtC,mEAAmE;AACnE,yDAAyD;AACzD,yCAAwD;AAA/C,0GAAA,aAAa,OAAA;AAAE,uGAAA,UAAU,OAAA;AAElC,2CAA8C;AAArC,4GAAA,cAAc,OAAA;AACvB,mDAAmD;AAA1C,iHAAA,eAAe,OAAA;AACxB,uCAAwC;AAA/B,sGAAA,UAAU,OAAA;AACnB,mCAAoC;AAA3B,kGAAA,QAAQ,OAAA;AACjB,6CAA8C;AAArC,4GAAA,aAAa,OAAA;AACtB,yCAA0C;AAAjC,wGAAA,WAAW,OAAA;AACpB,6CAA8C;AAArC,4GAAA,aAAa,OAAA;AACtB,mCAAoC;AAA3B,kGAAA,QAAQ,OAAA;AACjB,6DAA6D;AAApD,2HAAA,oBAAoB,OAAA","sourcesContent":["// niceeval/adapter 公开导出:「连到哪个 AI」相关的类型 + 内置 adapter + 自定义 adapter 的入口。\nexport { defineAdapter, defineAdapterContract } from \"../adapter.ts\";\nexport type { AssertionCheck, PolymorphicBooleanAssertionHandle, PolymorphicMeasurementAssertionHandle, } from \"../assertions/api.ts\";\nexport type { Adapter, AdapterAssertionsFactory, AdapterAssertionsFactoryContext, AdapterCleanupContext, AttemptCancellation, AttemptSignal, AdapterContract, AdapterCreateContext, AdapterDefinition, AdapterEvalDefinition, AdapterEvalInput, AdapterIdentity, AdapterImplementation, AdapterImplementationInput, AdapterRuntimeDefinition, AdapterScoreEvalInput, EvalContext, ReservedAdapterContextKey, } from \"../adapter.ts\";\nexport type { ExecutionDisplayBlock, ExecutionTraceActor, ExecutionTraceEvent, ExecutionTraceEvidence, ExecutionTraceInput, ExecutionTraceLimitation, ExecutionTraceLink, ExecutionTraceReceipt, ExecutionTraceScope, ExecutionTraceScopeMembership, ExecutionTraceSource, ExecutionTraceTime, TraceJson, } from \"../adapter-execution-trace.ts\";\nexport { defineAgent, defineSandboxAgent } from \"../define.ts\";\nexport { createSessionSlot } from \"./session-slot.ts\";\nexport { shared } from \"./shared.ts\";\nexport type { Shared } from \"./shared.ts\";\nexport { createNpmCliInstaller, agentBin } from \"./npm-staged.ts\";\nexport type { NpmCliInstallerOptions } from \"./npm-staged.ts\";\nexport { acquireManagedProcess } from \"./managed-process.ts\";\n// 证据覆盖声明:官方 SDK 适配器声明全通道 complete 用 completeEvidenceCoverage;\n// 手写映射按实际情况声明(见 docs/feature/adapters/architecture/evidence.md)。\nexport { completeEvidenceCoverage } from \"../assertions/coverage.ts\";\nexport type { EvidenceCoverageStatus, EvidenceCoverageEntry, EvidenceCoverage, TurnEvidenceCoverage, } from \"../types.ts\";\n// tool operation 的 command 分类只能由 Adapter 根据原生协议事实产生。\n// structured argv 走 commandProjection() 与同一 logical-command/v1 normalizer;\n// 无法安全取得 argv 时显式 opaque,确认不是 command 时显式 not-command。\nexport { LOGICAL_COMMAND_NORMALIZER, commandProjection, normalizeLogicalCommand, notCommandProjection, opaqueCommandProjection, } from \"../o11y/command-projection.ts\";\nexport type { CommandProjection, LogicalCommandInvocation, LogicalCommandNormalizer, OriginalCommandInvocation, OriginalCommandOpaqueReason, } from \"../o11y/types.ts\";\n// 执行失败分类:`Agent.classifySendFailure` 认的结构化 envelope 与同源摘要。两轴词表\n// (FailureClass / FailureScope)与包根导出的是同一个形状——adapter\n// 作者与 eval 作者各自的入口拿到同一份类型。判据、分类链与重试执行体见\n// docs/feature/error-classification/architecture.md。\nexport { makeSendFailure, sendFailureText } from \"../context/send-failures.ts\";\nexport type { SendFailure, SendFailureClassifier } from \"../context/send-failures.ts\";\nexport type { FailureClass, FailureScope } from \"../shared/failure-class.ts\";\nexport { externalCauseMessageChain, externalCauseText, normalizeExternalCause } from \"../shared/external-cause.ts\";\nexport type { ExternalCause, ExternalCauseFact, ExternalCauseLink } from \"../shared/external-cause.ts\";\n// span → canonical GenAI 归一(只服务瀑布图,不喂断言)。私有埋点写自己的 spanMapper 时用:\n// tagSpan 把判定写回 span(原属性只增不改),heuristicTag 是通用兜底判定;mapCodexSpans 是\n// 现成的参考实现(无侵入接 codex 后端时直接声明 `spanMapper: mapCodexSpans`)。\n// 映射目标(什么属性亮起瀑布图的什么)见 apps/docs-site/zh/tutorials/connect-otel.mdx「瀑布图画得准不准」。\nexport { tagSpan, heuristicTag } from \"../o11y/otlp/canonical.ts\";\nexport type { SpanTag } from \"../o11y/otlp/canonical.ts\";\nexport { mapCodexSpans } from \"../o11y/otlp/mappers/codex.ts\";\nexport { uiMessageStreamAgent } from \"./ui-message-stream.ts\";\nexport type { UiMessageStreamAgentOptions, UIMessageLike, UIMessagePartLike } from \"./ui-message-stream.ts\";\n// 两种 OpenAI 响应形状(不限于 OpenAI 官方,任何声明兼容这两种协议形状的服务都能用)的\n// 官方转换器:整段响应 → Turn,零映射。\nexport { chatCompletionEvidenceCoverage, responsesEvidenceCoverage, turnFromChatCompletion, turnFromResponses, } from \"./openai-compat.ts\";\nexport type { ChatCompletionLike, ChatCompletionCustomToolCallLike, ChatCompletionFunctionToolCallLike, ChatCompletionMessageLike, ChatCompletionToolCallLike, ChatCompletionUnknownToolCallLike, ChatCompletionUsageLike, ResponseFunctionCallItemLike, ResponseLike, ResponseMessageItemLike, ResponseOutputItemLike, ResponseOutputTextLike, ResponseUsageLike, } from \"./openai-compat.ts\";\n// SDK 原生事件流 → 标准事件的官方转换器(无侵入 adapter 只剩传输粘合)+ 通用 SSE 读帧器。\nexport { sseJsonFrames, createClaudeSdkEventStream, createPiAgentEventStream, createCodexThreadEventStream } from \"./sdk-streams.ts\";\nexport type { SseFrameCursor, ClaudeSdkMessageLike, ClaudeSdkStream, PiAgentEventLike, PiAgentStream, CodexThreadEventLike, CodexThreadStream, } from \"./sdk-streams.ts\";\n// LangGraph 官方事件流转换器(不绑定 transport,不提供 langGraphAgent 工厂)。\nexport { createLangGraphEventStream } from \"./langgraph.ts\";\nexport type { LangGraphEventLike, LangGraphContentBlockLike, LangGraphStream } from \"./langgraph.ts\";\n// 通用「拼装方式」件:逐帧驱动循环、逐 token/参数增量累加器。见 apps/docs-site/zh/tutorials/write-send.mdx——\n// 这些和任何具体协议无关,自己写 adapter 时优先拿这些拼,只有 transport(怎么发)与\n// 「帧类型 → 操作」这张映射表才是真正要手写的。会话续接与 HITL 停轮现场不再是可选件,\n// 而是 ctx.session(AgentSession)本身的 typed slot 与 id/capture 存取器。\nexport { driveFrameStream, deltaStream } from \"./streaming.ts\";\nexport type { FrameReducer, FrameHook, DeltaOp, DeltaStreamSpec } from \"./streaming.ts\";\n// tracing 管线的内置实现 aiSdkOtel() 在 `niceeval/adapter/otel`(独立子路径,不从这里\n// re-export):OTel 三件套是可选 peer 依赖,只有 import 那个入口的项目才需要安装。\nexport { turnFromAiSdk, aiSdkAgent } from \"./ai-sdk.ts\";\nexport type { AiSdkAgentOptions, AiSdkGenerateContext, AiSdkResultLike, AiSdkStepLike, AiSdkTelemetrySettings, AiSdkToolCallLike, AiSdkToolResultLike, AiSdkTracing, AiSdkTurn, AiSdkTurnTelemetry, AiSdkUsageLike, } from \"./ai-sdk.ts\";\nexport { BUILTIN_AGENTS } from \"./builtin.ts\";\nexport { claudeCodeAgent } from \"./claude-code.ts\";\nexport { codexAgent } from \"./codex.ts\";\nexport { bubAgent } from \"./bub.ts\";\nexport { openCodeAgent } from \"./opencode.ts\";\nexport { hermesAgent } from \"./hermes.ts\";\nexport { openClawAgent } from \"./openclaw.ts\";\nexport { ompAgent } from \"./omp.ts\";\nexport { deepSeekHarnessAgent } from \"./deepseek-harness.ts\";\nexport type { ClaudeCodeConfig, ClaudeCodePluginSpec } from \"./claude-code.ts\";\nexport type { CodexConfig, CodexPluginSpec } from \"./codex.ts\";\nexport type { BubConfig, PythonPluginSpec } from \"./bub.ts\";\nexport type { OpenCodeConfig } from \"./opencode.ts\";\nexport type { HermesConfig } from \"./hermes.ts\";\nexport type { OpenClawConfig } from \"./openclaw.ts\";\nexport type { OmpConfig } from \"./omp.ts\";\nexport type { DeepSeekHarnessConfig } from \"./deepseek-harness.ts\";\nexport type { Agent, AgentContext, AgentIdentity, AgentInstallMode, AgentArtifactPlatform, AgentStagedArtifact, AgentEnsureOutcome, AgentEnsure, AgentInstaller, AgentArtifactContext, AgentInstallContext, StagedAgentInstallContext, DirectAgent, DirectAgentDef, DirectAgentSetup, DirectAgentTeardown, AgentSession, SessionSlot, AgentSetup, AgentSetupManifest, AgentSetupSkill, AgentTeardown, AgentTracing, SpanMapper, Telemetry, SandboxAgentDef, SandboxAgent, SandboxAgentContext, SandboxAgentSetupContext, McpServer, SkillSpec, } from \"../types.ts\";\nexport type { ModelSlotSelection, ResolvedModelSlot, ResolvedModelSlots } from \"../model-slots.ts\";\n"]}
@@ -1,7 +1,7 @@
1
1
  export { defineAdapter, defineAdapterContract } from "../adapter.cjs";
2
2
  export type { AssertionCheck, PolymorphicBooleanAssertionHandle, PolymorphicMeasurementAssertionHandle, } from "../assertions/api.cjs";
3
- export type { Adapter, AdapterAssertionsFactory, AdapterAssertionsFactoryContext, AdapterCleanupContext, AdapterContract, AdapterCreateContext, AdapterDefinition, AdapterEvalDefinition, AdapterEvalInput, AdapterIdentity, AdapterImplementation, AdapterImplementationInput, AdapterRuntimeDefinition, AdapterScoreEvalInput, EvalContext, ReservedAdapterContextKey, } from "../adapter.cjs";
4
- export type { ExecutionTraceActor, ExecutionTraceEvent, ExecutionTraceEvidence, ExecutionTraceInput, ExecutionTraceLimitation, ExecutionTraceLink, ExecutionTraceReceipt, ExecutionTraceScope, ExecutionTraceScopeMembership, ExecutionTraceSource, ExecutionTraceTime, TraceJson, } from "../adapter-execution-trace.cjs";
3
+ export type { Adapter, AdapterAssertionsFactory, AdapterAssertionsFactoryContext, AdapterCleanupContext, AttemptCancellation, AttemptSignal, AdapterContract, AdapterCreateContext, AdapterDefinition, AdapterEvalDefinition, AdapterEvalInput, AdapterIdentity, AdapterImplementation, AdapterImplementationInput, AdapterRuntimeDefinition, AdapterScoreEvalInput, EvalContext, ReservedAdapterContextKey, } from "../adapter.cjs";
4
+ export type { ExecutionDisplayBlock, ExecutionTraceActor, ExecutionTraceEvent, ExecutionTraceEvidence, ExecutionTraceInput, ExecutionTraceLimitation, ExecutionTraceLink, ExecutionTraceReceipt, ExecutionTraceScope, ExecutionTraceScopeMembership, ExecutionTraceSource, ExecutionTraceTime, TraceJson, } from "../adapter-execution-trace.cjs";
5
5
  export { defineAgent, defineSandboxAgent } from "../define.cjs";
6
6
  export { createSessionSlot } from "./session-slot.cjs";
7
7
  export { shared } from "./shared.cjs";
@@ -51,3 +51,4 @@ export type { OpenClawConfig } from "./openclaw.cjs";
51
51
  export type { OmpConfig } from "./omp.cjs";
52
52
  export type { DeepSeekHarnessConfig } from "./deepseek-harness.cjs";
53
53
  export type { Agent, AgentContext, AgentIdentity, AgentInstallMode, AgentArtifactPlatform, AgentStagedArtifact, AgentEnsureOutcome, AgentEnsure, AgentInstaller, AgentArtifactContext, AgentInstallContext, StagedAgentInstallContext, DirectAgent, DirectAgentDef, DirectAgentSetup, DirectAgentTeardown, AgentSession, SessionSlot, AgentSetup, AgentSetupManifest, AgentSetupSkill, AgentTeardown, AgentTracing, SpanMapper, Telemetry, SandboxAgentDef, SandboxAgent, SandboxAgentContext, SandboxAgentSetupContext, McpServer, SkillSpec, } from "../types.cjs";
54
+ export type { ModelSlotSelection, ResolvedModelSlot, ResolvedModelSlots } from "../model-slots.cjs";
@@ -1,7 +1,7 @@
1
1
  export { defineAdapter, defineAdapterContract } from "../adapter.mjs";
2
2
  export type { AssertionCheck, PolymorphicBooleanAssertionHandle, PolymorphicMeasurementAssertionHandle, } from "../assertions/api.mjs";
3
- export type { Adapter, AdapterAssertionsFactory, AdapterAssertionsFactoryContext, AdapterCleanupContext, AdapterContract, AdapterCreateContext, AdapterDefinition, AdapterEvalDefinition, AdapterEvalInput, AdapterIdentity, AdapterImplementation, AdapterImplementationInput, AdapterRuntimeDefinition, AdapterScoreEvalInput, EvalContext, ReservedAdapterContextKey, } from "../adapter.mjs";
4
- export type { ExecutionTraceActor, ExecutionTraceEvent, ExecutionTraceEvidence, ExecutionTraceInput, ExecutionTraceLimitation, ExecutionTraceLink, ExecutionTraceReceipt, ExecutionTraceScope, ExecutionTraceScopeMembership, ExecutionTraceSource, ExecutionTraceTime, TraceJson, } from "../adapter-execution-trace.mjs";
3
+ export type { Adapter, AdapterAssertionsFactory, AdapterAssertionsFactoryContext, AdapterCleanupContext, AttemptCancellation, AttemptSignal, AdapterContract, AdapterCreateContext, AdapterDefinition, AdapterEvalDefinition, AdapterEvalInput, AdapterIdentity, AdapterImplementation, AdapterImplementationInput, AdapterRuntimeDefinition, AdapterScoreEvalInput, EvalContext, ReservedAdapterContextKey, } from "../adapter.mjs";
4
+ export type { ExecutionDisplayBlock, ExecutionTraceActor, ExecutionTraceEvent, ExecutionTraceEvidence, ExecutionTraceInput, ExecutionTraceLimitation, ExecutionTraceLink, ExecutionTraceReceipt, ExecutionTraceScope, ExecutionTraceScopeMembership, ExecutionTraceSource, ExecutionTraceTime, TraceJson, } from "../adapter-execution-trace.mjs";
5
5
  export { defineAgent, defineSandboxAgent } from "../define.mjs";
6
6
  export { createSessionSlot } from "./session-slot.mjs";
7
7
  export { shared } from "./shared.mjs";
@@ -51,3 +51,4 @@ export type { OpenClawConfig } from "./openclaw.mjs";
51
51
  export type { OmpConfig } from "./omp.mjs";
52
52
  export type { DeepSeekHarnessConfig } from "./deepseek-harness.mjs";
53
53
  export type { Agent, AgentContext, AgentIdentity, AgentInstallMode, AgentArtifactPlatform, AgentStagedArtifact, AgentEnsureOutcome, AgentEnsure, AgentInstaller, AgentArtifactContext, AgentInstallContext, StagedAgentInstallContext, DirectAgent, DirectAgentDef, DirectAgentSetup, DirectAgentTeardown, AgentSession, SessionSlot, AgentSetup, AgentSetupManifest, AgentSetupSkill, AgentTeardown, AgentTracing, SpanMapper, Telemetry, SandboxAgentDef, SandboxAgent, SandboxAgentContext, SandboxAgentSetupContext, McpServer, SkillSpec, } from "../types.mjs";
54
+ export type { ModelSlotSelection, ResolvedModelSlot, ResolvedModelSlots } from "../model-slots.mjs";
@@ -1,7 +1,7 @@
1
1
  export { defineAdapter, defineAdapterContract } from "../adapter.js";
2
2
  export type { AssertionCheck, PolymorphicBooleanAssertionHandle, PolymorphicMeasurementAssertionHandle, } from "../assertions/api.js";
3
- export type { Adapter, AdapterAssertionsFactory, AdapterAssertionsFactoryContext, AdapterCleanupContext, AdapterContract, AdapterCreateContext, AdapterDefinition, AdapterEvalDefinition, AdapterEvalInput, AdapterIdentity, AdapterImplementation, AdapterImplementationInput, AdapterRuntimeDefinition, AdapterScoreEvalInput, EvalContext, ReservedAdapterContextKey, } from "../adapter.js";
4
- export type { ExecutionTraceActor, ExecutionTraceEvent, ExecutionTraceEvidence, ExecutionTraceInput, ExecutionTraceLimitation, ExecutionTraceLink, ExecutionTraceReceipt, ExecutionTraceScope, ExecutionTraceScopeMembership, ExecutionTraceSource, ExecutionTraceTime, TraceJson, } from "../adapter-execution-trace.js";
3
+ export type { Adapter, AdapterAssertionsFactory, AdapterAssertionsFactoryContext, AdapterCleanupContext, AttemptCancellation, AttemptSignal, AdapterContract, AdapterCreateContext, AdapterDefinition, AdapterEvalDefinition, AdapterEvalInput, AdapterIdentity, AdapterImplementation, AdapterImplementationInput, AdapterRuntimeDefinition, AdapterScoreEvalInput, EvalContext, ReservedAdapterContextKey, } from "../adapter.js";
4
+ export type { ExecutionDisplayBlock, ExecutionTraceActor, ExecutionTraceEvent, ExecutionTraceEvidence, ExecutionTraceInput, ExecutionTraceLimitation, ExecutionTraceLink, ExecutionTraceReceipt, ExecutionTraceScope, ExecutionTraceScopeMembership, ExecutionTraceSource, ExecutionTraceTime, TraceJson, } from "../adapter-execution-trace.js";
5
5
  export { defineAgent, defineSandboxAgent } from "../define.js";
6
6
  export { createSessionSlot } from "./session-slot.js";
7
7
  export { shared } from "./shared.js";
@@ -51,3 +51,4 @@ export type { OpenClawConfig } from "./openclaw.js";
51
51
  export type { OmpConfig } from "./omp.js";
52
52
  export type { DeepSeekHarnessConfig } from "./deepseek-harness.js";
53
53
  export type { Agent, AgentContext, AgentIdentity, AgentInstallMode, AgentArtifactPlatform, AgentStagedArtifact, AgentEnsureOutcome, AgentEnsure, AgentInstaller, AgentArtifactContext, AgentInstallContext, StagedAgentInstallContext, DirectAgent, DirectAgentDef, DirectAgentSetup, DirectAgentTeardown, AgentSession, SessionSlot, AgentSetup, AgentSetupManifest, AgentSetupSkill, AgentTeardown, AgentTracing, SpanMapper, Telemetry, SandboxAgentDef, SandboxAgent, SandboxAgentContext, SandboxAgentSetupContext, McpServer, SkillSpec, } from "../types.js";
54
+ export type { ModelSlotSelection, ResolvedModelSlot, ResolvedModelSlots } from "../model-slots.js";
@@ -74,6 +74,9 @@ function enrichOmpEvent(event) {
74
74
  };
75
75
  }
76
76
  /** Oh My Pi sandbox adapter backed by `omp --print --mode json`. */
77
+ // @concord-code ne-adapter-omp-agent
78
+ // @concord-implements docs/feature/adapters/README.md
79
+ // @concord-implements docs/feature/adapters/sdk/omp/README.md
77
80
  function ompAgent(config) {
78
81
  const version = config?.version ?? coding_cli_versions_ts_1.DEFAULT_OMP_CLI_VERSION;
79
82
  const bunVersion = config?.bunVersion ?? coding_cli_versions_ts_1.DEFAULT_BUN_VERSION;
@@ -1 +1 @@
1
- {"version":3,"file":"omp.js","sourceRoot":"","sources":["omp.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from \"effect\";\nimport { makeSandboxAgent } from \"../define.ts\";\nimport { getEnv, requireEnv } from \"../util.ts\";\nimport type { Agent, EvidenceCoverage, StreamEvent } from \"../types.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\nimport { shared } from \"./shared.ts\";\nimport { createPiAgentEventStream, type PiAgentEventLike } from \"./sdk-streams.ts\";\nimport { normalizeToolName } from \"../o11y/tool-names.ts\";\nimport { notCommandProjection, opaqueCommandProjection } from \"../o11y/command-projection.ts\";\nimport { createNpmCliInstaller, resolveAgentBinEffect } from \"./npm-staged.ts\";\nimport { AGENT_BASELINE_RECIPE_REVISION, DEFAULT_BUN_VERSION, DEFAULT_OMP_CLI_VERSION, } from \"./coding-cli-versions.ts\";\nimport type { AgentArtifactPlatform } from \"./types.ts\";\nconst COMPAT_PROVIDER = \"niceeval-compat\";\nconst API_KEY_ENV = \"NICEEVAL_OMP_API_KEY\";\nconst OMP_EVIDENCE_COVERAGE: EvidenceCoverage = {\n events: { status: \"complete\" },\n actions: { status: \"complete\" },\n messages: { status: \"complete\" },\n usage: { status: \"complete\" },\n status: { status: \"complete\" },\n data: { status: \"unavailable\", reason: \"OMP print mode does not expose a separate Turn.data value.\" },\n};\nexport interface OmpConfig {\n /** OpenAI-compatible API key. Defaults to OMP_API_KEY, then OPENAI_API_KEY. */\n apiKey?: string;\n /** OpenAI-compatible endpoint. Defaults to OMP_BASE_URL, then OPENAI_BASE_URL. */\n baseUrl?: string;\n /** Exact npm version of `@oh-my-pi/pi-coding-agent`. */\n version?: string;\n /** Exact Bun runtime version used by the fallback installer. */\n bunVersion?: string;\n}\nfunction resolveApiKey(config?: OmpConfig): string {\n return config?.apiKey ?? getEnv(\"OMP_API_KEY\") ?? requireEnv(\"OPENAI_API_KEY\");\n}\nfunction resolveBaseUrl(config?: OmpConfig): string | undefined {\n return config?.baseUrl ?? getEnv(\"OMP_BASE_URL\") ?? getEnv(\"OPENAI_BASE_URL\");\n}\nfunction bunPlatformPackage(version: string, platform: AgentArtifactPlatform): {\n spec: string;\n binPath: string;\n} | undefined {\n if (platform.os === \"linux\") {\n const arch = platform.arch === \"arm64\" ? \"aarch64\" : platform.arch;\n if (arch !== \"x64\" && arch !== \"aarch64\")\n return undefined;\n const musl = platform.libc === \"musl\" ? \"-musl\" : \"\";\n return { spec: `@oven/bun-linux-${arch}${musl}@${version}`, binPath: \"bin/bun\" };\n }\n if (platform.os === \"darwin\") {\n const arch = platform.arch === \"arm64\" ? \"aarch64\" : platform.arch;\n if (arch !== \"x64\" && arch !== \"aarch64\")\n return undefined;\n return { spec: `@oven/bun-darwin-${arch}@${version}`, binPath: \"bin/bun\" };\n }\n return undefined;\n}\nfunction parseJsonl(raw: string): PiAgentEventLike[] {\n return raw.split(/\\r?\\n/).filter((line) => line.trim()).map((line, index) => {\n let value: unknown;\n try {\n value = JSON.parse(line);\n }\n catch (cause) {\n throw new Error(`OMP emitted invalid JSONL at line ${index + 1}`, { cause });\n }\n if (typeof value !== \"object\" || value === null || typeof (value as {\n type?: unknown;\n }).type !== \"string\") {\n throw new Error(`OMP emitted an invalid event at line ${index + 1}`);\n }\n return value as PiAgentEventLike;\n });\n}\nfunction enrichOmpEvent(event: StreamEvent): StreamEvent {\n if (event.type !== \"operation.started\" || event.operation.kind !== \"tool\")\n return event;\n const tool = normalizeToolName(event.operation.name);\n return {\n ...event,\n operation: {\n ...event.operation,\n tool,\n command: tool === \"shell\"\n ? opaqueCommandProjection(\"unsupported-protocol\")\n : notCommandProjection(),\n },\n };\n}\n/** Oh My Pi sandbox adapter backed by `omp --print --mode json`. */\nexport function ompAgent(config?: OmpConfig): Agent {\n const version = config?.version ?? DEFAULT_OMP_CLI_VERSION;\n const bunVersion = config?.bunVersion ?? DEFAULT_BUN_VERSION;\n const ompInstall = createNpmCliInstaller({\n identity: { agent: \"omp\", version, revision: String(AGENT_BASELINE_RECIPE_REVISION.omp) },\n packageName: \"@oh-my-pi/pi-coding-agent\",\n bin: \"omp\",\n });\n const bunInstall = createNpmCliInstaller({\n identity: { agent: \"bun\", version: bunVersion, revision: \"1\" },\n packageName: \"bun\",\n bin: \"bun\",\n platformPackage: (platform) => bunPlatformPackage(bunVersion, platform),\n });\n const configDirs = new Map<string, string>();\n return makeSandboxAgent({\n name: \"omp\",\n evidenceCoverage: OMP_EVIDENCE_COVERAGE,\n ensure: [bunInstall.ensure, ompInstall.ensure],\n installers: [bunInstall.installer, ompInstall.installer],\n setup: (sb, ctx) => Effect.tryPromise({\n try: async () => {\n const homeResult = await sb.runShell('test -n \"$HOME\" && printf \"%s\" \"$HOME\"');\n const home = homeResult.stdout.trim();\n if (homeResult.exitCode !== 0 || !home.startsWith(\"/\")) {\n throw new Error(\"OMP setup requires an absolute sandbox HOME directory\");\n }\n const dir = `${home}/.niceeval-omp`;\n configDirs.set(sb.sandboxId, dir);\n const baseUrl = resolveBaseUrl(config);\n const model = ctx.model ?? \"deepseek-v4-flash\";\n const models = {\n providers: {\n [COMPAT_PROVIDER]: {\n ...(baseUrl ? { baseUrl } : {}),\n api: \"openai-completions\",\n apiKey: API_KEY_ENV,\n models: [{ id: model, name: model, contextWindow: 1000000, maxTokens: 64000 }],\n },\n },\n };\n await shared.writeFile(sb, `${dir}/models.yml`, JSON.stringify(models, null, 2));\n },\n catch: (cause) => cause,\n }),\n send: (input, ctx) => Effect.gen(function* () {\n const ompBin = yield* resolveAgentBinEffect(ctx.sandbox, \"omp\");\n return yield* Effect.tryPromise({\n try: async (signal) => {\n const apiKey = resolveApiKey(config);\n const dir = configDirs.get(ctx.sandbox.sandboxId);\n if (!dir)\n throw new Error(\"OMP setup state is unavailable\");\n const model = ctx.model ?? \"deepseek-v4-flash\";\n const env: globalThis.Record<string, string> = {\n [API_KEY_ENV]: apiKey,\n PI_CODING_AGENT_DIR: dir,\n ...ctx.telemetry?.env,\n };\n const args = [\n \"--print\",\n \"--mode\", \"json\",\n \"--model\", `${COMPAT_PROVIDER}/${model}`,\n \"--approval-mode\", \"yolo\",\n \"--no-pty\",\n \"--no-title\",\n input.text,\n ];\n const res = await ctx.sandbox.runCommand(ompBin, args, {\n env,\n sensitiveValues: [apiKey],\n stream: true,\n signal,\n });\n let nativeEvents: PiAgentEventLike[];\n try {\n nativeEvents = parseJsonl(res.stdout);\n }\n catch (cause) {\n throw makeSendFailure({\n acceptance: \"unknown\",\n message: cause instanceof Error ? cause.message : \"OMP transcript could not be parsed\",\n process: res,\n });\n }\n const stream = createPiAgentEventStream();\n const events: StreamEvent[] = nativeEvents.flatMap((event) => stream.add(event)).map(enrichOmpEvent);\n const terminal = nativeEvents.filter((event) => event.type === \"agent_end\" &&\n (event as {\n isTerminal?: unknown;\n }).isTerminal !== false &&\n Array.isArray((event as {\n messages?: unknown;\n }).messages));\n if (res.exitCode !== 0 || terminal.length !== 1) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: res.exitCode !== 0\n ? shared.diagnoseFailure(res, events, res.stdout)\n : `OMP produced ${terminal.length} valid terminal agent_end events; expected exactly one.`,\n events,\n usage: stream.usage,\n process: res,\n });\n }\n return {\n events,\n usage: stream.usage,\n status: stream.failed ? \"failed\" as const : \"completed\" as const,\n };\n },\n catch: (cause) => cause,\n });\n }),\n });\n}\nexport default ompAgent;\n"]}
1
+ {"version":3,"file":"omp.js","sourceRoot":"","sources":["omp.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from \"effect\";\nimport { makeSandboxAgent } from \"../define.ts\";\nimport { getEnv, requireEnv } from \"../util.ts\";\nimport type { Agent, EvidenceCoverage, StreamEvent } from \"../types.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\nimport { shared } from \"./shared.ts\";\nimport { createPiAgentEventStream, type PiAgentEventLike } from \"./sdk-streams.ts\";\nimport { normalizeToolName } from \"../o11y/tool-names.ts\";\nimport { notCommandProjection, opaqueCommandProjection } from \"../o11y/command-projection.ts\";\nimport { createNpmCliInstaller, resolveAgentBinEffect } from \"./npm-staged.ts\";\nimport { AGENT_BASELINE_RECIPE_REVISION, DEFAULT_BUN_VERSION, DEFAULT_OMP_CLI_VERSION, } from \"./coding-cli-versions.ts\";\nimport type { AgentArtifactPlatform } from \"./types.ts\";\nconst COMPAT_PROVIDER = \"niceeval-compat\";\nconst API_KEY_ENV = \"NICEEVAL_OMP_API_KEY\";\nconst OMP_EVIDENCE_COVERAGE: EvidenceCoverage = {\n events: { status: \"complete\" },\n actions: { status: \"complete\" },\n messages: { status: \"complete\" },\n usage: { status: \"complete\" },\n status: { status: \"complete\" },\n data: { status: \"unavailable\", reason: \"OMP print mode does not expose a separate Turn.data value.\" },\n};\nexport interface OmpConfig {\n /** OpenAI-compatible API key. Defaults to OMP_API_KEY, then OPENAI_API_KEY. */\n apiKey?: string;\n /** OpenAI-compatible endpoint. Defaults to OMP_BASE_URL, then OPENAI_BASE_URL. */\n baseUrl?: string;\n /** Exact npm version of `@oh-my-pi/pi-coding-agent`. */\n version?: string;\n /** Exact Bun runtime version used by the fallback installer. */\n bunVersion?: string;\n}\nfunction resolveApiKey(config?: OmpConfig): string {\n return config?.apiKey ?? getEnv(\"OMP_API_KEY\") ?? requireEnv(\"OPENAI_API_KEY\");\n}\nfunction resolveBaseUrl(config?: OmpConfig): string | undefined {\n return config?.baseUrl ?? getEnv(\"OMP_BASE_URL\") ?? getEnv(\"OPENAI_BASE_URL\");\n}\nfunction bunPlatformPackage(version: string, platform: AgentArtifactPlatform): {\n spec: string;\n binPath: string;\n} | undefined {\n if (platform.os === \"linux\") {\n const arch = platform.arch === \"arm64\" ? \"aarch64\" : platform.arch;\n if (arch !== \"x64\" && arch !== \"aarch64\")\n return undefined;\n const musl = platform.libc === \"musl\" ? \"-musl\" : \"\";\n return { spec: `@oven/bun-linux-${arch}${musl}@${version}`, binPath: \"bin/bun\" };\n }\n if (platform.os === \"darwin\") {\n const arch = platform.arch === \"arm64\" ? \"aarch64\" : platform.arch;\n if (arch !== \"x64\" && arch !== \"aarch64\")\n return undefined;\n return { spec: `@oven/bun-darwin-${arch}@${version}`, binPath: \"bin/bun\" };\n }\n return undefined;\n}\nfunction parseJsonl(raw: string): PiAgentEventLike[] {\n return raw.split(/\\r?\\n/).filter((line) => line.trim()).map((line, index) => {\n let value: unknown;\n try {\n value = JSON.parse(line);\n }\n catch (cause) {\n throw new Error(`OMP emitted invalid JSONL at line ${index + 1}`, { cause });\n }\n if (typeof value !== \"object\" || value === null || typeof (value as {\n type?: unknown;\n }).type !== \"string\") {\n throw new Error(`OMP emitted an invalid event at line ${index + 1}`);\n }\n return value as PiAgentEventLike;\n });\n}\nfunction enrichOmpEvent(event: StreamEvent): StreamEvent {\n if (event.type !== \"operation.started\" || event.operation.kind !== \"tool\")\n return event;\n const tool = normalizeToolName(event.operation.name);\n return {\n ...event,\n operation: {\n ...event.operation,\n tool,\n command: tool === \"shell\"\n ? opaqueCommandProjection(\"unsupported-protocol\")\n : notCommandProjection(),\n },\n };\n}\n/** Oh My Pi sandbox adapter backed by `omp --print --mode json`. */\n// @concord-code ne-adapter-omp-agent\n// @concord-implements docs/feature/adapters/README.md\n// @concord-implements docs/feature/adapters/sdk/omp/README.md\nexport function ompAgent(config?: OmpConfig): Agent {\n const version = config?.version ?? DEFAULT_OMP_CLI_VERSION;\n const bunVersion = config?.bunVersion ?? DEFAULT_BUN_VERSION;\n const ompInstall = createNpmCliInstaller({\n identity: { agent: \"omp\", version, revision: String(AGENT_BASELINE_RECIPE_REVISION.omp) },\n packageName: \"@oh-my-pi/pi-coding-agent\",\n bin: \"omp\",\n });\n const bunInstall = createNpmCliInstaller({\n identity: { agent: \"bun\", version: bunVersion, revision: \"1\" },\n packageName: \"bun\",\n bin: \"bun\",\n platformPackage: (platform) => bunPlatformPackage(bunVersion, platform),\n });\n const configDirs = new Map<string, string>();\n return makeSandboxAgent({\n name: \"omp\",\n evidenceCoverage: OMP_EVIDENCE_COVERAGE,\n ensure: [bunInstall.ensure, ompInstall.ensure],\n installers: [bunInstall.installer, ompInstall.installer],\n setup: (sb, ctx) => Effect.tryPromise({\n try: async () => {\n const homeResult = await sb.runShell('test -n \"$HOME\" && printf \"%s\" \"$HOME\"');\n const home = homeResult.stdout.trim();\n if (homeResult.exitCode !== 0 || !home.startsWith(\"/\")) {\n throw new Error(\"OMP setup requires an absolute sandbox HOME directory\");\n }\n const dir = `${home}/.niceeval-omp`;\n configDirs.set(sb.sandboxId, dir);\n const baseUrl = resolveBaseUrl(config);\n const model = ctx.model ?? \"deepseek-v4-flash\";\n const models = {\n providers: {\n [COMPAT_PROVIDER]: {\n ...(baseUrl ? { baseUrl } : {}),\n api: \"openai-completions\",\n apiKey: API_KEY_ENV,\n models: [{ id: model, name: model, contextWindow: 1000000, maxTokens: 64000 }],\n },\n },\n };\n await shared.writeFile(sb, `${dir}/models.yml`, JSON.stringify(models, null, 2));\n },\n catch: (cause) => cause,\n }),\n send: (input, ctx) => Effect.gen(function* () {\n const ompBin = yield* resolveAgentBinEffect(ctx.sandbox, \"omp\");\n return yield* Effect.tryPromise({\n try: async (signal) => {\n const apiKey = resolveApiKey(config);\n const dir = configDirs.get(ctx.sandbox.sandboxId);\n if (!dir)\n throw new Error(\"OMP setup state is unavailable\");\n const model = ctx.model ?? \"deepseek-v4-flash\";\n const env: globalThis.Record<string, string> = {\n [API_KEY_ENV]: apiKey,\n PI_CODING_AGENT_DIR: dir,\n ...ctx.telemetry?.env,\n };\n const args = [\n \"--print\",\n \"--mode\", \"json\",\n \"--model\", `${COMPAT_PROVIDER}/${model}`,\n \"--approval-mode\", \"yolo\",\n \"--no-pty\",\n \"--no-title\",\n input.text,\n ];\n const res = await ctx.sandbox.runCommand(ompBin, args, {\n env,\n sensitiveValues: [apiKey],\n stream: true,\n signal,\n });\n let nativeEvents: PiAgentEventLike[];\n try {\n nativeEvents = parseJsonl(res.stdout);\n }\n catch (cause) {\n throw makeSendFailure({\n acceptance: \"unknown\",\n message: cause instanceof Error ? cause.message : \"OMP transcript could not be parsed\",\n process: res,\n });\n }\n const stream = createPiAgentEventStream();\n const events: StreamEvent[] = nativeEvents.flatMap((event) => stream.add(event)).map(enrichOmpEvent);\n const terminal = nativeEvents.filter((event) => event.type === \"agent_end\" &&\n (event as {\n isTerminal?: unknown;\n }).isTerminal !== false &&\n Array.isArray((event as {\n messages?: unknown;\n }).messages));\n if (res.exitCode !== 0 || terminal.length !== 1) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: res.exitCode !== 0\n ? shared.diagnoseFailure(res, events, res.stdout)\n : `OMP produced ${terminal.length} valid terminal agent_end events; expected exactly one.`,\n events,\n usage: stream.usage,\n process: res,\n });\n }\n return {\n events,\n usage: stream.usage,\n status: stream.failed ? \"failed\" as const : \"completed\" as const,\n };\n },\n catch: (cause) => cause,\n });\n }),\n });\n}\nexport default ompAgent;\n"]}
@@ -74,6 +74,9 @@ function chatCompletionUsage(usage) {
74
74
  * Chat Completions 形状的响应 → `Turn`。零映射:`res.choices[0].message` 的
75
75
  * `tool_calls` / `content` 直接变成 `operation.started` / `message`,`usage` 顺手带上。
76
76
  */
77
+ // @concord-code ne-adapter-openai-chat-turn
78
+ // @concord-implements docs/feature/adapters/library/streaming.md
79
+ // @concord-implements docs/feature/adapters/sdk/openai-compat/README.md
77
80
  function turnFromChatCompletion(res) {
78
81
  const message = res.choices[0]?.message;
79
82
  const events = [];
@@ -132,6 +135,9 @@ function responsesUsage(usage) {
132
135
  * Responses 形状的响应 → `Turn`。零映射:`res.output` 逐项翻译——
133
136
  * `message`(`content` 里的 `output_text`)变成 `message`,`function_call` 变成 `operation.started`。
134
137
  */
138
+ // @concord-code ne-adapter-openai-responses-turn
139
+ // @concord-implements docs/feature/adapters/library/streaming.md
140
+ // @concord-implements docs/feature/adapters/sdk/openai-compat/README.md
135
141
  function turnFromResponses(res) {
136
142
  const events = [];
137
143
  for (const item of res.output ?? []) {
@@ -1 +1 @@
1
- {"version":3,"file":"openai-compat.js","sourceRoot":"","sources":["openai-compat.ts"],"names":[],"mappings":"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","sourcesContent":["// OpenAI 两种响应形状(Chat Completions / Responses)的官方转换器 —— 写 send 指南「零映射」\n// 表格里的 turnFromChatCompletion(res) / turnFromResponses(res)。和 turnFromAiSdk 同一先例:结构化\n// *Like 类型,不依赖 openai 包,兼容任何声明自己走这两种协议形状的服务(不止 OpenAI 官方)。\n//\n// 两种形状对负断言的可信度不同:Chat Completions 可能只给最终消息,Responses.output\n// 则完整列出本轮 function_call。下列六通道 EvidenceCoverage 常量把差异交给 core 的\n// 三值逻辑;转换器在单轮缺 usage 时再据实降级该通道。\nimport type { EvidenceCoverage, JsonValue, StreamEvent, Turn, Usage } from \"../types.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nconst COMPLETE = Object.freeze({ status: \"complete\" as const });\nconst NO_DATA = Object.freeze({ status: \"unavailable\" as const, reason: \"OpenAI response conversion does not populate Turn.data.\" });\nexport const chatCompletionEvidenceCoverage: EvidenceCoverage = Object.freeze({\n events: Object.freeze({\n status: \"partial\",\n reason: \"Chat Completions may expose only the final response, not a server-side tool loop.\",\n }),\n actions: Object.freeze({\n status: \"partial\",\n reason: \"Chat Completions cannot prove that no hidden server-side tool action occurred.\",\n }),\n messages: COMPLETE,\n usage: COMPLETE,\n status: COMPLETE,\n data: NO_DATA,\n});\nexport const responsesEvidenceCoverage: EvidenceCoverage = Object.freeze({\n events: Object.freeze({\n status: \"partial\",\n reason: \"Unknown Responses output item types are intentionally skipped by the protocol-neutral converter.\",\n }),\n actions: Object.freeze({\n status: \"partial\",\n reason: \"Unknown Responses output item types are intentionally skipped by the protocol-neutral converter.\",\n }),\n messages: COMPLETE,\n usage: COMPLETE,\n status: COMPLETE,\n data: NO_DATA,\n});\nfunction turnCoverage(events: readonly StreamEvent[], usage: Usage | undefined): Turn[\"evidenceCoverage\"] {\n const actionCoverage = unclassifiedToolActionsCoverage(events);\n if (usage)\n return actionCoverage;\n return {\n ...actionCoverage,\n usage: { status: \"unavailable\", reason: \"This response did not include protocol usage.\" },\n };\n}\n/** function tool `arguments` 是 JSON 字符串;解析失败时原样保留,不吞输入。 */\nfunction parseArgs(raw: string | undefined): JsonValue {\n if (!raw)\n return {};\n try {\n return JSON.parse(raw) as JsonValue;\n }\n catch {\n return raw;\n }\n}\n// ───────────────────────── Chat Completions ─────────────────────────\nexport interface ChatCompletionFunctionToolCallLike {\n id: string;\n type: \"function\";\n function: {\n name: string;\n arguments: string;\n };\n}\nexport interface ChatCompletionCustomToolCallLike {\n id: string;\n type: \"custom\";\n custom: {\n name: string;\n input: string;\n };\n}\n/** Extensible fallback; unknown future tool-call variants are ignored. */\nexport interface ChatCompletionUnknownToolCallLike {\n id?: string;\n type: string;\n}\nexport type ChatCompletionToolCallLike = ChatCompletionFunctionToolCallLike | ChatCompletionCustomToolCallLike | ChatCompletionUnknownToolCallLike;\nexport interface ChatCompletionMessageLike {\n role?: string;\n content?: string | null;\n tool_calls?: readonly ChatCompletionToolCallLike[];\n}\nexport interface ChatCompletionUsageLike {\n prompt_tokens?: number;\n completion_tokens?: number;\n prompt_tokens_details?: {\n cached_tokens?: number;\n };\n /** 推理模型(o-series 等)经 Chat Completions 端点也会带回这项,拆自 completion_tokens。 */\n completion_tokens_details?: {\n reasoning_tokens?: number;\n };\n}\nexport interface ChatCompletionLike {\n choices: {\n message: ChatCompletionMessageLike;\n }[];\n usage?: ChatCompletionUsageLike;\n}\nfunction chatCompletionUsage(usage: ChatCompletionUsageLike | undefined): Usage | undefined {\n if (!usage)\n return undefined;\n // prompt_tokens 含缓存命中,cached_tokens 是其子集;落互斥桶前扣掉\n // (docs/feature/adapters/sdk/openai-compat/cost.md)\n const cached = usage.prompt_tokens_details?.cached_tokens ?? 0;\n const u: Usage = {\n inputTokens: Math.max(0, (usage.prompt_tokens ?? 0) - cached),\n outputTokens: usage.completion_tokens ?? 0,\n };\n if (cached)\n u.cacheReadTokens = cached;\n if (usage.completion_tokens_details?.reasoning_tokens)\n u.reasoningTokens = usage.completion_tokens_details.reasoning_tokens;\n return u;\n}\n/**\n * Chat Completions 形状的响应 → `Turn`。零映射:`res.choices[0].message` 的\n * `tool_calls` / `content` 直接变成 `operation.started` / `message`,`usage` 顺手带上。\n */\nexport function turnFromChatCompletion(res: ChatCompletionLike): Turn {\n const message = res.choices[0]?.message;\n const events: StreamEvent[] = [];\n for (const call of message?.tool_calls ?? []) {\n if (call.type === \"function\" && \"function\" in call) {\n events.push({\n type: \"operation.started\",\n operationId: call.id,\n operation: { kind: \"tool\", name: call.function.name, input: parseArgs(call.function.arguments) },\n });\n }\n else if (call.type === \"custom\" && \"custom\" in call) {\n events.push({\n type: \"operation.started\",\n operationId: call.id,\n operation: { kind: \"tool\", name: call.custom.name, input: call.custom.input },\n });\n }\n }\n if (message?.content)\n events.push({ type: \"message\", role: \"assistant\", text: message.content });\n const usage = chatCompletionUsage(res.usage);\n const evidenceCoverage = turnCoverage(events, usage);\n return { events, status: \"completed\", usage, ...(evidenceCoverage === undefined ? {} : { evidenceCoverage }) };\n}\n// ───────────────────────── Responses ─────────────────────────\nexport interface ResponseOutputTextLike {\n type: \"output_text\";\n text: string;\n}\nexport interface ResponseMessageItemLike {\n type: \"message\";\n content?: readonly unknown[];\n}\nexport interface ResponseFunctionCallItemLike {\n type: \"function_call\";\n call_id: string;\n name: string;\n arguments: string;\n}\nexport type ResponseOutputItemLike = ResponseMessageItemLike | ResponseFunctionCallItemLike;\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction isMessageItem(item: unknown): item is ResponseMessageItemLike {\n return isRecord(item) && item.type === \"message\";\n}\nfunction isFunctionCallItem(item: unknown): item is ResponseFunctionCallItemLike {\n return (isRecord(item) &&\n item.type === \"function_call\" &&\n typeof item.call_id === \"string\" &&\n typeof item.name === \"string\" &&\n typeof item.arguments === \"string\");\n}\nexport interface ResponseUsageLike {\n input_tokens?: number;\n output_tokens?: number;\n input_tokens_details?: {\n cached_tokens?: number;\n };\n /** 推理模型经 Responses 端点带回的思考 token 拆分,拆自 output_tokens。 */\n output_tokens_details?: {\n reasoning_tokens?: number;\n };\n}\nexport interface ResponseLike {\n /** Full official Responses output union; recognized items are narrowed at runtime. */\n output: readonly unknown[];\n usage?: ResponseUsageLike;\n}\nfunction responsesUsage(usage: ResponseUsageLike | undefined): Usage | undefined {\n if (!usage)\n return undefined;\n // input_tokens 含缓存命中,cached_tokens 是其子集;落互斥桶前扣掉\n // (docs/feature/adapters/sdk/openai-compat/cost.md)\n const cached = usage.input_tokens_details?.cached_tokens ?? 0;\n const u: Usage = {\n inputTokens: Math.max(0, (usage.input_tokens ?? 0) - cached),\n outputTokens: usage.output_tokens ?? 0,\n };\n if (cached)\n u.cacheReadTokens = cached;\n if (usage.output_tokens_details?.reasoning_tokens)\n u.reasoningTokens = usage.output_tokens_details.reasoning_tokens;\n return u;\n}\n/**\n * Responses 形状的响应 → `Turn`。零映射:`res.output` 逐项翻译——\n * `message`(`content` 里的 `output_text`)变成 `message`,`function_call` 变成 `operation.started`。\n */\nexport function turnFromResponses(res: ResponseLike): Turn {\n const events: StreamEvent[] = [];\n for (const item of res.output ?? []) {\n if (isMessageItem(item)) {\n const text = (item.content ?? [])\n .filter((content): content is ResponseOutputTextLike => isRecord(content) && content.type === \"output_text\" && typeof content.text === \"string\")\n .map((c) => c.text)\n .join(\"\");\n if (text)\n events.push({ type: \"message\", role: \"assistant\", text });\n }\n else if (isFunctionCallItem(item)) {\n events.push({\n type: \"operation.started\",\n operationId: item.call_id,\n operation: { kind: \"tool\", name: item.name, input: parseArgs(item.arguments) },\n });\n }\n }\n const usage = responsesUsage(res.usage);\n const evidenceCoverage = turnCoverage(events, usage);\n return { events, status: \"completed\", usage, ...(evidenceCoverage === undefined ? {} : { evidenceCoverage }) };\n}\n"]}
1
+ {"version":3,"file":"openai-compat.js","sourceRoot":"","sources":["openai-compat.ts"],"names":[],"mappings":";;;AA+HA,wDAwBC;AAqED,8CAsBC;AA1OD,yEAAgF;AAChF,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,UAAmB,EAAE,CAAC,CAAC;AAChE,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,aAAsB,EAAE,MAAM,EAAE,yDAAyD,EAAE,CAAC,CAAC;AACxH,QAAA,8BAA8B,GAAqB,MAAM,CAAC,MAAM,CAAC;IAC1E,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;QAClB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,mFAAmF;KAC9F,CAAC;IACF,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,gFAAgF;KAC3F,CAAC;IACF,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,OAAO;CAChB,CAAC,CAAC;AACU,QAAA,yBAAyB,GAAqB,MAAM,CAAC,MAAM,CAAC;IACrE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;QAClB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,kGAAkG;KAC7G,CAAC;IACF,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,SAAS;QACjB,MAAM,EAAE,kGAAkG;KAC7G,CAAC;IACF,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,QAAQ;IAChB,IAAI,EAAE,OAAO;CAChB,CAAC,CAAC;AACH,SAAS,YAAY,CAAC,MAA8B,EAAE,KAAwB;IAC1E,MAAM,cAAc,GAAG,IAAA,uDAA+B,EAAC,MAAM,CAAC,CAAC;IAC/D,IAAI,KAAK;QACL,OAAO,cAAc,CAAC;IAC1B,OAAO;QACH,GAAG,cAAc;QACjB,KAAK,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,+CAA+C,EAAE;KAC5F,CAAC;AACN,CAAC;AACD,2DAA2D;AAC3D,SAAS,SAAS,CAAC,GAAuB;IACtC,IAAI,CAAC,GAAG;QACJ,OAAO,EAAE,CAAC;IACd,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAC;IACxC,CAAC;IACD,MAAM,CAAC;QACH,OAAO,GAAG,CAAC;IACf,CAAC;AACL,CAAC;AA8CD,SAAS,mBAAmB,CAAC,KAA0C;IACnE,IAAI,CAAC,KAAK;QACN,OAAO,SAAS,CAAC;IACrB,iDAAiD;IACjD,oDAAoD;IACpD,MAAM,MAAM,GAAG,KAAK,CAAC,qBAAqB,EAAE,aAAa,IAAI,CAAC,CAAC;IAC/D,MAAM,CAAC,GAAU;QACb,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;QAC7D,YAAY,EAAE,KAAK,CAAC,iBAAiB,IAAI,CAAC;KAC7C,CAAC;IACF,IAAI,MAAM;QACN,CAAC,CAAC,eAAe,GAAG,MAAM,CAAC;IAC/B,IAAI,KAAK,CAAC,yBAAyB,EAAE,gBAAgB;QACjD,CAAC,CAAC,eAAe,GAAG,KAAK,CAAC,yBAAyB,CAAC,gBAAgB,CAAC;IACzE,OAAO,CAAC,CAAC;AACb,CAAC;AACD;;;GAGG;AACH,4CAA4C;AAC5C,iEAAiE;AACjE,wEAAwE;AACxE,SAAgB,sBAAsB,CAAC,GAAuB;IAC1D,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC;IACxC,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,UAAU,IAAI,EAAE,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,IAAI,KAAK,UAAU,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EAAE,IAAI,CAAC,EAAE;gBACpB,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;aACnG,CAAC,CAAC;QACP,CAAC;aACI,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EAAE,IAAI,CAAC,EAAE;gBACpB,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;aAChF,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IACD,IAAI,OAAO,EAAE,OAAO;QAChB,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC/E,MAAM,KAAK,GAAG,mBAAmB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACrD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;AACnH,CAAC;AAiBD,SAAS,QAAQ,CAAC,KAAc;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC;AACD,SAAS,aAAa,CAAC,IAAa;IAChC,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC;AACrD,CAAC;AACD,SAAS,kBAAkB,CAAC,IAAa;IACrC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;QAClB,IAAI,CAAC,IAAI,KAAK,eAAe;QAC7B,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ;QAChC,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ;QAC7B,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAiBD,SAAS,cAAc,CAAC,KAAoC;IACxD,IAAI,CAAC,KAAK;QACN,OAAO,SAAS,CAAC;IACrB,gDAAgD;IAChD,oDAAoD;IACpD,MAAM,MAAM,GAAG,KAAK,CAAC,oBAAoB,EAAE,aAAa,IAAI,CAAC,CAAC;IAC9D,MAAM,CAAC,GAAU;QACb,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC;QAC5D,YAAY,EAAE,KAAK,CAAC,aAAa,IAAI,CAAC;KACzC,CAAC;IACF,IAAI,MAAM;QACN,CAAC,CAAC,eAAe,GAAG,MAAM,CAAC;IAC/B,IAAI,KAAK,CAAC,qBAAqB,EAAE,gBAAgB;QAC7C,CAAC,CAAC,eAAe,GAAG,KAAK,CAAC,qBAAqB,CAAC,gBAAgB,CAAC;IACrE,OAAO,CAAC,CAAC;AACb,CAAC;AACD;;;GAGG;AACH,iDAAiD;AACjD,iEAAiE;AACjE,wEAAwE;AACxE,SAAgB,iBAAiB,CAAC,GAAiB;IAC/C,MAAM,MAAM,GAAkB,EAAE,CAAC;IACjC,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QAClC,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;iBAC5B,MAAM,CAAC,CAAC,OAAO,EAAqC,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC;iBAC/I,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;iBAClB,IAAI,CAAC,EAAE,CAAC,CAAC;YACd,IAAI,IAAI;gBACJ,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;aACI,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC;gBACR,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EAAE,IAAI,CAAC,OAAO;gBACzB,SAAS,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE;aACjF,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IACD,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,gBAAgB,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACrD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,CAAC;AACnH,CAAC","sourcesContent":["// OpenAI 两种响应形状(Chat Completions / Responses)的官方转换器 —— 写 send 指南「零映射」\n// 表格里的 turnFromChatCompletion(res) / turnFromResponses(res)。和 turnFromAiSdk 同一先例:结构化\n// *Like 类型,不依赖 openai 包,兼容任何声明自己走这两种协议形状的服务(不止 OpenAI 官方)。\n//\n// 两种形状对负断言的可信度不同:Chat Completions 可能只给最终消息,Responses.output\n// 则完整列出本轮 function_call。下列六通道 EvidenceCoverage 常量把差异交给 core 的\n// 三值逻辑;转换器在单轮缺 usage 时再据实降级该通道。\nimport type { EvidenceCoverage, JsonValue, StreamEvent, Turn, Usage } from \"../types.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nconst COMPLETE = Object.freeze({ status: \"complete\" as const });\nconst NO_DATA = Object.freeze({ status: \"unavailable\" as const, reason: \"OpenAI response conversion does not populate Turn.data.\" });\nexport const chatCompletionEvidenceCoverage: EvidenceCoverage = Object.freeze({\n events: Object.freeze({\n status: \"partial\",\n reason: \"Chat Completions may expose only the final response, not a server-side tool loop.\",\n }),\n actions: Object.freeze({\n status: \"partial\",\n reason: \"Chat Completions cannot prove that no hidden server-side tool action occurred.\",\n }),\n messages: COMPLETE,\n usage: COMPLETE,\n status: COMPLETE,\n data: NO_DATA,\n});\nexport const responsesEvidenceCoverage: EvidenceCoverage = Object.freeze({\n events: Object.freeze({\n status: \"partial\",\n reason: \"Unknown Responses output item types are intentionally skipped by the protocol-neutral converter.\",\n }),\n actions: Object.freeze({\n status: \"partial\",\n reason: \"Unknown Responses output item types are intentionally skipped by the protocol-neutral converter.\",\n }),\n messages: COMPLETE,\n usage: COMPLETE,\n status: COMPLETE,\n data: NO_DATA,\n});\nfunction turnCoverage(events: readonly StreamEvent[], usage: Usage | undefined): Turn[\"evidenceCoverage\"] {\n const actionCoverage = unclassifiedToolActionsCoverage(events);\n if (usage)\n return actionCoverage;\n return {\n ...actionCoverage,\n usage: { status: \"unavailable\", reason: \"This response did not include protocol usage.\" },\n };\n}\n/** function tool `arguments` 是 JSON 字符串;解析失败时原样保留,不吞输入。 */\nfunction parseArgs(raw: string | undefined): JsonValue {\n if (!raw)\n return {};\n try {\n return JSON.parse(raw) as JsonValue;\n }\n catch {\n return raw;\n }\n}\n// ───────────────────────── Chat Completions ─────────────────────────\nexport interface ChatCompletionFunctionToolCallLike {\n id: string;\n type: \"function\";\n function: {\n name: string;\n arguments: string;\n };\n}\nexport interface ChatCompletionCustomToolCallLike {\n id: string;\n type: \"custom\";\n custom: {\n name: string;\n input: string;\n };\n}\n/** Extensible fallback; unknown future tool-call variants are ignored. */\nexport interface ChatCompletionUnknownToolCallLike {\n id?: string;\n type: string;\n}\nexport type ChatCompletionToolCallLike = ChatCompletionFunctionToolCallLike | ChatCompletionCustomToolCallLike | ChatCompletionUnknownToolCallLike;\nexport interface ChatCompletionMessageLike {\n role?: string;\n content?: string | null;\n tool_calls?: readonly ChatCompletionToolCallLike[];\n}\nexport interface ChatCompletionUsageLike {\n prompt_tokens?: number;\n completion_tokens?: number;\n prompt_tokens_details?: {\n cached_tokens?: number;\n };\n /** 推理模型(o-series 等)经 Chat Completions 端点也会带回这项,拆自 completion_tokens。 */\n completion_tokens_details?: {\n reasoning_tokens?: number;\n };\n}\nexport interface ChatCompletionLike {\n choices: {\n message: ChatCompletionMessageLike;\n }[];\n usage?: ChatCompletionUsageLike;\n}\nfunction chatCompletionUsage(usage: ChatCompletionUsageLike | undefined): Usage | undefined {\n if (!usage)\n return undefined;\n // prompt_tokens 含缓存命中,cached_tokens 是其子集;落互斥桶前扣掉\n // (docs/feature/adapters/sdk/openai-compat/cost.md)\n const cached = usage.prompt_tokens_details?.cached_tokens ?? 0;\n const u: Usage = {\n inputTokens: Math.max(0, (usage.prompt_tokens ?? 0) - cached),\n outputTokens: usage.completion_tokens ?? 0,\n };\n if (cached)\n u.cacheReadTokens = cached;\n if (usage.completion_tokens_details?.reasoning_tokens)\n u.reasoningTokens = usage.completion_tokens_details.reasoning_tokens;\n return u;\n}\n/**\n * Chat Completions 形状的响应 → `Turn`。零映射:`res.choices[0].message` 的\n * `tool_calls` / `content` 直接变成 `operation.started` / `message`,`usage` 顺手带上。\n */\n// @concord-code ne-adapter-openai-chat-turn\n// @concord-implements docs/feature/adapters/library/streaming.md\n// @concord-implements docs/feature/adapters/sdk/openai-compat/README.md\nexport function turnFromChatCompletion(res: ChatCompletionLike): Turn {\n const message = res.choices[0]?.message;\n const events: StreamEvent[] = [];\n for (const call of message?.tool_calls ?? []) {\n if (call.type === \"function\" && \"function\" in call) {\n events.push({\n type: \"operation.started\",\n operationId: call.id,\n operation: { kind: \"tool\", name: call.function.name, input: parseArgs(call.function.arguments) },\n });\n }\n else if (call.type === \"custom\" && \"custom\" in call) {\n events.push({\n type: \"operation.started\",\n operationId: call.id,\n operation: { kind: \"tool\", name: call.custom.name, input: call.custom.input },\n });\n }\n }\n if (message?.content)\n events.push({ type: \"message\", role: \"assistant\", text: message.content });\n const usage = chatCompletionUsage(res.usage);\n const evidenceCoverage = turnCoverage(events, usage);\n return { events, status: \"completed\", usage, ...(evidenceCoverage === undefined ? {} : { evidenceCoverage }) };\n}\n// ───────────────────────── Responses ─────────────────────────\nexport interface ResponseOutputTextLike {\n type: \"output_text\";\n text: string;\n}\nexport interface ResponseMessageItemLike {\n type: \"message\";\n content?: readonly unknown[];\n}\nexport interface ResponseFunctionCallItemLike {\n type: \"function_call\";\n call_id: string;\n name: string;\n arguments: string;\n}\nexport type ResponseOutputItemLike = ResponseMessageItemLike | ResponseFunctionCallItemLike;\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\nfunction isMessageItem(item: unknown): item is ResponseMessageItemLike {\n return isRecord(item) && item.type === \"message\";\n}\nfunction isFunctionCallItem(item: unknown): item is ResponseFunctionCallItemLike {\n return (isRecord(item) &&\n item.type === \"function_call\" &&\n typeof item.call_id === \"string\" &&\n typeof item.name === \"string\" &&\n typeof item.arguments === \"string\");\n}\nexport interface ResponseUsageLike {\n input_tokens?: number;\n output_tokens?: number;\n input_tokens_details?: {\n cached_tokens?: number;\n };\n /** 推理模型经 Responses 端点带回的思考 token 拆分,拆自 output_tokens。 */\n output_tokens_details?: {\n reasoning_tokens?: number;\n };\n}\nexport interface ResponseLike {\n /** Full official Responses output union; recognized items are narrowed at runtime. */\n output: readonly unknown[];\n usage?: ResponseUsageLike;\n}\nfunction responsesUsage(usage: ResponseUsageLike | undefined): Usage | undefined {\n if (!usage)\n return undefined;\n // input_tokens 含缓存命中,cached_tokens 是其子集;落互斥桶前扣掉\n // (docs/feature/adapters/sdk/openai-compat/cost.md)\n const cached = usage.input_tokens_details?.cached_tokens ?? 0;\n const u: Usage = {\n inputTokens: Math.max(0, (usage.input_tokens ?? 0) - cached),\n outputTokens: usage.output_tokens ?? 0,\n };\n if (cached)\n u.cacheReadTokens = cached;\n if (usage.output_tokens_details?.reasoning_tokens)\n u.reasoningTokens = usage.output_tokens_details.reasoning_tokens;\n return u;\n}\n/**\n * Responses 形状的响应 → `Turn`。零映射:`res.output` 逐项翻译——\n * `message`(`content` 里的 `output_text`)变成 `message`,`function_call` 变成 `operation.started`。\n */\n// @concord-code ne-adapter-openai-responses-turn\n// @concord-implements docs/feature/adapters/library/streaming.md\n// @concord-implements docs/feature/adapters/sdk/openai-compat/README.md\nexport function turnFromResponses(res: ResponseLike): Turn {\n const events: StreamEvent[] = [];\n for (const item of res.output ?? []) {\n if (isMessageItem(item)) {\n const text = (item.content ?? [])\n .filter((content): content is ResponseOutputTextLike => isRecord(content) && content.type === \"output_text\" && typeof content.text === \"string\")\n .map((c) => c.text)\n .join(\"\");\n if (text)\n events.push({ type: \"message\", role: \"assistant\", text });\n }\n else if (isFunctionCallItem(item)) {\n events.push({\n type: \"operation.started\",\n operationId: item.call_id,\n operation: { kind: \"tool\", name: item.name, input: parseArgs(item.arguments) },\n });\n }\n }\n const usage = responsesUsage(res.usage);\n const evidenceCoverage = turnCoverage(events, usage);\n return { events, status: \"completed\", usage, ...(evidenceCoverage === undefined ? {} : { evidenceCoverage }) };\n}\n"]}
@@ -89,6 +89,9 @@ function resolveModelFlag(model, hasCompatBase) {
89
89
  * 默认主会话——否则相邻 attempt 会静默共享历史),后续轮用 `ctx.session.id` resume;
90
90
  * `t.newSession()` 后的新会话线自然拿到新 id,session 之间互相隔离。
91
91
  */
92
+ // @concord-code ne-adapter-openclaw-agent
93
+ // @concord-implements docs/feature/adapters/README.md
94
+ // @concord-implements docs/feature/adapters/sdk/openclaw/README.md
92
95
  function openClawAgent(config) {
93
96
  const version = config?.version ?? coding_cli_versions_ts_1.DEFAULT_OPENCLAW_CLI_VERSION;
94
97
  const plugins = (0, exact_npm_plugins_ts_1.normalizeExactNpmPlugins)(config?.plugins, "openClawAgent plugins");
@@ -1 +1 @@
1
- {"version":3,"file":"openclaw.js","sourceRoot":"","sources":["openclaw.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeSandboxAgent } from \"../define.ts\";\nimport { Effect } from \"effect\";\nimport { requireEnv, getEnv } from \"../util.ts\";\nimport { shared } from \"./shared.ts\";\nimport { appendProjectInstruction, installSkills, installedSkillNames, skillDiscoveryInstruction, } from \"./skills.ts\";\nimport { mapGenericSpans } from \"../o11y/otlp/canonical.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport { parseOpenClawTranscript, parseOpenClawRunJson } from \"../o11y/parsers/openclaw.ts\";\nimport { completeEvidenceCoverage } from \"../assertions/coverage.ts\";\nimport { DEFAULT_OPENCLAW_CLI_VERSION, AGENT_BASELINE_RECIPE_REVISION } from \"./coding-cli-versions.ts\";\nimport { createNpmCliInstaller, resolveAgentBinEffect } from \"./npm-staged.ts\";\nimport { randomUUID } from \"node:crypto\";\nimport type { Agent, AgentSetupManifest, SkillSpec, StreamEvent, TurnEvidenceCoverage } from \"../types.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\nimport { shell } from \"../sandbox/commands.ts\";\nimport { shellQuote } from \"../sandbox/shell.ts\";\nimport type { AgentEnsure, AgentInstaller } from \"./types.ts\";\nimport { exactNpmPluginRevision, normalizeExactNpmPlugins, type ExactNpmPlugin, } from \"./exact-npm-plugins.ts\";\n// ───────────────────────────────────────────────────────────────────────────\n// OpenClaw 的 agent adapter(沙箱型)。\n//\n// 连接方式:在沙箱里 spawn `openclaw agent --local --json`(嵌入式 agent 循环,不依赖\n// 长驻 gateway),读回结果封包 + session transcript → 标准事件流。方言解析全部住\n// src/o11y/parsers/openclaw.ts,不进 core(契约见 docs/feature/adapters/sdk/openclaw/README.md)。\n//\n// 行为轨优先级(collection.md):session transcript(完整工具轨迹)优先;transcript 拿不到\n// 时只保留 `--json` 封包的最终回复,不从最终文本猜工具行为——此时负断言不可信,send 会\n// 经 ctx.log 明确记录这个限制。\n// ───────────────────────────────────────────────────────────────────────────\n/** OpenClaw 的 skill 目录(`skills` 生态的「通用」目录);发现靠 AGENTS.md 指引,不依赖原生扫描。 */\nconst SKILL_DIR = \".agents/skills\";\n/** 自定义 OpenAI 兼容网关在 openclaw.json 里的 provider id。 */\nconst COMPAT_PROVIDER = \"compat\";\nexport interface OpenClawConfig {\n /** 模型 API key。省略时读 OPENCLAW_API_KEY,再回落 ANTHROPIC_API_KEY。 */\n apiKey?: string;\n /** OpenAI 兼容端点。省略时读 OPENCLAW_BASE_URL。 */\n baseUrl?: string;\n /** 固定安装的 openclaw npm 版本(如 \"1.2.3\");省略时用内置默认。 */\n version?: string;\n /**\n * 装进沙箱的 Skill(本地目录/文件,或 repo + 可钉 ref + 可选启用集)。\n * 落在 `.agents/skills/<name>/`,并写一段发现指引进 AGENTS.md。\n */\n skills?: SkillSpec[];\n /** Native OpenClaw plugins as exact npm package@version declarations. */\n plugins?: readonly string[];\n}\nfunction openClawPluginLayer(cliVersion: string, plugins: readonly ExactNpmPlugin[]): {\n ensure: AgentEnsure;\n installer: AgentInstaller;\n} {\n const identity = {\n agent: \"openclaw-plugins\",\n version: cliVersion,\n revision: exactNpmPluginRevision(plugins),\n };\n const verifyFiles = `const fs=require(\"node:fs\"),path=require(\"node:path\");` +\n `const expected=${JSON.stringify(plugins)},base=path.join(process.env.HOME,\".openclaw\");` +\n `const projects=path.join(base,\"npm/projects\"),found=[];` +\n `for(const dir of fs.readdirSync(projects)){const root=path.join(projects,dir),p=JSON.parse(fs.readFileSync(path.join(root,\"package.json\"),\"utf8\"));` +\n `for(const [name,version] of Object.entries(p.dependencies||{})){const pkg=JSON.parse(fs.readFileSync(path.join(root,\"node_modules\",name,\"package.json\"),\"utf8\"));` +\n `const manifest=JSON.parse(fs.readFileSync(path.join(root,\"node_modules\",name,\"openclaw.plugin.json\"),\"utf8\"));found.push({name,version,pkgVersion:pkg.version,id:manifest.id});}}` +\n `if(found.length!==expected.length)process.exit(1);` +\n `const config=JSON.parse(fs.readFileSync(path.join(base,\"openclaw.json\"),\"utf8\"));` +\n `const ordered=expected.map(e=>found.find(x=>x.name===e.name&&x.version===e.version));` +\n `for(const x of ordered){if(!x||x.pkgVersion!==x.version||!config.plugins?.entries?.[x.id]?.enabled||!/^[A-Za-z0-9._-]+$/.test(x.id))process.exit(1);}`;\n return {\n ensure: { identity, probe: shell(`node -e ${shellQuote(verifyFiles)}`) },\n installer: {\n identity,\n installMode: \"sandbox-network\",\n install: async (sandbox, context) => {\n const installs = plugins\n .map((plugin) => `openclaw plugins install --pin ${shellQuote(plugin.spec)}`)\n .join(\"\\n\");\n const script = `set -eu\nids=$(openclaw plugins list --json | node -e ${shellQuote(`let s=\"\";process.stdin.on(\"data\",c=>s+=c).on(\"end\",()=>{const x=JSON.parse(s);for(const p of x.plugins||[])if(p.origin===\"global\")console.log(p.id)})`)})\nfor id in $ids; do openclaw plugins uninstall --force \"$id\"; done\n${installs}`;\n await sandbox.runShellOrThrow(script, { signal: context.signal });\n },\n },\n };\n}\nfunction resolveApiKey(config?: OpenClawConfig): string {\n return config?.apiKey ?? getEnv(\"OPENCLAW_API_KEY\") ?? requireEnv(\"ANTHROPIC_API_KEY\");\n}\nfunction resolveBaseUrl(config?: OpenClawConfig): string | undefined {\n return config?.baseUrl ?? getEnv(\"OPENCLAW_BASE_URL\");\n}\n/** experiment.model → `--model`。裸模型名在自定义网关下补成 `compat/<model>`。 */\nfunction resolveModelFlag(model: string | undefined, hasCompatBase: boolean): string | undefined {\n if (!model)\n return undefined;\n if (model.includes(\"/\"))\n return model;\n return hasCompatBase ? `${COMPAT_PROVIDER}/${model}` : model;\n}\n/**\n * OpenClaw 的内置 sandbox Agent 工厂。复用 `defineSandboxAgent`、`shared` 安装工具、\n * `ctx.session` 存取器与 canonical OTel 通用 mapper(`mapGenericSpans`);OpenClaw 方言\n * (transcript / `agent --json` 字段)只住 `src/o11y/parsers/openclaw.ts`,不进 core。\n *\n * 会话契约:首轮显式发一个全新 session id 并 `ctx.session.capture()`(不依赖 OpenClaw 的\n * 默认主会话——否则相邻 attempt 会静默共享历史),后续轮用 `ctx.session.id` resume;\n * `t.newSession()` 后的新会话线自然拿到新 id,session 之间互相隔离。\n */\nexport function openClawAgent(config?: OpenClawConfig): Agent {\n const version = config?.version ?? DEFAULT_OPENCLAW_CLI_VERSION;\n const plugins = normalizeExactNpmPlugins(config?.plugins, \"openClawAgent plugins\");\n const { ensure, installer } = createNpmCliInstaller({\n identity: {\n agent: \"openclaw\",\n version,\n revision: String(AGENT_BASELINE_RECIPE_REVISION.openclaw),\n },\n packageName: \"openclaw\",\n bin: \"openclaw\",\n });\n const pluginLayer = plugins.length === 0 ? undefined : openClawPluginLayer(version, plugins);\n return makeSandboxAgent({\n name: \"openclaw\",\n // e2e 已用真实 CLI 证明 session transcript 能给出工具轨 / 消息 / 用量;\n // 采集失败的单轮仍会在 send 里把 coverage 降成 unavailable/partial。\n evidenceCoverage: completeEvidenceCoverage,\n // OpenClaw 没有专属 span 方言 mapper:原生 span 走 canonical 通用 heuristic。\n // OTel 内容采集关闭时只影响 trace 证据面;行为轨(下面的 transcript 解析)不受影响。\n spanMapper: mapGenericSpans,\n ensure: pluginLayer === undefined ? ensure : [ensure, pluginLayer.ensure],\n installers: pluginLayer === undefined ? [installer] : [installer, pluginLayer.installer],\n tracing: {\n protocol: \"http/protobuf\",\n env: (endpoint) => ({\n OTEL_TRACES_EXPORTER: \"otlp\",\n OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: endpoint,\n OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: \"http/protobuf\",\n }),\n },\n setup: (sb, ctx) => Effect.tryPromise({\n try: async () => {\n const baseUrl = resolveBaseUrl(config);\n if (baseUrl) {\n const apiKey = resolveApiKey(config);\n // OpenAI 兼容网关走自定义 provider + openai-completions;\n // skipBootstrap 跳过首轮身份仪式,否则 agent 会先问 \"Who am I\"。\n // workspace 钉沙箱工作目录,文件工具写到 eval 可见的路径。\n let persistentConfig: globalThis.Record<string, unknown> = {};\n try {\n const existing = await sb.runShell('cat \"$HOME/.openclaw/openclaw.json\"');\n if (existing.exitCode === 0)\n persistentConfig = JSON.parse(existing.stdout);\n }\n catch {\n persistentConfig = {};\n }\n const openclawConfig = {\n ...persistentConfig,\n agents: {\n defaults: {\n skipBootstrap: true,\n workspace: sb.workdir,\n },\n },\n models: {\n mode: \"merge\",\n providers: {\n [COMPAT_PROVIDER]: {\n baseUrl,\n apiKey,\n api: \"openai-completions\",\n models: [\n { id: \"gpt-5.6-luna\", name: \"gpt-5.6-luna\" },\n { id: \"gpt-6-luna\", name: \"gpt-6-luna\" },\n { id: \"gpt-5.4-mini\", name: \"gpt-5.4-mini\" },\n { id: \"gpt-5.4\", name: \"gpt-5.4\" },\n ],\n },\n },\n },\n };\n await shared.writeFile(sb, \"~/.openclaw/openclaw.json\", JSON.stringify(openclawConfig, null, 2), { sensitiveValues: [apiKey] });\n // 预置最小身份文件,避免缺 IDENTITY 时仍触发仪式文案。\n await shared.writeFile(sb, `${sb.workdir}/IDENTITY.md`, \"# Identity\\n\\nName: niceeval\\nEmoji: ✓\\n\");\n await shared.writeFile(sb, `${sb.workdir}/USER.md`, \"# User\\n\\nEval harness operator.\\n\");\n await shared.writeFile(sb, `${sb.workdir}/SOUL.md`, \"# Soul\\n\\nExecute the user's task directly. Do not ask who you are.\\n\");\n }\n const manifest: AgentSetupManifest = { skills: [] };\n if (config?.skills?.length) {\n manifest.skills = await installSkills(sb, config.skills, { dir: SKILL_DIR });\n // 发现指引跟着一起写:不提示 = 白装。\n await appendProjectInstruction(sb, skillDiscoveryInstruction(SKILL_DIR, installedSkillNames(manifest.skills)));\n }\n if (manifest.skills.length) {\n ctx.reportSetup(manifest);\n }\n },\n catch: (cause) => cause,\n }),\n send: (input, ctx) => Effect.gen(function* () {\n const sb = ctx.sandbox;\n const openclawBin = yield* resolveAgentBinEffect(sb, \"openclaw\");\n return yield* Effect.tryPromise({\n try: async (signal) => {\n // 会话契约:新会话线显式发新 session id(隔离);后续轮 resume 记录的 id。\n const sessionId = ctx.session.id ?? `niceeval-${sb.sandboxId}-${randomUUID().slice(0, 8)}`;\n ctx.session.capture(sessionId);\n const baseUrl = resolveBaseUrl(config);\n const args = [\"agent\", \"--local\", \"--session-id\", sessionId, \"--message\", input.text, \"--json\"];\n const model = resolveModelFlag(ctx.model, Boolean(baseUrl));\n if (model)\n args.push(\"--model\", model);\n const apiKey = resolveApiKey(config);\n const env: globalThis.Record<string, string> = {\n OPENCLAW_API_KEY: apiKey,\n ANTHROPIC_API_KEY: apiKey,\n OPENAI_API_KEY: apiKey,\n ...ctx.telemetry?.env,\n };\n if (baseUrl) {\n env.OPENCLAW_BASE_URL = baseUrl;\n env.OPENAI_BASE_URL = baseUrl;\n }\n const res = await sb.runCommand(openclawBin, args, {\n env,\n sensitiveValues: [apiKey],\n stream: true,\n signal,\n });\n const runJson = parseOpenClawRunJson(res.stdout);\n // 封包若带回服务端分配的 session key,后续轮以它为准(capture first-writer-wins,\n // 首轮已用自发 id 落地时不覆盖)。\n ctx.session.capture(runJson.sessionId);\n // 完整工具轨迹的唯一来源:session transcript。\n // 优先读封包给出的 sessionFile(精确);否则在 agents 目录取最新 *.jsonl,\n // 但排除同目录旁路产物 *.trajectory.jsonl(mtime 常更新、却不是消息轨——\n // 误读会导致 events 为空、整轮 coverage 降成 unavailable)。\n let raw: string | undefined;\n if (runJson.sessionFile) {\n try {\n raw = await sb.readText(runJson.sessionFile);\n }\n catch {\n raw = undefined;\n }\n }\n if (raw === undefined) {\n raw = await shared.captureLatestJsonl(sb, \"~/.openclaw/agents\", {\n excludeName: /\\.trajectory\\.jsonl$/i,\n });\n }\n const parsed = parseOpenClawTranscript(raw);\n const events: StreamEvent[] = [...parsed.events];\n // transcript 缺失 / 有解析不了的行:这一轮的工具轨迹不可信,coverage 降级说出来\n // (负断言由此落 unavailable,而不是在空流上假通过),不从最终文本猜工具行为。\n let turnEvidenceCoverage: TurnEvidenceCoverage | undefined;\n if (raw === undefined || parsed.events.length === 0) {\n const reason = \"session transcript unavailable; only the --json final reply was collected\";\n turnEvidenceCoverage = {\n events: { status: \"unavailable\", reason },\n actions: { status: \"unavailable\", reason },\n usage: { status: \"unavailable\", reason },\n };\n ctx.log(\"openclaw transcript unavailable: tool trajectory missing for this turn, negative assertions are unreliable\");\n if (runJson.text)\n events.push({ type: \"message\", role: \"assistant\", text: runJson.text });\n }\n else if (!parsed.parseSuccess) {\n const reason = \"some transcript lines could not be parsed\";\n turnEvidenceCoverage = {\n events: { status: \"partial\", reason },\n actions: { status: \"partial\", reason },\n };\n }\n else {\n turnEvidenceCoverage = unclassifiedToolActionsCoverage(events);\n }\n // 用量:transcript 逐消息累加优先;transcript 没报时用封包摘要,都没有就是空对象。\n const usage = (parsed.usage.inputTokens ?? 0) > 0 || (parsed.usage.outputTokens ?? 0) > 0\n ? parsed.usage\n : (runJson.usage ?? parsed.usage);\n if (res.exitCode !== 0) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: shared.diagnoseFailure(res, parsed.events, raw),\n events,\n usage,\n process: res,\n });\n }\n if (runJson.failed)\n events.push({ type: \"error\", message: shared.diagnoseFailure(res, parsed.events, raw) });\n return {\n events,\n usage,\n status: runJson.failed ? \"failed\" as const : \"completed\" as const,\n ...(turnEvidenceCoverage ? { evidenceCoverage: turnEvidenceCoverage } : {}),\n };\n },\n catch: (cause) => cause,\n });\n }),\n });\n}\nexport default openClawAgent();\n"]}
1
+ {"version":3,"file":"openclaw.js","sourceRoot":"","sources":["openclaw.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeSandboxAgent } from \"../define.ts\";\nimport { Effect } from \"effect\";\nimport { requireEnv, getEnv } from \"../util.ts\";\nimport { shared } from \"./shared.ts\";\nimport { appendProjectInstruction, installSkills, installedSkillNames, skillDiscoveryInstruction, } from \"./skills.ts\";\nimport { mapGenericSpans } from \"../o11y/otlp/canonical.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport { parseOpenClawTranscript, parseOpenClawRunJson } from \"../o11y/parsers/openclaw.ts\";\nimport { completeEvidenceCoverage } from \"../assertions/coverage.ts\";\nimport { DEFAULT_OPENCLAW_CLI_VERSION, AGENT_BASELINE_RECIPE_REVISION } from \"./coding-cli-versions.ts\";\nimport { createNpmCliInstaller, resolveAgentBinEffect } from \"./npm-staged.ts\";\nimport { randomUUID } from \"node:crypto\";\nimport type { Agent, AgentSetupManifest, SkillSpec, StreamEvent, TurnEvidenceCoverage } from \"../types.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\nimport { shell } from \"../sandbox/commands.ts\";\nimport { shellQuote } from \"../sandbox/shell.ts\";\nimport type { AgentEnsure, AgentInstaller } from \"./types.ts\";\nimport { exactNpmPluginRevision, normalizeExactNpmPlugins, type ExactNpmPlugin, } from \"./exact-npm-plugins.ts\";\n// ───────────────────────────────────────────────────────────────────────────\n// OpenClaw 的 agent adapter(沙箱型)。\n//\n// 连接方式:在沙箱里 spawn `openclaw agent --local --json`(嵌入式 agent 循环,不依赖\n// 长驻 gateway),读回结果封包 + session transcript → 标准事件流。方言解析全部住\n// src/o11y/parsers/openclaw.ts,不进 core(契约见 docs/feature/adapters/sdk/openclaw/README.md)。\n//\n// 行为轨优先级(collection.md):session transcript(完整工具轨迹)优先;transcript 拿不到\n// 时只保留 `--json` 封包的最终回复,不从最终文本猜工具行为——此时负断言不可信,send 会\n// 经 ctx.log 明确记录这个限制。\n// ───────────────────────────────────────────────────────────────────────────\n/** OpenClaw 的 skill 目录(`skills` 生态的「通用」目录);发现靠 AGENTS.md 指引,不依赖原生扫描。 */\nconst SKILL_DIR = \".agents/skills\";\n/** 自定义 OpenAI 兼容网关在 openclaw.json 里的 provider id。 */\nconst COMPAT_PROVIDER = \"compat\";\nexport interface OpenClawConfig {\n /** 模型 API key。省略时读 OPENCLAW_API_KEY,再回落 ANTHROPIC_API_KEY。 */\n apiKey?: string;\n /** OpenAI 兼容端点。省略时读 OPENCLAW_BASE_URL。 */\n baseUrl?: string;\n /** 固定安装的 openclaw npm 版本(如 \"1.2.3\");省略时用内置默认。 */\n version?: string;\n /**\n * 装进沙箱的 Skill(本地目录/文件,或 repo + 可钉 ref + 可选启用集)。\n * 落在 `.agents/skills/<name>/`,并写一段发现指引进 AGENTS.md。\n */\n skills?: SkillSpec[];\n /** Native OpenClaw plugins as exact npm package@version declarations. */\n plugins?: readonly string[];\n}\nfunction openClawPluginLayer(cliVersion: string, plugins: readonly ExactNpmPlugin[]): {\n ensure: AgentEnsure;\n installer: AgentInstaller;\n} {\n const identity = {\n agent: \"openclaw-plugins\",\n version: cliVersion,\n revision: exactNpmPluginRevision(plugins),\n };\n const verifyFiles = `const fs=require(\"node:fs\"),path=require(\"node:path\");` +\n `const expected=${JSON.stringify(plugins)},base=path.join(process.env.HOME,\".openclaw\");` +\n `const projects=path.join(base,\"npm/projects\"),found=[];` +\n `for(const dir of fs.readdirSync(projects)){const root=path.join(projects,dir),p=JSON.parse(fs.readFileSync(path.join(root,\"package.json\"),\"utf8\"));` +\n `for(const [name,version] of Object.entries(p.dependencies||{})){const pkg=JSON.parse(fs.readFileSync(path.join(root,\"node_modules\",name,\"package.json\"),\"utf8\"));` +\n `const manifest=JSON.parse(fs.readFileSync(path.join(root,\"node_modules\",name,\"openclaw.plugin.json\"),\"utf8\"));found.push({name,version,pkgVersion:pkg.version,id:manifest.id});}}` +\n `if(found.length!==expected.length)process.exit(1);` +\n `const config=JSON.parse(fs.readFileSync(path.join(base,\"openclaw.json\"),\"utf8\"));` +\n `const ordered=expected.map(e=>found.find(x=>x.name===e.name&&x.version===e.version));` +\n `for(const x of ordered){if(!x||x.pkgVersion!==x.version||!config.plugins?.entries?.[x.id]?.enabled||!/^[A-Za-z0-9._-]+$/.test(x.id))process.exit(1);}`;\n return {\n ensure: { identity, probe: shell(`node -e ${shellQuote(verifyFiles)}`) },\n installer: {\n identity,\n installMode: \"sandbox-network\",\n install: async (sandbox, context) => {\n const installs = plugins\n .map((plugin) => `openclaw plugins install --pin ${shellQuote(plugin.spec)}`)\n .join(\"\\n\");\n const script = `set -eu\nids=$(openclaw plugins list --json | node -e ${shellQuote(`let s=\"\";process.stdin.on(\"data\",c=>s+=c).on(\"end\",()=>{const x=JSON.parse(s);for(const p of x.plugins||[])if(p.origin===\"global\")console.log(p.id)})`)})\nfor id in $ids; do openclaw plugins uninstall --force \"$id\"; done\n${installs}`;\n await sandbox.runShellOrThrow(script, { signal: context.signal });\n },\n },\n };\n}\nfunction resolveApiKey(config?: OpenClawConfig): string {\n return config?.apiKey ?? getEnv(\"OPENCLAW_API_KEY\") ?? requireEnv(\"ANTHROPIC_API_KEY\");\n}\nfunction resolveBaseUrl(config?: OpenClawConfig): string | undefined {\n return config?.baseUrl ?? getEnv(\"OPENCLAW_BASE_URL\");\n}\n/** experiment.model → `--model`。裸模型名在自定义网关下补成 `compat/<model>`。 */\nfunction resolveModelFlag(model: string | undefined, hasCompatBase: boolean): string | undefined {\n if (!model)\n return undefined;\n if (model.includes(\"/\"))\n return model;\n return hasCompatBase ? `${COMPAT_PROVIDER}/${model}` : model;\n}\n/**\n * OpenClaw 的内置 sandbox Agent 工厂。复用 `defineSandboxAgent`、`shared` 安装工具、\n * `ctx.session` 存取器与 canonical OTel 通用 mapper(`mapGenericSpans`);OpenClaw 方言\n * (transcript / `agent --json` 字段)只住 `src/o11y/parsers/openclaw.ts`,不进 core。\n *\n * 会话契约:首轮显式发一个全新 session id 并 `ctx.session.capture()`(不依赖 OpenClaw 的\n * 默认主会话——否则相邻 attempt 会静默共享历史),后续轮用 `ctx.session.id` resume;\n * `t.newSession()` 后的新会话线自然拿到新 id,session 之间互相隔离。\n */\n// @concord-code ne-adapter-openclaw-agent\n// @concord-implements docs/feature/adapters/README.md\n// @concord-implements docs/feature/adapters/sdk/openclaw/README.md\nexport function openClawAgent(config?: OpenClawConfig): Agent {\n const version = config?.version ?? DEFAULT_OPENCLAW_CLI_VERSION;\n const plugins = normalizeExactNpmPlugins(config?.plugins, \"openClawAgent plugins\");\n const { ensure, installer } = createNpmCliInstaller({\n identity: {\n agent: \"openclaw\",\n version,\n revision: String(AGENT_BASELINE_RECIPE_REVISION.openclaw),\n },\n packageName: \"openclaw\",\n bin: \"openclaw\",\n });\n const pluginLayer = plugins.length === 0 ? undefined : openClawPluginLayer(version, plugins);\n return makeSandboxAgent({\n name: \"openclaw\",\n // e2e 已用真实 CLI 证明 session transcript 能给出工具轨 / 消息 / 用量;\n // 采集失败的单轮仍会在 send 里把 coverage 降成 unavailable/partial。\n evidenceCoverage: completeEvidenceCoverage,\n // OpenClaw 没有专属 span 方言 mapper:原生 span 走 canonical 通用 heuristic。\n // OTel 内容采集关闭时只影响 trace 证据面;行为轨(下面的 transcript 解析)不受影响。\n spanMapper: mapGenericSpans,\n ensure: pluginLayer === undefined ? ensure : [ensure, pluginLayer.ensure],\n installers: pluginLayer === undefined ? [installer] : [installer, pluginLayer.installer],\n tracing: {\n protocol: \"http/protobuf\",\n env: (endpoint) => ({\n OTEL_TRACES_EXPORTER: \"otlp\",\n OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: endpoint,\n OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: \"http/protobuf\",\n }),\n },\n setup: (sb, ctx) => Effect.tryPromise({\n try: async () => {\n const baseUrl = resolveBaseUrl(config);\n if (baseUrl) {\n const apiKey = resolveApiKey(config);\n // OpenAI 兼容网关走自定义 provider + openai-completions;\n // skipBootstrap 跳过首轮身份仪式,否则 agent 会先问 \"Who am I\"。\n // workspace 钉沙箱工作目录,文件工具写到 eval 可见的路径。\n let persistentConfig: globalThis.Record<string, unknown> = {};\n try {\n const existing = await sb.runShell('cat \"$HOME/.openclaw/openclaw.json\"');\n if (existing.exitCode === 0)\n persistentConfig = JSON.parse(existing.stdout);\n }\n catch {\n persistentConfig = {};\n }\n const openclawConfig = {\n ...persistentConfig,\n agents: {\n defaults: {\n skipBootstrap: true,\n workspace: sb.workdir,\n },\n },\n models: {\n mode: \"merge\",\n providers: {\n [COMPAT_PROVIDER]: {\n baseUrl,\n apiKey,\n api: \"openai-completions\",\n models: [\n { id: \"gpt-5.6-luna\", name: \"gpt-5.6-luna\" },\n { id: \"gpt-6-luna\", name: \"gpt-6-luna\" },\n { id: \"gpt-5.4-mini\", name: \"gpt-5.4-mini\" },\n { id: \"gpt-5.4\", name: \"gpt-5.4\" },\n ],\n },\n },\n },\n };\n await shared.writeFile(sb, \"~/.openclaw/openclaw.json\", JSON.stringify(openclawConfig, null, 2), { sensitiveValues: [apiKey] });\n // 预置最小身份文件,避免缺 IDENTITY 时仍触发仪式文案。\n await shared.writeFile(sb, `${sb.workdir}/IDENTITY.md`, \"# Identity\\n\\nName: niceeval\\nEmoji: ✓\\n\");\n await shared.writeFile(sb, `${sb.workdir}/USER.md`, \"# User\\n\\nEval harness operator.\\n\");\n await shared.writeFile(sb, `${sb.workdir}/SOUL.md`, \"# Soul\\n\\nExecute the user's task directly. Do not ask who you are.\\n\");\n }\n const manifest: AgentSetupManifest = { skills: [] };\n if (config?.skills?.length) {\n manifest.skills = await installSkills(sb, config.skills, { dir: SKILL_DIR });\n // 发现指引跟着一起写:不提示 = 白装。\n await appendProjectInstruction(sb, skillDiscoveryInstruction(SKILL_DIR, installedSkillNames(manifest.skills)));\n }\n if (manifest.skills.length) {\n ctx.reportSetup(manifest);\n }\n },\n catch: (cause) => cause,\n }),\n send: (input, ctx) => Effect.gen(function* () {\n const sb = ctx.sandbox;\n const openclawBin = yield* resolveAgentBinEffect(sb, \"openclaw\");\n return yield* Effect.tryPromise({\n try: async (signal) => {\n // 会话契约:新会话线显式发新 session id(隔离);后续轮 resume 记录的 id。\n const sessionId = ctx.session.id ?? `niceeval-${sb.sandboxId}-${randomUUID().slice(0, 8)}`;\n ctx.session.capture(sessionId);\n const baseUrl = resolveBaseUrl(config);\n const args = [\"agent\", \"--local\", \"--session-id\", sessionId, \"--message\", input.text, \"--json\"];\n const model = resolveModelFlag(ctx.model, Boolean(baseUrl));\n if (model)\n args.push(\"--model\", model);\n const apiKey = resolveApiKey(config);\n const env: globalThis.Record<string, string> = {\n OPENCLAW_API_KEY: apiKey,\n ANTHROPIC_API_KEY: apiKey,\n OPENAI_API_KEY: apiKey,\n ...ctx.telemetry?.env,\n };\n if (baseUrl) {\n env.OPENCLAW_BASE_URL = baseUrl;\n env.OPENAI_BASE_URL = baseUrl;\n }\n const res = await sb.runCommand(openclawBin, args, {\n env,\n sensitiveValues: [apiKey],\n stream: true,\n signal,\n });\n const runJson = parseOpenClawRunJson(res.stdout);\n // 封包若带回服务端分配的 session key,后续轮以它为准(capture first-writer-wins,\n // 首轮已用自发 id 落地时不覆盖)。\n ctx.session.capture(runJson.sessionId);\n // 完整工具轨迹的唯一来源:session transcript。\n // 优先读封包给出的 sessionFile(精确);否则在 agents 目录取最新 *.jsonl,\n // 但排除同目录旁路产物 *.trajectory.jsonl(mtime 常更新、却不是消息轨——\n // 误读会导致 events 为空、整轮 coverage 降成 unavailable)。\n let raw: string | undefined;\n if (runJson.sessionFile) {\n try {\n raw = await sb.readText(runJson.sessionFile);\n }\n catch {\n raw = undefined;\n }\n }\n if (raw === undefined) {\n raw = await shared.captureLatestJsonl(sb, \"~/.openclaw/agents\", {\n excludeName: /\\.trajectory\\.jsonl$/i,\n });\n }\n const parsed = parseOpenClawTranscript(raw);\n const events: StreamEvent[] = [...parsed.events];\n // transcript 缺失 / 有解析不了的行:这一轮的工具轨迹不可信,coverage 降级说出来\n // (负断言由此落 unavailable,而不是在空流上假通过),不从最终文本猜工具行为。\n let turnEvidenceCoverage: TurnEvidenceCoverage | undefined;\n if (raw === undefined || parsed.events.length === 0) {\n const reason = \"session transcript unavailable; only the --json final reply was collected\";\n turnEvidenceCoverage = {\n events: { status: \"unavailable\", reason },\n actions: { status: \"unavailable\", reason },\n usage: { status: \"unavailable\", reason },\n };\n ctx.log(\"openclaw transcript unavailable: tool trajectory missing for this turn, negative assertions are unreliable\");\n if (runJson.text)\n events.push({ type: \"message\", role: \"assistant\", text: runJson.text });\n }\n else if (!parsed.parseSuccess) {\n const reason = \"some transcript lines could not be parsed\";\n turnEvidenceCoverage = {\n events: { status: \"partial\", reason },\n actions: { status: \"partial\", reason },\n };\n }\n else {\n turnEvidenceCoverage = unclassifiedToolActionsCoverage(events);\n }\n // 用量:transcript 逐消息累加优先;transcript 没报时用封包摘要,都没有就是空对象。\n const usage = (parsed.usage.inputTokens ?? 0) > 0 || (parsed.usage.outputTokens ?? 0) > 0\n ? parsed.usage\n : (runJson.usage ?? parsed.usage);\n if (res.exitCode !== 0) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: shared.diagnoseFailure(res, parsed.events, raw),\n events,\n usage,\n process: res,\n });\n }\n if (runJson.failed)\n events.push({ type: \"error\", message: shared.diagnoseFailure(res, parsed.events, raw) });\n return {\n events,\n usage,\n status: runJson.failed ? \"failed\" as const : \"completed\" as const,\n ...(turnEvidenceCoverage ? { evidenceCoverage: turnEvidenceCoverage } : {}),\n };\n },\n catch: (cause) => cause,\n });\n }),\n });\n}\nexport default openClawAgent();\n"]}
@@ -68,6 +68,9 @@ function resolveModelFlag(model, hasCompatBase) {
68
68
  /**
69
69
  * OpenCode 的内置 sandbox Agent 工厂。
70
70
  */
71
+ // @concord-code ne-adapter-opencode-agent
72
+ // @concord-implements docs/feature/adapters/README.md
73
+ // @concord-implements docs/feature/adapters/sdk/opencode/README.md
71
74
  function openCodeAgent(config) {
72
75
  const version = config?.version ?? coding_cli_versions_ts_1.DEFAULT_OPENCODE_CLI_VERSION;
73
76
  const { ensure, installer } = (0, npm_staged_ts_1.createNpmCliInstaller)({
@@ -1 +1 @@
1
- {"version":3,"file":"opencode.js","sourceRoot":"","sources":["opencode.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeSandboxAgent } from \"../define.ts\";\nimport { Effect } from \"effect\";\nimport { requireEnv, getEnv } from \"../util.ts\";\nimport { shared } from \"./shared.ts\";\nimport { appendProjectInstruction, installSkills, installedSkillNames, skillDiscoveryInstruction, } from \"./skills.ts\";\nimport { mapGenericSpans } from \"../o11y/otlp/canonical.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport { shellQuote } from \"../sandbox/shell.ts\";\nimport { completeEvidenceCoverage } from \"../assertions/coverage.ts\";\nimport { parseOpenCodeTranscript, sessionIdFromOpenCodeTranscript, extractOpenCodeJsonl, } from \"../o11y/parsers/opencode.ts\";\nimport { DEFAULT_OPENCODE_CLI_VERSION, AGENT_BASELINE_RECIPE_REVISION } from \"./coding-cli-versions.ts\";\nimport { createNpmCliInstaller, resolveAgentBinEffect } from \"./npm-staged.ts\";\nimport type { Agent, AgentSetupManifest, Sandbox, SkillSpec, StreamEvent, TurnEvidenceCoverage, } from \"../types.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\n// OpenCode sandbox adapter。驱动:`opencode run --format json --auto`;\n// 行为轨优先 stdout JSONL,不足时 `opencode export <sessionID>`。\n// 契约见 docs/feature/adapters/sdk/opencode/README.md。\nconst SKILL_DIR = \".agents/skills\";\n/** 自定义 OpenAI 兼容网关在 opencode.json 里的 provider id。 */\nconst COMPAT_PROVIDER = \"compat\";\n/**\n * OpenCode 的 native skill registry 需要 YAML frontmatter 才会把 SKILL.md 广播给\n * `skill` 工具。共享 SkillSpec 同时服务不要求 frontmatter 的 coding agents,所以只在\n * OpenCode 沙箱内为缺失的元数据补一个由安装名派生的最小头;作者已有的 native header\n * 原样保留,仍由 OpenCode 自己校验。\n */\nasync function addOpenCodeSkillFrontmatter(sb: Sandbox, names: readonly string[]): Promise<void> {\n for (const name of names) {\n const path = `${SKILL_DIR}/${name}/SKILL.md`;\n const quotedPath = shellQuote(path);\n const header = [\n \"---\",\n `name: ${JSON.stringify(name)}`,\n `description: ${JSON.stringify(`NiceEval-installed skill ${name}`)}`,\n \"---\",\n \"\",\n ].join(\"\\n\");\n const result = await sb.runShell([\n `if [ \\\"$(sed -n '1p' ${quotedPath})\\\" != \\\"---\\\" ]; then`,\n \" tmp=$(mktemp) || exit 1\",\n \" cat > \\\"$tmp\\\" <<'NICEEVAL_OPENCODE_SKILL_HEADER'\",\n header,\n \"NICEEVAL_OPENCODE_SKILL_HEADER\",\n ` cat ${quotedPath} >> \\\"$tmp\\\" && mv \\\"$tmp\\\" ${quotedPath} || { rm -f \\\"$tmp\\\"; exit 1; }`,\n \"fi\",\n ].join(\"\\n\"));\n if (result.exitCode !== 0) {\n throw new Error(`OpenCode skill ${JSON.stringify(name)} could not receive native frontmatter.`);\n }\n }\n}\nexport interface OpenCodeConfig {\n /** 模型 API key。省略时读 OPENCODE_API_KEY,再回落 ANTHROPIC_API_KEY。 */\n apiKey?: string;\n /** OpenAI 兼容端点。省略时读 OPENCODE_BASE_URL。 */\n baseUrl?: string;\n /** 钉 npm `opencode-ai` 版本;省略时用 NiceEval 默认 pin。 */\n version?: string;\n /** 装进沙箱的 Skill,落在 `.agents/skills/<name>/`。 */\n skills?: SkillSpec[];\n}\nfunction resolveApiKey(config?: OpenCodeConfig): string {\n return config?.apiKey ?? getEnv(\"OPENCODE_API_KEY\") ?? requireEnv(\"ANTHROPIC_API_KEY\");\n}\nfunction resolveBaseUrl(config?: OpenCodeConfig): string | undefined {\n return config?.baseUrl ?? getEnv(\"OPENCODE_BASE_URL\");\n}\n/** experiment.model → `--model`。裸模型名在自定义网关下补成 `compat/<model>`。 */\nfunction resolveModelFlag(model: string | undefined, hasCompatBase: boolean): string | undefined {\n if (!model)\n return undefined;\n if (model.includes(\"/\"))\n return model;\n return hasCompatBase ? `${COMPAT_PROVIDER}/${model}` : model;\n}\n/**\n * OpenCode 的内置 sandbox Agent 工厂。\n */\nexport function openCodeAgent(config?: OpenCodeConfig): Agent {\n const version = config?.version ?? DEFAULT_OPENCODE_CLI_VERSION;\n const { ensure, installer } = createNpmCliInstaller({\n identity: {\n agent: \"opencode\",\n version,\n revision: String(AGENT_BASELINE_RECIPE_REVISION.opencode),\n },\n packageName: \"opencode-ai\",\n bin: \"opencode\",\n });\n return makeSandboxAgent({\n name: \"opencode\",\n evidenceCoverage: completeEvidenceCoverage,\n spanMapper: mapGenericSpans,\n ensure,\n installers: [installer],\n tracing: {\n protocol: \"http/protobuf\",\n env: (endpoint) => ({\n OTEL_TRACES_EXPORTER: \"otlp\",\n OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: endpoint,\n OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: \"http/protobuf\",\n }),\n },\n setup: (sb, ctx) => Effect.tryPromise({\n try: async () => {\n const baseUrl = resolveBaseUrl(config);\n const provider: globalThis.Record<string, unknown> = {};\n if (baseUrl) {\n // OpenAI 兼容网关必须走 openai-compatible npm 包 + 显式 models 表,\n // 否则 OpenCode 不会把自定义 baseURL 接到请求上。\n provider[COMPAT_PROVIDER] = {\n npm: \"@ai-sdk/openai-compatible\",\n name: \"OpenAI-compatible\",\n options: {\n apiKey: \"{env:OPENCODE_API_KEY}\",\n baseURL: baseUrl,\n },\n models: {\n // 允许任意 experiment.model;具体 id 由 --model compat/<id> 选择。\n \"gpt-5.6-luna\": { name: \"gpt-5.6-luna\" },\n \"gpt-6-luna\": { name: \"gpt-6-luna\" },\n \"gpt-5.4-mini\": { name: \"gpt-5.4-mini\" },\n \"gpt-5.4\": { name: \"gpt-5.4\" },\n \"gpt-4.1-mini\": { name: \"gpt-4.1-mini\" },\n \"gpt-4o-mini\": { name: \"gpt-4o-mini\" },\n },\n };\n }\n const opencodeConfig = {\n $schema: \"https://opencode.ai/config.json\",\n ...(Object.keys(provider).length ? { provider } : {}),\n permission: {\n write: \"allow\",\n edit: \"allow\",\n bash: \"allow\",\n read: \"allow\",\n },\n };\n await shared.writeFile(sb, \"opencode.json\", JSON.stringify(opencodeConfig, null, 2));\n const manifest: AgentSetupManifest = { skills: [] };\n if (config?.skills?.length) {\n manifest.skills = await installSkills(sb, config.skills, { dir: SKILL_DIR });\n await addOpenCodeSkillFrontmatter(sb, installedSkillNames(manifest.skills));\n await appendProjectInstruction(sb, skillDiscoveryInstruction(SKILL_DIR, installedSkillNames(manifest.skills)));\n }\n if (manifest.skills.length) {\n ctx.reportSetup(manifest);\n }\n },\n catch: (cause) => cause,\n }),\n send: (input, ctx) => Effect.gen(function* () {\n const sb = ctx.sandbox;\n const opencodeBin = yield* resolveAgentBinEffect(sb, \"opencode\");\n return yield* Effect.tryPromise({\n try: async (signal) => {\n const baseUrl = resolveBaseUrl(config);\n const args = [\"run\", input.text, \"--format\", \"json\", \"--auto\"];\n const model = resolveModelFlag(ctx.model, Boolean(baseUrl));\n if (model)\n args.push(\"--model\", model);\n if (ctx.session.id)\n args.push(\"--session\", ctx.session.id);\n const apiKey = resolveApiKey(config);\n const env: globalThis.Record<string, string> = {\n OPENCODE_API_KEY: apiKey,\n OPENAI_API_KEY: apiKey,\n ANTHROPIC_API_KEY: apiKey,\n ...ctx.telemetry?.env,\n };\n if (baseUrl) {\n env.OPENCODE_BASE_URL = baseUrl;\n env.OPENAI_BASE_URL = baseUrl;\n }\n const sensitiveValues = [apiKey];\n const res = await sb.runCommand(opencodeBin, args, { env, sensitiveValues, stream: true, signal });\n let raw = extractOpenCodeJsonl(res.stdout) ?? extractOpenCodeJsonl(`${res.stdout}\\n${res.stderr}`);\n let sessionId = sessionIdFromOpenCodeTranscript(raw) ?? sessionIdFromOpenCodeTranscript(res.stdout);\n if (sessionId)\n ctx.session.capture(sessionId);\n let parsed = parseOpenCodeTranscript(raw);\n // 仅当 stdout 既没有工具也没有助手文本时才 export 补读——纯对话轮\n // (session/recall) 的 text 事件已在 JSONL 里,再 export 会冲掉已解析事件。\n const hasActions = parsed.events.some((e) => e.type === \"operation.started\" && e.operation.kind === \"tool\");\n const hasMessages = parsed.events.some((e) => e.type === \"message\");\n if (!hasActions && !hasMessages && (sessionId ?? ctx.session.id)) {\n const sid = sessionId ?? ctx.session.id!;\n const exported = await sb.runCommand(opencodeBin, [\"export\", sid], { env, sensitiveValues, signal });\n if (exported.exitCode === 0 && exported.stdout.trim()) {\n raw = exported.stdout;\n parsed = parseOpenCodeTranscript(raw);\n sessionId = sessionIdFromOpenCodeTranscript(raw) ?? sessionId;\n if (sessionId)\n ctx.session.capture(sessionId);\n }\n }\n const events: StreamEvent[] = [...parsed.events];\n const hasErrorEvent = events.some((e) => e.type === \"error\");\n let turnEvidenceCoverage: TurnEvidenceCoverage | undefined;\n if (!raw?.trim()) {\n const reason = \"OpenCode transcript/export was unavailable; tool trajectory was not observed.\";\n turnEvidenceCoverage = {\n events: { status: \"unavailable\", reason },\n actions: { status: \"unavailable\", reason },\n usage: { status: \"unavailable\", reason },\n };\n }\n else if (!parsed.parseSuccess) {\n const reason = \"Some OpenCode transcript lines could not be parsed.\";\n turnEvidenceCoverage = {\n events: { status: \"partial\", reason },\n actions: { status: \"partial\", reason },\n };\n }\n else {\n turnEvidenceCoverage = unclassifiedToolActionsCoverage(events);\n }\n if (res.exitCode !== 0) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: shared.diagnoseFailure(res, parsed.events, raw),\n events,\n usage: parsed.usage,\n process: res,\n });\n }\n return {\n events,\n usage: parsed.usage,\n status: hasErrorEvent ? \"failed\" as const : \"completed\" as const,\n ...(turnEvidenceCoverage === undefined ? {} : { evidenceCoverage: turnEvidenceCoverage }),\n };\n },\n catch: (cause) => cause,\n });\n }),\n });\n}\nexport default openCodeAgent();\n"]}
1
+ {"version":3,"file":"opencode.js","sourceRoot":"","sources":["opencode.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeSandboxAgent } from \"../define.ts\";\nimport { Effect } from \"effect\";\nimport { requireEnv, getEnv } from \"../util.ts\";\nimport { shared } from \"./shared.ts\";\nimport { appendProjectInstruction, installSkills, installedSkillNames, skillDiscoveryInstruction, } from \"./skills.ts\";\nimport { mapGenericSpans } from \"../o11y/otlp/canonical.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport { shellQuote } from \"../sandbox/shell.ts\";\nimport { completeEvidenceCoverage } from \"../assertions/coverage.ts\";\nimport { parseOpenCodeTranscript, sessionIdFromOpenCodeTranscript, extractOpenCodeJsonl, } from \"../o11y/parsers/opencode.ts\";\nimport { DEFAULT_OPENCODE_CLI_VERSION, AGENT_BASELINE_RECIPE_REVISION } from \"./coding-cli-versions.ts\";\nimport { createNpmCliInstaller, resolveAgentBinEffect } from \"./npm-staged.ts\";\nimport type { Agent, AgentSetupManifest, Sandbox, SkillSpec, StreamEvent, TurnEvidenceCoverage, } from \"../types.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents } from \"../context/send-failures.ts\";\n// OpenCode sandbox adapter。驱动:`opencode run --format json --auto`;\n// 行为轨优先 stdout JSONL,不足时 `opencode export <sessionID>`。\n// 契约见 docs/feature/adapters/sdk/opencode/README.md。\nconst SKILL_DIR = \".agents/skills\";\n/** 自定义 OpenAI 兼容网关在 opencode.json 里的 provider id。 */\nconst COMPAT_PROVIDER = \"compat\";\n/**\n * OpenCode 的 native skill registry 需要 YAML frontmatter 才会把 SKILL.md 广播给\n * `skill` 工具。共享 SkillSpec 同时服务不要求 frontmatter 的 coding agents,所以只在\n * OpenCode 沙箱内为缺失的元数据补一个由安装名派生的最小头;作者已有的 native header\n * 原样保留,仍由 OpenCode 自己校验。\n */\nasync function addOpenCodeSkillFrontmatter(sb: Sandbox, names: readonly string[]): Promise<void> {\n for (const name of names) {\n const path = `${SKILL_DIR}/${name}/SKILL.md`;\n const quotedPath = shellQuote(path);\n const header = [\n \"---\",\n `name: ${JSON.stringify(name)}`,\n `description: ${JSON.stringify(`NiceEval-installed skill ${name}`)}`,\n \"---\",\n \"\",\n ].join(\"\\n\");\n const result = await sb.runShell([\n `if [ \\\"$(sed -n '1p' ${quotedPath})\\\" != \\\"---\\\" ]; then`,\n \" tmp=$(mktemp) || exit 1\",\n \" cat > \\\"$tmp\\\" <<'NICEEVAL_OPENCODE_SKILL_HEADER'\",\n header,\n \"NICEEVAL_OPENCODE_SKILL_HEADER\",\n ` cat ${quotedPath} >> \\\"$tmp\\\" && mv \\\"$tmp\\\" ${quotedPath} || { rm -f \\\"$tmp\\\"; exit 1; }`,\n \"fi\",\n ].join(\"\\n\"));\n if (result.exitCode !== 0) {\n throw new Error(`OpenCode skill ${JSON.stringify(name)} could not receive native frontmatter.`);\n }\n }\n}\nexport interface OpenCodeConfig {\n /** 模型 API key。省略时读 OPENCODE_API_KEY,再回落 ANTHROPIC_API_KEY。 */\n apiKey?: string;\n /** OpenAI 兼容端点。省略时读 OPENCODE_BASE_URL。 */\n baseUrl?: string;\n /** 钉 npm `opencode-ai` 版本;省略时用 NiceEval 默认 pin。 */\n version?: string;\n /** 装进沙箱的 Skill,落在 `.agents/skills/<name>/`。 */\n skills?: SkillSpec[];\n}\nfunction resolveApiKey(config?: OpenCodeConfig): string {\n return config?.apiKey ?? getEnv(\"OPENCODE_API_KEY\") ?? requireEnv(\"ANTHROPIC_API_KEY\");\n}\nfunction resolveBaseUrl(config?: OpenCodeConfig): string | undefined {\n return config?.baseUrl ?? getEnv(\"OPENCODE_BASE_URL\");\n}\n/** experiment.model → `--model`。裸模型名在自定义网关下补成 `compat/<model>`。 */\nfunction resolveModelFlag(model: string | undefined, hasCompatBase: boolean): string | undefined {\n if (!model)\n return undefined;\n if (model.includes(\"/\"))\n return model;\n return hasCompatBase ? `${COMPAT_PROVIDER}/${model}` : model;\n}\n/**\n * OpenCode 的内置 sandbox Agent 工厂。\n */\n// @concord-code ne-adapter-opencode-agent\n// @concord-implements docs/feature/adapters/README.md\n// @concord-implements docs/feature/adapters/sdk/opencode/README.md\nexport function openCodeAgent(config?: OpenCodeConfig): Agent {\n const version = config?.version ?? DEFAULT_OPENCODE_CLI_VERSION;\n const { ensure, installer } = createNpmCliInstaller({\n identity: {\n agent: \"opencode\",\n version,\n revision: String(AGENT_BASELINE_RECIPE_REVISION.opencode),\n },\n packageName: \"opencode-ai\",\n bin: \"opencode\",\n });\n return makeSandboxAgent({\n name: \"opencode\",\n evidenceCoverage: completeEvidenceCoverage,\n spanMapper: mapGenericSpans,\n ensure,\n installers: [installer],\n tracing: {\n protocol: \"http/protobuf\",\n env: (endpoint) => ({\n OTEL_TRACES_EXPORTER: \"otlp\",\n OTEL_EXPORTER_OTLP_TRACES_ENDPOINT: endpoint,\n OTEL_EXPORTER_OTLP_TRACES_PROTOCOL: \"http/protobuf\",\n }),\n },\n setup: (sb, ctx) => Effect.tryPromise({\n try: async () => {\n const baseUrl = resolveBaseUrl(config);\n const provider: globalThis.Record<string, unknown> = {};\n if (baseUrl) {\n // OpenAI 兼容网关必须走 openai-compatible npm 包 + 显式 models 表,\n // 否则 OpenCode 不会把自定义 baseURL 接到请求上。\n provider[COMPAT_PROVIDER] = {\n npm: \"@ai-sdk/openai-compatible\",\n name: \"OpenAI-compatible\",\n options: {\n apiKey: \"{env:OPENCODE_API_KEY}\",\n baseURL: baseUrl,\n },\n models: {\n // 允许任意 experiment.model;具体 id 由 --model compat/<id> 选择。\n \"gpt-5.6-luna\": { name: \"gpt-5.6-luna\" },\n \"gpt-6-luna\": { name: \"gpt-6-luna\" },\n \"gpt-5.4-mini\": { name: \"gpt-5.4-mini\" },\n \"gpt-5.4\": { name: \"gpt-5.4\" },\n \"gpt-4.1-mini\": { name: \"gpt-4.1-mini\" },\n \"gpt-4o-mini\": { name: \"gpt-4o-mini\" },\n },\n };\n }\n const opencodeConfig = {\n $schema: \"https://opencode.ai/config.json\",\n ...(Object.keys(provider).length ? { provider } : {}),\n permission: {\n write: \"allow\",\n edit: \"allow\",\n bash: \"allow\",\n read: \"allow\",\n },\n };\n await shared.writeFile(sb, \"opencode.json\", JSON.stringify(opencodeConfig, null, 2));\n const manifest: AgentSetupManifest = { skills: [] };\n if (config?.skills?.length) {\n manifest.skills = await installSkills(sb, config.skills, { dir: SKILL_DIR });\n await addOpenCodeSkillFrontmatter(sb, installedSkillNames(manifest.skills));\n await appendProjectInstruction(sb, skillDiscoveryInstruction(SKILL_DIR, installedSkillNames(manifest.skills)));\n }\n if (manifest.skills.length) {\n ctx.reportSetup(manifest);\n }\n },\n catch: (cause) => cause,\n }),\n send: (input, ctx) => Effect.gen(function* () {\n const sb = ctx.sandbox;\n const opencodeBin = yield* resolveAgentBinEffect(sb, \"opencode\");\n return yield* Effect.tryPromise({\n try: async (signal) => {\n const baseUrl = resolveBaseUrl(config);\n const args = [\"run\", input.text, \"--format\", \"json\", \"--auto\"];\n const model = resolveModelFlag(ctx.model, Boolean(baseUrl));\n if (model)\n args.push(\"--model\", model);\n if (ctx.session.id)\n args.push(\"--session\", ctx.session.id);\n const apiKey = resolveApiKey(config);\n const env: globalThis.Record<string, string> = {\n OPENCODE_API_KEY: apiKey,\n OPENAI_API_KEY: apiKey,\n ANTHROPIC_API_KEY: apiKey,\n ...ctx.telemetry?.env,\n };\n if (baseUrl) {\n env.OPENCODE_BASE_URL = baseUrl;\n env.OPENAI_BASE_URL = baseUrl;\n }\n const sensitiveValues = [apiKey];\n const res = await sb.runCommand(opencodeBin, args, { env, sensitiveValues, stream: true, signal });\n let raw = extractOpenCodeJsonl(res.stdout) ?? extractOpenCodeJsonl(`${res.stdout}\\n${res.stderr}`);\n let sessionId = sessionIdFromOpenCodeTranscript(raw) ?? sessionIdFromOpenCodeTranscript(res.stdout);\n if (sessionId)\n ctx.session.capture(sessionId);\n let parsed = parseOpenCodeTranscript(raw);\n // 仅当 stdout 既没有工具也没有助手文本时才 export 补读——纯对话轮\n // (session/recall) 的 text 事件已在 JSONL 里,再 export 会冲掉已解析事件。\n const hasActions = parsed.events.some((e) => e.type === \"operation.started\" && e.operation.kind === \"tool\");\n const hasMessages = parsed.events.some((e) => e.type === \"message\");\n if (!hasActions && !hasMessages && (sessionId ?? ctx.session.id)) {\n const sid = sessionId ?? ctx.session.id!;\n const exported = await sb.runCommand(opencodeBin, [\"export\", sid], { env, sensitiveValues, signal });\n if (exported.exitCode === 0 && exported.stdout.trim()) {\n raw = exported.stdout;\n parsed = parseOpenCodeTranscript(raw);\n sessionId = sessionIdFromOpenCodeTranscript(raw) ?? sessionId;\n if (sessionId)\n ctx.session.capture(sessionId);\n }\n }\n const events: StreamEvent[] = [...parsed.events];\n const hasErrorEvent = events.some((e) => e.type === \"error\");\n let turnEvidenceCoverage: TurnEvidenceCoverage | undefined;\n if (!raw?.trim()) {\n const reason = \"OpenCode transcript/export was unavailable; tool trajectory was not observed.\";\n turnEvidenceCoverage = {\n events: { status: \"unavailable\", reason },\n actions: { status: \"unavailable\", reason },\n usage: { status: \"unavailable\", reason },\n };\n }\n else if (!parsed.parseSuccess) {\n const reason = \"Some OpenCode transcript lines could not be parsed.\";\n turnEvidenceCoverage = {\n events: { status: \"partial\", reason },\n actions: { status: \"partial\", reason },\n };\n }\n else {\n turnEvidenceCoverage = unclassifiedToolActionsCoverage(events);\n }\n if (res.exitCode !== 0) {\n throw makeSendFailure({\n acceptance: sendAcceptanceFromEvents(events),\n message: shared.diagnoseFailure(res, parsed.events, raw),\n events,\n usage: parsed.usage,\n process: res,\n });\n }\n return {\n events,\n usage: parsed.usage,\n status: hasErrorEvent ? \"failed\" as const : \"completed\" as const,\n ...(turnEvidenceCoverage === undefined ? {} : { evidenceCoverage: turnEvidenceCoverage }),\n };\n },\n catch: (cause) => cause,\n });\n }),\n });\n}\nexport default openCodeAgent();\n"]}