@jetta/cargo-stabilizer 0.1.0-15 → 0.1.0-3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/CHANGELOG.md +1 -35
  2. package/README.md +16 -62
  3. package/build/core/adapters/axle_adapter.d.ts +4 -5
  4. package/build/core/adapters/axle_adapter.d.ts.map +1 -1
  5. package/build/core/adapters/axle_adapter.js +23 -6
  6. package/build/core/adapters/coordinate_mapper.d.ts +5 -5
  7. package/build/core/adapters/coordinate_mapper.d.ts.map +1 -1
  8. package/build/core/adapters/coordinate_mapper.js +13 -13
  9. package/build/core/adapters/stability_adapter.d.ts +1 -1
  10. package/build/core/adapters/stability_adapter.d.ts.map +1 -1
  11. package/build/core/adapters/stability_adapter.js +1 -1
  12. package/build/core/candidates/build_candidate_context.d.ts +1 -1
  13. package/build/core/candidates/build_candidate_context.d.ts.map +1 -1
  14. package/build/core/candidates/build_candidate_context.js +1 -3
  15. package/build/core/candidates/candidate_context.d.ts +1 -4
  16. package/build/core/candidates/candidate_context.d.ts.map +1 -1
  17. package/build/core/candidates/candidate_generator.d.ts +1 -1
  18. package/build/core/candidates/candidate_generator.d.ts.map +1 -1
  19. package/build/core/candidates/candidate_generator.js +16 -33
  20. package/build/core/candidates/candidate_validation.d.ts +12 -0
  21. package/build/core/candidates/candidate_validation.d.ts.map +1 -1
  22. package/build/core/candidates/candidate_validation.js +26 -40
  23. package/build/core/candidates/rank_candidates.d.ts.map +1 -1
  24. package/build/core/candidates/rank_candidates.js +0 -3
  25. package/build/core/evaluation/evaluation_context.d.ts +1 -3
  26. package/build/core/evaluation/evaluation_context.d.ts.map +1 -1
  27. package/build/core/evaluation/state_evaluator.d.ts +10 -13
  28. package/build/core/evaluation/state_evaluator.d.ts.map +1 -1
  29. package/build/core/evaluation/state_evaluator.js +15 -19
  30. package/build/core/factory/read_stabilizer_config.d.ts +2 -5
  31. package/build/core/factory/read_stabilizer_config.d.ts.map +1 -1
  32. package/build/core/factory/read_stabilizer_config.js +25 -6
  33. package/build/core/filters/loose_item_filter.d.ts +2 -2
  34. package/build/core/filters/loose_item_filter.d.ts.map +1 -1
  35. package/build/core/filters/loose_item_filter.js +3 -3
  36. package/build/core/geometry/box_geometry.d.ts +1 -17
  37. package/build/core/geometry/box_geometry.d.ts.map +1 -1
  38. package/build/core/geometry/box_geometry.js +2 -67
  39. package/build/core/move/apply_move.d.ts +1 -3
  40. package/build/core/move/apply_move.d.ts.map +1 -1
  41. package/build/core/move/apply_move.js +1 -1
  42. package/build/core/orchestration/StabilizerFlow.d.ts +1 -2
  43. package/build/core/orchestration/StabilizerFlow.d.ts.map +1 -1
  44. package/build/core/orchestration/StabilizerFlow.js +1 -1
  45. package/build/core/orchestration/build_reorder_context.d.ts +1 -1
  46. package/build/core/orchestration/build_reorder_context.d.ts.map +1 -1
  47. package/build/core/orchestration/build_reorder_context.js +12 -10
  48. package/build/core/strategies/reorder/BeamSearchReorder.d.ts +1 -1
  49. package/build/core/strategies/reorder/BeamSearchReorder.d.ts.map +1 -1
  50. package/build/core/strategies/reorder/BeamSearchReorder.js +16 -15
  51. package/build/core/strategies/reorder/GeneticReorder.d.ts +1 -1
  52. package/build/core/strategies/reorder/GeneticReorder.d.ts.map +1 -1
  53. package/build/core/strategies/reorder/GeneticReorder.js +1 -2
  54. package/build/core/strategies/reorder/GravityCompaction.d.ts +1 -1
  55. package/build/core/strategies/reorder/GravityCompaction.d.ts.map +1 -1
  56. package/build/core/strategies/reorder/GravityCompaction.js +2 -2
  57. package/build/core/strategies/reorder/GreedyReorder.d.ts +1 -1
  58. package/build/core/strategies/reorder/GreedyReorder.d.ts.map +1 -1
  59. package/build/core/strategies/reorder/ReorderStrategy.d.ts +1 -3
  60. package/build/core/strategies/reorder/ReorderStrategy.d.ts.map +1 -1
  61. package/build/core/strategies/reorder/SimulatedAnnealingReorder.d.ts +1 -1
  62. package/build/core/strategies/reorder/SimulatedAnnealingReorder.d.ts.map +1 -1
  63. package/build/core/strategies/reorder/SimulatedAnnealingReorder.js +5 -14
  64. package/build/core/strategies/reorder/anneal_helpers.d.ts +1 -1
  65. package/build/core/strategies/reorder/anneal_helpers.d.ts.map +1 -1
  66. package/build/core/strategies/reorder/anneal_helpers.js +1 -1
  67. package/build/core/strategies/reorder/apply_if_gates_pass.d.ts +1 -1
  68. package/build/core/strategies/reorder/apply_if_gates_pass.d.ts.map +1 -1
  69. package/build/core/strategies/reorder/beam_context.d.ts +1 -2
  70. package/build/core/strategies/reorder/beam_context.d.ts.map +1 -1
  71. package/build/core/strategies/reorder/genetic/Chromosome.d.ts +1 -1
  72. package/build/core/strategies/reorder/genetic/Chromosome.d.ts.map +1 -1
  73. package/build/core/strategies/reorder/genetic/Chromosome.js +2 -2
  74. package/build/core/strategies/reorder/greedy_improvement.d.ts +1 -1
  75. package/build/core/strategies/reorder/greedy_improvement.d.ts.map +1 -1
  76. package/build/core/strategies/reorder/greedy_improvement.js +4 -5
  77. package/build/core/validation/parse_stabilizer_input.d.ts +8 -0
  78. package/build/core/validation/parse_stabilizer_input.d.ts.map +1 -0
  79. package/build/core/validation/parse_stabilizer_input.js +20 -0
  80. package/build/core/validation/schemas/stabilizer_config_schema.d.ts +2 -6
  81. package/build/core/validation/schemas/stabilizer_config_schema.d.ts.map +1 -1
  82. package/build/core/validation/schemas/stabilizer_config_schema.js +2 -6
  83. package/build/core/validation/schemas/stabilizer_input_schema.d.ts +110 -0
  84. package/build/core/validation/schemas/stabilizer_input_schema.d.ts.map +1 -0
  85. package/build/core/validation/schemas/stabilizer_input_schema.js +34 -0
  86. package/build/core/validation/schemas/stabilizer_output_schema.d.ts +13 -0
  87. package/build/core/validation/schemas/stabilizer_output_schema.d.ts.map +1 -0
  88. package/build/core/validation/schemas/stabilizer_output_schema.js +6 -0
  89. package/build/core/waypoint/build_waypoint_zones.d.ts +1 -1
  90. package/build/core/waypoint/build_waypoint_zones.d.ts.map +1 -1
  91. package/build/core/waypoint/build_waypoint_zones.js +2 -2
  92. package/build/core/waypoint/preserves_waypoint_order.d.ts +1 -1
  93. package/build/core/waypoint/preserves_waypoint_order.d.ts.map +1 -1
  94. package/build/core/waypoint/validate_waypoint_ids.d.ts +1 -1
  95. package/build/core/waypoint/validate_waypoint_ids.d.ts.map +1 -1
  96. package/build/index.d.ts +7 -15
  97. package/build/index.d.ts.map +1 -1
  98. package/build/index.js +11 -42
  99. package/package.json +10 -12
  100. package/build/core/adapters/axle_load_evaluation.d.ts +0 -8
  101. package/build/core/adapters/axle_load_evaluation.d.ts.map +0 -1
  102. package/build/core/adapters/axle_load_evaluation.js +0 -1
  103. package/build/core/adapters/build_axle_request.d.ts +0 -8
  104. package/build/core/adapters/build_axle_request.d.ts.map +0 -1
  105. package/build/core/adapters/build_axle_request.js +0 -67
  106. package/build/core/adapters/compute_axle_excess_kg.d.ts +0 -8
  107. package/build/core/adapters/compute_axle_excess_kg.d.ts.map +0 -1
  108. package/build/core/adapters/compute_axle_excess_kg.js +0 -19
  109. package/build/core/adapters/empty_space_adapter.d.ts +0 -10
  110. package/build/core/adapters/empty_space_adapter.d.ts.map +0 -1
  111. package/build/core/adapters/empty_space_adapter.js +0 -24
  112. package/build/core/adapters/evaluate_axle_load.d.ts +0 -10
  113. package/build/core/adapters/evaluate_axle_load.d.ts.map +0 -1
  114. package/build/core/adapters/evaluate_axle_load.js +0 -32
  115. package/build/core/adapters/map_item_to_positioned_cube.d.ts +0 -9
  116. package/build/core/adapters/map_item_to_positioned_cube.d.ts.map +0 -1
  117. package/build/core/adapters/map_item_to_positioned_cube.js +0 -16
  118. package/build/core/adapters/map_item_to_stacking_item.d.ts +0 -14
  119. package/build/core/adapters/map_item_to_stacking_item.d.ts.map +0 -1
  120. package/build/core/adapters/map_item_to_stacking_item.js +0 -40
  121. package/build/core/adapters/run_axle_calculator.d.ts +0 -16
  122. package/build/core/adapters/run_axle_calculator.d.ts.map +0 -1
  123. package/build/core/adapters/run_axle_calculator.js +0 -37
  124. package/build/core/candidates/collect_container_slots.d.ts +0 -16
  125. package/build/core/candidates/collect_container_slots.d.ts.map +0 -1
  126. package/build/core/candidates/collect_container_slots.js +0 -20
  127. package/build/core/candidates/enumerate_empty_space_slots.d.ts +0 -15
  128. package/build/core/candidates/enumerate_empty_space_slots.d.ts.map +0 -1
  129. package/build/core/candidates/enumerate_empty_space_slots.js +0 -44
  130. package/build/core/candidates/enumerate_supporter_top_slots.d.ts +0 -11
  131. package/build/core/candidates/enumerate_supporter_top_slots.d.ts.map +0 -1
  132. package/build/core/candidates/enumerate_supporter_top_slots.js +0 -36
  133. package/build/core/candidates/is_candidate_stacking_valid.d.ts +0 -14
  134. package/build/core/candidates/is_candidate_stacking_valid.d.ts.map +0 -1
  135. package/build/core/candidates/is_candidate_stacking_valid.js +0 -43
  136. package/build/core/candidates/is_elevated_on_supporter_origin.d.ts +0 -14
  137. package/build/core/candidates/is_elevated_on_supporter_origin.d.ts.map +0 -1
  138. package/build/core/candidates/is_elevated_on_supporter_origin.js +0 -28
  139. package/build/core/constants/TieRatioOrientation.d.ts +0 -6
  140. package/build/core/constants/TieRatioOrientation.d.ts.map +0 -1
  141. package/build/core/constants/TieRatioOrientation.js +0 -5
  142. package/build/core/evaluation/compare_search_states.d.ts +0 -12
  143. package/build/core/evaluation/compare_search_states.d.ts.map +0 -1
  144. package/build/core/evaluation/compare_search_states.js +0 -12
  145. package/build/core/evaluation/compute_reorder_objective.d.ts +0 -13
  146. package/build/core/evaluation/compute_reorder_objective.d.ts.map +0 -1
  147. package/build/core/evaluation/compute_reorder_objective.js +0 -13
  148. package/build/core/evaluation/evaluate_search_gates.d.ts +0 -18
  149. package/build/core/evaluation/evaluate_search_gates.d.ts.map +0 -1
  150. package/build/core/evaluation/evaluate_search_gates.js +0 -30
  151. package/build/core/evaluation/evaluation_result.d.ts +0 -15
  152. package/build/core/evaluation/evaluation_result.d.ts.map +0 -1
  153. package/build/core/evaluation/evaluation_result.js +0 -1
  154. package/build/core/evaluation/genetic_fitness.d.ts +0 -9
  155. package/build/core/evaluation/genetic_fitness.d.ts.map +0 -1
  156. package/build/core/evaluation/genetic_fitness.js +0 -16
  157. package/build/core/evaluation/is_non_axle_gates_pass.d.ts +0 -8
  158. package/build/core/evaluation/is_non_axle_gates_pass.d.ts.map +0 -1
  159. package/build/core/evaluation/is_non_axle_gates_pass.js +0 -8
  160. package/build/core/evaluation/is_search_trial_admissible.d.ts +0 -10
  161. package/build/core/evaluation/is_search_trial_admissible.d.ts.map +0 -1
  162. package/build/core/evaluation/is_search_trial_admissible.js +0 -17
  163. package/build/core/evaluation/is_waypoint_order_valid.d.ts +0 -10
  164. package/build/core/evaluation/is_waypoint_order_valid.d.ts.map +0 -1
  165. package/build/core/evaluation/is_waypoint_order_valid.js +0 -14
  166. package/build/core/exceptions/AxleCalculationError.d.ts +0 -4
  167. package/build/core/exceptions/AxleCalculationError.d.ts.map +0 -1
  168. package/build/core/exceptions/AxleCalculationError.js +0 -6
  169. package/build/core/exceptions/InvalidStabilizerOutputError.d.ts +0 -4
  170. package/build/core/exceptions/InvalidStabilizerOutputError.d.ts.map +0 -1
  171. package/build/core/exceptions/InvalidStabilizerOutputError.js +0 -6
  172. package/build/core/factory/read_stabilizer_config_helpers.d.ts +0 -32
  173. package/build/core/factory/read_stabilizer_config_helpers.d.ts.map +0 -1
  174. package/build/core/factory/read_stabilizer_config_helpers.js +0 -73
  175. package/build/core/filters/collect_movable_items.d.ts +0 -18
  176. package/build/core/filters/collect_movable_items.d.ts.map +0 -1
  177. package/build/core/filters/collect_movable_items.js +0 -53
  178. package/build/core/filters/collect_pinned_floor_tie_ratio_group_ids.d.ts +0 -8
  179. package/build/core/filters/collect_pinned_floor_tie_ratio_group_ids.d.ts.map +0 -1
  180. package/build/core/filters/collect_pinned_floor_tie_ratio_group_ids.js +0 -41
  181. package/build/core/filters/is_item_on_cm_floor.d.ts +0 -8
  182. package/build/core/filters/is_item_on_cm_floor.d.ts.map +0 -1
  183. package/build/core/filters/is_item_on_cm_floor.js +0 -9
  184. package/build/core/geometry/has_penetrating_overlap.d.ts +0 -9
  185. package/build/core/geometry/has_penetrating_overlap.d.ts.map +0 -1
  186. package/build/core/geometry/has_penetrating_overlap.js +0 -27
  187. package/build/core/orchestration/build_milkrun_bands_from_config.d.ts +0 -13
  188. package/build/core/orchestration/build_milkrun_bands_from_config.d.ts.map +0 -1
  189. package/build/core/orchestration/build_milkrun_bands_from_config.js +0 -14
  190. package/build/core/orchestration/read_primary_env.d.ts +0 -9
  191. package/build/core/orchestration/read_primary_env.d.ts.map +0 -1
  192. package/build/core/orchestration/read_primary_env.js +0 -13
  193. package/build/core/strategies/reorder/append_admitted_trial.d.ts +0 -11
  194. package/build/core/strategies/reorder/append_admitted_trial.d.ts.map +0 -1
  195. package/build/core/strategies/reorder/append_admitted_trial.js +0 -22
  196. package/build/core/strategies/reorder/is_improving_greedy_trial.d.ts +0 -10
  197. package/build/core/strategies/reorder/is_improving_greedy_trial.d.ts.map +0 -1
  198. package/build/core/strategies/reorder/is_improving_greedy_trial.js +0 -17
  199. package/build/core/strategies/reorder/select_beam_expansion_candidates.d.ts +0 -9
  200. package/build/core/strategies/reorder/select_beam_expansion_candidates.d.ts.map +0 -1
  201. package/build/core/strategies/reorder/select_beam_expansion_candidates.js +0 -28
  202. package/build/core/strategies/reorder/select_surviving_beam.d.ts +0 -11
  203. package/build/core/strategies/reorder/select_surviving_beam.d.ts.map +0 -1
  204. package/build/core/strategies/reorder/select_surviving_beam.js +0 -13
  205. package/build/core/validation/contract/cargo_movement_wire_field_map.d.ts +0 -71
  206. package/build/core/validation/contract/cargo_movement_wire_field_map.d.ts.map +0 -1
  207. package/build/core/validation/contract/cargo_movement_wire_field_map.js +0 -77
  208. package/build/core/validation/contract/cargo_movement_wire_mapper.d.ts +0 -14
  209. package/build/core/validation/contract/cargo_movement_wire_mapper.d.ts.map +0 -1
  210. package/build/core/validation/contract/cargo_movement_wire_mapper.js +0 -43
  211. package/build/core/validation/contract/format_zod_error.d.ts +0 -8
  212. package/build/core/validation/contract/format_zod_error.d.ts.map +0 -1
  213. package/build/core/validation/contract/format_zod_error.js +0 -11
  214. package/build/core/validation/contract/index.d.ts +0 -9
  215. package/build/core/validation/contract/index.d.ts.map +0 -1
  216. package/build/core/validation/contract/index.js +0 -8
  217. package/build/core/validation/contract/map_contract_to_wire_shape.d.ts +0 -3
  218. package/build/core/validation/contract/map_contract_to_wire_shape.d.ts.map +0 -1
  219. package/build/core/validation/contract/map_contract_to_wire_shape.js +0 -33
  220. package/build/core/validation/contract/map_input_config.d.ts +0 -9
  221. package/build/core/validation/contract/map_input_config.d.ts.map +0 -1
  222. package/build/core/validation/contract/map_input_config.js +0 -40
  223. package/build/core/validation/contract/map_wire_input_to_contract_shape.d.ts +0 -2
  224. package/build/core/validation/contract/map_wire_input_to_contract_shape.d.ts.map +0 -1
  225. package/build/core/validation/contract/map_wire_input_to_contract_shape.js +0 -66
  226. package/build/core/validation/contract/map_wire_item_stacking.d.ts +0 -7
  227. package/build/core/validation/contract/map_wire_item_stacking.d.ts.map +0 -1
  228. package/build/core/validation/contract/map_wire_item_stacking.js +0 -40
  229. package/build/core/validation/contract/map_wire_item_to_contract.d.ts +0 -8
  230. package/build/core/validation/contract/map_wire_item_to_contract.d.ts.map +0 -1
  231. package/build/core/validation/contract/map_wire_item_to_contract.js +0 -51
  232. package/build/core/validation/contract/parse_stabilizer_input.d.ts +0 -90
  233. package/build/core/validation/contract/parse_stabilizer_input.d.ts.map +0 -1
  234. package/build/core/validation/contract/parse_stabilizer_input.js +0 -28
  235. package/build/core/validation/contract/parse_stabilizer_output.d.ts +0 -79
  236. package/build/core/validation/contract/parse_stabilizer_output.d.ts.map +0 -1
  237. package/build/core/validation/contract/parse_stabilizer_output.js +0 -24
  238. package/build/core/validation/contract/reject_forbidden_input_fields.d.ts +0 -6
  239. package/build/core/validation/contract/reject_forbidden_input_fields.d.ts.map +0 -1
  240. package/build/core/validation/contract/reject_forbidden_input_fields.js +0 -53
  241. package/build/core/validation/contract/stabilizer_domain_schema.d.ts +0 -72
  242. package/build/core/validation/contract/stabilizer_domain_schema.d.ts.map +0 -1
  243. package/build/core/validation/contract/stabilizer_domain_schema.js +0 -42
  244. package/build/core/validation/contract/stabilizer_env_schema.d.ts +0 -112
  245. package/build/core/validation/contract/stabilizer_env_schema.d.ts.map +0 -1
  246. package/build/core/validation/contract/stabilizer_env_schema.js +0 -38
  247. package/build/core/validation/contract/stabilizer_input_schema.d.ts +0 -80
  248. package/build/core/validation/contract/stabilizer_input_schema.d.ts.map +0 -1
  249. package/build/core/validation/contract/stabilizer_input_schema.js +0 -11
  250. package/build/core/validation/contract/stabilizer_item_schema.d.ts +0 -25
  251. package/build/core/validation/contract/stabilizer_item_schema.d.ts.map +0 -1
  252. package/build/core/validation/contract/stabilizer_item_schema.js +0 -23
  253. package/build/core/validation/contract/stabilizer_output_schema.d.ts +0 -134
  254. package/build/core/validation/contract/stabilizer_output_schema.d.ts.map +0 -1
  255. package/build/core/validation/contract/stabilizer_output_schema.js +0 -16
  256. package/build/core/validation/contract/uniquify_contract_item_ids.d.ts +0 -14
  257. package/build/core/validation/contract/uniquify_contract_item_ids.d.ts.map +0 -1
  258. package/build/core/validation/contract/uniquify_contract_item_ids.js +0 -54
  259. package/build/core/validation/contract/wire_mapper_record_utils.d.ts +0 -34
  260. package/build/core/validation/contract/wire_mapper_record_utils.d.ts.map +0 -1
  261. package/build/core/validation/contract/wire_mapper_record_utils.js +0 -66
  262. package/build/core/waypoint/milkrun_wall_reservation.d.ts +0 -24
  263. package/build/core/waypoint/milkrun_wall_reservation.d.ts.map +0 -1
  264. package/build/core/waypoint/milkrun_wall_reservation.js +0 -57
  265. package/build/core/waypoint/milkrun_wall_reservation_helpers.d.ts +0 -15
  266. package/build/core/waypoint/milkrun_wall_reservation_helpers.d.ts.map +0 -1
  267. package/build/core/waypoint/milkrun_wall_reservation_helpers.js +0 -48
  268. package/build/core/waypoint/milkrun_wall_reservation_types.d.ts +0 -16
  269. package/build/core/waypoint/milkrun_wall_reservation_types.d.ts.map +0 -1
  270. package/build/core/waypoint/milkrun_wall_reservation_types.js +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"evaluation_context.d.ts","sourceRoot":"","sources":["../../../src/core/evaluation/evaluation_context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,oDAAoD,CAAA;AAC5G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAA;AACzF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAA;AAElF,MAAM,WAAW,sBAAsB;IAEnC,GAAG,EAAE,aAAa,CAAA;IAClB,WAAW,EAAE,YAAY,EAAE,CAAA;IAC3B,MAAM,EAAE,gBAAgB,CAAA;IACxB,aAAa,EAAE,YAAY,CAAA;IAC3B,mBAAmB,EAAE,mBAAmB,EAAE,CAAA;IAC1C,wBAAwB,EAAE,mBAAmB,EAAE,CAAA;CAClD"}
