kairos-planner 1.0.3__tar.gz

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 (262) hide show
  1. kairos_planner-1.0.3/.github/scripts/ros_deb.sh +40 -0
  2. kairos_planner-1.0.3/.github/scripts/ros_rpm.sh +47 -0
  3. kairos_planner-1.0.3/.github/workflows/ci.yml +234 -0
  4. kairos_planner-1.0.3/.github/workflows/wheels.yml +49 -0
  5. kairos_planner-1.0.3/.gitignore +12 -0
  6. kairos_planner-1.0.3/CHANGELOG.rst +99 -0
  7. kairos_planner-1.0.3/CMakeLists.txt +108 -0
  8. kairos_planner-1.0.3/CONTRIBUTING.md +137 -0
  9. kairos_planner-1.0.3/LICENSE +201 -0
  10. kairos_planner-1.0.3/PKG-INFO +57 -0
  11. kairos_planner-1.0.3/README.md +312 -0
  12. kairos_planner-1.0.3/cmake/KairosCompilerOptions.cmake +44 -0
  13. kairos_planner-1.0.3/cmake/KairosLint.cmake +61 -0
  14. kairos_planner-1.0.3/cmake/kairosConfig.cmake.in +7 -0
  15. kairos_planner-1.0.3/colcon.pkg +6 -0
  16. kairos_planner-1.0.3/docs/benchmark.md +502 -0
  17. kairos_planner-1.0.3/docs/cli.md +943 -0
  18. kairos_planner-1.0.3/docs/examples/pddls/battery_domain.pddl +58 -0
  19. kairos_planner-1.0.3/docs/examples/pddls/battery_problem_long.pddl +148 -0
  20. kairos_planner-1.0.3/docs/examples/pddls/battery_problem_medium.pddl +68 -0
  21. kairos_planner-1.0.3/docs/examples/pddls/battery_problem_simple.pddl +35 -0
  22. kairos_planner-1.0.3/docs/examples/pddls/cooking_cost_domain.pddl +182 -0
  23. kairos_planner-1.0.3/docs/examples/pddls/cooking_cost_problem_long.pddl +135 -0
  24. kairos_planner-1.0.3/docs/examples/pddls/cooking_cost_problem_medium.pddl +111 -0
  25. kairos_planner-1.0.3/docs/examples/pddls/cooking_cost_problem_simple.pddl +107 -0
  26. kairos_planner-1.0.3/docs/examples/pddls/cooking_domain.pddl +198 -0
  27. kairos_planner-1.0.3/docs/examples/pddls/cooking_problem_huge.pddl +128 -0
  28. kairos_planner-1.0.3/docs/examples/pddls/cooking_problem_long.pddl +89 -0
  29. kairos_planner-1.0.3/docs/examples/pddls/cooking_problem_simple.pddl +67 -0
  30. kairos_planner-1.0.3/docs/examples/pddls/domain_charging.pddl +79 -0
  31. kairos_planner-1.0.3/docs/examples/pddls/domain_simple.pddl +62 -0
  32. kairos_planner-1.0.3/docs/examples/pddls/domain_simple_2.pddl +77 -0
  33. kairos_planner-1.0.3/docs/examples/pddls/domain_simple_problem_1.pddl +21 -0
  34. kairos_planner-1.0.3/docs/examples/pddls/domain_simple_problem_2.pddl +20 -0
  35. kairos_planner-1.0.3/docs/examples/pddls/domain_simple_problem_3.pddl +18 -0
  36. kairos_planner-1.0.3/docs/examples/pddls/elevator_domain.pddl +92 -0
  37. kairos_planner-1.0.3/docs/examples/pddls/elevator_problem.pddl +54 -0
  38. kairos_planner-1.0.3/docs/examples/pddls/factory.pddl +88 -0
  39. kairos_planner-1.0.3/docs/examples/pddls/factory2.pddl +84 -0
  40. kairos_planner-1.0.3/docs/examples/pddls/factory3.pddl +85 -0
  41. kairos_planner-1.0.3/docs/examples/pddls/factory4.pddl +73 -0
  42. kairos_planner-1.0.3/docs/examples/pddls/factory_problem_1.pddl +44 -0
  43. kairos_planner-1.0.3/docs/examples/pddls/matchcellar.pddl +32 -0
  44. kairos_planner-1.0.3/docs/examples/pddls/road_trip_domain.pddl +87 -0
  45. kairos_planner-1.0.3/docs/examples/pddls/road_trip_problem.pddl +84 -0
  46. kairos_planner-1.0.3/docs/examples/pddls/simple_example.pddl +77 -0
  47. kairos_planner-1.0.3/docs/examples/pddls/simple_move_example.pddl +37 -0
  48. kairos_planner-1.0.3/docs/examples/pddls/stn_test.pddl +54 -0
  49. kairos_planner-1.0.3/docs/examples/pddls/suave_domain.pddl +701 -0
  50. kairos_planner-1.0.3/docs/examples/pddls/suave_problem.pddl +138 -0
  51. kairos_planner-1.0.3/docs/examples.md +264 -0
  52. kairos_planner-1.0.3/docs/images/kairos.png +0 -0
  53. kairos_planner-1.0.3/docs/images/kairos_white.png +0 -0
  54. kairos_planner-1.0.3/docs/pddl-support.md +138 -0
  55. kairos_planner-1.0.3/gcovr.cfg +11 -0
  56. kairos_planner-1.0.3/include/kairos/check.hpp +85 -0
  57. kairos_planner-1.0.3/include/kairos/diagnostics.hpp +99 -0
  58. kairos_planner-1.0.3/include/kairos/kairos.hpp +30 -0
  59. kairos_planner-1.0.3/include/kairos/log.hpp +120 -0
  60. kairos_planner-1.0.3/include/kairos/plan.hpp +101 -0
  61. kairos_planner-1.0.3/include/kairos/planner.hpp +256 -0
  62. kairos_planner-1.0.3/include/kairos/result.hpp +120 -0
  63. kairos_planner-1.0.3/include/kairos/validate.hpp +96 -0
  64. kairos_planner-1.0.3/include/kairos/version.hpp.in +38 -0
  65. kairos_planner-1.0.3/package.xml +22 -0
  66. kairos_planner-1.0.3/pixi.toml +29 -0
  67. kairos_planner-1.0.3/pyproject.toml +57 -0
  68. kairos_planner-1.0.3/python/CMakeLists.txt +48 -0
  69. kairos_planner-1.0.3/python/README.md +36 -0
  70. kairos_planner-1.0.3/python/kairos/__init__.py +213 -0
  71. kairos_planner-1.0.3/python/kairos/py.typed +0 -0
  72. kairos_planner-1.0.3/python/src/kairos_python.cpp +503 -0
  73. kairos_planner-1.0.3/python/tests/test_kairos.py +403 -0
  74. kairos_planner-1.0.3/src/CMakeLists.txt +114 -0
  75. kairos_planner-1.0.3/src/api/check.cpp +170 -0
  76. kairos_planner-1.0.3/src/api/planner.cpp +399 -0
  77. kairos_planner-1.0.3/src/api/validate.cpp +75 -0
  78. kairos_planner-1.0.3/src/api/version.cpp +25 -0
  79. kairos_planner-1.0.3/src/cli/CMakeLists.txt +49 -0
  80. kairos_planner-1.0.3/src/cli/completion.cpp +209 -0
  81. kairos_planner-1.0.3/src/cli/completion.hpp +47 -0
  82. kairos_planner-1.0.3/src/cli/main.cpp +676 -0
  83. kairos_planner-1.0.3/src/core/CMakeLists.txt +24 -0
  84. kairos_planner-1.0.3/src/core/budget.cpp +164 -0
  85. kairos_planner-1.0.3/src/core/budget.hpp +125 -0
  86. kairos_planner-1.0.3/src/core/diagnostics.cpp +135 -0
  87. kairos_planner-1.0.3/src/core/id.hpp +144 -0
  88. kairos_planner-1.0.3/src/core/log.cpp +95 -0
  89. kairos_planner-1.0.3/src/core/logger.hpp +169 -0
  90. kairos_planner-1.0.3/src/core/memory_info.cpp +246 -0
  91. kairos_planner-1.0.3/src/core/memory_info.hpp +87 -0
  92. kairos_planner-1.0.3/src/core/suggest.cpp +76 -0
  93. kairos_planner-1.0.3/src/core/suggest.hpp +45 -0
  94. kairos_planner-1.0.3/src/core/symbol_table.cpp +85 -0
  95. kairos_planner-1.0.3/src/core/symbol_table.hpp +71 -0
  96. kairos_planner-1.0.3/src/ground/CMakeLists.txt +20 -0
  97. kairos_planner-1.0.3/src/ground/datalog.cpp +539 -0
  98. kairos_planner-1.0.3/src/ground/datalog.hpp +182 -0
  99. kairos_planner-1.0.3/src/ground/grounder.cpp +2012 -0
  100. kairos_planner-1.0.3/src/ground/grounder.hpp +78 -0
  101. kairos_planner-1.0.3/src/ground/task.hpp +238 -0
  102. kairos_planner-1.0.3/src/heuristics/CMakeLists.txt +21 -0
  103. kairos_planner-1.0.3/src/heuristics/heuristic.cpp +223 -0
  104. kairos_planner-1.0.3/src/heuristics/heuristic.hpp +100 -0
  105. kairos_planner-1.0.3/src/heuristics/landmarks.cpp +591 -0
  106. kairos_planner-1.0.3/src/heuristics/landmarks.hpp +95 -0
  107. kairos_planner-1.0.3/src/heuristics/relaxed.cpp +873 -0
  108. kairos_planner-1.0.3/src/heuristics/relaxed.hpp +260 -0
  109. kairos_planner-1.0.3/src/lift/CMakeLists.txt +20 -0
  110. kairos_planner-1.0.3/src/lift/lift.cpp +1524 -0
  111. kairos_planner-1.0.3/src/lift/lift.hpp +61 -0
  112. kairos_planner-1.0.3/src/normalize/CMakeLists.txt +19 -0
  113. kairos_planner-1.0.3/src/normalize/normalizer.cpp +2747 -0
  114. kairos_planner-1.0.3/src/normalize/normalizer.hpp +68 -0
  115. kairos_planner-1.0.3/src/normalize/task.hpp +267 -0
  116. kairos_planner-1.0.3/src/orchestrator/CMakeLists.txt +23 -0
  117. kairos_planner-1.0.3/src/orchestrator/explain.cpp +306 -0
  118. kairos_planner-1.0.3/src/orchestrator/explain.hpp +45 -0
  119. kairos_planner-1.0.3/src/orchestrator/orchestrator.cpp +1883 -0
  120. kairos_planner-1.0.3/src/orchestrator/orchestrator.hpp +76 -0
  121. kairos_planner-1.0.3/src/pddl/CMakeLists.txt +22 -0
  122. kairos_planner-1.0.3/src/pddl/ast.hpp +311 -0
  123. kairos_planner-1.0.3/src/pddl/dialect.cpp +541 -0
  124. kairos_planner-1.0.3/src/pddl/dialect.hpp +45 -0
  125. kairos_planner-1.0.3/src/pddl/lexer.cpp +344 -0
  126. kairos_planner-1.0.3/src/pddl/lexer.hpp +118 -0
  127. kairos_planner-1.0.3/src/pddl/parser.cpp +1423 -0
  128. kairos_planner-1.0.3/src/pddl/parser.hpp +66 -0
  129. kairos_planner-1.0.3/src/pddl/printer.cpp +545 -0
  130. kairos_planner-1.0.3/src/pddl/printer.hpp +49 -0
  131. kairos_planner-1.0.3/src/plan/CMakeLists.txt +19 -0
  132. kairos_planner-1.0.3/src/plan/plan.cpp +400 -0
  133. kairos_planner-1.0.3/src/sas/CMakeLists.txt +21 -0
  134. kairos_planner-1.0.3/src/sas/invariants.cpp +1122 -0
  135. kairos_planner-1.0.3/src/sas/invariants.hpp +110 -0
  136. kairos_planner-1.0.3/src/sas/symmetry.cpp +421 -0
  137. kairos_planner-1.0.3/src/sas/symmetry.hpp +44 -0
  138. kairos_planner-1.0.3/src/sas/task.hpp +279 -0
  139. kairos_planner-1.0.3/src/sas/translate.cpp +987 -0
  140. kairos_planner-1.0.3/src/sas/translate.hpp +86 -0
  141. kairos_planner-1.0.3/src/search/CMakeLists.txt +22 -0
  142. kairos_planner-1.0.3/src/search/goals.cpp +323 -0
  143. kairos_planner-1.0.3/src/search/goals.hpp +60 -0
  144. kairos_planner-1.0.3/src/search/novelty.cpp +185 -0
  145. kairos_planner-1.0.3/src/search/novelty.hpp +81 -0
  146. kairos_planner-1.0.3/src/search/search.cpp +1015 -0
  147. kairos_planner-1.0.3/src/search/search.hpp +196 -0
  148. kairos_planner-1.0.3/src/semantic/CMakeLists.txt +21 -0
  149. kairos_planner-1.0.3/src/semantic/analyzer.cpp +1521 -0
  150. kairos_planner-1.0.3/src/semantic/analyzer.hpp +51 -0
  151. kairos_planner-1.0.3/src/semantic/features.cpp +115 -0
  152. kairos_planner-1.0.3/src/semantic/features.hpp +105 -0
  153. kairos_planner-1.0.3/src/semantic/model.cpp +188 -0
  154. kairos_planner-1.0.3/src/semantic/model.hpp +169 -0
  155. kairos_planner-1.0.3/src/state/CMakeLists.txt +22 -0
  156. kairos_planner-1.0.3/src/state/eval.cpp +235 -0
  157. kairos_planner-1.0.3/src/state/eval.hpp +89 -0
  158. kairos_planner-1.0.3/src/state/packing.cpp +62 -0
  159. kairos_planner-1.0.3/src/state/packing.hpp +72 -0
  160. kairos_planner-1.0.3/src/state/registry.cpp +313 -0
  161. kairos_planner-1.0.3/src/state/registry.hpp +126 -0
  162. kairos_planner-1.0.3/src/state/successors.cpp +600 -0
  163. kairos_planner-1.0.3/src/state/successors.hpp +144 -0
  164. kairos_planner-1.0.3/src/temporal/CMakeLists.txt +26 -0
  165. kairos_planner-1.0.3/src/temporal/access.hpp +252 -0
  166. kairos_planner-1.0.3/src/temporal/compress.cpp +796 -0
  167. kairos_planner-1.0.3/src/temporal/compress.hpp +109 -0
  168. kairos_planner-1.0.3/src/temporal/durations.cpp +259 -0
  169. kairos_planner-1.0.3/src/temporal/durations.hpp +57 -0
  170. kairos_planner-1.0.3/src/temporal/hybrid.cpp +628 -0
  171. kairos_planner-1.0.3/src/temporal/hybrid.hpp +99 -0
  172. kairos_planner-1.0.3/src/temporal/profile.cpp +430 -0
  173. kairos_planner-1.0.3/src/temporal/profile.hpp +54 -0
  174. kairos_planner-1.0.3/src/temporal/snap.cpp +1093 -0
  175. kairos_planner-1.0.3/src/temporal/snap.hpp +173 -0
  176. kairos_planner-1.0.3/src/temporal/stn.cpp +181 -0
  177. kairos_planner-1.0.3/src/temporal/stn.hpp +107 -0
  178. kairos_planner-1.0.3/src/temporal/untimed.cpp +120 -0
  179. kairos_planner-1.0.3/src/temporal/untimed.hpp +61 -0
  180. kairos_planner-1.0.3/src/validate/CMakeLists.txt +21 -0
  181. kairos_planner-1.0.3/src/validate/validator.cpp +2931 -0
  182. kairos_planner-1.0.3/src/validate/validator.hpp +37 -0
  183. kairos_planner-1.0.3/tests/CMakeLists.txt +57 -0
  184. kairos_planner-1.0.3/tests/api/CMakeLists.txt +26 -0
  185. kairos_planner-1.0.3/tests/api/check_test.cpp +236 -0
  186. kairos_planner-1.0.3/tests/api/examples_test.cpp +213 -0
  187. kairos_planner-1.0.3/tests/api/planner_test.cpp +2723 -0
  188. kairos_planner-1.0.3/tests/api/public_api_test.cpp +60 -0
  189. kairos_planner-1.0.3/tests/cli/CMakeLists.txt +25 -0
  190. kairos_planner-1.0.3/tests/cli/cli_test.cpp +837 -0
  191. kairos_planner-1.0.3/tests/core/CMakeLists.txt +27 -0
  192. kairos_planner-1.0.3/tests/core/budget_test.cpp +415 -0
  193. kairos_planner-1.0.3/tests/core/diagnostics_test.cpp +135 -0
  194. kairos_planner-1.0.3/tests/core/id_test.cpp +168 -0
  195. kairos_planner-1.0.3/tests/core/log_test.cpp +113 -0
  196. kairos_planner-1.0.3/tests/core/logger_test.cpp +182 -0
  197. kairos_planner-1.0.3/tests/core/memory_info_test.cpp +296 -0
  198. kairos_planner-1.0.3/tests/core/result_test.cpp +140 -0
  199. kairos_planner-1.0.3/tests/core/suggest_test.cpp +92 -0
  200. kairos_planner-1.0.3/tests/core/symbol_table_test.cpp +151 -0
  201. kairos_planner-1.0.3/tests/ground/CMakeLists.txt +26 -0
  202. kairos_planner-1.0.3/tests/ground/datalog_test.cpp +430 -0
  203. kairos_planner-1.0.3/tests/ground/fd_explore.py +48 -0
  204. kairos_planner-1.0.3/tests/ground/grounder_test.cpp +1277 -0
  205. kairos_planner-1.0.3/tests/heuristics/CMakeLists.txt +22 -0
  206. kairos_planner-1.0.3/tests/heuristics/heuristics_test.cpp +705 -0
  207. kairos_planner-1.0.3/tests/heuristics/landmarks_test.cpp +550 -0
  208. kairos_planner-1.0.3/tests/install/CMakeLists.txt +25 -0
  209. kairos_planner-1.0.3/tests/install/main.cpp +32 -0
  210. kairos_planner-1.0.3/tests/lift/CMakeLists.txt +24 -0
  211. kairos_planner-1.0.3/tests/lift/lift_test.cpp +351 -0
  212. kairos_planner-1.0.3/tests/normalize/CMakeLists.txt +24 -0
  213. kairos_planner-1.0.3/tests/normalize/normalizer_test.cpp +799 -0
  214. kairos_planner-1.0.3/tests/pddl/CMakeLists.txt +26 -0
  215. kairos_planner-1.0.3/tests/pddl/corpus_test.cpp +180 -0
  216. kairos_planner-1.0.3/tests/pddl/dialect_test.cpp +290 -0
  217. kairos_planner-1.0.3/tests/pddl/lexer_test.cpp +483 -0
  218. kairos_planner-1.0.3/tests/pddl/parser_domain_test.cpp +716 -0
  219. kairos_planner-1.0.3/tests/pddl/parser_problem_test.cpp +299 -0
  220. kairos_planner-1.0.3/tests/pddl/parser_property_test.cpp +96 -0
  221. kairos_planner-1.0.3/tests/pddl/printer_test.cpp +166 -0
  222. kairos_planner-1.0.3/tests/plan/CMakeLists.txt +19 -0
  223. kairos_planner-1.0.3/tests/plan/plan_test.cpp +413 -0
  224. kairos_planner-1.0.3/tests/sas/CMakeLists.txt +24 -0
  225. kairos_planner-1.0.3/tests/sas/fd_check_invariants.py +56 -0
  226. kairos_planner-1.0.3/tests/sas/fd_groups.py +51 -0
  227. kairos_planner-1.0.3/tests/sas/invariants_test.cpp +413 -0
  228. kairos_planner-1.0.3/tests/sas/translate_test.cpp +720 -0
  229. kairos_planner-1.0.3/tests/search/CMakeLists.txt +26 -0
  230. kairos_planner-1.0.3/tests/search/goals_test.cpp +259 -0
  231. kairos_planner-1.0.3/tests/search/novelty_test.cpp +122 -0
  232. kairos_planner-1.0.3/tests/search/search_test.cpp +556 -0
  233. kairos_planner-1.0.3/tests/semantic/CMakeLists.txt +24 -0
  234. kairos_planner-1.0.3/tests/semantic/domain_test.cpp +647 -0
  235. kairos_planner-1.0.3/tests/semantic/problem_test.cpp +294 -0
  236. kairos_planner-1.0.3/tests/semantic/semantic_corpus_test.cpp +298 -0
  237. kairos_planner-1.0.3/tests/semantic/types_features_test.cpp +228 -0
  238. kairos_planner-1.0.3/tests/state/CMakeLists.txt +21 -0
  239. kairos_planner-1.0.3/tests/state/state_test.cpp +707 -0
  240. kairos_planner-1.0.3/tests/support/ground_simulator.hpp +289 -0
  241. kairos_planner-1.0.3/tests/support/lexer_invariants.hpp +148 -0
  242. kairos_planner-1.0.3/tests/support/lifted_simulator.hpp +442 -0
  243. kairos_planner-1.0.3/tests/support/pddl_helpers.hpp +76 -0
  244. kairos_planner-1.0.3/tests/support/pipeline_helpers.hpp +67 -0
  245. kairos_planner-1.0.3/tests/support/sas_simulator.hpp +289 -0
  246. kairos_planner-1.0.3/tests/support/task_helpers.hpp +68 -0
  247. kairos_planner-1.0.3/tests/temporal/CMakeLists.txt +29 -0
  248. kairos_planner-1.0.3/tests/temporal/compress_test.cpp +233 -0
  249. kairos_planner-1.0.3/tests/temporal/durations_test.cpp +259 -0
  250. kairos_planner-1.0.3/tests/temporal/hybrid_test.cpp +236 -0
  251. kairos_planner-1.0.3/tests/temporal/profile_test.cpp +402 -0
  252. kairos_planner-1.0.3/tests/temporal/snap_test.cpp +380 -0
  253. kairos_planner-1.0.3/tests/temporal/stn_test.cpp +270 -0
  254. kairos_planner-1.0.3/tests/temporal/untimed_test.cpp +334 -0
  255. kairos_planner-1.0.3/tests/validate/CMakeLists.txt +19 -0
  256. kairos_planner-1.0.3/tests/validate/validator_test.cpp +929 -0
  257. kairos_planner-1.0.3/tools/fetch_corpus.sh +51 -0
  258. kairos_planner-1.0.3/tools/lint/README.md +15 -0
  259. kairos_planner-1.0.3/tools/lint/cpplint.py +6933 -0
  260. kairos_planner-1.0.3/tools/lint/kairos_cpplint.py +87 -0
  261. kairos_planner-1.0.3/tools/lint/uncrustify.cfg +3694 -0
  262. kairos_planner-1.0.3/tools/plansys2/popf_overlay.sh +51 -0
