niceeval 0.13.2 → 0.13.3

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 (494) hide show
  1. package/dist/agents/bub.cjs +4 -4
  2. package/dist/agents/bub.cjs.map +1 -1
  3. package/dist/agents/bub.d.cts +2 -2
  4. package/dist/agents/bub.d.mts +2 -2
  5. package/dist/agents/bub.d.ts +2 -2
  6. package/dist/agents/claude-code-native.cjs +213 -0
  7. package/dist/agents/claude-code-native.cjs.map +1 -0
  8. package/dist/agents/claude-code-native.d.cts +5 -0
  9. package/dist/agents/claude-code-native.d.mts +5 -0
  10. package/dist/agents/claude-code-native.d.ts +5 -0
  11. package/dist/agents/claude-code-native.js +6 -0
  12. package/dist/agents/claude-code-native.js.map +1 -0
  13. package/dist/agents/claude-code.cjs +26 -80
  14. package/dist/agents/claude-code.cjs.map +1 -1
  15. package/dist/agents/codex-app-server.cjs +314 -0
  16. package/dist/agents/codex-app-server.cjs.map +1 -0
  17. package/dist/agents/codex-app-server.d.cts +9 -0
  18. package/dist/agents/codex-app-server.d.mts +9 -0
  19. package/dist/agents/codex-app-server.d.ts +9 -0
  20. package/dist/agents/codex-app-server.js +6 -0
  21. package/dist/agents/codex-app-server.js.map +1 -0
  22. package/dist/agents/codex.cjs +19 -68
  23. package/dist/agents/codex.cjs.map +1 -1
  24. package/dist/agents/codex.d.cts +3 -3
  25. package/dist/agents/codex.d.mts +3 -3
  26. package/dist/agents/codex.d.ts +3 -3
  27. package/dist/agents/index.cjs +3 -1
  28. package/dist/agents/index.cjs.map +1 -1
  29. package/dist/agents/index.d.cts +1 -0
  30. package/dist/agents/index.d.mts +1 -0
  31. package/dist/agents/index.d.ts +1 -0
  32. package/dist/agents/index.js +84 -82
  33. package/dist/agents/index.mjs +84 -82
  34. package/dist/agents/managed-jsonl.cjs +207 -0
  35. package/dist/agents/managed-jsonl.cjs.map +1 -0
  36. package/dist/agents/managed-jsonl.d.cts +39 -0
  37. package/dist/agents/managed-jsonl.d.mts +39 -0
  38. package/dist/agents/managed-jsonl.d.ts +39 -0
  39. package/dist/agents/managed-jsonl.js +6 -0
  40. package/dist/agents/managed-jsonl.js.map +1 -0
  41. package/dist/agents/managed-process.cjs +31 -0
  42. package/dist/agents/managed-process.cjs.map +1 -0
  43. package/dist/agents/managed-process.d.cts +3 -0
  44. package/dist/agents/managed-process.d.mts +3 -0
  45. package/dist/agents/managed-process.d.ts +3 -0
  46. package/dist/agents/managed-process.js +6 -0
  47. package/dist/agents/managed-process.js.map +1 -0
  48. package/dist/agents/omp.cjs +18 -1
  49. package/dist/agents/omp.cjs.map +1 -1
  50. package/dist/agents/sdk-streams.cjs +11 -4
  51. package/dist/agents/sdk-streams.cjs.map +1 -1
  52. package/dist/agents/types.cjs.map +1 -1
  53. package/dist/agents/types.d.cts +8 -0
  54. package/dist/agents/types.d.mts +8 -0
  55. package/dist/agents/types.d.ts +8 -0
  56. package/dist/analysis/bindings.cjs +74 -19
  57. package/dist/analysis/bindings.cjs.map +1 -1
  58. package/dist/analysis/bindings.d.cts +534 -156
  59. package/dist/analysis/bindings.d.mts +534 -156
  60. package/dist/analysis/bindings.d.ts +534 -156
  61. package/dist/analysis/domain-view.cjs.map +1 -1
  62. package/dist/analysis/domain-view.d.cts +137 -8
  63. package/dist/analysis/domain-view.d.mts +137 -8
  64. package/dist/analysis/domain-view.d.ts +137 -8
  65. package/dist/analysis/index.cjs.map +1 -1
  66. package/dist/analysis/index.d.cts +1 -1
  67. package/dist/analysis/index.d.mts +1 -1
  68. package/dist/analysis/index.d.ts +1 -1
  69. package/dist/assertions/api.cjs.map +1 -1
  70. package/dist/assertions/api.d.cts +62 -0
  71. package/dist/assertions/api.d.mts +62 -0
  72. package/dist/assertions/api.d.ts +62 -0
  73. package/dist/assertions/judge.cjs +56 -5
  74. package/dist/assertions/judge.cjs.map +1 -1
  75. package/dist/assertions/match.cjs +66 -42
  76. package/dist/assertions/match.cjs.map +1 -1
  77. package/dist/assertions/match.d.cts +13 -0
  78. package/dist/assertions/match.d.mts +13 -0
  79. package/dist/assertions/match.d.ts +13 -0
  80. package/dist/assertions/record/attachment.cjs +104 -33
  81. package/dist/assertions/record/attachment.cjs.map +1 -1
  82. package/dist/assertions/record/attachment.d.cts +294 -57
  83. package/dist/assertions/record/attachment.d.mts +294 -57
  84. package/dist/assertions/record/attachment.d.ts +294 -57
  85. package/dist/assertions/record/codec.cjs +91 -17
  86. package/dist/assertions/record/codec.cjs.map +1 -1
  87. package/dist/assertions/record/codec.d.cts +280 -52
  88. package/dist/assertions/record/codec.d.mts +280 -52
  89. package/dist/assertions/record/codec.d.ts +280 -52
  90. package/dist/assertions/record/index.js +2 -0
  91. package/dist/assertions/record/model.cjs +16 -0
  92. package/dist/assertions/record/model.cjs.map +1 -1
  93. package/dist/assertions/record/model.d.cts +120 -13
  94. package/dist/assertions/record/model.d.mts +120 -13
  95. package/dist/assertions/record/model.d.ts +120 -13
  96. package/dist/assertions/record/model.js +2 -0
  97. package/dist/assertions/record/producer.cjs +70 -50
  98. package/dist/assertions/record/producer.cjs.map +1 -1
  99. package/dist/assertions/record/producer.d.cts +8 -7
  100. package/dist/assertions/record/producer.d.mts +8 -7
  101. package/dist/assertions/record/producer.d.ts +8 -7
  102. package/dist/assertions/runtime.cjs +49 -7
  103. package/dist/assertions/runtime.cjs.map +1 -1
  104. package/dist/cli/application.cjs +40 -0
  105. package/dist/cli/application.cjs.map +1 -0
  106. package/dist/cli/application.d.cts +129 -0
  107. package/dist/cli/application.d.mts +129 -0
  108. package/dist/cli/application.d.ts +129 -0
  109. package/dist/cli/application.js +24 -0
  110. package/dist/cli/application.js.map +1 -0
  111. package/dist/cli/bootstrap.cjs +10 -4
  112. package/dist/cli/bootstrap.cjs.map +1 -1
  113. package/dist/cli/node-application.cjs +123 -0
  114. package/dist/cli/node-application.cjs.map +1 -0
  115. package/dist/cli/node-application.d.cts +14 -0
  116. package/dist/cli/node-application.d.mts +14 -0
  117. package/dist/cli/node-application.d.ts +14 -0
  118. package/dist/cli/node-application.js +26 -0
  119. package/dist/cli/node-application.js.map +1 -0
  120. package/dist/cli/program.cjs +2807 -0
  121. package/dist/cli/program.cjs.map +1 -0
  122. package/dist/cli/program.d.cts +352 -0
  123. package/dist/cli/program.d.mts +352 -0
  124. package/dist/cli/program.d.ts +352 -0
  125. package/dist/cli/program.js +36 -0
  126. package/dist/cli/program.js.map +1 -0
  127. package/dist/cli/project-configuration.cjs +134 -0
  128. package/dist/cli/project-configuration.cjs.map +1 -0
  129. package/dist/cli/project-configuration.d.cts +64 -0
  130. package/dist/cli/project-configuration.d.mts +64 -0
  131. package/dist/cli/project-configuration.d.ts +64 -0
  132. package/dist/cli/project-configuration.js +22 -0
  133. package/dist/cli/project-configuration.js.map +1 -0
  134. package/dist/cli/record.cjs +20 -4
  135. package/dist/cli/record.cjs.map +1 -1
  136. package/dist/cli/record.d.cts +3 -3
  137. package/dist/cli/record.d.mts +3 -3
  138. package/dist/cli/record.d.ts +3 -3
  139. package/dist/cli.cjs +19 -3130
  140. package/dist/cli.cjs.map +1 -1
  141. package/dist/cli.d.cts +2 -148
  142. package/dist/cli.d.mts +2 -148
  143. package/dist/cli.d.ts +2 -148
  144. package/dist/cli.js +22 -30
  145. package/dist/context/assert-first.cjs +21 -15
  146. package/dist/context/assert-first.cjs.map +1 -1
  147. package/dist/context/assert-first.d.cts +1 -0
  148. package/dist/context/assert-first.d.mts +1 -0
  149. package/dist/context/assert-first.d.ts +1 -0
  150. package/dist/context/attempt-resources.cjs +13 -0
  151. package/dist/context/attempt-resources.cjs.map +1 -0
  152. package/dist/context/attempt-resources.d.cts +3 -0
  153. package/dist/context/attempt-resources.d.mts +3 -0
  154. package/dist/context/attempt-resources.d.ts +3 -0
  155. package/dist/context/attempt-resources.js +8 -0
  156. package/dist/context/attempt-resources.js.map +1 -0
  157. package/dist/context/session.cjs +4 -3
  158. package/dist/context/session.cjs.map +1 -1
  159. package/dist/context/session.d.cts +1 -0
  160. package/dist/context/session.d.mts +1 -0
  161. package/dist/context/session.d.ts +1 -0
  162. package/dist/eval/record/verdict.cjs +3 -2
  163. package/dist/eval/record/verdict.cjs.map +1 -1
  164. package/dist/experiment/host/index.cjs +1 -6
  165. package/dist/experiment/host/index.cjs.map +1 -1
  166. package/dist/experiment/host/index.d.cts +1 -0
  167. package/dist/experiment/host/index.d.mts +1 -0
  168. package/dist/experiment/host/index.d.ts +1 -0
  169. package/dist/load-config.cjs +13 -4
  170. package/dist/load-config.cjs.map +1 -1
  171. package/dist/load-config.d.cts +4 -3
  172. package/dist/load-config.d.mts +4 -3
  173. package/dist/load-config.d.ts +4 -3
  174. package/dist/load-config.js +4 -2
  175. package/dist/o11y/parsers/codex.cjs +29 -7
  176. package/dist/o11y/parsers/codex.cjs.map +1 -1
  177. package/dist/record/codec/core.d.cts +0 -2
  178. package/dist/record/codec/core.d.mts +0 -2
  179. package/dist/record/codec/core.d.ts +0 -2
  180. package/dist/record/codec/identifiers.cjs +2 -3
  181. package/dist/record/codec/identifiers.cjs.map +1 -1
  182. package/dist/record/codec/identifiers.d.cts +1 -2
  183. package/dist/record/codec/identifiers.d.mts +1 -2
  184. package/dist/record/codec/identifiers.d.ts +1 -2
  185. package/dist/record/codec/identifiers.js +10 -12
  186. package/dist/record/codec/index.js +42 -44
  187. package/dist/record/definition/attachment.cjs +1 -0
  188. package/dist/record/definition/attachment.cjs.map +1 -1
  189. package/dist/record/definition/attachment.d.cts +14 -0
  190. package/dist/record/definition/attachment.d.mts +14 -0
  191. package/dist/record/definition/attachment.d.ts +14 -0
  192. package/dist/record/family/assertions-v1.cjs +104 -0
  193. package/dist/record/family/assertions-v1.cjs.map +1 -0
  194. package/dist/record/family/assertions-v1.d.cts +2 -0
  195. package/dist/record/family/assertions-v1.d.mts +2 -0
  196. package/dist/record/family/assertions-v1.d.ts +2 -0
  197. package/dist/record/family/assertions-v1.js +6 -0
  198. package/dist/record/family/assertions-v1.js.map +1 -0
  199. package/dist/record/family/assertions.cjs +16 -5
  200. package/dist/record/family/assertions.cjs.map +1 -1
  201. package/dist/record/family/assertions.d.cts +510 -56
  202. package/dist/record/family/assertions.d.mts +510 -56
  203. package/dist/record/family/assertions.d.ts +510 -56
  204. package/dist/record/family/assertions.js +14 -10
  205. package/dist/record/family/catalog.cjs +17 -1
  206. package/dist/record/family/catalog.cjs.map +1 -1
  207. package/dist/record/family/catalog.d.cts +1292 -104
  208. package/dist/record/family/catalog.d.mts +1292 -104
  209. package/dist/record/family/catalog.d.ts +1292 -104
  210. package/dist/record/family/catalog.js +22 -20
  211. package/dist/record/family/index.js +144 -138
  212. package/dist/record/family/observability-v1.cjs +5 -0
  213. package/dist/record/family/observability-v1.cjs.map +1 -1
  214. package/dist/record/family/observability.cjs +1 -1
  215. package/dist/record/family/observability.cjs.map +1 -1
  216. package/dist/record/host/runtime.cjs +323 -173
  217. package/dist/record/host/runtime.cjs.map +1 -1
  218. package/dist/record/host/types.cjs.map +1 -1
  219. package/dist/record/host/types.d.cts +9 -7
  220. package/dist/record/host/types.d.mts +9 -7
  221. package/dist/record/host/types.d.ts +9 -7
  222. package/dist/record/model/core.cjs.map +1 -1
  223. package/dist/record/model/core.d.cts +1 -2
  224. package/dist/record/model/core.d.mts +1 -2
  225. package/dist/record/model/core.d.ts +1 -2
  226. package/dist/record/model/definition.cjs +1 -2
  227. package/dist/record/model/definition.cjs.map +1 -1
  228. package/dist/record/model/definition.d.cts +1 -7
  229. package/dist/record/model/definition.d.mts +1 -7
  230. package/dist/record/model/definition.d.ts +1 -7
  231. package/dist/record/model/identifiers.cjs +2 -3
  232. package/dist/record/model/identifiers.cjs.map +1 -1
  233. package/dist/record/model/identifiers.d.cts +1 -3
  234. package/dist/record/model/identifiers.d.mts +1 -3
  235. package/dist/record/model/identifiers.d.ts +1 -3
  236. package/dist/record/model/identifiers.js +36 -38
  237. package/dist/record/model/index.js +60 -62
  238. package/dist/record/platform/node.cjs +17 -7
  239. package/dist/record/platform/node.cjs.map +1 -1
  240. package/dist/record/platform/services.cjs.map +1 -1
  241. package/dist/record/platform/services.d.cts +8 -3
  242. package/dist/record/platform/services.d.mts +8 -3
  243. package/dist/record/platform/services.d.ts +8 -3
  244. package/dist/record/reader/format.cjs +16 -65
  245. package/dist/record/reader/format.cjs.map +1 -1
  246. package/dist/record/reader/format.d.cts +5 -9
  247. package/dist/record/reader/format.d.mts +5 -9
  248. package/dist/record/reader/format.d.ts +5 -9
  249. package/dist/record/reader/index.js +10 -8
  250. package/dist/record/reader/runtime.cjs +63 -32
  251. package/dist/record/reader/runtime.cjs.map +1 -1
  252. package/dist/record/reader/runtime.d.cts +40 -4
  253. package/dist/record/reader/runtime.d.mts +40 -4
  254. package/dist/record/reader/runtime.d.ts +40 -4
  255. package/dist/record/reader/runtime.js +6 -4
  256. package/dist/report/assets/enhance.js +5 -5
  257. package/dist/report/assets/styles.css +190 -24
  258. package/dist/report/built-in/result-components.cjs +8 -5
  259. package/dist/report/built-in/result-components.cjs.map +1 -1
  260. package/dist/report/built-in/standard.cjs +3 -0
  261. package/dist/report/built-in/standard.cjs.map +1 -1
  262. package/dist/report/built-in/standard.d.cts +2 -0
  263. package/dist/report/built-in/standard.d.mts +2 -0
  264. package/dist/report/built-in/standard.d.ts +2 -0
  265. package/dist/report/client-dist/app.js +53 -0
  266. package/dist/report/components/attempt-detail/compute.cjs +108 -231
  267. package/dist/report/components/attempt-detail/compute.cjs.map +1 -1
  268. package/dist/report/components/attempt-detail/compute.d.cts +11 -45
  269. package/dist/report/components/attempt-detail/compute.d.mts +11 -45
  270. package/dist/report/components/attempt-detail/compute.d.ts +11 -45
  271. package/dist/report/components/attempt-detail/compute.js +2 -4
  272. package/dist/report/components/attempt-detail/content.cjs +4 -4
  273. package/dist/report/components/attempt-detail/content.cjs.map +1 -1
  274. package/dist/report/components/attempt-detail/validate.cjs +47 -4
  275. package/dist/report/components/attempt-detail/validate.cjs.map +1 -1
  276. package/dist/report/components/entity-lists/compute.cjs +9 -15
  277. package/dist/report/components/entity-lists/compute.cjs.map +1 -1
  278. package/dist/report/components/entity-lists/content.cjs +53 -40
  279. package/dist/report/components/entity-lists/content.cjs.map +1 -1
  280. package/dist/report/components/entity-lists/index.cjs +1 -3
  281. package/dist/report/components/entity-lists/index.cjs.map +1 -1
  282. package/dist/report/components/experiment-detail/compute.cjs +4 -6
  283. package/dist/report/components/experiment-detail/compute.cjs.map +1 -1
  284. package/dist/report/components/summaries/index.cjs +5 -1
  285. package/dist/report/components/summaries/index.cjs.map +1 -1
  286. package/dist/report/definition/cell.cjs +14 -7
  287. package/dist/report/definition/cell.cjs.map +1 -1
  288. package/dist/report/definition/cell.d.cts +4 -0
  289. package/dist/report/definition/cell.d.mts +4 -0
  290. package/dist/report/definition/cell.d.ts +4 -0
  291. package/dist/report/definition/primitives/assertion-evidence.cjs +96 -0
  292. package/dist/report/definition/primitives/assertion-evidence.cjs.map +1 -0
  293. package/dist/report/definition/primitives/assertion-evidence.d.cts +11 -0
  294. package/dist/report/definition/primitives/assertion-evidence.d.mts +11 -0
  295. package/dist/report/definition/primitives/assertion-evidence.d.ts +11 -0
  296. package/dist/report/definition/primitives/assertion-evidence.js +6 -0
  297. package/dist/report/definition/primitives/assertion-evidence.js.map +1 -0
  298. package/dist/report/definition/primitives/conversation.cjs +7 -0
  299. package/dist/report/definition/primitives/conversation.cjs.map +1 -1
  300. package/dist/report/definition/primitives/conversation.d.cts +2 -0
  301. package/dist/report/definition/primitives/conversation.d.mts +2 -0
  302. package/dist/report/definition/primitives/conversation.d.ts +2 -0
  303. package/dist/report/definition/primitives/turn-trace.cjs +53 -3
  304. package/dist/report/definition/primitives/turn-trace.cjs.map +1 -1
  305. package/dist/report/definition/primitives.cjs +14 -1
  306. package/dist/report/definition/primitives.cjs.map +1 -1
  307. package/dist/report/definition/report.cjs +16 -8
  308. package/dist/report/definition/report.cjs.map +1 -1
  309. package/dist/report/definition/report.d.cts +6 -0
  310. package/dist/report/definition/report.d.mts +6 -0
  311. package/dist/report/definition/report.d.ts +6 -0
  312. package/dist/report/definition/table-text.cjs +12 -3
  313. package/dist/report/definition/table-text.cjs.map +1 -1
  314. package/dist/report/definition/table-text.d.cts +6 -1
  315. package/dist/report/definition/table-text.d.mts +6 -1
  316. package/dist/report/definition/table-text.d.ts +6 -1
  317. package/dist/report/execution/model.cjs +6 -14
  318. package/dist/report/execution/model.cjs.map +1 -1
  319. package/dist/report/execution/model.d.cts +5 -10
  320. package/dist/report/execution/model.d.mts +5 -10
  321. package/dist/report/execution/model.d.ts +5 -10
  322. package/dist/report/execution/model.js +6 -6
  323. package/dist/report/execution/paths.cjs +0 -11
  324. package/dist/report/execution/paths.cjs.map +1 -1
  325. package/dist/report/execution/paths.d.cts +0 -1
  326. package/dist/report/execution/paths.d.mts +0 -1
  327. package/dist/report/execution/paths.d.ts +0 -1
  328. package/dist/report/execution/paths.js +6 -8
  329. package/dist/report/host/execute.cjs +13 -22
  330. package/dist/report/host/execute.cjs.map +1 -1
  331. package/dist/report/host/execute.d.cts +1 -4
  332. package/dist/report/host/execute.d.mts +1 -4
  333. package/dist/report/host/execute.d.ts +1 -4
  334. package/dist/report/host/from-record.cjs +3 -0
  335. package/dist/report/host/from-record.cjs.map +1 -1
  336. package/dist/report/host/from-record.d.cts +4 -1
  337. package/dist/report/host/from-record.d.mts +4 -1
  338. package/dist/report/host/from-record.d.ts +4 -1
  339. package/dist/report/host/site-assets.cjs +1 -2
  340. package/dist/report/host/site-assets.cjs.map +1 -1
  341. package/dist/report/host/site-assets.d.cts +0 -1
  342. package/dist/report/host/site-assets.d.mts +0 -1
  343. package/dist/report/host/site-assets.d.ts +0 -1
  344. package/dist/report/host/site-assets.js +2 -4
  345. package/dist/report/host/static.cjs +71 -346
  346. package/dist/report/host/static.cjs.map +1 -1
  347. package/dist/report/host/static.d.cts +1 -3
  348. package/dist/report/host/static.d.mts +1 -3
  349. package/dist/report/host/static.d.ts +1 -3
  350. package/dist/report/host/static.js +2 -2
  351. package/dist/report/host/view-session.cjs.map +1 -1
  352. package/dist/report/host/view-session.d.cts +1 -1
  353. package/dist/report/host/view-session.d.mts +1 -1
  354. package/dist/report/host/view-session.d.ts +1 -1
  355. package/dist/report/model/locale.cjs +1 -1
  356. package/dist/report/model/locale.cjs.map +1 -1
  357. package/dist/report/model/locale.d.cts +1 -1
  358. package/dist/report/model/locale.d.mts +1 -1
  359. package/dist/report/model/locale.d.ts +1 -1
  360. package/dist/report/model/pricing.cjs +2 -2
  361. package/dist/report/model/pricing.cjs.map +1 -1
  362. package/dist/report/react/enhance.js +5 -5
  363. package/dist/report/react/styles.css +190 -24
  364. package/dist/runner/adoption.cjs +4 -7
  365. package/dist/runner/adoption.cjs.map +1 -1
  366. package/dist/runner/attempt-resources.cjs +60 -0
  367. package/dist/runner/attempt-resources.cjs.map +1 -0
  368. package/dist/runner/attempt-resources.d.cts +13 -0
  369. package/dist/runner/attempt-resources.d.mts +13 -0
  370. package/dist/runner/attempt-resources.d.ts +13 -0
  371. package/dist/runner/attempt-resources.js +6 -0
  372. package/dist/runner/attempt-resources.js.map +1 -0
  373. package/dist/runner/attempt.cjs +37 -3
  374. package/dist/runner/attempt.cjs.map +1 -1
  375. package/dist/runner/feedback/failure.cjs +77 -2
  376. package/dist/runner/feedback/failure.cjs.map +1 -1
  377. package/dist/runner/feedback/failure.d.cts +2 -1
  378. package/dist/runner/feedback/failure.d.mts +2 -1
  379. package/dist/runner/feedback/failure.d.ts +2 -1
  380. package/dist/runner/project-current.cjs +2 -13
  381. package/dist/runner/project-current.cjs.map +1 -1
  382. package/dist/runner/project-current.d.cts +4 -2
  383. package/dist/runner/project-current.d.mts +4 -2
  384. package/dist/runner/project-current.d.ts +4 -2
  385. package/dist/runner/reporters/braintrust.cjs +7 -7
  386. package/dist/runner/reporters/braintrust.cjs.map +1 -1
  387. package/dist/runner/reuse-readback.cjs +3 -4
  388. package/dist/runner/reuse-readback.cjs.map +1 -1
  389. package/dist/runner/run.cjs +5 -2
  390. package/dist/runner/run.cjs.map +1 -1
  391. package/dist/sandbox/backend.cjs +32 -2
  392. package/dist/sandbox/backend.cjs.map +1 -1
  393. package/dist/sandbox/backend.d.cts +12 -1
  394. package/dist/sandbox/backend.d.mts +12 -1
  395. package/dist/sandbox/backend.d.ts +12 -1
  396. package/dist/sandbox/backend.js +28 -22
  397. package/dist/sandbox/docker.cjs +140 -0
  398. package/dist/sandbox/docker.cjs.map +1 -1
  399. package/dist/sandbox/docker.d.cts +3 -1
  400. package/dist/sandbox/docker.d.mts +3 -1
  401. package/dist/sandbox/docker.d.ts +3 -1
  402. package/dist/sandbox/e2b.cjs +42 -0
  403. package/dist/sandbox/e2b.cjs.map +1 -1
  404. package/dist/sandbox/e2b.d.cts +2 -0
  405. package/dist/sandbox/e2b.d.mts +2 -0
  406. package/dist/sandbox/e2b.d.ts +2 -0
  407. package/dist/sandbox/local.cjs +64 -0
  408. package/dist/sandbox/local.cjs.map +1 -1
  409. package/dist/sandbox/local.d.cts +3 -1
  410. package/dist/sandbox/local.d.mts +3 -1
  411. package/dist/sandbox/local.d.ts +3 -1
  412. package/dist/sandbox/managed-process.cjs +49 -0
  413. package/dist/sandbox/managed-process.cjs.map +1 -0
  414. package/dist/sandbox/managed-process.d.cts +11 -0
  415. package/dist/sandbox/managed-process.d.mts +11 -0
  416. package/dist/sandbox/managed-process.d.ts +11 -0
  417. package/dist/sandbox/managed-process.js +6 -0
  418. package/dist/sandbox/managed-process.js.map +1 -0
  419. package/dist/sandbox/types.cjs.map +1 -1
  420. package/dist/sandbox/types.d.cts +24 -0
  421. package/dist/sandbox/types.d.mts +24 -0
  422. package/dist/sandbox/types.d.ts +24 -0
  423. package/dist/sandbox/vercel.cjs +1 -0
  424. package/dist/sandbox/vercel.cjs.map +1 -1
  425. package/dist/sandbox/vercel.d.cts +1 -0
  426. package/dist/sandbox/vercel.d.mts +1 -0
  427. package/dist/sandbox/vercel.d.ts +1 -0
  428. package/dist/view/server.cjs +2 -37
  429. package/dist/view/server.cjs.map +1 -1
  430. package/dist/view/server.d.cts +0 -3
  431. package/dist/view/server.d.mts +0 -3
  432. package/dist/view/server.d.ts +0 -3
  433. package/docs-site/zh/reference/builtin-agents.mdx +7 -7
  434. package/docs-site/zh/reference/official-adapters.mdx +4 -4
  435. package/docs-site/zh/reference/report-components.mdx +2 -2
  436. package/docs-site/zh/tutorials/configuration.mdx +2 -2
  437. package/docs-site/zh/tutorials/deploy-report-site.mdx +24 -2
  438. package/docs-site/zh/tutorials/publish-report.mdx +4 -4
  439. package/docs-site/zh/tutorials/sandbox-agent.mdx +5 -5
  440. package/docs-site/zh/tutorials/theming.mdx +2 -2
  441. package/package.json +4 -6
  442. package/dist/record/migration/index.cjs +0 -5
  443. package/dist/record/migration/index.cjs.map +0 -1
  444. package/dist/record/migration/index.d.cts +0 -11
  445. package/dist/record/migration/index.d.mts +0 -11
  446. package/dist/record/migration/index.d.ts +0 -11
  447. package/dist/record/migration/index.js +0 -6
  448. package/dist/record/migration/index.js.map +0 -1
  449. package/dist/report/host/site-runtime.cjs +0 -92
  450. package/dist/report/host/site-runtime.cjs.map +0 -1
  451. package/dist/report/host/site-runtime.d.cts +0 -9
  452. package/dist/report/host/site-runtime.d.mts +0 -9
  453. package/dist/report/host/site-runtime.d.ts +0 -9
  454. package/dist/report/host/site-runtime.js +0 -10
  455. package/dist/report/host/site-runtime.js.map +0 -1
  456. package/dist/view/client-dist/app.css +0 -2
  457. package/dist/view/client-dist/app.js +0 -49
  458. package/dist/view/data.cjs +0 -3
  459. package/dist/view/data.cjs.map +0 -1
  460. package/dist/view/data.d.cts +0 -9
  461. package/dist/view/data.d.mts +0 -9
  462. package/dist/view/data.d.ts +0 -9
  463. package/dist/view/data.js +0 -4
  464. package/dist/view/data.js.map +0 -1
  465. package/dist/view/index.cjs +0 -24
  466. package/dist/view/index.cjs.map +0 -1
  467. package/dist/view/index.d.cts +0 -9
  468. package/dist/view/index.d.mts +0 -9
  469. package/dist/view/index.d.ts +0 -9
  470. package/dist/view/index.js +0 -28
  471. package/dist/view/index.js.map +0 -1
  472. package/dist/view/report-view-cache.cjs +0 -200
  473. package/dist/view/report-view-cache.cjs.map +0 -1
  474. package/dist/view/report-view-cache.d.cts +0 -67
  475. package/dist/view/report-view-cache.d.mts +0 -67
  476. package/dist/view/report-view-cache.d.ts +0 -67
  477. package/dist/view/report-view-cache.js +0 -8
  478. package/dist/view/report-view-cache.js.map +0 -1
  479. package/dist/view/shared/types.cjs +0 -3
  480. package/dist/view/shared/types.cjs.map +0 -1
  481. package/dist/view/shared/types.d.cts +0 -51
  482. package/dist/view/shared/types.d.mts +0 -51
  483. package/dist/view/shared/types.d.ts +0 -51
  484. package/dist/view/shared/types.js +0 -4
  485. package/dist/view/shared/types.js.map +0 -1
  486. package/dist/view/site.cjs +0 -32
  487. package/dist/view/site.cjs.map +0 -1
  488. package/dist/view/site.d.cts +0 -24
  489. package/dist/view/site.d.mts +0 -24
  490. package/dist/view/site.d.ts +0 -24
  491. package/dist/view/site.js +0 -8
  492. package/dist/view/site.js.map +0 -1
  493. package/dist/view/styles.css +0 -170
  494. package/dist/view/template.html +0 -17