1
+ {"version":3,"file":"evaluation_context.d.ts","sourceRoot":"","sources":["../../../src/core/evaluation/evaluation_context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,kDAAkD,CAAA;AAC1G,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAA;AACzF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAE/D,MAAM,WAAW,sBAAsB;IAEnC,GAAG,EAAE,aAAa,CAAA;IAClB,WAAW,EAAE,YAAY,EAAE,CAAA;IAC3B,MAAM,EAAE,gBAAgB,CAAA;IACxB,aAAa,EAAE,YAAY,CAAA;IAC3B,mBAAmB,EAAE,mBAAmB,EAAE,CAAA;CAC7C"}
@@ -1,8 +1,15 @@
1
- import type { StabilizerContainer } from '../validation/contract/stabilizer_domain_schema.js';
1
+ import type { StabilizerContainer } from '../validation/schemas/stabilizer_input_schema.js';
2
+ import { type StabilityEvaluation } from '../adapters/stability_adapter.js';
2
3
  import type { StateEvaluationContext } from './evaluation_context.js';
3
4
  import type { ReorderContext } from '../strategies/reorder/ReorderStrategy.js';
4
- import type { EvaluationResult } from './evaluation_result.js';
5
- export type { EvaluationResult };
5
+ export interface EvaluationResult {
6
+ stability: StabilityEvaluation;
7
+ objective: number;
8
+ transport_floor_valid: boolean;
9
+ axle_valid: boolean;
10
+ waypoint_valid: boolean;
11
+ all_gates_pass: boolean;
12
+ }
6
13
  /**
7
14
  * Evaluates a container layout against all stabilizer gates.
8
15
  * @param containers - Container layout to evaluate.
@@ -29,14 +36,4 @@ export declare function evaluation_context_from_reorder(context: ReorderContext)
29
36
  * @returns Deep clone.
30
37
  */
31
38
  export declare function clone_baseline(containers: StabilizerContainer[]): StabilizerContainer[];
32
- /**
33
- * Evaluates organization constraint gates without stability or axle checks.
34
- * @param containers - Container layout to evaluate.
35
- * @param context - Evaluation context.
36
- * @returns Waypoint and milkrun gate flags.
37
- */
38
- export declare function evaluate_organization_gates(containers: StabilizerContainer[], context: StateEvaluationContext): {
39
- waypoint_valid: boolean;
40
- milkrun_valid: boolean;
41
- };
42
39
  //# sourceMappingURL=state_evaluator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"state_evaluator.d.ts","sourceRoot":"","sources":["../../../src/core/evaluation/state_evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAA;AAG7F,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAA;AAI9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE9D,YAAY,EAAE,gBAAgB,EAAE,CAAA;AAEhC;;;;;GAKG;AACH,wBAAgB,cAAc,CAC1B,UAAU,EAAE,mBAAmB,EAAE,EACjC,OAAO,EAAE,sBAAsB,GAChC,gBAAgB,CAUlB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACjC,KAAK,EAAE,mBAAmB,EAAE,EAC5B,OAAO,EAAE,sBAAsB,GAChC,gBAAgB,CAGlB;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,cAAc,GAAG,sBAAsB,CAU/F;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,mBAAmB,EAAE,GAAG,mBAAmB,EAAE,CAGvF;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACvC,UAAU,EAAE,mBAAmB,EAAE,EACjC,OAAO,EAAE,sBAAsB,GAChC;IAAE,cAAc,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,OAAO,CAAA;CAAE,CAMrD"}
1
+ {"version":3,"file":"state_evaluator.d.ts","sourceRoot":"","sources":["../../../src/core/evaluation/state_evaluator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAA;AAC3F,OAAO,EAGH,KAAK,mBAAmB,EAC3B,MAAM,kCAAkC,CAAA;AAIzC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAA;AAE9E,MAAM,WAAW,gBAAgB;IAE7B,SAAS,EAAE,mBAAmB,CAAA;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,qBAAqB,EAAE,OAAO,CAAA;IAC9B,UAAU,EAAE,OAAO,CAAA;IACnB,cAAc,EAAE,OAAO,CAAA;IACvB,cAAc,EAAE,OAAO,CAAA;CAC1B;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC1B,UAAU,EAAE,mBAAmB,EAAE,EACjC,OAAO,EAAE,sBAAsB,GAChC,gBAAgB,CAUlB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACjC,KAAK,EAAE,mBAAmB,EAAE,EAC5B,OAAO,EAAE,sBAAsB,GAChC,gBAAgB,CAGlB;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,cAAc,GAAG,sBAAsB,CAS/F;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,mBAAmB,EAAE,GAAG,mBAAmB,EAAE,CAGvF"}
@@ -1,8 +1,7 @@
1
- import { try_evaluate_transport_stability } from '../adapters/stability_adapter.js';
1
+ import { try_evaluate_transport_stability, sum_loose_item_scores } from '../adapters/stability_adapter.js';
2
+ import { is_axle_load_valid } from '../adapters/axle_adapter.js';
3
+ import { preserves_waypoint_order } from '../waypoint/preserves_waypoint_order.js';
2
4
  import { clone_containers } from '../move/apply_move.js';
3
- import { evaluate_search_gates } from './evaluate_search_gates.js';
4
- import { is_waypoint_order_valid } from './is_waypoint_order_valid.js';
5
- import { is_layout_milkrun_valid } from '../waypoint/milkrun_wall_reservation.js';
6
5
  /**
7
6
  * Evaluates a container layout against all stabilizer gates.
8
7
  * @param containers - Container layout to evaluate.
@@ -14,7 +13,7 @@ export function evaluate_state(containers, context) {
14
13
  if (!stability) {
15
14
  return invalid_evaluation_result();
16
15
  }
17
- const gates = evaluate_search_gates(containers, context, stability);
16
+ const gates = evaluate_gates(containers, context, stability);
18
17
  return { stability, objective: gates.objective, ...gates.flags, all_gates_pass: gates.pass };
19
18
  }
20
19
  /**
@@ -37,8 +36,7 @@ export function evaluation_context_from_reorder(context) {
37
36
  loose_items: context.loose_items,
38
37
  config: context.config,
39
38
  waypoint_mode: context.waypoint_mode,
40
- baseline_containers: context.baseline_containers,
41
- milkrun_reserved_z_bands: context.milkrun_reserved_z_bands
39
+ baseline_containers: context.baseline_containers
42
40
  };
43
41
  }
44
42
  /**
@@ -49,16 +47,16 @@ export function evaluation_context_from_reorder(context) {
49
47
  export function clone_baseline(containers) {
50
48
  return clone_containers(containers);
51
49
  }
52
- /**
53
- * Evaluates organization constraint gates without stability or axle checks.
54
- * @param containers - Container layout to evaluate.
55
- * @param context - Evaluation context.
56
- * @returns Waypoint and milkrun gate flags.
57
- */
58
- export function evaluate_organization_gates(containers, context) {
50
+ function evaluate_gates(containers, context, stability) {
51
+ const objective = sum_loose_item_scores(stability, containers, context.loose_items);
52
+ const transport_floor_valid = stability.transport_score >= context.config.transport_stability_floor;
53
+ const axle_valid = is_axle_load_valid({ ...context.env, containers }, context.config.folga_de_peso_nos_eixos);
54
+ const waypoint_valid = preserves_waypoint_order(context.baseline_containers, containers, context.waypoint_mode);
55
+ const flags = { transport_floor_valid, axle_valid, waypoint_valid };
59
56
  return {
60
- waypoint_valid: is_waypoint_order_valid(containers, context),
61
- milkrun_valid: is_layout_milkrun_valid(containers, context.milkrun_reserved_z_bands)
57
+ objective,
58
+ pass: transport_floor_valid && axle_valid && waypoint_valid,
59
+ flags
62
60
  };
63
61
  }
64
62
  function invalid_evaluation_result() {
@@ -68,8 +66,6 @@ function invalid_evaluation_result() {
68
66
  transport_floor_valid: false,
69
67
  axle_valid: false,
70
68
  waypoint_valid: false,
71
- milkrun_valid: false,
72
- all_gates_pass: false,
73
- axle_excess_kg: Number.POSITIVE_INFINITY
69
+ all_gates_pass: false
74
70
  };
75
71
  }
@@ -1,11 +1,8 @@
1
1
  import { type StabilizerConfig } from '../validation/schemas/stabilizer_config_schema.js';
2
2
  /**
3
- * Reads stabilizer config from cargo-movement config and cargo profile algoritmo maps.
3
+ * Reads stabilizer config from cargo-movement config.algoritmo map.
4
4
  * @param config - Top-level stabilizer input config object.
5
- * @param cargo_state - Cargo profile (optional) for merged algoritmo keys.
6
5
  * @returns Parsed stabilizer configuration.
7
6
  */
8
- export declare function read_stabilizer_config(config: Record<string, unknown> | undefined, cargo_state?: {
9
- config?: unknown;
10
- }): StabilizerConfig;
7
+ export declare function read_stabilizer_config(config: Record<string, unknown> | undefined): StabilizerConfig;
11
8
  //# sourceMappingURL=read_stabilizer_config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"read_stabilizer_config.d.ts","sourceRoot":"","sources":["../../../src/core/factory/read_stabilizer_config.ts"],"names":[],"mappings":"AAKA,OAAO,EAEH,KAAK,gBAAgB,EACxB,MAAM,mDAAmD,CAAA;AAG1D;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC3C,WAAW,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACnC,gBAAgB,CAYlB"}
1
+ {"version":3,"file":"read_stabilizer_config.d.ts","sourceRoot":"","sources":["../../../src/core/factory/read_stabilizer_config.ts"],"names":[],"mappings":"AAKA,OAAO,EAEH,KAAK,gBAAgB,EACxB,MAAM,mDAAmD,CAAA;AAI1D;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,gBAAgB,CAuBpG"}
@@ -1,16 +1,25 @@
1
1
  import { REORDER_STRATEGY } from '../constants/ReorderStrategy.js';
2
2
  import { UnknownReorderStrategyError } from '../exceptions/UnknownReorderStrategyError.js';
3
3
  import { stabilizer_config_schema } from '../validation/schemas/stabilizer_config_schema.js';
4
- import { merge_algoritmo_maps, read_raw_stabilizer_config } from './read_stabilizer_config_helpers.js';
4
+ const CONFIG_PREFIX = 'cargo_stabilizer.';
5
5
  /**
6
- * Reads stabilizer config from cargo-movement config and cargo profile algoritmo maps.
6
+ * Reads stabilizer config from cargo-movement config.algoritmo map.
7
7
  * @param config - Top-level stabilizer input config object.
8
- * @param cargo_state - Cargo profile (optional) for merged algoritmo keys.
9
8
  * @returns Parsed stabilizer configuration.
10
9
  */
11
- export function read_stabilizer_config(config, cargo_state) {
12
- const algoritmo = merge_algoritmo_maps(config, cargo_state);
13
- const raw = read_raw_stabilizer_config(algoritmo);
10
+ export function read_stabilizer_config(config) {
11
+ const algoritmo = (config?.algoritmo ?? config ?? {});
12
+ const raw = {
13
+ reorder_strategy: read_config_string(algoritmo, 'reorder_strategy', REORDER_STRATEGY.GRAVITY),
14
+ transport_stability_floor: read_config_number(algoritmo, 'transport_stability_floor', 0),
15
+ max_iteration: read_config_number(algoritmo, 'max_iteration', 10),
16
+ genetic_population: read_config_number(algoritmo, 'genetic_population', 30),
17
+ genetic_generations: read_config_number(algoritmo, 'genetic_generations', 50),
18
+ genetic_mutation_rate: read_config_number(algoritmo, 'genetic_mutation_rate', 0.15),
19
+ beam_width: read_config_number(algoritmo, 'beam_width', 5),
20
+ beam_top_k: read_config_number(algoritmo, 'beam_top_k', 3),
21
+ folga_de_peso_nos_eixos: read_config_number(algoritmo, 'folga_de_peso_nos_eixos', 0)
22
+ };
14
23
  const parsed = stabilizer_config_schema.safeParse(raw);
15
24
  if (!parsed.success) {
16
25
  throw new UnknownReorderStrategyError(String(raw.reorder_strategy));
@@ -18,6 +27,16 @@ export function read_stabilizer_config(config, cargo_state) {
18
27
  assert_known_strategy(parsed.data.reorder_strategy);
19
28
  return parsed.data;
20
29
  }
30
+ function read_config_string(algoritmo, key, default_value) {
31
+ const full_key = CONFIG_PREFIX + key;
32
+ const value = algoritmo[full_key] ?? algoritmo[key];
33
+ return typeof value === 'string' ? value : default_value;
34
+ }
35
+ function read_config_number(algoritmo, key, default_value) {
36
+ const full_key = CONFIG_PREFIX + key;
37
+ const value = algoritmo[full_key] ?? algoritmo[key];
38
+ return typeof value === 'number' ? value : default_value;
39
+ }
21
40
  function assert_known_strategy(strategy) {
22
41
  const values = Object.values(REORDER_STRATEGY);
23
42
  if (!values.includes(strategy)) {
@@ -1,4 +1,4 @@
1
- import type { StabilizerItem } from '../validation/contract/stabilizer_domain_schema.js';
1
+ import type { StabilizerItem } from '../validation/schemas/stabilizer_input_schema.js';
2
2
  export interface LooseItemRef {
3
3
  item_id: string;
4
4
  container_index: number;
@@ -6,7 +6,7 @@ export interface LooseItemRef {
6
6
  }
7
7
  /**
8
8
  * @param item - Item record from cargo_state.
9
- * @returns True when item is loose (no group_id).
9
+ * @returns True when item is loose (no groupId).
10
10
  */
11
11
  export declare function is_loose_item(item: StabilizerItem): boolean;
12
12
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"loose_item_filter.d.ts","sourceRoot":"","sources":["../../../src/core/filters/loose_item_filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAA;AAExF,MAAM,WAAW,YAAY;IAEzB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,cAAc,CAAA;CACvB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAG3D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAC/B,UAAU,EAAE;IAAE,KAAK,EAAE,cAAc,EAAE,CAAA;CAAE,EAAE,GAC1C,YAAY,EAAE,CAqBhB"}
1
+ {"version":3,"file":"loose_item_filter.d.ts","sourceRoot":"","sources":["../../../src/core/filters/loose_item_filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kDAAkD,CAAA;AAEtF,MAAM,WAAW,YAAY;IAEzB,OAAO,EAAE,MAAM,CAAA;IACf,eAAe,EAAE,MAAM,CAAA;IACvB,IAAI,EAAE,cAAc,CAAA;CACvB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAG3D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAC/B,UAAU,EAAE;IAAE,KAAK,EAAE,cAAc,EAAE,CAAA;CAAE,EAAE,GAC1C,YAAY,EAAE,CAqBhB"}
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * @param item - Item record from cargo_state.
3
- * @returns True when item is loose (no group_id).
3
+ * @returns True when item is loose (no groupId).
4
4
  */
5
5
  export function is_loose_item(item) {
6
- return item.group_id === null || item.group_id === undefined;
6
+ return item.groupId === null || item.groupId === undefined;
7
7
  }
8
8
  /**
9
9
  * Collects loose items across all containers in one env.
@@ -18,7 +18,7 @@ export function collect_loose_items(containers) {
18
18
  continue;
19
19
  }
20
20
  loose_items.push({
21
- item_id: item.item_id,
21
+ item_id: item._id,
22
22
  container_index,
23
23
  item
24
24
  });
@@ -1,4 +1,4 @@
1
- import type { StabilizerItem } from '../validation/contract/stabilizer_domain_schema.js';
1
+ import type { StabilizerItem } from '../validation/schemas/stabilizer_input_schema.js';
2
2
  export interface AxisAlignedBox {
3
3
  x: number;
4
4
  y: number;
@@ -29,20 +29,4 @@ export declare function has_overlap(candidate: AxisAlignedBox, others: AxisAlign
29
29
  * @returns True when candidate rests on container floor.
30
30
  */
31
31
  export declare function is_on_floor(candidate: AxisAlignedBox): boolean;
32
- /**
33
- * @param candidate - Candidate placement box.
34
- * @param container - Container dimensions.
35
- * @returns True when candidate fits inside container bounds.
36
- */
37
- export declare function is_inside_container(candidate: AxisAlignedBox, container: {
38
- width: number;
39
- height: number;
40
- length: number;
41
- }): boolean;
42
- /**
43
- * @param candidate - Candidate placement box.
44
- * @param supporters - Existing item boxes (excluding candidate).
45
- * @returns True when bottom face is on floor or supporter tops.
46
- */
47
- export declare function is_fully_supported(candidate: AxisAlignedBox, supporters: AxisAlignedBox[]): boolean;
48
32
  //# sourceMappingURL=box_geometry.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"box_geometry.d.ts","sourceRoot":"","sources":["../../../src/core/geometry/box_geometry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAA;AAExF,MAAM,WAAW,cAAc;IAE3B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACZ;AAID;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,CAUhE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAMlF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAGxF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAG9D;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAC/B,SAAS,EAAE,cAAc,EACzB,SAAS,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC7D,OAAO,CAeT;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,OAAO,CAUnG"}
1
+ {"version":3,"file":"box_geometry.d.ts","sourceRoot":"","sources":["../../../src/core/geometry/box_geometry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kDAAkD,CAAA;AAEtF,MAAM,WAAW,cAAc;IAE3B,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACZ;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,cAAc,GAAG,cAAc,CAGhE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,GAAG,OAAO,CAMlF;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,OAAO,CAGxF;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAG9D"}
@@ -1,17 +1,9 @@
1
- const GEOMETRY_EPSILON = 1e-6;
2
1
  /**
3
2
  * @param item - Cargo item with position and dimensions.
4
3
  * @returns Axis-aligned bounding box.
5
4
  */
6
5
  export function item_to_box(item) {
7
- return {
8
- x: item.x,
9
- y: item.y,
10
- z: item.z,
11
- w: item.width,
12
- h: item.height,
13
- d: item.depth
14
- };
6
+ return { x: item.x, y: item.y, z: item.z, w: item.w, h: item.h, d: item.d };
15
7
  }
16
8
  /**
17
9
  * @param left - First box.
@@ -37,62 +29,5 @@ export function has_overlap(candidate, others) {
37
29
  * @returns True when candidate rests on container floor.
38
30
  */
39
31
  export function is_on_floor(candidate) {
40
- return candidate.y <= GEOMETRY_EPSILON;
41
- }
42
- /**
43
- * @param candidate - Candidate placement box.
44
- * @param container - Container dimensions.
45
- * @returns True when candidate fits inside container bounds.
46
- */
47
- export function is_inside_container(candidate, container) {
48
- if (candidate.x < -GEOMETRY_EPSILON || candidate.y < -GEOMETRY_EPSILON || candidate.z < -GEOMETRY_EPSILON) {
49
- return false;
50
- }
51
- if (candidate.x + candidate.w > container.width + GEOMETRY_EPSILON) {
52
- return false;
53
- }
54
- if (candidate.y + candidate.h > container.height + GEOMETRY_EPSILON) {
55
- return false;
56
- }
57
- return candidate.z + candidate.d <= container.length + GEOMETRY_EPSILON;
58
- }
59
- /**
60
- * @param candidate - Candidate placement box.
61
- * @param supporters - Existing item boxes (excluding candidate).
62
- * @returns True when bottom face is on floor or supporter tops.
63
- */
64
- export function is_fully_supported(candidate, supporters) {
65
- if (is_on_floor(candidate)) {
66
- return true;
67
- }
68
- return sample_bottom_support_points(candidate).every(point => is_support_point_supported(point, supporters));
69
- }
70
- function sample_bottom_support_points(candidate) {
71
- const { x, y, z, w, d } = candidate;
72
- const mid_x = x + w / 2;
73
- const mid_z = z + d / 2;
74
- return [
75
- { x, y, z },
76
- { x: x + w, y, z },
77
- { x, y, z: z + d },
78
- { x: x + w, y, z: z + d },
79
- { x: mid_x, y, z: mid_z }
80
- ];
81
- }
82
- function is_support_point_supported(point, supporters) {
83
- if (point.y <= GEOMETRY_EPSILON) {
84
- return true;
85
- }
86
- return supporters.some(supporter => is_point_on_supporter_top(point, supporter));
87
- }
88
- function is_point_on_supporter_top(point, supporter) {
89
- const top_y = supporter.y + supporter.h;
90
- if (Math.abs(point.y - top_y) > GEOMETRY_EPSILON) {
91
- return false;
92
- }
93
- const within_x = point.x >= supporter.x - GEOMETRY_EPSILON &&
94
- point.x <= supporter.x + supporter.w + GEOMETRY_EPSILON;
95
- const within_z = point.z >= supporter.z - GEOMETRY_EPSILON &&
96
- point.z <= supporter.z + supporter.d + GEOMETRY_EPSILON;
97
- return within_x && within_z;
32
+ return candidate.y <= 1e-6;
98
33
  }
@@ -1,5 +1,4 @@
1
- import type { StabilizerContainer } from '../validation/contract/stabilizer_domain_schema.js';
2
- export type CandidateSlotKind = 'empty_space' | 'supporter_top';
1
+ import type { StabilizerContainer } from '../validation/schemas/stabilizer_input_schema.js';
3
2
  export interface MoveCandidate {
4
3
  item_id: string;
5
4
  source_container_index: number;
@@ -9,7 +8,6 @@ export interface MoveCandidate {
9
8
  y: number;
10
9
  z: number;
11
10
  };
12
- slot_kind?: CandidateSlotKind;
13
11
  }
14
12
  /**
15
13
  * Applies a move candidate to containers (mutates arrays in place).
@@ -1 +1 @@
1
- {"version":3,"file":"apply_move.d.ts","sourceRoot":"","sources":["../../../src/core/move/apply_move.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oDAAoD,CAAA;AAE7F,MAAM,MAAM,iBAAiB,GAAG,aAAa,GAAG,eAAe,CAAA;AAE/D,MAAM,WAAW,aAAa;IAE1B,OAAO,EAAE,MAAM,CAAA;IACf,sBAAsB,EAAE,MAAM,CAAA;IAC9B,sBAAsB,EAAE,MAAM,CAAA;IAC9B,YAAY,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACjD,SAAS,CAAC,EAAE,iBAAiB,CAAA;CAChC;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACtB,UAAU,EAAE,mBAAmB,EAAE,EACjC,SAAS,EAAE,aAAa,GACzB,IAAI,CAgBN;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,mBAAmB,EAAE,GAAG,mBAAmB,EAAE,CAGzF"}
1
+ {"version":3,"file":"apply_move.d.ts","sourceRoot":"","sources":["../../../src/core/move/apply_move.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kDAAkD,CAAA;AAE3F,MAAM,WAAW,aAAa;IAE1B,OAAO,EAAE,MAAM,CAAA;IACf,sBAAsB,EAAE,MAAM,CAAA;IAC9B,sBAAsB,EAAE,MAAM,CAAA;IAC9B,YAAY,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACpD;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACtB,UAAU,EAAE,mBAAmB,EAAE,EACjC,SAAS,EAAE,aAAa,GACzB,IAAI,CAgBN;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,mBAAmB,EAAE,GAAG,mBAAmB,EAAE,CAGzF"}
@@ -5,7 +5,7 @@
5
5
  */
6
6
  export function apply_move(containers, candidate) {
7
7
  const source = containers[candidate.source_container_index];
8
- const item_index = source.items.findIndex(item => item.item_id === candidate.item_id);
8
+ const item_index = source.items.findIndex(item => item._id === candidate.item_id);
9
9
  if (item_index < 0) {
10
10
  return;
11
11
  }
@@ -1,5 +1,4 @@
1
- import type { StabilizerInput } from '../validation/contract/stabilizer_input_schema.js';
2
- import type { StabilizerCargoState } from '../validation/contract/stabilizer_domain_schema.js';
1
+ import type { StabilizerInput, StabilizerCargoState } from '../validation/schemas/stabilizer_input_schema.js';
3
2
  /**
4
3
  * Runs stabilizer flow on validated input.
5
4
  * @param input - Raw stabilizer input.
@@ -1 +1 @@
1
- {"version":3,"file":"StabilizerFlow.d.ts","sourceRoot":"","sources":["../../../src/core/orchestration/StabilizerFlow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAA;AACxF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oDAAoD,CAAA;AAO9F;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,oBAAoB,CAgBhF;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,UAAU,EAAE,OAAO,GAAG,oBAAoB,CAI1F"}
1
+ {"version":3,"file":"StabilizerFlow.d.ts","sourceRoot":"","sources":["../../../src/core/orchestration/StabilizerFlow.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,kDAAkD,CAAA;AAO7G;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,oBAAoB,CAchF;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAAC,UAAU,EAAE,OAAO,GAAG,oBAAoB,CAI1F"}
@@ -1,4 +1,4 @@
1
- import { parse_stabilizer_input } from '../validation/contract/parse_stabilizer_input.js';
1
+ import { parse_stabilizer_input } from '../validation/parse_stabilizer_input.js';
2
2
  import { read_stabilizer_config } from '../factory/read_stabilizer_config.js';
3
3
  import { create_reorder_strategy } from '../factory/strategy_factory.js';
4
4
  import { build_reorder_context } from './build_reorder_context.js';
@@ -1,4 +1,4 @@
1
- import type { StabilizerInput } from '../validation/contract/stabilizer_input_schema.js';
1
+ import type { StabilizerInput } from '../validation/schemas/stabilizer_input_schema.js';
2
2
  import type { StabilizerConfig } from '../validation/schemas/stabilizer_config_schema.js';
3
3
  import type { ReorderContext } from '../strategies/reorder/ReorderStrategy.js';
4
4
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"build_reorder_context.d.ts","sourceRoot":"","sources":["../../../src/core/orchestration/build_reorder_context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mDAAmD,CAAA;AACxF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAA;AACzF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAA;AAQ9E;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACjC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,gBAAgB,GACzB,cAAc,CAqBhB"}
1
+ {"version":3,"file":"build_reorder_context.d.ts","sourceRoot":"","sources":["../../../src/core/orchestration/build_reorder_context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kDAAkD,CAAA;AACvF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mDAAmD,CAAA;AACzF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0CAA0C,CAAA;AAO9E;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACjC,KAAK,EAAE,eAAe,EACtB,MAAM,EAAE,gBAAgB,GACzB,cAAc,CAqBhB"}
@@ -1,9 +1,8 @@
1
- import { collect_movable_items } from '../filters/collect_movable_items.js';
1
+ import { collect_loose_items } from '../filters/loose_item_filter.js';
2
2
  import { validate_waypoint_ids } from '../waypoint/validate_waypoint_ids.js';
3
3
  import { build_waypoint_zones } from '../waypoint/build_waypoint_zones.js';
4
- import { build_milkrun_bands_from_config } from './build_milkrun_bands_from_config.js';
5
- import { read_primary_env } from './read_primary_env.js';
6
4
  import { clone_containers } from '../move/apply_move.js';
5
+ import { InvalidStabilizerInputError } from '../exceptions/InvalidStabilizerInputError.js';
7
6
  /**
8
7
  * Builds reorder context from validated stabilizer input.
9
8
  * @param input - Validated stabilizer input.
@@ -11,17 +10,20 @@ import { clone_containers } from '../move/apply_move.js';
11
10
  * @returns Reorder context for strategy execution.
12
11
  */
13
12
  export function build_reorder_context(input, config) {
14
- const env = read_primary_env(input);
15
- const waypoint_mode = validate_waypoint_ids(env.containers.flatMap(container => container.items));
16
- const baseline_containers = clone_containers(env.containers);
13
+ const env = input.cargo_state.envs[0];
14
+ if (!env) {
15
+ throw new InvalidStabilizerInputError('cargo_state.envs must contain at least one env');
16
+ }
17
+ const all_items = env.containers.flatMap(container => container.items);
18
+ const waypoint_mode = validate_waypoint_ids(all_items);
19
+ const loose_items = collect_loose_items(env.containers);
17
20
  return {
18
21
  env,
19
22
  containers: env.containers,
20
- baseline_containers,
21
- loose_items: collect_movable_items(env.containers, config.pin_tie_ratio_blocks),
23
+ baseline_containers: clone_containers(env.containers),
24
+ loose_items,
22
25
  config,
23
26
  waypoint_mode,
24
- waypoint_zones: build_waypoint_zones(baseline_containers, waypoint_mode),
25
- milkrun_reserved_z_bands: build_milkrun_bands_from_config(baseline_containers, waypoint_mode, config)
27
+ waypoint_zones: build_waypoint_zones(env.containers, waypoint_mode)
26
28
  };
27
29
  }
@@ -1,5 +1,5 @@
1
1
  import type { ReorderContext, ReorderStrategy } from './ReorderStrategy.js';
2
- import type { StabilizerContainer } from '../../validation/contract/stabilizer_domain_schema.js';
2
+ import type { StabilizerContainer } from '../../validation/schemas/stabilizer_input_schema.js';
3
3
  /**
4
4
  * Beam search reorder with configurable width and top-K expansion.
5
5
  */
@@ -1 +1 @@
1
- {"version":3,"file":"BeamSearchReorder.d.ts","sourceRoot":"","sources":["../../../../src/core/strategies/reorder/BeamSearchReorder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uDAAuD,CAAA;AAehG;;GAEG;AACH,qBAAa,iBAAkB,YAAW,eAAe;IAErD,GAAG,CAAC,OAAO,EAAE,cAAc,GAAG,mBAAmB,EAAE;CAoBtD"}
1
+ {"version":3,"file":"BeamSearchReorder.d.ts","sourceRoot":"","sources":["../../../../src/core/strategies/reorder/BeamSearchReorder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAA;AAY9F;;GAEG;AACH,qBAAa,iBAAkB,YAAW,eAAe;IAErD,GAAG,CAAC,OAAO,EAAE,cAAc,GAAG,mBAAmB,EAAE;CAkBtD"}
@@ -1,11 +1,8 @@
1
1
  import { generate_candidates } from '../../candidates/candidate_generator.js';
2
2
  import { candidate_context_for_loose } from '../../candidates/build_candidate_context.js';
3
- import { select_beam_expansion_candidates } from './select_beam_expansion_candidates.js';
4
- import { clone_containers } from '../../move/apply_move.js';
3
+ import { apply_move, clone_containers } from '../../move/apply_move.js';
5
4
  import { evaluate_trial_layout, evaluation_context_from_reorder } from '../../evaluation/state_evaluator.js';
6
5
  import { read_item_score } from '../../adapters/stability_adapter.js';
7
- import { select_surviving_beam } from './select_surviving_beam.js';
8
- import { append_admitted_trial } from './append_admitted_trial.js';
9
6
  /**
10
7
  * Beam search reorder with configurable width and top-K expansion.
11
8
  */
@@ -13,11 +10,9 @@ export class BeamSearchReorder {
13
10
  run(context) {
14
11
  const eval_context = evaluation_context_from_reorder(context);
15
12
  const sorted = sort_loose_by_stability(context, eval_context);
16
- const root_eval = evaluate_trial_layout(context.containers, eval_context);
17
13
  let beam = [{
18
14
  containers: clone_containers(context.containers),
19
- objective: root_eval.objective,
20
- axle_excess_kg: root_eval.axle_excess_kg
15
+ objective: evaluate_trial_layout(context.containers, eval_context).objective
21
16
  }];
22
17
  for (const loose of sorted) {
23
18
  beam = expand_beam({ reorder: context, evaluation: eval_context, beam, loose });
@@ -38,29 +33,35 @@ function expand_beam(request) {
38
33
  loose: request.loose
39
34
  });
40
35
  }
41
- return select_surviving_beam(expanded, request.beam, request.reorder.config.beam_width);
36
+ expanded.sort((left, right) => right.objective - left.objective);
37
+ return expanded.slice(0, request.reorder.config.beam_width);
42
38
  }
43
39
  function append_beam_branches(beam_context) {
44
- const { reorder, evaluation, state, loose } = beam_context;
40
+ const { reorder, evaluation, expanded, state, loose } = beam_context;
45
41
  const loose_ref = { ...loose, container_index: find_container_index(state.containers, loose.item_id) };
46
- const parent_eval = evaluate_trial_layout(state.containers, evaluation);
47
- const candidates = select_beam_expansion_candidates(generate_candidates(candidate_context_for_loose(reorder, state.containers, loose_ref)), reorder.config.beam_top_k);
42
+ const candidates = generate_candidates(candidate_context_for_loose(reorder, state.containers, loose_ref)).slice(0, reorder.config.beam_top_k);
48
43
  for (const candidate of candidates) {
49
- append_admitted_trial(beam_context, parent_eval, candidate);
44
+ const trial = clone_containers(state.containers);
45
+ apply_move(trial, candidate);
46
+ const result = evaluate_trial_layout(trial, evaluation);
47
+ if (!result.all_gates_pass) {
48
+ continue;
49
+ }
50
+ expanded.push({ containers: trial, objective: result.objective });
50
51
  }
51
52
  }
52
53
  function sort_loose_by_stability(context, eval_context) {
53
54
  const evaluation = evaluate_trial_layout(context.containers, eval_context);
54
55
  return [...context.loose_items].sort((left, right) => {
55
56
  const left_index = context.containers[left.container_index].items
56
- .findIndex(item => item.item_id === left.item_id);
57
+ .findIndex(item => item._id === left.item_id);
57
58
  const right_index = context.containers[right.container_index].items
58
- .findIndex(item => item.item_id === right.item_id);
59
+ .findIndex(item => item._id === right.item_id);
59
60
  const left_score = read_item_score(evaluation.stability, left.container_index, left_index);
60
61
  const right_score = read_item_score(evaluation.stability, right.container_index, right_index);
61
62
  return left_score - right_score;
62
63
  });
63
64
  }
64
65
  function find_container_index(containers, item_id) {
65
- return containers.findIndex(container => container.items.some(item => item.item_id === item_id));
66
+ return containers.findIndex(container => container.items.some(item => item._id === item_id));
66
67
  }
@@ -1,5 +1,5 @@
1
1
  import type { ReorderContext, ReorderStrategy } from './ReorderStrategy.js';
2
- import type { StabilizerContainer } from '../../validation/contract/stabilizer_domain_schema.js';
2
+ import type { StabilizerContainer } from '../../validation/schemas/stabilizer_input_schema.js';
3
3
  /**
4
4
  * Genetic algorithm reorder optimizing loose-item stability sum.
5
5
  */
@@ -1 +1 @@
1
- {"version":3,"file":"GeneticReorder.d.ts","sourceRoot":"","sources":["../../../../src/core/strategies/reorder/GeneticReorder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uDAAuD,CAAA;AAchG;;GAEG;AACH,qBAAa,cAAe,YAAW,eAAe;IAElD,GAAG,CAAC,OAAO,EAAE,cAAc,GAAG,mBAAmB,EAAE;CAgBtD"}
1
+ {"version":3,"file":"GeneticReorder.d.ts","sourceRoot":"","sources":["../../../../src/core/strategies/reorder/GeneticReorder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAA;AAa9F;;GAEG;AACH,qBAAa,cAAe,YAAW,eAAe;IAElD,GAAG,CAAC,OAAO,EAAE,cAAc,GAAG,mBAAmB,EAAE;CAgBtD"}
@@ -1,6 +1,5 @@
1
1
  import { build_initial_population, crossover_organisms, materialize_organism, mutate_organism } from './genetic/Chromosome.js';
2
2
  import { evaluate_trial_layout, evaluation_context_from_reorder } from '../../evaluation/state_evaluator.js';
3
- import { genetic_fitness } from '../../evaluation/genetic_fitness.js';
4
3
  /**
5
4
  * Genetic algorithm reorder optimizing loose-item stability sum.
6
5
  */
@@ -40,5 +39,5 @@ function score_population(context, eval_context, population) {
40
39
  function score_organism(context, eval_context, organism) {
41
40
  const layout = materialize_organism(context.baseline_containers, organism);
42
41
  const evaluation = evaluate_trial_layout(layout, eval_context);
43
- organism.fitness = genetic_fitness(evaluation);
42
+ organism.fitness = evaluation.all_gates_pass ? evaluation.objective : Number.NEGATIVE_INFINITY;
44
43
  }
@@ -1,5 +1,5 @@
1
1
  import type { ReorderContext, ReorderStrategy } from './ReorderStrategy.js';
2
- import type { StabilizerContainer } from '../../validation/contract/stabilizer_domain_schema.js';
2
+ import type { StabilizerContainer } from '../../validation/schemas/stabilizer_input_schema.js';
3
3
  /**
4
4
  * Single-pass gravity compaction: unstable loose items to lowest feasible floor slot.
5
5
  */
@@ -1 +1 @@
1
- {"version":3,"file":"GravityCompaction.d.ts","sourceRoot":"","sources":["../../../../src/core/strategies/reorder/GravityCompaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uDAAuD,CAAA;AAWhG;;GAEG;AACH,qBAAa,iBAAkB,YAAW,eAAe;IAErD,GAAG,CAAC,OAAO,EAAE,cAAc,GAAG,mBAAmB,EAAE;CAatD"}
1
+ {"version":3,"file":"GravityCompaction.d.ts","sourceRoot":"","sources":["../../../../src/core/strategies/reorder/GravityCompaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAA;AAW9F;;GAEG;AACH,qBAAa,iBAAkB,YAAW,eAAe;IAErD,GAAG,CAAC,OAAO,EAAE,cAAc,GAAG,mBAAmB,EAAE;CAatD"}
@@ -37,12 +37,12 @@ function sort_loose_by_stability(context, containers) {
37
37
  return context.loose_items
38
38
  .map(loose => {
39
39
  const item_index = containers[loose.container_index].items
40
- .findIndex(item => item.item_id === loose.item_id);
40
+ .findIndex(item => item._id === loose.item_id);
41
41
  const score = read_item_score(evaluation.stability, loose.container_index, item_index);
42
42
  return { item_id: loose.item_id, container_index: loose.container_index, score };
43
43
  })
44
44
  .sort((left, right) => left.score - right.score);
45
45
  }
46
46
  function find_container_index(containers, item_id) {
47
- return containers.findIndex(container => container.items.some(item => item.item_id === item_id));
47
+ return containers.findIndex(container => container.items.some(item => item._id === item_id));
48
48
  }
@@ -1,5 +1,5 @@
1
1
  import type { ReorderContext, ReorderStrategy } from './ReorderStrategy.js';
2
- import type { StabilizerContainer } from '../../validation/contract/stabilizer_domain_schema.js';
2
+ import type { StabilizerContainer } from '../../validation/schemas/stabilizer_input_schema.js';
3
3
  /**
4
4
  * Greedy iterative reorder: fix worst loose item until plateau or max iterations.
5
5
  */
@@ -1 +1 @@
1
- {"version":3,"file":"GreedyReorder.d.ts","sourceRoot":"","sources":["../../../../src/core/strategies/reorder/GreedyReorder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uDAAuD,CAAA;AAKhG;;GAEG;AACH,qBAAa,aAAc,YAAW,eAAe;IAEjD,GAAG,CAAC,OAAO,EAAE,cAAc,GAAG,mBAAmB,EAAE;CAiBtD"}
1
+ {"version":3,"file":"GreedyReorder.d.ts","sourceRoot":"","sources":["../../../../src/core/strategies/reorder/GreedyReorder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qDAAqD,CAAA;AAK9F;;GAEG;AACH,qBAAa,aAAc,YAAW,eAAe;IAEjD,GAAG,CAAC,OAAO,EAAE,cAAc,GAAG,mBAAmB,EAAE;CAiBtD"}