niceeval 0.13.3 → 0.13.4-canary.39

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 (487) hide show
  1. package/INDEX.md +5 -5
  2. package/dist/agents/index.cjs +2 -2
  3. package/dist/agents/index.cjs.map +1 -1
  4. package/dist/agents/project.json +6 -0
  5. package/dist/agents/streaming.cjs.map +1 -1
  6. package/dist/agents/types.cjs.map +1 -1
  7. package/dist/agents/types.d.cts +1 -1
  8. package/dist/agents/types.d.mts +1 -1
  9. package/dist/agents/types.d.ts +1 -1
  10. package/dist/analysis/bindings.d.cts +8 -8
  11. package/dist/analysis/bindings.d.mts +8 -8
  12. package/dist/analysis/bindings.d.ts +8 -8
  13. package/dist/analysis/contracts.cjs.map +1 -1
  14. package/dist/analysis/contracts.d.cts +8 -19
  15. package/dist/analysis/contracts.d.mts +8 -19
  16. package/dist/analysis/contracts.d.ts +8 -19
  17. package/dist/analysis/experiment-groups.cjs +7 -14
  18. package/dist/analysis/experiment-groups.cjs.map +1 -1
  19. package/dist/analysis/index.cjs.map +1 -1
  20. package/dist/analysis/index.d.cts +1 -1
  21. package/dist/analysis/index.d.mts +1 -1
  22. package/dist/analysis/index.d.ts +1 -1
  23. package/dist/cli/application.cjs +4 -13
  24. package/dist/cli/application.cjs.map +1 -1
  25. package/dist/cli/application.d.cts +62 -59
  26. package/dist/cli/application.d.mts +62 -59
  27. package/dist/cli/application.d.ts +62 -59
  28. package/dist/cli/application.js +6 -12
  29. package/dist/cli/bootstrap.cjs +28 -2
  30. package/dist/cli/bootstrap.cjs.map +1 -1
  31. package/dist/cli/contribution.cjs +185 -0
  32. package/dist/cli/contribution.cjs.map +1 -0
  33. package/dist/cli/contribution.d.cts +55 -0
  34. package/dist/cli/contribution.d.mts +55 -0
  35. package/dist/cli/contribution.d.ts +55 -0
  36. package/dist/cli/contribution.js +20 -0
  37. package/dist/cli/contribution.js.map +1 -0
  38. package/dist/cli/node-application.cjs +119 -87
  39. package/dist/cli/node-application.cjs.map +1 -1
  40. package/dist/cli/node-application.d.cts +2 -8
  41. package/dist/cli/node-application.d.mts +2 -8
  42. package/dist/cli/node-application.d.ts +2 -8
  43. package/dist/cli/node-application.js +12 -22
  44. package/dist/cli/program.cjs +87 -2756
  45. package/dist/cli/program.cjs.map +1 -1
  46. package/dist/cli/program.d.cts +11 -332
  47. package/dist/cli/program.d.mts +11 -332
  48. package/dist/cli/program.d.ts +11 -332
  49. package/dist/cli/program.js +4 -28
  50. package/dist/cli.cjs +0 -3
  51. package/dist/cli.cjs.map +1 -1
  52. package/dist/cli.d.cts +0 -1
  53. package/dist/cli.d.mts +0 -1
  54. package/dist/cli.d.ts +0 -1
  55. package/dist/cli.js +6 -14
  56. package/dist/define.cjs +1 -1
  57. package/dist/define.cjs.map +1 -1
  58. package/dist/docker/cache-administration.cjs +8 -0
  59. package/dist/docker/cache-administration.cjs.map +1 -0
  60. package/dist/docker/cache-administration.d.cts +33 -0
  61. package/dist/docker/cache-administration.d.mts +33 -0
  62. package/dist/docker/cache-administration.d.ts +33 -0
  63. package/dist/docker/cache-administration.js +6 -0
  64. package/dist/docker/cache-administration.js.map +1 -0
  65. package/dist/docker/cache-live.cjs +27 -0
  66. package/dist/docker/cache-live.cjs.map +1 -0
  67. package/dist/docker/cache-live.d.cts +3 -0
  68. package/dist/docker/cache-live.d.mts +3 -0
  69. package/dist/docker/cache-live.d.ts +3 -0
  70. package/dist/docker/cache-live.js +6 -0
  71. package/dist/docker/cache-live.js.map +1 -0
  72. package/dist/docker/cli/contribution.cjs +223 -0
  73. package/dist/docker/cli/contribution.cjs.map +1 -0
  74. package/dist/docker/cli/contribution.d.cts +48 -0
  75. package/dist/docker/cli/contribution.d.mts +48 -0
  76. package/dist/docker/cli/contribution.d.ts +48 -0
  77. package/dist/docker/cli/contribution.js +8 -0
  78. package/dist/docker/cli/contribution.js.map +1 -0
  79. package/dist/eval/cli/contribution.cjs +62 -0
  80. package/dist/eval/cli/contribution.cjs.map +1 -0
  81. package/dist/eval/cli/contribution.d.cts +21 -0
  82. package/dist/eval/cli/contribution.d.mts +21 -0
  83. package/dist/eval/cli/contribution.d.ts +21 -0
  84. package/dist/eval/cli/contribution.js +8 -0
  85. package/dist/eval/cli/contribution.js.map +1 -0
  86. package/dist/eval/host/index.cjs +23 -0
  87. package/dist/eval/host/index.cjs.map +1 -0
  88. package/dist/eval/host/index.d.cts +27 -0
  89. package/dist/eval/host/index.d.mts +27 -0
  90. package/dist/eval/host/index.d.ts +27 -0
  91. package/dist/eval/host/index.js +8 -0
  92. package/dist/eval/host/index.js.map +1 -0
  93. package/dist/eval/host/index.mjs +8 -0
  94. package/dist/eval/host/index.mjs.map +1 -0
  95. package/dist/experiment/host/cli/contribution.cjs +835 -0
  96. package/dist/experiment/host/cli/contribution.cjs.map +1 -0
  97. package/dist/experiment/host/cli/contribution.d.cts +329 -0
  98. package/dist/experiment/host/cli/contribution.d.mts +329 -0
  99. package/dist/experiment/host/cli/contribution.d.ts +329 -0
  100. package/dist/experiment/host/cli/contribution.js +22 -0
  101. package/dist/experiment/host/cli/contribution.js.map +1 -0
  102. package/dist/experiment/host/cli/index.cjs +9 -0
  103. package/dist/experiment/host/cli/index.cjs.map +1 -0
  104. package/dist/experiment/host/cli/index.d.cts +2 -0
  105. package/dist/experiment/host/cli/index.d.mts +2 -0
  106. package/dist/experiment/host/cli/index.d.ts +2 -0
  107. package/dist/experiment/host/cli/index.js +10 -0
  108. package/dist/experiment/host/cli/index.js.map +1 -0
  109. package/dist/experiment/host/cli/terminal.cjs +15 -0
  110. package/dist/experiment/host/cli/terminal.cjs.map +1 -0
  111. package/dist/experiment/host/cli/terminal.d.cts +14 -0
  112. package/dist/experiment/host/cli/terminal.d.mts +14 -0
  113. package/dist/experiment/host/cli/terminal.d.ts +14 -0
  114. package/dist/experiment/host/cli/terminal.js +8 -0
  115. package/dist/experiment/host/cli/terminal.js.map +1 -0
  116. package/dist/experiment/host/index.cjs +35 -58
  117. package/dist/experiment/host/index.cjs.map +1 -1
  118. package/dist/experiment/host/index.d.cts +5 -79
  119. package/dist/experiment/host/index.d.mts +5 -79
  120. package/dist/experiment/host/index.d.ts +5 -79
  121. package/dist/experiment/host/index.js +4 -2
  122. package/dist/experiment/host/index.mjs +4 -2
  123. package/dist/experiment/host/operations.cjs +678 -0
  124. package/dist/experiment/host/operations.cjs.map +1 -0
  125. package/dist/experiment/host/operations.d.cts +19 -0
  126. package/dist/experiment/host/operations.d.mts +19 -0
  127. package/dist/experiment/host/operations.d.ts +19 -0
  128. package/dist/experiment/host/operations.js +24 -0
  129. package/dist/experiment/host/operations.js.map +1 -0
  130. package/dist/experiment/host/presentation.cjs +81 -0
  131. package/dist/experiment/host/presentation.cjs.map +1 -0
  132. package/dist/experiment/host/presentation.d.cts +9 -0
  133. package/dist/experiment/host/presentation.d.mts +9 -0
  134. package/dist/experiment/host/presentation.d.ts +9 -0
  135. package/dist/experiment/host/presentation.js +8 -0
  136. package/dist/experiment/host/presentation.js.map +1 -0
  137. package/dist/experiment/host/teardown.cjs +394 -0
  138. package/dist/experiment/host/teardown.cjs.map +1 -0
  139. package/dist/experiment/host/teardown.d.cts +5 -0
  140. package/dist/experiment/host/teardown.d.mts +5 -0
  141. package/dist/experiment/host/teardown.d.ts +5 -0
  142. package/dist/experiment/host/teardown.js +8 -0
  143. package/dist/experiment/host/teardown.js.map +1 -0
  144. package/dist/experiment/host/types.cjs +9 -0
  145. package/dist/experiment/host/types.cjs.map +1 -0
  146. package/dist/experiment/host/types.d.cts +423 -0
  147. package/dist/experiment/host/types.d.mts +423 -0
  148. package/dist/experiment/host/types.d.ts +423 -0
  149. package/dist/experiment/host/types.js +6 -0
  150. package/dist/experiment/host/types.js.map +1 -0
  151. package/dist/i18n/en.cjs +8 -50
  152. package/dist/i18n/en.cjs.map +1 -1
  153. package/dist/i18n/en.d.cts +2 -6
  154. package/dist/i18n/en.d.mts +2 -6
  155. package/dist/i18n/en.d.ts +2 -6
  156. package/dist/o11y/project.json +6 -0
  157. package/dist/project/cli/contribution.cjs +66 -0
  158. package/dist/project/cli/contribution.cjs.map +1 -0
  159. package/dist/project/cli/contribution.d.cts +17 -0
  160. package/dist/project/cli/contribution.d.mts +17 -0
  161. package/dist/project/cli/contribution.d.ts +17 -0
  162. package/dist/project/cli/contribution.js +8 -0
  163. package/dist/project/cli/contribution.js.map +1 -0
  164. package/dist/project/cli/index.cjs +7 -0
  165. package/dist/project/cli/index.cjs.map +1 -0
  166. package/dist/project/cli/index.d.cts +1 -0
  167. package/dist/project/cli/index.d.mts +1 -0
  168. package/dist/project/cli/index.d.ts +1 -0
  169. package/dist/project/cli/index.js +8 -0
  170. package/dist/project/cli/index.js.map +1 -0
  171. package/dist/project/host/index.cjs +11 -0
  172. package/dist/project/host/index.cjs.map +1 -0
  173. package/dist/project/host/index.d.cts +4 -0
  174. package/dist/project/host/index.d.mts +4 -0
  175. package/dist/project/host/index.d.ts +4 -0
  176. package/dist/project/host/index.js +14 -0
  177. package/dist/project/host/index.js.map +1 -0
  178. package/dist/project/host/index.mjs +14 -0
  179. package/dist/project/host/index.mjs.map +1 -0
  180. package/dist/project/host.cjs +59 -0
  181. package/dist/project/host.cjs.map +1 -0
  182. package/dist/project/host.d.cts +17 -0
  183. package/dist/project/host.d.mts +17 -0
  184. package/dist/project/host.d.ts +17 -0
  185. package/dist/project/host.js +6 -0
  186. package/dist/project/host.js.map +1 -0
  187. package/dist/project/index.cjs +11 -0
  188. package/dist/project/index.cjs.map +1 -0
  189. package/dist/project/index.d.cts +4 -0
  190. package/dist/project/index.d.mts +4 -0
  191. package/dist/project/index.d.ts +4 -0
  192. package/dist/project/index.js +14 -0
  193. package/dist/project/index.js.map +1 -0
  194. package/dist/project/node.cjs +91 -0
  195. package/dist/project/node.cjs.map +1 -0
  196. package/dist/project/node.d.cts +6 -0
  197. package/dist/project/node.d.mts +6 -0
  198. package/dist/project/node.d.ts +6 -0
  199. package/dist/project/node.js +12 -0
  200. package/dist/project/node.js.map +1 -0
  201. package/dist/project/services.cjs +17 -0
  202. package/dist/project/services.cjs.map +1 -0
  203. package/dist/project/services.d.cts +47 -0
  204. package/dist/project/services.d.mts +47 -0
  205. package/dist/project/services.d.ts +47 -0
  206. package/dist/project/services.js +12 -0
  207. package/dist/project/services.js.map +1 -0
  208. package/dist/project/templates.cjs +28 -0
  209. package/dist/project/templates.cjs.map +1 -0
  210. package/dist/project/templates.d.cts +4 -0
  211. package/dist/project/templates.d.mts +4 -0
  212. package/dist/project/templates.d.ts +4 -0
  213. package/dist/project/templates.js +12 -0
  214. package/dist/project/templates.js.map +1 -0
  215. package/dist/project.json +6 -0
  216. package/dist/record/family/catalog.d.cts +10 -10
  217. package/dist/record/family/catalog.d.mts +10 -10
  218. package/dist/record/family/catalog.d.ts +10 -10
  219. package/dist/record/family/file-changes.d.cts +8 -8
  220. package/dist/record/family/file-changes.d.mts +8 -8
  221. package/dist/record/family/file-changes.d.ts +8 -8
  222. package/dist/record/host/cli/contribution.cjs +206 -0
  223. package/dist/record/host/cli/contribution.cjs.map +1 -0
  224. package/dist/record/host/cli/contribution.d.cts +32 -0
  225. package/dist/record/host/cli/contribution.d.mts +32 -0
  226. package/dist/record/host/cli/contribution.d.ts +32 -0
  227. package/dist/record/host/cli/contribution.js +10 -0
  228. package/dist/record/host/cli/contribution.js.map +1 -0
  229. package/dist/record/host/cli/index.cjs +8 -0
  230. package/dist/record/host/cli/index.cjs.map +1 -0
  231. package/dist/record/host/cli/index.d.cts +1 -0
  232. package/dist/record/host/cli/index.d.mts +1 -0
  233. package/dist/record/host/cli/index.d.ts +1 -0
  234. package/dist/record/host/cli/index.js +10 -0
  235. package/dist/record/host/cli/index.js.map +1 -0
  236. package/dist/record/host/cli/presentation.cjs +122 -0
  237. package/dist/record/host/cli/presentation.cjs.map +1 -0
  238. package/dist/record/host/cli/presentation.d.cts +7 -0
  239. package/dist/record/host/cli/presentation.d.mts +7 -0
  240. package/dist/record/host/cli/presentation.d.ts +7 -0
  241. package/dist/record/host/cli/presentation.js +12 -0
  242. package/dist/record/host/cli/presentation.js.map +1 -0
  243. package/dist/record/host/index.cjs.map +1 -1
  244. package/dist/record/host/index.d.cts +1 -1
  245. package/dist/record/host/index.d.mts +1 -1
  246. package/dist/record/host/index.d.ts +1 -1
  247. package/dist/record/host/runtime.cjs +184 -1
  248. package/dist/record/host/runtime.cjs.map +1 -1
  249. package/dist/record/host/types.cjs.map +1 -1
  250. package/dist/record/host/types.d.cts +120 -0
  251. package/dist/record/host/types.d.mts +120 -0
  252. package/dist/record/host/types.d.ts +120 -0
  253. package/dist/record/project.json +6 -0
  254. package/dist/report/assets/styles.css +80 -0
  255. package/dist/report/cli/contribution.cjs +325 -0
  256. package/dist/report/cli/contribution.cjs.map +1 -0
  257. package/dist/report/cli/contribution.d.cts +143 -0
  258. package/dist/report/cli/contribution.d.mts +143 -0
  259. package/dist/report/cli/contribution.d.ts +143 -0
  260. package/dist/report/cli/contribution.js +12 -0
  261. package/dist/report/cli/contribution.js.map +1 -0
  262. package/dist/report/client-dist/app.js +9 -9
  263. package/dist/report/components/attempt-detail/content.cjs +1 -1
  264. package/dist/report/components/attempt-detail/content.cjs.map +1 -1
  265. package/dist/report/components/entity-lists/compute.cjs +5 -0
  266. package/dist/report/components/entity-lists/compute.cjs.map +1 -1
  267. package/dist/report/components/entity-lists/compute.d.cts +2 -0
  268. package/dist/report/components/entity-lists/compute.d.mts +2 -0
  269. package/dist/report/components/entity-lists/compute.d.ts +2 -0
  270. package/dist/report/components/entity-lists/content.cjs +35 -12
  271. package/dist/report/components/entity-lists/content.cjs.map +1 -1
  272. package/dist/report/components/entity-lists/index.cjs +0 -3
  273. package/dist/report/components/entity-lists/index.cjs.map +1 -1
  274. package/dist/report/components/summaries/index.cjs +2 -4
  275. package/dist/report/components/summaries/index.cjs.map +1 -1
  276. package/dist/report/definition/cell.cjs +7 -2
  277. package/dist/report/definition/cell.cjs.map +1 -1
  278. package/dist/report/definition/cell.d.cts +2 -0
  279. package/dist/report/definition/cell.d.mts +2 -0
  280. package/dist/report/definition/cell.d.ts +2 -0
  281. package/dist/report/definition/primitives/assertion-evidence.cjs +190 -4
  282. package/dist/report/definition/primitives/assertion-evidence.cjs.map +1 -1
  283. package/dist/report/definition/primitives/assertion-evidence.d.cts +4 -0
  284. package/dist/report/definition/primitives/assertion-evidence.d.mts +4 -0
  285. package/dist/report/definition/primitives/assertion-evidence.d.ts +4 -0
  286. package/dist/report/execution/machine.cjs +2 -3
  287. package/dist/report/execution/machine.cjs.map +1 -1
  288. package/dist/report/execution/machine.d.cts +11 -8
  289. package/dist/report/execution/machine.d.mts +11 -8
  290. package/dist/report/execution/machine.d.ts +11 -8
  291. package/dist/report/host/from-record.cjs +13 -8
  292. package/dist/report/host/from-record.cjs.map +1 -1
  293. package/dist/report/host/index.cjs +5 -1
  294. package/dist/report/host/index.cjs.map +1 -1
  295. package/dist/report/host/index.d.cts +1 -0
  296. package/dist/report/host/index.d.mts +1 -0
  297. package/dist/report/host/index.d.ts +1 -0
  298. package/dist/report/host/index.js +8 -2
  299. package/dist/report/host/index.mjs +8 -2
  300. package/dist/report/host/machine.cjs +23 -22
  301. package/dist/report/host/machine.cjs.map +1 -1
  302. package/dist/report/host/machine.d.cts +1 -1
  303. package/dist/report/host/machine.d.mts +1 -1
  304. package/dist/report/host/machine.d.ts +1 -1
  305. package/dist/report/host/node/loader.cjs +4 -2
  306. package/dist/report/host/node/loader.cjs.map +1 -1
  307. package/dist/report/host/node/loader.d.cts +3 -1
  308. package/dist/report/host/node/loader.d.mts +3 -1
  309. package/dist/report/host/node/loader.d.ts +3 -1
  310. package/dist/report/host/node.cjs +44 -9
  311. package/dist/report/host/node.cjs.map +1 -1
  312. package/dist/report/host/node.d.cts +13 -3
  313. package/dist/report/host/node.d.mts +13 -3
  314. package/dist/report/host/node.d.ts +13 -3
  315. package/dist/report/host/node.js +44 -32
  316. package/dist/report/host/operations.cjs +14 -0
  317. package/dist/report/host/operations.cjs.map +1 -0
  318. package/dist/report/host/operations.d.cts +39 -0
  319. package/dist/report/host/operations.d.mts +39 -0
  320. package/dist/report/host/operations.d.ts +39 -0
  321. package/dist/report/host/operations.js +10 -0
  322. package/dist/report/host/operations.js.map +1 -0
  323. package/dist/report/model/chart/plot.cjs +1 -1
  324. package/dist/report/model/chart/plot.cjs.map +1 -1
  325. package/dist/report/model/locale.cjs +4 -0
  326. package/dist/report/model/locale.cjs.map +1 -1
  327. package/dist/report/model/locale.d.cts +3 -1
  328. package/dist/report/model/locale.d.mts +3 -1
  329. package/dist/report/model/locale.d.ts +3 -1
  330. package/dist/report/react/styles.css +80 -0
  331. package/dist/runner/build-preparation.cjs +5 -5
  332. package/dist/runner/build-preparation.cjs.map +1 -1
  333. package/dist/runner/build-preparation.d.cts +2 -3
  334. package/dist/runner/build-preparation.d.mts +2 -3
  335. package/dist/runner/build-preparation.d.ts +2 -3
  336. package/dist/runner/feedback/coordinator.cjs +18 -15
  337. package/dist/runner/feedback/coordinator.cjs.map +1 -1
  338. package/dist/runner/feedback/coordinator.d.cts +6 -0
  339. package/dist/runner/feedback/coordinator.d.mts +6 -0
  340. package/dist/runner/feedback/coordinator.d.ts +6 -0
  341. package/dist/runner/ledger.cjs +3 -13
  342. package/dist/runner/ledger.cjs.map +1 -1
  343. package/dist/runner/ledger.d.cts +1 -3
  344. package/dist/runner/ledger.d.mts +1 -3
  345. package/dist/runner/ledger.d.ts +1 -3
  346. package/dist/runner/run.cjs +63 -18
  347. package/dist/runner/run.cjs.map +1 -1
  348. package/dist/runner/session.cjs +10 -0
  349. package/dist/runner/session.cjs.map +1 -1
  350. package/dist/runner/session.d.cts +25 -0
  351. package/dist/runner/session.d.mts +25 -0
  352. package/dist/runner/session.d.ts +25 -0
  353. package/dist/runner/types.cjs.map +1 -1
  354. package/dist/runner/types.d.cts +1 -2
  355. package/dist/runner/types.d.mts +1 -2
  356. package/dist/runner/types.d.ts +1 -2
  357. package/dist/sandbox/build-coordinator.cjs +38 -19
  358. package/dist/sandbox/build-coordinator.cjs.map +1 -1
  359. package/dist/sandbox/build-coordinator.d.cts +47 -7
  360. package/dist/sandbox/build-coordinator.d.mts +47 -7
  361. package/dist/sandbox/build-coordinator.d.ts +47 -7
  362. package/dist/sandbox/build-coordinator.js +8 -4
  363. package/dist/sandbox/cli/contribution.cjs +128 -0
  364. package/dist/sandbox/cli/contribution.cjs.map +1 -0
  365. package/dist/sandbox/cli/contribution.d.cts +71 -0
  366. package/dist/sandbox/cli/contribution.d.mts +71 -0
  367. package/dist/sandbox/cli/contribution.d.ts +71 -0
  368. package/dist/sandbox/cli/contribution.js +8 -0
  369. package/dist/sandbox/cli/contribution.js.map +1 -0
  370. package/dist/sandbox/cli-commands.cjs +14 -21
  371. package/dist/sandbox/cli-commands.cjs.map +1 -1
  372. package/dist/sandbox/cli-commands.d.cts +12 -8
  373. package/dist/sandbox/cli-commands.d.mts +12 -8
  374. package/dist/sandbox/cli-commands.d.ts +12 -8
  375. package/dist/sandbox/compose.cjs +22 -2
  376. package/dist/sandbox/compose.cjs.map +1 -1
  377. package/dist/sandbox/compose.d.cts +1 -1
  378. package/dist/sandbox/compose.d.mts +1 -1
  379. package/dist/sandbox/compose.d.ts +1 -1
  380. package/dist/sandbox/docker-profile/cli.cjs +13 -9
  381. package/dist/sandbox/docker-profile/cli.cjs.map +1 -1
  382. package/dist/sandbox/docker-profile/cli.d.cts +2 -0
  383. package/dist/sandbox/docker-profile/cli.d.mts +2 -0
  384. package/dist/sandbox/docker-profile/cli.d.ts +2 -0
  385. package/dist/sandbox/docker-profile/runtime.cjs +68 -7
  386. package/dist/sandbox/docker-profile/runtime.cjs.map +1 -1
  387. package/dist/sandbox/docker-profile/runtime.d.cts +19 -1
  388. package/dist/sandbox/docker-profile/runtime.d.mts +19 -1
  389. package/dist/sandbox/docker-profile/runtime.d.ts +19 -1
  390. package/dist/sandbox/docker-profile/runtime.js +10 -8
  391. package/dist/sandbox/docker-profile/schema.cjs +68 -19
  392. package/dist/sandbox/docker-profile/schema.cjs.map +1 -1
  393. package/dist/sandbox/docker-profile/schema.d.cts +23 -9
  394. package/dist/sandbox/docker-profile/schema.d.mts +23 -9
  395. package/dist/sandbox/docker-profile/schema.d.ts +23 -9
  396. package/dist/sandbox/docker-task-build-cache.cjs +532 -0
  397. package/dist/sandbox/docker-task-build-cache.cjs.map +1 -0
  398. package/dist/sandbox/docker-task-build-cache.d.cts +68 -0
  399. package/dist/sandbox/docker-task-build-cache.d.mts +68 -0
  400. package/dist/sandbox/docker-task-build-cache.d.ts +68 -0
  401. package/dist/sandbox/docker-task-build-cache.js +20 -0
  402. package/dist/sandbox/docker-task-build-cache.js.map +1 -0
  403. package/dist/sandbox/docker.cjs +50 -0
  404. package/dist/sandbox/docker.cjs.map +1 -1
  405. package/dist/sandbox/docker.d.cts +15 -0
  406. package/dist/sandbox/docker.d.mts +15 -0
  407. package/dist/sandbox/docker.d.ts +15 -0
  408. package/dist/sandbox/dockerfile-build.cjs +55 -5
  409. package/dist/sandbox/dockerfile-build.cjs.map +1 -1
  410. package/dist/sandbox/dockerfile-build.d.cts +2 -2
  411. package/dist/sandbox/dockerfile-build.d.mts +2 -2
  412. package/dist/sandbox/dockerfile-build.d.ts +2 -2
  413. package/dist/sandbox/index.cjs +5 -3
  414. package/dist/sandbox/index.cjs.map +1 -1
  415. package/dist/sandbox/index.d.cts +4 -3
  416. package/dist/sandbox/index.d.mts +4 -3
  417. package/dist/sandbox/index.d.ts +4 -3
  418. package/dist/sandbox/index.js +16 -14
  419. package/dist/sandbox/index.mjs +16 -14
  420. package/dist/sandbox/keep.cjs +1 -3
  421. package/dist/sandbox/keep.cjs.map +1 -1
  422. package/dist/sandbox/layer.cjs +70 -79
  423. package/dist/sandbox/layer.cjs.map +1 -1
  424. package/dist/sandbox/layer.d.cts +6 -12
  425. package/dist/sandbox/layer.d.mts +6 -12
  426. package/dist/sandbox/layer.d.ts +6 -12
  427. package/dist/sandbox/layer.js +16 -18
  428. package/dist/sandbox/ledger-paths.cjs +4 -18
  429. package/dist/sandbox/ledger-paths.cjs.map +1 -1
  430. package/dist/sandbox/ledger-paths.d.cts +3 -13
  431. package/dist/sandbox/ledger-paths.d.mts +3 -13
  432. package/dist/sandbox/ledger-paths.d.ts +3 -13
  433. package/dist/sandbox/ledger-paths.js +4 -8
  434. package/dist/sandbox/registry.cjs +1 -1
  435. package/dist/sandbox/registry.cjs.map +1 -1
  436. package/dist/sandbox/runtime.cjs +27 -37
  437. package/dist/sandbox/runtime.cjs.map +1 -1
  438. package/dist/sandbox/runtime.d.cts +1 -2
  439. package/dist/sandbox/runtime.d.mts +1 -2
  440. package/dist/sandbox/runtime.d.ts +1 -2
  441. package/dist/sandbox/runtime.js +6 -8
  442. package/dist/sandbox/types.cjs.map +1 -1
  443. package/dist/sandbox/types.d.cts +3 -3
  444. package/dist/sandbox/types.d.mts +3 -3
  445. package/dist/sandbox/types.d.ts +3 -3
  446. package/dist/sources/project.json +6 -0
  447. package/dist/vendor/remark/remark-gfm.cjs +72 -72
  448. package/dist/vendor/remark/remark-gfm.cjs.map +1 -1
  449. package/dist/vendor/remark/remark-parse.cjs +54 -54
  450. package/dist/vendor/remark/remark-parse.cjs.map +1 -1
  451. package/dist/vendor/remark/remark.cjs +125 -125
  452. package/dist/vendor/remark/remark.cjs.map +2 -2
  453. package/docs-site/zh/README.md +1 -1
  454. package/docs-site/zh/explanation/assert.mdx +4 -0
  455. package/docs-site/zh/explanation/judge.mdx +40 -9
  456. package/docs-site/zh/reference/cli.mdx +67 -43
  457. package/docs-site/zh/reference/define-agent.mdx +2 -2
  458. package/docs-site/zh/reference/report-components.mdx +4 -3
  459. package/docs-site/zh/troubleshooting/debug-sandbox.mdx +6 -0
  460. package/docs-site/zh/troubleshooting/debugging.mdx +28 -1
  461. package/docs-site/zh/tutorials/agent-feedback-loop.mdx +4 -2
  462. package/docs-site/zh/tutorials/concurrency.mdx +2 -2
  463. package/docs-site/zh/tutorials/custom-reports.mdx +175 -9
  464. package/docs-site/zh/tutorials/docker-in-docker.mdx +52 -7
  465. package/docs-site/zh/tutorials/eval-groups.mdx +1 -2
  466. package/docs-site/zh/tutorials/evaluation-kinds.mdx +39 -6
  467. package/docs-site/zh/tutorials/nixos-managed-dind.mdx +14 -5
  468. package/docs-site/zh/tutorials/sandbox-providers.mdx +1 -28
  469. package/docs-site/zh/tutorials/sandbox-reuse.mdx +1 -1
  470. package/docs-site/zh/tutorials/viewing-results.mdx +2 -0
  471. package/package.json +24 -19
  472. package/README.md +0 -176
  473. package/README.zh.md +0 -176
  474. package/dist/cli/record.cjs +0 -246
  475. package/dist/cli/record.cjs.map +0 -1
  476. package/dist/cli/record.d.cts +0 -40
  477. package/dist/cli/record.d.mts +0 -40
  478. package/dist/cli/record.d.ts +0 -40
  479. package/dist/cli/record.js +0 -10
  480. package/dist/cli/record.js.map +0 -1
  481. package/dist/sandbox/local.cjs +0 -361
  482. package/dist/sandbox/local.cjs.map +0 -1
  483. package/dist/sandbox/local.d.cts +0 -80
  484. package/dist/sandbox/local.d.mts +0 -80
  485. package/dist/sandbox/local.d.ts +0 -80
  486. package/dist/sandbox/local.js +0 -6
  487. package/dist/sandbox/local.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"compose.js","sourceRoot":"","sources":["compose.ts"],"names":[],"mappings":"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","sourcesContent":["// Docker Compose case:原生 compose build/up/down、受管 overlay、黑名单、mainService 主 Sandbox、\n// ServiceController、整组 finalizer、泄题门 hints 与 BuildKey 收集。\n// NiceEval 不维护字段白名单解析器——未知字段原样交给 Compose;只拒绝破坏核心不变量的黑名单项。\n// 契约单源:docs/feature/sandbox/case.md「Docker Compose case」。\nimport { randomBytes } from \"node:crypto\";\nimport { spawn } from \"node:child_process\";\nimport { mkdtemp, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, isAbsolute, join, relative as relativePath, resolve as resolvePath, sep } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Data, Effect, type Scope } from \"effect\";\nimport { parseDocument } from \"yaml\";\nimport type { JsonValue } from \"../shared/types.ts\";\nimport { attachLeakGateHints, buildContextIdentityContribution, pathContentDigest, type BindMountSpec, type BuildContextSpec, type LeakGateHints, } from \"../runner/leak-gate.ts\";\nimport type { SandboxBuildExecutionContext, SandboxBuildProvider, SandboxBuildWork } from \"./build-coordinator.ts\";\nimport type { MaterializedSandboxCase, SandboxMaterializeContext, SandboxResourceGroup, ServiceController, } from \"./case-types.ts\";\nimport { computeBuildKey, digestOf, looksLikeDigestRef, unresolvedProviderFingerprintMarker, type BuildKey, } from \"./identity.ts\";\nimport { currentRunIdentity, dockerRunIdentityLabels, type RunIdentity } from \"./run-identity.ts\";\nimport { withProvisionRetry, type ProvisionSlot } from \"./retry.ts\";\nimport type { CommandResult } from \"./types.ts\";\nimport type { ScopedFeedback } from \"../types.ts\";\nimport { customSandboxBackend, type SandboxProviderBackend } from \"./backend.ts\";\nimport type { DockerSandbox } from \"./docker.ts\";\nimport { dockerfileBaseIdentity } from \"./dockerfile-identity.ts\";\n/**\n * materializer / BuildKey 的 builder revision,只对成功输入定义:它决定成功输入得到什么\n * 构建字节、物理计划与身份。安全校验只把破坏所有权不变量的输入改为规划失败,不改变任何\n * 成功输入的结果,因此新增校验不得递增本 revision(memory/compose-project-namespace-escape-destabilizes-case-identity.md)。\n */\nexport const COMPOSE_MATERIALIZER_REVISION = \"docker-compose-2\";\nconst BUILDER_KIND = \"docker-compose\";\n/**\n * physical planning 安全校验用的两个固定哨兵 project:同一份 file + env 分别求值有效模型,\n * 受管资源名必须随哨兵各自变化,写死其中一个哨兵名会在另一个模型失败。\n */\nconst COMPOSE_PLAN_SENTINEL_PROJECTS = [\"niceeval-plan-a\", \"niceeval-plan-b\"] as const;\n/** Provider stop 的 TERM 边界;再加 1s KILL grace 后仍严格短于 runner 的 8s 看门狗。 */\nconst COMPOSE_STOP_TIMEOUT_MS = 6500;\n/** Compose 收到 TERM 后仍不退出时,升级成 KILL 并结束等待。 */\nconst COMPOSE_ABORT_KILL_GRACE_MS = 1000;\nexport class ComposeBuildCollectionError extends Data.TaggedError(\"ComposeBuildCollectionError\")<{\n readonly stage: \"read\" | \"configuration\" | \"security\" | \"identity\";\n readonly message: string;\n}> {\n}\nfunction composeCollectionError(stage: ComposeBuildCollectionError[\"stage\"], cause: unknown): ComposeBuildCollectionError {\n return new ComposeBuildCollectionError({\n stage,\n message: cause instanceof Error ? cause.message : String(cause),\n });\n}\n// ---------------------------------------------------------------------------\n// 目标平台:构建事实(case.md「BuildKey 与 CaseKey」)\n// ---------------------------------------------------------------------------\n/** 构建器传平台用的环境变量;探测值与用户指定值都经它进入 builder。 */\nconst DOCKER_PLATFORM_ENV = \"DOCKER_DEFAULT_PLATFORM\";\n/** 归一成 `os/arch`:daemon 与 Node 各有各的写法(aarch64 / x86_64 / arm64 / x64)。 */\nexport function normalizeBuildPlatform(value: string): string {\n const [rawOs, rawArch] = value.trim().toLowerCase().split(\"/\");\n const os = rawOs && rawArch ? rawOs : \"linux\";\n const arch = rawArch ?? rawOs ?? \"\";\n const normalizedArch = arch === \"x86_64\" || arch === \"x64\" || arch === \"amd64\"\n ? \"amd64\"\n : arch === \"aarch64\" || arch === \"arm64\"\n ? \"arm64\"\n : arch;\n return `${os}/${normalizedArch}`;\n}\nlet dockerPlatformProbe: Promise<string> | undefined;\n/**\n * 目标平台从构建执行环境得出:优先用户显式指定的 `DOCKER_DEFAULT_PLATFORM`,\n * 其次 daemon 自报的 os/arch,都拿不到才回落到宿主架构(容器恒为 linux)。\n * 探测结果进 BuildKey,同一个值再传给构建器,身份与事实同源。\n */\nexport async function detectDockerBuildPlatform(opts?: {\n readonly env?: NodeJS.ProcessEnv;\n /** 注入探测通道(测试用);默认问本机 docker daemon。 */\n readonly probe?: () => Promise<string | undefined>;\n}): Promise<string> {\n const env = opts?.env ?? process.env;\n const pinned = env[DOCKER_PLATFORM_ENV];\n if (pinned)\n return normalizeBuildPlatform(pinned);\n if (opts?.probe) {\n const probed = await opts.probe();\n return normalizeBuildPlatform(probed ?? hostBuildPlatform());\n }\n dockerPlatformProbe ??= probeDockerServerPlatform().then((probed) => normalizeBuildPlatform(probed ?? hostBuildPlatform()));\n return dockerPlatformProbe;\n}\nfunction hostBuildPlatform(): string {\n return `linux/${process.arch}`;\n}\nfunction probeDockerServerPlatform(): Promise<string | undefined> {\n return new Promise((resolve) => {\n const child = spawn(\"docker\", [\"version\", \"--format\", \"{{.Server.Os}}/{{.Server.Arch}}\"], {\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n });\n let out = \"\";\n child.stdout?.on(\"data\", (c: Buffer) => {\n out += c.toString();\n });\n child.on(\"error\", () => resolve(undefined));\n child.on(\"close\", (code) => {\n const value = out.trim();\n resolve(code === 0 && value.includes(\"/\") ? value : undefined);\n });\n });\n}\n// ---------------------------------------------------------------------------\n// Compose 结构面(只为黑名单 / BuildKey / 泄题门抽取字段;不是白名单运行时)\n// ---------------------------------------------------------------------------\nexport interface ComposeBuildDecl {\n readonly context: string;\n readonly dockerfile?: string;\n readonly args?: Readonly<globalThis.Record<string, string>>;\n readonly target?: string;\n /** Compose `build.platforms` 原样保留;进 BuildKey 前由收集器裁决(多元素拒绝)。 */\n readonly platforms?: readonly string[];\n}\nexport interface ComposeServiceInspection {\n readonly name: string;\n readonly build?: ComposeBuildDecl;\n /** service 级 `platform`:Compose 用它决定构建与运行平台,压过 DOCKER_DEFAULT_PLATFORM。 */\n readonly platform?: string;\n readonly image?: string;\n readonly networkMode?: string;\n readonly workingDir?: string;\n /** 原始 volume 条目(短语法字符串或长语法摘要)。 */\n readonly volumes: readonly string[];\n}\nexport interface ComposeInspection {\n readonly services: readonly ComposeServiceInspection[];\n /** 受管网络名:服务实际加入的非 external 网络;没有任何服务声明网络时是 Compose 的 `default`。 */\n readonly networkNames: readonly string[];\n readonly raw: string;\n /** Compose case 引用的宿主侧非敏感文件;内容摘要进入 CaseKey,绝对路径不落盘。 */\n readonly localFiles: readonly ComposeLocalFileRef[];\n}\nexport interface ComposeLocalFileRef {\n readonly kind: \"env_file\" | \"config\" | \"secret\";\n readonly path: string;\n readonly label: string;\n}\n/** 从 Compose 原文抽取 services 的黑名单 / build / volume 面。未知字段忽略。 */\nexport function inspectComposeYaml(raw: string): ComposeInspection {\n const doc = parseYamlMapping(raw);\n const servicesNode = doc.services;\n if (servicesNode === undefined || servicesNode === null || typeof servicesNode !== \"object\" || Array.isArray(servicesNode)) {\n return { services: [], networkNames: [], raw, localFiles: topLevelLocalFiles(doc) };\n }\n const services: ComposeServiceInspection[] = [];\n const localFiles: ComposeLocalFileRef[] = topLevelLocalFiles(doc);\n for (const [name, value] of Object.entries(servicesNode as globalThis.Record<string, unknown>)) {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n services.push({ name, volumes: [] });\n continue;\n }\n const svc = value as globalThis.Record<string, unknown>;\n for (const path of localPathValues(svc.env_file)) {\n localFiles.push({ kind: \"env_file\", path, label: `service ${name} env_file` });\n }\n services.push({\n name,\n ...(parseBuild(svc.build) !== undefined ? { build: parseBuild(svc.build)! } : {}),\n ...(typeof svc.platform === \"string\" ? { platform: svc.platform } : {}),\n ...(typeof svc.image === \"string\" ? { image: svc.image } : {}),\n ...(typeof svc.network_mode === \"string\"\n ? { networkMode: svc.network_mode }\n : typeof svc.networkMode === \"string\"\n ? { networkMode: svc.networkMode }\n : {}),\n ...(typeof svc.working_dir === \"string\"\n ? { workingDir: svc.working_dir }\n : typeof svc.workingDir === \"string\"\n ? { workingDir: svc.workingDir }\n : {}),\n volumes: volumeStrings(svc.volumes),\n });\n }\n return {\n services,\n networkNames: managedNetworkNames(doc, servicesNode as globalThis.Record<string, unknown>),\n raw,\n localFiles,\n };\n}\nfunction topLevelLocalFiles(doc: globalThis.Record<string, YamlNode>): ComposeLocalFileRef[] {\n const refs: ComposeLocalFileRef[] = [];\n for (const kind of [\"config\", \"secret\"] as const) {\n const node = doc[`${kind}s`];\n if (node === null || typeof node !== \"object\" || Array.isArray(node))\n continue;\n for (const [name, value] of Object.entries(node as globalThis.Record<string, unknown>)) {\n if (value === null || typeof value !== \"object\" || Array.isArray(value))\n continue;\n const file = (value as globalThis.Record<string, unknown>).file;\n if (typeof file === \"string\")\n refs.push({ kind, path: file, label: `${kind} ${name}` });\n }\n }\n return refs;\n}\nfunction localPathValues(value: unknown): string[] {\n if (typeof value === \"string\")\n return [value];\n if (!Array.isArray(value))\n return [];\n return value.flatMap((entry) => {\n if (typeof entry === \"string\")\n return [entry];\n if (entry === null || typeof entry !== \"object\" || Array.isArray(entry))\n return [];\n const path = (entry as globalThis.Record<string, unknown>).path;\n return typeof path === \"string\" ? [path] : [];\n });\n}\n/**\n * 受管网络名。Compose 给容器和网络都打 `com.docker.compose.project`,孤儿核对靠它把资源组拼回来;\n * 网络那一半要能被单独核对,必须在创建期就带上运行标识 label,而 label 只能加在这些名字上。\n * `external: true` 的网络是用户自己的资源,不改它的 label、也不进受管清单。\n */\nfunction managedNetworkNames(doc: globalThis.Record<string, YamlNode>, servicesNode: globalThis.Record<string, unknown>): string[] {\n const external = new Set<string>();\n const top = doc.networks;\n if (top !== undefined && top !== null && typeof top === \"object\" && !Array.isArray(top)) {\n for (const [name, value] of Object.entries(top as globalThis.Record<string, unknown>)) {\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n const net = value as globalThis.Record<string, unknown>;\n if (net.external === true || net.external === \"true\")\n external.add(name);\n }\n }\n }\n const used = new Set<string>();\n for (const value of Object.values(servicesNode)) {\n if (value === null || typeof value !== \"object\" || Array.isArray(value))\n continue;\n const nets = (value as globalThis.Record<string, unknown>).networks;\n if (Array.isArray(nets)) {\n for (const n of nets)\n if (typeof n === \"string\")\n used.add(n);\n }\n else if (nets !== null && typeof nets === \"object\") {\n for (const n of Object.keys(nets as globalThis.Record<string, unknown>))\n used.add(n);\n }\n }\n const managed = [...used].filter((n) => !external.has(n));\n // 没有服务显式声明网络时,Compose 建的是 project 的 default 网络。\n return managed.length > 0 ? managed : used.size > 0 ? [] : [\"default\"];\n}\nfunction parseBuild(value: unknown): ComposeBuildDecl | undefined {\n if (typeof value === \"string\") {\n return { context: value };\n }\n if (value === null || typeof value !== \"object\" || Array.isArray(value))\n return undefined;\n const b = value as globalThis.Record<string, unknown>;\n const context = typeof b.context === \"string\" ? b.context : \".\";\n const dockerfile = typeof b.dockerfile === \"string\" ? b.dockerfile : undefined;\n const target = typeof b.target === \"string\" ? b.target : undefined;\n const platforms = Array.isArray(b.platforms)\n ? b.platforms.filter((p): p is string => typeof p === \"string\")\n : undefined;\n const args = b.args !== undefined && b.args !== null && typeof b.args === \"object\" && !Array.isArray(b.args)\n ? Object.fromEntries(Object.entries(b.args as globalThis.Record<string, unknown>).map(([k, v]) => [k, String(v)]))\n : undefined;\n return {\n context,\n ...(dockerfile !== undefined ? { dockerfile } : {}),\n ...(args !== undefined ? { args } : {}),\n ...(target !== undefined ? { target } : {}),\n ...(platforms !== undefined && platforms.length > 0 ? { platforms } : {}),\n };\n}\nfunction volumeStrings(value: unknown): string[] {\n if (!Array.isArray(value))\n return [];\n const out: string[] = [];\n for (const entry of value) {\n if (typeof entry === \"string\") {\n out.push(entry);\n continue;\n }\n if (entry !== null && typeof entry === \"object\" && !Array.isArray(entry)) {\n const v = entry as globalThis.Record<string, unknown>;\n const source = typeof v.source === \"string\" ? v.source : typeof v.Source === \"string\" ? v.Source : \"\";\n const target = typeof v.target === \"string\" ? v.target : typeof v.Target === \"string\" ? v.Target : \"\";\n const type = typeof v.type === \"string\" ? v.type : \"\";\n out.push([type, source, target].filter(Boolean).join(\":\"));\n }\n }\n return out;\n}\n// ---------------------------------------------------------------------------\n// 黑名单:只保护核心不变量\n// ---------------------------------------------------------------------------\nexport interface ComposeBlacklistFinding {\n readonly service: string;\n readonly field: string;\n readonly value: string;\n readonly reason: string;\n}\n/**\n * 黑名单检查。点名 service.field 与理由。\n * - Docker socket 挂载(任意服务)\n * - main 脱离受管 Compose 网络(`network_mode: host|none|container:*`)\n * - main 覆盖受管 workdir(仅当调用方声明了 managedWorkdir 且与 compose 冲突)\n */\nexport function findComposeBlacklistViolations(inspection: ComposeInspection, opts: {\n readonly mainService: string;\n readonly managedWorkdir?: string;\n}): ComposeBlacklistFinding[] {\n const findings: ComposeBlacklistFinding[] = [];\n for (const svc of inspection.services) {\n for (const vol of svc.volumes) {\n if (volumeTouchesDockerSock(vol)) {\n findings.push({\n service: svc.name,\n field: \"volumes\",\n value: vol,\n reason: \"mounts the Docker socket, which escapes the sandbox boundary and breaks NiceEval isolation\",\n });\n }\n }\n const isMain = svc.name === opts.mainService;\n if (isMain && svc.networkMode !== undefined && isDetachedNetworkMode(svc.networkMode)) {\n findings.push({\n service: svc.name,\n field: \"network_mode\",\n value: svc.networkMode,\n reason: \"detaches the main service from the managed Compose project network; Agent and sidecars would lose shared DNS/network semantics\",\n });\n }\n if (isMain &&\n opts.managedWorkdir !== undefined &&\n svc.workingDir !== undefined &&\n normalizePath(svc.workingDir) !== normalizePath(opts.managedWorkdir)) {\n findings.push({\n service: svc.name,\n field: \"working_dir\",\n value: svc.workingDir,\n reason: `overrides the NiceEval-managed workdir ${JSON.stringify(opts.managedWorkdir)}`,\n });\n }\n }\n return findings;\n}\nexport function assertComposeBlacklist(inspection: ComposeInspection, opts: {\n readonly mainService: string;\n readonly managedWorkdir?: string;\n}): void {\n const findings = findComposeBlacklistViolations(inspection, opts);\n if (findings.length === 0)\n return;\n const body = findings\n .map((f, i) => ` ${i + 1}. services.${f.service}.${f.field}=${JSON.stringify(f.value)}\\n ${f.reason}`)\n .join(\"\\n\");\n throw new Error(`Compose blacklist rejected ${findings.length} field(s) that break NiceEval core invariants:\\n${body}`);\n}\nfunction volumeTouchesDockerSock(vol: string): boolean {\n return /docker\\.sock(?:$|[:\\s])/i.test(vol) || /\\/var\\/run\\/docker\\.sock/i.test(vol);\n}\nfunction isDetachedNetworkMode(mode: string): boolean {\n const m = mode.trim().toLowerCase();\n return m === \"host\" || m === \"none\" || m.startsWith(\"container:\");\n}\nfunction normalizePath(p: string): string {\n return p.replace(/\\/+$/, \"\") || \"/\";\n}\n// ---------------------------------------------------------------------------\n// 安全校验:合成声明 + 双哨兵有效模型(case.md「Docker Compose case」黑名单)\n// ---------------------------------------------------------------------------\ninterface ComposeSecurityViolation {\n readonly field: string;\n readonly reason: string;\n}\n/**\n * 用正式 YAML parser(含 anchor/merge 展开)检测合成声明:\n * - 顶层 `include`:外部文件不在当前 CaseKey 输入闭包;\n * - 任何经 inline / anchor / merge 出现的 `services.*.extends.file`:该语法引入第二个文件入口,\n * 当前 CaseKey 没有为它建立输入闭包;同文件复用请使用 service-only extends。\n * 同文件 anchor、merge、插值与 service-only extends 不在这里拒绝,交给 Compose 有效模型求值。\n */\nfunction assertComposeSyntheticScope(raw: string): void {\n let json: unknown;\n try {\n json = parseDocument(raw, { merge: true }).toJSON();\n }\n catch {\n // 解析失败时 docker compose config 也会失败,由有效模型阶段给出安全错误,这里不跳过检查。\n json = undefined;\n }\n const violations: ComposeSecurityViolation[] = [];\n if (json !== null && typeof json === \"object\" && !Array.isArray(json)) {\n const root = json as Readonly<Record<string, unknown>>;\n if (\"include\" in root) {\n violations.push({\n field: \"include\",\n reason: \"top-level include pulls external Compose files into the run without entering the CaseKey input closure\",\n });\n }\n const services = root.services;\n if (services !== null && typeof services === \"object\" && !Array.isArray(services)) {\n for (const [name, svc] of Object.entries(services as Readonly<Record<string, unknown>>)) {\n if (svc === null || typeof svc !== \"object\" || Array.isArray(svc))\n continue;\n const ext = (svc as Readonly<Record<string, unknown>>).extends;\n if (ext === null || typeof ext !== \"object\" || Array.isArray(ext))\n continue;\n if (!(\"file\" in (ext as Readonly<Record<string, unknown>>)))\n continue;\n violations.push({\n field: `services.${name}.extends.file`,\n reason: \"introduces a Compose file entry that is not part of the CaseKey input closure; use in-file anchors/merges or service-only extends\",\n });\n }\n }\n }\n if (violations.length === 0)\n return;\n throw new Error(`Compose security validation rejected ${violations.length} declaration(s):\\n` +\n violations.map((v) => ` ${v.field}: ${v.reason}`).join(\"\\n\"));\n}\ninterface ComposeEffectiveResource {\n readonly name?: unknown;\n readonly external?: unknown;\n}\ninterface ComposeEffectiveModel {\n readonly services?: Readonly<Record<string, Readonly<Record<string, unknown>>>>;\n readonly networks?: Readonly<Record<string, ComposeEffectiveResource>>;\n readonly volumes?: Readonly<Record<string, ComposeEffectiveResource>>;\n readonly configs?: Readonly<Record<string, ComposeEffectiveResource>>;\n readonly secrets?: Readonly<Record<string, ComposeEffectiveResource>>;\n}\nconst COMPOSE_MANAGED_RESOURCE_KINDS = [\"networks\", \"volumes\", \"configs\", \"secrets\"] as const;\nfunction composeConfigRunner(composePath: string, env?: Readonly<globalThis.Record<string, string>>): (projectName: string) => Promise<ComposeCommandResult> {\n return (projectName) => runDockerCompose([\"-p\", projectName, \"-f\", composePath, \"config\", \"--format\", \"json\"], {\n cwd: dirname(composePath),\n env: { ...env, COMPOSE_PROJECT_NAME: projectName },\n allowNonZero: true,\n });\n}\n/**\n * 双哨兵有效模型校验(case.md 黑名单):\n * - 任一有效模型的 `services.*.container_name` 拒绝(绕开受管 project namespace);\n * - networks/volumes/configs/secrets 的 key 与 external 标记在两个哨兵模型间必须一致;\n * - 非 external 资源的有效名必须分别严格为 `<哨兵>_<logical-key>`——`${COMPOSE_PROJECT_NAME}_<key>`\n * 自然通过,写死全局名或写死某一个哨兵名会在另一模型失败;\n * - `external: true` 的资源保留外部名,接受。\n * 模型只在内存解码;config 失败只报安全阶段与 exit code,绝不带 stdout/stderr/模型原文。\n */\nasync function assertComposeEffectiveModelSecurity(opts: {\n readonly composePath: string;\n readonly env?: Readonly<globalThis.Record<string, string>>;\n readonly runComposeConfig?: (projectName: string) => Promise<ComposeCommandResult>;\n}): Promise<void> {\n const runConfig = opts.runComposeConfig ?? composeConfigRunner(opts.composePath, opts.env);\n const models = new Map<string, ComposeEffectiveModel>();\n for (const project of COMPOSE_PLAN_SENTINEL_PROJECTS) {\n let result: ComposeCommandResult;\n try {\n result = await runConfig(project);\n }\n catch {\n throw new Error(`Compose security validation failed at effective-model resolution for project ${project}; refused to plan without a valid model.`);\n }\n if (result.exitCode !== 0) {\n throw new Error(`Compose security validation failed at effective-model resolution for project ${project} ` +\n `(docker compose config exited ${result.exitCode}); refused to plan without a valid model.`);\n }\n let model: unknown;\n try {\n model = JSON.parse(result.stdout);\n }\n catch {\n throw new Error(`Compose security validation failed at effective-model decoding for project ${project}; refused to plan without a valid model.`);\n }\n if (model === null || typeof model !== \"object\" || Array.isArray(model)) {\n throw new Error(`Compose security validation failed at effective-model decoding for project ${project}; refused to plan without a valid model.`);\n }\n models.set(project, model as ComposeEffectiveModel);\n }\n const [sentinelA, sentinelB] = COMPOSE_PLAN_SENTINEL_PROJECTS as readonly [\n string,\n string\n ];\n const modelA = models.get(sentinelA)!;\n const modelB = models.get(sentinelB)!;\n const violations: ComposeSecurityViolation[] = [];\n for (const model of models.values()) {\n for (const [name, svc] of Object.entries(model.services ?? {})) {\n if (svc === null || typeof svc !== \"object\")\n continue;\n if (typeof svc.container_name === \"string\") {\n violations.push({\n field: `services.${name}.container_name`,\n reason: \"fixes the container name outside the managed Compose project namespace; concurrent cases would collide on the same host resource\",\n });\n }\n }\n }\n for (const kind of COMPOSE_MANAGED_RESOURCE_KINDS) {\n const resourcesA = modelA[kind] ?? {};\n const resourcesB = modelB[kind] ?? {};\n const keysA = Object.keys(resourcesA).sort();\n const keysB = Object.keys(resourcesB).sort();\n if (keysA.join(\"\\u0000\") !== keysB.join(\"\\u0000\")) {\n const differing = keysA.find((k) => !keysB.includes(k)) ?? keysB.find((k) => !keysA.includes(k)) ?? keysA[0] ?? keysB[0]!;\n violations.push({\n field: `${kind}.${differing}`,\n reason: `resource key set differs between the two sentinel project evaluations (${sentinelA}/${sentinelB}); the two models must be consistent`,\n });\n continue;\n }\n for (const key of keysA) {\n const resourceA = resourcesA[key];\n const resourceB = resourcesB[key];\n const externalA = resourceA?.external === true;\n const externalB = resourceB?.external === true;\n if (externalA !== externalB) {\n violations.push({\n field: `${kind}.${key}`,\n reason: `external marker differs between the two sentinel project evaluations (${sentinelA}/${sentinelB}); the two models must be consistent`,\n });\n continue;\n }\n if (externalA)\n continue;\n const nameA = typeof resourceA?.name === \"string\" ? resourceA.name : undefined;\n const nameB = typeof resourceB?.name === \"string\" ? resourceB.name : undefined;\n if (nameA !== `${sentinelA}_${key}` || nameB !== `${sentinelB}_${key}`) {\n violations.push({\n field: `${kind}.${key}.name`,\n reason: `does not track the Compose project namespace (expected ${sentinelA}_${key} / ${sentinelB}_${key} across sentinel projects); ` +\n \"declare it external or derive the name from ${COMPOSE_PROJECT_NAME}_<key>\",\n });\n }\n }\n }\n if (violations.length === 0)\n return;\n const unique = [...new Map(violations.map((v) => [v.field, v])).values()];\n throw new Error(`Compose security validation rejected ${unique.length} declaration(s) that escape the managed Compose project namespace:\\n` +\n unique.map((v) => ` ${v.field}: ${v.reason}`).join(\"\\n\"));\n}\n// ---------------------------------------------------------------------------\n// 泄题门:build contexts + 相对 bind mounts\n// ---------------------------------------------------------------------------\nexport function leakGateHintsFromInspection(inspection: ComposeInspection, opts: {\n readonly composeDir: string;\n readonly mainService: string;\n}): LeakGateHints {\n const buildContexts: BuildContextSpec[] = [];\n const bindMounts: BindMountSpec[] = [];\n for (const svc of inspection.services) {\n if (svc.build !== undefined) {\n const contextDir = resolvePath(opts.composeDir, svc.build.context);\n buildContexts.push({\n contextDir,\n label: `compose service ${svc.name}`,\n ...(svc.build.dockerfile !== undefined && isAbsolute(svc.build.dockerfile)\n ? { dockerignorePath: undefined }\n : {}),\n });\n }\n for (const vol of svc.volumes) {\n const source = relativeBindSource(vol, opts.composeDir);\n if (source === undefined)\n continue;\n const agentReachable = svc.name === opts.mainService;\n bindMounts.push({\n source,\n phase: \"any\",\n agentReachable,\n label: `compose service ${svc.name} volume`,\n });\n }\n }\n return {\n buildContexts,\n ...(bindMounts.length > 0 ? { bindMounts } : {}),\n };\n}\n/** 读 Compose 文件并产出泄题门 hints(供 discover / prepare 挂 attachLeakGateHints)。 */\nexport function leakGateHintsFromComposeFile(file: string | URL, opts: {\n readonly mainService: string;\n readonly baseDir?: string;\n}): Effect.Effect<{\n hints: LeakGateHints;\n inspection: ComposeInspection;\n composePath: string;\n}, ComposeBuildCollectionError> {\n return Effect.gen(function* () {\n const composePath = resolveComposeFile(file, opts.baseDir);\n const raw = yield* Effect.tryPromise({\n try: () => readFile(composePath, \"utf-8\"),\n catch: (cause) => composeCollectionError(\"read\", cause),\n });\n const inspection = yield* Effect.try({\n try: () => inspectComposeYaml(raw),\n catch: (cause) => composeCollectionError(\"configuration\", cause),\n });\n if (!inspection.services.some((service) => service.name === opts.mainService)) {\n return yield* Effect.fail(new ComposeBuildCollectionError({\n stage: \"configuration\",\n message: `Compose file ${composePath} has no service ${JSON.stringify(opts.mainService)} (mainService)`,\n }));\n }\n const hints = yield* Effect.try({\n try: () => {\n assertComposeBlacklist(inspection, { mainService: opts.mainService });\n return leakGateHintsFromInspection(inspection, {\n composeDir: dirname(composePath),\n mainService: opts.mainService,\n });\n },\n catch: (cause) => composeCollectionError(\"configuration\", cause),\n });\n return { hints, inspection, composePath };\n });\n}\nfunction relativeBindSource(vol: string, composeDir: string): string | undefined {\n // 短语法: ./foo:/app/foo[:ro] 或 foo:/bar(命名卷跳过)\n const short = vol.match(/^([^:]+):([^:]+)(?::([^:]+))?$/);\n if (short) {\n const src = short[1]!;\n if (src.startsWith(\".\") || src.startsWith(\"/\")) {\n return resolvePath(composeDir, src);\n }\n // 命名卷 / 变量插值宿主机路径:变量在发现期可能未展开;含 `$` 的跳过 bind 检查\n if (src.includes(\"$\"))\n return undefined;\n // 无路径分隔的名字 = named volume\n if (!src.includes(\"/\") && !src.includes(\"\\\\\"))\n return undefined;\n return resolvePath(composeDir, src);\n }\n return undefined;\n}\nfunction resolveComposeFile(file: string | URL, baseDir?: string): string {\n if (typeof file !== \"string\")\n return fileURLToPath(file);\n if (isAbsolute(file))\n return file;\n return resolvePath(baseDir ?? process.cwd(), file);\n}\n// ---------------------------------------------------------------------------\n// BuildKey 收集 + SandboxBuildProvider\n// ---------------------------------------------------------------------------\nexport interface ComposeBuildCollection {\n readonly buildKeys: readonly BuildKey[];\n readonly works: readonly SandboxBuildWork[];\n readonly leakHints: LeakGateHints;\n readonly composeBytes: string;\n readonly composePath: string;\n readonly inspection: ComposeInspection;\n /** service → 解析中的 image 引用(无 build 的服务);digest 留给协调器/物化期填写。 */\n readonly imageRefs: Readonly<globalThis.Record<string, string>>;\n /** 本次进 BuildKey 的目标平台;构建执行拿同一个值。 */\n readonly platform: string;\n /** 兼容旧 provider identity 的 inert fingerprint marker;不参与 carry gate。 */\n readonly providerIdentityMarker?: JsonValue;\n readonly bindMountDigests: Readonly<globalThis.Record<string, string>>;\n readonly configContents: Readonly<globalThis.Record<string, string>>;\n}\n/** physical planner 与 build collector 共用的安全 Case 输入投影。 */\nexport function composeCollectionIdentity(collection: ComposeBuildCollection): JsonValue {\n return {\n composeDigest: digestOf(collection.composeBytes),\n buildKeys: [...collection.buildKeys].sort(),\n imageRefs: collection.imageRefs,\n bindMountDigests: collection.bindMountDigests,\n configContents: collection.configContents,\n };\n}\ninterface ComposeBuildCollectionOptions {\n readonly file: string | URL;\n readonly mainService: string;\n readonly baseDir?: string;\n /** 显式指定目标平台;省略时从构建执行环境探测。 */\n readonly platform?: string;\n readonly env?: Readonly<globalThis.Record<string, string>>;\n /** 注入平台探测通道(测试用)。 */\n readonly platformProbe?: () => Promise<string | undefined>;\n}\n/** 从 Compose 声明收集 BuildKey 与协调器 works(仅有 `build:` 的服务)。 */\nexport function collectComposeBuilds(opts: ComposeBuildCollectionOptions): Effect.Effect<ComposeBuildCollection, ComposeBuildCollectionError> {\n return collectComposeBuildsInternal(opts);\n}\n/** @internal 单测注入有效模型求值通道;不从 `niceeval/sandbox` 对外导出。 */\nexport function collectComposeBuildsForTest(opts: ComposeBuildCollectionOptions, runComposeConfig: (projectName: string) => Promise<ComposeCommandResult>): Effect.Effect<ComposeBuildCollection, ComposeBuildCollectionError> {\n return collectComposeBuildsInternal(opts, runComposeConfig);\n}\nfunction collectComposeBuildsInternal(opts: ComposeBuildCollectionOptions, runComposeConfig?: (projectName: string) => Promise<ComposeCommandResult>): Effect.Effect<ComposeBuildCollection, ComposeBuildCollectionError> {\n return Effect.gen(function* () {\n const { hints, inspection, composePath } = yield* leakGateHintsFromComposeFile(opts.file, {\n mainService: opts.mainService,\n baseDir: opts.baseDir,\n });\n // physical planning 安全门:合成声明 + 双哨兵有效模型,早于 BuildKey 收集与任何携带决策。\n const raw = yield* Effect.tryPromise({\n try: () => readFile(composePath, \"utf-8\"),\n catch: (cause) => composeCollectionError(\"read\", cause),\n });\n yield* Effect.try({\n try: () => assertComposeSyntheticScope(raw),\n catch: (cause) => composeCollectionError(\"security\", cause),\n });\n yield* Effect.tryPromise({\n try: () => assertComposeEffectiveModelSecurity({\n composePath,\n env: opts.env,\n runComposeConfig,\n }),\n catch: (cause) => composeCollectionError(\"security\", cause),\n });\n const composeBytes = inspection.raw;\n const composeDir = dirname(composePath);\n // 目标平台是构建事实:硬编码一个默认值会让 arm64 宿主构出 arm64 镜像却按 amd64 记身份\n // (台账见 memory/buildkey-platform-declared-not-enforced.md)。\n const platform = opts.platform\n ? normalizeBuildPlatform(opts.platform)\n : yield* Effect.tryPromise({\n try: () => detectDockerBuildPlatform(opts.platformProbe ? { probe: opts.platformProbe } : undefined),\n catch: (cause) => composeCollectionError(\"identity\", cause),\n });\n const works: SandboxBuildWork[] = [];\n const buildKeys: BuildKey[] = [];\n const imageRefs: globalThis.Record<string, string> = {};\n let providerIdentityMarker: JsonValue | undefined;\n const bindMountDigests: globalThis.Record<string, string> = {};\n yield* Effect.forEach(hints.bindMounts ?? [], (mount) => pathContentDigest(mount.source).pipe(Effect.mapError((cause) => composeCollectionError(\"identity\", cause)), Effect.tap((digest) => Effect.sync(() => {\n const key = `${mount.label ?? \"bind mount\"}:${relativeIdentityPath(composeDir, mount.source)}`;\n bindMountDigests[key] = digest;\n })), Effect.asVoid), { concurrency: 1, discard: true });\n const configContents: globalThis.Record<string, string> = {};\n yield* Effect.forEach(inspection.localFiles, (ref) => {\n const absolute = resolvePath(composeDir, ref.path);\n return pathContentDigest(absolute).pipe(Effect.mapError((cause) => composeCollectionError(\"identity\", cause)), Effect.tap((digest) => Effect.sync(() => {\n const key = `${ref.kind}:${ref.label}:${relativeIdentityPath(composeDir, absolute)}`;\n configContents[key] = digest;\n })), Effect.asVoid);\n }, { concurrency: 1, discard: true });\n yield* Effect.forEach(inspection.services, (service) => Effect.gen(function* () {\n if (service.image !== undefined && service.build === undefined) {\n yield* Effect.sync(() => {\n imageRefs[service.name] = service.image!;\n if (!looksLikeDigestRef(service.image!)) {\n providerIdentityMarker = unresolvedProviderFingerprintMarker(\"sandbox.image-unresolved\", \"Compose references an image or FROM base that is not pinned to a sha256 digest.\");\n }\n });\n return;\n }\n const build = service.build;\n if (build === undefined)\n return;\n const contextDir = resolvePath(composeDir, build.context);\n const dockerfilePath = resolvePath(contextDir, build.dockerfile ?? \"Dockerfile\");\n const dockerfile = yield* Effect.tryPromise({\n try: () => readFile(dockerfilePath, \"utf-8\"),\n catch: () => new ComposeBuildCollectionError({\n stage: \"read\",\n message: `Compose service ${JSON.stringify(service.name)} build Dockerfile not found at ${dockerfilePath}`,\n }),\n });\n // Compose 声明的平台压过探测默认值:service `platform` 或单元素 `build.platforms` 是\n // 显式构建目标,必须逐服务进各自 BuildKey,否则声明不同平台的两个 case 会共用同一身份。\n const declaredPlatforms = build.platforms;\n if (declaredPlatforms !== undefined && declaredPlatforms.length > 1) {\n return yield* Effect.fail(new ComposeBuildCollectionError({\n stage: \"configuration\",\n message: `Compose service ${JSON.stringify(service.name)} declares build.platforms with ${declaredPlatforms.length} entries; ` +\n `NiceEval builds exactly one platform per BuildKey — keep a single entry (or the service-level platform) ` +\n `and do multi-platform publishing outside the task Compose`,\n }));\n }\n const declaredPlatform = declaredPlatforms?.[0] ?? service.platform;\n const workPlatform = declaredPlatform !== undefined ? normalizeBuildPlatform(declaredPlatform) : platform;\n const { contextDigest, contextFilterRules } = yield* buildContextIdentityContribution({\n contextDir,\n label: `compose service ${service.name}`,\n }).pipe(Effect.mapError((cause) => composeCollectionError(\"identity\", cause)));\n const collected = yield* Effect.try({\n try: () => {\n const base = dockerfileBaseIdentity(dockerfile, build.target);\n const buildKey = computeBuildKey({\n builderKind: BUILDER_KIND,\n builderRevision: COMPOSE_MATERIALIZER_REVISION,\n platform: workPlatform,\n dockerfile,\n contextDigest,\n fromDigest: base.fromDigest,\n contextFilterRules,\n ...(build.args !== undefined ? { buildArgs: build.args } : {}),\n ...(build.target !== undefined ? { target: build.target } : {}),\n });\n return { buildKey, base };\n },\n catch: (cause) => composeCollectionError(\"identity\", cause),\n });\n yield* Effect.sync(() => {\n if (collected.base.providerIdentityMarker !== undefined) {\n providerIdentityMarker = unresolvedProviderFingerprintMarker(\"sandbox.image-unresolved\", \"Compose references an image or FROM base that is not pinned to a sha256 digest.\");\n }\n buildKeys.push(collected.buildKey);\n works.push({\n buildKey: collected.buildKey,\n provider: \"docker\",\n label: `compose:${service.name}`,\n inputs: {\n service: service.name,\n composeFile: composePath,\n // 进 BuildKey 的那个平台原样交给构建执行,provenance 里也留下这次构出的是哪种架构。\n platform: workPlatform,\n context: build.context,\n ...(build.dockerfile !== undefined ? { dockerfile: build.dockerfile } : {}),\n ...(build.args !== undefined ? { args: build.args } : {}),\n ...(build.target !== undefined ? { target: build.target } : {}),\n // 每条 work 自带插值 env:Run 级 provider 不得共用「最后一个 eval」的 env/baseDir。\n ...(opts.env !== undefined\n ? { composeEnv: opts.env, envNames: Object.keys(opts.env).sort() }\n : {}),\n contextFilterRules,\n },\n });\n });\n }), { concurrency: 1, discard: true });\n return {\n buildKeys,\n works,\n leakHints: hints,\n composeBytes,\n composePath,\n inspection,\n imageRefs,\n platform,\n ...(providerIdentityMarker === undefined ? {} : { providerIdentityMarker }),\n bindMountDigests,\n configContents,\n };\n });\n}\nfunction relativeIdentityPath(baseDir: string, path: string): string {\n const relative = relativePath(baseDir, path).split(sep).join(\"/\");\n return relative === \"\" ? \".\" : relative;\n}\n/**\n * Compose build 作为 SandboxBuildProvider:cache 查本地镜像 tag,miss 时 `docker compose build`。\n * works.inputs 需含 composeFile + service。\n */\nexport function dockerComposeBuildProvider(opts?: {\n readonly baseDir?: string;\n readonly env?: Readonly<globalThis.Record<string, string>>;\n /** 注入 compose CLI(测试用)。 */\n readonly runCompose?: typeof runDockerCompose;\n}): SandboxBuildProvider {\n const runCompose = opts?.runCompose ?? runDockerCompose;\n return {\n async lookup(work) {\n const tag = composeBuildTag(work.buildKey);\n const hit = await dockerImageExists(tag);\n return hit ? tag : undefined;\n },\n async build(work, ctx) {\n const inputs = work.inputs as globalThis.Record<string, unknown>;\n const composeFile = String(inputs.composeFile ?? \"\");\n const service = String(inputs.service ?? \"\");\n if (!composeFile || !service) {\n throw new Error(`compose build work ${work.buildKey.slice(0, 12)}… missing composeFile/service in inputs`);\n }\n const composeEnv = inputs.composeEnv !== undefined &&\n typeof inputs.composeEnv === \"object\" &&\n inputs.composeEnv !== null &&\n !Array.isArray(inputs.composeEnv)\n ? (inputs.composeEnv as Readonly<globalThis.Record<string, string>>)\n : opts?.env;\n // cwd 必须跟 compose 文件走,不能用 Run 级「最后一个 eval」的 baseDir。\n const cwd = dirname(composeFile);\n const tag = composeBuildTag(work.buildKey);\n // 平台传给 builder:BuildKey 里写的架构就是这次真正构出来的架构。\n const platform = typeof inputs.platform === \"string\" ? inputs.platform : undefined;\n const buildEnv = platform !== undefined ? { ...composeEnv, [DOCKER_PLATFORM_ENV]: platform } : composeEnv;\n await runCompose([\"-f\", composeFile, \"build\", \"--build-arg\", `NICEEVAL_BUILD_KEY=${work.buildKey}`, service], {\n cwd,\n env: buildEnv,\n signal: ctx.signal,\n timing: ctx,\n });\n // 构建产物以 service 镜像为准;再打 BuildKey tag 便于 lookup。\n const imageId = await composeServiceImageId(composeFile, service, cwd, composeEnv, runCompose);\n if (imageId)\n await dockerTag(imageId, tag);\n return tag;\n },\n };\n}\nfunction composeBuildTag(buildKey: BuildKey): string {\n return `niceeval-build:${buildKey.slice(0, 32)}`;\n}\n// ---------------------------------------------------------------------------\n// Overlay + materialize\n// ---------------------------------------------------------------------------\nexport interface ComposeOverlay {\n readonly yaml: string;\n readonly projectName: string;\n readonly overlayPath?: string;\n}\n/** 生成受管 overlay:labels / 可选 project 名。不改 dns、extra_hosts、volumes、depends_on。 */\nexport function buildComposeOverlay(opts: {\n readonly mainService: string;\n readonly evalId: string;\n readonly profile: string;\n readonly projectName?: string;\n readonly serviceNames: readonly string[];\n readonly managedWorkdir?: string;\n}): ComposeOverlay {\n const projectName = opts.projectName ??\n `ne-${slug(opts.evalId).slice(0, 24)}-${randomBytes(3).toString(\"hex\")}`;\n const lines: string[] = [\"services:\"];\n for (const name of opts.serviceNames) {\n lines.push(` ${name}:`);\n lines.push(` labels:`);\n lines.push(` niceeval.eval-id: ${JSON.stringify(opts.evalId)}`);\n lines.push(` niceeval.profile: ${JSON.stringify(opts.profile)}`);\n lines.push(` niceeval.case: \"compose\"`);\n lines.push(` niceeval.keep-candidate: \"true\"`);\n if (name === opts.mainService) {\n lines.push(` niceeval.main-service: \"true\"`);\n if (opts.managedWorkdir !== undefined) {\n lines.push(` working_dir: ${JSON.stringify(opts.managedWorkdir)}`);\n }\n }\n }\n return { yaml: `${lines.join(\"\\n\")}\\n`, projectName };\n}\n/**\n * 运行标识 overlay:把 `host` / `pid` / `startedAt` 打到本组的每个服务与每个受管网络上,\n * 让强杀后残留的整组资源(含主容器已消失、只剩网络的情形)能被孤儿核对认领\n * (契约见 docs/feature/sandbox/architecture.md「孤儿核对」)。\n *\n * 与受管 overlay 分成两份文件是因为它逐次运行都不同(pid、时刻),混进受管 overlay 会让\n * caseKey 每次都变、携带与缓存全部失效——caseKey 只按受管 overlay 的字节算。\n */\nexport function buildComposeIdentityOverlay(opts: {\n readonly identity: RunIdentity;\n readonly serviceNames: readonly string[];\n readonly networkNames: readonly string[];\n}): string {\n const labels = dockerRunIdentityLabels(opts.identity);\n const labelLines = (indent: string) => Object.entries(labels).map(([k, v]) => `${indent}${k}: ${JSON.stringify(v)}`);\n const lines: string[] = [];\n if (opts.serviceNames.length > 0) {\n lines.push(\"services:\");\n for (const name of opts.serviceNames) {\n lines.push(` ${name}:`, ` labels:`, ...labelLines(\" \"));\n }\n }\n if (opts.networkNames.length > 0) {\n lines.push(\"networks:\");\n for (const name of opts.networkNames) {\n lines.push(` ${name}:`, ` labels:`, ...labelLines(\" \"));\n }\n }\n return lines.length > 0 ? `${lines.join(\"\\n\")}\\n` : \"\";\n}\nexport interface MaterializeComposeOpts {\n readonly ctx: SandboxMaterializeContext;\n readonly timeout?: number;\n readonly feedback?: ScopedFeedback;\n readonly baseDir?: string;\n readonly platform?: string;\n /** Runner 持有的 provisioning 并发槽;退避期间临时归还,避免网络抖动拖住整批并发。 */\n readonly provisionSlot?: ProvisionSlot;\n /** Compose 资源组的最长物理寿命;附着的主 Sandbox 用同一完成态做复用确认。 */\n readonly lifetimeMs?: number;\n /** 测试可注入:跳过真实 docker compose,直接返回已构造的主 Sandbox。 */\n readonly _testHooks?: {\n readonly runCompose?: typeof runDockerCompose;\n readonly attachMain?: (containerId: string) => Promise<import(\"./types.ts\").Sandbox>;\n readonly resolveMainContainerId?: (projectName: string, mainService: string) => Promise<string>;\n };\n}\n/** ProviderModule 的 typed Compose 完成态;不从作者输入逆向重建计划。 */\nexport interface DockerComposeProviderMaterializationPlan {\n readonly evalId: string;\n readonly profile: string;\n readonly mainService: string;\n readonly user?: string;\n readonly env: Readonly<Record<string, string>>;\n readonly pathPrepend?: readonly string[];\n readonly projectName?: string;\n readonly collection: ComposeBuildCollection;\n readonly caseKey: import(\"./identity.ts\").CaseKey;\n readonly identity: JsonValue;\n}\nexport class ComposeMaterializationError extends Data.TaggedError(\"ComposeMaterializationError\")<{\n readonly projectName: string;\n readonly message: string;\n readonly cause?: Error;\n}> {\n}\nfunction composeMaterializationError(projectName: string, cause: unknown): ComposeMaterializationError {\n const error = cause instanceof Error ? cause : new Error(String(cause));\n return new ComposeMaterializationError({\n projectName,\n message: error.message,\n cause: error,\n });\n}\nexport function materializeDockerComposeProviderCase(plan: DockerComposeProviderMaterializationPlan, opts: MaterializeComposeOpts): Effect.Effect<MaterializedSandboxCase, ComposeMaterializationError, Scope.Scope> {\n const collection = plan.collection;\n const overlay = buildComposeOverlay({\n mainService: plan.mainService,\n evalId: plan.evalId,\n profile: plan.profile,\n ...(plan.projectName !== undefined ? { projectName: plan.projectName } : {}),\n serviceNames: collection.inspection.services.map((s) => s.name),\n });\n return Effect.gen(function* () {\n const overlayDir = yield* Effect.tryPromise({\n try: () => mkdtemp(join(tmpdir(), \"niceeval-compose-\")),\n catch: (cause) => composeMaterializationError(overlay.projectName, cause),\n });\n const overlayPath = join(overlayDir, \"niceeval.overlay.yaml\");\n yield* Effect.tryPromise({\n try: () => writeFile(overlayPath, overlay.yaml, \"utf-8\"),\n catch: (cause) => composeMaterializationError(overlay.projectName, cause),\n });\n const identityYaml = buildComposeIdentityOverlay({\n identity: currentRunIdentity(),\n serviceNames: collection.inspection.services.map((s) => s.name),\n networkNames: collection.inspection.networkNames,\n });\n const identityPath = join(overlayDir, \"niceeval.identity.yaml\");\n if (identityYaml !== \"\") {\n yield* Effect.tryPromise({\n try: () => writeFile(identityPath, identityYaml, \"utf-8\"),\n catch: (cause) => composeMaterializationError(overlay.projectName, cause),\n });\n }\n const composeFiles = identityYaml !== \"\" ? [collection.composePath, overlayPath, identityPath] : [collection.composePath, overlayPath];\n const cwd = dirname(collection.composePath);\n // 平台与 BuildKey 同源:物化期这次 compose build 构出的架构必须与身份里写的一致。\n const env = {\n ...process.env,\n ...plan.env,\n COMPOSE_PROJECT_NAME: overlay.projectName,\n [DOCKER_PLATFORM_ENV]: collection.platform,\n };\n const runCompose = opts._testHooks?.runCompose ?? runDockerCompose;\n // Attempt 的前向 signal 到这里往往已经 timeout/abort。收尾必须拿一条新的、独立且有界的\n // signal;复用 opts.ctx.signal 会让 runDockerCompose 在真正执行 down 前立刻抛错,整组资源\n // 原地变孤儿。--timeout 给服务 5s 优雅退出,剩余 1.5s 留给 CLI 与网络/volume 删除;\n // runDockerCompose 再给 TERM 1s KILL grace,总上界 7.5s,严格短于 runner 的 8s 看门狗。\n const composeDown = () => runCompose([\n \"-p\",\n overlay.projectName,\n ...composeFileArgs(composeFiles),\n \"down\",\n \"--timeout\",\n \"5\",\n \"--volumes\",\n \"--remove-orphans\",\n ], { cwd, env, signal: AbortSignal.timeout(COMPOSE_STOP_TIMEOUT_MS) });\n let finalized = false;\n let finalizing: Promise<void> | undefined;\n const finalizer = async () => {\n if (finalized)\n return;\n if (finalizing !== undefined)\n return finalizing;\n const pending = (async () => {\n await composeDown();\n finalized = true;\n await rm(overlayDir, { recursive: true, force: true }).catch(() => { });\n })();\n finalizing = pending;\n try {\n await pending;\n }\n finally {\n // 失败回 Open,保留 overlay 供 registry 强清路径重试;成功才永久封口。\n if (finalizing === pending)\n finalizing = undefined;\n }\n };\n // 清理失败只诊断、不覆盖原 Cause;finalizer 幂等,成功路径的 stop 与失败路径的 down 共用一份。\n const finalizerEffect = Effect.tryPromise({\n try: () => finalizer(),\n catch: (cause) => cause,\n }).pipe(Effect.catchAll((cleanupError) => Effect.sync(() => {\n opts.feedback?.diagnostic({\n code: \"sandbox-stop-failed\",\n level: \"warning\",\n message: `Compose project ${overlay.projectName} cleanup failed after materialization error: ` +\n `${cleanupError instanceof Error ? cleanupError.message : String(cleanupError)}. ` +\n \"Inspect with `niceeval sandbox list --orphans`; remove with `niceeval sandbox prune`.\",\n data: {\n provider: \"docker\",\n projectName: overlay.projectName,\n sandboxId: overlay.projectName,\n },\n dedupeKey: `sandbox-stop-failed:${overlay.projectName}`,\n });\n })));\n // 重试前对账先清半启动组:down 失败只诊断、继续重试,不覆盖原始 create 错误\n // (cleanup 失败不升格为 Cause;withProvisionRetry 的 reconcile 通道是 never 错误)。\n const composeDownReconcile = Effect.tryPromise({\n try: () => composeDown(),\n catch: (cause) => cause,\n }).pipe(Effect.asVoid);\n // 资源可能创建:先原子登记 best-effort finalizer。此后无论是中断还是失败,外层 Scope\n // 关闭都会执行 compose down;失败路径还会先显式跑一遍(幂等),保持「先 down 再采证」的顺序。\n yield* Effect.addFinalizer(() => finalizerEffect);\n const failEnriched = (cause: unknown): Effect.Effect<never, ComposeMaterializationError> => Effect.tryPromise({\n try: () => enrichComposeError(cause, overlay.projectName, composeFiles, cwd, env, runCompose),\n catch: (enrichCause) => enrichCause,\n }).pipe(Effect.matchEffect({\n onFailure: (enrichCause) => Effect.fail(composeMaterializationError(overlay.projectName, enrichCause)),\n onSuccess: (enriched) => Effect.fail(composeMaterializationError(overlay.projectName, enriched)),\n }));\n return yield* Effect.gen(function* () {\n if (opts.ctx.signal?.aborted)\n return yield* Effect.interrupt;\n // dockerode 是 optional peer:compose 实现在 materialize 热路径才加载 docker.ts。\n const { classifyProvisionError, DockerSandbox } = yield* Effect.tryPromise({\n try: () => __niceevalDynamicImport(\"./docker.cjs\"),\n catch: (cause) => cause,\n });\n // 构建:协调器 locator 命中时仍跑一次 compose build——BuildKit cache 很快,\n // 且把 BuildKey tag 对齐回本 eval 的 image: 插值名(避免多题共用 provider env 时串镜像)。\n const buildServices = collection.inspection.services.filter((s) => s.build !== undefined).map((s) => s.name);\n if (buildServices.length > 0) {\n yield* withProvisionRetry(Effect.tryPromise({\n try: () => runCompose([\"-p\", overlay.projectName, ...composeFileArgs(composeFiles), \"build\", ...buildServices], {\n cwd,\n env,\n signal: opts.ctx.signal,\n }),\n catch: (cause) => cause,\n }), classifyProvisionError, opts.provisionSlot, opts.feedback, \n // 构建产物没有计费实例泄漏面;同一 BuildKey 重建本身就是对账。\n Effect.void);\n }\n yield* withProvisionRetry(Effect.tryPromise({\n try: () => runCompose([\"-p\", overlay.projectName, ...composeFileArgs(composeFiles), \"up\", \"--detach\", \"--wait\", \"--remove-orphans\"], { cwd, env, signal: opts.ctx.signal }),\n catch: (cause) => cause,\n }), classifyProvisionError, opts.provisionSlot, opts.feedback, \n // projectName 与 overlay 在整个重试闭包内固定;先清掉半启动组,再收敛同一个 project。\n composeDownReconcile);\n const resolveId = opts._testHooks?.resolveMainContainerId ??\n ((project: string, service: string) => resolveComposeContainerId(project, service, composeFiles, cwd, env));\n const containerId = yield* Effect.tryPromise({\n try: () => resolveId(overlay.projectName, plan.mainService),\n catch: (cause) => cause,\n });\n const attach = opts._testHooks?.attachMain ??\n ((id: string) => DockerSandbox.attach(id, {\n timeout: opts.timeout,\n lifetimeMs: opts.lifetimeMs,\n feedback: opts.feedback,\n releaseMode: \"detach\",\n ...(plan.user !== undefined ? { user: plan.user } : {}),\n ...(plan.pathPrepend !== undefined ? { pathPrepend: plan.pathPrepend } : {}),\n }));\n const sandbox = yield* Effect.tryPromise({\n try: () => attach(containerId),\n catch: (cause) => cause,\n });\n const services = createComposeServiceController({\n projectName: overlay.projectName,\n composeFiles,\n cwd,\n env,\n runCompose,\n });\n const group: SandboxResourceGroup = {\n primary: { sandboxId: sandbox.sandboxId, provider: \"docker\" },\n resources: {\n kind: \"docker-compose\",\n projectName: overlay.projectName,\n composeFiles,\n mainService: plan.mainService,\n },\n stop: finalizer,\n entry: {\n provider: \"docker\",\n profile: plan.profile,\n primary: { sandboxId: sandbox.sandboxId, provider: \"docker\" },\n resources: {\n kind: \"docker-compose\",\n projectName: overlay.projectName,\n mainService: plan.mainService,\n },\n state: \"alive\",\n },\n };\n // 主 Sandbox.stop 走 detach;真正回收挂在 group.stop(= finalizer)。\n const originalStop = sandbox.stop.bind(sandbox);\n (sandbox as {\n stop: () => Promise<void>;\n }).stop = async () => {\n await originalStop();\n await finalizer();\n };\n const materialized: MaterializedSandboxCase = {\n sandbox,\n // 生产路径 attach 返回 raw DockerSandbox(自带 provider backend capabilities),直接作为\n // author backend;测试 hook 注入的普通 Sandbox 走 customSandboxBackend 显式适配,不回读\n // provider 私有成员。\n authorBackend: opts._testHooks?.attachMain === undefined\n ? (sandbox as DockerSandbox)\n : customSandboxBackend(sandbox),\n services,\n group,\n caseKind: \"compose\",\n caseKey: plan.caseKey,\n buildKeys: collection.buildKeys,\n identity: plan.identity,\n facts: {\n projectName: overlay.projectName,\n mainService: plan.mainService,\n composeFile: collection.composePath,\n containerId: sandbox.sandboxId,\n imageRefs: collection.imageRefs,\n },\n };\n return materialized;\n }).pipe(Effect.catchAll((cause) => Effect.gen(function* () {\n yield* finalizerEffect;\n if (isAbortError(cause) || opts.ctx.signal?.aborted)\n return yield* Effect.interrupt;\n return yield* failEnriched(cause);\n })));\n });\n}\nfunction composeFileArgs(files: readonly string[]): string[] {\n return files.flatMap((f) => [\"-f\", f]);\n}\nfunction createComposeServiceController(opts: {\n readonly projectName: string;\n readonly composeFiles: readonly string[];\n readonly cwd: string;\n readonly env: NodeJS.ProcessEnv;\n readonly runCompose: typeof runDockerCompose;\n}): ServiceController {\n const base = [\"-p\", opts.projectName, ...composeFileArgs(opts.composeFiles)];\n return {\n async exec(service, command) {\n const result = await opts.runCompose([...base, \"exec\", \"-T\", service, ...command], {\n cwd: opts.cwd,\n env: opts.env,\n });\n return { stdout: result.stdout, stderr: result.stderr, exitCode: result.exitCode };\n },\n async collectLogs(service) {\n const result = await opts.runCompose([...base, \"logs\", \"--no-color\", \"--no-log-prefix\", service], {\n cwd: opts.cwd,\n env: opts.env,\n allowNonZero: true,\n });\n return Buffer.from(`${result.stdout}${result.stderr}`);\n },\n async stop(service) {\n await opts.runCompose([...base, \"stop\", service], { cwd: opts.cwd, env: opts.env });\n },\n };\n}\nasync function enrichComposeError(e: unknown, projectName: string, composeFiles: readonly string[], cwd: string, env: NodeJS.ProcessEnv, runCompose: typeof runDockerCompose): Promise<never> {\n let evidence = \"\";\n try {\n const ps = await runCompose([\"-p\", projectName, ...composeFileArgs(composeFiles), \"ps\", \"-a\"], {\n cwd,\n env,\n allowNonZero: true,\n });\n const logs = await runCompose([\"-p\", projectName, ...composeFileArgs(composeFiles), \"logs\", \"--no-color\", \"--tail\", \"80\"], {\n cwd,\n env,\n allowNonZero: true,\n });\n evidence =\n `\\n--- compose ps ---\\n${ps.stdout || ps.stderr}` +\n `\\n--- compose logs (tail) ---\\n${logs.stdout || logs.stderr}`;\n }\n catch {\n // 采证失败不掩盖原错误\n }\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`Compose environment failed for project ${projectName}: ${msg}${evidence}`, {\n cause: e instanceof Error ? e : undefined,\n });\n}\n// ---------------------------------------------------------------------------\n// docker / compose CLI\n// ---------------------------------------------------------------------------\nexport interface ComposeCommandResult {\n readonly stdout: string;\n readonly stderr: string;\n readonly exitCode: number;\n}\nexport async function runDockerCompose(args: readonly string[], opts: {\n readonly cwd: string;\n readonly env?: NodeJS.ProcessEnv | Readonly<globalThis.Record<string, string>>;\n readonly signal?: AbortSignal;\n readonly allowNonZero?: boolean;\n readonly timing?: SandboxBuildExecutionContext;\n}): Promise<ComposeCommandResult> {\n if (opts.signal?.aborted)\n throw abortError(opts.signal);\n return new Promise((resolve, reject) => {\n const child = spawn(\"docker\", [\"compose\", ...args], {\n cwd: opts.cwd,\n // 必须叠在 process.env 上:协调器若只传 Compose 插值表,裸 env 会丢掉 PATH → spawn docker ENOENT。\n env: { ...process.env, ...(opts.env as NodeJS.ProcessEnv | undefined) },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n let stdout = \"\";\n let stderr = \"\";\n let settled = false;\n let aborting: Error | undefined;\n let killTimer: ReturnType<typeof setTimeout> | undefined;\n const cleanup = () => {\n opts.signal?.removeEventListener(\"abort\", onAbort);\n if (killTimer !== undefined)\n clearTimeout(killTimer);\n };\n const rejectOnce = (error: Error) => {\n if (settled)\n return;\n settled = true;\n cleanup();\n reject(error);\n };\n const resolveOnce = (result: ComposeCommandResult) => {\n if (settled)\n return;\n settled = true;\n cleanup();\n resolve(result);\n };\n child.stdout?.on(\"data\", (c: Buffer) => {\n stdout += c.toString();\n });\n child.stderr?.on(\"data\", (c: Buffer) => {\n stderr += c.toString();\n });\n const onAbort = () => {\n aborting = abortError(opts.signal);\n child.kill(\"SIGTERM\");\n // close 事件本身不是可靠边界:CLI 或子进程若卡死,最多再等这段 grace,然后 KILL 并\n // 主动 reject,不能依赖一个可能永远不来的 close。\n killTimer = setTimeout(() => {\n child.kill(\"SIGKILL\");\n rejectOnce(aborting ?? abortError(opts.signal));\n }, COMPOSE_ABORT_KILL_GRACE_MS);\n };\n opts.signal?.addEventListener(\"abort\", onAbort, { once: true });\n child.on(\"error\", (err) => {\n rejectOnce(err);\n });\n child.on(\"close\", (code) => {\n if (aborting !== undefined) {\n rejectOnce(aborting);\n return;\n }\n const exitCode = code ?? 1;\n if (exitCode !== 0 && !opts.allowNonZero) {\n rejectOnce(new Error(`docker compose ${args.join(\" \")} failed (exit ${exitCode}):\\n${stderr || stdout}`.trimEnd()));\n return;\n }\n resolveOnce({ stdout, stderr, exitCode });\n });\n if (opts.signal?.aborted)\n onAbort();\n });\n}\nasync function resolveComposeContainerId(projectName: string, service: string, composeFiles: readonly string[], cwd: string, env: NodeJS.ProcessEnv): Promise<string> {\n const result = await runDockerCompose([\"-p\", projectName, ...composeFileArgs(composeFiles), \"ps\", \"-q\", \"--status\", \"running\", service], { cwd, env, allowNonZero: true });\n const id = result.stdout.trim().split(/\\s+/)[0];\n if (!id) {\n throw new Error(`Compose project ${projectName} has no running container for mainService ${JSON.stringify(service)}`);\n }\n return id;\n}\nasync function composeServiceImageId(composeFile: string, service: string, cwd: string, env?: Readonly<globalThis.Record<string, string>>, runCompose: typeof runDockerCompose = runDockerCompose): Promise<string | undefined> {\n const result = await runCompose([\"-f\", composeFile, \"images\", \"-q\", service], {\n cwd,\n env: { ...process.env, ...env },\n allowNonZero: true,\n });\n const id = result.stdout.trim().split(/\\s+/)[0];\n return id || undefined;\n}\nasync function dockerImageExists(tag: string): Promise<boolean> {\n return new Promise((resolve) => {\n const child = spawn(\"docker\", [\"image\", \"inspect\", tag], { stdio: \"ignore\" });\n child.on(\"error\", () => resolve(false));\n child.on(\"close\", (code) => resolve(code === 0));\n });\n}\nasync function dockerTag(imageId: string, tag: string): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n const child = spawn(\"docker\", [\"tag\", imageId, tag], { stdio: \"ignore\" });\n child.on(\"error\", reject);\n child.on(\"close\", (code) => {\n if (code === 0)\n resolve();\n else\n reject(new Error(`docker tag ${imageId} ${tag} failed (exit ${code})`));\n });\n });\n}\nfunction slug(s: string): string {\n return s.replace(/[^a-zA-Z0-9]+/g, \"-\").replace(/^-|-$/g, \"\").toLowerCase() || \"eval\";\n}\nfunction abortError(signal?: AbortSignal, cause?: unknown): Error {\n const err = new Error(\"Compose operation aborted\");\n err.name = \"AbortError\";\n if (cause instanceof Error)\n (err as Error & {\n cause?: unknown;\n }).cause = cause;\n if (signal?.reason !== undefined)\n (err as Error & {\n cause?: unknown;\n }).cause ??= signal.reason;\n return err;\n}\nfunction isAbortError(e: unknown): boolean {\n return e instanceof Error && e.name === \"AbortError\";\n}\n// ---------------------------------------------------------------------------\n// 极简 YAML 映射解析(Compose 黑名单 / build / volumes 够用;不做完整 YAML 1.2)\n// ---------------------------------------------------------------------------\ntype YamlNode = null | boolean | number | string | YamlNode[] | {\n [k: string]: YamlNode;\n};\ntype ParseFrame = {\n kind: \"map\";\n indent: number;\n map: globalThis.Record<string, YamlNode>;\n} | {\n kind: \"seq\";\n indent: number;\n arr: YamlNode[];\n parentMap: globalThis.Record<string, YamlNode>;\n key: string;\n};\nfunction parseYamlMapping(text: string): globalThis.Record<string, YamlNode> {\n const lines = text.replace(/\\t/g, \" \").split(/\\r?\\n/);\n const root: globalThis.Record<string, YamlNode> = {};\n const stack: ParseFrame[] = [{ kind: \"map\", indent: -1, map: root }];\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]!;\n if (/^\\s*(#|$)/.test(line))\n continue;\n const indent = line.match(/^ */)?.[0].length ?? 0;\n const trimmed = line.slice(indent);\n while (stack.length > 1 && indent <= stack[stack.length - 1]!.indent)\n stack.pop();\n const frame = stack[stack.length - 1]!;\n if (trimmed.startsWith(\"- \")) {\n if (frame.kind !== \"seq\")\n continue;\n const itemText = trimmed.slice(2).trim();\n if (itemText.includes(\":\") && !/^['\"]/.test(itemText) && !itemText.startsWith(\"[\")) {\n // 体积条目里的 `./a:/b:ro` 含冒号但不是 map item——短语法 volume 当标量。\n const looksLikeVolume = /^[^:]+:[^:]+(?::[^:]+)?$/.test(itemText) && !/^\\w+:\\s/.test(itemText);\n if (looksLikeVolume || /^\\$\\{/.test(itemText) || itemText.includes(\"/\")) {\n frame.arr.push(parseScalar(itemText));\n }\n else {\n const itemMap: globalThis.Record<string, YamlNode> = {};\n const colon = itemText.indexOf(\":\");\n const k = itemText.slice(0, colon).trim();\n const v = itemText.slice(colon + 1).trim();\n itemMap[k] = v === \"\" ? {} : parseScalar(v);\n frame.arr.push(itemMap);\n stack.push({ kind: \"map\", indent, map: itemMap });\n }\n }\n else {\n frame.arr.push(parseScalar(itemText));\n }\n continue;\n }\n const colon = trimmed.indexOf(\":\");\n if (colon < 0)\n continue;\n const key = trimmed.slice(0, colon).trim();\n const rest = trimmed.slice(colon + 1).trim();\n const mapFrame = frame.kind === \"map\"\n ? frame\n : (() => {\n // 序列项内的嵌套 key:切回最近 map\n for (let s = stack.length - 1; s >= 0; s--) {\n if (stack[s]!.kind === \"map\")\n return stack[s] as Extract<ParseFrame, {\n kind: \"map\";\n }>;\n }\n return undefined;\n })();\n if (mapFrame === undefined)\n continue;\n if (rest === \"\" || rest === \"|\" || rest === \">\" || rest === \">-\" || rest === \"|-\") {\n const next = peekNextContent(lines, i + 1);\n if (next && next.trimmed.startsWith(\"- \") && next.indent > indent) {\n const arr: YamlNode[] = [];\n mapFrame.map[key] = arr;\n stack.push({ kind: \"seq\", indent, arr, parentMap: mapFrame.map, key });\n }\n else {\n const child: globalThis.Record<string, YamlNode> = {};\n mapFrame.map[key] = child;\n stack.push({ kind: \"map\", indent, map: child });\n }\n }\n else {\n mapFrame.map[key] = parseScalar(rest);\n }\n }\n return root;\n}\nfunction peekNextContent(lines: string[], from: number): {\n indent: number;\n trimmed: string;\n} | undefined {\n for (let i = from; i < lines.length; i++) {\n const line = lines[i]!;\n if (/^\\s*(#|$)/.test(line))\n continue;\n const indent = line.match(/^ */)?.[0].length ?? 0;\n return { indent, trimmed: line.slice(indent) };\n }\n return undefined;\n}\nfunction parseScalar(text: string): YamlNode {\n if (text === \"null\" || text === \"~\")\n return null;\n if (text === \"true\")\n return true;\n if (text === \"false\")\n return false;\n if (/^-?\\d+(\\.\\d+)?$/.test(text))\n return Number(text);\n if ((text.startsWith('\"') && text.endsWith('\"')) ||\n (text.startsWith(\"'\") && text.endsWith(\"'\"))) {\n return text.slice(1, -1);\n }\n // 内联序列: [ \"a\", \"b\" ]\n if (text.startsWith(\"[\") && text.endsWith(\"]\")) {\n const inner = text.slice(1, -1).trim();\n if (inner === \"\")\n return [];\n return inner.split(\",\").map((p) => parseScalar(p.trim()));\n }\n return text;\n}\nexport type { JsonValue };\n"]}