@@ -0,0 +1,40 @@
1
+ #!/bin/bash
2
+ # Copyright 2026 Intelligent Robotics Lab
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ # As the ROS buildfarm's binarydeb job: bloom-generate rosdebian, dpkg-buildpackage with nocheck,
17
+ # then install the package and run the installed kairos
18
+ set -e
19
+ export DEBIAN_FRONTEND=noninteractive
20
+ apt-get update -qq >/dev/null
21
+ apt-get install -y -qq python3-bloom python3-rosdep fakeroot debhelper dpkg-dev g++ cmake >/dev/null 2>&1
22
+ [ -f /etc/ros/rosdep/sources.list.d/20-default.list ] || rosdep init >/dev/null 2>&1 || true
23
+ rosdep update --rosdistro $ROS_DISTRO >/dev/null 2>&1
24
+ g++ --version | head -1; cmake --version | head -1
25
+ cp -r /src /tmp/kairos && cd /tmp/kairos
26
+ bloom-generate rosdebian --ros-distro $ROS_DISTRO > /tmp/bloom.log 2>&1 || { tail -30 /tmp/bloom.log; exit 1; }
27
+ head -3 debian/changelog
28
+ export DEB_BUILD_OPTIONS=nocheck DEB_BUILD_PROFILES=nocheck
29
+ dpkg-buildpackage -b -us -uc -Pnocheck > /tmp/dpkg.log 2>&1 || { grep -E "error|Error" /tmp/dpkg.log | head -30; tail -20 /tmp/dpkg.log; exit 1; }
30
+ grep -cE "_deps/googletest|FetchContent" /tmp/dpkg.log || true
31
+ ls /tmp/*.deb
32
+ apt-get install -y -qq /tmp/*.deb >/dev/null 2>&1 || dpkg -i /tmp/*.deb
33
+ dpkg -L $(dpkg-deb -f /tmp/*.deb Package) | grep -E "bin/kairos$|libkairos|kairosConfig|completion" | head
34
+ ls /opt/ros/$ROS_DISTRO/lib/libkairos.so.1
35
+ env -i /opt/ros/$ROS_DISTRO/bin/kairos --version
36
+ env -i /opt/ros/$ROS_DISTRO/bin/kairos /tmp/kairos/docs/examples/pddls/cooking_domain.pddl /tmp/kairos/docs/examples/pddls/cooking_problem_simple.pddl --timeout 5 --no-anytime | tail -2
37
+ # A program that uses the library, as PlanSys2's plugin does (the ROS environment: lib only)
38
+ cmake -S /tmp/kairos/tests/install -B /tmp/consumer -DCMAKE_PREFIX_PATH=/opt/ros/$ROS_DISTRO > /tmp/consumer.log 2>&1 && cmake --build /tmp/consumer >> /tmp/consumer.log 2>&1 || { tail -20 /tmp/consumer.log; exit 1; }
39
+ env -i LD_LIBRARY_PATH=/opt/ros/$ROS_DISTRO/lib /tmp/consumer/kairos_consumer && echo CONSUMER OK
40
+ echo PACKAGE OK
@@ -0,0 +1,47 @@
1
+ #!/bin/bash
2
+ # Copyright 2026 Intelligent Robotics Lab
3
+ #
4
+ # Licensed under the Apache License, Version 2.0 (the "License");
5
+ # you may not use this file except in compliance with the License.
6
+ # You may obtain a copy of the License at
7
+ #
8
+ # http://www.apache.org/licenses/LICENSE-2.0
9
+ #
10
+ # Unless required by applicable law or agreed to in writing, software
11
+ # distributed under the License is distributed on an "AS IS" BASIS,
12
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ # See the License for the specific language governing permissions and
14
+ # limitations under the License.
15
+
16
+ # As the ROS buildfarm's binaryrpm job: bloom-generate rosrpm, rpmbuild without tests, then install
17
+ set -e
18
+ grep -q almalinux /etc/os-release && sed -i 's/^mirrorlist/#mirrorlist/; s/^# *baseurl/baseurl/' /etc/yum.repos.d/*.repo
19
+ dnf install -y -q python3-pip rpm-build cmake gcc-c++ make git tar >/dev/null 2>&1
20
+ grep -q almalinux /etc/os-release && dnf install -y -q 'dnf-command(config-manager)' >/dev/null 2>&1 || true
21
+ pip3 install -q bloom rosdep >/dev/null 2>&1
22
+ rosdep init >/dev/null 2>&1 || true
23
+ rosdep update --rosdistro $ROS_DISTRO >/dev/null 2>&1
24
+ g++ --version | head -1; cmake --version | head -1
25
+ cp -r /src /tmp/kairos && cd /tmp/kairos
26
+ . /etc/os-release
27
+ OSN=$ID; [ "$ID" = almalinux ] && OSN=rhel
28
+ bloom-generate rosrpm --ros-distro $ROS_DISTRO --os-name $OSN --os-version ${VERSION_ID%%.*} > /tmp/bloom.log 2>&1 || { tail -30 /tmp/bloom.log; exit 1; }
29
+ SPEC=rpm/template.spec
30
+ NAME=$(rpmspec -q --qf '%{name}\n' --define "_sourcedir /tmp" $SPEC 2>/dev/null | head -1)
31
+ VER=$(rpmspec -q --qf '%{version}\n' $SPEC 2>/dev/null | head -1)
32
+ echo "$NAME $VER"
33
+ mkdir -p ~/rpmbuild/SOURCES
34
+ SRC=$(grep -E "^Source0:" $SPEC | awk '{print $2}' | sed "s/%{name}/$NAME/g; s/%{version}/$VER/g")
35
+ echo "Source0: $SRC"
36
+ cd /tmp && tar czf ~/rpmbuild/SOURCES/$(basename $SRC) --transform "s,^kairos,$NAME-$VER," kairos
37
+ rpmbuild -bb --without tests /tmp/kairos/$SPEC > /tmp/rpm.log 2>&1 || { grep -E "error|Error|Installed \(but unpackaged\)" -A5 /tmp/rpm.log | head -40; tail -15 /tmp/rpm.log; exit 1; }
38
+ RPM=$(ls ~/rpmbuild/RPMS/*/*.rpm | grep -v debug | head -1); echo $RPM
39
+ dnf install -y -q $RPM >/dev/null 2>&1 || rpm -i --nodeps $RPM
40
+ rpm -ql $(rpm -qp --qf '%{name}' $RPM) | grep -E "bin/kairos$|libkairos|kairosConfig" | head
41
+ ls /opt/ros/$ROS_DISTRO/lib/libkairos.so.1
42
+ env -i /opt/ros/$ROS_DISTRO/bin/kairos --version
43
+ env -i /opt/ros/$ROS_DISTRO/bin/kairos /tmp/kairos/docs/examples/pddls/cooking_domain.pddl /tmp/kairos/docs/examples/pddls/cooking_problem_simple.pddl --timeout 5 --no-anytime | tail -2
44
+ # A program that uses the library, as PlanSys2's plugin does (the ROS environment: lib only)
45
+ cmake -S /tmp/kairos/tests/install -B /tmp/consumer -DCMAKE_PREFIX_PATH=/opt/ros/$ROS_DISTRO > /tmp/consumer.log 2>&1 && cmake --build /tmp/consumer >> /tmp/consumer.log 2>&1 || { tail -20 /tmp/consumer.log; exit 1; }
46
+ env -i LD_LIBRARY_PATH=/opt/ros/$ROS_DISTRO/lib /tmp/consumer/kairos_consumer && echo CONSUMER OK
47
+ echo PACKAGE OK
@@ -0,0 +1,234 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+
8
+ jobs:
9
+ build-test:
10
+ name: ${{ matrix.name }}
11
+ runs-on: ${{ matrix.os }}
12
+ strategy:
13
+ fail-fast: false
14
+ matrix:
15
+ include:
16
+ - name: gcc-release
17
+ os: ubuntu-24.04
18
+ cxx: g++
19
+ build_type: Release
20
+ sanitize: ""
21
+ - name: clang-release
22
+ os: ubuntu-24.04
23
+ cxx: clang++
24
+ build_type: Release
25
+ sanitize: ""
26
+ - name: gcc-asan-ubsan
27
+ os: ubuntu-24.04
28
+ cxx: g++
29
+ build_type: Debug
30
+ sanitize: "address;undefined"
31
+ - name: clang-tsan
32
+ os: ubuntu-24.04
33
+ cxx: clang++
34
+ build_type: Debug
35
+ sanitize: "thread"
36
+ - name: gcc-arm64
37
+ os: ubuntu-24.04-arm
38
+ cxx: g++
39
+ build_type: Release
40
+ sanitize: ""
41
+ steps:
42
+ - uses: actions/checkout@v5
43
+
44
+ - name: Install dependencies
45
+ run: |
46
+ sudo apt-get update
47
+ sudo apt-get install -y cmake ninja-build libgtest-dev uncrustify python3 clang
48
+
49
+ - name: Configure
50
+ run: >
51
+ cmake -S . -B build -G Ninja
52
+ -DCMAKE_CXX_COMPILER=${{ matrix.cxx }}
53
+ -DCMAKE_BUILD_TYPE=${{ matrix.build_type }}
54
+ -DKAIROS_WARNINGS_AS_ERRORS=ON
55
+ "-DKAIROS_SANITIZE=${{ matrix.sanitize }}"
56
+
57
+ - name: Build
58
+ run: cmake --build build
59
+
60
+ # A failed test runs once more: a load spike of the runner should not fail the CI, a real
61
+ # regression fails both times
62
+ - name: Test
63
+ env:
64
+ UBSAN_OPTIONS: halt_on_error=1:print_stacktrace=1
65
+ run: ctest --test-dir build --output-on-failure --repeat until-pass:2
66
+
67
+ - name: Install and use from another project
68
+ if: matrix.sanitize == ''
69
+ run: |
70
+ cmake --install build --prefix "$PWD/install"
71
+ cmake -S tests/install -B build-consumer -G Ninja \
72
+ -DCMAKE_CXX_COMPILER=${{ matrix.cxx }} -DCMAKE_PREFIX_PATH="$PWD/install"
73
+ cmake --build build-consumer
74
+ LD_LIBRARY_PATH="$PWD/install/lib" ./build-consumer/kairos_consumer
75
+
76
+ memory-limited:
77
+ name: tests in a 512 MB cgroup
78
+ runs-on: ubuntu-24.04
79
+ steps:
80
+ - uses: actions/checkout@v5
81
+ - name: Install dependencies
82
+ run: |
83
+ sudo apt-get update
84
+ sudo apt-get install -y cmake ninja-build libgtest-dev uncrustify python3
85
+ - name: Build
86
+ run: |
87
+ cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release
88
+ cmake --build build
89
+ - name: Test under MemoryMax=512M
90
+ run: >
91
+ sudo systemd-run --scope -p MemoryMax=512M -p MemorySwapMax=0
92
+ ctest --test-dir build --output-on-failure --repeat until-pass:2 -LE lint
93
+
94
+ coverage:
95
+ name: coverage (lines >= 90 %)
96
+ runs-on: ubuntu-24.04
97
+ permissions:
98
+ contents: write # the badge, on the badges branch
99
+ steps:
100
+ - uses: actions/checkout@v5
101
+ - name: Install dependencies
102
+ run: |
103
+ sudo apt-get update
104
+ sudo apt-get install -y cmake ninja-build libgtest-dev uncrustify python3 pipx
105
+ pipx install gcovr==8.6
106
+ echo "$HOME/.local/bin" >> "$GITHUB_PATH"
107
+ - name: Build with coverage
108
+ run: |
109
+ cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug -DKAIROS_COVERAGE=ON
110
+ cmake --build build
111
+ - name: Test
112
+ run: ctest --test-dir build --output-on-failure --repeat until-pass:2 -LE lint --parallel 4
113
+ - name: Report (gcovr.cfg sets the threshold)
114
+ run: |
115
+ mkdir -p coverage
116
+ status=0
117
+ gcovr build --html-details coverage/index.html --markdown coverage/report.md \
118
+ --cobertura coverage/coverage.xml || status=$?
119
+ cat coverage/report.md >> "$GITHUB_STEP_SUMMARY"
120
+ exit $status
121
+ - name: Upload the report
122
+ if: always()
123
+ uses: actions/upload-artifact@v4
124
+ with:
125
+ name: coverage-report
126
+ path: coverage/
127
+ - name: Publish the badge (main only)
128
+ if: github.event_name == 'push' && github.ref == 'refs/heads/main'
129
+ env:
130
+ TOKEN: ${{ github.token }}
131
+ run: |
132
+ # Shields.io endpoint JSON on an orphan branch with a single commit
133
+ python3 - <<'PY'
134
+ import json
135
+ import xml.etree.ElementTree as ET
136
+ rate = float(ET.parse('coverage/coverage.xml').getroot().get('line-rate')) * 100
137
+ color = 'brightgreen' if rate >= 90 else 'yellow' if rate >= 80 else 'red'
138
+ badge = {'schemaVersion': 1, 'label': 'coverage', 'message': '%.1f%%' % rate,
139
+ 'color': color}
140
+ json.dump(badge, open('coverage.json', 'w'))
141
+ PY
142
+ mkdir badge && mv coverage.json badge/ && cd badge
143
+ git init -q -b badges
144
+ git add coverage.json
145
+ git -c user.name=github-actions -c user.email=github-actions@users.noreply.github.com \
146
+ commit -q -m "Coverage badge for ${GITHUB_SHA}"
147
+ git push -q -f "https://x-access-token:${TOKEN}@github.com/${GITHUB_REPOSITORY}.git" \
148
+ badges
149
+
150
+ conda:
151
+ name: conda package with pixi (${{ matrix.arch }})
152
+ runs-on: ${{ matrix.os }}
153
+ strategy:
154
+ fail-fast: false
155
+ matrix:
156
+ include:
157
+ - arch: x86-64
158
+ os: ubuntu-24.04
159
+ - arch: arm64
160
+ os: ubuntu-24.04-arm
161
+ steps:
162
+ - uses: actions/checkout@v5
163
+ - name: Install pixi
164
+ run: |
165
+ curl -fsSL https://pixi.sh/install.sh | PIXI_VERSION=v0.81.0 bash
166
+ echo "$HOME/.pixi/bin" >> "$GITHUB_PATH"
167
+ - name: Build the package (pixi-build-cmake)
168
+ run: pixi publish --target-channel "file://$PWD/channel"
169
+ - name: Install it and plan with it
170
+ run: |
171
+ run="pixi exec -c file://$PWD/channel -c https://prefix.dev/conda-forge -s kairos"
172
+ $run kairos --version
173
+ $run kairos tests/data/plansys2/plansys2_executor__suave_domain.pddl \
174
+ tests/data/plansys2/plansys2_executor__suave_problem.pddl
175
+ - name: Upload the package
176
+ uses: actions/upload-artifact@v4
177
+ with:
178
+ name: kairos-conda-${{ matrix.arch }}
179
+ path: channel/*/*.conda
180
+
181
+ ros-package:
182
+ # As the ROS 2 buildfarm's binary jobs: bloom generates the package, it builds without tests,
183
+ # installs in /opt/ros/DISTRO, runs, and a program that uses the library builds against it
184
+ name: ROS package ${{ matrix.distro }} (${{ matrix.image }}, ${{ matrix.arch }})
185
+ runs-on: ${{ matrix.arch == 'arm64' && 'ubuntu-24.04-arm' || 'ubuntu-24.04' }}
186
+ strategy:
187
+ fail-fast: false
188
+ matrix:
189
+ include:
190
+ - {distro: humble, image: 'ros:humble-ros-core', kind: deb, arch: amd64}
191
+ - {distro: humble, image: 'ros:humble-ros-core', kind: deb, arch: arm64}
192
+ - {distro: jazzy, image: 'ros:jazzy-ros-core', kind: deb, arch: amd64}
193
+ - {distro: jazzy, image: 'ros:jazzy-ros-core', kind: deb, arch: arm64}
194
+ - {distro: kilted, image: 'ros:kilted-ros-core', kind: deb, arch: amd64}
195
+ - {distro: kilted, image: 'ros:kilted-ros-core', kind: deb, arch: arm64}
196
+ - {distro: lyrical, image: 'ros:lyrical-ros-core', kind: deb, arch: amd64}
197
+ - {distro: lyrical, image: 'ros:lyrical-ros-core', kind: deb, arch: arm64}
198
+ - {distro: jazzy, image: 'almalinux:9', kind: rpm, arch: amd64}
199
+ - {distro: kilted, image: 'almalinux:9', kind: rpm, arch: amd64}
200
+ - {distro: lyrical, image: 'almalinux:10', kind: rpm, arch: amd64}
201
+ - {distro: lyrical, image: 'fedora:43', kind: rpm, arch: amd64}
202
+ steps:
203
+ - uses: actions/checkout@v5
204
+ - name: Build, install and use the package
205
+ run: |
206
+ docker run --rm -e ROS_DISTRO=${{ matrix.distro }} -v "$PWD:/src:ro" \
207
+ ${{ matrix.image }} bash /src/.github/scripts/ros_${{ matrix.kind }}.sh
208
+
209
+ fuzz:
210
+ name: libFuzzer (2 min per target)
211
+ runs-on: ubuntu-24.04
212
+ steps:
213
+ - uses: actions/checkout@v5
214
+ - name: Install dependencies
215
+ run: |
216
+ sudo apt-get update
217
+ sudo apt-get install -y cmake ninja-build clang
218
+ - name: Build fuzzers
219
+ run: |
220
+ cmake -S . -B build -G Ninja -DCMAKE_CXX_COMPILER=clang++ \
221
+ -DCMAKE_BUILD_TYPE=RelWithDebInfo -DKAIROS_BUILD_TESTS=OFF -DKAIROS_BUILD_FUZZERS=ON
222
+ cmake --build build --target lexer_fuzzer parser_fuzzer plan_fuzzer
223
+ - name: Fuzz the lexer
224
+ run: |
225
+ mkdir -p corpus-work
226
+ ./build/fuzz/lexer_fuzzer -max_total_time=120 -max_len=4096 corpus-work fuzz/corpus/lexer
227
+ - name: Fuzz the parser
228
+ run: |
229
+ mkdir -p corpus-parser
230
+ ./build/fuzz/parser_fuzzer -max_total_time=120 -max_len=8192 corpus-parser fuzz/corpus/parser
231
+ - name: Fuzz the plan reader
232
+ run: |
233
+ mkdir -p corpus-plan
234
+ ./build/fuzz/plan_fuzzer -max_total_time=60 -max_len=4096 corpus-plan fuzz/corpus/plan
@@ -0,0 +1,49 @@
1
+ name: Python wheels
2
+
3
+ # kairos-planner: wheels for Linux (x86-64, arm64, manylinux_2_28), each tested with the
4
+ # Python suite; a version tag (e.g. 1.0.3) also publishes them on PyPI (trusted publishing)
5
+ on:
6
+ push:
7
+ branches: [main]
8
+ tags: ['[0-9]+.[0-9]+.[0-9]+']
9
+ pull_request:
10
+
11
+ jobs:
12
+ wheels:
13
+ name: wheels (${{ matrix.os }})
14
+ runs-on: ${{ matrix.os }}
15
+ strategy:
16
+ fail-fast: false
17
+ matrix:
18
+ os: [ubuntu-24.04, ubuntu-24.04-arm]
19
+ steps:
20
+ - uses: actions/checkout@v5
21
+ - uses: pypa/cibuildwheel@v3.2.1
22
+ - uses: actions/upload-artifact@v4
23
+ with:
24
+ name: wheels-${{ matrix.os }}
25
+ path: wheelhouse/*.whl
26
+
27
+ sdist:
28
+ runs-on: ubuntu-24.04
29
+ steps:
30
+ - uses: actions/checkout@v5
31
+ - run: pipx run build --sdist
32
+ - uses: actions/upload-artifact@v4
33
+ with:
34
+ name: sdist
35
+ path: dist/*.tar.gz
36
+
37
+ publish:
38
+ if: startsWith(github.ref, 'refs/tags/')
39
+ needs: [wheels, sdist]
40
+ runs-on: ubuntu-24.04
41
+ environment: pypi
42
+ permissions:
43
+ id-token: write
44
+ steps:
45
+ - uses: actions/download-artifact@v5
46
+ with:
47
+ path: dist
48
+ merge-multiple: true
49
+ - uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,12 @@
1
+ /build/
2
+ /build-*/
3
+ /install/
4
+ /log/
5
+ .cache/
6
+ compile_commands.json
7
+ __pycache__/
8
+ *.pyc
9
+ /coverage/
10
+ /.pixi/
11
+ /dist/
12
+ /wheelhouse/
@@ -0,0 +1,99 @@
1
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2
+ Changelog for package kairos
3
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4
+
5
+ 1.0.3 (2026-10-18)
6
+ ------------------
7
+ * Python: ``pip install kairos-planner`` (wheels for Linux x86-64 and arm64): parse, check,
8
+ plan (blocking, in the background or as an iterator of better plans) and validate, with the
9
+ diagnostics; planning releases the GIL and Ctrl-C stops it. The wheel has the ``kairos``
10
+ command too.
11
+ * A search stopped by the caller while the steps of time were still searching after M3 ran out
12
+ of states is cancelled, not "no plan found".
13
+ * The static ``libkairos`` is position independent (it links into shared objects).
14
+ * The goal holds after the last timed initial literal too, as VAL and the validator check it:
15
+ M3 took a goal state as a plan before later literals, and every plan it found could fail
16
+ validation (an internal error). A goal state of M3 with timed literals counts once its plan
17
+ is valid; the search goes on otherwise.
18
+ * Reads the PDDL that UPF's writer gives: several constraints in ``:constraints`` without
19
+ ``and``, and timed initial fluents as ``(at t (assign (f) v))`` (with a warning).
20
+ * Python: ``SearchOptions`` given to ``solve`` (what ``SolveOptions`` has).
21
+ * Contributors: Francisco Martín Rico
22
+
23
+ 1.0.2 (2026-10-18)
24
+ ------------------
25
+ * Proofs that a temporal task has no plan: the timed initial literals take away what the goal
26
+ needs too soon (from the initial state, ignoring deletes, with the shortest durations), or the
27
+ task without durations nor times has no path to the goal (when M3 runs out of states).
28
+ * Steps of time: the time is kept only with timed initial literals, until the last one, and
29
+ epsilon passes only right after a happening; tiny tasks that ran to the timeout end in ms.
30
+ * With several threads, the phases for when there is no plan stop once another finds one.
31
+ * M3 out of states while the steps of time run out of time is a timeout, not "no plan found".
32
+ * The deadlines of M3 no longer take durations that change as bounds, nor over all conditions
33
+ an action's start gives itself as needed before it.
34
+ * Contributors: Francisco Martín Rico
35
+
36
+ 1.0.1 (2026-10-17)
37
+ ------------------
38
+ * Builds on Ubuntu 22.04 and ROS 2 Humble: CMake 3.22 is enough (nothing needed 3.24), and the
39
+ CI builds the Humble packages as the buildfarm does.
40
+ * The style test is disabled, with a warning, when uncrustify is older than its configuration
41
+ (0.78).
42
+ * Why there is no plan: an unreachable goal is now traced to the static fact that is really
43
+ missing (the initial facts that grounding leaves out of the task count as reachable).
44
+ * Contributors: Francisco Martín Rico
45
+
46
+ 1.0.0 (2026-10-14)
47
+ ------------------
48
+ * PDDL+: processes, events, global constraints and continuous effects (linear and non-linear),
49
+ planned in steps of time and validated in continuous time.
50
+ * Durations between their bounds and non-linear numeric conditions in the heuristics.
51
+ * Planning without grounding: a lifted engine for tasks with millions of ground actions.
52
+ * Status ``NoPlanFound`` (exit code 14): ``Unsolvable`` now needs a proof.
53
+ * A bank of benchmarks per PDDL feature (https://github.com/PlanSys2/kairos-benchmarks), and the
54
+ bugs it found fixed: object fluents without a value, timed initial fluents in M2 and M3,
55
+ required concurrency between two variables, deadlines with derived atoms, waits longer than
56
+ 2000 s, incremental goals that must break a goal true from the start.
57
+ * Every PDDL feature that ``kairos --features`` lists is fully supported.
58
+ * Without a plan, a note says why and which option could change it (``orchestrator.why``).
59
+ * Builds as a ROS 2 package for Jazzy, Kilted and Lyrical on every buildfarm target (Ubuntu
60
+ amd64 and arm64, RHEL 9 and 10, Fedora): no ``<format>`` (GCC 11), no whole-archive linking
61
+ (CMake 3.28), the library in ``lib`` under ``/opt/ros`` and the command with a relative
62
+ RUNPATH; the tests follow ``BUILD_TESTING``. A CI job builds the packages as the buildfarm.
63
+ * The library's SONAME is ``libkairos.so.1``: the ABI is stable within a major version.
64
+ * Contributors: Francisco Martín Rico
65
+
66
+ 0.5.0 (2026-10-13)
67
+ ------------------
68
+ * Ahead of LAMA and of the winners of the IPC 2023 on classical planning.
69
+ * PDDL3 preferences and trajectory constraints; changing object fluents everywhere.
70
+ * Resources in the schedule; temporal landmarks and invariants.
71
+ * The memory limit kept while grounding, and the real peak in the statistics.
72
+ * Contributors: Francisco Martín Rico
73
+
74
+ 0.4.0 (2026-10-12)
75
+ ------------------
76
+ * Temporal planning: engine M2 (durative actions compressed and rescheduled) and engine M3 (snap
77
+ actions over a temporal network, as POPF); duration inequalities and continuous effects.
78
+ * The phases of the search in parallel; scaling to large PlanSys2 problems.
79
+ * Why the goal cannot be reached; shell completion; documentation of the command and examples.
80
+ * Conda package with pixi.
81
+ * Contributors: Francisco Martín Rico
82
+
83
+ 0.3.0 (2026-10-11)
84
+ ------------------
85
+ * Landmarks, novelty and other heuristics in the search; test coverage in the CI.
86
+ * Contributors: Francisco Martín Rico
87
+
88
+ 0.2.0 (2026-10-11)
89
+ ------------------
90
+ * PDDL lexer, parser, printer, semantic checks and diagnostics; plan validator.
91
+ * Normalization, grounding in Datalog, SAS+ translation with invariant synthesis.
92
+ * Packed states, heuristics (hmax, hadd, FF), searches (GBFS, WA*, EHC, anytime).
93
+ * The planner API, the orchestrator and the ``kairos`` executable.
94
+ * Contributors: Francisco Martín Rico
95
+
96
+ 0.1.0 (2026-10-10)
97
+ ------------------
98
+ * Project skeleton and core infrastructure.
99
+ * Contributors: Francisco Martín Rico
@@ -0,0 +1,108 @@
1
+ # Copyright 2026 Intelligent Robotics Lab
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing, software
10
+ # distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ cmake_minimum_required(VERSION 3.22)
16
+
17
+ project(kairos
18
+ VERSION 1.0.3
19
+ DESCRIPTION "Modern temporal and numeric PDDL planner"
20
+ LANGUAGES CXX)
21
+
22
+ # The version lives in package.xml and pixi.toml too
23
+ foreach(manifest package.xml pixi.toml)
24
+ file(READ "${CMAKE_CURRENT_SOURCE_DIR}/${manifest}" _text)
25
+ if(manifest STREQUAL "package.xml")
26
+ string(REGEX MATCH "<version>([^<]+)</version>" _found "${_text}")
27
+ else()
28
+ string(REGEX MATCH "\nversion = \"([^\"]+)\"" _found "${_text}")
29
+ endif()
30
+ if(NOT CMAKE_MATCH_1 STREQUAL PROJECT_VERSION)
31
+ message(FATAL_ERROR
32
+ "${manifest} has version '${CMAKE_MATCH_1}', CMakeLists.txt has ${PROJECT_VERSION}")
33
+ endif()
34
+ endforeach()
35
+
36
+ set(CMAKE_CXX_STANDARD 20)
37
+ set(CMAKE_CXX_STANDARD_REQUIRED ON)
38
+ set(CMAKE_CXX_EXTENSIONS OFF)
39
+ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
40
+
41
+ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
42
+ set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
43
+ endif()
44
+
45
+ # The tests follow BUILD_TESTING when it is given (packaging builds turn it off: nothing to
46
+ # download, no lint)
47
+ if(DEFINED BUILD_TESTING)
48
+ set(_kairos_tests_default ${BUILD_TESTING})
49
+ else()
50
+ set(_kairos_tests_default ON)
51
+ endif()
52
+ option(KAIROS_BUILD_TESTS "Build the gtest suites and lint tests" ${_kairos_tests_default})
53
+ option(KAIROS_BUILD_CLI "Build the kairos executable" ON)
54
+ option(KAIROS_BUILD_PYTHON "Build the Python module (nanobind)" OFF)
55
+ option(KAIROS_BUILD_FUZZERS "Build libFuzzer targets (requires Clang)" OFF)
56
+ option(KAIROS_COVERAGE "Instrument for coverage" OFF)
57
+ option(KAIROS_WARNINGS_AS_ERRORS "Treat warnings as errors" OFF)
58
+ set(KAIROS_SANITIZE "" CACHE STRING "Sanitizers: empty, 'address;undefined' or 'thread'")
59
+
60
+ list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
61
+ include(KairosCompilerOptions)
62
+ # A ROS install (the buildfarm's packages, /opt/ros/DISTRO) finds libraries in lib only, not in
63
+ # lib64 (RHEL, Fedora) or lib/<multiarch> (Debian)
64
+ if(CMAKE_INSTALL_PREFIX MATCHES "^/opt/ros/")
65
+ set(CMAKE_INSTALL_LIBDIR lib) # over the cache (packaging tools pass their own)
66
+ endif()
67
+ include(GNUInstallDirs)
68
+
69
+ add_subdirectory(src)
70
+
71
+ if(KAIROS_BUILD_TESTS)
72
+ include(CTest) # also writes DartConfiguration.tcl, expected by colcon test
73
+ add_subdirectory(tests)
74
+ include(KairosLint)
75
+ endif()
76
+
77
+ if(KAIROS_BUILD_PYTHON)
78
+ add_subdirectory(python)
79
+ endif()
80
+
81
+ if(KAIROS_BUILD_TESTS OR KAIROS_BUILD_FUZZERS)
82
+ add_subdirectory(fuzz)
83
+ endif()
84
+
85
+ # Installation and package config
86
+ include(CMakePackageConfigHelpers)
87
+
88
+ install(DIRECTORY include/kairos DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
89
+ PATTERN "*.in" EXCLUDE)
90
+ install(FILES
91
+ ${CMAKE_CURRENT_BINARY_DIR}/include/kairos/version.hpp
92
+ ${CMAKE_CURRENT_BINARY_DIR}/include/kairos/export.hpp
93
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/kairos)
94
+
95
+ install(EXPORT kairosTargets
96
+ NAMESPACE kairos::
97
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/kairos)
98
+
99
+ configure_package_config_file(cmake/kairosConfig.cmake.in
100
+ ${CMAKE_CURRENT_BINARY_DIR}/kairosConfig.cmake
101
+ INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/kairos)
102
+ write_basic_package_version_file(
103
+ ${CMAKE_CURRENT_BINARY_DIR}/kairosConfigVersion.cmake
104
+ COMPATIBILITY SameMajorVersion)
105
+ install(FILES
106
+ ${CMAKE_CURRENT_BINARY_DIR}/kairosConfig.cmake
107
+ ${CMAKE_CURRENT_BINARY_DIR}/kairosConfigVersion.cmake
108
+ DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/kairos)