@@ -11,7 +11,6 @@ const skills_ts_1 = require("./skills.cjs");
11
11
  const marketplace_ts_1 = require("./marketplace.cjs");
12
12
  const native_config_ts_1 = require("./native-config.cjs");
13
13
  const codex_ts_1 = require("../o11y/otlp/mappers/codex.cjs");
14
- const command_projection_ts_1 = require("../o11y/command-projection.cjs");
15
14
  const index_ts_1 = require("../i18n/index.cjs");
16
15
  const coding_cli_versions_ts_1 = require("./coding-cli-versions.cjs");
17
16
  const mcp_ts_1 = require("./mcp.cjs");
@@ -19,10 +18,13 @@ const post_setup_ts_1 = require("./post-setup.cjs");
19
18
  const npm_staged_ts_1 = require("./npm-staged.cjs");
20
19
  const send_failures_ts_1 = require("../context/send-failures.cjs");
21
20
  const external_cause_ts_1 = require("../shared/external-cause.cjs");
21
+ const backend_ts_1 = require("../sandbox/backend.cjs");
22
+ const attempt_resources_ts_1 = require("../context/attempt-resources.cjs");
23
+ const codex_app_server_ts_1 = require("./codex-app-server.cjs");
22
24
  // ───────────────────────────────────────────────────────────────────────────
23
25
  // OpenAI Codex CLI 的 agent adapter(沙箱型)。
24
26
  //
25
- // 连接方式:在沙箱里 spawn `codex exec --json`,stdout JSONL parseCodex → 标准事件流。
27
+ // 连接方式:在沙箱里维护 Codex app-server stdio,原生通知 → 标准事件流。
26
28
  // 配置:鉴权本地(config / env),模型交给实验(ctx.model),推理努力程度经 ctx.reasoningEffort,
27
29
  // 其余参数经 ctx.flags。
28
30
  // 扩展(skill / plugin / MCP)是构造参数,setup 翻译成 codex 的原生形态并写 manifest。