1
+ {"version":3,"file":"compose.js","sourceRoot":"","sources":["compose.ts"],"names":[],"mappings":";;;AAyDA,wDAUC;AAOD,8DAeC;AAwDD,gDAyCC;AA6HD,wEAsCC;AACD,wDAWC;AA8LD,kEAkCC;AAED,oEAoCC;AA8CD,8DAQC;AAYD,oDAEC;AAED,kEAEC;AAqKD,gEAyDC;AAaD,kDA0BC;AASD,kEAqBC;AA6CD,oFAkOC;AAkED,4CA2EC;AAt3CD,qFAAqF;AACrF,0DAA0D;AAC1D,0DAA0D;AAC1D,0DAA0D;AAC1D,6CAA0C;AAC1C,2DAA2C;AAC3C,+CAAoE;AACpE,qCAAiC;AACjC,yCAA6G;AAC7G,uCAAyC;AACzC,mCAAkD;AAClD,+BAAqC;AAErC,yDAAkL;AAClL,iEAAuK;AAEvK,+CAAmI;AACnI,uDAAkG;AAClG,yCAAoE;AAGpE,6CAAiF;AAEjF,qEAAkE;AAClE;;;;GAIG;AACU,QAAA,6BAA6B,GAAG,kBAAkB,CAAC;AAChE,MAAM,YAAY,GAAG,gBAAgB,CAAC;AACtC;;;GAGG;AACH,MAAM,8BAA8B,GAAG,CAAC,iBAAiB,EAAE,iBAAiB,CAAU,CAAC;AACvF,uEAAuE;AACvE,MAAM,uBAAuB,GAAG,IAAI,CAAC;AACrC,6CAA6C;AAC7C,MAAM,2BAA2B,GAAG,IAAI,CAAC;AACzC,MAAa,2BAA4B,SAAQ,aAAI,CAAC,WAAW,CAAC,6BAA6B,CAG7F;CACD;AAJD,kEAIC;AACD,SAAS,sBAAsB,CAAC,KAA2C,EAAE,KAAc;IACvF,OAAO,IAAI,2BAA2B,CAAC;QACnC,KAAK;QACL,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;KAClE,CAAC,CAAC;AACP,CAAC;AACD,8EAA8E;AAC9E,yCAAyC;AACzC,8EAA8E;AAC9E,2CAA2C;AAC3C,MAAM,mBAAmB,GAAG,yBAAyB,CAAC;AACtD,0EAA0E;AAC1E,SAAgB,sBAAsB,CAAC,KAAa;IAChD,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC/D,MAAM,EAAE,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;IAC9C,MAAM,IAAI,GAAG,OAAO,IAAI,KAAK,IAAI,EAAE,CAAC;IACpC,MAAM,cAAc,GAAG,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,OAAO;QAC1E,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,OAAO;YACpC,CAAC,CAAC,OAAO;YACT,CAAC,CAAC,IAAI,CAAC;IACf,OAAO,GAAG,EAAE,IAAI,cAAc,EAAE,CAAC;AACrC,CAAC;AACD,IAAI,mBAAgD,CAAC;AACrD;;;;GAIG;AACI,KAAK,UAAU,yBAAyB,CAAC,IAI/C;IACG,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC;IACrC,MAAM,MAAM,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACxC,IAAI,MAAM;QACN,OAAO,sBAAsB,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAClC,OAAO,sBAAsB,CAAC,MAAM,IAAI,iBAAiB,EAAE,CAAC,CAAC;IACjE,CAAC;IACD,mBAAmB,KAAK,yBAAyB,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,sBAAsB,CAAC,MAAM,IAAI,iBAAiB,EAAE,CAAC,CAAC,CAAC;IAC5H,OAAO,mBAAmB,CAAC;AAC/B,CAAC;AACD,SAAS,iBAAiB;IACtB,OAAO,SAAS,OAAO,CAAC,IAAI,EAAE,CAAC;AACnC,CAAC;AACD,SAAS,yBAAyB;IAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAAA,0BAAK,EAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,iCAAiC,CAAC,EAAE;YACtF,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACtC,CAAC,CAAC;QACH,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;YACnC,GAAG,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC5C,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACvB,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AAoCD,8DAA8D;AAC9D,SAAgB,kBAAkB,CAAC,GAAW;IAC1C,MAAM,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAClC,MAAM,YAAY,GAAG,GAAG,CAAC,QAAQ,CAAC;IAClC,IAAI,YAAY,KAAK,SAAS,IAAI,YAAY,KAAK,IAAI,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QACzH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC;IACxF,CAAC;IACD,MAAM,QAAQ,GAA+B,EAAE,CAAC;IAChD,MAAM,UAAU,GAA0B,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAClE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAkD,CAAC,EAAE,CAAC;QAC7F,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YACrC,SAAS;QACb,CAAC;QACD,MAAM,GAAG,GAAG,KAA2C,CAAC;QACxD,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/C,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,WAAW,IAAI,WAAW,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC;YACV,IAAI;YACJ,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,KAAK,CAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjF,GAAG,CAAC,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,GAAG,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9D,GAAG,CAAC,OAAO,GAAG,CAAC,YAAY,KAAK,QAAQ;gBACpC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,YAAY,EAAE;gBACnC,CAAC,CAAC,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ;oBACjC,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,CAAC,WAAW,EAAE;oBAClC,CAAC,CAAC,EAAE,CAAC;YACb,GAAG,CAAC,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ;gBACnC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,WAAW,EAAE;gBACjC,CAAC,CAAC,OAAO,GAAG,CAAC,UAAU,KAAK,QAAQ;oBAChC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE;oBAChC,CAAC,CAAC,EAAE,CAAC;YACb,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC;SACtC,CAAC,CAAC;IACP,CAAC;IACD,OAAO;QACH,QAAQ;QACR,YAAY,EAAE,mBAAmB,CAAC,GAAG,EAAE,YAAkD,CAAC;QAC1F,GAAG;QACH,UAAU;KACb,CAAC;AACN,CAAC;AACD,SAAS,kBAAkB,CAAC,GAAwC;IAChE,MAAM,IAAI,GAA0B,EAAE,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAU,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;QAC7B,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAChE,SAAS;QACb,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAA0C,CAAC,EAAE,CAAC;YACrF,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACnE,SAAS;YACb,MAAM,IAAI,GAAI,KAA4C,CAAC,IAAI,CAAC;YAChE,IAAI,OAAO,IAAI,KAAK,QAAQ;gBACxB,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QAClE,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AACD,SAAS,eAAe,CAAC,KAAc;IACnC,IAAI,OAAO,KAAK,KAAK,QAAQ;QACzB,OAAO,CAAC,KAAK,CAAC,CAAC;IACnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,OAAO,EAAE,CAAC;IACd,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ;YACzB,OAAO,CAAC,KAAK,CAAC,CAAC;QACnB,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACnE,OAAO,EAAE,CAAC;QACd,MAAM,IAAI,GAAI,KAA4C,CAAC,IAAI,CAAC;QAChE,OAAO,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;AACP,CAAC;AACD;;;;GAIG;AACH,SAAS,mBAAmB,CAAC,GAAwC,EAAE,YAAgD;IACnH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC;IACzB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACtF,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAyC,CAAC,EAAE,CAAC;YACpF,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACvE,MAAM,GAAG,GAAG,KAA2C,CAAC;gBACxD,IAAI,GAAG,CAAC,QAAQ,KAAK,IAAI,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM;oBAChD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC3B,CAAC;QACL,CAAC;IACL,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9C,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACnE,SAAS;QACb,MAAM,IAAI,GAAI,KAA4C,CAAC,QAAQ,CAAC;QACpE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,KAAK,MAAM,CAAC,IAAI,IAAI;gBAChB,IAAI,OAAO,CAAC,KAAK,QAAQ;oBACrB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;aACI,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAA0C,CAAC;gBACnE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;IACD,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1D,gDAAgD;IAChD,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAC3E,CAAC;AACD,SAAS,UAAU,CAAC,KAAc;IAC9B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACnE,OAAO,SAAS,CAAC;IACrB,MAAM,CAAC,GAAG,KAA2C,CAAC;IACtD,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAChE,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/E,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QACxC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;QAC/D,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QACxG,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAA0C,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClH,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO;QACH,OAAO;QACP,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,SAAS,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5E,CAAC;AACN,CAAC;AACD,SAAS,aAAa,CAAC,KAAc;IACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,OAAO,EAAE,CAAC;IACd,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5B,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChB,SAAS;QACb,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACvE,MAAM,CAAC,GAAG,KAA2C,CAAC;YACtD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACtG,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACtG,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACtD,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC;AAUD;;;;;GAKG;AACH,SAAgB,8BAA8B,CAAC,UAA6B,EAAE,IAG7E;IACG,MAAM,QAAQ,GAA8B,EAAE,CAAC;IAC/C,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACpC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAC5B,IAAI,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/B,QAAQ,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,GAAG,CAAC,IAAI;oBACjB,KAAK,EAAE,SAAS;oBAChB,KAAK,EAAE,GAAG;oBACV,MAAM,EAAE,4FAA4F;iBACvG,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QACD,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC;QAC7C,IAAI,MAAM,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,qBAAqB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACpF,QAAQ,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,GAAG,CAAC,IAAI;gBACjB,KAAK,EAAE,cAAc;gBACrB,KAAK,EAAE,GAAG,CAAC,WAAW;gBACtB,MAAM,EAAE,gIAAgI;aAC3I,CAAC,CAAC;QACP,CAAC;QACD,IAAI,MAAM;YACN,IAAI,CAAC,cAAc,KAAK,SAAS;YACjC,GAAG,CAAC,UAAU,KAAK,SAAS;YAC5B,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACvE,QAAQ,CAAC,IAAI,CAAC;gBACV,OAAO,EAAE,GAAG,CAAC,IAAI;gBACjB,KAAK,EAAE,aAAa;gBACpB,KAAK,EAAE,GAAG,CAAC,UAAU;gBACrB,MAAM,EAAE,0CAA0C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE;aAC1F,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AACD,SAAgB,sBAAsB,CAAC,UAA6B,EAAE,IAGrE;IACG,MAAM,QAAQ,GAAG,8BAA8B,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAClE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QACrB,OAAO;IACX,MAAM,IAAI,GAAG,QAAQ;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,MAAM,EAAE,CAAC;SAC1G,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,MAAM,IAAI,KAAK,CAAC,8BAA8B,QAAQ,CAAC,MAAM,mDAAmD,IAAI,EAAE,CAAC,CAAC;AAC5H,CAAC;AACD,SAAS,uBAAuB,CAAC,GAAW;IACxC,OAAO,0BAA0B,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,2BAA2B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzF,CAAC;AACD,SAAS,qBAAqB,CAAC,IAAY;IACvC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACpC,OAAO,CAAC,KAAK,MAAM,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACtE,CAAC;AACD,SAAS,aAAa,CAAC,CAAS;IAC5B,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;AACxC,CAAC;AAQD;;;;;;GAMG;AACH,SAAS,2BAA2B,CAAC,GAAW;IAC5C,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACD,IAAI,GAAG,IAAA,oBAAa,EAAC,GAAG,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;IACxD,CAAC;IACD,MAAM,CAAC;QACH,0DAA0D;QAC1D,IAAI,GAAG,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,UAAU,GAA+B,EAAE,CAAC;IAClD,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACpE,MAAM,IAAI,GAAG,IAAyC,CAAC;QACvD,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YACpB,UAAU,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,SAAS;gBAChB,MAAM,EAAE,wGAAwG;aACnH,CAAC,CAAC;QACP,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChF,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAA6C,CAAC,EAAE,CAAC;gBACtF,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;oBAC7D,SAAS;gBACb,MAAM,GAAG,GAAI,GAAyC,CAAC,OAAO,CAAC;gBAC/D,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;oBAC7D,SAAS;gBACb,IAAI,CAAC,CAAC,MAAM,IAAK,GAAyC,CAAC;oBACvD,SAAS;gBACb,UAAU,CAAC,IAAI,CAAC;oBACZ,KAAK,EAAE,YAAY,IAAI,eAAe;oBACtC,MAAM,EAAE,mIAAmI;iBAC9I,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QACvB,OAAO;IACX,MAAM,IAAI,KAAK,CAAC,wCAAwC,UAAU,CAAC,MAAM,oBAAoB;QACzF,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACvE,CAAC;AAYD,MAAM,8BAA8B,GAAG,CAAC,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAU,CAAC;AAC9F,SAAS,mBAAmB,CAAC,WAAmB,EAAE,GAAiD;IAC/F,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE;QAC3G,GAAG,EAAE,IAAA,mBAAO,EAAC,WAAW,CAAC;QACzB,GAAG,EAAE,EAAE,GAAG,GAAG,EAAE,oBAAoB,EAAE,WAAW,EAAE;QAClD,YAAY,EAAE,IAAI;KACrB,CAAC,CAAC;AACP,CAAC;AACD;;;;;;;;GAQG;AACH,KAAK,UAAU,mCAAmC,CAAC,IAIlD;IACG,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,IAAI,mBAAmB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3F,MAAM,MAAM,GAAG,IAAI,GAAG,EAAiC,CAAC;IACxD,KAAK,MAAM,OAAO,IAAI,8BAA8B,EAAE,CAAC;QACnD,IAAI,MAA4B,CAAC;QACjC,IAAI,CAAC;YACD,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,CAAC;YACH,MAAM,IAAI,KAAK,CAAC,gFAAgF,OAAO,0CAA0C,CAAC,CAAC;QACvJ,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,gFAAgF,OAAO,GAAG;gBACtG,iCAAiC,MAAM,CAAC,QAAQ,2CAA2C,CAAC,CAAC;QACrG,CAAC;QACD,IAAI,KAAc,CAAC;QACnB,IAAI,CAAC;YACD,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QACD,MAAM,CAAC;YACH,MAAM,IAAI,KAAK,CAAC,8EAA8E,OAAO,0CAA0C,CAAC,CAAC;QACrJ,CAAC;QACD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,KAAK,CAAC,8EAA8E,OAAO,0CAA0C,CAAC,CAAC;QACrJ,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAA8B,CAAC,CAAC;IACxD,CAAC;IACD,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,GAAG,8BAG9B,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;IACtC,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAE,CAAC;IACtC,MAAM,UAAU,GAA+B,EAAE,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;QAClC,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;YAC7D,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;gBACvC,SAAS;YACb,IAAI,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ,EAAE,CAAC;gBACzC,UAAU,CAAC,IAAI,CAAC;oBACZ,KAAK,EAAE,YAAY,IAAI,iBAAiB;oBACxC,MAAM,EAAE,kIAAkI;iBAC7I,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,8BAA8B,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAChD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC;YAC1H,UAAU,CAAC,IAAI,CAAC;gBACZ,KAAK,EAAE,GAAG,IAAI,IAAI,SAAS,EAAE;gBAC7B,MAAM,EAAE,0EAA0E,SAAS,IAAI,SAAS,sCAAsC;aACjJ,CAAC,CAAC;YACH,SAAS;QACb,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACtB,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YAClC,MAAM,SAAS,GAAG,SAAS,EAAE,QAAQ,KAAK,IAAI,CAAC;YAC/C,MAAM,SAAS,GAAG,SAAS,EAAE,QAAQ,KAAK,IAAI,CAAC;YAC/C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC1B,UAAU,CAAC,IAAI,CAAC;oBACZ,KAAK,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE;oBACvB,MAAM,EAAE,yEAAyE,SAAS,IAAI,SAAS,sCAAsC;iBAChJ,CAAC,CAAC;gBACH,SAAS;YACb,CAAC;YACD,IAAI,SAAS;gBACT,SAAS;YACb,MAAM,KAAK,GAAG,OAAO,SAAS,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/E,MAAM,KAAK,GAAG,OAAO,SAAS,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YAC/E,IAAI,KAAK,KAAK,GAAG,SAAS,IAAI,GAAG,EAAE,IAAI,KAAK,KAAK,GAAG,SAAS,IAAI,GAAG,EAAE,EAAE,CAAC;gBACrE,UAAU,CAAC,IAAI,CAAC;oBACZ,KAAK,EAAE,GAAG,IAAI,IAAI,GAAG,OAAO;oBAC5B,MAAM,EAAE,0DAA0D,SAAS,IAAI,GAAG,MAAM,SAAS,IAAI,GAAG,8BAA8B;wBAClI,2EAA2E;iBAClF,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QACvB,OAAO;IACX,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1E,MAAM,IAAI,KAAK,CAAC,wCAAwC,MAAM,CAAC,MAAM,sEAAsE;QACvI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACnE,CAAC;AACD,8EAA8E;AAC9E,sCAAsC;AACtC,8EAA8E;AAC9E,SAAgB,2BAA2B,CAAC,UAA6B,EAAE,IAG1E;IACG,MAAM,aAAa,GAAuB,EAAE,CAAC;IAC7C,MAAM,UAAU,GAAoB,EAAE,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACpC,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,UAAU,GAAG,IAAA,mBAAW,EAAC,IAAI,CAAC,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnE,aAAa,CAAC,IAAI,CAAC;gBACf,UAAU;gBACV,KAAK,EAAE,mBAAmB,GAAG,CAAC,IAAI,EAAE;gBACpC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,IAAA,sBAAU,EAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC;oBACtE,CAAC,CAAC,EAAE,gBAAgB,EAAE,SAAS,EAAE;oBACjC,CAAC,CAAC,EAAE,CAAC;aACZ,CAAC,CAAC;QACP,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACxD,IAAI,MAAM,KAAK,SAAS;gBACpB,SAAS;YACb,MAAM,cAAc,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC;YACrD,UAAU,CAAC,IAAI,CAAC;gBACZ,MAAM;gBACN,KAAK,EAAE,KAAK;gBACZ,cAAc;gBACd,KAAK,EAAE,mBAAmB,GAAG,CAAC,IAAI,SAAS;aAC9C,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IACD,OAAO;QACH,aAAa;QACb,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnD,CAAC;AACN,CAAC;AACD,4EAA4E;AAC5E,SAAgB,4BAA4B,CAAC,IAAkB,EAAE,IAGhE;IAKG,OAAO,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACvB,MAAM,WAAW,GAAG,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,eAAM,CAAC,UAAU,CAAC;YACjC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAA,mBAAQ,EAAC,WAAW,EAAE,OAAO,CAAC;YACzC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC;SAC1D,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,eAAM,CAAC,GAAG,CAAC;YACjC,GAAG,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,GAAG,CAAC;YAClC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,eAAe,EAAE,KAAK,CAAC;SACnE,CAAC,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5E,OAAO,KAAK,CAAC,CAAC,eAAM,CAAC,IAAI,CAAC,IAAI,2BAA2B,CAAC;gBACtD,KAAK,EAAE,eAAe;gBACtB,OAAO,EAAE,gBAAgB,WAAW,mBAAmB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB;aAC1G,CAAC,CAAC,CAAC;QACR,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,eAAM,CAAC,GAAG,CAAC;YAC5B,GAAG,EAAE,GAAG,EAAE;gBACN,sBAAsB,CAAC,UAAU,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBACtE,OAAO,2BAA2B,CAAC,UAAU,EAAE;oBAC3C,UAAU,EAAE,IAAA,mBAAO,EAAC,WAAW,CAAC;oBAChC,WAAW,EAAE,IAAI,CAAC,WAAW;iBAChC,CAAC,CAAC;YACP,CAAC;YACD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,eAAe,EAAE,KAAK,CAAC;SACnE,CAAC,CAAC;QACH,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;AACP,CAAC;AACD,SAAS,kBAAkB,CAAC,GAAW,EAAE,UAAkB;IACvD,6CAA6C;IAC7C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC1D,IAAI,KAAK,EAAE,CAAC;QACR,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACtB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,OAAO,IAAA,mBAAW,EAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACxC,CAAC;QACD,gDAAgD;QAChD,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;YACjB,OAAO,SAAS,CAAC;QACrB,0BAA0B;QAC1B,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;YACzC,OAAO,SAAS,CAAC;QACrB,OAAO,IAAA,mBAAW,EAAC,UAAU,EAAE,GAAG,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AACD,SAAS,kBAAkB,CAAC,IAAkB,EAAE,OAAgB;IAC5D,IAAI,OAAO,IAAI,KAAK,QAAQ;QACxB,OAAO,IAAA,wBAAa,EAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,IAAA,sBAAU,EAAC,IAAI,CAAC;QAChB,OAAO,IAAI,CAAC;IAChB,OAAO,IAAA,mBAAW,EAAC,OAAO,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,CAAC;AACvD,CAAC;AAoBD,0DAA0D;AAC1D,SAAgB,yBAAyB,CAAC,UAAkC;IACxE,OAAO;QACH,aAAa,EAAE,IAAA,sBAAQ,EAAC,UAAU,CAAC,YAAY,CAAC;QAChD,SAAS,EAAE,CAAC,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE;QAC3C,SAAS,EAAE,UAAU,CAAC,SAAS;QAC/B,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;QAC7C,cAAc,EAAE,UAAU,CAAC,cAAc;KAC5C,CAAC;AACN,CAAC;AAWD,2DAA2D;AAC3D,SAAgB,oBAAoB,CAAC,IAAmC;IACpE,OAAO,4BAA4B,CAAC,IAAI,CAAC,CAAC;AAC9C,CAAC;AACD,yDAAyD;AACzD,SAAgB,2BAA2B,CAAC,IAAmC,EAAE,gBAAwE;IACrJ,OAAO,4BAA4B,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;AAChE,CAAC;AACD,SAAS,4BAA4B,CAAC,IAAmC,EAAE,gBAAyE;IAChJ,OAAO,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACvB,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,EAAE;YACtF,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;SACxB,CAAC,CAAC;QACH,8DAA8D;QAC9D,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,eAAM,CAAC,UAAU,CAAC;YACjC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAA,mBAAQ,EAAC,WAAW,EAAE,OAAO,CAAC;YACzC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,MAAM,EAAE,KAAK,CAAC;SAC1D,CAAC,CAAC;QACH,KAAK,CAAC,CAAC,eAAM,CAAC,GAAG,CAAC;YACd,GAAG,EAAE,GAAG,EAAE,CAAC,2BAA2B,CAAC,GAAG,CAAC;YAC3C,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,UAAU,EAAE,KAAK,CAAC;SAC9D,CAAC,CAAC;QACH,KAAK,CAAC,CAAC,eAAM,CAAC,UAAU,CAAC;YACrB,GAAG,EAAE,GAAG,EAAE,CAAC,mCAAmC,CAAC;gBAC3C,WAAW;gBACX,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,gBAAgB;aACnB,CAAC;YACF,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,UAAU,EAAE,KAAK,CAAC;SAC9D,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC;QACpC,MAAM,UAAU,GAAG,IAAA,mBAAO,EAAC,WAAW,CAAC,CAAC;QACxC,uDAAuD;QACvD,2DAA2D;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ;YAC1B,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC;YACvC,CAAC,CAAC,KAAK,CAAC,CAAC,eAAM,CAAC,UAAU,CAAC;gBACvB,GAAG,EAAE,GAAG,EAAE,CAAC,yBAAyB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;gBACpG,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,UAAU,EAAE,KAAK,CAAC;aAC9D,CAAC,CAAC;QACP,MAAM,KAAK,GAAuB,EAAE,CAAC;QACrC,MAAM,SAAS,GAAe,EAAE,CAAC;QACjC,MAAM,SAAS,GAAsC,EAAE,CAAC;QACxD,IAAI,sBAA6C,CAAC;QAClD,MAAM,gBAAgB,GAAsC,EAAE,CAAC;QAC/D,KAAK,CAAC,CAAC,eAAM,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAA,gCAAiB,EAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,eAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,EAAE,eAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,eAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YACzM,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,YAAY,IAAI,oBAAoB,CAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YAC/F,gBAAgB,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QACnC,CAAC,CAAC,CAAC,EAAE,eAAM,CAAC,MAAM,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,MAAM,cAAc,GAAsC,EAAE,CAAC;QAC7D,KAAK,CAAC,CAAC,eAAM,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;YACjD,MAAM,QAAQ,GAAG,IAAA,mBAAW,EAAC,UAAU,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;YACnD,OAAO,IAAA,gCAAiB,EAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,eAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,EAAE,eAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,eAAM,CAAC,IAAI,CAAC,GAAG,EAAE;gBACnJ,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,KAAK,IAAI,oBAAoB,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACrF,cAAc,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;YACjC,CAAC,CAAC,CAAC,EAAE,eAAM,CAAC,MAAM,CAAC,CAAC;QACxB,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,KAAK,CAAC,CAAC,eAAM,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACxE,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC7D,KAAK,CAAC,CAAC,eAAM,CAAC,IAAI,CAAC,GAAG,EAAE;oBACpB,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAM,CAAC;oBACzC,IAAI,CAAC,IAAA,gCAAkB,EAAC,OAAO,CAAC,KAAM,CAAC,EAAE,CAAC;wBACtC,sBAAsB,GAAG,IAAA,iDAAmC,EAAC,0BAA0B,EAAE,iFAAiF,CAAC,CAAC;oBAChL,CAAC;gBACL,CAAC,CAAC,CAAC;gBACH,OAAO;YACX,CAAC;YACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAC5B,IAAI,KAAK,KAAK,SAAS;gBACnB,OAAO;YACX,MAAM,UAAU,GAAG,IAAA,mBAAW,EAAC,UAAU,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC1D,MAAM,cAAc,GAAG,IAAA,mBAAW,EAAC,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,YAAY,CAAC,CAAC;YACjF,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,eAAM,CAAC,UAAU,CAAC;gBACxC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAA,mBAAQ,EAAC,cAAc,EAAE,OAAO,CAAC;gBAC5C,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,2BAA2B,CAAC;oBACzC,KAAK,EAAE,MAAM;oBACb,OAAO,EAAE,mBAAmB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,kCAAkC,cAAc,EAAE;iBAC7G,CAAC;aACL,CAAC,CAAC;YACH,mEAAmE;YACnE,qDAAqD;YACrD,MAAM,iBAAiB,GAAG,KAAK,CAAC,SAAS,CAAC;YAC1C,IAAI,iBAAiB,KAAK,SAAS,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAClE,OAAO,KAAK,CAAC,CAAC,eAAM,CAAC,IAAI,CAAC,IAAI,2BAA2B,CAAC;oBACtD,KAAK,EAAE,eAAe;oBACtB,OAAO,EAAE,mBAAmB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,kCAAkC,iBAAiB,CAAC,MAAM,YAAY;wBAC1H,0GAA0G;wBAC1G,2DAA2D;iBAClE,CAAC,CAAC,CAAC;YACR,CAAC;YACD,MAAM,gBAAgB,GAAG,iBAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC;YACpE,MAAM,YAAY,GAAG,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC1G,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,GAAG,KAAK,CAAC,CAAC,IAAA,+CAAgC,EAAC;gBAClF,UAAU;gBACV,KAAK,EAAE,mBAAmB,OAAO,CAAC,IAAI,EAAE;aAC3C,CAAC,CAAC,IAAI,CAAC,eAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/E,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,eAAM,CAAC,GAAG,CAAC;gBAChC,GAAG,EAAE,GAAG,EAAE;oBACN,MAAM,IAAI,GAAG,IAAA,+CAAsB,EAAC,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;oBAC9D,MAAM,QAAQ,GAAG,IAAA,6BAAe,EAAC;wBAC7B,WAAW,EAAE,YAAY;wBACzB,eAAe,EAAE,qCAA6B;wBAC9C,QAAQ,EAAE,YAAY;wBACtB,UAAU;wBACV,aAAa;wBACb,UAAU,EAAE,IAAI,CAAC,UAAU;wBAC3B,kBAAkB;wBAClB,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC9D,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAClE,CAAC,CAAC;oBACH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;gBAC9B,CAAC;gBACD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,sBAAsB,CAAC,UAAU,EAAE,KAAK,CAAC;aAC9D,CAAC,CAAC;YACH,KAAK,CAAC,CAAC,eAAM,CAAC,IAAI,CAAC,GAAG,EAAE;gBACpB,IAAI,SAAS,CAAC,IAAI,CAAC,sBAAsB,KAAK,SAAS,EAAE,CAAC;oBACtD,sBAAsB,GAAG,IAAA,iDAAmC,EAAC,0BAA0B,EAAE,iFAAiF,CAAC,CAAC;gBAChL,CAAC;gBACD,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;gBACnC,MAAM,OAAO,GAAG,IAAA,6CAAsB,EAAC;oBACnC,cAAc,EAAE,QAAQ;oBACxB,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,sBAAsB,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;oBACrF,8BAA8B,EAAE,CAAC;iBACpC,CAAC,CAAC;gBACH,KAAK,CAAC,IAAI,CAAC;oBACP,GAAG,EAAE,IAAA,sCAAe,EAAC,OAAO,EAAE,SAAS,CAAC,QAAQ,CAAC;oBACjD,OAAO;oBACP,QAAQ,EAAE,SAAS,CAAC,QAAQ;oBAC5B,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,WAAW,OAAO,CAAC,IAAI,EAAE;oBAChC,MAAM,EAAE;wBACJ,OAAO,EAAE,OAAO,CAAC,IAAI;wBACrB,WAAW,EAAE,WAAW;wBACxB,sDAAsD;wBACtD,QAAQ,EAAE,YAAY;wBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;wBACtB,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC3E,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBACzD,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC/D,gEAAgE;wBAChE,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,SAAS;4BACtB,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;4BAClE,CAAC,CAAC,EAAE,CAAC;wBACT,kBAAkB;qBACrB;iBACJ,CAAC,CAAC;YACP,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,OAAO;YACH,SAAS;YACT,KAAK;YACL,SAAS,EAAE,KAAK;YAChB,YAAY;YACZ,WAAW;YACX,UAAU;YACV,SAAS;YACT,QAAQ;YACR,GAAG,CAAC,sBAAsB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,CAAC;YAC3E,gBAAgB;YAChB,cAAc;SACjB,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC;AACD,SAAS,oBAAoB,CAAC,OAAe,EAAE,IAAY;IACvD,MAAM,QAAQ,GAAG,IAAA,oBAAY,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,eAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClE,OAAO,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC5C,CAAC;AACD;;;GAGG;AACH,SAAgB,0BAA0B,CAAC,IAK1C;IACG,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,IAAI,gBAAgB,CAAC;IACxD,OAAO;QACH,KAAK,CAAC,MAAM,CAAC,IAAI;YACb,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,GAAG,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACzC,OAAO,GAAG;gBACN,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;wBACjB,OAAO,EAAE,GAAG;wBACZ,MAAM,EAAE,OAAO;wBACf,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,KAAK,CAAC,EAAE,CAAC;wBACzD,OAAO,KAAK,CAAC;qBAChB,EAAE;gBACP,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC3B,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG;YACjB,MAAM,MAAM,GAAG,IAAI,CAAC,MAA4C,CAAC;YACjE,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,sBAAsB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,yCAAyC,CAAC,CAAC;YAC/G,CAAC;YACD,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,KAAK,SAAS;gBAC9C,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;gBACrC,MAAM,CAAC,UAAU,KAAK,IAAI;gBAC1B,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;gBACjC,CAAC,CAAE,MAAM,CAAC,UAA0D;gBACpE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC;YAChB,qDAAqD;YACrD,MAAM,GAAG,GAAG,IAAA,mBAAO,EAAC,WAAW,CAAC,CAAC;YACjC,MAAM,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,2CAA2C;YAC3C,MAAM,QAAQ,GAAG,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;YACnF,MAAM,QAAQ,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,UAAU,EAAE,CAAC,mBAAmB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;YAC1G,MAAM,UAAU,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,sBAAsB,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,CAAC,EAAE;gBAC1G,GAAG;gBACH,GAAG,EAAE,QAAQ;gBACb,MAAM,EAAE,GAAG,CAAC,MAAM;gBAClB,MAAM,EAAE,GAAG;aACd,CAAC,CAAC;YACH,gDAAgD;YAChD,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC,WAAW,EAAE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;YAC/F,IAAI,OAAO;gBACP,MAAM,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAClC,OAAO;gBACH,OAAO,EAAE,GAAG;gBACZ,MAAM,EAAE,OAAO;gBACf,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,KAAK,CAAC,EAAE,CAAC;gBACzD,OAAO,KAAK,CAAC;aAChB,CAAC;QACN,CAAC;KACJ,CAAC;AACN,CAAC;AACD,SAAS,eAAe,CAAC,QAAkB;IACvC,OAAO,kBAAkB,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;AACrD,CAAC;AASD,gFAAgF;AAChF,SAAgB,mBAAmB,CAAC,IAOnC;IACG,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW;QAChC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,IAAA,yBAAW,EAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IAC7E,MAAM,KAAK,GAAa,CAAC,WAAW,CAAC,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrE,KAAK,CAAC,IAAI,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACtE,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACpD,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YAClD,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;gBACpC,KAAK,CAAC,IAAI,CAAC,oBAAoB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;YAC1E,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;AAC1D,CAAC;AACD;;;;;;;GAOG;AACH,SAAgB,2BAA2B,CAAC,IAI3C;IACG,MAAM,MAAM,GAAG,IAAA,yCAAuB,EAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACrH,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrE,CAAC;IACL,CAAC;IACD,IAAI,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,GAAG,EAAE,aAAa,EAAE,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrE,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3D,CAAC;AA+BD,MAAa,2BAA4B,SAAQ,aAAI,CAAC,WAAW,CAAC,6BAA6B,CAI7F;CACD;AALD,kEAKC;AACD,SAAS,2BAA2B,CAAC,WAAmB,EAAE,KAAc;IACpE,MAAM,KAAK,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,OAAO,IAAI,2BAA2B,CAAC;QACnC,WAAW;QACX,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,KAAK,EAAE,KAAK;KACf,CAAC,CAAC;AACP,CAAC;AACD,SAAgB,oCAAoC,CAAC,IAA8C,EAAE,IAA4B;IAC7H,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACnC,MAAM,OAAO,GAAG,mBAAmB,CAAC;QAChC,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,YAAY,EAAE,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;KAClE,CAAC,CAAC;IACH,OAAO,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACvB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,eAAM,CAAC,UAAU,CAAC;YACxC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAA,kBAAO,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,mBAAmB,CAAC,CAAC;YACvD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,2BAA2B,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC;SAC5E,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,IAAA,gBAAI,EAAC,UAAU,EAAE,uBAAuB,CAAC,CAAC;QAC9D,KAAK,CAAC,CAAC,eAAM,CAAC,UAAU,CAAC;YACrB,GAAG,EAAE,GAAG,EAAE,CAAC,IAAA,oBAAS,EAAC,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;YACxD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,2BAA2B,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC;SAC5E,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,2BAA2B,CAAC;YAC7C,QAAQ,EAAE,IAAA,oCAAkB,GAAE;YAC9B,YAAY,EAAE,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC/D,YAAY,EAAE,UAAU,CAAC,UAAU,CAAC,YAAY;SACnD,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,IAAA,gBAAI,EAAC,UAAU,EAAE,wBAAwB,CAAC,CAAC;QAChE,IAAI,YAAY,KAAK,EAAE,EAAE,CAAC;YACtB,KAAK,CAAC,CAAC,eAAM,CAAC,UAAU,CAAC;gBACrB,GAAG,EAAE,GAAG,EAAE,CAAC,IAAA,oBAAS,EAAC,YAAY,EAAE,YAAY,EAAE,OAAO,CAAC;gBACzD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,2BAA2B,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC;aAC5E,CAAC,CAAC;QACP,CAAC;QACD,MAAM,YAAY,GAAG,YAAY,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACvI,MAAM,GAAG,GAAG,IAAA,mBAAO,EAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC5C,uDAAuD;QACvD,MAAM,GAAG,GAAG;YACR,GAAG,OAAO,CAAC,GAAG;YACd,GAAG,IAAI,CAAC,GAAG;YACX,oBAAoB,EAAE,OAAO,CAAC,WAAW;YACzC,CAAC,mBAAmB,CAAC,EAAE,UAAU,CAAC,QAAQ;SAC7C,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,IAAI,gBAAgB,CAAC;QACnE,4DAA4D;QAC5D,sEAAsE;QACtE,4DAA4D;QAC5D,wEAAwE;QACxE,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC;YACjC,IAAI;YACJ,OAAO,CAAC,WAAW;YACnB,GAAG,eAAe,CAAC,YAAY,CAAC;YAChC,MAAM;YACN,WAAW;YACX,GAAG;YACH,WAAW;YACX,kBAAkB;SACrB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;QACvE,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,UAAqC,CAAC;QAC1C,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;YACzB,IAAI,SAAS;gBACT,OAAO;YACX,IAAI,UAAU,KAAK,SAAS;gBACxB,OAAO,UAAU,CAAC;YACtB,MAAM,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;gBACxB,MAAM,WAAW,EAAE,CAAC;gBACpB,SAAS,GAAG,IAAI,CAAC;gBACjB,MAAM,IAAA,aAAE,EAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAC5E,CAAC,CAAC,EAAE,CAAC;YACL,UAAU,GAAG,OAAO,CAAC;YACrB,IAAI,CAAC;gBACD,MAAM,OAAO,CAAC;YAClB,CAAC;oBACO,CAAC;gBACL,iDAAiD;gBACjD,IAAI,UAAU,KAAK,OAAO;oBACtB,UAAU,GAAG,SAAS,CAAC;YAC/B,CAAC;QACL,CAAC,CAAC;QACF,+DAA+D;QAC/D,MAAM,eAAe,GAAG,eAAM,CAAC,UAAU,CAAC;YACtC,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE;YACtB,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;SAC1B,CAAC,CAAC,IAAI,CAAC,eAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,eAAM,CAAC,IAAI,CAAC,GAAG,EAAE;YACvD,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC;gBACtB,IAAI,EAAE,qBAAqB;gBAC3B,KAAK,EAAE,SAAS;gBAChB,OAAO,EAAE,mBAAmB,OAAO,CAAC,WAAW,+CAA+C;oBAC1F,GAAG,YAAY,YAAY,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI;oBAClF,uFAAuF;gBAC3F,IAAI,EAAE;oBACF,QAAQ,EAAE,QAAQ;oBAClB,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,SAAS,EAAE,OAAO,CAAC,WAAW;iBACjC;gBACD,SAAS,EAAE,uBAAuB,OAAO,CAAC,WAAW,EAAE;aAC1D,CAAC,CAAC;QACP,CAAC,CAAC,CAAC,CAAC,CAAC;QACL,8CAA8C;QAC9C,sEAAsE;QACtE,MAAM,oBAAoB,GAAG,eAAM,CAAC,UAAU,CAAC;YAC3C,GAAG,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;YACxB,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;SAC1B,CAAC,CAAC,IAAI,CAAC,eAAM,CAAC,MAAM,CAAC,CAAC;QACvB,0DAA0D;QAC1D,0DAA0D;QAC1D,KAAK,CAAC,CAAC,eAAM,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;QAClD,MAAM,YAAY,GAAG,CAAC,KAAc,EAAqD,EAAE,CAAC,eAAM,CAAC,UAAU,CAAC;YAC1G,GAAG,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,CAAC;YAC7F,KAAK,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,WAAW;SACtC,CAAC,CAAC,IAAI,CAAC,eAAM,CAAC,WAAW,CAAC;YACvB,SAAS,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,eAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACtG,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,eAAM,CAAC,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;SACnG,CAAC,CAAC,CAAC;QACJ,OAAO,KAAK,CAAC,CAAC,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC9B,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO;gBACxB,OAAO,KAAK,CAAC,CAAC,eAAM,CAAC,SAAS,CAAC;YACnC,sEAAsE;YACtE,MAAM,EAAE,sBAAsB,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC,CAAC,eAAM,CAAC,UAAU,CAAC;gBACvE,GAAG,EAAE,GAAG,EAAE,CAAC,uBAAuB,CAAC,cAAc,CAAC;gBAClD,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;aAC1B,CAAC,CAAC;YACH,2DAA2D;YAC3D,oEAAoE;YACpE,MAAM,aAAa,GAAG,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC7G,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3B,KAAK,CAAC,CAAC,IAAA,6BAAkB,EAAC,eAAM,CAAC,UAAU,CAAC;oBACxC,GAAG,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,GAAG,eAAe,CAAC,YAAY,CAAC,EAAE,OAAO,EAAE,GAAG,aAAa,CAAC,EAAE;wBAC5G,GAAG;wBACH,GAAG;wBACH,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM;qBAC1B,CAAC;oBACF,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;iBAC1B,CAAC,EAAE,sBAAsB,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ;gBAC7D,sCAAsC;gBACtC,eAAM,CAAC,IAAI,CAAC,CAAC;YACjB,CAAC;YACD,KAAK,CAAC,CAAC,IAAA,6BAAkB,EAAC,eAAM,CAAC,UAAU,CAAC;gBACxC,GAAG,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,EAAE,GAAG,eAAe,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,kBAAkB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;gBAC3K,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;aAC1B,CAAC,EAAE,sBAAsB,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,QAAQ;YAC7D,2DAA2D;YAC3D,oBAAoB,CAAC,CAAC;YACtB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,sBAAsB;gBACrD,CAAC,CAAC,OAAe,EAAE,OAAe,EAAE,EAAE,CAAC,yBAAyB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;YAChH,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,eAAM,CAAC,UAAU,CAAC;gBACzC,GAAG,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC;gBAC3D,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;aAC1B,CAAC,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU;gBACtC,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,EAAE;oBACtC,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,UAAU,EAAE,IAAI,CAAC,UAAU;oBAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;oBACvB,WAAW,EAAE,QAAQ;oBACrB,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACvD,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC/E,CAAC,CAAC,CAAC;YACR,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,eAAM,CAAC,UAAU,CAAC;gBACrC,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;gBAC9B,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK;aAC1B,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,8BAA8B,CAAC;gBAC5C,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,YAAY;gBACZ,GAAG;gBACH,GAAG;gBACH,UAAU;aACb,CAAC,CAAC;YACH,MAAM,KAAK,GAAyB;gBAChC,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE;gBAC7D,SAAS,EAAE;oBACP,IAAI,EAAE,gBAAgB;oBACtB,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,YAAY;oBACZ,WAAW,EAAE,IAAI,CAAC,WAAW;iBAChC;gBACD,IAAI,EAAE,SAAS;gBACf,KAAK,EAAE;oBACH,QAAQ,EAAE,QAAQ;oBAClB,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE;oBAC7D,SAAS,EAAE;wBACP,IAAI,EAAE,gBAAgB;wBACtB,WAAW,EAAE,OAAO,CAAC,WAAW;wBAChC,WAAW,EAAE,IAAI,CAAC,WAAW;qBAChC;oBACD,KAAK,EAAE,OAAO;iBACjB;aACJ,CAAC;YACF,0DAA0D;YAC1D,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/C,OAEC,CAAC,IAAI,GAAG,KAAK,IAAI,EAAE;gBACjB,MAAM,YAAY,EAAE,CAAC;gBACrB,MAAM,SAAS,EAAE,CAAC;YACtB,CAAC,CAAC;YACF,MAAM,YAAY,GAA4B;gBAC1C,OAAO;gBACP,0EAA0E;gBAC1E,uEAAuE;gBACvE,iBAAiB;gBACjB,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,UAAU,KAAK,SAAS;oBACpD,CAAC,CAAE,OAAyB;oBAC5B,CAAC,CAAC,IAAA,iCAAoB,EAAC,OAAO,CAAC;gBACnC,QAAQ;gBACR,KAAK;gBACL,QAAQ,EAAE,SAAS;gBACnB,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,SAAS,EAAE,UAAU,CAAC,SAAS;gBAC/B,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,KAAK,EAAE;oBACH,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,WAAW,EAAE,IAAI,CAAC,WAAW;oBAC7B,WAAW,EAAE,UAAU,CAAC,WAAW;oBACnC,WAAW,EAAE,OAAO,CAAC,SAAS;oBAC9B,SAAS,EAAE,UAAU,CAAC,SAAS;iBAClC;aACJ,CAAC;YACF,OAAO,YAAY,CAAC;QACxB,CAAC,CAAC,CAAC,IAAI,CAAC,eAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,eAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;YACnD,KAAK,CAAC,CAAC,eAAe,CAAC;YACvB,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO;gBAC/C,OAAO,KAAK,CAAC,CAAC,eAAM,CAAC,SAAS,CAAC;YACnC,OAAO,KAAK,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC,CAAC,CAAC;IACT,CAAC,CAAC,CAAC;AACP,CAAC;AACD,SAAS,eAAe,CAAC,KAAwB;IAC7C,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AACD,SAAS,8BAA8B,CAAC,IAMvC;IACG,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,GAAG,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAC7E,OAAO;QACH,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO;YACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,EAAE;gBAC/E,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,GAAG,EAAE,IAAI,CAAC,GAAG;aAChB,CAAC,CAAC;YACH,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;QACvF,CAAC;QACD,KAAK,CAAC,WAAW,CAAC,OAAO;YACrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE;gBAC9F,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,YAAY,EAAE,IAAI;aACrB,CAAC,CAAC;YACH,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAO;YACd,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACxF,CAAC;KACJ,CAAC;AACN,CAAC;AACD,KAAK,UAAU,kBAAkB,CAAC,CAAU,EAAE,WAAmB,EAAE,YAA+B,EAAE,GAAW,EAAE,GAAsB,EAAE,UAAmC;IACxK,IAAI,QAAQ,GAAG,EAAE,CAAC;IAClB,IAAI,CAAC;QACD,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,eAAe,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE;YAC3F,GAAG;YACH,GAAG;YACH,YAAY,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE;YACvH,GAAG;YACH,GAAG;YACH,YAAY,EAAE,IAAI;SACrB,CAAC,CAAC;QACH,QAAQ;YACJ,yBAAyB,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,EAAE;gBAC7C,kCAAkC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;IAC3E,CAAC;IACD,MAAM,CAAC;QACH,aAAa;IACjB,CAAC;IACD,MAAM,GAAG,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,IAAI,KAAK,CAAC,0CAA0C,WAAW,KAAK,GAAG,GAAG,QAAQ,EAAE,EAAE;QACxF,KAAK,EAAE,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;KAC5C,CAAC,CAAC;AACP,CAAC;AASM,KAAK,UAAU,gBAAgB,CAAC,IAAuB,EAAE,IAM/D;IACG,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO;QACpB,MAAM,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnC,MAAM,KAAK,GAAG,IAAA,0BAAK,EAAC,QAAQ,EAAE,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,EAAE;YAChD,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,8EAA8E;YAC9E,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAI,IAAI,CAAC,GAAqC,EAAE;YACvE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;SACpC,CAAC,CAAC;QACH,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,QAA2B,CAAC;QAChC,IAAI,SAAoD,CAAC;QACzD,MAAM,OAAO,GAAG,GAAG,EAAE;YACjB,IAAI,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YACnD,IAAI,SAAS,KAAK,SAAS;gBACvB,YAAY,CAAC,SAAS,CAAC,CAAC;QAChC,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,CAAC,KAAY,EAAE,EAAE;YAChC,IAAI,OAAO;gBACP,OAAO;YACX,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,MAAM,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC,CAAC;QACF,MAAM,WAAW,GAAG,CAAC,MAA4B,EAAE,EAAE;YACjD,IAAI,OAAO;gBACP,OAAO;YACX,OAAO,GAAG,IAAI,CAAC;YACf,OAAO,EAAE,CAAC;YACV,OAAO,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC,CAAC;QACF,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;YACnC,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE;YACnC,MAAM,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,GAAG,EAAE;YACjB,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACtB,sDAAsD;YACtD,iCAAiC;YACjC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBACxB,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtB,UAAU,CAAC,QAAQ,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;YACpD,CAAC,EAAE,2BAA2B,CAAC,CAAC;QACpC,CAAC,CAAC;QACF,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACtB,UAAU,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACvB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBACzB,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACrB,OAAO;YACX,CAAC;YACD,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,CAAC;YAC3B,IAAI,QAAQ,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACvC,UAAU,CAAC,IAAI,KAAK,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,QAAQ,OAAO,MAAM,IAAI,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBACpH,OAAO;YACX,CAAC;YACD,WAAW,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,MAAM,EAAE,OAAO;YACpB,OAAO,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;AACP,CAAC;AACD,KAAK,UAAU,yBAAyB,CAAC,WAAmB,EAAE,OAAe,EAAE,YAA+B,EAAE,GAAW,EAAE,GAAsB;IAC/I,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,eAAe,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3K,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,CAAC,EAAE,EAAE,CAAC;QACN,MAAM,IAAI,KAAK,CAAC,mBAAmB,WAAW,6CAA6C,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1H,CAAC;IACD,OAAO,EAAE,CAAC;AACd,CAAC;AACD,KAAK,UAAU,qBAAqB,CAAC,WAAmB,EAAE,OAAe,EAAE,GAAW,EAAE,GAAiD,EAAE,aAAsC,gBAAgB;IAC7L,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE;QAC1E,GAAG;QACH,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE;QAC/B,YAAY,EAAE,IAAI;KACrB,CAAC,CAAC;IACH,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,OAAO,EAAE,IAAI,SAAS,CAAC;AAC3B,CAAC;AACD,KAAK,UAAU,iBAAiB,CAAC,GAAW;IACxC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,IAAA,0BAAK,EAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QACxC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;AACP,CAAC;AACD,KAAK,UAAU,SAAS,CAAC,OAAe,EAAE,GAAW;IACjD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,IAAA,0BAAK,EAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACvB,IAAI,IAAI,KAAK,CAAC;gBACV,OAAO,EAAE,CAAC;;gBAEV,MAAM,CAAC,IAAI,KAAK,CAAC,cAAc,OAAO,IAAI,GAAG,iBAAiB,IAAI,GAAG,CAAC,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AACD,SAAS,IAAI,CAAC,CAAS;IACnB,OAAO,CAAC,CAAC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,IAAI,MAAM,CAAC;AAC1F,CAAC;AACD,SAAS,UAAU,CAAC,MAAoB,EAAE,KAAe;IACrD,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACnD,GAAG,CAAC,IAAI,GAAG,YAAY,CAAC;IACxB,IAAI,KAAK,YAAY,KAAK;QACrB,GAEC,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS;QAC3B,GAEC,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC;IAC/B,OAAO,GAAG,CAAC;AACf,CAAC;AACD,SAAS,YAAY,CAAC,CAAU;IAC5B,OAAO,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,CAAC;AACzD,CAAC;AAkBD,SAAS,gBAAgB,CAAC,IAAY;IAClC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,IAAI,GAAwC,EAAE,CAAC;IACrD,MAAM,KAAK,GAAiB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YACtB,SAAS;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,MAAM;YAChE,KAAK,CAAC,GAAG,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;QACvC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK;gBACpB,SAAS;YACb,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACzC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjF,sDAAsD;gBACtD,MAAM,eAAe,GAAG,0BAA0B,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC/F,IAAI,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBACtE,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC1C,CAAC;qBACI,CAAC;oBACF,MAAM,OAAO,GAAwC,EAAE,CAAC;oBACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;oBACpC,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC1C,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC3C,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;oBAC5C,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACxB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;gBACtD,CAAC;YACL,CAAC;iBACI,CAAC;gBACF,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC1C,CAAC;YACD,SAAS;QACb,CAAC;QACD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,GAAG,CAAC;YACT,SAAS;QACb,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,KAAK,KAAK;YACjC,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,CAAC,GAAG,EAAE;gBACJ,uBAAuB;gBACvB,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;oBACzC,IAAI,KAAK,CAAC,CAAC,CAAE,CAAC,IAAI,KAAK,KAAK;wBACxB,OAAO,KAAK,CAAC,CAAC,CAEZ,CAAC;gBACX,CAAC;gBACD,OAAO,SAAS,CAAC;YACrB,CAAC,CAAC,EAAE,CAAC;QACT,IAAI,QAAQ,KAAK,SAAS;YACtB,SAAS;QACb,IAAI,IAAI,KAAK,EAAE,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAChF,MAAM,IAAI,GAAG,eAAe,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3C,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;gBAChE,MAAM,GAAG,GAAe,EAAE,CAAC;gBAC3B,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;gBACxB,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;YAC3E,CAAC;iBACI,CAAC;gBACF,MAAM,KAAK,GAAwC,EAAE,CAAC;gBACtD,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;YACpD,CAAC;QACL,CAAC;aACI,CAAC;YACF,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AACD,SAAS,eAAe,CAAC,KAAe,EAAE,IAAY;IAIlD,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YACtB,SAAS;QACb,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC;QAClD,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;IACnD,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AACD,SAAS,WAAW,CAAC,IAAY;IAC7B,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,GAAG;QAC/B,OAAO,IAAI,CAAC;IAChB,IAAI,IAAI,KAAK,MAAM;QACf,OAAO,IAAI,CAAC;IAChB,IAAI,IAAI,KAAK,OAAO;QAChB,OAAO,KAAK,CAAC;IACjB,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5B,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;IACxB,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC;IACD,qBAAqB;IACrB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACvC,IAAI,KAAK,KAAK,EAAE;YACZ,OAAO,EAAE,CAAC;QACd,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC","sourcesContent":["// Docker Compose case:原生 compose build/up/down、受管 overlay、黑名单、mainService 主 Sandbox、\n// ServiceController、整组 finalizer、泄题门 hints 与 BuildKey 收集。\n// NiceEval 不维护字段白名单解析器——未知字段原样交给 Compose;只拒绝破坏核心不变量的黑名单项。\n// 契约单源:docs/feature/sandbox/case.md「Docker Compose case」。\nimport { randomBytes } from \"node:crypto\";\nimport { spawn } from \"node:child_process\";\nimport { mkdtemp, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport { dirname, isAbsolute, join, relative as relativePath, resolve as resolvePath, sep } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { Data, Effect, type Scope } from \"effect\";\nimport { parseDocument } from \"yaml\";\nimport type { JsonValue } from \"../shared/types.ts\";\nimport { attachLeakGateHints, buildContextIdentityContribution, pathContentDigest, type BindMountSpec, type BuildContextSpec, type LeakGateHints, } from \"../runner/leak-gate.ts\";\nimport { materializationScopeId, sandboxBuildRef, type SandboxBuildExecutionContext, type SandboxBuildProvider, type SandboxBuildWork, } from \"./build-coordinator.ts\";\nimport type { MaterializedSandboxCase, SandboxMaterializeContext, SandboxResourceGroup, ServiceController, } from \"./case-types.ts\";\nimport { computeBuildKey, digestOf, looksLikeDigestRef, unresolvedProviderFingerprintMarker, type BuildKey, } from \"./identity.ts\";\nimport { currentRunIdentity, dockerRunIdentityLabels, type RunIdentity } from \"./run-identity.ts\";\nimport { withProvisionRetry, type ProvisionSlot } from \"./retry.ts\";\nimport type { CommandResult } from \"./types.ts\";\nimport type { ScopedFeedback } from \"../types.ts\";\nimport { customSandboxBackend, type SandboxProviderBackend } from \"./backend.ts\";\nimport type { DockerSandbox } from \"./docker.ts\";\nimport { dockerfileBaseIdentity } from \"./dockerfile-identity.ts\";\n/**\n * materializer / BuildKey 的 builder revision,只对成功输入定义:它决定成功输入得到什么\n * 构建字节、物理计划与身份。安全校验只把破坏所有权不变量的输入改为规划失败,不改变任何\n * 成功输入的结果,因此新增校验不得递增本 revision(memory/compose-project-namespace-escape-destabilizes-case-identity.md)。\n */\nexport const COMPOSE_MATERIALIZER_REVISION = \"docker-compose-2\";\nconst BUILDER_KIND = \"docker-compose\";\n/**\n * physical planning 安全校验用的两个固定哨兵 project:同一份 file + env 分别求值有效模型,\n * 受管资源名必须随哨兵各自变化,写死其中一个哨兵名会在另一个模型失败。\n */\nconst COMPOSE_PLAN_SENTINEL_PROJECTS = [\"niceeval-plan-a\", \"niceeval-plan-b\"] as const;\n/** Provider stop 的 TERM 边界;再加 1s KILL grace 后仍严格短于 runner 的 8s 看门狗。 */\nconst COMPOSE_STOP_TIMEOUT_MS = 6500;\n/** Compose 收到 TERM 后仍不退出时,升级成 KILL 并结束等待。 */\nconst COMPOSE_ABORT_KILL_GRACE_MS = 1000;\nexport class ComposeBuildCollectionError extends Data.TaggedError(\"ComposeBuildCollectionError\")<{\n readonly stage: \"read\" | \"configuration\" | \"security\" | \"identity\";\n readonly message: string;\n}> {\n}\nfunction composeCollectionError(stage: ComposeBuildCollectionError[\"stage\"], cause: unknown): ComposeBuildCollectionError {\n return new ComposeBuildCollectionError({\n stage,\n message: cause instanceof Error ? cause.message : String(cause),\n });\n}\n// ---------------------------------------------------------------------------\n// 目标平台:构建事实(case.md「BuildKey 与 CaseKey」)\n// ---------------------------------------------------------------------------\n/** 构建器传平台用的环境变量;探测值与用户指定值都经它进入 builder。 */\nconst DOCKER_PLATFORM_ENV = \"DOCKER_DEFAULT_PLATFORM\";\n/** 归一成 `os/arch`:daemon 与 Node 各有各的写法(aarch64 / x86_64 / arm64 / x64)。 */\nexport function normalizeBuildPlatform(value: string): string {\n const [rawOs, rawArch] = value.trim().toLowerCase().split(\"/\");\n const os = rawOs && rawArch ? rawOs : \"linux\";\n const arch = rawArch ?? rawOs ?? \"\";\n const normalizedArch = arch === \"x86_64\" || arch === \"x64\" || arch === \"amd64\"\n ? \"amd64\"\n : arch === \"aarch64\" || arch === \"arm64\"\n ? \"arm64\"\n : arch;\n return `${os}/${normalizedArch}`;\n}\nlet dockerPlatformProbe: Promise<string> | undefined;\n/**\n * 目标平台从构建执行环境得出:优先用户显式指定的 `DOCKER_DEFAULT_PLATFORM`,\n * 其次 daemon 自报的 os/arch,都拿不到才回落到宿主架构(容器恒为 linux)。\n * 探测结果进 BuildKey,同一个值再传给构建器,身份与事实同源。\n */\nexport async function detectDockerBuildPlatform(opts?: {\n readonly env?: NodeJS.ProcessEnv;\n /** 注入探测通道(测试用);默认问本机 docker daemon。 */\n readonly probe?: () => Promise<string | undefined>;\n}): Promise<string> {\n const env = opts?.env ?? process.env;\n const pinned = env[DOCKER_PLATFORM_ENV];\n if (pinned)\n return normalizeBuildPlatform(pinned);\n if (opts?.probe) {\n const probed = await opts.probe();\n return normalizeBuildPlatform(probed ?? hostBuildPlatform());\n }\n dockerPlatformProbe ??= probeDockerServerPlatform().then((probed) => normalizeBuildPlatform(probed ?? hostBuildPlatform()));\n return dockerPlatformProbe;\n}\nfunction hostBuildPlatform(): string {\n return `linux/${process.arch}`;\n}\nfunction probeDockerServerPlatform(): Promise<string | undefined> {\n return new Promise((resolve) => {\n const child = spawn(\"docker\", [\"version\", \"--format\", \"{{.Server.Os}}/{{.Server.Arch}}\"], {\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n });\n let out = \"\";\n child.stdout?.on(\"data\", (c: Buffer) => {\n out += c.toString();\n });\n child.on(\"error\", () => resolve(undefined));\n child.on(\"close\", (code) => {\n const value = out.trim();\n resolve(code === 0 && value.includes(\"/\") ? value : undefined);\n });\n });\n}\n// ---------------------------------------------------------------------------\n// Compose 结构面(只为黑名单 / BuildKey / 泄题门抽取字段;不是白名单运行时)\n// ---------------------------------------------------------------------------\nexport interface ComposeBuildDecl {\n readonly context: string;\n readonly dockerfile?: string;\n readonly args?: Readonly<globalThis.Record<string, string>>;\n readonly target?: string;\n /** Compose `build.platforms` 原样保留;进 BuildKey 前由收集器裁决(多元素拒绝)。 */\n readonly platforms?: readonly string[];\n}\nexport interface ComposeServiceInspection {\n readonly name: string;\n readonly build?: ComposeBuildDecl;\n /** service 级 `platform`:Compose 用它决定构建与运行平台,压过 DOCKER_DEFAULT_PLATFORM。 */\n readonly platform?: string;\n readonly image?: string;\n readonly networkMode?: string;\n readonly workingDir?: string;\n /** 原始 volume 条目(短语法字符串或长语法摘要)。 */\n readonly volumes: readonly string[];\n}\nexport interface ComposeInspection {\n readonly services: readonly ComposeServiceInspection[];\n /** 受管网络名:服务实际加入的非 external 网络;没有任何服务声明网络时是 Compose 的 `default`。 */\n readonly networkNames: readonly string[];\n readonly raw: string;\n /** Compose case 引用的宿主侧非敏感文件;内容摘要进入 CaseKey,绝对路径不落盘。 */\n readonly localFiles: readonly ComposeLocalFileRef[];\n}\nexport interface ComposeLocalFileRef {\n readonly kind: \"env_file\" | \"config\" | \"secret\";\n readonly path: string;\n readonly label: string;\n}\n/** 从 Compose 原文抽取 services 的黑名单 / build / volume 面。未知字段忽略。 */\nexport function inspectComposeYaml(raw: string): ComposeInspection {\n const doc = parseYamlMapping(raw);\n const servicesNode = doc.services;\n if (servicesNode === undefined || servicesNode === null || typeof servicesNode !== \"object\" || Array.isArray(servicesNode)) {\n return { services: [], networkNames: [], raw, localFiles: topLevelLocalFiles(doc) };\n }\n const services: ComposeServiceInspection[] = [];\n const localFiles: ComposeLocalFileRef[] = topLevelLocalFiles(doc);\n for (const [name, value] of Object.entries(servicesNode as globalThis.Record<string, unknown>)) {\n if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n services.push({ name, volumes: [] });\n continue;\n }\n const svc = value as globalThis.Record<string, unknown>;\n for (const path of localPathValues(svc.env_file)) {\n localFiles.push({ kind: \"env_file\", path, label: `service ${name} env_file` });\n }\n services.push({\n name,\n ...(parseBuild(svc.build) !== undefined ? { build: parseBuild(svc.build)! } : {}),\n ...(typeof svc.platform === \"string\" ? { platform: svc.platform } : {}),\n ...(typeof svc.image === \"string\" ? { image: svc.image } : {}),\n ...(typeof svc.network_mode === \"string\"\n ? { networkMode: svc.network_mode }\n : typeof svc.networkMode === \"string\"\n ? { networkMode: svc.networkMode }\n : {}),\n ...(typeof svc.working_dir === \"string\"\n ? { workingDir: svc.working_dir }\n : typeof svc.workingDir === \"string\"\n ? { workingDir: svc.workingDir }\n : {}),\n volumes: volumeStrings(svc.volumes),\n });\n }\n return {\n services,\n networkNames: managedNetworkNames(doc, servicesNode as globalThis.Record<string, unknown>),\n raw,\n localFiles,\n };\n}\nfunction topLevelLocalFiles(doc: globalThis.Record<string, YamlNode>): ComposeLocalFileRef[] {\n const refs: ComposeLocalFileRef[] = [];\n for (const kind of [\"config\", \"secret\"] as const) {\n const node = doc[`${kind}s`];\n if (node === null || typeof node !== \"object\" || Array.isArray(node))\n continue;\n for (const [name, value] of Object.entries(node as globalThis.Record<string, unknown>)) {\n if (value === null || typeof value !== \"object\" || Array.isArray(value))\n continue;\n const file = (value as globalThis.Record<string, unknown>).file;\n if (typeof file === \"string\")\n refs.push({ kind, path: file, label: `${kind} ${name}` });\n }\n }\n return refs;\n}\nfunction localPathValues(value: unknown): string[] {\n if (typeof value === \"string\")\n return [value];\n if (!Array.isArray(value))\n return [];\n return value.flatMap((entry) => {\n if (typeof entry === \"string\")\n return [entry];\n if (entry === null || typeof entry !== \"object\" || Array.isArray(entry))\n return [];\n const path = (entry as globalThis.Record<string, unknown>).path;\n return typeof path === \"string\" ? [path] : [];\n });\n}\n/**\n * 受管网络名。Compose 给容器和网络都打 `com.docker.compose.project`,孤儿核对靠它把资源组拼回来;\n * 网络那一半要能被单独核对,必须在创建期就带上运行标识 label,而 label 只能加在这些名字上。\n * `external: true` 的网络是用户自己的资源,不改它的 label、也不进受管清单。\n */\nfunction managedNetworkNames(doc: globalThis.Record<string, YamlNode>, servicesNode: globalThis.Record<string, unknown>): string[] {\n const external = new Set<string>();\n const top = doc.networks;\n if (top !== undefined && top !== null && typeof top === \"object\" && !Array.isArray(top)) {\n for (const [name, value] of Object.entries(top as globalThis.Record<string, unknown>)) {\n if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\n const net = value as globalThis.Record<string, unknown>;\n if (net.external === true || net.external === \"true\")\n external.add(name);\n }\n }\n }\n const used = new Set<string>();\n for (const value of Object.values(servicesNode)) {\n if (value === null || typeof value !== \"object\" || Array.isArray(value))\n continue;\n const nets = (value as globalThis.Record<string, unknown>).networks;\n if (Array.isArray(nets)) {\n for (const n of nets)\n if (typeof n === \"string\")\n used.add(n);\n }\n else if (nets !== null && typeof nets === \"object\") {\n for (const n of Object.keys(nets as globalThis.Record<string, unknown>))\n used.add(n);\n }\n }\n const managed = [...used].filter((n) => !external.has(n));\n // 没有服务显式声明网络时,Compose 建的是 project 的 default 网络。\n return managed.length > 0 ? managed : used.size > 0 ? [] : [\"default\"];\n}\nfunction parseBuild(value: unknown): ComposeBuildDecl | undefined {\n if (typeof value === \"string\") {\n return { context: value };\n }\n if (value === null || typeof value !== \"object\" || Array.isArray(value))\n return undefined;\n const b = value as globalThis.Record<string, unknown>;\n const context = typeof b.context === \"string\" ? b.context : \".\";\n const dockerfile = typeof b.dockerfile === \"string\" ? b.dockerfile : undefined;\n const target = typeof b.target === \"string\" ? b.target : undefined;\n const platforms = Array.isArray(b.platforms)\n ? b.platforms.filter((p): p is string => typeof p === \"string\")\n : undefined;\n const args = b.args !== undefined && b.args !== null && typeof b.args === \"object\" && !Array.isArray(b.args)\n ? Object.fromEntries(Object.entries(b.args as globalThis.Record<string, unknown>).map(([k, v]) => [k, String(v)]))\n : undefined;\n return {\n context,\n ...(dockerfile !== undefined ? { dockerfile } : {}),\n ...(args !== undefined ? { args } : {}),\n ...(target !== undefined ? { target } : {}),\n ...(platforms !== undefined && platforms.length > 0 ? { platforms } : {}),\n };\n}\nfunction volumeStrings(value: unknown): string[] {\n if (!Array.isArray(value))\n return [];\n const out: string[] = [];\n for (const entry of value) {\n if (typeof entry === \"string\") {\n out.push(entry);\n continue;\n }\n if (entry !== null && typeof entry === \"object\" && !Array.isArray(entry)) {\n const v = entry as globalThis.Record<string, unknown>;\n const source = typeof v.source === \"string\" ? v.source : typeof v.Source === \"string\" ? v.Source : \"\";\n const target = typeof v.target === \"string\" ? v.target : typeof v.Target === \"string\" ? v.Target : \"\";\n const type = typeof v.type === \"string\" ? v.type : \"\";\n out.push([type, source, target].filter(Boolean).join(\":\"));\n }\n }\n return out;\n}\n// ---------------------------------------------------------------------------\n// 黑名单:只保护核心不变量\n// ---------------------------------------------------------------------------\nexport interface ComposeBlacklistFinding {\n readonly service: string;\n readonly field: string;\n readonly value: string;\n readonly reason: string;\n}\n/**\n * 黑名单检查。点名 service.field 与理由。\n * - Docker socket 挂载(任意服务)\n * - main 脱离受管 Compose 网络(`network_mode: host|none|container:*`)\n * - main 覆盖受管 workdir(仅当调用方声明了 managedWorkdir 且与 compose 冲突)\n */\nexport function findComposeBlacklistViolations(inspection: ComposeInspection, opts: {\n readonly mainService: string;\n readonly managedWorkdir?: string;\n}): ComposeBlacklistFinding[] {\n const findings: ComposeBlacklistFinding[] = [];\n for (const svc of inspection.services) {\n for (const vol of svc.volumes) {\n if (volumeTouchesDockerSock(vol)) {\n findings.push({\n service: svc.name,\n field: \"volumes\",\n value: vol,\n reason: \"mounts the Docker socket, which escapes the sandbox boundary and breaks NiceEval isolation\",\n });\n }\n }\n const isMain = svc.name === opts.mainService;\n if (isMain && svc.networkMode !== undefined && isDetachedNetworkMode(svc.networkMode)) {\n findings.push({\n service: svc.name,\n field: \"network_mode\",\n value: svc.networkMode,\n reason: \"detaches the main service from the managed Compose project network; Agent and sidecars would lose shared DNS/network semantics\",\n });\n }\n if (isMain &&\n opts.managedWorkdir !== undefined &&\n svc.workingDir !== undefined &&\n normalizePath(svc.workingDir) !== normalizePath(opts.managedWorkdir)) {\n findings.push({\n service: svc.name,\n field: \"working_dir\",\n value: svc.workingDir,\n reason: `overrides the NiceEval-managed workdir ${JSON.stringify(opts.managedWorkdir)}`,\n });\n }\n }\n return findings;\n}\nexport function assertComposeBlacklist(inspection: ComposeInspection, opts: {\n readonly mainService: string;\n readonly managedWorkdir?: string;\n}): void {\n const findings = findComposeBlacklistViolations(inspection, opts);\n if (findings.length === 0)\n return;\n const body = findings\n .map((f, i) => ` ${i + 1}. services.${f.service}.${f.field}=${JSON.stringify(f.value)}\\n ${f.reason}`)\n .join(\"\\n\");\n throw new Error(`Compose blacklist rejected ${findings.length} field(s) that break NiceEval core invariants:\\n${body}`);\n}\nfunction volumeTouchesDockerSock(vol: string): boolean {\n return /docker\\.sock(?:$|[:\\s])/i.test(vol) || /\\/var\\/run\\/docker\\.sock/i.test(vol);\n}\nfunction isDetachedNetworkMode(mode: string): boolean {\n const m = mode.trim().toLowerCase();\n return m === \"host\" || m === \"none\" || m.startsWith(\"container:\");\n}\nfunction normalizePath(p: string): string {\n return p.replace(/\\/+$/, \"\") || \"/\";\n}\n// ---------------------------------------------------------------------------\n// 安全校验:合成声明 + 双哨兵有效模型(case.md「Docker Compose case」黑名单)\n// ---------------------------------------------------------------------------\ninterface ComposeSecurityViolation {\n readonly field: string;\n readonly reason: string;\n}\n/**\n * 用正式 YAML parser(含 anchor/merge 展开)检测合成声明:\n * - 顶层 `include`:外部文件不在当前 CaseKey 输入闭包;\n * - 任何经 inline / anchor / merge 出现的 `services.*.extends.file`:该语法引入第二个文件入口,\n * 当前 CaseKey 没有为它建立输入闭包;同文件复用请使用 service-only extends。\n * 同文件 anchor、merge、插值与 service-only extends 不在这里拒绝,交给 Compose 有效模型求值。\n */\nfunction assertComposeSyntheticScope(raw: string): void {\n let json: unknown;\n try {\n json = parseDocument(raw, { merge: true }).toJSON();\n }\n catch {\n // 解析失败时 docker compose config 也会失败,由有效模型阶段给出安全错误,这里不跳过检查。\n json = undefined;\n }\n const violations: ComposeSecurityViolation[] = [];\n if (json !== null && typeof json === \"object\" && !Array.isArray(json)) {\n const root = json as Readonly<Record<string, unknown>>;\n if (\"include\" in root) {\n violations.push({\n field: \"include\",\n reason: \"top-level include pulls external Compose files into the run without entering the CaseKey input closure\",\n });\n }\n const services = root.services;\n if (services !== null && typeof services === \"object\" && !Array.isArray(services)) {\n for (const [name, svc] of Object.entries(services as Readonly<Record<string, unknown>>)) {\n if (svc === null || typeof svc !== \"object\" || Array.isArray(svc))\n continue;\n const ext = (svc as Readonly<Record<string, unknown>>).extends;\n if (ext === null || typeof ext !== \"object\" || Array.isArray(ext))\n continue;\n if (!(\"file\" in (ext as Readonly<Record<string, unknown>>)))\n continue;\n violations.push({\n field: `services.${name}.extends.file`,\n reason: \"introduces a Compose file entry that is not part of the CaseKey input closure; use in-file anchors/merges or service-only extends\",\n });\n }\n }\n }\n if (violations.length === 0)\n return;\n throw new Error(`Compose security validation rejected ${violations.length} declaration(s):\\n` +\n violations.map((v) => ` ${v.field}: ${v.reason}`).join(\"\\n\"));\n}\ninterface ComposeEffectiveResource {\n readonly name?: unknown;\n readonly external?: unknown;\n}\ninterface ComposeEffectiveModel {\n readonly services?: Readonly<Record<string, Readonly<Record<string, unknown>>>>;\n readonly networks?: Readonly<Record<string, ComposeEffectiveResource>>;\n readonly volumes?: Readonly<Record<string, ComposeEffectiveResource>>;\n readonly configs?: Readonly<Record<string, ComposeEffectiveResource>>;\n readonly secrets?: Readonly<Record<string, ComposeEffectiveResource>>;\n}\nconst COMPOSE_MANAGED_RESOURCE_KINDS = [\"networks\", \"volumes\", \"configs\", \"secrets\"] as const;\nfunction composeConfigRunner(composePath: string, env?: Readonly<globalThis.Record<string, string>>): (projectName: string) => Promise<ComposeCommandResult> {\n return (projectName) => runDockerCompose([\"-p\", projectName, \"-f\", composePath, \"config\", \"--format\", \"json\"], {\n cwd: dirname(composePath),\n env: { ...env, COMPOSE_PROJECT_NAME: projectName },\n allowNonZero: true,\n });\n}\n/**\n * 双哨兵有效模型校验(case.md 黑名单):\n * - 任一有效模型的 `services.*.container_name` 拒绝(绕开受管 project namespace);\n * - networks/volumes/configs/secrets 的 key 与 external 标记在两个哨兵模型间必须一致;\n * - 非 external 资源的有效名必须分别严格为 `<哨兵>_<logical-key>`——`${COMPOSE_PROJECT_NAME}_<key>`\n * 自然通过,写死全局名或写死某一个哨兵名会在另一模型失败;\n * - `external: true` 的资源保留外部名,接受。\n * 模型只在内存解码;config 失败只报安全阶段与 exit code,绝不带 stdout/stderr/模型原文。\n */\nasync function assertComposeEffectiveModelSecurity(opts: {\n readonly composePath: string;\n readonly env?: Readonly<globalThis.Record<string, string>>;\n readonly runComposeConfig?: (projectName: string) => Promise<ComposeCommandResult>;\n}): Promise<void> {\n const runConfig = opts.runComposeConfig ?? composeConfigRunner(opts.composePath, opts.env);\n const models = new Map<string, ComposeEffectiveModel>();\n for (const project of COMPOSE_PLAN_SENTINEL_PROJECTS) {\n let result: ComposeCommandResult;\n try {\n result = await runConfig(project);\n }\n catch {\n throw new Error(`Compose security validation failed at effective-model resolution for project ${project}; refused to plan without a valid model.`);\n }\n if (result.exitCode !== 0) {\n throw new Error(`Compose security validation failed at effective-model resolution for project ${project} ` +\n `(docker compose config exited ${result.exitCode}); refused to plan without a valid model.`);\n }\n let model: unknown;\n try {\n model = JSON.parse(result.stdout);\n }\n catch {\n throw new Error(`Compose security validation failed at effective-model decoding for project ${project}; refused to plan without a valid model.`);\n }\n if (model === null || typeof model !== \"object\" || Array.isArray(model)) {\n throw new Error(`Compose security validation failed at effective-model decoding for project ${project}; refused to plan without a valid model.`);\n }\n models.set(project, model as ComposeEffectiveModel);\n }\n const [sentinelA, sentinelB] = COMPOSE_PLAN_SENTINEL_PROJECTS as readonly [\n string,\n string\n ];\n const modelA = models.get(sentinelA)!;\n const modelB = models.get(sentinelB)!;\n const violations: ComposeSecurityViolation[] = [];\n for (const model of models.values()) {\n for (const [name, svc] of Object.entries(model.services ?? {})) {\n if (svc === null || typeof svc !== \"object\")\n continue;\n if (typeof svc.container_name === \"string\") {\n violations.push({\n field: `services.${name}.container_name`,\n reason: \"fixes the container name outside the managed Compose project namespace; concurrent cases would collide on the same host resource\",\n });\n }\n }\n }\n for (const kind of COMPOSE_MANAGED_RESOURCE_KINDS) {\n const resourcesA = modelA[kind] ?? {};\n const resourcesB = modelB[kind] ?? {};\n const keysA = Object.keys(resourcesA).sort();\n const keysB = Object.keys(resourcesB).sort();\n if (keysA.join(\"\\u0000\") !== keysB.join(\"\\u0000\")) {\n const differing = keysA.find((k) => !keysB.includes(k)) ?? keysB.find((k) => !keysA.includes(k)) ?? keysA[0] ?? keysB[0]!;\n violations.push({\n field: `${kind}.${differing}`,\n reason: `resource key set differs between the two sentinel project evaluations (${sentinelA}/${sentinelB}); the two models must be consistent`,\n });\n continue;\n }\n for (const key of keysA) {\n const resourceA = resourcesA[key];\n const resourceB = resourcesB[key];\n const externalA = resourceA?.external === true;\n const externalB = resourceB?.external === true;\n if (externalA !== externalB) {\n violations.push({\n field: `${kind}.${key}`,\n reason: `external marker differs between the two sentinel project evaluations (${sentinelA}/${sentinelB}); the two models must be consistent`,\n });\n continue;\n }\n if (externalA)\n continue;\n const nameA = typeof resourceA?.name === \"string\" ? resourceA.name : undefined;\n const nameB = typeof resourceB?.name === \"string\" ? resourceB.name : undefined;\n if (nameA !== `${sentinelA}_${key}` || nameB !== `${sentinelB}_${key}`) {\n violations.push({\n field: `${kind}.${key}.name`,\n reason: `does not track the Compose project namespace (expected ${sentinelA}_${key} / ${sentinelB}_${key} across sentinel projects); ` +\n \"declare it external or derive the name from ${COMPOSE_PROJECT_NAME}_<key>\",\n });\n }\n }\n }\n if (violations.length === 0)\n return;\n const unique = [...new Map(violations.map((v) => [v.field, v])).values()];\n throw new Error(`Compose security validation rejected ${unique.length} declaration(s) that escape the managed Compose project namespace:\\n` +\n unique.map((v) => ` ${v.field}: ${v.reason}`).join(\"\\n\"));\n}\n// ---------------------------------------------------------------------------\n// 泄题门:build contexts + 相对 bind mounts\n// ---------------------------------------------------------------------------\nexport function leakGateHintsFromInspection(inspection: ComposeInspection, opts: {\n readonly composeDir: string;\n readonly mainService: string;\n}): LeakGateHints {\n const buildContexts: BuildContextSpec[] = [];\n const bindMounts: BindMountSpec[] = [];\n for (const svc of inspection.services) {\n if (svc.build !== undefined) {\n const contextDir = resolvePath(opts.composeDir, svc.build.context);\n buildContexts.push({\n contextDir,\n label: `compose service ${svc.name}`,\n ...(svc.build.dockerfile !== undefined && isAbsolute(svc.build.dockerfile)\n ? { dockerignorePath: undefined }\n : {}),\n });\n }\n for (const vol of svc.volumes) {\n const source = relativeBindSource(vol, opts.composeDir);\n if (source === undefined)\n continue;\n const agentReachable = svc.name === opts.mainService;\n bindMounts.push({\n source,\n phase: \"any\",\n agentReachable,\n label: `compose service ${svc.name} volume`,\n });\n }\n }\n return {\n buildContexts,\n ...(bindMounts.length > 0 ? { bindMounts } : {}),\n };\n}\n/** 读 Compose 文件并产出泄题门 hints(供 discover / prepare 挂 attachLeakGateHints)。 */\nexport function leakGateHintsFromComposeFile(file: string | URL, opts: {\n readonly mainService: string;\n readonly baseDir?: string;\n}): Effect.Effect<{\n hints: LeakGateHints;\n inspection: ComposeInspection;\n composePath: string;\n}, ComposeBuildCollectionError> {\n return Effect.gen(function* () {\n const composePath = resolveComposeFile(file, opts.baseDir);\n const raw = yield* Effect.tryPromise({\n try: () => readFile(composePath, \"utf-8\"),\n catch: (cause) => composeCollectionError(\"read\", cause),\n });\n const inspection = yield* Effect.try({\n try: () => inspectComposeYaml(raw),\n catch: (cause) => composeCollectionError(\"configuration\", cause),\n });\n if (!inspection.services.some((service) => service.name === opts.mainService)) {\n return yield* Effect.fail(new ComposeBuildCollectionError({\n stage: \"configuration\",\n message: `Compose file ${composePath} has no service ${JSON.stringify(opts.mainService)} (mainService)`,\n }));\n }\n const hints = yield* Effect.try({\n try: () => {\n assertComposeBlacklist(inspection, { mainService: opts.mainService });\n return leakGateHintsFromInspection(inspection, {\n composeDir: dirname(composePath),\n mainService: opts.mainService,\n });\n },\n catch: (cause) => composeCollectionError(\"configuration\", cause),\n });\n return { hints, inspection, composePath };\n });\n}\nfunction relativeBindSource(vol: string, composeDir: string): string | undefined {\n // 短语法: ./foo:/app/foo[:ro] 或 foo:/bar(命名卷跳过)\n const short = vol.match(/^([^:]+):([^:]+)(?::([^:]+))?$/);\n if (short) {\n const src = short[1]!;\n if (src.startsWith(\".\") || src.startsWith(\"/\")) {\n return resolvePath(composeDir, src);\n }\n // 命名卷 / 变量插值宿主机路径:变量在发现期可能未展开;含 `$` 的跳过 bind 检查\n if (src.includes(\"$\"))\n return undefined;\n // 无路径分隔的名字 = named volume\n if (!src.includes(\"/\") && !src.includes(\"\\\\\"))\n return undefined;\n return resolvePath(composeDir, src);\n }\n return undefined;\n}\nfunction resolveComposeFile(file: string | URL, baseDir?: string): string {\n if (typeof file !== \"string\")\n return fileURLToPath(file);\n if (isAbsolute(file))\n return file;\n return resolvePath(baseDir ?? process.cwd(), file);\n}\n// ---------------------------------------------------------------------------\n// BuildKey 收集 + SandboxBuildProvider\n// ---------------------------------------------------------------------------\nexport interface ComposeBuildCollection {\n readonly buildKeys: readonly BuildKey[];\n readonly works: readonly SandboxBuildWork[];\n readonly leakHints: LeakGateHints;\n readonly composeBytes: string;\n readonly composePath: string;\n readonly inspection: ComposeInspection;\n /** service → 解析中的 image 引用(无 build 的服务);digest 留给协调器/物化期填写。 */\n readonly imageRefs: Readonly<globalThis.Record<string, string>>;\n /** 本次进 BuildKey 的目标平台;构建执行拿同一个值。 */\n readonly platform: string;\n /** 兼容旧 provider identity 的 inert fingerprint marker;不参与 carry gate。 */\n readonly providerIdentityMarker?: JsonValue;\n readonly bindMountDigests: Readonly<globalThis.Record<string, string>>;\n readonly configContents: Readonly<globalThis.Record<string, string>>;\n}\n/** physical planner 与 build collector 共用的安全 Case 输入投影。 */\nexport function composeCollectionIdentity(collection: ComposeBuildCollection): JsonValue {\n return {\n composeDigest: digestOf(collection.composeBytes),\n buildKeys: [...collection.buildKeys].sort(),\n imageRefs: collection.imageRefs,\n bindMountDigests: collection.bindMountDigests,\n configContents: collection.configContents,\n };\n}\ninterface ComposeBuildCollectionOptions {\n readonly file: string | URL;\n readonly mainService: string;\n readonly baseDir?: string;\n /** 显式指定目标平台;省略时从构建执行环境探测。 */\n readonly platform?: string;\n readonly env?: Readonly<globalThis.Record<string, string>>;\n /** 注入平台探测通道(测试用)。 */\n readonly platformProbe?: () => Promise<string | undefined>;\n}\n/** 从 Compose 声明收集 BuildKey 与协调器 works(仅有 `build:` 的服务)。 */\nexport function collectComposeBuilds(opts: ComposeBuildCollectionOptions): Effect.Effect<ComposeBuildCollection, ComposeBuildCollectionError> {\n return collectComposeBuildsInternal(opts);\n}\n/** @internal 单测注入有效模型求值通道;不从 `niceeval/sandbox` 对外导出。 */\nexport function collectComposeBuildsForTest(opts: ComposeBuildCollectionOptions, runComposeConfig: (projectName: string) => Promise<ComposeCommandResult>): Effect.Effect<ComposeBuildCollection, ComposeBuildCollectionError> {\n return collectComposeBuildsInternal(opts, runComposeConfig);\n}\nfunction collectComposeBuildsInternal(opts: ComposeBuildCollectionOptions, runComposeConfig?: (projectName: string) => Promise<ComposeCommandResult>): Effect.Effect<ComposeBuildCollection, ComposeBuildCollectionError> {\n return Effect.gen(function* () {\n const { hints, inspection, composePath } = yield* leakGateHintsFromComposeFile(opts.file, {\n mainService: opts.mainService,\n baseDir: opts.baseDir,\n });\n // physical planning 安全门:合成声明 + 双哨兵有效模型,早于 BuildKey 收集与任何携带决策。\n const raw = yield* Effect.tryPromise({\n try: () => readFile(composePath, \"utf-8\"),\n catch: (cause) => composeCollectionError(\"read\", cause),\n });\n yield* Effect.try({\n try: () => assertComposeSyntheticScope(raw),\n catch: (cause) => composeCollectionError(\"security\", cause),\n });\n yield* Effect.tryPromise({\n try: () => assertComposeEffectiveModelSecurity({\n composePath,\n env: opts.env,\n runComposeConfig,\n }),\n catch: (cause) => composeCollectionError(\"security\", cause),\n });\n const composeBytes = inspection.raw;\n const composeDir = dirname(composePath);\n // 目标平台是构建事实:硬编码一个默认值会让 arm64 宿主构出 arm64 镜像却按 amd64 记身份\n // (台账见 memory/buildkey-platform-declared-not-enforced.md)。\n const platform = opts.platform\n ? normalizeBuildPlatform(opts.platform)\n : yield* Effect.tryPromise({\n try: () => detectDockerBuildPlatform(opts.platformProbe ? { probe: opts.platformProbe } : undefined),\n catch: (cause) => composeCollectionError(\"identity\", cause),\n });\n const works: SandboxBuildWork[] = [];\n const buildKeys: BuildKey[] = [];\n const imageRefs: globalThis.Record<string, string> = {};\n let providerIdentityMarker: JsonValue | undefined;\n const bindMountDigests: globalThis.Record<string, string> = {};\n yield* Effect.forEach(hints.bindMounts ?? [], (mount) => pathContentDigest(mount.source).pipe(Effect.mapError((cause) => composeCollectionError(\"identity\", cause)), Effect.tap((digest) => Effect.sync(() => {\n const key = `${mount.label ?? \"bind mount\"}:${relativeIdentityPath(composeDir, mount.source)}`;\n bindMountDigests[key] = digest;\n })), Effect.asVoid), { concurrency: 1, discard: true });\n const configContents: globalThis.Record<string, string> = {};\n yield* Effect.forEach(inspection.localFiles, (ref) => {\n const absolute = resolvePath(composeDir, ref.path);\n return pathContentDigest(absolute).pipe(Effect.mapError((cause) => composeCollectionError(\"identity\", cause)), Effect.tap((digest) => Effect.sync(() => {\n const key = `${ref.kind}:${ref.label}:${relativeIdentityPath(composeDir, absolute)}`;\n configContents[key] = digest;\n })), Effect.asVoid);\n }, { concurrency: 1, discard: true });\n yield* Effect.forEach(inspection.services, (service) => Effect.gen(function* () {\n if (service.image !== undefined && service.build === undefined) {\n yield* Effect.sync(() => {\n imageRefs[service.name] = service.image!;\n if (!looksLikeDigestRef(service.image!)) {\n providerIdentityMarker = unresolvedProviderFingerprintMarker(\"sandbox.image-unresolved\", \"Compose references an image or FROM base that is not pinned to a sha256 digest.\");\n }\n });\n return;\n }\n const build = service.build;\n if (build === undefined)\n return;\n const contextDir = resolvePath(composeDir, build.context);\n const dockerfilePath = resolvePath(contextDir, build.dockerfile ?? \"Dockerfile\");\n const dockerfile = yield* Effect.tryPromise({\n try: () => readFile(dockerfilePath, \"utf-8\"),\n catch: () => new ComposeBuildCollectionError({\n stage: \"read\",\n message: `Compose service ${JSON.stringify(service.name)} build Dockerfile not found at ${dockerfilePath}`,\n }),\n });\n // Compose 声明的平台压过探测默认值:service `platform` 或单元素 `build.platforms` 是\n // 显式构建目标,必须逐服务进各自 BuildKey,否则声明不同平台的两个 case 会共用同一身份。\n const declaredPlatforms = build.platforms;\n if (declaredPlatforms !== undefined && declaredPlatforms.length > 1) {\n return yield* Effect.fail(new ComposeBuildCollectionError({\n stage: \"configuration\",\n message: `Compose service ${JSON.stringify(service.name)} declares build.platforms with ${declaredPlatforms.length} entries; ` +\n `NiceEval builds exactly one platform per BuildKey — keep a single entry (or the service-level platform) ` +\n `and do multi-platform publishing outside the task Compose`,\n }));\n }\n const declaredPlatform = declaredPlatforms?.[0] ?? service.platform;\n const workPlatform = declaredPlatform !== undefined ? normalizeBuildPlatform(declaredPlatform) : platform;\n const { contextDigest, contextFilterRules } = yield* buildContextIdentityContribution({\n contextDir,\n label: `compose service ${service.name}`,\n }).pipe(Effect.mapError((cause) => composeCollectionError(\"identity\", cause)));\n const collected = yield* Effect.try({\n try: () => {\n const base = dockerfileBaseIdentity(dockerfile, build.target);\n const buildKey = computeBuildKey({\n builderKind: BUILDER_KIND,\n builderRevision: COMPOSE_MATERIALIZER_REVISION,\n platform: workPlatform,\n dockerfile,\n contextDigest,\n fromDigest: base.fromDigest,\n contextFilterRules,\n ...(build.args !== undefined ? { buildArgs: build.args } : {}),\n ...(build.target !== undefined ? { target: build.target } : {}),\n });\n return { buildKey, base };\n },\n catch: (cause) => composeCollectionError(\"identity\", cause),\n });\n yield* Effect.sync(() => {\n if (collected.base.providerIdentityMarker !== undefined) {\n providerIdentityMarker = unresolvedProviderFingerprintMarker(\"sandbox.image-unresolved\", \"Compose references an image or FROM base that is not pinned to a sha256 digest.\");\n }\n buildKeys.push(collected.buildKey);\n const scopeId = materializationScopeId({\n providerFamily: \"docker\",\n authorityFingerprint: JSON.stringify(providerIdentityMarker ?? [\"docker\", \"default\"]),\n materializationProtocolVersion: 1,\n });\n works.push({\n ref: sandboxBuildRef(scopeId, collected.buildKey),\n scopeId,\n buildKey: collected.buildKey,\n provider: \"docker\",\n label: `compose:${service.name}`,\n inputs: {\n service: service.name,\n composeFile: composePath,\n // 进 BuildKey 的那个平台原样交给构建执行,provenance 里也留下这次构出的是哪种架构。\n platform: workPlatform,\n context: build.context,\n ...(build.dockerfile !== undefined ? { dockerfile: build.dockerfile } : {}),\n ...(build.args !== undefined ? { args: build.args } : {}),\n ...(build.target !== undefined ? { target: build.target } : {}),\n // 每条 work 自带插值 env:Run 级 provider 不得共用「最后一个 eval」的 env/baseDir。\n ...(opts.env !== undefined\n ? { composeEnv: opts.env, envNames: Object.keys(opts.env).sort() }\n : {}),\n contextFilterRules,\n },\n });\n });\n }), { concurrency: 1, discard: true });\n return {\n buildKeys,\n works,\n leakHints: hints,\n composeBytes,\n composePath,\n inspection,\n imageRefs,\n platform,\n ...(providerIdentityMarker === undefined ? {} : { providerIdentityMarker }),\n bindMountDigests,\n configContents,\n };\n });\n}\nfunction relativeIdentityPath(baseDir: string, path: string): string {\n const relative = relativePath(baseDir, path).split(sep).join(\"/\");\n return relative === \"\" ? \".\" : relative;\n}\n/**\n * Compose build 作为 SandboxBuildProvider:cache 查本地镜像 tag,miss 时 `docker compose build`。\n * works.inputs 需含 composeFile + service。\n */\nexport function dockerComposeBuildProvider(opts?: {\n readonly baseDir?: string;\n readonly env?: Readonly<globalThis.Record<string, string>>;\n /** 注入 compose CLI(测试用)。 */\n readonly runCompose?: typeof runDockerCompose;\n}): SandboxBuildProvider {\n const runCompose = opts?.runCompose ?? runDockerCompose;\n return {\n async lookup(work) {\n const tag = composeBuildTag(work.buildKey);\n const hit = await dockerImageExists(tag);\n return hit\n ? { _tag: \"Hit\", source: {\n locator: tag,\n source: \"cache\",\n acquireUse: async () => ({ locator: tag, release() { } }),\n release() { },\n } }\n : { _tag: \"Miss\" };\n },\n async build(work, ctx) {\n const inputs = work.inputs as globalThis.Record<string, unknown>;\n const composeFile = String(inputs.composeFile ?? \"\");\n const service = String(inputs.service ?? \"\");\n if (!composeFile || !service) {\n throw new Error(`compose build work ${work.buildKey.slice(0, 12)}… missing composeFile/service in inputs`);\n }\n const composeEnv = inputs.composeEnv !== undefined &&\n typeof inputs.composeEnv === \"object\" &&\n inputs.composeEnv !== null &&\n !Array.isArray(inputs.composeEnv)\n ? (inputs.composeEnv as Readonly<globalThis.Record<string, string>>)\n : opts?.env;\n // cwd 必须跟 compose 文件走,不能用 Run 级「最后一个 eval」的 baseDir。\n const cwd = dirname(composeFile);\n const tag = composeBuildTag(work.buildKey);\n // 平台传给 builder:BuildKey 里写的架构就是这次真正构出来的架构。\n const platform = typeof inputs.platform === \"string\" ? inputs.platform : undefined;\n const buildEnv = platform !== undefined ? { ...composeEnv, [DOCKER_PLATFORM_ENV]: platform } : composeEnv;\n await runCompose([\"-f\", composeFile, \"build\", \"--build-arg\", `NICEEVAL_BUILD_KEY=${work.buildKey}`, service], {\n cwd,\n env: buildEnv,\n signal: ctx.signal,\n timing: ctx,\n });\n // 构建产物以 service 镜像为准;再打 BuildKey tag 便于 lookup。\n const imageId = await composeServiceImageId(composeFile, service, cwd, composeEnv, runCompose);\n if (imageId)\n await dockerTag(imageId, tag);\n return {\n locator: tag,\n source: \"build\",\n acquireUse: async () => ({ locator: tag, release() { } }),\n release() { },\n };\n },\n };\n}\nfunction composeBuildTag(buildKey: BuildKey): string {\n return `niceeval-build:${buildKey.slice(0, 32)}`;\n}\n// ---------------------------------------------------------------------------\n// Overlay + materialize\n// ---------------------------------------------------------------------------\nexport interface ComposeOverlay {\n readonly yaml: string;\n readonly projectName: string;\n readonly overlayPath?: string;\n}\n/** 生成受管 overlay:labels / 可选 project 名。不改 dns、extra_hosts、volumes、depends_on。 */\nexport function buildComposeOverlay(opts: {\n readonly mainService: string;\n readonly evalId: string;\n readonly profile: string;\n readonly projectName?: string;\n readonly serviceNames: readonly string[];\n readonly managedWorkdir?: string;\n}): ComposeOverlay {\n const projectName = opts.projectName ??\n `ne-${slug(opts.evalId).slice(0, 24)}-${randomBytes(3).toString(\"hex\")}`;\n const lines: string[] = [\"services:\"];\n for (const name of opts.serviceNames) {\n lines.push(` ${name}:`);\n lines.push(` labels:`);\n lines.push(` niceeval.eval-id: ${JSON.stringify(opts.evalId)}`);\n lines.push(` niceeval.profile: ${JSON.stringify(opts.profile)}`);\n lines.push(` niceeval.case: \"compose\"`);\n lines.push(` niceeval.keep-candidate: \"true\"`);\n if (name === opts.mainService) {\n lines.push(` niceeval.main-service: \"true\"`);\n if (opts.managedWorkdir !== undefined) {\n lines.push(` working_dir: ${JSON.stringify(opts.managedWorkdir)}`);\n }\n }\n }\n return { yaml: `${lines.join(\"\\n\")}\\n`, projectName };\n}\n/**\n * 运行标识 overlay:把 `host` / `pid` / `startedAt` 打到本组的每个服务与每个受管网络上,\n * 让强杀后残留的整组资源(含主容器已消失、只剩网络的情形)能被孤儿核对认领\n * (契约见 docs/feature/sandbox/architecture.md「孤儿核对」)。\n *\n * 与受管 overlay 分成两份文件是因为它逐次运行都不同(pid、时刻),混进受管 overlay 会让\n * caseKey 每次都变、携带与缓存全部失效——caseKey 只按受管 overlay 的字节算。\n */\nexport function buildComposeIdentityOverlay(opts: {\n readonly identity: RunIdentity;\n readonly serviceNames: readonly string[];\n readonly networkNames: readonly string[];\n}): string {\n const labels = dockerRunIdentityLabels(opts.identity);\n const labelLines = (indent: string) => Object.entries(labels).map(([k, v]) => `${indent}${k}: ${JSON.stringify(v)}`);\n const lines: string[] = [];\n if (opts.serviceNames.length > 0) {\n lines.push(\"services:\");\n for (const name of opts.serviceNames) {\n lines.push(` ${name}:`, ` labels:`, ...labelLines(\" \"));\n }\n }\n if (opts.networkNames.length > 0) {\n lines.push(\"networks:\");\n for (const name of opts.networkNames) {\n lines.push(` ${name}:`, ` labels:`, ...labelLines(\" \"));\n }\n }\n return lines.length > 0 ? `${lines.join(\"\\n\")}\\n` : \"\";\n}\nexport interface MaterializeComposeOpts {\n readonly ctx: SandboxMaterializeContext;\n readonly timeout?: number;\n readonly feedback?: ScopedFeedback;\n readonly baseDir?: string;\n readonly platform?: string;\n /** Runner 持有的 provisioning 并发槽;退避期间临时归还,避免网络抖动拖住整批并发。 */\n readonly provisionSlot?: ProvisionSlot;\n /** Compose 资源组的最长物理寿命;附着的主 Sandbox 用同一完成态做复用确认。 */\n readonly lifetimeMs?: number;\n /** 测试可注入:跳过真实 docker compose,直接返回已构造的主 Sandbox。 */\n readonly _testHooks?: {\n readonly runCompose?: typeof runDockerCompose;\n readonly attachMain?: (containerId: string) => Promise<import(\"./types.ts\").Sandbox>;\n readonly resolveMainContainerId?: (projectName: string, mainService: string) => Promise<string>;\n };\n}\n/** ProviderModule 的 typed Compose 完成态;不从作者输入逆向重建计划。 */\nexport interface DockerComposeProviderMaterializationPlan {\n readonly evalId: string;\n readonly profile: string;\n readonly mainService: string;\n readonly user?: string;\n readonly env: Readonly<Record<string, string>>;\n readonly pathPrepend?: readonly string[];\n readonly projectName?: string;\n readonly collection: ComposeBuildCollection;\n readonly caseKey: import(\"./identity.ts\").CaseKey;\n readonly identity: JsonValue;\n}\nexport class ComposeMaterializationError extends Data.TaggedError(\"ComposeMaterializationError\")<{\n readonly projectName: string;\n readonly message: string;\n readonly cause?: Error;\n}> {\n}\nfunction composeMaterializationError(projectName: string, cause: unknown): ComposeMaterializationError {\n const error = cause instanceof Error ? cause : new Error(String(cause));\n return new ComposeMaterializationError({\n projectName,\n message: error.message,\n cause: error,\n });\n}\nexport function materializeDockerComposeProviderCase(plan: DockerComposeProviderMaterializationPlan, opts: MaterializeComposeOpts): Effect.Effect<MaterializedSandboxCase, ComposeMaterializationError, Scope.Scope> {\n const collection = plan.collection;\n const overlay = buildComposeOverlay({\n mainService: plan.mainService,\n evalId: plan.evalId,\n profile: plan.profile,\n ...(plan.projectName !== undefined ? { projectName: plan.projectName } : {}),\n serviceNames: collection.inspection.services.map((s) => s.name),\n });\n return Effect.gen(function* () {\n const overlayDir = yield* Effect.tryPromise({\n try: () => mkdtemp(join(tmpdir(), \"niceeval-compose-\")),\n catch: (cause) => composeMaterializationError(overlay.projectName, cause),\n });\n const overlayPath = join(overlayDir, \"niceeval.overlay.yaml\");\n yield* Effect.tryPromise({\n try: () => writeFile(overlayPath, overlay.yaml, \"utf-8\"),\n catch: (cause) => composeMaterializationError(overlay.projectName, cause),\n });\n const identityYaml = buildComposeIdentityOverlay({\n identity: currentRunIdentity(),\n serviceNames: collection.inspection.services.map((s) => s.name),\n networkNames: collection.inspection.networkNames,\n });\n const identityPath = join(overlayDir, \"niceeval.identity.yaml\");\n if (identityYaml !== \"\") {\n yield* Effect.tryPromise({\n try: () => writeFile(identityPath, identityYaml, \"utf-8\"),\n catch: (cause) => composeMaterializationError(overlay.projectName, cause),\n });\n }\n const composeFiles = identityYaml !== \"\" ? [collection.composePath, overlayPath, identityPath] : [collection.composePath, overlayPath];\n const cwd = dirname(collection.composePath);\n // 平台与 BuildKey 同源:物化期这次 compose build 构出的架构必须与身份里写的一致。\n const env = {\n ...process.env,\n ...plan.env,\n COMPOSE_PROJECT_NAME: overlay.projectName,\n [DOCKER_PLATFORM_ENV]: collection.platform,\n };\n const runCompose = opts._testHooks?.runCompose ?? runDockerCompose;\n // Attempt 的前向 signal 到这里往往已经 timeout/abort。收尾必须拿一条新的、独立且有界的\n // signal;复用 opts.ctx.signal 会让 runDockerCompose 在真正执行 down 前立刻抛错,整组资源\n // 原地变孤儿。--timeout 给服务 5s 优雅退出,剩余 1.5s 留给 CLI 与网络/volume 删除;\n // runDockerCompose 再给 TERM 1s KILL grace,总上界 7.5s,严格短于 runner 的 8s 看门狗。\n const composeDown = () => runCompose([\n \"-p\",\n overlay.projectName,\n ...composeFileArgs(composeFiles),\n \"down\",\n \"--timeout\",\n \"5\",\n \"--volumes\",\n \"--remove-orphans\",\n ], { cwd, env, signal: AbortSignal.timeout(COMPOSE_STOP_TIMEOUT_MS) });\n let finalized = false;\n let finalizing: Promise<void> | undefined;\n const finalizer = async () => {\n if (finalized)\n return;\n if (finalizing !== undefined)\n return finalizing;\n const pending = (async () => {\n await composeDown();\n finalized = true;\n await rm(overlayDir, { recursive: true, force: true }).catch(() => { });\n })();\n finalizing = pending;\n try {\n await pending;\n }\n finally {\n // 失败回 Open,保留 overlay 供 registry 强清路径重试;成功才永久封口。\n if (finalizing === pending)\n finalizing = undefined;\n }\n };\n // 清理失败只诊断、不覆盖原 Cause;finalizer 幂等,成功路径的 stop 与失败路径的 down 共用一份。\n const finalizerEffect = Effect.tryPromise({\n try: () => finalizer(),\n catch: (cause) => cause,\n }).pipe(Effect.catchAll((cleanupError) => Effect.sync(() => {\n opts.feedback?.diagnostic({\n code: \"sandbox-stop-failed\",\n level: \"warning\",\n message: `Compose project ${overlay.projectName} cleanup failed after materialization error: ` +\n `${cleanupError instanceof Error ? cleanupError.message : String(cleanupError)}. ` +\n \"Inspect with `niceeval sandbox list --orphans`; remove with `niceeval sandbox prune`.\",\n data: {\n provider: \"docker\",\n projectName: overlay.projectName,\n sandboxId: overlay.projectName,\n },\n dedupeKey: `sandbox-stop-failed:${overlay.projectName}`,\n });\n })));\n // 重试前对账先清半启动组:down 失败只诊断、继续重试,不覆盖原始 create 错误\n // (cleanup 失败不升格为 Cause;withProvisionRetry 的 reconcile 通道是 never 错误)。\n const composeDownReconcile = Effect.tryPromise({\n try: () => composeDown(),\n catch: (cause) => cause,\n }).pipe(Effect.asVoid);\n // 资源可能创建:先原子登记 best-effort finalizer。此后无论是中断还是失败,外层 Scope\n // 关闭都会执行 compose down;失败路径还会先显式跑一遍(幂等),保持「先 down 再采证」的顺序。\n yield* Effect.addFinalizer(() => finalizerEffect);\n const failEnriched = (cause: unknown): Effect.Effect<never, ComposeMaterializationError> => Effect.tryPromise({\n try: () => enrichComposeError(cause, overlay.projectName, composeFiles, cwd, env, runCompose),\n catch: (enrichCause) => enrichCause,\n }).pipe(Effect.matchEffect({\n onFailure: (enrichCause) => Effect.fail(composeMaterializationError(overlay.projectName, enrichCause)),\n onSuccess: (enriched) => Effect.fail(composeMaterializationError(overlay.projectName, enriched)),\n }));\n return yield* Effect.gen(function* () {\n if (opts.ctx.signal?.aborted)\n return yield* Effect.interrupt;\n // dockerode 是 optional peer:compose 实现在 materialize 热路径才加载 docker.ts。\n const { classifyProvisionError, DockerSandbox } = yield* Effect.tryPromise({\n try: () => __niceevalDynamicImport(\"./docker.cjs\"),\n catch: (cause) => cause,\n });\n // 构建:协调器 locator 命中时仍跑一次 compose build——BuildKit cache 很快,\n // 且把 BuildKey tag 对齐回本 eval 的 image: 插值名(避免多题共用 provider env 时串镜像)。\n const buildServices = collection.inspection.services.filter((s) => s.build !== undefined).map((s) => s.name);\n if (buildServices.length > 0) {\n yield* withProvisionRetry(Effect.tryPromise({\n try: () => runCompose([\"-p\", overlay.projectName, ...composeFileArgs(composeFiles), \"build\", ...buildServices], {\n cwd,\n env,\n signal: opts.ctx.signal,\n }),\n catch: (cause) => cause,\n }), classifyProvisionError, opts.provisionSlot, opts.feedback, \n // 构建产物没有计费实例泄漏面;同一 BuildKey 重建本身就是对账。\n Effect.void);\n }\n yield* withProvisionRetry(Effect.tryPromise({\n try: () => runCompose([\"-p\", overlay.projectName, ...composeFileArgs(composeFiles), \"up\", \"--detach\", \"--wait\", \"--remove-orphans\"], { cwd, env, signal: opts.ctx.signal }),\n catch: (cause) => cause,\n }), classifyProvisionError, opts.provisionSlot, opts.feedback, \n // projectName 与 overlay 在整个重试闭包内固定;先清掉半启动组,再收敛同一个 project。\n composeDownReconcile);\n const resolveId = opts._testHooks?.resolveMainContainerId ??\n ((project: string, service: string) => resolveComposeContainerId(project, service, composeFiles, cwd, env));\n const containerId = yield* Effect.tryPromise({\n try: () => resolveId(overlay.projectName, plan.mainService),\n catch: (cause) => cause,\n });\n const attach = opts._testHooks?.attachMain ??\n ((id: string) => DockerSandbox.attach(id, {\n timeout: opts.timeout,\n lifetimeMs: opts.lifetimeMs,\n feedback: opts.feedback,\n releaseMode: \"detach\",\n ...(plan.user !== undefined ? { user: plan.user } : {}),\n ...(plan.pathPrepend !== undefined ? { pathPrepend: plan.pathPrepend } : {}),\n }));\n const sandbox = yield* Effect.tryPromise({\n try: () => attach(containerId),\n catch: (cause) => cause,\n });\n const services = createComposeServiceController({\n projectName: overlay.projectName,\n composeFiles,\n cwd,\n env,\n runCompose,\n });\n const group: SandboxResourceGroup = {\n primary: { sandboxId: sandbox.sandboxId, provider: \"docker\" },\n resources: {\n kind: \"docker-compose\",\n projectName: overlay.projectName,\n composeFiles,\n mainService: plan.mainService,\n },\n stop: finalizer,\n entry: {\n provider: \"docker\",\n profile: plan.profile,\n primary: { sandboxId: sandbox.sandboxId, provider: \"docker\" },\n resources: {\n kind: \"docker-compose\",\n projectName: overlay.projectName,\n mainService: plan.mainService,\n },\n state: \"alive\",\n },\n };\n // 主 Sandbox.stop 走 detach;真正回收挂在 group.stop(= finalizer)。\n const originalStop = sandbox.stop.bind(sandbox);\n (sandbox as {\n stop: () => Promise<void>;\n }).stop = async () => {\n await originalStop();\n await finalizer();\n };\n const materialized: MaterializedSandboxCase = {\n sandbox,\n // 生产路径 attach 返回 raw DockerSandbox(自带 provider backend capabilities),直接作为\n // author backend;测试 hook 注入的普通 Sandbox 走 customSandboxBackend 显式适配,不回读\n // provider 私有成员。\n authorBackend: opts._testHooks?.attachMain === undefined\n ? (sandbox as DockerSandbox)\n : customSandboxBackend(sandbox),\n services,\n group,\n caseKind: \"compose\",\n caseKey: plan.caseKey,\n buildKeys: collection.buildKeys,\n identity: plan.identity,\n facts: {\n projectName: overlay.projectName,\n mainService: plan.mainService,\n composeFile: collection.composePath,\n containerId: sandbox.sandboxId,\n imageRefs: collection.imageRefs,\n },\n };\n return materialized;\n }).pipe(Effect.catchAll((cause) => Effect.gen(function* () {\n yield* finalizerEffect;\n if (isAbortError(cause) || opts.ctx.signal?.aborted)\n return yield* Effect.interrupt;\n return yield* failEnriched(cause);\n })));\n });\n}\nfunction composeFileArgs(files: readonly string[]): string[] {\n return files.flatMap((f) => [\"-f\", f]);\n}\nfunction createComposeServiceController(opts: {\n readonly projectName: string;\n readonly composeFiles: readonly string[];\n readonly cwd: string;\n readonly env: NodeJS.ProcessEnv;\n readonly runCompose: typeof runDockerCompose;\n}): ServiceController {\n const base = [\"-p\", opts.projectName, ...composeFileArgs(opts.composeFiles)];\n return {\n async exec(service, command) {\n const result = await opts.runCompose([...base, \"exec\", \"-T\", service, ...command], {\n cwd: opts.cwd,\n env: opts.env,\n });\n return { stdout: result.stdout, stderr: result.stderr, exitCode: result.exitCode };\n },\n async collectLogs(service) {\n const result = await opts.runCompose([...base, \"logs\", \"--no-color\", \"--no-log-prefix\", service], {\n cwd: opts.cwd,\n env: opts.env,\n allowNonZero: true,\n });\n return Buffer.from(`${result.stdout}${result.stderr}`);\n },\n async stop(service) {\n await opts.runCompose([...base, \"stop\", service], { cwd: opts.cwd, env: opts.env });\n },\n };\n}\nasync function enrichComposeError(e: unknown, projectName: string, composeFiles: readonly string[], cwd: string, env: NodeJS.ProcessEnv, runCompose: typeof runDockerCompose): Promise<never> {\n let evidence = \"\";\n try {\n const ps = await runCompose([\"-p\", projectName, ...composeFileArgs(composeFiles), \"ps\", \"-a\"], {\n cwd,\n env,\n allowNonZero: true,\n });\n const logs = await runCompose([\"-p\", projectName, ...composeFileArgs(composeFiles), \"logs\", \"--no-color\", \"--tail\", \"80\"], {\n cwd,\n env,\n allowNonZero: true,\n });\n evidence =\n `\\n--- compose ps ---\\n${ps.stdout || ps.stderr}` +\n `\\n--- compose logs (tail) ---\\n${logs.stdout || logs.stderr}`;\n }\n catch {\n // 采证失败不掩盖原错误\n }\n const msg = e instanceof Error ? e.message : String(e);\n throw new Error(`Compose environment failed for project ${projectName}: ${msg}${evidence}`, {\n cause: e instanceof Error ? e : undefined,\n });\n}\n// ---------------------------------------------------------------------------\n// docker / compose CLI\n// ---------------------------------------------------------------------------\nexport interface ComposeCommandResult {\n readonly stdout: string;\n readonly stderr: string;\n readonly exitCode: number;\n}\nexport async function runDockerCompose(args: readonly string[], opts: {\n readonly cwd: string;\n readonly env?: NodeJS.ProcessEnv | Readonly<globalThis.Record<string, string>>;\n readonly signal?: AbortSignal;\n readonly allowNonZero?: boolean;\n readonly timing?: SandboxBuildExecutionContext;\n}): Promise<ComposeCommandResult> {\n if (opts.signal?.aborted)\n throw abortError(opts.signal);\n return new Promise((resolve, reject) => {\n const child = spawn(\"docker\", [\"compose\", ...args], {\n cwd: opts.cwd,\n // 必须叠在 process.env 上:协调器若只传 Compose 插值表,裸 env 会丢掉 PATH → spawn docker ENOENT。\n env: { ...process.env, ...(opts.env as NodeJS.ProcessEnv | undefined) },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n let stdout = \"\";\n let stderr = \"\";\n let settled = false;\n let aborting: Error | undefined;\n let killTimer: ReturnType<typeof setTimeout> | undefined;\n const cleanup = () => {\n opts.signal?.removeEventListener(\"abort\", onAbort);\n if (killTimer !== undefined)\n clearTimeout(killTimer);\n };\n const rejectOnce = (error: Error) => {\n if (settled)\n return;\n settled = true;\n cleanup();\n reject(error);\n };\n const resolveOnce = (result: ComposeCommandResult) => {\n if (settled)\n return;\n settled = true;\n cleanup();\n resolve(result);\n };\n child.stdout?.on(\"data\", (c: Buffer) => {\n stdout += c.toString();\n });\n child.stderr?.on(\"data\", (c: Buffer) => {\n stderr += c.toString();\n });\n const onAbort = () => {\n aborting = abortError(opts.signal);\n child.kill(\"SIGTERM\");\n // close 事件本身不是可靠边界:CLI 或子进程若卡死,最多再等这段 grace,然后 KILL 并\n // 主动 reject,不能依赖一个可能永远不来的 close。\n killTimer = setTimeout(() => {\n child.kill(\"SIGKILL\");\n rejectOnce(aborting ?? abortError(opts.signal));\n }, COMPOSE_ABORT_KILL_GRACE_MS);\n };\n opts.signal?.addEventListener(\"abort\", onAbort, { once: true });\n child.on(\"error\", (err) => {\n rejectOnce(err);\n });\n child.on(\"close\", (code) => {\n if (aborting !== undefined) {\n rejectOnce(aborting);\n return;\n }\n const exitCode = code ?? 1;\n if (exitCode !== 0 && !opts.allowNonZero) {\n rejectOnce(new Error(`docker compose ${args.join(\" \")} failed (exit ${exitCode}):\\n${stderr || stdout}`.trimEnd()));\n return;\n }\n resolveOnce({ stdout, stderr, exitCode });\n });\n if (opts.signal?.aborted)\n onAbort();\n });\n}\nasync function resolveComposeContainerId(projectName: string, service: string, composeFiles: readonly string[], cwd: string, env: NodeJS.ProcessEnv): Promise<string> {\n const result = await runDockerCompose([\"-p\", projectName, ...composeFileArgs(composeFiles), \"ps\", \"-q\", \"--status\", \"running\", service], { cwd, env, allowNonZero: true });\n const id = result.stdout.trim().split(/\\s+/)[0];\n if (!id) {\n throw new Error(`Compose project ${projectName} has no running container for mainService ${JSON.stringify(service)}`);\n }\n return id;\n}\nasync function composeServiceImageId(composeFile: string, service: string, cwd: string, env?: Readonly<globalThis.Record<string, string>>, runCompose: typeof runDockerCompose = runDockerCompose): Promise<string | undefined> {\n const result = await runCompose([\"-f\", composeFile, \"images\", \"-q\", service], {\n cwd,\n env: { ...process.env, ...env },\n allowNonZero: true,\n });\n const id = result.stdout.trim().split(/\\s+/)[0];\n return id || undefined;\n}\nasync function dockerImageExists(tag: string): Promise<boolean> {\n return new Promise((resolve) => {\n const child = spawn(\"docker\", [\"image\", \"inspect\", tag], { stdio: \"ignore\" });\n child.on(\"error\", () => resolve(false));\n child.on(\"close\", (code) => resolve(code === 0));\n });\n}\nasync function dockerTag(imageId: string, tag: string): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n const child = spawn(\"docker\", [\"tag\", imageId, tag], { stdio: \"ignore\" });\n child.on(\"error\", reject);\n child.on(\"close\", (code) => {\n if (code === 0)\n resolve();\n else\n reject(new Error(`docker tag ${imageId} ${tag} failed (exit ${code})`));\n });\n });\n}\nfunction slug(s: string): string {\n return s.replace(/[^a-zA-Z0-9]+/g, \"-\").replace(/^-|-$/g, \"\").toLowerCase() || \"eval\";\n}\nfunction abortError(signal?: AbortSignal, cause?: unknown): Error {\n const err = new Error(\"Compose operation aborted\");\n err.name = \"AbortError\";\n if (cause instanceof Error)\n (err as Error & {\n cause?: unknown;\n }).cause = cause;\n if (signal?.reason !== undefined)\n (err as Error & {\n cause?: unknown;\n }).cause ??= signal.reason;\n return err;\n}\nfunction isAbortError(e: unknown): boolean {\n return e instanceof Error && e.name === \"AbortError\";\n}\n// ---------------------------------------------------------------------------\n// 极简 YAML 映射解析(Compose 黑名单 / build / volumes 够用;不做完整 YAML 1.2)\n// ---------------------------------------------------------------------------\ntype YamlNode = null | boolean | number | string | YamlNode[] | {\n [k: string]: YamlNode;\n};\ntype ParseFrame = {\n kind: \"map\";\n indent: number;\n map: globalThis.Record<string, YamlNode>;\n} | {\n kind: \"seq\";\n indent: number;\n arr: YamlNode[];\n parentMap: globalThis.Record<string, YamlNode>;\n key: string;\n};\nfunction parseYamlMapping(text: string): globalThis.Record<string, YamlNode> {\n const lines = text.replace(/\\t/g, \" \").split(/\\r?\\n/);\n const root: globalThis.Record<string, YamlNode> = {};\n const stack: ParseFrame[] = [{ kind: \"map\", indent: -1, map: root }];\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i]!;\n if (/^\\s*(#|$)/.test(line))\n continue;\n const indent = line.match(/^ */)?.[0].length ?? 0;\n const trimmed = line.slice(indent);\n while (stack.length > 1 && indent <= stack[stack.length - 1]!.indent)\n stack.pop();\n const frame = stack[stack.length - 1]!;\n if (trimmed.startsWith(\"- \")) {\n if (frame.kind !== \"seq\")\n continue;\n const itemText = trimmed.slice(2).trim();\n if (itemText.includes(\":\") && !/^['\"]/.test(itemText) && !itemText.startsWith(\"[\")) {\n // 体积条目里的 `./a:/b:ro` 含冒号但不是 map item——短语法 volume 当标量。\n const looksLikeVolume = /^[^:]+:[^:]+(?::[^:]+)?$/.test(itemText) && !/^\\w+:\\s/.test(itemText);\n if (looksLikeVolume || /^\\$\\{/.test(itemText) || itemText.includes(\"/\")) {\n frame.arr.push(parseScalar(itemText));\n }\n else {\n const itemMap: globalThis.Record<string, YamlNode> = {};\n const colon = itemText.indexOf(\":\");\n const k = itemText.slice(0, colon).trim();\n const v = itemText.slice(colon + 1).trim();\n itemMap[k] = v === \"\" ? {} : parseScalar(v);\n frame.arr.push(itemMap);\n stack.push({ kind: \"map\", indent, map: itemMap });\n }\n }\n else {\n frame.arr.push(parseScalar(itemText));\n }\n continue;\n }\n const colon = trimmed.indexOf(\":\");\n if (colon < 0)\n continue;\n const key = trimmed.slice(0, colon).trim();\n const rest = trimmed.slice(colon + 1).trim();\n const mapFrame = frame.kind === \"map\"\n ? frame\n : (() => {\n // 序列项内的嵌套 key:切回最近 map\n for (let s = stack.length - 1; s >= 0; s--) {\n if (stack[s]!.kind === \"map\")\n return stack[s] as Extract<ParseFrame, {\n kind: \"map\";\n }>;\n }\n return undefined;\n })();\n if (mapFrame === undefined)\n continue;\n if (rest === \"\" || rest === \"|\" || rest === \">\" || rest === \">-\" || rest === \"|-\") {\n const next = peekNextContent(lines, i + 1);\n if (next && next.trimmed.startsWith(\"- \") && next.indent > indent) {\n const arr: YamlNode[] = [];\n mapFrame.map[key] = arr;\n stack.push({ kind: \"seq\", indent, arr, parentMap: mapFrame.map, key });\n }\n else {\n const child: globalThis.Record<string, YamlNode> = {};\n mapFrame.map[key] = child;\n stack.push({ kind: \"map\", indent, map: child });\n }\n }\n else {\n mapFrame.map[key] = parseScalar(rest);\n }\n }\n return root;\n}\nfunction peekNextContent(lines: string[], from: number): {\n indent: number;\n trimmed: string;\n} | undefined {\n for (let i = from; i < lines.length; i++) {\n const line = lines[i]!;\n if (/^\\s*(#|$)/.test(line))\n continue;\n const indent = line.match(/^ */)?.[0].length ?? 0;\n return { indent, trimmed: line.slice(indent) };\n }\n return undefined;\n}\nfunction parseScalar(text: string): YamlNode {\n if (text === \"null\" || text === \"~\")\n return null;\n if (text === \"true\")\n return true;\n if (text === \"false\")\n return false;\n if (/^-?\\d+(\\.\\d+)?$/.test(text))\n return Number(text);\n if ((text.startsWith('\"') && text.endsWith('\"')) ||\n (text.startsWith(\"'\") && text.endsWith(\"'\"))) {\n return text.slice(1, -1);\n }\n // 内联序列: [ \"a\", \"b\" ]\n if (text.startsWith(\"[\") && text.endsWith(\"]\")) {\n const inner = text.slice(1, -1).trim();\n if (inner === \"\")\n return [];\n return inner.split(\",\").map((p) => parseScalar(p.trim()));\n }\n return text;\n}\nexport type { JsonValue };\n"]}