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
@@ -1 +1 @@
1
- {"version":3,"file":"local.js","sourceRoot":"","sources":["local.ts"],"names":[],"mappings":"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","sourcesContent":["// Local 沙箱 provider:宿主机本地目录直接当 workdir 跑,零隔离、零仪式\n// (契约见 docs/feature/sandbox/local.md)。runCommand 按 argv 直接 spawn 宿主进程(不经 shell);\n// runShell 交给宿主 bash(与其它 provider 的 runShell 语义一致);文件 IO 走本地 fs——\n// 「沙箱」就是宿主文件系统本身,没有远端控制面、没有预制环境、没有留存。\n//\n// 变更分类账的 GIT_DIR 不能像其它 provider 那样固定在同一个宿主路径:多数 provider 每次创建都是\n// 全新隔离文件系统,固定路径天然不冲突;本地档的\"沙箱\"是宿主机本身,同机先后或并发跑的多个\n// attempt 共享同一个 /tmp,固定路径会在多次运行之间互相踩踏用户看不到的 git 索引。这里改用\n// mkdtemp 出的每实例私有目录,经 sandbox/ledger-paths.ts 登记给 runner/ledger.ts 消费——\n// ledger.ts 不需要认识\"local\"这个名字,只需要知道\"这个 sandboxId 有没有登记覆盖路径\"。\nimport { spawn, execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { mkdtemp, mkdir, rm, readFile as fsReadFile, writeFile as fsWriteFile, access, stat } from \"node:fs/promises\";\nimport { constants as fsConstants } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, join, resolve as resolvePath } from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nimport type { CommandOptions, CommandResult, SuccessfulCommandResult } from \"../types.ts\";\nimport { resolveLocalPath, resolveSandboxPath } from \"./paths.ts\";\nimport { commandLimit, SandboxCommandTimeoutError } from \"./deadline.ts\";\nimport { collectLocalFiles, type CollectedLocalFile } from \"./local-files.ts\";\nimport { downloadDirectoryByList } from \"./download-directory.ts\";\nimport { successfulCommandResult } from \"./operations.ts\";\nimport { supportedBackendCapability, unsupportedBackendCapability, type SandboxProviderBackend, } from \"./backend.ts\";\nimport { registerLedgerPaths, unregisterLedgerPaths } from \"./ledger-paths.ts\";\nimport { t } from \"../i18n/index.ts\";\nconst execFileAsync = promisify(execFile);\nexport interface LocalSandboxOptions {\n /** 显式 workdir;省略时从当前目录向上解析 git 仓库根。 */\n dir?: string;\n /** attempt 的超时上限(毫秒),单条命令未显式传 `timeout` 时的上限来源;省略 = 没有上限。 */\n timeout?: number;\n /** attempt deadline 的截止时刻(epoch ms);单条命令按剩余量取上限(见 deadline.ts)。 */\n deadlineAt?: number;\n /**\n * 按序前置到宿主 `PATH` 的目录;省略 = 不改 PATH(见 docs/feature/sandbox/library.md\n * 「PATH:受管变量与 pathPrepend」)。\n */\n pathPrepend?: readonly string[];\n /**\n * 内部测试用:覆盖「当前目录」的解析起点(省略 `dir` 时向上找 git 根、显式 `dir` 时的相对路径\n * 基准都从它算)。生产路径(runtime.ts 的 provider materializer)从不传这个字段,恒用\n * `process.cwd()`——不是公开 spec 的一部分,`localSandbox()` 工厂不暴露它。\n */\n cwd?: string;\n}\n/** 从给定目录向上解析 git 仓库根;不在任何 git 仓库内时给出两条出路。 */\nasync function resolveGitRoot(cwd: string): Promise<string> {\n try {\n const { stdout } = await execFileAsync(\"git\", [\"rev-parse\", \"--show-toplevel\"], { cwd });\n return stdout.trim();\n }\n catch {\n throw new Error(t(\"local.notARepo\"));\n }\n}\n/** 显式 dir:相对路径按 cwd 解析;必须已存在且可写(不自动创建)。 */\nasync function resolveExplicitDir(dir: string, cwd: string): Promise<string> {\n const abs = resolvePath(cwd, dir);\n try {\n await access(abs, fsConstants.W_OK);\n }\n catch (e) {\n const err = e as NodeJS.ErrnoException;\n if (err.code === \"ENOENT\")\n throw new Error(t(\"local.dirMissing\", { dir: abs }));\n throw new Error(t(\"local.dirNotWritable\", { dir: abs, message: err.message }));\n }\n const info = await stat(abs);\n if (!info.isDirectory())\n throw new Error(t(\"local.dirNotWritable\", { dir: abs, message: \"not a directory\" }));\n return abs;\n}\nasync function resolveWorkdir(dir: string | undefined, cwd: string): Promise<string> {\n return dir !== undefined ? resolveExplicitDir(dir, cwd) : resolveGitRoot(cwd);\n}\ninterface SpawnOpts {\n cwd: string;\n env: NodeJS.ProcessEnv;\n /** 缺席 = 这条命令没有上限(四层解析链一个都没声明)。 */\n timeout?: number;\n explicitTimeout?: boolean;\n onStdout?: CommandOptions[\"onStdout\"];\n onStderr?: CommandOptions[\"onStderr\"];\n signal?: AbortSignal;\n}\n/** argv 直接 spawn(不经 shell)与「bash -c script」共用的执行核心。 */\nfunction runSpawned(command: string, args: string[], opts: SpawnOpts): Promise<CommandResult> {\n return new Promise((resolvePromise, reject) => {\n // detached(POSIX):超时时能杀掉整个进程组,不只是直接子进程——agent 命令常常自己再\n // 起子进程(npm 脚本、shell 管道),只杀顶层容易留下孤儿。Windows 没有进程组这个概念,\n // 退化成直接 kill 顶层进程。\n const posix = process.platform !== \"win32\";\n const child = spawn(command, args, { cwd: opts.cwd, env: opts.env, detached: posix });\n let stdout = \"\";\n let stderr = \"\";\n let callbackChain = Promise.resolve();\n let settled = false;\n const killTree = (): void => {\n if (posix && child.pid !== undefined) {\n try {\n process.kill(-child.pid, \"SIGKILL\");\n }\n catch {\n child.kill(\"SIGKILL\");\n }\n }\n else {\n child.kill(\"SIGKILL\");\n }\n };\n let termination: \"timeout\" | \"abort\" | undefined;\n const timer = opts.timeout === undefined ? undefined : setTimeout(() => {\n termination = \"timeout\";\n killTree();\n }, opts.timeout);\n const onAbort = (): void => {\n termination = \"abort\";\n killTree();\n };\n opts.signal?.addEventListener(\"abort\", onAbort, { once: true });\n if (opts.signal?.aborted)\n onAbort();\n child.stdout?.on(\"data\", (chunk: Buffer) => {\n const text = chunk.toString(\"utf-8\");\n stdout += text;\n const onStdout = opts.onStdout;\n if (onStdout !== undefined)\n callbackChain = callbackChain.then(() => onStdout(text));\n });\n child.stderr?.on(\"data\", (chunk: Buffer) => {\n const text = chunk.toString(\"utf-8\");\n stderr += text;\n const onStderr = opts.onStderr;\n if (onStderr !== undefined)\n callbackChain = callbackChain.then(() => onStderr(text));\n });\n child.on(\"error\", (err) => {\n if (settled)\n return;\n settled = true;\n if (timer !== undefined)\n clearTimeout(timer);\n opts.signal?.removeEventListener(\"abort\", onAbort);\n reject(err);\n });\n child.on(\"close\", (code, signal) => {\n if (settled)\n return;\n settled = true;\n if (timer !== undefined)\n clearTimeout(timer);\n opts.signal?.removeEventListener(\"abort\", onAbort);\n callbackChain\n .then(() => {\n if (termination === \"abort\") {\n reject(opts.signal?.reason ?? new DOMException(\"sandbox command aborted\", \"AbortError\"));\n return;\n }\n if (termination === \"timeout\" && signal === \"SIGKILL\" && code === null && opts.timeout !== undefined) {\n reject(new SandboxCommandTimeoutError(t(\"local.commandTimeout\", { timeoutMs: opts.timeout }), opts.timeout, opts.explicitTimeout === true));\n return;\n }\n resolvePromise({ stdout, stderr, exitCode: code ?? 0 });\n })\n .catch(reject);\n });\n });\n}\n/**\n * Local 沙箱:宿主机的一个本地目录。实现 ../types.ts 的 Sandbox 接口。\n * 契约见 docs/feature/sandbox/local.md;实现要点见 docs/feature/sandbox/architecture.md\n * 「Local provider(宿主机,零隔离)」。\n */\nexport class LocalSandbox implements SandboxProviderBackend {\n readonly workdir: string;\n readonly otlpHost = \"localhost\";\n readonly sandboxId: string;\n private readonly timeout?: number;\n private deadlineAt?: number;\n private readonly ledgerBase: string;\n /** factory `pathPrepend`;按声明顺序前置到宿主 PATH,省略 = 空数组。 */\n private readonly pathPrepend: readonly string[];\n readonly capabilities = {\n rootCommands: unsupportedBackendCapability,\n appendLog: unsupportedBackendCapability,\n suspend: unsupportedBackendCapability,\n ensureLifetime: unsupportedBackendCapability,\n setCommandDeadline: supportedBackendCapability((deadlineAt?: number) => this.setCommandDeadline(deadlineAt)),\n };\n private constructor(workdir: string, ledgerBase: string, pathPrepend: readonly string[], timeout?: number, deadlineAt?: number) {\n this.workdir = workdir;\n this.ledgerBase = ledgerBase;\n this.pathPrepend = pathPrepend;\n this.timeout = timeout;\n this.deadlineAt = deadlineAt;\n this.sandboxId = `local-${randomUUID().slice(0, 8)}`;\n }\n /** 解析 workdir + 备好变更分类账的私有临时目录;Local provider 不参与 provisioning 重试。 */\n static async create(options: LocalSandboxOptions = {}): Promise<LocalSandbox> {\n const workdir = await resolveWorkdir(options.dir, options.cwd ?? process.cwd());\n const ledgerBase = await mkdtemp(join(tmpdir(), \"niceeval-local-ledger-\"));\n const sandbox = new LocalSandbox(workdir, ledgerBase, options.pathPrepend ?? [], options.timeout, options.deadlineAt);\n // runner/ledger.ts 按 sandboxId 读取这份登记——本地档的\"沙箱\"是宿主机本身,固定的宿主路径\n // 会在同机多次运行之间互相踩踏,每实例必须有自己的一份(见文件头注释)。\n registerLedgerPaths(sandbox.sandboxId, {\n gitDir: join(ledgerBase, \"ledger.git\"),\n exportDir: join(ledgerBase, \"export\"),\n });\n return sandbox;\n }\n /** 复用下由池在每次借出时换成承接者自己的 deadline(见 sandbox/deadline.ts)。 */\n setCommandDeadline(deadlineAt?: number): void {\n this.deadlineAt = deadlineAt;\n }\n /** 宿主 env:`process.env` 叠加 `pathPrepend` 前置后的 PATH,`opts.env` 仍可覆盖任意键(含 PATH)。 */\n private hostEnv(opts: CommandOptions): NodeJS.ProcessEnv {\n const pathBase = this.pathPrepend.length > 0\n ? { PATH: [...this.pathPrepend, ...(process.env.PATH ?? \"\").split(\":\")].join(\":\") }\n : {};\n return { ...process.env, ...pathBase, ...opts.env };\n }\n async runCommand(cmd: string, args: readonly string[] = [], opts: CommandOptions = {}): Promise<CommandResult> {\n if (opts.user !== undefined)\n throw new Error(t(\"local.userUnsupported\", { user: opts.user }));\n const limit = commandLimit(opts, { commandTimeoutMs: this.timeout, deadlineAt: this.deadlineAt });\n return runSpawned(cmd, [...args], {\n cwd: resolveSandboxPath(this.workdir, opts.cwd),\n env: this.hostEnv(opts),\n ...(limit.timeoutMs !== undefined ? { timeout: limit.timeoutMs } : {}),\n explicitTimeout: limit.explicit,\n onStdout: opts.onStdout,\n onStderr: opts.onStderr,\n signal: opts.signal,\n });\n }\n async runShell(script: string, opts: CommandOptions = {}): Promise<CommandResult> {\n if (opts.user !== undefined)\n throw new Error(t(\"local.userUnsupported\", { user: opts.user }));\n const limit = commandLimit(opts, { commandTimeoutMs: this.timeout, deadlineAt: this.deadlineAt });\n return runSpawned(\"bash\", [\"-c\", script], {\n cwd: resolveSandboxPath(this.workdir, opts.cwd),\n env: this.hostEnv(opts),\n ...(limit.timeoutMs !== undefined ? { timeout: limit.timeoutMs } : {}),\n explicitTimeout: limit.explicit,\n onStdout: opts.onStdout,\n onStderr: opts.onStderr,\n signal: opts.signal,\n });\n }\n async runCommandOrThrow(cmd: string, args: readonly string[] = [], opts: CommandOptions = {}): Promise<SuccessfulCommandResult> {\n return successfulCommandResult(await this.runCommand(cmd, args, opts), opts.sensitiveValues);\n }\n async runShellOrThrow(script: string, opts: CommandOptions = {}): Promise<SuccessfulCommandResult> {\n return successfulCommandResult(await this.runShell(script, opts), opts.sensitiveValues);\n }\n async readText(path: string): Promise<string> {\n return fsReadFile(resolveSandboxPath(this.workdir, path), \"utf-8\");\n }\n async pathExists(path: string): Promise<boolean> {\n try {\n await access(resolveSandboxPath(this.workdir, path));\n return true;\n }\n catch {\n return false;\n }\n }\n async writeText(path: string, content: string): Promise<void> {\n await this.writeBytes(path, Buffer.from(content, \"utf-8\"));\n }\n private async writeCollectedFiles(files: readonly CollectedLocalFile[], targetDir?: string): Promise<void> {\n const target = resolveSandboxPath(this.workdir, targetDir);\n for (const file of files) {\n const dest = resolveSandboxPath(target, file.path);\n await mkdir(dirname(dest), { recursive: true });\n await fsWriteFile(dest, file.content);\n }\n }\n async readBytes(path: string): Promise<Uint8Array> {\n return fsReadFile(resolveSandboxPath(this.workdir, path));\n }\n async writeBytes(path: string, content: Uint8Array): Promise<void> {\n const dest = resolveSandboxPath(this.workdir, path);\n await mkdir(dirname(dest), { recursive: true });\n await fsWriteFile(dest, content);\n }\n async uploadFile(source: string | URL, targetPath: string): Promise<void> {\n await this.writeBytes(targetPath, await fsReadFile(resolveLocalPath(undefined, source)));\n }\n async uploadDirectory(sourceDir: string | URL, targetDir?: string, opts: {\n readonly ignore?: readonly string[];\n } = {}): Promise<void> {\n const files = await collectLocalFiles(resolveLocalPath(undefined, sourceDir), opts.ignore);\n await this.writeCollectedFiles(files, targetDir);\n }\n async downloadFile(sourcePath: string, target: string | URL): Promise<void> {\n const destination = resolveLocalPath(undefined, target);\n await mkdir(dirname(destination), { recursive: true });\n await fsWriteFile(destination, await this.readBytes(sourcePath));\n }\n /**\n * 与 vercel/e2b 共用同一套「find 列路径 + 逐文件读取」模板(见 download-directory.ts):\n * 复用是为了让 ignore 的 basename 剪除语义与落盘行为在三个 provider 间保持逐字节一致,\n * 不是本地档做不了更直接的 fs 递归拷贝——用同一份实现,行为差异这个物种直接不存在。\n */\n async downloadDirectory(sourceDir: string, targetDir: string | URL, opts: {\n readonly ignore?: readonly string[];\n } = {}): Promise<void> {\n const remoteDir = resolveSandboxPath(this.workdir, sourceDir);\n await downloadDirectoryByList({\n localDir: resolveLocalPath(undefined, targetDir),\n ignore: opts.ignore ?? [],\n runShell: (script) => this.runShell(script, { cwd: remoteDir }),\n readOne: (relPath) => this.readBytes(`${remoteDir}/${relPath}`),\n });\n }\n /**\n * 只清 runner 私有资源(分类账的私有 GIT_DIR 临时目录),不动工作树任何文件——本地档从不\n * 销毁\"沙箱\",因为宿主机本身不是可销毁的资源(见 docs/feature/sandbox/local.md「只观察,不还原」)。\n */\n async stop(): Promise<void> {\n unregisterLedgerPaths(this.sandboxId);\n await rm(this.ledgerBase, { recursive: true, force: true }).catch(() => { });\n }\n}\n"]}
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["local.ts"],"names":[],"mappings":"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","sourcesContent":["// Local 沙箱 provider:宿主机本地目录直接当 workdir 跑,零隔离、零仪式\n// (契约见 docs/feature/sandbox/local.md)。runCommand 按 argv 直接 spawn 宿主进程(不经 shell);\n// runShell 交给宿主 bash(与其它 provider 的 runShell 语义一致);文件 IO 走本地 fs——\n// 「沙箱」就是宿主文件系统本身,没有远端控制面、没有预制环境、没有留存。\n//\n// 变更分类账的 GIT_DIR 不能像其它 provider 那样固定在同一个宿主路径:多数 provider 每次创建都是\n// 全新隔离文件系统,固定路径天然不冲突;本地档的\"沙箱\"是宿主机本身,同机先后或并发跑的多个\n// attempt 共享同一个 /tmp,固定路径会在多次运行之间互相踩踏用户看不到的 git 索引。这里改用\n// mkdtemp 出的每实例私有目录,经 sandbox/ledger-paths.ts 登记给 runner/ledger.ts 消费——\n// ledger.ts 不需要认识\"local\"这个名字,只需要知道\"这个 sandboxId 有没有登记覆盖路径\"。\nimport { spawn, execFile } from \"node:child_process\";\nimport { promisify } from \"node:util\";\nimport { mkdtemp, mkdir, rm, readFile as fsReadFile, writeFile as fsWriteFile, access, stat } from \"node:fs/promises\";\nimport { constants as fsConstants } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, join, resolve as resolvePath } from \"node:path\";\nimport { randomUUID } from \"node:crypto\";\nimport type { CommandOptions, CommandResult, ManagedProcess, ManagedProcessStart, SuccessfulCommandResult } from \"../types.ts\";\nimport { resolveLocalPath, resolveSandboxPath } from \"./paths.ts\";\nimport { commandLimit, SandboxCommandTimeoutError } from \"./deadline.ts\";\nimport { collectLocalFiles, type CollectedLocalFile } from \"./local-files.ts\";\nimport { downloadDirectoryByList } from \"./download-directory.ts\";\nimport { successfulCommandResult } from \"./operations.ts\";\nimport { supportedBackendCapability, unsupportedBackendCapability, type SandboxProviderBackend, } from \"./backend.ts\";\nimport { registerLedgerPaths, unregisterLedgerPaths } from \"./ledger-paths.ts\";\nimport { t } from \"../i18n/index.ts\";\nimport { ManagedProcessOutput } from \"./managed-process.ts\";\nconst execFileAsync = promisify(execFile);\nexport interface LocalSandboxOptions {\n /** 显式 workdir;省略时从当前目录向上解析 git 仓库根。 */\n dir?: string;\n /** attempt 的超时上限(毫秒),单条命令未显式传 `timeout` 时的上限来源;省略 = 没有上限。 */\n timeout?: number;\n /** attempt deadline 的截止时刻(epoch ms);单条命令按剩余量取上限(见 deadline.ts)。 */\n deadlineAt?: number;\n /**\n * 按序前置到宿主 `PATH` 的目录;省略 = 不改 PATH(见 docs/feature/sandbox/library.md\n * 「PATH:受管变量与 pathPrepend」)。\n */\n pathPrepend?: readonly string[];\n /**\n * 内部测试用:覆盖「当前目录」的解析起点(省略 `dir` 时向上找 git 根、显式 `dir` 时的相对路径\n * 基准都从它算)。生产路径(runtime.ts 的 provider materializer)从不传这个字段,恒用\n * `process.cwd()`——不是公开 spec 的一部分,`localSandbox()` 工厂不暴露它。\n */\n cwd?: string;\n}\n/** 从给定目录向上解析 git 仓库根;不在任何 git 仓库内时给出两条出路。 */\nasync function resolveGitRoot(cwd: string): Promise<string> {\n try {\n const { stdout } = await execFileAsync(\"git\", [\"rev-parse\", \"--show-toplevel\"], { cwd });\n return stdout.trim();\n }\n catch {\n throw new Error(t(\"local.notARepo\"));\n }\n}\n/** 显式 dir:相对路径按 cwd 解析;必须已存在且可写(不自动创建)。 */\nasync function resolveExplicitDir(dir: string, cwd: string): Promise<string> {\n const abs = resolvePath(cwd, dir);\n try {\n await access(abs, fsConstants.W_OK);\n }\n catch (e) {\n const err = e as NodeJS.ErrnoException;\n if (err.code === \"ENOENT\")\n throw new Error(t(\"local.dirMissing\", { dir: abs }));\n throw new Error(t(\"local.dirNotWritable\", { dir: abs, message: err.message }));\n }\n const info = await stat(abs);\n if (!info.isDirectory())\n throw new Error(t(\"local.dirNotWritable\", { dir: abs, message: \"not a directory\" }));\n return abs;\n}\nasync function resolveWorkdir(dir: string | undefined, cwd: string): Promise<string> {\n return dir !== undefined ? resolveExplicitDir(dir, cwd) : resolveGitRoot(cwd);\n}\ninterface SpawnOpts {\n cwd: string;\n env: NodeJS.ProcessEnv;\n /** 缺席 = 这条命令没有上限(四层解析链一个都没声明)。 */\n timeout?: number;\n explicitTimeout?: boolean;\n onStdout?: CommandOptions[\"onStdout\"];\n onStderr?: CommandOptions[\"onStderr\"];\n signal?: AbortSignal;\n}\n/** argv 直接 spawn(不经 shell)与「bash -c script」共用的执行核心。 */\nfunction runSpawned(command: string, args: string[], opts: SpawnOpts): Promise<CommandResult> {\n return new Promise((resolvePromise, reject) => {\n // detached(POSIX):超时时能杀掉整个进程组,不只是直接子进程——agent 命令常常自己再\n // 起子进程(npm 脚本、shell 管道),只杀顶层容易留下孤儿。Windows 没有进程组这个概念,\n // 退化成直接 kill 顶层进程。\n const posix = process.platform !== \"win32\";\n const child = spawn(command, args, { cwd: opts.cwd, env: opts.env, detached: posix });\n let stdout = \"\";\n let stderr = \"\";\n let callbackChain = Promise.resolve();\n let settled = false;\n const killTree = (): void => {\n if (posix && child.pid !== undefined) {\n try {\n process.kill(-child.pid, \"SIGKILL\");\n }\n catch {\n child.kill(\"SIGKILL\");\n }\n }\n else {\n child.kill(\"SIGKILL\");\n }\n };\n let termination: \"timeout\" | \"abort\" | undefined;\n const timer = opts.timeout === undefined ? undefined : setTimeout(() => {\n termination = \"timeout\";\n killTree();\n }, opts.timeout);\n const onAbort = (): void => {\n termination = \"abort\";\n killTree();\n };\n opts.signal?.addEventListener(\"abort\", onAbort, { once: true });\n if (opts.signal?.aborted)\n onAbort();\n child.stdout?.on(\"data\", (chunk: Buffer) => {\n const text = chunk.toString(\"utf-8\");\n stdout += text;\n const onStdout = opts.onStdout;\n if (onStdout !== undefined)\n callbackChain = callbackChain.then(() => onStdout(text));\n });\n child.stderr?.on(\"data\", (chunk: Buffer) => {\n const text = chunk.toString(\"utf-8\");\n stderr += text;\n const onStderr = opts.onStderr;\n if (onStderr !== undefined)\n callbackChain = callbackChain.then(() => onStderr(text));\n });\n child.on(\"error\", (err) => {\n if (settled)\n return;\n settled = true;\n if (timer !== undefined)\n clearTimeout(timer);\n opts.signal?.removeEventListener(\"abort\", onAbort);\n reject(err);\n });\n child.on(\"close\", (code, signal) => {\n if (settled)\n return;\n settled = true;\n if (timer !== undefined)\n clearTimeout(timer);\n opts.signal?.removeEventListener(\"abort\", onAbort);\n callbackChain\n .then(() => {\n if (termination === \"abort\") {\n reject(opts.signal?.reason ?? new DOMException(\"sandbox command aborted\", \"AbortError\"));\n return;\n }\n if (termination === \"timeout\" && signal === \"SIGKILL\" && code === null && opts.timeout !== undefined) {\n reject(new SandboxCommandTimeoutError(t(\"local.commandTimeout\", { timeoutMs: opts.timeout }), opts.timeout, opts.explicitTimeout === true));\n return;\n }\n resolvePromise({ stdout, stderr, exitCode: code ?? 0 });\n })\n .catch(reject);\n });\n });\n}\n/**\n * Local 沙箱:宿主机的一个本地目录。实现 ../types.ts 的 Sandbox 接口。\n * 契约见 docs/feature/sandbox/local.md;实现要点见 docs/feature/sandbox/architecture.md\n * 「Local provider(宿主机,零隔离)」。\n */\nexport class LocalSandbox implements SandboxProviderBackend {\n readonly workdir: string;\n readonly otlpHost = \"localhost\";\n readonly sandboxId: string;\n private readonly timeout?: number;\n private deadlineAt?: number;\n private readonly ledgerBase: string;\n /** factory `pathPrepend`;按声明顺序前置到宿主 PATH,省略 = 空数组。 */\n private readonly pathPrepend: readonly string[];\n readonly capabilities = {\n rootCommands: unsupportedBackendCapability,\n appendLog: unsupportedBackendCapability,\n suspend: unsupportedBackendCapability,\n ensureLifetime: unsupportedBackendCapability,\n setCommandDeadline: supportedBackendCapability((deadlineAt?: number) => this.setCommandDeadline(deadlineAt)),\n managedProcess: supportedBackendCapability((input: ManagedProcessStart) => this.startManagedProcess(input)),\n };\n private async startManagedProcess(input: ManagedProcessStart): Promise<ManagedProcess> {\n const [command, ...args] = input.argv;\n const output = new ManagedProcessOutput();\n const env: NodeJS.ProcessEnv = {\n ...process.env,\n ...input.env,\n ...(this.pathPrepend.length === 0\n ? {}\n : { PATH: `${this.pathPrepend.join(\":\")}:${process.env.PATH ?? \"\"}` }),\n };\n const posix = process.platform !== \"win32\";\n const child = spawn(command, args, {\n cwd: resolveSandboxPath(this.workdir, input.cwd),\n env,\n detached: posix,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n child.stdout.on(\"data\", (bytes: Buffer) => output.push({ _tag: \"Stdout\", bytes: new Uint8Array(bytes) }));\n child.stderr.on(\"data\", (bytes: Buffer) => output.push({ _tag: \"Stderr\", bytes: new Uint8Array(bytes) }));\n const exit = new Promise<import(\"../types.ts\").ManagedProcessExit>((resolve, reject) => {\n child.once(\"error\", (error) => { output.end(); reject(error); });\n child.once(\"close\", (exitCode, signal) => {\n output.end();\n resolve({ exitCode, ...(signal === null ? {} : { signal }) });\n });\n });\n const terminate = async (): Promise<void> => {\n stdinState = \"closing\";\n if (child.exitCode !== null || child.signalCode !== null)\n return;\n if (posix && child.pid !== undefined) {\n try {\n process.kill(-child.pid, \"SIGKILL\");\n }\n catch {\n child.kill(\"SIGKILL\");\n }\n }\n else\n child.kill(\"SIGKILL\");\n await exit.catch(() => undefined);\n };\n let stdinState: \"open\" | \"closing\" | \"closed\" = \"open\";\n let closeReceipt: Promise<void> | undefined;\n let terminateReceipt: Promise<void> | undefined;\n return {\n output,\n writeStdin: (bytes) => new Promise<void>((resolve, reject) => {\n if (stdinState !== \"open\") {\n reject(new Error(\"managed process stdin is closed\"));\n return;\n }\n child.stdin.write(bytes, (error) => error ? reject(error) : resolve());\n }),\n closeStdin: () => closeReceipt ??= new Promise<void>((resolve) => {\n stdinState = \"closing\";\n child.stdin.end(() => { stdinState = \"closed\"; resolve(); });\n }),\n wait: () => exit,\n terminate: () => terminateReceipt ??= terminate(),\n };\n }\n private constructor(workdir: string, ledgerBase: string, pathPrepend: readonly string[], timeout?: number, deadlineAt?: number) {\n this.workdir = workdir;\n this.ledgerBase = ledgerBase;\n this.pathPrepend = pathPrepend;\n this.timeout = timeout;\n this.deadlineAt = deadlineAt;\n this.sandboxId = `local-${randomUUID().slice(0, 8)}`;\n }\n /** 解析 workdir + 备好变更分类账的私有临时目录;Local provider 不参与 provisioning 重试。 */\n static async create(options: LocalSandboxOptions = {}): Promise<LocalSandbox> {\n const workdir = await resolveWorkdir(options.dir, options.cwd ?? process.cwd());\n const ledgerBase = await mkdtemp(join(tmpdir(), \"niceeval-local-ledger-\"));\n const sandbox = new LocalSandbox(workdir, ledgerBase, options.pathPrepend ?? [], options.timeout, options.deadlineAt);\n // runner/ledger.ts 按 sandboxId 读取这份登记——本地档的\"沙箱\"是宿主机本身,固定的宿主路径\n // 会在同机多次运行之间互相踩踏,每实例必须有自己的一份(见文件头注释)。\n registerLedgerPaths(sandbox.sandboxId, {\n gitDir: join(ledgerBase, \"ledger.git\"),\n exportDir: join(ledgerBase, \"export\"),\n });\n return sandbox;\n }\n /** 复用下由池在每次借出时换成承接者自己的 deadline(见 sandbox/deadline.ts)。 */\n setCommandDeadline(deadlineAt?: number): void {\n this.deadlineAt = deadlineAt;\n }\n /** 宿主 env:`process.env` 叠加 `pathPrepend` 前置后的 PATH,`opts.env` 仍可覆盖任意键(含 PATH)。 */\n private hostEnv(opts: CommandOptions): NodeJS.ProcessEnv {\n const pathBase = this.pathPrepend.length > 0\n ? { PATH: [...this.pathPrepend, ...(process.env.PATH ?? \"\").split(\":\")].join(\":\") }\n : {};\n return { ...process.env, ...pathBase, ...opts.env };\n }\n async runCommand(cmd: string, args: readonly string[] = [], opts: CommandOptions = {}): Promise<CommandResult> {\n if (opts.user !== undefined)\n throw new Error(t(\"local.userUnsupported\", { user: opts.user }));\n const limit = commandLimit(opts, { commandTimeoutMs: this.timeout, deadlineAt: this.deadlineAt });\n return runSpawned(cmd, [...args], {\n cwd: resolveSandboxPath(this.workdir, opts.cwd),\n env: this.hostEnv(opts),\n ...(limit.timeoutMs !== undefined ? { timeout: limit.timeoutMs } : {}),\n explicitTimeout: limit.explicit,\n onStdout: opts.onStdout,\n onStderr: opts.onStderr,\n signal: opts.signal,\n });\n }\n async runShell(script: string, opts: CommandOptions = {}): Promise<CommandResult> {\n if (opts.user !== undefined)\n throw new Error(t(\"local.userUnsupported\", { user: opts.user }));\n const limit = commandLimit(opts, { commandTimeoutMs: this.timeout, deadlineAt: this.deadlineAt });\n return runSpawned(\"bash\", [\"-c\", script], {\n cwd: resolveSandboxPath(this.workdir, opts.cwd),\n env: this.hostEnv(opts),\n ...(limit.timeoutMs !== undefined ? { timeout: limit.timeoutMs } : {}),\n explicitTimeout: limit.explicit,\n onStdout: opts.onStdout,\n onStderr: opts.onStderr,\n signal: opts.signal,\n });\n }\n async runCommandOrThrow(cmd: string, args: readonly string[] = [], opts: CommandOptions = {}): Promise<SuccessfulCommandResult> {\n return successfulCommandResult(await this.runCommand(cmd, args, opts), opts.sensitiveValues);\n }\n async runShellOrThrow(script: string, opts: CommandOptions = {}): Promise<SuccessfulCommandResult> {\n return successfulCommandResult(await this.runShell(script, opts), opts.sensitiveValues);\n }\n async readText(path: string): Promise<string> {\n return fsReadFile(resolveSandboxPath(this.workdir, path), \"utf-8\");\n }\n async pathExists(path: string): Promise<boolean> {\n try {\n await access(resolveSandboxPath(this.workdir, path));\n return true;\n }\n catch {\n return false;\n }\n }\n async writeText(path: string, content: string): Promise<void> {\n await this.writeBytes(path, Buffer.from(content, \"utf-8\"));\n }\n private async writeCollectedFiles(files: readonly CollectedLocalFile[], targetDir?: string): Promise<void> {\n const target = resolveSandboxPath(this.workdir, targetDir);\n for (const file of files) {\n const dest = resolveSandboxPath(target, file.path);\n await mkdir(dirname(dest), { recursive: true });\n await fsWriteFile(dest, file.content);\n }\n }\n async readBytes(path: string): Promise<Uint8Array> {\n return fsReadFile(resolveSandboxPath(this.workdir, path));\n }\n async writeBytes(path: string, content: Uint8Array): Promise<void> {\n const dest = resolveSandboxPath(this.workdir, path);\n await mkdir(dirname(dest), { recursive: true });\n await fsWriteFile(dest, content);\n }\n async uploadFile(source: string | URL, targetPath: string): Promise<void> {\n await this.writeBytes(targetPath, await fsReadFile(resolveLocalPath(undefined, source)));\n }\n async uploadDirectory(sourceDir: string | URL, targetDir?: string, opts: {\n readonly ignore?: readonly string[];\n } = {}): Promise<void> {\n const files = await collectLocalFiles(resolveLocalPath(undefined, sourceDir), opts.ignore);\n await this.writeCollectedFiles(files, targetDir);\n }\n async downloadFile(sourcePath: string, target: string | URL): Promise<void> {\n const destination = resolveLocalPath(undefined, target);\n await mkdir(dirname(destination), { recursive: true });\n await fsWriteFile(destination, await this.readBytes(sourcePath));\n }\n /**\n * 与 vercel/e2b 共用同一套「find 列路径 + 逐文件读取」模板(见 download-directory.ts):\n * 复用是为了让 ignore 的 basename 剪除语义与落盘行为在三个 provider 间保持逐字节一致,\n * 不是本地档做不了更直接的 fs 递归拷贝——用同一份实现,行为差异这个物种直接不存在。\n */\n async downloadDirectory(sourceDir: string, targetDir: string | URL, opts: {\n readonly ignore?: readonly string[];\n } = {}): Promise<void> {\n const remoteDir = resolveSandboxPath(this.workdir, sourceDir);\n await downloadDirectoryByList({\n localDir: resolveLocalPath(undefined, targetDir),\n ignore: opts.ignore ?? [],\n runShell: (script) => this.runShell(script, { cwd: remoteDir }),\n readOne: (relPath) => this.readBytes(`${remoteDir}/${relPath}`),\n });\n }\n /**\n * 只清 runner 私有资源(分类账的私有 GIT_DIR 临时目录),不动工作树任何文件——本地档从不\n * 销毁\"沙箱\",因为宿主机本身不是可销毁的资源(见 docs/feature/sandbox/local.md「只观察,不还原」)。\n */\n async stop(): Promise<void> {\n unregisterLedgerPaths(this.sandboxId);\n await rm(this.ledgerBase, { recursive: true, force: true }).catch(() => { });\n }\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { CommandOptions, CommandResult, SuccessfulCommandResult } from "../types.cjs";
1
+ import type { CommandOptions, CommandResult, ManagedProcess, ManagedProcessStart, SuccessfulCommandResult } from "../types.cjs";
2
2
  import { type SandboxProviderBackend } from "./backend.cjs";
3
3
  export interface LocalSandboxOptions {
4
4
  /** 显式 workdir;省略时从当前目录向上解析 git 仓库根。 */
@@ -39,7 +39,9 @@ export declare class LocalSandbox implements SandboxProviderBackend {
39
39
  suspend: import("./backend.cjs").SandboxBackendSupport<never>;
40
40
  ensureLifetime: import("./backend.cjs").SandboxBackendSupport<never>;
41
41
  setCommandDeadline: import("./backend.cjs").SandboxBackendSupport<(deadlineAt?: number) => void>;
42
+ managedProcess: import("./backend.cjs").SandboxBackendSupport<(input: ManagedProcessStart) => Promise<ManagedProcess>>;
42
43
  };
44
+ private startManagedProcess;
43
45
  private constructor();
44
46
  /** 解析 workdir + 备好变更分类账的私有临时目录;Local provider 不参与 provisioning 重试。 */
45
47
  static create(options?: LocalSandboxOptions): Promise<LocalSandbox>;
@@ -1,4 +1,4 @@
1
- import type { CommandOptions, CommandResult, SuccessfulCommandResult } from "../types.mjs";
1
+ import type { CommandOptions, CommandResult, ManagedProcess, ManagedProcessStart, SuccessfulCommandResult } from "../types.mjs";
2
2
  import { type SandboxProviderBackend } from "./backend.mjs";
3
3
  export interface LocalSandboxOptions {
4
4
  /** 显式 workdir;省略时从当前目录向上解析 git 仓库根。 */
@@ -39,7 +39,9 @@ export declare class LocalSandbox implements SandboxProviderBackend {
39
39
  suspend: import("./backend.mjs").SandboxBackendSupport<never>;
40
40
  ensureLifetime: import("./backend.mjs").SandboxBackendSupport<never>;
41
41
  setCommandDeadline: import("./backend.mjs").SandboxBackendSupport<(deadlineAt?: number) => void>;
42
+ managedProcess: import("./backend.mjs").SandboxBackendSupport<(input: ManagedProcessStart) => Promise<ManagedProcess>>;
42
43
  };
44
+ private startManagedProcess;
43
45
  private constructor();
44
46
  /** 解析 workdir + 备好变更分类账的私有临时目录;Local provider 不参与 provisioning 重试。 */
45
47
  static create(options?: LocalSandboxOptions): Promise<LocalSandbox>;
@@ -1,4 +1,4 @@
1
- import type { CommandOptions, CommandResult, SuccessfulCommandResult } from "../types.js";
1
+ import type { CommandOptions, CommandResult, ManagedProcess, ManagedProcessStart, SuccessfulCommandResult } from "../types.js";
2
2
  import { type SandboxProviderBackend } from "./backend.js";
3
3
  export interface LocalSandboxOptions {
4
4
  /** 显式 workdir;省略时从当前目录向上解析 git 仓库根。 */
@@ -39,7 +39,9 @@ export declare class LocalSandbox implements SandboxProviderBackend {
39
39
  suspend: import("./backend.js").SandboxBackendSupport<never>;
40
40
  ensureLifetime: import("./backend.js").SandboxBackendSupport<never>;
41
41
  setCommandDeadline: import("./backend.js").SandboxBackendSupport<(deadlineAt?: number) => void>;
42
+ managedProcess: import("./backend.js").SandboxBackendSupport<(input: ManagedProcessStart) => Promise<ManagedProcess>>;
42
43
  };
44
+ private startManagedProcess;
43
45
  private constructor();
44
46
  /** 解析 workdir + 备好变更分类账的私有临时目录;Local provider 不参与 provisioning 重试。 */
45
47
  static create(options?: LocalSandboxOptions): Promise<LocalSandbox>;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ManagedProcessOutput = void 0;
4
+ /** Small single-consumer async queue used by provider-native process streams. */
5
+ class ManagedProcessOutput {
6
+ queued = [];
7
+ waiter;
8
+ ended = false;
9
+ consumed = false;
10
+ push(chunk) {
11
+ if (this.ended)
12
+ return;
13
+ const waiter = this.waiter;
14
+ if (waiter !== undefined) {
15
+ this.waiter = undefined;
16
+ waiter({ done: false, value: chunk });
17
+ }
18
+ else {
19
+ this.queued.push(chunk);
20
+ }
21
+ }
22
+ end() {
23
+ if (this.ended)
24
+ return;
25
+ this.ended = true;
26
+ const waiter = this.waiter;
27
+ if (waiter !== undefined) {
28
+ this.waiter = undefined;
29
+ waiter({ done: true, value: undefined });
30
+ }
31
+ }
32
+ [Symbol.asyncIterator]() {
33
+ if (this.consumed)
34
+ throw new Error("managed process output already has a consumer");
35
+ this.consumed = true;
36
+ return {
37
+ next: () => {
38
+ const value = this.queued.shift();
39
+ if (value !== undefined)
40
+ return Promise.resolve({ done: false, value });
41
+ if (this.ended)
42
+ return Promise.resolve({ done: true, value: undefined });
43
+ return new Promise((resolve) => { this.waiter = resolve; });
44
+ },
45
+ };
46
+ }
47
+ }
48
+ exports.ManagedProcessOutput = ManagedProcessOutput;
49
+ //# sourceMappingURL=managed-process.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-process.js","sourceRoot":"","sources":["managed-process.ts"],"names":[],"mappings":";;;AACA,iFAAiF;AACjF,MAAa,oBAAoB;IACZ,MAAM,GAA0B,EAAE,CAAC;IAC5C,MAAM,CAAwD;IAC9D,KAAK,GAAG,KAAK,CAAC;IACd,QAAQ,GAAG,KAAK,CAAC;IACzB,IAAI,CAAC,KAA0B;QAC3B,IAAI,IAAI,CAAC,KAAK;YACV,OAAO;QACX,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1C,CAAC;aACI,CAAC;YACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IACD,GAAG;QACC,IAAI,IAAI,CAAC,KAAK;YACV,OAAO;QACX,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;YACxB,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC;IACD,CAAC,MAAM,CAAC,aAAa,CAAC;QAClB,IAAI,IAAI,CAAC,QAAQ;YACb,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACrE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,OAAO;YACH,IAAI,EAAE,GAAG,EAAE;gBACP,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBAClC,IAAI,KAAK,KAAK,SAAS;oBACnB,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBACnD,IAAI,IAAI,CAAC,KAAK;oBACV,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC7D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,CAAC;SACJ,CAAC;IACN,CAAC;CACJ;AA1CD,oDA0CC","sourcesContent":["import type { ManagedProcessChunk } from \"./types.ts\";\n/** Small single-consumer async queue used by provider-native process streams. */\nexport class ManagedProcessOutput implements AsyncIterable<ManagedProcessChunk> {\n private readonly queued: ManagedProcessChunk[] = [];\n private waiter?: (value: IteratorResult<ManagedProcessChunk>) => void;\n private ended = false;\n private consumed = false;\n push(chunk: ManagedProcessChunk): void {\n if (this.ended)\n return;\n const waiter = this.waiter;\n if (waiter !== undefined) {\n this.waiter = undefined;\n waiter({ done: false, value: chunk });\n }\n else {\n this.queued.push(chunk);\n }\n }\n end(): void {\n if (this.ended)\n return;\n this.ended = true;\n const waiter = this.waiter;\n if (waiter !== undefined) {\n this.waiter = undefined;\n waiter({ done: true, value: undefined });\n }\n }\n [Symbol.asyncIterator](): AsyncIterator<ManagedProcessChunk> {\n if (this.consumed)\n throw new Error(\"managed process output already has a consumer\");\n this.consumed = true;\n return {\n next: () => {\n const value = this.queued.shift();\n if (value !== undefined)\n return Promise.resolve({ done: false, value });\n if (this.ended)\n return Promise.resolve({ done: true, value: undefined });\n return new Promise((resolve) => { this.waiter = resolve; });\n },\n };\n }\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import type { ManagedProcessChunk } from "./types.cjs";
2
+ /** Small single-consumer async queue used by provider-native process streams. */
3
+ export declare class ManagedProcessOutput implements AsyncIterable<ManagedProcessChunk> {
4
+ private readonly queued;
5
+ private waiter?;
6
+ private ended;
7
+ private consumed;
8
+ push(chunk: ManagedProcessChunk): void;
9
+ end(): void;
10
+ [Symbol.asyncIterator](): AsyncIterator<ManagedProcessChunk>;
11
+ }
@@ -0,0 +1,11 @@
1
+ import type { ManagedProcessChunk } from "./types.mjs";
2
+ /** Small single-consumer async queue used by provider-native process streams. */
3
+ export declare class ManagedProcessOutput implements AsyncIterable<ManagedProcessChunk> {
4
+ private readonly queued;
5
+ private waiter?;
6
+ private ended;
7
+ private consumed;
8
+ push(chunk: ManagedProcessChunk): void;
9
+ end(): void;
10
+ [Symbol.asyncIterator](): AsyncIterator<ManagedProcessChunk>;
11
+ }
@@ -0,0 +1,11 @@
1
+ import type { ManagedProcessChunk } from "./types.js";
2
+ /** Small single-consumer async queue used by provider-native process streams. */
3
+ export declare class ManagedProcessOutput implements AsyncIterable<ManagedProcessChunk> {
4
+ private readonly queued;
5
+ private waiter?;
6
+ private ended;
7
+ private consumed;
8
+ push(chunk: ManagedProcessChunk): void;
9
+ end(): void;
10
+ [Symbol.asyncIterator](): AsyncIterator<ManagedProcessChunk>;
11
+ }
@@ -0,0 +1,6 @@
1
+ import { createRequire as __niceevalCreateRequire } from "node:module";
2
+ const __niceevalRequire = __niceevalCreateRequire(import.meta.url);
3
+ const __niceevalCanonical = __niceevalRequire("./managed-process.cjs");
4
+ const __niceevalExport0 = __niceevalCanonical["ManagedProcessOutput"];
5
+ export { __niceevalExport0 as ManagedProcessOutput };
6
+ //# sourceMappingURL=managed-process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"managed-process.js","sources":[],"names":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":"","sourcesContent":["// sandbox 域类型:运行中 Sandbox、生命周期 hook、命令与文件 IO 的形状。\n// 作者声明使用 layer.ts 的闭合 SandboxLayer;本文件不再保留旧 provider spec。\nimport type { ScopedFeedback } from \"../shared/types.ts\";\nexport interface CommandResult {\n stdout: string;\n stderr: string;\n exitCode: number;\n /**\n * 这次执行的命令摘要(有界、已脱敏,与时间树 command 节点同一份文案)。由执行面在最外层\n * 公开调用处附加;直接从 provider 拿到的裸结果可能没有。断言失败时用作 evidence\n * (`commandSucceeded()` 的「命令行本身」),消费方按可选字段读。\n */\n command?: string;\n}\n/** 内置 provider 名;ProviderModule 的完成态计划使用普通 string 兼容自定义 provider。 */\nexport type SandboxProvider = \"docker\" | \"vercel\" | \"e2b\" | \"local\";\n/** 镜像/模板里的 Node 运行时版本。 */\nexport type SandboxRuntime = \"node20\" | \"node24\";\n/**\n * Sandbox hook 的窄上下文:只有 `experimentId`、`signal` 与作用域绑定的 `progress/diagnostic`,\n * 不借用包含 session / model / telemetry 的完整 `AgentContext`\n * (见 docs/feature/sandbox/library.md「环境层生命周期钩子」)。\n */\nexport interface SandboxHookContext extends ScopedFeedback {\n /** 运行计划中已解析的实验 id;生命周期 hook 不在脱离 Experiment 的上下文执行。 */\n readonly experimentId: string;\n /** 当前物理 Sandbox 归属的 Eval Group;未分组 Sandbox 省略。 */\n readonly evalGroup?: {\n readonly id: string;\n readonly definitionHash: string;\n };\n /** 当前 Invocation 的中止信号;物理 Sandbox 生命周期不从某条 Attempt 借用信号。 */\n readonly signal: AbortSignal;\n}\n/** 沙箱级生命周期钩子(`SandboxLayer.setup()` / `.teardown()` 链式挂载)。 */\nexport type SandboxHook = (sandbox: Sandbox, ctx: SandboxHookContext) => void | Promise<void>;\nexport interface CommandOptions {\n /**\n * 这条命令已知会处理的敏感明文(例如 API key、token、HTTP header value)。Runner 仍把\n * 原值交给 provider 执行,但在任何 timing / commands / execution / error 证据落盘前按\n * 这些值做精确替换;本数组本身不落盘、不进指纹。空字符串被忽略。\n *\n * 这是显式 provenance,不是 secret 扫描器:没有登记的自由文本无法被可靠识别;值若先被\n * 调用方编码或拆分,应把实际会出现在命令/输出里的编码形态一并登记。\n */\n readonly sensitiveValues?: readonly string[];\n /**\n * 追加/覆盖本命令的环境变量(与 Sandbox 默认环境叠加,不清空默认值)。`PATH` 是 Sandbox\n * 受管变量,各 provider 保留自己算出的 `PATH`,不保证能被这里覆盖;需要扩展 PATH 用\n * Sandbox factory 的 `pathPrepend`(见 docs/feature/sandbox/library.md「PATH:受管变量与\n * pathPrepend」)。\n */\n readonly env?: Readonly<globalThis.Record<string, string>>;\n /** 本命令的工作目录;省略时落到 `Sandbox.workdir`。相对路径按 workdir 解析,绝对路径原样使用。 */\n readonly cwd?: string;\n /**\n * 把本命令的输出也送进 Sandbox 的「原生日志流」(于是 `docker logs` / Docker UI 的 Logs\n * 标签页能实时看到它)。给 agent 命令(codex exec / bub run / claude)开它,就能在容器\n * 日志里看到 agent 的【原始输出】。provider 各自实现(docker:tee 到 PID1 tail 的文件;\n * 不支持的 provider 忽略)—— 日志怎么浮现是 provider 的事,adapter 只声明意图。\n */\n readonly stream?: boolean;\n /**\n * 命令 stdout 每到一块就调用一次。回调只用于运行中的短命反馈;完整 stdout 仍会原样\n * 出现在返回的 `CommandResult` 里。provider 不支持真流时,至少会在命令结束后按完整\n * stdout 调用一次,不能静默丢掉。\n */\n readonly onStdout?: (chunk: string) => void | Promise<void>;\n /** `onStdout` 的 stderr 对应物;完整 stderr 仍保留在 `CommandResult`。 */\n readonly onStderr?: (chunk: string) => void | Promise<void>;\n /**\n * 覆盖本条命令的执行身份;省略 = Sandbox 默认身份(沿用环境自己声明的身份——Docker 镜像 `USER`、\n * Compose service `user:`、E2B template 默认用户、宿主当前用户,见\n * docs/feature/sandbox/library.md「执行身份」)。\n *\n * 语义跨 provider 一致,各 provider 映射到自己的原生机制(docker:`exec --user`;E2B:\n * `{ user }`;Vercel:只认 `\"root\"`,映射 `{ sudo: true }`,其它值报错;local:任何值都报错)。\n * 本就全程 root 的 provider 视作 no-op;完全无法换身份的 provider 可不支持(抛错)——但**省略与\n * 显式值的语义保持一致**,不因 provider 而变。\n */\n readonly user?: string;\n /**\n * 这条命令自己的上限(毫秒)。**省略才是常态**:省略时上限 = attempt deadline 的剩余量\n * (见 docs/feature/sandbox/architecture.md「时限归属」),provider 层没有独立默认。\n * 显式传一个更短的值是有意声明,照常生效;撞线时归属记成「命令显式 timeout」。\n */\n readonly timeoutMs?: number;\n /**\n * 取消本次受管命令树。Provider 必须在 Promise settle 前确认命令树已经终止;无法精确\n * 终止时应退休整个 Sandbox,不能只关闭 transport 后把进程留在后台。\n */\n readonly signal?: AbortSignal;\n}\nexport interface SuccessfulCommandResult extends CommandResult {\n readonly exitCode: 0;\n}\n/** 三个运行中 Sandbox 视图共用的操作词汇;同名成员在不同视图中不得改变语义。 */\nexport interface SandboxOperations {\n /** Sandbox 内项目/工作区根目录的绝对路径(agent 命令的默认 cwd,也是 git baseline 提交的位置)。各方法的相对路径都以此为基准解析,省略 `cwd`/`targetDir` 时也落到这里。 */\n readonly workdir: string;\n /**\n * 执行单个命令,`args` 作为独立 argv 传递、不经 shell 解释(无 `&&`、管道、通配符展开)。\n * 只想跑一个可执行文件、参数来自外部输入、担心注入时优先用它。\n */\n runCommand(cmd: string, args?: readonly string[], opts?: CommandOptions): Promise<CommandResult>;\n /**\n * 执行一整段脚本,经 shell(bash)解释,支持 `&&`、管道、`$()`、重定向等。\n * 需要拼多条命令或做条件判断时用它。\n */\n runShell(script: string, opts?: CommandOptions): Promise<CommandResult>;\n /**\n * 像 `runCommand` 一样执行单个命令,但非零退出时抛出 `SandboxCommandExitError`。错误消息附带\n * 有界、已清理和脱敏的 stderr 尾部;stderr 为空时回退 stdout。完整输出保留在异常的\n * `result` 字段中。成功结果的 `exitCode` 在类型上固定为 `0`。\n */\n runCommandOrThrow(cmd: string, args?: readonly string[], opts?: CommandOptions): Promise<SuccessfulCommandResult>;\n /**\n * 像 `runShell` 一样执行 shell 脚本,但非零退出时抛出 `SandboxCommandExitError`。错误摘要、\n * 完整输出和成功结果的语义与 `runCommandOrThrow` 相同。\n */\n runShellOrThrow(script: string, opts?: CommandOptions): Promise<SuccessfulCommandResult>;\n /** 读取 Sandbox 内文件的文本内容(UTF-8)。文件不存在时抛错。 */\n readText(path: string): Promise<string>;\n /** 写入 Sandbox 内一个 UTF-8 文本文件;父目录不存在时自动创建。 */\n writeText(path: string, content: string): Promise<void>;\n /** 精确读取 Sandbox 内文件字节;公共契约不绑定 Node Buffer。 */\n readBytes(path: string): Promise<Uint8Array>;\n /** 精确写入 Sandbox 内文件字节;父目录不存在时自动创建。 */\n writeBytes(path: string, content: Uint8Array): Promise<void>;\n /** 检查 Sandbox 内文件或目录路径是否存在。 */\n pathExists(path: string): Promise<boolean>;\n}\n/** 只用于宿主机与 Sandbox 之间真实传输;内存内容读写使用 read/writeText/Bytes。 */\nexport interface SandboxTransferOperations {\n uploadFile(source: string | URL, targetPath: string): Promise<void>;\n uploadDirectory(sourceDir: string | URL, targetDir?: string, options?: {\n readonly ignore?: readonly string[];\n }): Promise<void>;\n downloadFile(sourcePath: string, target: string | URL): Promise<void>;\n downloadDirectory(sourceDir: string, targetDir: string | URL, options?: {\n readonly ignore?: readonly string[];\n }): Promise<void>;\n}\nexport interface Sandbox extends SandboxOperations, SandboxTransferOperations {\n /** 销毁 Sandbox 占用的计算资源(容器/microVM)。调用后 Sandbox 不可再用;是否可安全重复调用因 provider 而异,不要依赖这一点。 */\n stop(): Promise<void>;\n /** 本 Sandbox 的稳定标识(各 provider 原生 ID,如 Docker 容器 ID 前缀);用于跨调用关联同一 Sandbox 的会话状态,也用于日志展示。 */\n readonly sandboxId: string;\n /**\n * OTLP receiver 的放置能力。\n * - `string`:Sandbox 内可通过该 hostname 访问宿主 receiver。\n * - `null`:provider 不承诺宿主回连;runner 尝试在 Sandbox 内启动 attempt-scope receiver。\n * 这不保证 tracing 成功;镜像缺少 receiver 所需运行时时只记录 supplemental diagnostic。\n * `defineConfig({ telemetry: { host } })` 可在作者已经提供受控 tunnel 时显式覆盖。\n */\n readonly otlpHost: string | null;\n /**\n * 可选:把一行写进容器的「主日志」(PID1 在 tail 它)——于是 `docker logs` /\n * Docker UI 的 Logs 标签页能实时看到 agent 逐轮活动。docker provider 实现,其它可省略。\n */\n appendLog?(line: string): Promise<void>;\n}\n/** 复用调度需要的中立寿命确认能力。 */\nexport interface SandboxReuseCapability {\n ensureLifetime(minRemainingMs: number): Promise<{\n ready: true;\n expiresAt?: string;\n } | {\n ready: false;\n reason: string;\n }>;\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["types.ts"],"names":[],"mappings":"","sourcesContent":["// sandbox 域类型:运行中 Sandbox、生命周期 hook、命令与文件 IO 的形状。\n// 作者声明使用 layer.ts 的闭合 SandboxLayer;本文件不再保留旧 provider spec。\nimport type { ScopedFeedback } from \"../shared/types.ts\";\nexport interface CommandResult {\n stdout: string;\n stderr: string;\n exitCode: number;\n /**\n * 这次执行的命令摘要(有界、已脱敏,与时间树 command 节点同一份文案)。由执行面在最外层\n * 公开调用处附加;直接从 provider 拿到的裸结果可能没有。断言失败时用作 evidence\n * (`commandSucceeded()` 的「命令行本身」),消费方按可选字段读。\n */\n command?: string;\n}\n/** 内置 provider 名;ProviderModule 的完成态计划使用普通 string 兼容自定义 provider。 */\nexport type SandboxProvider = \"docker\" | \"vercel\" | \"e2b\" | \"local\";\n/** 镜像/模板里的 Node 运行时版本。 */\nexport type SandboxRuntime = \"node20\" | \"node24\";\n/**\n * Sandbox hook 的窄上下文:只有 `experimentId`、`signal` 与作用域绑定的 `progress/diagnostic`,\n * 不借用包含 session / model / telemetry 的完整 `AgentContext`\n * (见 docs/feature/sandbox/library.md「环境层生命周期钩子」)。\n */\nexport interface SandboxHookContext extends ScopedFeedback {\n /** 运行计划中已解析的实验 id;生命周期 hook 不在脱离 Experiment 的上下文执行。 */\n readonly experimentId: string;\n /** 当前物理 Sandbox 归属的 Eval Group;未分组 Sandbox 省略。 */\n readonly evalGroup?: {\n readonly id: string;\n readonly definitionHash: string;\n };\n /** 当前 Invocation 的中止信号;物理 Sandbox 生命周期不从某条 Attempt 借用信号。 */\n readonly signal: AbortSignal;\n}\n/** 沙箱级生命周期钩子(`SandboxLayer.setup()` / `.teardown()` 链式挂载)。 */\nexport type SandboxHook = (sandbox: Sandbox, ctx: SandboxHookContext) => void | Promise<void>;\nexport interface CommandOptions {\n /**\n * 这条命令已知会处理的敏感明文(例如 API key、token、HTTP header value)。Runner 仍把\n * 原值交给 provider 执行,但在任何 timing / commands / execution / error 证据落盘前按\n * 这些值做精确替换;本数组本身不落盘、不进指纹。空字符串被忽略。\n *\n * 这是显式 provenance,不是 secret 扫描器:没有登记的自由文本无法被可靠识别;值若先被\n * 调用方编码或拆分,应把实际会出现在命令/输出里的编码形态一并登记。\n */\n readonly sensitiveValues?: readonly string[];\n /**\n * 追加/覆盖本命令的环境变量(与 Sandbox 默认环境叠加,不清空默认值)。`PATH` 是 Sandbox\n * 受管变量,各 provider 保留自己算出的 `PATH`,不保证能被这里覆盖;需要扩展 PATH 用\n * Sandbox factory 的 `pathPrepend`(见 docs/feature/sandbox/library.md「PATH:受管变量与\n * pathPrepend」)。\n */\n readonly env?: Readonly<globalThis.Record<string, string>>;\n /** 本命令的工作目录;省略时落到 `Sandbox.workdir`。相对路径按 workdir 解析,绝对路径原样使用。 */\n readonly cwd?: string;\n /**\n * 把本命令的输出也送进 Sandbox 的「原生日志流」(于是 `docker logs` / Docker UI 的 Logs\n * 标签页能实时看到它)。给 agent 命令(codex exec / bub run / claude)开它,就能在容器\n * 日志里看到 agent 的【原始输出】。provider 各自实现(docker:tee 到 PID1 tail 的文件;\n * 不支持的 provider 忽略)—— 日志怎么浮现是 provider 的事,adapter 只声明意图。\n */\n readonly stream?: boolean;\n /**\n * 命令 stdout 每到一块就调用一次。回调只用于运行中的短命反馈;完整 stdout 仍会原样\n * 出现在返回的 `CommandResult` 里。provider 不支持真流时,至少会在命令结束后按完整\n * stdout 调用一次,不能静默丢掉。\n */\n readonly onStdout?: (chunk: string) => void | Promise<void>;\n /** `onStdout` 的 stderr 对应物;完整 stderr 仍保留在 `CommandResult`。 */\n readonly onStderr?: (chunk: string) => void | Promise<void>;\n /**\n * 覆盖本条命令的执行身份;省略 = Sandbox 默认身份(沿用环境自己声明的身份——Docker 镜像 `USER`、\n * Compose service `user:`、E2B template 默认用户、宿主当前用户,见\n * docs/feature/sandbox/library.md「执行身份」)。\n *\n * 语义跨 provider 一致,各 provider 映射到自己的原生机制(docker:`exec --user`;E2B:\n * `{ user }`;Vercel:只认 `\"root\"`,映射 `{ sudo: true }`,其它值报错;local:任何值都报错)。\n * 本就全程 root 的 provider 视作 no-op;完全无法换身份的 provider 可不支持(抛错)——但**省略与\n * 显式值的语义保持一致**,不因 provider 而变。\n */\n readonly user?: string;\n /**\n * 这条命令自己的上限(毫秒)。**省略才是常态**:省略时上限 = attempt deadline 的剩余量\n * (见 docs/feature/sandbox/architecture.md「时限归属」),provider 层没有独立默认。\n * 显式传一个更短的值是有意声明,照常生效;撞线时归属记成「命令显式 timeout」。\n */\n readonly timeoutMs?: number;\n /**\n * 取消本次受管命令树。Provider 必须在 Promise settle 前确认命令树已经终止;无法精确\n * 终止时应退休整个 Sandbox,不能只关闭 transport 后把进程留在后台。\n */\n readonly signal?: AbortSignal;\n}\nexport interface SuccessfulCommandResult extends CommandResult {\n readonly exitCode: 0;\n}\nexport interface ManagedProcessStart {\n readonly argv: readonly [\n string,\n ...string[]\n ];\n readonly cwd?: string;\n readonly env?: Readonly<globalThis.Record<string, string>>;\n}\nexport type ManagedProcessChunk = {\n readonly _tag: \"Stdout\";\n readonly bytes: Uint8Array;\n} | {\n readonly _tag: \"Stderr\";\n readonly bytes: Uint8Array;\n};\nexport interface ManagedProcessExit {\n readonly exitCode: number | null;\n readonly signal?: string;\n}\n/** Attempt-owned bidirectional process. `output` has exactly one consumer. */\nexport interface ManagedProcess {\n readonly output: AsyncIterable<ManagedProcessChunk>;\n writeStdin(bytes: Uint8Array): Promise<void>;\n closeStdin(): Promise<void>;\n wait(): Promise<ManagedProcessExit>;\n terminate(): Promise<void>;\n}\n/** 三个运行中 Sandbox 视图共用的操作词汇;同名成员在不同视图中不得改变语义。 */\nexport interface SandboxOperations {\n /** Sandbox 内项目/工作区根目录的绝对路径(agent 命令的默认 cwd,也是 git baseline 提交的位置)。各方法的相对路径都以此为基准解析,省略 `cwd`/`targetDir` 时也落到这里。 */\n readonly workdir: string;\n /**\n * 执行单个命令,`args` 作为独立 argv 传递、不经 shell 解释(无 `&&`、管道、通配符展开)。\n * 只想跑一个可执行文件、参数来自外部输入、担心注入时优先用它。\n */\n runCommand(cmd: string, args?: readonly string[], opts?: CommandOptions): Promise<CommandResult>;\n /**\n * 执行一整段脚本,经 shell(bash)解释,支持 `&&`、管道、`$()`、重定向等。\n * 需要拼多条命令或做条件判断时用它。\n */\n runShell(script: string, opts?: CommandOptions): Promise<CommandResult>;\n /**\n * 像 `runCommand` 一样执行单个命令,但非零退出时抛出 `SandboxCommandExitError`。错误消息附带\n * 有界、已清理和脱敏的 stderr 尾部;stderr 为空时回退 stdout。完整输出保留在异常的\n * `result` 字段中。成功结果的 `exitCode` 在类型上固定为 `0`。\n */\n runCommandOrThrow(cmd: string, args?: readonly string[], opts?: CommandOptions): Promise<SuccessfulCommandResult>;\n /**\n * 像 `runShell` 一样执行 shell 脚本,但非零退出时抛出 `SandboxCommandExitError`。错误摘要、\n * 完整输出和成功结果的语义与 `runCommandOrThrow` 相同。\n */\n runShellOrThrow(script: string, opts?: CommandOptions): Promise<SuccessfulCommandResult>;\n /** 读取 Sandbox 内文件的文本内容(UTF-8)。文件不存在时抛错。 */\n readText(path: string): Promise<string>;\n /** 写入 Sandbox 内一个 UTF-8 文本文件;父目录不存在时自动创建。 */\n writeText(path: string, content: string): Promise<void>;\n /** 精确读取 Sandbox 内文件字节;公共契约不绑定 Node Buffer。 */\n readBytes(path: string): Promise<Uint8Array>;\n /** 精确写入 Sandbox 内文件字节;父目录不存在时自动创建。 */\n writeBytes(path: string, content: Uint8Array): Promise<void>;\n /** 检查 Sandbox 内文件或目录路径是否存在。 */\n pathExists(path: string): Promise<boolean>;\n}\n/** 只用于宿主机与 Sandbox 之间真实传输;内存内容读写使用 read/writeText/Bytes。 */\nexport interface SandboxTransferOperations {\n uploadFile(source: string | URL, targetPath: string): Promise<void>;\n uploadDirectory(sourceDir: string | URL, targetDir?: string, options?: {\n readonly ignore?: readonly string[];\n }): Promise<void>;\n downloadFile(sourcePath: string, target: string | URL): Promise<void>;\n downloadDirectory(sourceDir: string, targetDir: string | URL, options?: {\n readonly ignore?: readonly string[];\n }): Promise<void>;\n}\nexport interface Sandbox extends SandboxOperations, SandboxTransferOperations {\n /** 销毁 Sandbox 占用的计算资源(容器/microVM)。调用后 Sandbox 不可再用;是否可安全重复调用因 provider 而异,不要依赖这一点。 */\n stop(): Promise<void>;\n /** 本 Sandbox 的稳定标识(各 provider 原生 ID,如 Docker 容器 ID 前缀);用于跨调用关联同一 Sandbox 的会话状态,也用于日志展示。 */\n readonly sandboxId: string;\n /**\n * OTLP receiver 的放置能力。\n * - `string`:Sandbox 内可通过该 hostname 访问宿主 receiver。\n * - `null`:provider 不承诺宿主回连;runner 尝试在 Sandbox 内启动 attempt-scope receiver。\n * 这不保证 tracing 成功;镜像缺少 receiver 所需运行时时只记录 supplemental diagnostic。\n * `defineConfig({ telemetry: { host } })` 可在作者已经提供受控 tunnel 时显式覆盖。\n */\n readonly otlpHost: string | null;\n /**\n * 可选:把一行写进容器的「主日志」(PID1 在 tail 它)——于是 `docker logs` /\n * Docker UI 的 Logs 标签页能实时看到 agent 逐轮活动。docker provider 实现,其它可省略。\n */\n appendLog?(line: string): Promise<void>;\n}\n/** 复用调度需要的中立寿命确认能力。 */\nexport interface SandboxReuseCapability {\n ensureLifetime(minRemainingMs: number): Promise<{\n ready: true;\n expiresAt?: string;\n } | {\n ready: false;\n reason: string;\n }>;\n}\n"]}
@@ -92,6 +92,30 @@ export interface CommandOptions {
92
92
  export interface SuccessfulCommandResult extends CommandResult {
93
93
  readonly exitCode: 0;
94
94
  }
95
+ export interface ManagedProcessStart {
96
+ readonly argv: readonly [string, ...string[]];
97
+ readonly cwd?: string;
98
+ readonly env?: Readonly<globalThis.Record<string, string>>;
99
+ }
100
+ export type ManagedProcessChunk = {
101
+ readonly _tag: "Stdout";
102
+ readonly bytes: Uint8Array;
103
+ } | {
104
+ readonly _tag: "Stderr";
105
+ readonly bytes: Uint8Array;
106
+ };
107
+ export interface ManagedProcessExit {
108
+ readonly exitCode: number | null;
109
+ readonly signal?: string;
110
+ }
111
+ /** Attempt-owned bidirectional process. `output` has exactly one consumer. */
112
+ export interface ManagedProcess {
113
+ readonly output: AsyncIterable<ManagedProcessChunk>;
114
+ writeStdin(bytes: Uint8Array): Promise<void>;
115
+ closeStdin(): Promise<void>;
116
+ wait(): Promise<ManagedProcessExit>;
117
+ terminate(): Promise<void>;
118
+ }
95
119
  /** 三个运行中 Sandbox 视图共用的操作词汇;同名成员在不同视图中不得改变语义。 */
96
120
  export interface SandboxOperations {
97
121
  /** Sandbox 内项目/工作区根目录的绝对路径(agent 命令的默认 cwd,也是 git baseline 提交的位置)。各方法的相对路径都以此为基准解析,省略 `cwd`/`targetDir` 时也落到这里。 */
@@ -92,6 +92,30 @@ export interface CommandOptions {
92
92
  export interface SuccessfulCommandResult extends CommandResult {
93
93
  readonly exitCode: 0;
94
94
  }
95
+ export interface ManagedProcessStart {
96
+ readonly argv: readonly [string, ...string[]];
97
+ readonly cwd?: string;
98
+ readonly env?: Readonly<globalThis.Record<string, string>>;
99
+ }
100
+ export type ManagedProcessChunk = {
101
+ readonly _tag: "Stdout";
102
+ readonly bytes: Uint8Array;
103
+ } | {
104
+ readonly _tag: "Stderr";
105
+ readonly bytes: Uint8Array;
106
+ };
107
+ export interface ManagedProcessExit {
108
+ readonly exitCode: number | null;
109
+ readonly signal?: string;
110
+ }
111
+ /** Attempt-owned bidirectional process. `output` has exactly one consumer. */
112
+ export interface ManagedProcess {
113
+ readonly output: AsyncIterable<ManagedProcessChunk>;
114
+ writeStdin(bytes: Uint8Array): Promise<void>;
115
+ closeStdin(): Promise<void>;
116
+ wait(): Promise<ManagedProcessExit>;
117
+ terminate(): Promise<void>;
118
+ }
95
119
  /** 三个运行中 Sandbox 视图共用的操作词汇;同名成员在不同视图中不得改变语义。 */
96
120
  export interface SandboxOperations {
97
121
  /** Sandbox 内项目/工作区根目录的绝对路径(agent 命令的默认 cwd,也是 git baseline 提交的位置)。各方法的相对路径都以此为基准解析,省略 `cwd`/`targetDir` 时也落到这里。 */
@@ -92,6 +92,30 @@ export interface CommandOptions {
92
92
  export interface SuccessfulCommandResult extends CommandResult {
93
93
  readonly exitCode: 0;
94
94
  }
95
+ export interface ManagedProcessStart {
96
+ readonly argv: readonly [string, ...string[]];
97
+ readonly cwd?: string;
98
+ readonly env?: Readonly<globalThis.Record<string, string>>;
99
+ }
100
+ export type ManagedProcessChunk = {
101
+ readonly _tag: "Stdout";
102
+ readonly bytes: Uint8Array;
103
+ } | {
104
+ readonly _tag: "Stderr";
105
+ readonly bytes: Uint8Array;
106
+ };
107
+ export interface ManagedProcessExit {
108
+ readonly exitCode: number | null;
109
+ readonly signal?: string;
110
+ }
111
+ /** Attempt-owned bidirectional process. `output` has exactly one consumer. */
112
+ export interface ManagedProcess {
113
+ readonly output: AsyncIterable<ManagedProcessChunk>;
114
+ writeStdin(bytes: Uint8Array): Promise<void>;
115
+ closeStdin(): Promise<void>;
116
+ wait(): Promise<ManagedProcessExit>;
117
+ terminate(): Promise<void>;
118
+ }
95
119
  /** 三个运行中 Sandbox 视图共用的操作词汇;同名成员在不同视图中不得改变语义。 */
96
120
  export interface SandboxOperations {
97
121
  /** Sandbox 内项目/工作区根目录的绝对路径(agent 命令的默认 cwd,也是 git baseline 提交的位置)。各方法的相对路径都以此为基准解析,省略 `cwd`/`targetDir` 时也落到这里。 */
@@ -61,6 +61,7 @@ class VercelSandbox {
61
61
  suspend: (0, backend_ts_1.supportedBackendCapability)(() => this.suspend()),
62
62
  ensureLifetime: (0, backend_ts_1.supportedBackendCapability)((minRemainingMs) => this.ensureLifetime(minRemainingMs)),
63
63
  setCommandDeadline: (0, backend_ts_1.supportedBackendCapability)((deadlineAt) => this.setCommandDeadline(deadlineAt)),
64
+ managedProcess: (0, backend_ts_1.unsupportedBackendCapabilityBecause)("@vercel/sandbox 2.2.1 does not expose bidirectional stdin or raw output chunks"),
64
65
  };
65
66
  constructor(vsb, id, commandTimeoutMs, runtime, pathPrepend = [], lifetimeMs, deadlineAt) {
66
67
  this.vsb = vsb;