@@ -164,8 +166,8 @@ function codexPlatformPackage(platform, version) {
164
166
  // 的 Docker/E2B 制品。
165
167
  const CODEX_PLUGIN_HOOK_SAFE_CLI_VERSION = "0.146.0";
166
168
  function codexAgent(config) {
167
- const getApiKey = () => config?.apiKey ?? (0, util_ts_1.requireEnv)("OPENAI_API_KEY");
168
- const getBaseUrl = () => config?.baseUrl ?? (0, util_ts_1.getEnv)("OPENAI_BASE_URL");
169
+ const getApiKey = () => config?.apiKey ?? (0, util_ts_1.requireEnv)("CODEX_API_KEY");
170
+ const getBaseUrl = () => config?.baseUrl ?? (0, util_ts_1.getEnv)("CODEX_BASE_URL");
169
171
  // PATH 是 Sandbox 受管变量,在 factory 构造时(link/配置校验期)同步拒绝,不留到 setup()
170
172
  // 才炸,也不静默丢弃——被覆盖的 PATH 会让 hooks / 子进程读到错误的可执行文件而零报错
171
173
  // (见 docs/feature/sandbox/library.md「PATH:受管变量与 pathPrepend」)。
@@ -206,6 +208,7 @@ function codexAgent(config) {
206
208
  ensure,
207
209
  installers: [installer],
208
210
  setup: (sb, ctx) => effect_1.Effect.runPromise(effect_1.Effect.scoped(effect_1.Effect.gen(function* () {
211
+ yield* effect_1.Effect.try({ try: () => (0, backend_ts_1.requireManagedProcessCapability)(sb, "codex"), catch: (cause) => cause });
209
212
  // 用户的原生配置文件:本地读原始字节 → 验 TOML 语法与保留键。字节 SHA-256 进
210
213
  // manifest 与安装 checkpoint key(见 native-config.ts 的 nativeConfigCheckpointItem)。
211
214
  let nativeConfig;
@@ -248,7 +251,7 @@ function codexAgent(config) {
248
251
  ? `[model_providers.s2a]\n` +
249
252
  `name = "s2a"\n` +
250
253
  `base_url = "${base}"\n` +
251
- `env_key = "OPENAI_API_KEY"\n` +
254
+ `env_key = "CODEX_API_KEY"\n` +
252
255
  `wire_api = "responses"\n`
253
256
  : "";
254
257
  if (!nativeConfig) {
@@ -348,6 +351,7 @@ function codexAgent(config) {
348
351
  // preTeardown 与 postSetup 成对:LIFO 镜像,先于 agent 自己的收尾步骤执行。
349
352
  // codex 目前没有其它收尾步骤,这段就是整个 teardown。
350
353
  await (0, post_setup_ts_1.runPreTeardownHooks)(sb, ctx, "codex", config?.preTeardown);
354
+ await (0, attempt_resources_ts_1.attemptResources)(ctx)?.shutdownAll(ctx.signal);
351
355
  },
352
356
  tracing: {
353
357
  protocol: "http/json",
@@ -364,71 +368,18 @@ function codexAgent(config) {
364
368
  },
365
369
  },
366
370
  async send(input, ctx) {
367
- const sb = ctx.sandbox;
368
- // hook trust bypass 是 runtime-only(config.toml 设不了):headless 下 codex 对非 managed
369
- // 来源 hook 的交互式授信永远无人应答,不带它插件装的 hook 会被静默跳过、零报错
370
- // (见 memory/codex-hook-trust-headless-silent-skip.md)。沙箱内 hook 来源全部由实验配置
371
- // 声明,与 approvals/sandbox bypass 同一信任层级。
372
- const flags = "--json --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check --dangerously-bypass-hook-trust";
373
- const prompt = shared_ts_1.shared.shellQuote(input.text);
374
- const resuming = ctx.session.id;
375
- const cmd = resuming
376
- ? `${shared_ts_1.shared.agentBin("codex")} exec resume ${ctx.session.id} ${flags} ${prompt}`
377
- : `${shared_ts_1.shared.agentBin("codex")} exec ${flags} ${prompt}`;
378
- // `codex exec --json` 持续写出 ThreadEvent JSONL。把它压成短 step 送进 runner
379
- // progress,human dashboard 因而能显示真正的 tool / reasoning / assistant 活动;完整
380
- // transcript 仍在命令结束后一次解析并落入 events artifact,不能让 live 文案变成第二份结果。
381
- const onStdout = codexProgressReporter(ctx);
382
371
  const apiKey = getApiKey();
383
- const res = await sb.runShell(cmd, {
384
- // ambient env 由 Codex 进程自然传给 SessionStart/SessionStop hooks、env_http_headers
385
- // 与 agent 调起的 nmem 等子进程。鉴权字段最后覆盖,避免 env 形成第二条 key 来源。
386
- env: { ...agentEnv, OPENAI_API_KEY: apiKey },
387
- sensitiveValues: [apiKey, ...agentEnvSensitiveValues],
388
- stream: true,
389
- onStdout,
390
- });
391
- const raw = shared_ts_1.shared.extractJsonlFromStdout(res.stdout);
392
- ctx.session.capture(shared_ts_1.shared.codexThreadId(res.stdout));
393
- const parsed = shared_ts_1.shared.parseCodex(raw);
394
- const events = [...parsed.events];
395
- let turnEvidenceCoverage;
396
- if (!raw?.trim()) {
397
- const reason = "Codex JSONL transcript was unavailable; tool trajectory was not observed.";
398
- turnEvidenceCoverage = {
399
- events: { status: "unavailable", reason },
400
- actions: { status: "unavailable", reason },
401
- usage: { status: "unavailable", reason },
402
- };
403
- }
404
- else if (!parsed.parseSuccess) {
405
- const reason = "Some Codex JSONL transcript lines could not be parsed.";
406
- turnEvidenceCoverage = {
407
- events: { status: "partial", reason },
408
- actions: { status: "partial", reason },
372
+ return (0, codex_app_server_ts_1.sendCodexAppServer)(input, ctx, {
373
+ ...agentEnv,
374
+ CODEX_API_KEY: apiKey,
375
+ ...ctx.telemetry?.env,
376
+ }, (raw, events, nativeText) => {
377
+ const code = codexCapacityCode(raw);
378
+ return {
379
+ acceptance: codexAcceptance(raw, events, nativeText),
380
+ ...(code === undefined ? {} : { cause: (0, external_cause_ts_1.normalizeExternalCause)({ code }) }),
409
381
  };
410
- }
411
- else {
412
- turnEvidenceCoverage = (0, command_projection_ts_1.unclassifiedToolActionsCoverage)(events);
413
- }
414
- if (res.exitCode !== 0) {
415
- throw (0, send_failures_ts_1.makeSendFailure)({
416
- acceptance: codexAcceptance(raw, events, res.stderr),
417
- message: shared_ts_1.shared.diagnoseFailure(res, parsed.events, raw),
418
- ...(codexCapacityCode(raw) !== undefined
419
- ? { cause: (0, external_cause_ts_1.normalizeExternalCause)({ code: codexCapacityCode(raw) }) }
420
- : {}),
421
- events,
422
- usage: parsed.usage,
423
- process: res,
424
- });
425
- }
426
- return {
427
- events,
428
- usage: parsed.usage,
429
- status: "completed",
430
- ...(turnEvidenceCoverage === undefined ? {} : { evidenceCoverage: turnEvidenceCoverage }),
431
- };
382
+ });
432
383
  },
433
384
  }), config?.postSetup, config?.preTeardown);
434
385
  }
@@ -1 +1 @@
1
- {"version":3,"file":"codex.js","sourceRoot":"","sources":["codex.ts"],"names":[],"mappings":";;AAwPA,gCA4QC;AAyED,wCAGC;AAhlBD,2DAAqE;AACrE,mCAAgC;AAChC,4CAAkD;AAClD,wCAAgD;AAChD,2CAAqC;AACrC,2CAAuH;AACvH,qDAAyD;AACzD,yDAAgJ;AAChJ,4DAA8D;AAC9D,yEAAgF;AAChF,+CAAqC;AACrC,qEAAqG;AACrG,qCAA2E;AAC3E,mDAA8G;AAC9G,mDAAwD;AAIxD,kEAA4H;AAC5H,mEAAqE;AAErE,8EAA8E;AAC9E,yCAAyC;AACzC,EAAE;AACF,yEAAyE;AACzE,uEAAuE;AACvE,mBAAmB;AACnB,kEAAkE;AAClE,8EAA8E;AAC9E,kEAAkE;AAClE,MAAM,SAAS,GAAG,gBAAgB,CAAC;AACnC;;;GAGG;AACH,MAAM,oBAAoB,GAAG;IACzB,OAAO;IACP,gBAAgB;IAChB,iBAAiB;IACjB,wBAAwB;IACxB,aAAa;IACb,MAAM;CACA,CAAC;AAiFX,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACjC,kBAAkB;IAClB,mBAAmB;IACnB,oBAAoB;IACpB,mBAAmB;IACnB,gBAAgB;IAChB,kBAAkB;CACrB,CAAC,CAAC;AACH,SAAS,mBAAmB,CAAC,KAAc;IACvC,IAAI,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,SAAS,CAAC;IACrB,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;AAC7D,CAAC;AACD,SAAS,iBAAiB,CAAC,GAAuB;IAC9C,IAAI,GAAG,KAAK,SAAS;QACjB,OAAO,SAAS,CAAC;IACrB,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC;YACD,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;gBACnC,SAAS;YACb,MAAM,MAAM,GAAG,KAA2C,CAAC;YAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC3B,MAAM,UAAU,GAAG;gBACf,MAAM,CAAC,IAAI;gBACX,MAAM,CAAC,MAAM;gBACb,MAAM,CAAC,IAAI;gBACX,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAE,KAA4C,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;gBACnG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAE,KAA4C,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBACrG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAE,KAA4C,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;aACtG,CAAC;YACF,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,KAAK,SAAS,IAAI,oBAAoB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;YACrI,IAAI,IAAI,KAAK,SAAS;gBAClB,OAAO,IAAI,CAAC;QACpB,CAAC;QACD,MAAM,CAAC;YACH,gFAAgF;QACpF,CAAC;IACL,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AACD,SAAS,oBAAoB,CAAC,GAAuB;IACjD,IAAI,GAAG,KAAK,SAAS;QACjB,OAAO,EAAE,CAAC;IACd,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACjC,IAAI,CAAC;YACD,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;gBACnC,SAAS;YACb,MAAM,MAAM,GAAG,KAA2C,CAAC;YAC3D,IAAI,MAAM,CAAC,IAAI,KAAK,aAAa,IAAI,MAAM,CAAC,IAAI,KAAK,iBAAiB;gBAClE,SAAS;YACb,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC3B,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACrC,MAAM,OAAO,GAAI,KAA4C,CAAC,OAAO,CAAC;gBACtE,IAAI,OAAO,OAAO,KAAK,QAAQ;oBAC3B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,CAAC;QACL,CAAC;QACD,MAAM,CAAC;YACH,gFAAgF;QACpF,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AACD,MAAM,mBAAmB,GAAG,8FAA8F,CAAC;AAC3H,SAAS,wBAAwB,CAAC,OAAoB;IAClD,IAAI,OAAO,CAAC,UAAU,KAAK,UAAU;QACjC,OAAO,KAAK,CAAC;IACjB,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,IAAI,IAAA,2CAAwB,EAAC,OAAO,CAAC,MAAM,CAAC,KAAK,SAAS;QACtF,OAAO,KAAK,CAAC;IACjB,KAAK,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,KAAK,SAAS,GAAG,CAAC;QACnD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/F,IAAI,IAAI,KAAK,SAAS,IAAI,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC;gBACpD,OAAO,IAAI,CAAC;YAChB,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;YACrE,SAAS;QACb,CAAC;QACD,KAAK,GAAG,SAAS,CAAC;IACtB,CAAC;IACD,OAAO,mBAAmB,CAAC,IAAI,CAAC,IAAA,kCAAe,EAAC,OAAO,CAAC,CAAC,CAAC;AAC9D,CAAC;AACD,SAAS,wBAAwB,CAAC,OAAoB;IAClD,OAAO,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AACzG,CAAC;AACD,SAAS,eAAe,CAAC,GAAuB,EAAE,MAAoD,EAAE,eAAe,GAAG,EAAE;IACxH,MAAM,UAAU,GAAG,IAAA,2CAAwB,EAAC,MAAM,CAAC,CAAC;IACpD,IAAI,UAAU,KAAK,SAAS;QACxB,OAAO,SAAS,CAAC;IACrB,OAAO,iBAAiB,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,mBAAmB,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,GAAG,CAAC,KAAK,eAAe,EAAE,CAAC;QACvH,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,UAAU,CAAC;AACrB,CAAC;AACD;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,QAA+B,EAAE,OAAe;IAI1E,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,KAAK,OAAO,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK;QAC7D,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,2BAA2B,EAAE;QAC9D,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,OAAO,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO;YAClD,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,4BAA4B,EAAE;YACjE,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK;gBACjD,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,qBAAqB,EAAE;gBACzD,CAAC,CAAC,QAAQ,CAAC,EAAE,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO;oBACnD,CAAC,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,sBAAsB,EAAE;oBAC5D,CAAC,CAAC,SAAS,CAAC;IAC5B,IAAI,MAAM,KAAK,SAAS;QACpB,OAAO,SAAS,CAAC;IACrB,OAAO;QACH,IAAI,EAAE,iBAAiB,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE;QACjD,OAAO,EAAE,UAAU,MAAM,CAAC,MAAM,YAAY;KAC/C,CAAC;AACN,CAAC;AACD,gEAAgE;AAChE,gEAAgE;AAChE,mDAAmD;AACnD,mBAAmB;AACnB,MAAM,kCAAkC,GAAG,SAAS,CAAC;AACrD,SAAgB,UAAU,CAAC,MAAoB;IAC3C,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,IAAI,IAAA,oBAAU,EAAC,gBAAgB,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,IAAI,IAAA,gBAAM,EAAC,iBAAiB,CAAC,CAAC;IACtE,gEAAgE;IAChE,oDAAoD;IACpD,+DAA+D;IAC/D,IAAI,MAAM,EAAE,GAAG,IAAI,MAAM,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACtC,MAAM,IAAI,SAAS,CAAC,IAAA,YAAC,EAAC,sBAAsB,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,uDAAuD;IACvD,uEAAuE;IACvE,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3D,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM;QACtC,CAAC,CAAC,kCAAkC;QACpC,CAAC,CAAC,kDAAyB,CAAC;IAChC,MAAM,iBAAiB,GAAG,MAAM,EAAE,OAAO,EAAE,MAAM;QAC7C,CAAC,CAAC,qBAAqB;QACvB,CAAC,CAAC,MAAM,CAAC,uDAA8B,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAA,qCAAqB,EAAC;QAChD,QAAQ,EAAE;YACN,KAAK,EAAE,OAAO;YACd,OAAO,EAAE,UAAU;YACnB,QAAQ,EAAE,iBAAiB;SAC9B;QACD,WAAW,EAAE,eAAe;QAC5B,GAAG,EAAE,OAAO;QACZ,eAAe,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,oBAAoB,CAAC,QAAQ,EAAE,UAAU,CAAC;QACzE,QAAQ,EAAE;YACN,QAAQ,EAAE,sBAAsB,UAAU,EAAE;YAC5C,UAAU,EAAE,wCAAwC,UAAU,EAAE;YAChE,KAAK,EAAE,aAAa,UAAU,QAAQ;SACzC;KACJ,CAAC,CAAC;IACH,OAAO,IAAA,kDAAkC,EAAC,IAAA,8BAAkB,EAAC;QACzD,IAAI,EAAE,OAAO;QACb,uDAAuD;QACvD,gBAAgB,EAAE,sCAAwB;QAC1C,UAAU,EAAE,wBAAa;QACzB,mBAAmB,EAAE,wBAAwB;QAC7C,MAAM;QACN,UAAU,EAAE,CAAC,SAAS,CAAC;QACvB,KAAK,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,eAAM,CAAC,UAAU,CAAC,eAAM,CAAC,MAAM,CAAC,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACpE,iDAAiD;YACjD,gFAAgF;YAChF,IAAI,YAA4C,CAAC;YACjD,IAAI,MAAM,EAAE,UAAU,KAAK,SAAS,EAAE,CAAC;gBACnC,YAAY,GAAG,KAAK,CAAC,CAAC,IAAA,6CAA0B,EAAC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;gBACnH,KAAK,CAAC,CAAC,eAAM,CAAC,GAAG,CAAC;oBACd,GAAG,EAAE,GAAG,EAAE,CAAC,IAAA,yCAAsB,EAAC,YAAa,EAAE;wBAC7C,KAAK,EAAE,OAAO;wBACd,KAAK,EAAE,YAAY;wBACnB,YAAY,EAAE,oBAAoB;qBACrC,CAAC;oBACF,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;iBAC1B,CAAC,CAAC;YACP,CAAC;YACD,2DAA2D;YAC3D,oDAAoD;YACpD,kCAAkC;YAClC,IAAI,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;gBAC1B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;gBAC/B,KAAK,CAAC,CAAC,eAAM,CAAC,UAAU,CAAC;oBACrB,GAAG,EAAE,GAAG,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC;oBACxC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;iBAC1B,CAAC,CAAC;YACP,CAAC;YACD,4DAA4D;YAC5D,4BAA4B;YAC5B,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,GAAG,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,MAAM,UAAU,GAAG,GAAG,CAAC,eAAe,KAAK,SAAS;gBAChD,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,6BAA6B,GAAG,CAAC,eAAe,KAAK,CAAC;YAC5D,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;YAC1B,kDAAkD;YAClD,uEAAuE;YACvE,2CAA2C;YAC3C,MAAM,uBAAuB,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,MAAM,QAAQ,GAAG,IAAI;gBACjB,CAAC,CAAC,SAAS,GAAG,0BAA0B,GAAG,UAAU;gBACrD,CAAC,CAAC,SAAS,GAAG,UAAU,CAAC;YAC7B,MAAM,aAAa,GAAG,IAAI;gBACtB,CAAC,CAAC,yBAAyB;oBACvB,gBAAgB;oBAChB,eAAe,IAAI,KAAK;oBACxB,8BAA8B;oBAC9B,0BAA0B;gBAC9B,CAAC,CAAC,EAAE,CAAC;YACT,IAAI,CAAC,YAAY,EAAE,CAAC;gBAChB,KAAK,CAAC,CAAC,eAAM,CAAC,UAAU,CAAC;oBACrB,GAAG,EAAE,GAAG,EAAE,CAAC,kBAAM,CAAC,SAAS,CAAC,EAAE,EAAE,sBAAsB,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,aAAa,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,eAAe,EAAE,uBAAuB,EAAE,CAAC;oBACjK,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;iBAC1B,CAAC,CAAC;YACP,CAAC;iBACI,CAAC;gBACF,6DAA6D;gBAC7D,8CAA8C;gBAC9C,+CAA+C;gBAC/C,kEAAkE;gBAClE,4BAA4B;gBAC5B,KAAK,CAAC,CAAC,eAAM,CAAC,UAAU,CAAC;oBACrB,GAAG,EAAE,GAAG,EAAE,CAAC,kBAAM,CAAC,SAAS,CAAC,EAAE,EAAE,sBAAsB,EAAE,QAAQ,CAAC;oBACjE,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;iBAC1B,CAAC,CAAC;gBACH,KAAK,CAAC,CAAC,IAAA,+CAA4B,EAAC,EAAE,EAAE,YAAY,EAAE,sBAAsB,CAAC,CAAC;gBAC9E,IAAI,aAAa,EAAE,CAAC;oBAChB,KAAK,CAAC,CAAC,eAAM,CAAC,UAAU,CAAC;wBACrB,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,CAAC,4DAA4D,aAAa,yBAAyB,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE,uBAAuB,EAAE,CAAC;wBACtL,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;qBAC1B,CAAC,CAAC;gBACP,CAAC;YACL,CAAC;YACD,KAAK,CAAC,CAAC,eAAM,CAAC,UAAU,CAAC;gBACrB,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;oBAClB,IAAI,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;wBAC7B,IAAA,yBAAgB,EAAC,MAAM,CAAC,UAAU,CAAC,CAAC;wBACpC,MAAM,eAAe,GAAa,EAAE,CAAC;wBACrC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU;6BAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;4BACX,qDAAqD;4BACrD,wDAAwD;4BACxD,MAAM,KAAK,GAAa,CAAC,gBAAgB,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;4BACpD,IAAI,IAAA,kBAAS,EAAC,CAAC,CAAC,EAAE,CAAC;gCACf,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;gCAC/B,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;gCAC1B,IAAI,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,CAAC;oCACzC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,gBAAgB,CAAC,CAAC;oCACnD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;wCAC3C,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wCACxB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oCAClC,CAAC;gCACL,CAAC;4BACL,CAAC;iCACI,CAAC;gCACF,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;gCACvC,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM;oCACd,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gCACrE,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;gCAClB,IAAI,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;oCACjC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC;oCAC1C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;wCACvC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;wCACxB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oCAChC,CAAC;gCACL,CAAC;4BACL,CAAC;4BACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC5B,CAAC,CAAC;6BACG,IAAI,CAAC,MAAM,CAAC,CAAC;wBAClB,MAAM,EAAE,CAAC,QAAQ,CAAC,6CAA6C,OAAO,YAAY,EAAE,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC;oBACrH,CAAC;oBACD,MAAM,QAAQ,GAAuB,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;oBACpD,IAAI,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;wBACzB,QAAQ,CAAC,MAAM,GAAG,MAAM,IAAA,yBAAa,EAAC,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;wBAC7E,qDAAqD;wBACrD,MAAM,IAAA,oCAAwB,EAAC,EAAE,EAAE,IAAA,qCAAyB,EAAC,SAAS,EAAE,IAAA,+BAAmB,EAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACnH,CAAC;oBACD,IAAI,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;wBAC1B,QAAQ,CAAC,aAAa,GAAG,MAAM,4BAA4B,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;oBACpF,CAAC;oBACD,IAAI,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;wBAC7B,6DAA6D;wBAC7D,QAAQ,CAAC,UAAU,GAAG,IAAA,2BAAkB,EAAC,MAAM,CAAC,UAAU,CAAC,CAAC;oBAChE,CAAC;oBACD,IAAI,YAAY,EAAE,CAAC;wBACf,qCAAqC;wBACrC,QAAQ,CAAC,gBAAgB,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC;oBACzG,CAAC;oBACD,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM;wBACtB,QAAQ,CAAC,aAAa,EAAE,MAAM;wBAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM;wBAC3B,QAAQ,CAAC,gBAAgB,EAAE,CAAC;wBAC5B,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;oBAC9B,CAAC;oBACD,gEAAgE;oBAChE,gBAAgB;oBAChB,MAAM,IAAA,iCAAiB,EAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;gBACjE,CAAC;gBACD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;aAC1B,CAAC,CAAC;QACP,CAAC,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;QAC5B,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG;YAClB,yDAAyD;YACzD,oCAAoC;YACpC,MAAM,IAAA,mCAAmB,EAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QACrE,CAAC;QACD,OAAO,EAAE;YACL,QAAQ,EAAE,WAAW;YACrB,KAAK,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG;gBACnB,MAAM,QAAQ,GAAG,GAAG,CAAC,SAAU,CAAC,QAAQ,CAAC;gBACzC,MAAM,IAAI,GAAG,YAAY;oBACrB,4BAA4B;oBAC5B,qBAAqB;oBACrB,+BAA+B;oBAC/B,mCAAmC;oBACnC,eAAe,QAAQ,KAAK;oBAC5B,qBAAqB,CAAC;gBAC1B,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,IAAI,OAAO,CAAC,CAAC;YAC3E,CAAC;SACJ;QACD,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG;YACjB,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;YACvB,gFAAgF;YAChF,+CAA+C;YAC/C,yEAAyE;YACzE,wCAAwC;YACxC,MAAM,KAAK,GAAG,yGAAyG,CAAC;YACxH,MAAM,MAAM,GAAG,kBAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,QAAQ;gBAChB,CAAC,CAAC,GAAG,kBAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,GAAG,CAAC,OAAO,CAAC,EAAE,IAAI,KAAK,IAAI,MAAM,EAAE;gBAChF,CAAC,CAAC,GAAG,kBAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,KAAK,IAAI,MAAM,EAAE,CAAC;YAC5D,kEAAkE;YAClE,uEAAuE;YACvE,gEAAgE;YAChE,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;YAC5C,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE;gBAC/B,6EAA6E;gBAC7E,sDAAsD;gBACtD,GAAG,EAAE,EAAE,GAAG,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE;gBAC5C,eAAe,EAAE,CAAC,MAAM,EAAE,GAAG,uBAAuB,CAAC;gBACrD,MAAM,EAAE,IAAI;gBACZ,QAAQ;aACX,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,kBAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACtD,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAM,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;YACtD,MAAM,MAAM,GAAG,kBAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,oBAAsD,CAAC;YAC3D,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC;gBACf,MAAM,MAAM,GAAG,2EAA2E,CAAC;gBAC3F,oBAAoB,GAAG;oBACnB,MAAM,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE;oBACzC,OAAO,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE;oBAC1C,KAAK,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE;iBAC3C,CAAC;YACN,CAAC;iBACI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;gBAC5B,MAAM,MAAM,GAAG,wDAAwD,CAAC;gBACxE,oBAAoB,GAAG;oBACnB,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;oBACrC,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE;iBACzC,CAAC;YACN,CAAC;iBACI,CAAC;gBACF,oBAAoB,GAAG,IAAA,uDAA+B,EAAC,MAAM,CAAC,CAAC;YACnE,CAAC;YACD,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACrB,MAAM,IAAA,kCAAe,EAAC;oBAClB,UAAU,EAAE,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;oBACpD,OAAO,EAAE,kBAAM,CAAC,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;oBACxD,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,SAAS;wBACpC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAA,0CAAsB,EAAC,EAAE,IAAI,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;wBACrE,CAAC,CAAC,EAAE,CAAC;oBACT,MAAM;oBACN,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,OAAO,EAAE,GAAG;iBACf,CAAC,CAAC;YACP,CAAC;YACD,OAAO;gBACH,MAAM;gBACN,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,WAAW;gBACnB,GAAG,CAAC,oBAAoB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,CAAC;aAC5F,CAAC;QACN,CAAC;KACJ,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;AAChD,CAAC;AACD,wDAAwD;AACxD,SAAS,qBAAqB,CAAC,GAAuC;IAClE,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,OAAO,CAAC,KAAK,EAAE,EAAE;QACb,SAAS,IAAI,KAAK,CAAC;QACnB,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACpC,SAAS,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,MAAM;gBACN,GAAG,CAAC,QAAQ,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1C,CAAC;IACL,CAAC,CAAC;AACN,CAAC;AACD,SAAS,mBAAmB,CAAC,IAAY;IACrC,IAAI,KAAyC,CAAC;IAC9C,IAAI,CAAC;QACD,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;YACrC,OAAO,SAAS,CAAC;QACrB,KAAK,GAAG,MAA4C,CAAC;IACzD,CAAC;IACD,MAAM,CAAC;QACH,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QACjC,OAAO,SAAS,CAAC;IACrB,MAAM,IAAI,GAAG,IAA0C,CAAC;IACxD,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,KAAK,gBAAgB,CAAC;IAClD,MAAM,OAAO,GAAG,CAAC,KAAc,EAAE,KAAK,GAAG,EAAE,EAAsB,EAAE;QAC/D,IAAI,OAAO,KAAK,KAAK,QAAQ;YACzB,OAAO,SAAS,CAAC;QACrB,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,IAAI,CAAC,IAAI;YACL,OAAO,SAAS,CAAC;QACrB,OAAO,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IACvE,CAAC,CAAC;IACF,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC;QACjD,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,OAAO,cAAc,CAAC,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC;IAC3E,CAAC;IACD,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;QAC/D,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,OAAO,SAAS,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,IAAI,EAAE,CAAC;IACvF,CAAC;IACD,IAAI,IAAI,KAAK,YAAY;QACrB,OAAO,SAAS,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAC3E,IAAI,IAAI,KAAK,aAAa;QACtB,OAAO,SAAS,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,mBAAmB,CAAC;IAC7E,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;IACnD,CAAC;IACD,IAAI,IAAI,KAAK,eAAe,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;QAChD,OAAO,IAAI,CAAC,CAAC,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC;IAC9D,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AACD;;;;;;;;;GASG;AACI,KAAK,UAAU,cAAc,CAAC,EAAW,EAAE,OAAmC;IACjF,MAAM,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,4BAA4B,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AACD;;;GAGG;AACH,KAAK,UAAU,gBAAgB,CAAC,EAAW,EAAE,OAAmC;IAC5E,qDAAqD;IACrD,6DAA6D;IAC7D,6CAA6C;IAC7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,sBAAsB,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;YACzC,SAAS;QACb,MAAM,yBAAyB,CAAC,EAAE,EAAE,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7D,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;AACL,CAAC;AACD,kDAAkD;AAClD,KAAK,UAAU,4BAA4B,CAAC,EAAW,EAAE,OAAmC;IACxF,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,GAAG,GAAqD,EAAE,CAAC;IACjE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC3B,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;YACnC,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,kBAAM,CAAC,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACtF,4CAA4C;YAC5C,MAAM,WAAW,GAAG,CAAC,WAAW,CAAC,MAAM,IAAI,EAAE,CAAC;iBACzC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,aAAa,kBAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;iBACrD,IAAI,CAAC,EAAE,CAAC,CAAC;YACd,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,kBAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,2BAA2B,kBAAM,CAAC,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,OAAO,GAAG,WAAW,EAAE,CAAC,CAAC;YACrJ,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CAAC,IAAA,YAAC,EAAC,0BAA0B,EAAE;oBAC1C,KAAK,EAAE,OAAO;oBACd,IAAI,EAAE,WAAW,CAAC,IAAI;oBACtB,MAAM,EAAE,WAAW,CAAC,MAAM;oBAC1B,GAAG,EAAE,WAAW,CAAC,GAAG,IAAI,WAAW;oBACnC,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC;iBACxB,CAAC,CAAC,CAAC;YACR,CAAC;YACD,sDAAsD;YACtD,4CAA4C;YAC5C,MAAM,IAAA,sCAAqB,EAAC,EAAE,EAAE;gBAC5B,KAAK,EAAE,OAAO;gBACd,WAAW,EAAE,sCAAsC;gBACnD,WAAW;gBACX,UAAU,EAAE,SAAS;aACxB,CAAC,CAAC;YACH,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACpC,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,kBAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,kBAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,IAAI,IAAI,WAAW,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;QACvI,IAAI,OAAO,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,IAAA,YAAC,EAAC,sBAAsB,EAAE;gBACtC,KAAK,EAAE,OAAO;gBACd,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,WAAW,EAAE,WAAW,CAAC,IAAI;gBAC7B,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC;aAC5B,CAAC,CAAC,CAAC;QACR,CAAC;QACD,MAAM,eAAe,GAAG,MAAM,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;QAClF,GAAG,CAAC,IAAI,CAAC;YACL,KAAK,EAAE,OAAO;YACd,WAAW,EAAE;gBACT,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,MAAM,EAAE,WAAW,CAAC,MAAM;gBAC1B,GAAG,CAAC,WAAW,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,WAAW,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACrE;YACD,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChE,CAAC,CAAC;IACP,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAgBD,SAAS,qBAAqB,CAAC,MAAc;IACzC,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACD,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC7B,CAAC;IACD,MAAM,CAAC;QACH,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAC1B,CAAC,CAAC,GAAG;QACL,CAAC,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;YAC5B,CAAC,CAAE,GAED,CAAC,SAAS;YACZ,CAAC,CAAC,SAAS,CAAC;IACpB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QACnB,OAAO,SAAS,CAAC;IACrB,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAgC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC;AAClG,CAAC;AACD,qEAAqE;AACrE,SAAS,aAAa,CAAC,KAA2B;IAC9C,MAAM,EAAE,GAAG,KAAK,CAAC,QAAQ;QACrB,KAAK,CAAC,EAAE;QACR,CAAC,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACjG,OAAO,EAAE,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC;AACD;;;GAGG;AACH,KAAK,UAAU,sBAAsB,CAAC,EAAW,EAAE,IAAY;IAC3D,MAAM,WAAW,GAAG,0BAA0B,CAAC;IAC/C,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,kBAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAChF,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,IAAA,YAAC,EAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7G,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;QAChC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI;YAC/C,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC;IACD,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,kBAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,kBAAM,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACvG,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,IAAA,YAAC,EAAC,qBAAqB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QACtG,CAAC;IACL,CAAC;AACL,CAAC;AACD;;;;;;;;GAQG;AACH,KAAK,UAAU,yBAAyB,CAAC,EAAW,EAAE,IAAY;IAC9D,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,kBAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,8BAA8B,kBAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC1G,CAAC;AACD,sDAAsD;AACtD,KAAK,UAAU,gBAAgB,CAAC,EAAW,EAAE,IAAY,EAAE,WAAmB;IAC1E,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,kBAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,qCAAqC,kBAAM,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAChI,IAAI,GAAG,CAAC,QAAQ,KAAK,CAAC;QAClB,OAAO,SAAS,CAAC;IACrB,MAAM,IAAI,GAAG,qBAAqB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,GAAG,IAAI,IAAI,WAAW,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,IAAI,IAAI,WAAW,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAC/H,OAAO,OAAO,GAAG,EAAE,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;AACtE,CAAC;AACD,SAAS,UAAU,CAAC,GAGnB,EAAE,CAAC,GAAG,EAAE;IACL,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7E,CAAC;AACD,kBAAe,UAAU,EAAE,CAAC","sourcesContent":["import { completeEvidenceCoverage } from \"../assertions/coverage.ts\";\nimport { Effect } from \"effect\";\nimport { defineSandboxAgent } from \"../define.ts\";\nimport { requireEnv, getEnv } from \"../util.ts\";\nimport { shared } from \"./shared.ts\";\nimport { appendProjectInstruction, installSkills, installedSkillNames, skillDiscoveryInstruction, } from \"./skills.ts\";\nimport { verifyMarketplaceName } from \"./marketplace.ts\";\nimport { appendNativeConfigFileEffect, assertTomlNativeConfig, loadNativeConfigFileEffect, type LoadedNativeConfig, } from \"./native-config.ts\";\nimport { mapCodexSpans } from \"../o11y/otlp/mappers/codex.ts\";\nimport { unclassifiedToolActionsCoverage } from \"../o11y/command-projection.ts\";\nimport { t } from \"../i18n/index.ts\";\nimport { DEFAULT_CODEX_CLI_VERSION, AGENT_BASELINE_RECIPE_REVISION } from \"./coding-cli-versions.ts\";\nimport { assertMcpServers, isHttpMcp, mcpManifestEntries } from \"./mcp.ts\";\nimport { registerAgentLifecycleHookCommands, runPostSetupHooks, runPreTeardownHooks, } from \"./post-setup.ts\";\nimport { createNpmCliInstaller } from \"./npm-staged.ts\";\nimport type { Agent, AgentSetupManifest, McpServer, Sandbox, SkillSpec, TurnEvidenceCoverage } from \"../types.ts\";\nimport type { SandboxCommand } from \"../sandbox/commands.ts\";\nimport type { AgentArtifactPlatform } from \"./types.ts\";\nimport { makeSendFailure, sendAcceptanceFromEvents, sendFailureText, type SendFailure, } from \"../context/send-failures.ts\";\nimport { normalizeExternalCause } from \"../shared/external-cause.ts\";\nimport type { FailureClass } from \"../shared/failure-class.ts\";\n// ───────────────────────────────────────────────────────────────────────────\n// OpenAI Codex CLI 的 agent adapter(沙箱型)。\n//\n// 连接方式:在沙箱里 spawn `codex exec --json`,stdout JSONL → parseCodex → 标准事件流。\n// 配置:鉴权本地(config / env),模型交给实验(ctx.model),推理努力程度经 ctx.reasoningEffort,\n// 其余参数经 ctx.flags。\n// 扩展(skill / plugin / MCP)是构造参数,setup 翻译成 codex 的原生形态并写 manifest。\n// ───────────────────────────────────────────────────────────────────────────\n/** codex 的 skill 目录(`skills` 生态的「通用」目录);codex 不原生扫描它,靠下面的发现指引。 */\nconst SKILL_DIR = \".agents/skills\";\n/**\n * `configFile` 的保留键:model / provider 路由 / 推理努力归 experiment 与 Adapter 的生成层,\n * MCP 表与 OTel 导出归 Adapter。清单定稿见 docs/feature/adapters/sdk/codex-cli/README.md。\n */\nconst RESERVED_CONFIG_KEYS = [\n \"model\",\n \"model_provider\",\n \"model_providers\",\n \"model_reasoning_effort\",\n \"mcp_servers\",\n \"otel\",\n] as const;\n/**\n * Codex 的原生 Plugin —— **只属于 Codex**,不能传给 Claude Code(它有自己的\n * {@link import(\"./claude-code.ts\").ClaudeCodePluginSpec})。字段当前相似不等于同一个类型:\n * 任一方的 Marketplace 鉴权、锁文件、选择规则或安装参数变化时,另一方不必接受无意义字段。\n */\nexport interface CodexPluginSpec {\n marketplace: {\n /** 目标仓库 manifest 声明的真实 name;CLI 不支持由调用方另取连接别名。 */\n name: string;\n /** Marketplace 来源:`owner/repo`、Git URL 或本地路径。 */\n source: string;\n /** 固定 Marketplace 的 Tag、Commit 或 Branch(→ `codex plugin marketplace add --ref`)。 */\n ref?: string;\n /**\n * sparse 拉取的路径列表,每项生成一个 `codex plugin marketplace add --sparse <path>`\n * (codex 的 `--sparse` 必须带路径参数、可重复):大仓库只取插件所需路径,省略或空数组即全量 clone。\n * 只影响拉取速度,不影响装出来的内容;manifest 不记录它。\n */\n sparse?: readonly string[];\n };\n /** Marketplace 中的 Plugin 名。 */\n name: string;\n}\nexport interface CodexConfig {\n /** 代理 / OpenAI API key。省略时读 OPENAI_API_KEY env。 */\n apiKey?: string;\n /** OpenAI 兼容代理 base URL(如 https://s2a.example.com/v1)。省略时读 OPENAI_BASE_URL env。 */\n baseUrl?: string;\n /**\n * 注入每次 Codex CLI 进程的额外环境变量。首轮 `codex exec` 与续轮 `codex exec resume`\n * 使用同一份声明;Codex 启动的 lifecycle Hook、MCP 动态 header 与命令子进程都会继承。\n * 值只经 Sandbox command options 传入,不拼进 shell 文本或写入 setup manifest,并全部按\n * 潜在敏感值从 timing / execution / error 证据中脱敏。`OPENAI_API_KEY` 仍由 `apiKey` 或\n * 宿主同名环境变量提供,Adapter 的鉴权值会覆盖这里的同名键。\n * env value 不进入 carry 身份。会改变被测行为的非敏感值必须同时声明在 Experiment flags\n * 或所属 Plugin identity;只轮换凭据不会让旧结果失效。\n * `PATH` 是 Sandbox 受管变量,不接受经这里声明——出现即在 factory 构造时报错,改用\n * Sandbox factory 的 `pathPrepend`(见 docs/feature/sandbox/library.md)。\n */\n env?: Readonly<globalThis.Record<string, string>>;\n /**\n * 额外 MCP server(每个 Sandbox setup 时追加进 ~/.codex/config.toml)。\n * stdio 形态(command/args/env)写 [mcp_servers.<name>] 的 command 行;\n * Streamable HTTP 形态(url/headers)写 url 行,headers 进 [mcp_servers.<name>.http_headers] 子表。\n */\n mcpServers?: readonly McpServer[];\n /**\n * 装进 Sandbox 的 Skill(本地目录/文件,或 repo + 可钉 ref + 可选启用集)。\n * 落在 `.agents/skills/<name>/`,并写一段发现指引进 AGENTS.md —— codex 没有 Claude Code 那种\n * 原生 Skill 工具,只把文件装进去它不会自己去读(见 memory/codex-no-native-skill-tool.md)。\n */\n skills?: readonly SkillSpec[];\n /** Codex 原生 Plugin(先连 Marketplace,再从中装指定 Plugin)。 */\n plugins?: readonly CodexPluginSpec[];\n /**\n * 一份完整的 Codex `config.toml`(官方 TOML 格式)在本地项目里的路径 —— 相对运行\n * niceeval 的项目根(含 `niceeval.config.ts` 的目录)解析,不是 Sandbox 内路径;只接受\n * 项目根内的相对路径,包含 `..` 的路径、绝对路径、`~` 路径和解析后逃出项目根的符号链接\n * 都在 setup 阶段报错。原始字节原样并入 Sandbox 里原本为空的用户级 `~/.codex/config.toml`\n * (不继承宿主机配置、不解析后重写);保留键 `model`、`model_provider`、`model_providers`、\n * `model_reasoning_effort`、`mcp_servers`、`otel` 出现在文件里 setup 报错。manifest 只记\n * 项目相对路径与字节 SHA-256,不落正文。\n */\n configFile?: string;\n /**\n * 安装后按数组顺序运行的用户 Hook(复用 SandboxCommand 的窄上下文):在写主配置、挂 MCP、\n * 装 Skills / Plugin、写 manifest 全部完成后执行,适合跑插件自带的 setup 脚本这类\n * 「安装产物就位后才能跑」的过程动作。抛错按基础设施错误计(attempt errored)。\n * 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。\n */\n postSetup?: readonly SandboxCommand[];\n /**\n * 与 `postSetup` 成对的收尾 Hook:按 `postSetup` 的逆序语义,在 agent 自己的 teardown 步骤\n * 之前执行(LIFO 镜像 —— `postSetup` 跑在 agent 安装之后,`preTeardown` 就跑在 agent 收尾\n * 之前),当且仅当 `postSetup` 的时点走到过才触发。抛错按基础设施错误计,由 teardown 段\n * 按 teardown-failed 诊断收束。\n * 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。\n */\n preTeardown?: readonly SandboxCommand[];\n}\nconst CODEX_CAPACITY_CODES = new Set([\n \"ADMISSION_FAILED\",\n \"ADMISSION_FAILURE\",\n \"ADMISSION_REJECTED\",\n \"MODEL_AT_CAPACITY\",\n \"MODEL_CAPACITY\",\n \"MODEL_OVERLOADED\",\n]);\nfunction normalizedCodexCode(value: unknown): string | undefined {\n if (typeof value !== \"string\")\n return undefined;\n return value.trim().toUpperCase().replace(/[ -]+/g, \"_\");\n}\nfunction codexCapacityCode(raw: string | undefined): string | undefined {\n if (raw === undefined)\n return undefined;\n for (const line of raw.split(\"\\n\")) {\n try {\n const value: unknown = JSON.parse(line);\n if (!value || typeof value !== \"object\")\n continue;\n const record = value as globalThis.Record<string, unknown>;\n const error = record.error;\n const candidates = [\n record.code,\n record.reason,\n record.type,\n error && typeof error === \"object\" ? (error as globalThis.Record<string, unknown>).code : undefined,\n error && typeof error === \"object\" ? (error as globalThis.Record<string, unknown>).reason : undefined,\n error && typeof error === \"object\" ? (error as globalThis.Record<string, unknown>).type : undefined,\n ];\n const code = candidates.map(normalizedCodexCode).find((candidate) => candidate !== undefined && CODEX_CAPACITY_CODES.has(candidate));\n if (code !== undefined)\n return code;\n }\n catch {\n // Native stderr fallback is handled separately and remains deliberately narrow.\n }\n }\n return undefined;\n}\nfunction codexCapacityMessage(raw: string | undefined): string {\n if (raw === undefined)\n return \"\";\n const messages: string[] = [];\n for (const line of raw.split(\"\\n\")) {\n try {\n const value: unknown = JSON.parse(line);\n if (!value || typeof value !== \"object\")\n continue;\n const record = value as globalThis.Record<string, unknown>;\n if (record.type !== \"turn.failed\" && record.type !== \"response.failed\")\n continue;\n const error = record.error;\n if (error && typeof error === \"object\") {\n const message = (error as globalThis.Record<string, unknown>).message;\n if (typeof message === \"string\")\n messages.push(message);\n }\n }\n catch {\n // Native stderr fallback is handled separately and remains deliberately narrow.\n }\n }\n return messages.join(\"\\n\");\n}\nconst CODEX_CAPACITY_TEXT = /\\bmodel(?:[ _-]+is)?[ _-]+at[ _-]+capacity\\b|\\badmission[ _-]+(?:failed|failure|rejected)\\b/i;\nfunction codexCapacityFromFailure(failure: SendFailure): boolean {\n if (failure.acceptance !== \"rejected\")\n return false;\n if (failure.events !== undefined && sendAcceptanceFromEvents(failure.events) === \"started\")\n return false;\n for (let cause = failure.cause; cause !== undefined;) {\n if (cause._tag === \"Error\" || cause._tag === \"Object\") {\n const code = cause.code._tag === \"Present\" ? normalizedCodexCode(cause.code.value) : undefined;\n if (code !== undefined && CODEX_CAPACITY_CODES.has(code))\n return true;\n cause = cause.cause._tag === \"Cause\" ? cause.cause.value : undefined;\n continue;\n }\n cause = undefined;\n }\n return CODEX_CAPACITY_TEXT.test(sendFailureText(failure));\n}\nfunction classifyCodexSendFailure(failure: SendFailure): FailureClass | undefined {\n return codexCapacityFromFailure(failure) ? { retryable: true, reason: \"model_capacity\" } : undefined;\n}\nfunction codexAcceptance(raw: string | undefined, events: readonly import(\"../types.ts\").StreamEvent[], nativeErrorText = \"\"): \"rejected\" | \"started\" | \"unknown\" {\n const acceptance = sendAcceptanceFromEvents(events);\n if (acceptance === \"started\")\n return \"started\";\n return codexCapacityCode(raw) !== undefined || CODEX_CAPACITY_TEXT.test(`${codexCapacityMessage(raw)}\\n${nativeErrorText}`)\n ? \"rejected\"\n : acceptance;\n}\n/**\n * `@openai/codex` 的 npm 主包只是个 node shim,真正的 CLI 在平台包里\n * (`npm:@openai/codex@<ver>-linux-arm64`),是自带运行时的 musl 静态二进制。\n * 装这一份:沙箱里不需要 node / npm,任务镜像带什么都能装。\n */\nfunction codexPlatformPackage(platform: AgentArtifactPlatform, version: string): {\n spec: string;\n binPath: string;\n} | undefined {\n const target = platform.os === \"linux\" && platform.arch === \"x64\"\n ? { suffix: \"linux-x64\", triple: \"x86_64-unknown-linux-musl\" }\n : platform.os === \"linux\" && platform.arch === \"arm64\"\n ? { suffix: \"linux-arm64\", triple: \"aarch64-unknown-linux-musl\" }\n : platform.os === \"darwin\" && platform.arch === \"x64\"\n ? { suffix: \"darwin-x64\", triple: \"x86_64-apple-darwin\" }\n : platform.os === \"darwin\" && platform.arch === \"arm64\"\n ? { suffix: \"darwin-arm64\", triple: \"aarch64-apple-darwin\" }\n : undefined;\n if (target === undefined)\n return undefined;\n return {\n spec: `@openai/codex@${version}-${target.suffix}`,\n binPath: `vendor/${target.triple}/bin/codex`,\n };\n}\n// Codex 0.144.1 会把「hook 命令已正常退出、随后写 stdin 撞 BrokenPipe」误判成 hook\n// 失败并丢掉 stdout。0.146.0 的官方 command runner 已忽略这个竞态;配置 Plugin 时必须\n// 选择包含该修复的 CLI。未配置 Plugin 的官方基线仍保持当前已发布版本,避免引用尚未发布\n// 的 Docker/E2B 制品。\nconst CODEX_PLUGIN_HOOK_SAFE_CLI_VERSION = \"0.146.0\";\nexport function codexAgent(config?: CodexConfig): Agent {\n const getApiKey = () => config?.apiKey ?? requireEnv(\"OPENAI_API_KEY\");\n const getBaseUrl = () => config?.baseUrl ?? getEnv(\"OPENAI_BASE_URL\");\n // PATH 是 Sandbox 受管变量,在 factory 构造时(link/配置校验期)同步拒绝,不留到 setup()\n // 才炸,也不静默丢弃——被覆盖的 PATH 会让 hooks / 子进程读到错误的可执行文件而零报错\n // (见 docs/feature/sandbox/library.md「PATH:受管变量与 pathPrepend」)。\n if (config?.env && \"PATH\" in config.env) {\n throw new TypeError(t(\"codex.envPathManaged\"));\n }\n // factory 构造时快照:一份 Agent 配置服务并发 attempt,不能让调用方随后改原对象造成\n // 不同 run/resume 轮拿到不同 Space。值不进入 shell 或 manifest,只交给 command options。\n const agentEnv = Object.freeze({ ...(config?.env ?? {}) });\n const agentEnvSensitiveValues = Object.freeze(Object.values(agentEnv));\n const cliVersion = config?.plugins?.length\n ? CODEX_PLUGIN_HOOK_SAFE_CLI_VERSION\n : DEFAULT_CODEX_CLI_VERSION;\n const cliRecipeRevision = config?.plugins?.length\n ? \"plugin-hook-safe-r1\"\n : String(AGENT_BASELINE_RECIPE_REVISION.codex);\n const { ensure, installer } = createNpmCliInstaller({\n identity: {\n agent: \"codex\",\n version: cliVersion,\n revision: cliRecipeRevision,\n },\n packageName: \"@openai/codex\",\n bin: \"codex\",\n platformPackage: (platform) => codexPlatformPackage(platform, cliVersion),\n progress: {\n checking: `checking Codex CLI ${cliVersion}`,\n installing: `installing official OpenAI Codex CLI ${cliVersion}`,\n ready: `Codex CLI ${cliVersion} ready`,\n },\n });\n return registerAgentLifecycleHookCommands(defineSandboxAgent({\n name: \"codex\",\n // 官方 adapter:transcript 经生命周期 fixture 验证,全通道 complete。\n evidenceCoverage: completeEvidenceCoverage,\n spanMapper: mapCodexSpans,\n classifySendFailure: classifyCodexSendFailure,\n ensure,\n installers: [installer],\n setup: (sb, ctx) => Effect.runPromise(Effect.scoped(Effect.gen(function* () {\n // 用户的原生配置文件:本地读原始字节 → 验 TOML 语法与保留键。字节 SHA-256 进\n // manifest 与安装 checkpoint key(见 native-config.ts 的 nativeConfigCheckpointItem)。\n let nativeConfig: LoadedNativeConfig | undefined;\n if (config?.configFile !== undefined) {\n nativeConfig = yield* loadNativeConfigFileEffect({ agent: \"codex\", field: \"configFile\", path: config.configFile });\n yield* Effect.try({\n try: () => assertTomlNativeConfig(nativeConfig!, {\n agent: \"codex\",\n field: \"configFile\",\n reservedKeys: RESERVED_CONFIG_KEYS,\n }),\n catch: (cause) => cause,\n });\n }\n // Codex 把 Plugin 的声明态写在 config.toml、安装体写在 cache。必须在覆盖用户配置前\n // 同时摘掉两边:覆盖后 `plugin list` 已看不见旧声明,旧安装体却仍会影响下一次 add\n // 的版本选择。先完整收敛,再写本 Attempt 的唯一配置层。\n if (config?.plugins?.length) {\n const plugins = config.plugins;\n yield* Effect.tryPromise({\n try: () => resetPluginState(sb, plugins),\n catch: (cause) => cause,\n });\n }\n // model 归属:实验决定(ctx.model);省略时不写 model 行,交给 codex CLI 原生默认,\n // 不在 adapter 里硬编码一个会过期的模型名。\n const modelLine = ctx.model ? `model = \"${ctx.model}\"\\n` : \"\";\n const effortLine = ctx.reasoningEffort === undefined\n ? \"\"\n : `model_reasoning_effort = \"${ctx.reasoningEffort}\"\\n`;\n const base = getBaseUrl();\n // 自定义 endpoint 常从项目的私有环境注入。它仍是 Codex 的真实运行配置,但不能因\n // Adapter 用 heredoc 写 config.toml 而进入 command/timing/error 证据;一旦在这里登记,\n // Attempt 最终封口也会清掉随后 hook 或 CLI 错误里回显的同一值。\n const providerSensitiveValues = base ? [base] : [];\n const topLevel = base\n ? modelLine + `model_provider = \"s2a\"\\n` + effortLine\n : modelLine + effortLine;\n const providerTable = base\n ? `[model_providers.s2a]\\n` +\n `name = \"s2a\"\\n` +\n `base_url = \"${base}\"\\n` +\n `env_key = \"OPENAI_API_KEY\"\\n` +\n `wire_api = \"responses\"\\n`\n : \"\";\n if (!nativeConfig) {\n yield* Effect.tryPromise({\n try: () => shared.writeFile(sb, \"~/.codex/config.toml\", providerTable ? `${topLevel}\\n${providerTable}` : topLevel, { sensitiveValues: providerSensitiveValues }),\n catch: (cause) => cause,\n });\n }\n else {\n // codex 只读一份用户级 config.toml(没有 include / 第二配置层),Adapter 生成层与\n // 用户文件只能同文件分段共存。TOML 没有「回到根表」的语法,顶层键必须先于任何表头,\n // 所以布局固定为:Adapter 顶层键 → 用户文件原始字节(逐字节保留,自带表随意)→\n // Adapter 的表([model_providers.*] 以及后续追加的 [mcp_servers.*]、[otel])。\n // 保留键校验保证两层键不重叠,用户内容不被解析重写。\n yield* Effect.tryPromise({\n try: () => shared.writeFile(sb, \"~/.codex/config.toml\", topLevel),\n catch: (cause) => cause,\n });\n yield* appendNativeConfigFileEffect(sb, nativeConfig, \"~/.codex/config.toml\");\n if (providerTable) {\n yield* Effect.tryPromise({\n try: (signal) => sb.runShell(`cat >> ~/.codex/config.toml <<'NICEEVAL_PROVIDER_EOF'\\n\\n${providerTable}NICEEVAL_PROVIDER_EOF\\n`, { signal, sensitiveValues: providerSensitiveValues }),\n catch: (cause) => cause,\n });\n }\n }\n yield* Effect.tryPromise({\n try: async (signal) => {\n if (config?.mcpServers?.length) {\n assertMcpServers(config.mcpServers);\n const sensitiveValues: string[] = [];\n const mcpToml = config.mcpServers\n .map((s) => {\n // 注意是复数 mcp_servers:单数 [mcp_server.x] 会被 codex 静默忽略,\n // MCP 压根挂不上(实测 codex-cli 0.142.x,`codex mcp list` 可核对)。\n const lines: string[] = [`[mcp_servers.${s.name}]`];\n if (isHttpMcp(s)) {\n lines.push(`url = \"${s.url}\"`);\n const headers = s.headers;\n if (headers && Object.keys(headers).length) {\n lines.push(`[mcp_servers.${s.name}.http_headers]`);\n for (const [k, v] of Object.entries(headers)) {\n sensitiveValues.push(v);\n lines.push(`\"${k}\" = \"${v}\"`);\n }\n }\n }\n else {\n lines.push(`command = \"${s.command}\"`);\n if (s.args?.length)\n lines.push(`args = [${s.args.map((a) => `\"${a}\"`).join(\", \")}]`);\n const env = s.env;\n if (env && Object.keys(env).length) {\n lines.push(`[mcp_servers.${s.name}.env]`);\n for (const [k, v] of Object.entries(env)) {\n sensitiveValues.push(v);\n lines.push(`${k} = \"${v}\"`);\n }\n }\n }\n return lines.join(\"\\n\");\n })\n .join(\"\\n\\n\");\n await sb.runShell(`cat >> ~/.codex/config.toml <<'MCPEOF'\\n\\n${mcpToml}\\nMCPEOF\\n`, { sensitiveValues, signal });\n }\n const manifest: AgentSetupManifest = { skills: [] };\n if (config?.skills?.length) {\n manifest.skills = await installSkills(sb, config.skills, { dir: SKILL_DIR });\n // 发现指引不是可选装饰:没有它,codex 连一次读 skill 文件的 shell 调用都不会发生。\n await appendProjectInstruction(sb, skillDiscoveryInstruction(SKILL_DIR, installedSkillNames(manifest.skills)));\n }\n if (config?.plugins?.length) {\n manifest.nativePlugins = await installPluginsFromResetState(sb, config.plugins);\n }\n if (config?.mcpServers?.length) {\n // manifest 只记「挂了哪个 server、怎么连」;env / headers 里可能有 token,不落盘。\n manifest.mcpServers = mcpManifestEntries(config.mcpServers);\n }\n if (nativeConfig) {\n // 只记来源路径与字节哈希,不落正文(任意官方配置都可能带敏感字符串)。\n manifest.nativeConfigFile = { agent: \"codex\", path: nativeConfig.path, sha256: nativeConfig.sha256 };\n }\n if (manifest.skills.length ||\n manifest.nativePlugins?.length ||\n manifest.mcpServers?.length ||\n manifest.nativeConfigFile) {\n ctx.reportSetup(manifest);\n }\n // 安装后钩子(postSetup):排在 manifest 之后——manifest 审计 Adapter 自身的安装事实,\n // 钩子失败不该丢掉这份证据。\n await runPostSetupHooks(sb, ctx, \"codex\", config?.postSetup);\n },\n catch: (cause) => cause,\n });\n })), { signal: ctx.signal }),\n async teardown(sb, ctx) {\n // preTeardown 与 postSetup 成对:LIFO 镜像,先于 agent 自己的收尾步骤执行。\n // codex 目前没有其它收尾步骤,这段就是整个 teardown。\n await runPreTeardownHooks(sb, ctx, \"codex\", config?.preTeardown);\n },\n tracing: {\n protocol: \"http/json\",\n async configure(sb, ctx) {\n const endpoint = ctx.telemetry!.endpoint;\n const otel = `\\n[otel]\\n` +\n `environment = \"niceeval\"\\n` +\n `exporter = \"none\"\\n` +\n `metrics_exporter = \"none\"\\n\\n` +\n `[otel.trace_exporter.otlp-http]\\n` +\n `endpoint = \"${endpoint}\"\\n` +\n `protocol = \"json\"\\n`;\n await sb.runShell(`cat >> ~/.codex/config.toml <<'EOF'\\n${otel}EOF\\n`);\n },\n },\n async send(input, ctx) {\n const sb = ctx.sandbox;\n // hook trust bypass 是 runtime-only(config.toml 设不了):headless 下 codex 对非 managed\n // 来源 hook 的交互式授信永远无人应答,不带它插件装的 hook 会被静默跳过、零报错\n // (见 memory/codex-hook-trust-headless-silent-skip.md)。沙箱内 hook 来源全部由实验配置\n // 声明,与 approvals/sandbox bypass 同一信任层级。\n const flags = \"--json --dangerously-bypass-approvals-and-sandbox --skip-git-repo-check --dangerously-bypass-hook-trust\";\n const prompt = shared.shellQuote(input.text);\n const resuming = ctx.session.id;\n const cmd = resuming\n ? `${shared.agentBin(\"codex\")} exec resume ${ctx.session.id} ${flags} ${prompt}`\n : `${shared.agentBin(\"codex\")} exec ${flags} ${prompt}`;\n // `codex exec --json` 持续写出 ThreadEvent JSONL。把它压成短 step 送进 runner\n // progress,human dashboard 因而能显示真正的 tool / reasoning / assistant 活动;完整\n // transcript 仍在命令结束后一次解析并落入 events artifact,不能让 live 文案变成第二份结果。\n const onStdout = codexProgressReporter(ctx);\n const apiKey = getApiKey();\n const res = await sb.runShell(cmd, {\n // ambient env 由 Codex 进程自然传给 SessionStart/SessionStop hooks、env_http_headers\n // 与 agent 调起的 nmem 等子进程。鉴权字段最后覆盖,避免 env 形成第二条 key 来源。\n env: { ...agentEnv, OPENAI_API_KEY: apiKey },\n sensitiveValues: [apiKey, ...agentEnvSensitiveValues],\n stream: true,\n onStdout,\n });\n const raw = shared.extractJsonlFromStdout(res.stdout);\n ctx.session.capture(shared.codexThreadId(res.stdout));\n const parsed = shared.parseCodex(raw);\n const events = [...parsed.events];\n let turnEvidenceCoverage: TurnEvidenceCoverage | undefined;\n if (!raw?.trim()) {\n const reason = \"Codex JSONL transcript 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 Codex JSONL 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: codexAcceptance(raw, events, res.stderr),\n message: shared.diagnoseFailure(res, parsed.events, raw),\n ...(codexCapacityCode(raw) !== undefined\n ? { cause: normalizeExternalCause({ code: codexCapacityCode(raw) }) }\n : {}),\n events,\n usage: parsed.usage,\n process: res,\n });\n }\n return {\n events,\n usage: parsed.usage,\n status: \"completed\",\n ...(turnEvidenceCoverage === undefined ? {} : { evidenceCoverage: turnEvidenceCoverage }),\n };\n },\n }), config?.postSetup, config?.preTeardown);\n}\n/** 把 Codex JSONL 的高频原始帧收敛成 dashboard 当前行的一条短 detail。 */\nfunction codexProgressReporter(ctx: import(\"../types.ts\").AgentContext): (chunk: string) => void {\n let remainder = \"\";\n return (chunk) => {\n remainder += chunk;\n const lines = remainder.split(\"\\n\");\n remainder = lines.pop() ?? \"\";\n for (const line of lines) {\n const detail = codexProgressDetail(line);\n if (detail)\n ctx.progress({ message: detail });\n }\n };\n}\nfunction codexProgressDetail(line: string): string | undefined {\n let event: globalThis.Record<string, unknown>;\n try {\n const parsed: unknown = JSON.parse(line);\n if (!parsed || typeof parsed !== \"object\")\n return undefined;\n event = parsed as globalThis.Record<string, unknown>;\n }\n catch {\n return undefined;\n }\n const item = event.item;\n if (!item || typeof item !== \"object\")\n return undefined;\n const data = item as globalThis.Record<string, unknown>;\n const type = typeof data.type === \"string\" ? data.type : \"\";\n const completed = event.type === \"item.completed\";\n const preview = (value: unknown, limit = 96): string | undefined => {\n if (typeof value !== \"string\")\n return undefined;\n const text = value.replace(/\\s+/g, \" \").trim();\n if (!text)\n return undefined;\n return text.length > limit ? `${text.slice(0, limit - 1)}…` : text;\n };\n if (type === \"command_execution\") {\n const command = preview(data.command) ?? \"shell\";\n return completed ? `tool: ${command} · completed` : `tool: ${command}`;\n }\n if (type === \"mcp_tool_call\") {\n const tool = typeof data.tool === \"string\" ? data.tool : \"MCP\";\n const server = typeof data.server === \"string\" ? `${data.server}.` : \"\";\n return completed ? `tool: ${server}${tool} · completed` : `tool: ${server}${tool}`;\n }\n if (type === \"web_search\")\n return completed ? \"tool: web search · completed\" : \"tool: web search\";\n if (type === \"file_change\")\n return completed ? \"tool: file change · completed\" : \"tool: file change\";\n if (type === \"reasoning\") {\n const text = preview(data.text ?? data.content);\n return text ? `thinking: ${text}` : \"thinking\";\n }\n if (type === \"agent_message\") {\n const text = preview(data.text ?? data.message);\n return text ? `assistant: ${text}` : \"assistant response\";\n }\n return undefined;\n}\n/**\n * 先按 `marketplace.name` 连 Marketplace(同名只连一次,`--ref` 钉版本,add 后回读注册\n * 列表校验名字真的注册上了),再装指定 Plugin。\n * 只按 codex 自己的 marketplace / plugin 协议走 —— 与 claude-code 的实现不共用命令、不共用类型。\n *\n * 注册类命令是追加式的,而 Sandbox 复用下沙箱带着上一条 attempt 的 `$HOME` 进场,所以每一步\n * 先读沙箱真实状态、把它收敛到声明,再执行 add / install(契约见 docs/feature/adapters/\n * architecture/coding-agent-extensions.md「安装收敛:不假设沙箱空白」)。空白沙箱读回为空,\n * 走的是同一条代码路径。\n */\nexport async function installPlugins(sb: Sandbox, plugins: readonly CodexPluginSpec[]): Promise<NonNullable<AgentSetupManifest[\"nativePlugins\"]>> {\n await resetPluginState(sb, plugins);\n return installPluginsFromResetState(sb, plugins);\n}\n/**\n * 在 config.toml 仍保留上一条 Attempt 的 Plugin 声明时清理声明态与安装体。\n * setup 必须先调用它再覆盖 config;直接调用 installPlugins() 时也走同一收敛入口。\n */\nasync function resetPluginState(sb: Sandbox, plugins: readonly CodexPluginSpec[]): Promise<void> {\n // 摘除顺序固定「先卸完全部同名插件、后摘 marketplace」:marketplace 注册一摘,\n // `codex plugin list` 就不再列出挂在它名下的安装(真机核对 codex-cli 0.146.0),\n // 残留的那份从此定位不到。多个插件共用一个 marketplace 时只需摘一次注册。\n for (const plugin of plugins) {\n await removeInstalledPlugins(sb, plugin.name);\n }\n const marketplaces = new Set<string>();\n for (const plugin of plugins) {\n if (marketplaces.has(plugin.marketplace.name))\n continue;\n await dropRegisteredMarketplace(sb, plugin.marketplace.name);\n marketplaces.add(plugin.marketplace.name);\n }\n}\n/** 安装阶段只接受已经由 resetPluginState() 收敛过的 Sandbox。 */\nasync function installPluginsFromResetState(sb: Sandbox, plugins: readonly CodexPluginSpec[]): Promise<NonNullable<AgentSetupManifest[\"nativePlugins\"]>> {\n const connected = new Set<string>();\n const out: NonNullable<AgentSetupManifest[\"nativePlugins\"]> = [];\n for (const plugin of plugins) {\n const { marketplace } = plugin;\n if (!connected.has(marketplace.name)) {\n const refFlag = marketplace.ref ? ` --ref ${shared.shellQuote(marketplace.ref)}` : \"\";\n // --sparse 只影响拉取速度,不影响装出来的内容;manifest 不记录它。\n const sparseFlags = (marketplace.sparse ?? [])\n .map((path) => ` --sparse ${shared.shellQuote(path)}`)\n .join(\"\");\n const add = await sb.runShell(`${shared.agentBin(\"codex\")} plugin marketplace add ${shared.shellQuote(marketplace.source)}${refFlag}${sparseFlags}`);\n if (add.exitCode !== 0) {\n throw new Error(t(\"plugin.marketplaceFailed\", {\n agent: \"codex\",\n name: marketplace.name,\n source: marketplace.source,\n ref: marketplace.ref ?? \"(default)\",\n tail: outputTail(add),\n }));\n }\n // add 静默按目标仓库 manifest 的 name 注册,错名会拖到 plugin add 才炸;\n // 回读注册列表立刻校验(契约与真机复现见 marketplace.ts 顶部说明)。\n await verifyMarketplaceName(sb, {\n agent: \"codex\",\n listCommand: \"codex plugin marketplace list --json\",\n marketplace,\n knownNames: connected,\n });\n connected.add(marketplace.name);\n }\n const install = await sb.runShell(`${shared.agentBin(\"codex\")} plugin add ${shared.shellQuote(`${plugin.name}@${marketplace.name}`)}`);\n if (install.exitCode !== 0) {\n throw new Error(t(\"plugin.installFailed\", {\n agent: \"codex\",\n name: plugin.name,\n marketplace: marketplace.name,\n tail: outputTail(install),\n }));\n }\n const resolvedVersion = await installedVersion(sb, plugin.name, marketplace.name);\n out.push({\n agent: \"codex\",\n marketplace: {\n name: marketplace.name,\n source: marketplace.source,\n ...(marketplace.ref !== undefined ? { ref: marketplace.ref } : {}),\n },\n name: plugin.name,\n ...(resolvedVersion !== undefined ? { resolvedVersion } : {}),\n });\n }\n return out;\n}\n/**\n * `codex plugin list --json` 的已安装条目。真实输出(实测 codex-cli 0.144.1 / 0.146.0)是\n * `{ installed: [...], available: [...] }`,已安装的这条在 `installed` 数组里,字段名是\n * `pluginId`(不是 `id`)——早前按裸数组 / `{ plugins: [...] }` 猜的形状全部猜错,\n * `installedVersion` 曾对任何真实安装恒返回 undefined(见\n * memory/native-plugin-marketplace-name-not-caller-assignable.md 的姊妹发现,2026-07-13 e2e 复现)。\n * 形状按 CLI 宽容解析,抠不出(非 JSON / 未知形状)返回 undefined,由调用方决定放行还是抛错。\n */\ninterface CodexInstalledPlugin {\n pluginId?: string;\n id?: string;\n name?: string;\n marketplaceName?: string;\n version?: string;\n}\nfunction codexInstalledPlugins(stdout: string): CodexInstalledPlugin[] | undefined {\n let raw: unknown;\n try {\n raw = JSON.parse(stdout);\n }\n catch {\n return undefined;\n }\n const arr = Array.isArray(raw)\n ? raw\n : raw && typeof raw === \"object\"\n ? (raw as {\n installed?: unknown;\n }).installed\n : undefined;\n if (!Array.isArray(arr))\n return undefined;\n return arr.filter((item): item is CodexInstalledPlugin => !!item && typeof item === \"object\");\n}\n/** 已安装条目的可寻址 id(`<plugin>@<marketplace>`);codex 的 remove 不接受裸插件名。 */\nfunction codexPluginId(entry: CodexInstalledPlugin): string | undefined {\n const id = entry.pluginId ??\n entry.id ??\n (entry.name && entry.marketplaceName ? `${entry.name}@${entry.marketplaceName}` : undefined);\n return id?.includes(\"@\") ? id : undefined;\n}\n/**\n * 与声明同名的 Plugin 已安装就先移除(不论它出自哪个 marketplace),让本条 attempt 的安装与\n * manifest 里的解析版本同源。已装即跳过会把上一条 attempt 装出的内容记成本条的安装事实。\n */\nasync function removeInstalledPlugins(sb: Sandbox, name: string): Promise<void> {\n const listCommand = \"codex plugin list --json\";\n const res = await sb.runShell(`${shared.agentBin(\"codex\")} plugin list --json`);\n const list = res.exitCode === 0 ? codexInstalledPlugins(res.stdout) : undefined;\n if (list === undefined) {\n throw new Error(t(\"plugin.listFailed\", { agent: \"codex\", command: listCommand, tail: outputTail(res) }));\n }\n const ids = new Set<string>();\n for (const entry of list) {\n const id = codexPluginId(entry);\n if (id && (entry.name ?? id.split(\"@\")[0]) === name)\n ids.add(id);\n }\n for (const id of ids) {\n const remove = await sb.runShell(`${shared.agentBin(\"codex\")} plugin remove ${shared.shellQuote(id)}`);\n if (remove.exitCode !== 0) {\n throw new Error(t(\"plugin.removeFailed\", { agent: \"codex\", name: id, tail: outputTail(remove) }));\n }\n }\n}\n/**\n * 按声明名字无条件摘除同名 marketplace 注册,再由调用方按声明 source 与 ref 重新 add。\n * 不以「注册在 `marketplace list --json` 里可见」为前提:注册状态分两半——用户配置里的注册项\n * 和磁盘上的 marketplace 数据。原生配置整层替换会抹掉前一半,残下的后一半 list 报告不出来,\n * add 却会撞它报 `marketplace '<name>' is already added from a different source`\n * (复用沙箱第二条 attempt 真机复现,codex-cli 0.146.0;`remove` 对这种残根照样清得掉)。\n * 「本就没有可摘的」(`is not configured or installed`,exit 1)按已收敛处理;其它失败也不在\n * 这里报错——紧随其后的 add 是权威失败面,摘不干净它会带着 codex 的原话失败。\n */\nasync function dropRegisteredMarketplace(sb: Sandbox, name: string): Promise<void> {\n await sb.runShell(`${shared.agentBin(\"codex\")} plugin marketplace remove ${shared.shellQuote(name)}`);\n}\n/** 装完回读版本;取不到不阻断安装(manifest 里 resolvedVersion 省略)。 */\nasync function installedVersion(sb: Sandbox, name: string, marketplace: string): Promise<string | undefined> {\n const res = await sb.runShell(`${shared.agentBin(\"codex\")} plugin list --json --marketplace ${shared.shellQuote(marketplace)}`);\n if (res.exitCode !== 0)\n return undefined;\n const list = codexInstalledPlugins(res.stdout);\n const hit = list?.find((p) => p.pluginId === `${name}@${marketplace}` || p.id === `${name}@${marketplace}` || p.name === name);\n return typeof hit?.version === \"string\" ? hit.version : undefined;\n}\nfunction outputTail(res: {\n stdout: string;\n stderr: string;\n}, n = 12): string {\n return (res.stdout + res.stderr).trim().split(\"\\n\").slice(-n).join(\"\\n\");\n}\nexport default codexAgent();\n"]}
1
+ {"version":3,"file":"codex.js","sourceRoot":"","sources":["codex.ts"],"names":[],"mappings":"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","sourcesContent":["import { completeEvidenceCoverage } from \"../assertions/coverage.ts\";\nimport { Effect } from \"effect\";\nimport { defineSandboxAgent } from \"../define.ts\";\nimport { requireEnv, getEnv } from \"../util.ts\";\nimport { shared } from \"./shared.ts\";\nimport { appendProjectInstruction, installSkills, installedSkillNames, skillDiscoveryInstruction, } from \"./skills.ts\";\nimport { verifyMarketplaceName } from \"./marketplace.ts\";\nimport { appendNativeConfigFileEffect, assertTomlNativeConfig, loadNativeConfigFileEffect, type LoadedNativeConfig, } from \"./native-config.ts\";\nimport { mapCodexSpans } from \"../o11y/otlp/mappers/codex.ts\";\nimport { t } from \"../i18n/index.ts\";\nimport { DEFAULT_CODEX_CLI_VERSION, AGENT_BASELINE_RECIPE_REVISION } from \"./coding-cli-versions.ts\";\nimport { assertMcpServers, isHttpMcp, mcpManifestEntries } from \"./mcp.ts\";\nimport { registerAgentLifecycleHookCommands, runPostSetupHooks, runPreTeardownHooks, } from \"./post-setup.ts\";\nimport { createNpmCliInstaller } from \"./npm-staged.ts\";\nimport type { Agent, AgentSetupManifest, McpServer, Sandbox, SkillSpec } from \"../types.ts\";\nimport type { SandboxCommand } from \"../sandbox/commands.ts\";\nimport type { AgentArtifactPlatform } from \"./types.ts\";\nimport { sendAcceptanceFromEvents, sendFailureText, type SendFailure, } from \"../context/send-failures.ts\";\nimport { normalizeExternalCause } from \"../shared/external-cause.ts\";\nimport type { FailureClass } from \"../shared/failure-class.ts\";\nimport { requireManagedProcessCapability } from \"../sandbox/backend.ts\";\nimport { attemptResources } from \"../context/attempt-resources.ts\";\nimport { sendCodexAppServer } from \"./codex-app-server.ts\";\n// ───────────────────────────────────────────────────────────────────────────\n// OpenAI Codex CLI 的 agent adapter(沙箱型)。\n//\n// 连接方式:在沙箱里维护 Codex app-server stdio,原生通知 → 标准事件流。\n// 配置:鉴权本地(config / env),模型交给实验(ctx.model),推理努力程度经 ctx.reasoningEffort,\n// 其余参数经 ctx.flags。\n// 扩展(skill / plugin / MCP)是构造参数,setup 翻译成 codex 的原生形态并写 manifest。\n// ───────────────────────────────────────────────────────────────────────────\n/** codex 的 skill 目录(`skills` 生态的「通用」目录);codex 不原生扫描它,靠下面的发现指引。 */\nconst SKILL_DIR = \".agents/skills\";\n/**\n * `configFile` 的保留键:model / provider 路由 / 推理努力归 experiment 与 Adapter 的生成层,\n * MCP 表与 OTel 导出归 Adapter。清单定稿见 docs/feature/adapters/sdk/codex-cli/README.md。\n */\nconst RESERVED_CONFIG_KEYS = [\n \"model\",\n \"model_provider\",\n \"model_providers\",\n \"model_reasoning_effort\",\n \"mcp_servers\",\n \"otel\",\n] as const;\n/**\n * Codex 的原生 Plugin —— **只属于 Codex**,不能传给 Claude Code(它有自己的\n * {@link import(\"./claude-code.ts\").ClaudeCodePluginSpec})。字段当前相似不等于同一个类型:\n * 任一方的 Marketplace 鉴权、锁文件、选择规则或安装参数变化时,另一方不必接受无意义字段。\n */\nexport interface CodexPluginSpec {\n marketplace: {\n /** 目标仓库 manifest 声明的真实 name;CLI 不支持由调用方另取连接别名。 */\n name: string;\n /** Marketplace 来源:`owner/repo`、Git URL 或本地路径。 */\n source: string;\n /** 固定 Marketplace 的 Tag、Commit 或 Branch(→ `codex plugin marketplace add --ref`)。 */\n ref?: string;\n /**\n * sparse 拉取的路径列表,每项生成一个 `codex plugin marketplace add --sparse <path>`\n * (codex 的 `--sparse` 必须带路径参数、可重复):大仓库只取插件所需路径,省略或空数组即全量 clone。\n * 只影响拉取速度,不影响装出来的内容;manifest 不记录它。\n */\n sparse?: readonly string[];\n };\n /** Marketplace 中的 Plugin 名。 */\n name: string;\n}\nexport interface CodexConfig {\n /** 代理 / OpenAI API key。省略时读 CODEX_API_KEY env。 */\n apiKey?: string;\n /** OpenAI 兼容代理 base URL(如 https://s2a.example.com/v1)。省略时读 CODEX_BASE_URL env。 */\n baseUrl?: string;\n /**\n * 注入每次 Codex CLI 进程的额外环境变量。首轮 `codex exec` 与续轮 `codex exec resume`\n * 使用同一份声明;Codex 启动的 lifecycle Hook、MCP 动态 header 与命令子进程都会继承。\n * 值只经 Sandbox command options 传入,不拼进 shell 文本或写入 setup manifest,并全部按\n * 潜在敏感值从 timing / execution / error 证据中脱敏。`CODEX_API_KEY` 仍由 `apiKey` 或\n * 宿主同名环境变量提供,Adapter 的鉴权值会覆盖这里的同名键。\n * env value 不进入 carry 身份。会改变被测行为的非敏感值必须同时声明在 Experiment flags\n * 或所属 Plugin identity;只轮换凭据不会让旧结果失效。\n * `PATH` 是 Sandbox 受管变量,不接受经这里声明——出现即在 factory 构造时报错,改用\n * Sandbox factory 的 `pathPrepend`(见 docs/feature/sandbox/library.md)。\n */\n env?: Readonly<globalThis.Record<string, string>>;\n /**\n * 额外 MCP server(每个 Sandbox setup 时追加进 ~/.codex/config.toml)。\n * stdio 形态(command/args/env)写 [mcp_servers.<name>] 的 command 行;\n * Streamable HTTP 形态(url/headers)写 url 行,headers 进 [mcp_servers.<name>.http_headers] 子表。\n */\n mcpServers?: readonly McpServer[];\n /**\n * 装进 Sandbox 的 Skill(本地目录/文件,或 repo + 可钉 ref + 可选启用集)。\n * 落在 `.agents/skills/<name>/`,并写一段发现指引进 AGENTS.md —— codex 没有 Claude Code 那种\n * 原生 Skill 工具,只把文件装进去它不会自己去读(见 memory/codex-no-native-skill-tool.md)。\n */\n skills?: readonly SkillSpec[];\n /** Codex 原生 Plugin(先连 Marketplace,再从中装指定 Plugin)。 */\n plugins?: readonly CodexPluginSpec[];\n /**\n * 一份完整的 Codex `config.toml`(官方 TOML 格式)在本地项目里的路径 —— 相对运行\n * niceeval 的项目根(含 `niceeval.config.ts` 的目录)解析,不是 Sandbox 内路径;只接受\n * 项目根内的相对路径,包含 `..` 的路径、绝对路径、`~` 路径和解析后逃出项目根的符号链接\n * 都在 setup 阶段报错。原始字节原样并入 Sandbox 里原本为空的用户级 `~/.codex/config.toml`\n * (不继承宿主机配置、不解析后重写);保留键 `model`、`model_provider`、`model_providers`、\n * `model_reasoning_effort`、`mcp_servers`、`otel` 出现在文件里 setup 报错。manifest 只记\n * 项目相对路径与字节 SHA-256,不落正文。\n */\n configFile?: string;\n /**\n * 安装后按数组顺序运行的用户 Hook(复用 SandboxCommand 的窄上下文):在写主配置、挂 MCP、\n * 装 Skills / Plugin、写 manifest 全部完成后执行,适合跑插件自带的 setup 脚本这类\n * 「安装产物就位后才能跑」的过程动作。抛错按基础设施错误计(attempt errored)。\n * 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。\n */\n postSetup?: readonly SandboxCommand[];\n /**\n * 与 `postSetup` 成对的收尾 Hook:按 `postSetup` 的逆序语义,在 agent 自己的 teardown 步骤\n * 之前执行(LIFO 镜像 —— `postSetup` 跑在 agent 安装之后,`preTeardown` 就跑在 agent 收尾\n * 之前),当且仅当 `postSetup` 的时点走到过才触发。抛错按基础设施错误计,由 teardown 段\n * 按 teardown-failed 诊断收束。\n * 见 docs/feature/adapters/library/coding-agent-extensions.md「安装后运行脚本」。\n */\n preTeardown?: readonly SandboxCommand[];\n}\nconst CODEX_CAPACITY_CODES = new Set([\n \"ADMISSION_FAILED\",\n \"ADMISSION_FAILURE\",\n \"ADMISSION_REJECTED\",\n \"MODEL_AT_CAPACITY\",\n \"MODEL_CAPACITY\",\n \"MODEL_OVERLOADED\",\n]);\nfunction normalizedCodexCode(value: unknown): string | undefined {\n if (typeof value !== \"string\")\n return undefined;\n return value.trim().toUpperCase().replace(/[ -]+/g, \"_\");\n}\nfunction codexCapacityCode(raw: string | undefined): string | undefined {\n if (raw === undefined)\n return undefined;\n for (const line of raw.split(\"\\n\")) {\n try {\n const value: unknown = JSON.parse(line);\n if (!value || typeof value !== \"object\")\n continue;\n const record = value as globalThis.Record<string, unknown>;\n const error = record.error;\n const candidates = [\n record.code,\n record.reason,\n record.type,\n error && typeof error === \"object\" ? (error as globalThis.Record<string, unknown>).code : undefined,\n error && typeof error === \"object\" ? (error as globalThis.Record<string, unknown>).reason : undefined,\n error && typeof error === \"object\" ? (error as globalThis.Record<string, unknown>).type : undefined,\n ];\n const code = candidates.map(normalizedCodexCode).find((candidate) => candidate !== undefined && CODEX_CAPACITY_CODES.has(candidate));\n if (code !== undefined)\n return code;\n }\n catch {\n // Native stderr fallback is handled separately and remains deliberately narrow.\n }\n }\n return undefined;\n}\nfunction codexCapacityMessage(raw: string | undefined): string {\n if (raw === undefined)\n return \"\";\n const messages: string[] = [];\n for (const line of raw.split(\"\\n\")) {\n try {\n const value: unknown = JSON.parse(line);\n if (!value || typeof value !== \"object\")\n continue;\n const record = value as globalThis.Record<string, unknown>;\n if (record.type !== \"turn.failed\" && record.type !== \"response.failed\")\n continue;\n const error = record.error;\n if (error && typeof error === \"object\") {\n const message = (error as globalThis.Record<string, unknown>).message;\n if (typeof message === \"string\")\n messages.push(message);\n }\n }\n catch {\n // Native stderr fallback is handled separately and remains deliberately narrow.\n }\n }\n return messages.join(\"\\n\");\n}\nconst CODEX_CAPACITY_TEXT = /\\bmodel(?:[ _-]+is)?[ _-]+at[ _-]+capacity\\b|\\badmission[ _-]+(?:failed|failure|rejected)\\b/i;\nfunction codexCapacityFromFailure(failure: SendFailure): boolean {\n if (failure.acceptance !== \"rejected\")\n return false;\n if (failure.events !== undefined && sendAcceptanceFromEvents(failure.events) === \"started\")\n return false;\n for (let cause = failure.cause; cause !== undefined;) {\n if (cause._tag === \"Error\" || cause._tag === \"Object\") {\n const code = cause.code._tag === \"Present\" ? normalizedCodexCode(cause.code.value) : undefined;\n if (code !== undefined && CODEX_CAPACITY_CODES.has(code))\n return true;\n cause = cause.cause._tag === \"Cause\" ? cause.cause.value : undefined;\n continue;\n }\n cause = undefined;\n }\n return CODEX_CAPACITY_TEXT.test(sendFailureText(failure));\n}\nfunction classifyCodexSendFailure(failure: SendFailure): FailureClass | undefined {\n return codexCapacityFromFailure(failure) ? { retryable: true, reason: \"model_capacity\" } : undefined;\n}\nfunction codexAcceptance(raw: string | undefined, events: readonly import(\"../types.ts\").StreamEvent[], nativeErrorText = \"\"): \"rejected\" | \"started\" | \"unknown\" {\n const acceptance = sendAcceptanceFromEvents(events);\n if (acceptance === \"started\")\n return \"started\";\n return codexCapacityCode(raw) !== undefined || CODEX_CAPACITY_TEXT.test(`${codexCapacityMessage(raw)}\\n${nativeErrorText}`)\n ? \"rejected\"\n : acceptance;\n}\n/**\n * `@openai/codex` 的 npm 主包只是个 node shim,真正的 CLI 在平台包里\n * (`npm:@openai/codex@<ver>-linux-arm64`),是自带运行时的 musl 静态二进制。\n * 装这一份:沙箱里不需要 node / npm,任务镜像带什么都能装。\n */\nfunction codexPlatformPackage(platform: AgentArtifactPlatform, version: string): {\n spec: string;\n binPath: string;\n} | undefined {\n const target = platform.os === \"linux\" && platform.arch === \"x64\"\n ? { suffix: \"linux-x64\", triple: \"x86_64-unknown-linux-musl\" }\n : platform.os === \"linux\" && platform.arch === \"arm64\"\n ? { suffix: \"linux-arm64\", triple: \"aarch64-unknown-linux-musl\" }\n : platform.os === \"darwin\" && platform.arch === \"x64\"\n ? { suffix: \"darwin-x64\", triple: \"x86_64-apple-darwin\" }\n : platform.os === \"darwin\" && platform.arch === \"arm64\"\n ? { suffix: \"darwin-arm64\", triple: \"aarch64-apple-darwin\" }\n : undefined;\n if (target === undefined)\n return undefined;\n return {\n spec: `@openai/codex@${version}-${target.suffix}`,\n binPath: `vendor/${target.triple}/bin/codex`,\n };\n}\n// Codex 0.144.1 会把「hook 命令已正常退出、随后写 stdin 撞 BrokenPipe」误判成 hook\n// 失败并丢掉 stdout。0.146.0 的官方 command runner 已忽略这个竞态;配置 Plugin 时必须\n// 选择包含该修复的 CLI。未配置 Plugin 的官方基线仍保持当前已发布版本,避免引用尚未发布\n// 的 Docker/E2B 制品。\nconst CODEX_PLUGIN_HOOK_SAFE_CLI_VERSION = \"0.146.0\";\nexport function codexAgent(config?: CodexConfig): Agent {\n const getApiKey = () => config?.apiKey ?? requireEnv(\"CODEX_API_KEY\");\n const getBaseUrl = () => config?.baseUrl ?? getEnv(\"CODEX_BASE_URL\");\n // PATH 是 Sandbox 受管变量,在 factory 构造时(link/配置校验期)同步拒绝,不留到 setup()\n // 才炸,也不静默丢弃——被覆盖的 PATH 会让 hooks / 子进程读到错误的可执行文件而零报错\n // (见 docs/feature/sandbox/library.md「PATH:受管变量与 pathPrepend」)。\n if (config?.env && \"PATH\" in config.env) {\n throw new TypeError(t(\"codex.envPathManaged\"));\n }\n // factory 构造时快照:一份 Agent 配置服务并发 attempt,不能让调用方随后改原对象造成\n // 不同 run/resume 轮拿到不同 Space。值不进入 shell 或 manifest,只交给 command options。\n const agentEnv = Object.freeze({ ...(config?.env ?? {}) });\n const agentEnvSensitiveValues = Object.freeze(Object.values(agentEnv));\n const cliVersion = config?.plugins?.length\n ? CODEX_PLUGIN_HOOK_SAFE_CLI_VERSION\n : DEFAULT_CODEX_CLI_VERSION;\n const cliRecipeRevision = config?.plugins?.length\n ? \"plugin-hook-safe-r1\"\n : String(AGENT_BASELINE_RECIPE_REVISION.codex);\n const { ensure, installer } = createNpmCliInstaller({\n identity: {\n agent: \"codex\",\n version: cliVersion,\n revision: cliRecipeRevision,\n },\n packageName: \"@openai/codex\",\n bin: \"codex\",\n platformPackage: (platform) => codexPlatformPackage(platform, cliVersion),\n progress: {\n checking: `checking Codex CLI ${cliVersion}`,\n installing: `installing official OpenAI Codex CLI ${cliVersion}`,\n ready: `Codex CLI ${cliVersion} ready`,\n },\n });\n return registerAgentLifecycleHookCommands(defineSandboxAgent({\n name: \"codex\",\n // 官方 adapter:transcript 经生命周期 fixture 验证,全通道 complete。\n evidenceCoverage: completeEvidenceCoverage,\n spanMapper: mapCodexSpans,\n classifySendFailure: classifyCodexSendFailure,\n ensure,\n installers: [installer],\n setup: (sb, ctx) => Effect.runPromise(Effect.scoped(Effect.gen(function* () {\n yield* Effect.try({ try: () => requireManagedProcessCapability(sb, \"codex\"), catch: (cause) => cause });\n // 用户的原生配置文件:本地读原始字节 → 验 TOML 语法与保留键。字节 SHA-256 进\n // manifest 与安装 checkpoint key(见 native-config.ts 的 nativeConfigCheckpointItem)。\n let nativeConfig: LoadedNativeConfig | undefined;\n if (config?.configFile !== undefined) {\n nativeConfig = yield* loadNativeConfigFileEffect({ agent: \"codex\", field: \"configFile\", path: config.configFile });\n yield* Effect.try({\n try: () => assertTomlNativeConfig(nativeConfig!, {\n agent: \"codex\",\n field: \"configFile\",\n reservedKeys: RESERVED_CONFIG_KEYS,\n }),\n catch: (cause) => cause,\n });\n }\n // Codex 把 Plugin 的声明态写在 config.toml、安装体写在 cache。必须在覆盖用户配置前\n // 同时摘掉两边:覆盖后 `plugin list` 已看不见旧声明,旧安装体却仍会影响下一次 add\n // 的版本选择。先完整收敛,再写本 Attempt 的唯一配置层。\n if (config?.plugins?.length) {\n const plugins = config.plugins;\n yield* Effect.tryPromise({\n try: () => resetPluginState(sb, plugins),\n catch: (cause) => cause,\n });\n }\n // model 归属:实验决定(ctx.model);省略时不写 model 行,交给 codex CLI 原生默认,\n // 不在 adapter 里硬编码一个会过期的模型名。\n const modelLine = ctx.model ? `model = \"${ctx.model}\"\\n` : \"\";\n const effortLine = ctx.reasoningEffort === undefined\n ? \"\"\n : `model_reasoning_effort = \"${ctx.reasoningEffort}\"\\n`;\n const base = getBaseUrl();\n // 自定义 endpoint 常从项目的私有环境注入。它仍是 Codex 的真实运行配置,但不能因\n // Adapter 用 heredoc 写 config.toml 而进入 command/timing/error 证据;一旦在这里登记,\n // Attempt 最终封口也会清掉随后 hook 或 CLI 错误里回显的同一值。\n const providerSensitiveValues = base ? [base] : [];\n const topLevel = base\n ? modelLine + `model_provider = \"s2a\"\\n` + effortLine\n : modelLine + effortLine;\n const providerTable = base\n ? `[model_providers.s2a]\\n` +\n `name = \"s2a\"\\n` +\n `base_url = \"${base}\"\\n` +\n `env_key = \"CODEX_API_KEY\"\\n` +\n `wire_api = \"responses\"\\n`\n : \"\";\n if (!nativeConfig) {\n yield* Effect.tryPromise({\n try: () => shared.writeFile(sb, \"~/.codex/config.toml\", providerTable ? `${topLevel}\\n${providerTable}` : topLevel, { sensitiveValues: providerSensitiveValues }),\n catch: (cause) => cause,\n });\n }\n else {\n // codex 只读一份用户级 config.toml(没有 include / 第二配置层),Adapter 生成层与\n // 用户文件只能同文件分段共存。TOML 没有「回到根表」的语法,顶层键必须先于任何表头,\n // 所以布局固定为:Adapter 顶层键 → 用户文件原始字节(逐字节保留,自带表随意)→\n // Adapter 的表([model_providers.*] 以及后续追加的 [mcp_servers.*]、[otel])。\n // 保留键校验保证两层键不重叠,用户内容不被解析重写。\n yield* Effect.tryPromise({\n try: () => shared.writeFile(sb, \"~/.codex/config.toml\", topLevel),\n catch: (cause) => cause,\n });\n yield* appendNativeConfigFileEffect(sb, nativeConfig, \"~/.codex/config.toml\");\n if (providerTable) {\n yield* Effect.tryPromise({\n try: (signal) => sb.runShell(`cat >> ~/.codex/config.toml <<'NICEEVAL_PROVIDER_EOF'\\n\\n${providerTable}NICEEVAL_PROVIDER_EOF\\n`, { signal, sensitiveValues: providerSensitiveValues }),\n catch: (cause) => cause,\n });\n }\n }\n yield* Effect.tryPromise({\n try: async (signal) => {\n if (config?.mcpServers?.length) {\n assertMcpServers(config.mcpServers);\n const sensitiveValues: string[] = [];\n const mcpToml = config.mcpServers\n .map((s) => {\n // 注意是复数 mcp_servers:单数 [mcp_server.x] 会被 codex 静默忽略,\n // MCP 压根挂不上(实测 codex-cli 0.142.x,`codex mcp list` 可核对)。\n const lines: string[] = [`[mcp_servers.${s.name}]`];\n if (isHttpMcp(s)) {\n lines.push(`url = \"${s.url}\"`);\n const headers = s.headers;\n if (headers && Object.keys(headers).length) {\n lines.push(`[mcp_servers.${s.name}.http_headers]`);\n for (const [k, v] of Object.entries(headers)) {\n sensitiveValues.push(v);\n lines.push(`\"${k}\" = \"${v}\"`);\n }\n }\n }\n else {\n lines.push(`command = \"${s.command}\"`);\n if (s.args?.length)\n lines.push(`args = [${s.args.map((a) => `\"${a}\"`).join(\", \")}]`);\n const env = s.env;\n if (env && Object.keys(env).length) {\n lines.push(`[mcp_servers.${s.name}.env]`);\n for (const [k, v] of Object.entries(env)) {\n sensitiveValues.push(v);\n lines.push(`${k} = \"${v}\"`);\n }\n }\n }\n return lines.join(\"\\n\");\n })\n .join(\"\\n\\n\");\n await sb.runShell(`cat >> ~/.codex/config.toml <<'MCPEOF'\\n\\n${mcpToml}\\nMCPEOF\\n`, { sensitiveValues, signal });\n }\n const manifest: AgentSetupManifest = { skills: [] };\n if (config?.skills?.length) {\n manifest.skills = await installSkills(sb, config.skills, { dir: SKILL_DIR });\n // 发现指引不是可选装饰:没有它,codex 连一次读 skill 文件的 shell 调用都不会发生。\n await appendProjectInstruction(sb, skillDiscoveryInstruction(SKILL_DIR, installedSkillNames(manifest.skills)));\n }\n if (config?.plugins?.length) {\n manifest.nativePlugins = await installPluginsFromResetState(sb, config.plugins);\n }\n if (config?.mcpServers?.length) {\n // manifest 只记「挂了哪个 server、怎么连」;env / headers 里可能有 token,不落盘。\n manifest.mcpServers = mcpManifestEntries(config.mcpServers);\n }\n if (nativeConfig) {\n // 只记来源路径与字节哈希,不落正文(任意官方配置都可能带敏感字符串)。\n manifest.nativeConfigFile = { agent: \"codex\", path: nativeConfig.path, sha256: nativeConfig.sha256 };\n }\n if (manifest.skills.length ||\n manifest.nativePlugins?.length ||\n manifest.mcpServers?.length ||\n manifest.nativeConfigFile) {\n ctx.reportSetup(manifest);\n }\n // 安装后钩子(postSetup):排在 manifest 之后——manifest 审计 Adapter 自身的安装事实,\n // 钩子失败不该丢掉这份证据。\n await runPostSetupHooks(sb, ctx, \"codex\", config?.postSetup);\n },\n catch: (cause) => cause,\n });\n })), { signal: ctx.signal }),\n async teardown(sb, ctx) {\n // preTeardown 与 postSetup 成对:LIFO 镜像,先于 agent 自己的收尾步骤执行。\n // codex 目前没有其它收尾步骤,这段就是整个 teardown。\n await runPreTeardownHooks(sb, ctx, \"codex\", config?.preTeardown);\n await attemptResources(ctx)?.shutdownAll(ctx.signal);\n },\n tracing: {\n protocol: \"http/json\",\n async configure(sb, ctx) {\n const endpoint = ctx.telemetry!.endpoint;\n const otel = `\\n[otel]\\n` +\n `environment = \"niceeval\"\\n` +\n `exporter = \"none\"\\n` +\n `metrics_exporter = \"none\"\\n\\n` +\n `[otel.trace_exporter.otlp-http]\\n` +\n `endpoint = \"${endpoint}\"\\n` +\n `protocol = \"json\"\\n`;\n await sb.runShell(`cat >> ~/.codex/config.toml <<'EOF'\\n${otel}EOF\\n`);\n },\n },\n async send(input, ctx) {\n const apiKey = getApiKey();\n return sendCodexAppServer(input, ctx, {\n ...agentEnv,\n CODEX_API_KEY: apiKey,\n ...ctx.telemetry?.env,\n }, (raw, events, nativeText) => {\n const code = codexCapacityCode(raw);\n return {\n acceptance: codexAcceptance(raw, events, nativeText),\n ...(code === undefined ? {} : { cause: normalizeExternalCause({ code }) }),\n };\n });\n },\n }), config?.postSetup, config?.preTeardown);\n}\n/** 把 Codex JSONL 的高频原始帧收敛成 dashboard 当前行的一条短 detail。 */\nfunction codexProgressReporter(ctx: import(\"../types.ts\").AgentContext): (chunk: string) => void {\n let remainder = \"\";\n return (chunk) => {\n remainder += chunk;\n const lines = remainder.split(\"\\n\");\n remainder = lines.pop() ?? \"\";\n for (const line of lines) {\n const detail = codexProgressDetail(line);\n if (detail)\n ctx.progress({ message: detail });\n }\n };\n}\nfunction codexProgressDetail(line: string): string | undefined {\n let event: globalThis.Record<string, unknown>;\n try {\n const parsed: unknown = JSON.parse(line);\n if (!parsed || typeof parsed !== \"object\")\n return undefined;\n event = parsed as globalThis.Record<string, unknown>;\n }\n catch {\n return undefined;\n }\n const item = event.item;\n if (!item || typeof item !== \"object\")\n return undefined;\n const data = item as globalThis.Record<string, unknown>;\n const type = typeof data.type === \"string\" ? data.type : \"\";\n const completed = event.type === \"item.completed\";\n const preview = (value: unknown, limit = 96): string | undefined => {\n if (typeof value !== \"string\")\n return undefined;\n const text = value.replace(/\\s+/g, \" \").trim();\n if (!text)\n return undefined;\n return text.length > limit ? `${text.slice(0, limit - 1)}…` : text;\n };\n if (type === \"command_execution\") {\n const command = preview(data.command) ?? \"shell\";\n return completed ? `tool: ${command} · completed` : `tool: ${command}`;\n }\n if (type === \"mcp_tool_call\") {\n const tool = typeof data.tool === \"string\" ? data.tool : \"MCP\";\n const server = typeof data.server === \"string\" ? `${data.server}.` : \"\";\n return completed ? `tool: ${server}${tool} · completed` : `tool: ${server}${tool}`;\n }\n if (type === \"web_search\")\n return completed ? \"tool: web search · completed\" : \"tool: web search\";\n if (type === \"file_change\")\n return completed ? \"tool: file change · completed\" : \"tool: file change\";\n if (type === \"reasoning\") {\n const text = preview(data.text ?? data.content);\n return text ? `thinking: ${text}` : \"thinking\";\n }\n if (type === \"agent_message\") {\n const text = preview(data.text ?? data.message);\n return text ? `assistant: ${text}` : \"assistant response\";\n }\n return undefined;\n}\n/**\n * 先按 `marketplace.name` 连 Marketplace(同名只连一次,`--ref` 钉版本,add 后回读注册\n * 列表校验名字真的注册上了),再装指定 Plugin。\n * 只按 codex 自己的 marketplace / plugin 协议走 —— 与 claude-code 的实现不共用命令、不共用类型。\n *\n * 注册类命令是追加式的,而 Sandbox 复用下沙箱带着上一条 attempt 的 `$HOME` 进场,所以每一步\n * 先读沙箱真实状态、把它收敛到声明,再执行 add / install(契约见 docs/feature/adapters/\n * architecture/coding-agent-extensions.md「安装收敛:不假设沙箱空白」)。空白沙箱读回为空,\n * 走的是同一条代码路径。\n */\nexport async function installPlugins(sb: Sandbox, plugins: readonly CodexPluginSpec[]): Promise<NonNullable<AgentSetupManifest[\"nativePlugins\"]>> {\n await resetPluginState(sb, plugins);\n return installPluginsFromResetState(sb, plugins);\n}\n/**\n * 在 config.toml 仍保留上一条 Attempt 的 Plugin 声明时清理声明态与安装体。\n * setup 必须先调用它再覆盖 config;直接调用 installPlugins() 时也走同一收敛入口。\n */\nasync function resetPluginState(sb: Sandbox, plugins: readonly CodexPluginSpec[]): Promise<void> {\n // 摘除顺序固定「先卸完全部同名插件、后摘 marketplace」:marketplace 注册一摘,\n // `codex plugin list` 就不再列出挂在它名下的安装(真机核对 codex-cli 0.146.0),\n // 残留的那份从此定位不到。多个插件共用一个 marketplace 时只需摘一次注册。\n for (const plugin of plugins) {\n await removeInstalledPlugins(sb, plugin.name);\n }\n const marketplaces = new Set<string>();\n for (const plugin of plugins) {\n if (marketplaces.has(plugin.marketplace.name))\n continue;\n await dropRegisteredMarketplace(sb, plugin.marketplace.name);\n marketplaces.add(plugin.marketplace.name);\n }\n}\n/** 安装阶段只接受已经由 resetPluginState() 收敛过的 Sandbox。 */\nasync function installPluginsFromResetState(sb: Sandbox, plugins: readonly CodexPluginSpec[]): Promise<NonNullable<AgentSetupManifest[\"nativePlugins\"]>> {\n const connected = new Set<string>();\n const out: NonNullable<AgentSetupManifest[\"nativePlugins\"]> = [];\n for (const plugin of plugins) {\n const { marketplace } = plugin;\n if (!connected.has(marketplace.name)) {\n const refFlag = marketplace.ref ? ` --ref ${shared.shellQuote(marketplace.ref)}` : \"\";\n // --sparse 只影响拉取速度,不影响装出来的内容;manifest 不记录它。\n const sparseFlags = (marketplace.sparse ?? [])\n .map((path) => ` --sparse ${shared.shellQuote(path)}`)\n .join(\"\");\n const add = await sb.runShell(`${shared.agentBin(\"codex\")} plugin marketplace add ${shared.shellQuote(marketplace.source)}${refFlag}${sparseFlags}`);\n if (add.exitCode !== 0) {\n throw new Error(t(\"plugin.marketplaceFailed\", {\n agent: \"codex\",\n name: marketplace.name,\n source: marketplace.source,\n ref: marketplace.ref ?? \"(default)\",\n tail: outputTail(add),\n }));\n }\n // add 静默按目标仓库 manifest 的 name 注册,错名会拖到 plugin add 才炸;\n // 回读注册列表立刻校验(契约与真机复现见 marketplace.ts 顶部说明)。\n await verifyMarketplaceName(sb, {\n agent: \"codex\",\n listCommand: \"codex plugin marketplace list --json\",\n marketplace,\n knownNames: connected,\n });\n connected.add(marketplace.name);\n }\n const install = await sb.runShell(`${shared.agentBin(\"codex\")} plugin add ${shared.shellQuote(`${plugin.name}@${marketplace.name}`)}`);\n if (install.exitCode !== 0) {\n throw new Error(t(\"plugin.installFailed\", {\n agent: \"codex\",\n name: plugin.name,\n marketplace: marketplace.name,\n tail: outputTail(install),\n }));\n }\n const resolvedVersion = await installedVersion(sb, plugin.name, marketplace.name);\n out.push({\n agent: \"codex\",\n marketplace: {\n name: marketplace.name,\n source: marketplace.source,\n ...(marketplace.ref !== undefined ? { ref: marketplace.ref } : {}),\n },\n name: plugin.name,\n ...(resolvedVersion !== undefined ? { resolvedVersion } : {}),\n });\n }\n return out;\n}\n/**\n * `codex plugin list --json` 的已安装条目。真实输出(实测 codex-cli 0.144.1 / 0.146.0)是\n * `{ installed: [...], available: [...] }`,已安装的这条在 `installed` 数组里,字段名是\n * `pluginId`(不是 `id`)——早前按裸数组 / `{ plugins: [...] }` 猜的形状全部猜错,\n * `installedVersion` 曾对任何真实安装恒返回 undefined(见\n * memory/native-plugin-marketplace-name-not-caller-assignable.md 的姊妹发现,2026-07-13 e2e 复现)。\n * 形状按 CLI 宽容解析,抠不出(非 JSON / 未知形状)返回 undefined,由调用方决定放行还是抛错。\n */\ninterface CodexInstalledPlugin {\n pluginId?: string;\n id?: string;\n name?: string;\n marketplaceName?: string;\n version?: string;\n}\nfunction codexInstalledPlugins(stdout: string): CodexInstalledPlugin[] | undefined {\n let raw: unknown;\n try {\n raw = JSON.parse(stdout);\n }\n catch {\n return undefined;\n }\n const arr = Array.isArray(raw)\n ? raw\n : raw && typeof raw === \"object\"\n ? (raw as {\n installed?: unknown;\n }).installed\n : undefined;\n if (!Array.isArray(arr))\n return undefined;\n return arr.filter((item): item is CodexInstalledPlugin => !!item && typeof item === \"object\");\n}\n/** 已安装条目的可寻址 id(`<plugin>@<marketplace>`);codex 的 remove 不接受裸插件名。 */\nfunction codexPluginId(entry: CodexInstalledPlugin): string | undefined {\n const id = entry.pluginId ??\n entry.id ??\n (entry.name && entry.marketplaceName ? `${entry.name}@${entry.marketplaceName}` : undefined);\n return id?.includes(\"@\") ? id : undefined;\n}\n/**\n * 与声明同名的 Plugin 已安装就先移除(不论它出自哪个 marketplace),让本条 attempt 的安装与\n * manifest 里的解析版本同源。已装即跳过会把上一条 attempt 装出的内容记成本条的安装事实。\n */\nasync function removeInstalledPlugins(sb: Sandbox, name: string): Promise<void> {\n const listCommand = \"codex plugin list --json\";\n const res = await sb.runShell(`${shared.agentBin(\"codex\")} plugin list --json`);\n const list = res.exitCode === 0 ? codexInstalledPlugins(res.stdout) : undefined;\n if (list === undefined) {\n throw new Error(t(\"plugin.listFailed\", { agent: \"codex\", command: listCommand, tail: outputTail(res) }));\n }\n const ids = new Set<string>();\n for (const entry of list) {\n const id = codexPluginId(entry);\n if (id && (entry.name ?? id.split(\"@\")[0]) === name)\n ids.add(id);\n }\n for (const id of ids) {\n const remove = await sb.runShell(`${shared.agentBin(\"codex\")} plugin remove ${shared.shellQuote(id)}`);\n if (remove.exitCode !== 0) {\n throw new Error(t(\"plugin.removeFailed\", { agent: \"codex\", name: id, tail: outputTail(remove) }));\n }\n }\n}\n/**\n * 按声明名字无条件摘除同名 marketplace 注册,再由调用方按声明 source 与 ref 重新 add。\n * 不以「注册在 `marketplace list --json` 里可见」为前提:注册状态分两半——用户配置里的注册项\n * 和磁盘上的 marketplace 数据。原生配置整层替换会抹掉前一半,残下的后一半 list 报告不出来,\n * add 却会撞它报 `marketplace '<name>' is already added from a different source`\n * (复用沙箱第二条 attempt 真机复现,codex-cli 0.146.0;`remove` 对这种残根照样清得掉)。\n * 「本就没有可摘的」(`is not configured or installed`,exit 1)按已收敛处理;其它失败也不在\n * 这里报错——紧随其后的 add 是权威失败面,摘不干净它会带着 codex 的原话失败。\n */\nasync function dropRegisteredMarketplace(sb: Sandbox, name: string): Promise<void> {\n await sb.runShell(`${shared.agentBin(\"codex\")} plugin marketplace remove ${shared.shellQuote(name)}`);\n}\n/** 装完回读版本;取不到不阻断安装(manifest 里 resolvedVersion 省略)。 */\nasync function installedVersion(sb: Sandbox, name: string, marketplace: string): Promise<string | undefined> {\n const res = await sb.runShell(`${shared.agentBin(\"codex\")} plugin list --json --marketplace ${shared.shellQuote(marketplace)}`);\n if (res.exitCode !== 0)\n return undefined;\n const list = codexInstalledPlugins(res.stdout);\n const hit = list?.find((p) => p.pluginId === `${name}@${marketplace}` || p.id === `${name}@${marketplace}` || p.name === name);\n return typeof hit?.version === \"string\" ? hit.version : undefined;\n}\nfunction outputTail(res: {\n stdout: string;\n stderr: string;\n}, n = 12): string {\n return (res.stdout + res.stderr).trim().split(\"\\n\").slice(-n).join(\"\\n\");\n}\nexport default codexAgent();\n"]}
@@ -24,15 +24,15 @@ export interface CodexPluginSpec {
24
24
  name: string;
25
25
  }
26
26
  export interface CodexConfig {
27
- /** 代理 / OpenAI API key。省略时读 OPENAI_API_KEY env。 */
27
+ /** 代理 / OpenAI API key。省略时读 CODEX_API_KEY env。 */
28
28
  apiKey?: string;
29
- /** OpenAI 兼容代理 base URL(如 https://s2a.example.com/v1)。省略时读 OPENAI_BASE_URL env。 */
29
+ /** OpenAI 兼容代理 base URL(如 https://s2a.example.com/v1)。省略时读 CODEX_BASE_URL env。 */
30
30
  baseUrl?: string;
31
31
  /**
32
32
  * 注入每次 Codex CLI 进程的额外环境变量。首轮 `codex exec` 与续轮 `codex exec resume`
33
33
  * 使用同一份声明;Codex 启动的 lifecycle Hook、MCP 动态 header 与命令子进程都会继承。
34
34
  * 值只经 Sandbox command options 传入,不拼进 shell 文本或写入 setup manifest,并全部按
35
- * 潜在敏感值从 timing / execution / error 证据中脱敏。`OPENAI_API_KEY` 仍由 `apiKey` 或
35
+ * 潜在敏感值从 timing / execution / error 证据中脱敏。`CODEX_API_KEY` 仍由 `apiKey` 或
36
36
  * 宿主同名环境变量提供,Adapter 的鉴权值会覆盖这里的同名键。
37
37
  * env value 不进入 carry 身份。会改变被测行为的非敏感值必须同时声明在 Experiment flags
38
38
  * 或所属 Plugin identity;只轮换凭据不会让旧结果失效。
@@ -24,15 +24,15 @@ export interface CodexPluginSpec {
24
24
  name: string;
25
25
  }
26
26
  export interface CodexConfig {
27
- /** 代理 / OpenAI API key。省略时读 OPENAI_API_KEY env。 */
27
+ /** 代理 / OpenAI API key。省略时读 CODEX_API_KEY env。 */
28
28
  apiKey?: string;
29
- /** OpenAI 兼容代理 base URL(如 https://s2a.example.com/v1)。省略时读 OPENAI_BASE_URL env。 */
29
+ /** OpenAI 兼容代理 base URL(如 https://s2a.example.com/v1)。省略时读 CODEX_BASE_URL env。 */
30
30
  baseUrl?: string;
31
31
  /**
32
32
  * 注入每次 Codex CLI 进程的额外环境变量。首轮 `codex exec` 与续轮 `codex exec resume`
33
33
  * 使用同一份声明;Codex 启动的 lifecycle Hook、MCP 动态 header 与命令子进程都会继承。
34
34
  * 值只经 Sandbox command options 传入,不拼进 shell 文本或写入 setup manifest,并全部按
35
- * 潜在敏感值从 timing / execution / error 证据中脱敏。`OPENAI_API_KEY` 仍由 `apiKey` 或
35
+ * 潜在敏感值从 timing / execution / error 证据中脱敏。`CODEX_API_KEY` 仍由 `apiKey` 或
36
36
  * 宿主同名环境变量提供,Adapter 的鉴权值会覆盖这里的同名键。
37
37
  * env value 不进入 carry 身份。会改变被测行为的非敏感值必须同时声明在 Experiment flags
38
38
  * 或所属 Plugin identity;只轮换凭据不会让旧结果失效。
@@ -24,15 +24,15 @@ export interface CodexPluginSpec {
24
24
  name: string;
25
25
  }
26
26
  export interface CodexConfig {
27
- /** 代理 / OpenAI API key。省略时读 OPENAI_API_KEY env。 */
27
+ /** 代理 / OpenAI API key。省略时读 CODEX_API_KEY env。 */
28
28
  apiKey?: string;
29
- /** OpenAI 兼容代理 base URL(如 https://s2a.example.com/v1)。省略时读 OPENAI_BASE_URL env。 */
29
+ /** OpenAI 兼容代理 base URL(如 https://s2a.example.com/v1)。省略时读 CODEX_BASE_URL env。 */
30
30
  baseUrl?: string;
31
31
  /**
32
32
  * 注入每次 Codex CLI 进程的额外环境变量。首轮 `codex exec` 与续轮 `codex exec resume`
33
33
  * 使用同一份声明;Codex 启动的 lifecycle Hook、MCP 动态 header 与命令子进程都会继承。
34
34
  * 值只经 Sandbox command options 传入,不拼进 shell 文本或写入 setup manifest,并全部按
35
- * 潜在敏感值从 timing / execution / error 证据中脱敏。`OPENAI_API_KEY` 仍由 `apiKey` 或
35
+ * 潜在敏感值从 timing / execution / error 证据中脱敏。`CODEX_API_KEY` 仍由 `apiKey` 或
36
36
  * 宿主同名环境变量提供,Adapter 的鉴权值会覆盖这里的同名键。
37
37
  * env value 不进入 carry 身份。会改变被测行为的非敏感值必须同时声明在 Experiment flags
38
38
  * 或所属 Plugin identity;只轮换凭据不会让旧结果失效。
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deepSeekHarnessAgent = exports.ompAgent = exports.openClawAgent = exports.hermesAgent = exports.openCodeAgent = exports.bubAgent = exports.codexAgent = exports.claudeCodeAgent = exports.BUILTIN_AGENTS = exports.aiSdkAgent = exports.turnFromAiSdk = exports.deltaStream = exports.driveFrameStream = exports.createLangGraphEventStream = exports.createCodexThreadEventStream = exports.createPiAgentEventStream = exports.createClaudeSdkEventStream = exports.sseJsonFrames = exports.turnFromResponses = exports.turnFromChatCompletion = exports.responsesEvidenceCoverage = exports.chatCompletionEvidenceCoverage = exports.uiMessageStreamAgent = exports.mapCodexSpans = exports.heuristicTag = exports.tagSpan = exports.normalizeExternalCause = exports.externalCauseText = exports.externalCauseMessageChain = exports.sendFailureText = exports.makeSendFailure = exports.opaqueCommandProjection = exports.notCommandProjection = exports.normalizeLogicalCommand = exports.commandProjection = exports.LOGICAL_COMMAND_NORMALIZER = exports.completeEvidenceCoverage = exports.agentBin = exports.createNpmCliInstaller = exports.shared = exports.createSessionSlot = exports.defineSandboxAgent = exports.defineAgent = void 0;
3
+ exports.deepSeekHarnessAgent = exports.ompAgent = exports.openClawAgent = exports.hermesAgent = exports.openCodeAgent = exports.bubAgent = exports.codexAgent = exports.claudeCodeAgent = exports.BUILTIN_AGENTS = exports.aiSdkAgent = exports.turnFromAiSdk = exports.deltaStream = exports.driveFrameStream = exports.createLangGraphEventStream = exports.createCodexThreadEventStream = exports.createPiAgentEventStream = exports.createClaudeSdkEventStream = exports.sseJsonFrames = exports.turnFromResponses = exports.turnFromChatCompletion = exports.responsesEvidenceCoverage = exports.chatCompletionEvidenceCoverage = exports.uiMessageStreamAgent = exports.mapCodexSpans = exports.heuristicTag = exports.tagSpan = exports.normalizeExternalCause = exports.externalCauseText = exports.externalCauseMessageChain = exports.sendFailureText = exports.makeSendFailure = exports.opaqueCommandProjection = exports.notCommandProjection = exports.normalizeLogicalCommand = exports.commandProjection = exports.LOGICAL_COMMAND_NORMALIZER = exports.completeEvidenceCoverage = exports.acquireManagedProcess = exports.agentBin = exports.createNpmCliInstaller = exports.shared = exports.createSessionSlot = exports.defineSandboxAgent = exports.defineAgent = void 0;
4
4
  // niceeval/adapter 公开导出:「连到哪个 AI」相关的类型 + 内置 adapter + 自定义 adapter 的入口。
5
5
  var define_ts_1 = require("../define.cjs");
6
6
  Object.defineProperty(exports, "defineAgent", { enumerable: true, get: function () { return define_ts_1.defineAgent; } });
@@ -12,6 +12,8 @@ Object.defineProperty(exports, "shared", { enumerable: true, get: function () {
12
12
  var npm_staged_ts_1 = require("./npm-staged.cjs");
13
13
  Object.defineProperty(exports, "createNpmCliInstaller", { enumerable: true, get: function () { return npm_staged_ts_1.createNpmCliInstaller; } });
14
14
  Object.defineProperty(exports, "agentBin", { enumerable: true, get: function () { return npm_staged_ts_1.agentBin; } });
15
+ var managed_process_ts_1 = require("./managed-process.cjs");
16
+ Object.defineProperty(exports, "acquireManagedProcess", { enumerable: true, get: function () { return managed_process_ts_1.acquireManagedProcess; } });
15
17
  // 证据覆盖声明:官方 SDK 适配器声明全通道 complete 用 completeEvidenceCoverage;
16
18
  // 手写映射按实际情况声明(见 docs/feature/adapters/architecture/evidence.md)。
17
19
  var coverage_ts_1 = require("../assertions/coverage.cjs");
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":";;;AAAA,uEAAuE;AACvE,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,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,yEAAyE;AACzE,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,6EAA6E;AAC7E,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 { 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\";\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// 映射目标(什么属性亮起瀑布图的什么)见 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/参数增量累加器。见 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,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,yEAAyE;AACzE,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,6EAA6E;AAC7E,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 { 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// 映射目标(什么属性亮起瀑布图的什么)见 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/参数增量累加器。见 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"]}
@@ -4,6 +4,7 @@ export { shared } from "./shared.cjs";
4
4
  export type { Shared } from "./shared.cjs";
5
5
  export { createNpmCliInstaller, agentBin } from "./npm-staged.cjs";
6
6
  export type { NpmCliInstallerOptions } from "./npm-staged.cjs";
7
+ export { acquireManagedProcess } from "./managed-process.cjs";
7
8
  export { completeEvidenceCoverage } from "../assertions/coverage.cjs";
8
9
  export type { EvidenceCoverageStatus, EvidenceCoverageEntry, EvidenceCoverage, TurnEvidenceCoverage, } from "../types.cjs";
9
10
  export { LOGICAL_COMMAND_NORMALIZER, commandProjection, normalizeLogicalCommand, notCommandProjection, opaqueCommandProjection, } from "../o11y/command-projection.cjs";
@@ -4,6 +4,7 @@ export { shared } from "./shared.mjs";
4
4
  export type { Shared } from "./shared.mjs";
5
5
  export { createNpmCliInstaller, agentBin } from "./npm-staged.mjs";
6
6
  export type { NpmCliInstallerOptions } from "./npm-staged.mjs";
7
+ export { acquireManagedProcess } from "./managed-process.mjs";
7
8
  export { completeEvidenceCoverage } from "../assertions/coverage.mjs";
8
9
  export type { EvidenceCoverageStatus, EvidenceCoverageEntry, EvidenceCoverage, TurnEvidenceCoverage, } from "../types.mjs";
9
10
  export { LOGICAL_COMMAND_NORMALIZER, commandProjection, normalizeLogicalCommand, notCommandProjection, opaqueCommandProjection, } from "../o11y/command-projection.mjs";