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.
- kairos_planner-1.0.3/.github/scripts/ros_deb.sh +40 -0
- kairos_planner-1.0.3/.github/scripts/ros_rpm.sh +47 -0
- kairos_planner-1.0.3/.github/workflows/ci.yml +234 -0
- kairos_planner-1.0.3/.github/workflows/wheels.yml +49 -0
- kairos_planner-1.0.3/.gitignore +12 -0
- kairos_planner-1.0.3/CHANGELOG.rst +99 -0
- kairos_planner-1.0.3/CMakeLists.txt +108 -0
- kairos_planner-1.0.3/CONTRIBUTING.md +137 -0
- kairos_planner-1.0.3/LICENSE +201 -0
- kairos_planner-1.0.3/PKG-INFO +57 -0
- kairos_planner-1.0.3/README.md +312 -0
- kairos_planner-1.0.3/cmake/KairosCompilerOptions.cmake +44 -0
- kairos_planner-1.0.3/cmake/KairosLint.cmake +61 -0
- kairos_planner-1.0.3/cmake/kairosConfig.cmake.in +7 -0
- kairos_planner-1.0.3/colcon.pkg +6 -0
- kairos_planner-1.0.3/docs/benchmark.md +502 -0
- kairos_planner-1.0.3/docs/cli.md +943 -0
- kairos_planner-1.0.3/docs/examples/pddls/battery_domain.pddl +58 -0
- kairos_planner-1.0.3/docs/examples/pddls/battery_problem_long.pddl +148 -0
- kairos_planner-1.0.3/docs/examples/pddls/battery_problem_medium.pddl +68 -0
- kairos_planner-1.0.3/docs/examples/pddls/battery_problem_simple.pddl +35 -0
- kairos_planner-1.0.3/docs/examples/pddls/cooking_cost_domain.pddl +182 -0
- kairos_planner-1.0.3/docs/examples/pddls/cooking_cost_problem_long.pddl +135 -0
- kairos_planner-1.0.3/docs/examples/pddls/cooking_cost_problem_medium.pddl +111 -0
- kairos_planner-1.0.3/docs/examples/pddls/cooking_cost_problem_simple.pddl +107 -0
- kairos_planner-1.0.3/docs/examples/pddls/cooking_domain.pddl +198 -0
- kairos_planner-1.0.3/docs/examples/pddls/cooking_problem_huge.pddl +128 -0
- kairos_planner-1.0.3/docs/examples/pddls/cooking_problem_long.pddl +89 -0
- kairos_planner-1.0.3/docs/examples/pddls/cooking_problem_simple.pddl +67 -0
- kairos_planner-1.0.3/docs/examples/pddls/domain_charging.pddl +79 -0
- kairos_planner-1.0.3/docs/examples/pddls/domain_simple.pddl +62 -0
- kairos_planner-1.0.3/docs/examples/pddls/domain_simple_2.pddl +77 -0
- kairos_planner-1.0.3/docs/examples/pddls/domain_simple_problem_1.pddl +21 -0
- kairos_planner-1.0.3/docs/examples/pddls/domain_simple_problem_2.pddl +20 -0
- kairos_planner-1.0.3/docs/examples/pddls/domain_simple_problem_3.pddl +18 -0
- kairos_planner-1.0.3/docs/examples/pddls/elevator_domain.pddl +92 -0
- kairos_planner-1.0.3/docs/examples/pddls/elevator_problem.pddl +54 -0
- kairos_planner-1.0.3/docs/examples/pddls/factory.pddl +88 -0
- kairos_planner-1.0.3/docs/examples/pddls/factory2.pddl +84 -0
- kairos_planner-1.0.3/docs/examples/pddls/factory3.pddl +85 -0
- kairos_planner-1.0.3/docs/examples/pddls/factory4.pddl +73 -0
- kairos_planner-1.0.3/docs/examples/pddls/factory_problem_1.pddl +44 -0
- kairos_planner-1.0.3/docs/examples/pddls/matchcellar.pddl +32 -0
- kairos_planner-1.0.3/docs/examples/pddls/road_trip_domain.pddl +87 -0
- kairos_planner-1.0.3/docs/examples/pddls/road_trip_problem.pddl +84 -0
- kairos_planner-1.0.3/docs/examples/pddls/simple_example.pddl +77 -0
- kairos_planner-1.0.3/docs/examples/pddls/simple_move_example.pddl +37 -0
- kairos_planner-1.0.3/docs/examples/pddls/stn_test.pddl +54 -0
- kairos_planner-1.0.3/docs/examples/pddls/suave_domain.pddl +701 -0
- kairos_planner-1.0.3/docs/examples/pddls/suave_problem.pddl +138 -0
- kairos_planner-1.0.3/docs/examples.md +264 -0
- kairos_planner-1.0.3/docs/images/kairos.png +0 -0
- kairos_planner-1.0.3/docs/images/kairos_white.png +0 -0
- kairos_planner-1.0.3/docs/pddl-support.md +138 -0
- kairos_planner-1.0.3/gcovr.cfg +11 -0
- kairos_planner-1.0.3/include/kairos/check.hpp +85 -0
- kairos_planner-1.0.3/include/kairos/diagnostics.hpp +99 -0
- kairos_planner-1.0.3/include/kairos/kairos.hpp +30 -0
- kairos_planner-1.0.3/include/kairos/log.hpp +120 -0
- kairos_planner-1.0.3/include/kairos/plan.hpp +101 -0
- kairos_planner-1.0.3/include/kairos/planner.hpp +256 -0
- kairos_planner-1.0.3/include/kairos/result.hpp +120 -0
- kairos_planner-1.0.3/include/kairos/validate.hpp +96 -0
- kairos_planner-1.0.3/include/kairos/version.hpp.in +38 -0
- kairos_planner-1.0.3/package.xml +22 -0
- kairos_planner-1.0.3/pixi.toml +29 -0
- kairos_planner-1.0.3/pyproject.toml +57 -0
- kairos_planner-1.0.3/python/CMakeLists.txt +48 -0
- kairos_planner-1.0.3/python/README.md +36 -0
- kairos_planner-1.0.3/python/kairos/__init__.py +213 -0
- kairos_planner-1.0.3/python/kairos/py.typed +0 -0
- kairos_planner-1.0.3/python/src/kairos_python.cpp +503 -0
- kairos_planner-1.0.3/python/tests/test_kairos.py +403 -0
- kairos_planner-1.0.3/src/CMakeLists.txt +114 -0
- kairos_planner-1.0.3/src/api/check.cpp +170 -0
- kairos_planner-1.0.3/src/api/planner.cpp +399 -0
- kairos_planner-1.0.3/src/api/validate.cpp +75 -0
- kairos_planner-1.0.3/src/api/version.cpp +25 -0
- kairos_planner-1.0.3/src/cli/CMakeLists.txt +49 -0
- kairos_planner-1.0.3/src/cli/completion.cpp +209 -0
- kairos_planner-1.0.3/src/cli/completion.hpp +47 -0
- kairos_planner-1.0.3/src/cli/main.cpp +676 -0
- kairos_planner-1.0.3/src/core/CMakeLists.txt +24 -0
- kairos_planner-1.0.3/src/core/budget.cpp +164 -0
- kairos_planner-1.0.3/src/core/budget.hpp +125 -0
- kairos_planner-1.0.3/src/core/diagnostics.cpp +135 -0
- kairos_planner-1.0.3/src/core/id.hpp +144 -0
- kairos_planner-1.0.3/src/core/log.cpp +95 -0
- kairos_planner-1.0.3/src/core/logger.hpp +169 -0
- kairos_planner-1.0.3/src/core/memory_info.cpp +246 -0
- kairos_planner-1.0.3/src/core/memory_info.hpp +87 -0
- kairos_planner-1.0.3/src/core/suggest.cpp +76 -0
- kairos_planner-1.0.3/src/core/suggest.hpp +45 -0
- kairos_planner-1.0.3/src/core/symbol_table.cpp +85 -0
- kairos_planner-1.0.3/src/core/symbol_table.hpp +71 -0
- kairos_planner-1.0.3/src/ground/CMakeLists.txt +20 -0
- kairos_planner-1.0.3/src/ground/datalog.cpp +539 -0
- kairos_planner-1.0.3/src/ground/datalog.hpp +182 -0
- kairos_planner-1.0.3/src/ground/grounder.cpp +2012 -0
- kairos_planner-1.0.3/src/ground/grounder.hpp +78 -0
- kairos_planner-1.0.3/src/ground/task.hpp +238 -0
- kairos_planner-1.0.3/src/heuristics/CMakeLists.txt +21 -0
- kairos_planner-1.0.3/src/heuristics/heuristic.cpp +223 -0
- kairos_planner-1.0.3/src/heuristics/heuristic.hpp +100 -0
- kairos_planner-1.0.3/src/heuristics/landmarks.cpp +591 -0
- kairos_planner-1.0.3/src/heuristics/landmarks.hpp +95 -0
- kairos_planner-1.0.3/src/heuristics/relaxed.cpp +873 -0
- kairos_planner-1.0.3/src/heuristics/relaxed.hpp +260 -0
- kairos_planner-1.0.3/src/lift/CMakeLists.txt +20 -0
- kairos_planner-1.0.3/src/lift/lift.cpp +1524 -0
- kairos_planner-1.0.3/src/lift/lift.hpp +61 -0
- kairos_planner-1.0.3/src/normalize/CMakeLists.txt +19 -0
- kairos_planner-1.0.3/src/normalize/normalizer.cpp +2747 -0
- kairos_planner-1.0.3/src/normalize/normalizer.hpp +68 -0
- kairos_planner-1.0.3/src/normalize/task.hpp +267 -0
- kairos_planner-1.0.3/src/orchestrator/CMakeLists.txt +23 -0
- kairos_planner-1.0.3/src/orchestrator/explain.cpp +306 -0
- kairos_planner-1.0.3/src/orchestrator/explain.hpp +45 -0
- kairos_planner-1.0.3/src/orchestrator/orchestrator.cpp +1883 -0
- kairos_planner-1.0.3/src/orchestrator/orchestrator.hpp +76 -0
- kairos_planner-1.0.3/src/pddl/CMakeLists.txt +22 -0
- kairos_planner-1.0.3/src/pddl/ast.hpp +311 -0
- kairos_planner-1.0.3/src/pddl/dialect.cpp +541 -0
- kairos_planner-1.0.3/src/pddl/dialect.hpp +45 -0
- kairos_planner-1.0.3/src/pddl/lexer.cpp +344 -0
- kairos_planner-1.0.3/src/pddl/lexer.hpp +118 -0
- kairos_planner-1.0.3/src/pddl/parser.cpp +1423 -0
- kairos_planner-1.0.3/src/pddl/parser.hpp +66 -0
- kairos_planner-1.0.3/src/pddl/printer.cpp +545 -0
- kairos_planner-1.0.3/src/pddl/printer.hpp +49 -0
- kairos_planner-1.0.3/src/plan/CMakeLists.txt +19 -0
- kairos_planner-1.0.3/src/plan/plan.cpp +400 -0
- kairos_planner-1.0.3/src/sas/CMakeLists.txt +21 -0
- kairos_planner-1.0.3/src/sas/invariants.cpp +1122 -0
- kairos_planner-1.0.3/src/sas/invariants.hpp +110 -0
- kairos_planner-1.0.3/src/sas/symmetry.cpp +421 -0
- kairos_planner-1.0.3/src/sas/symmetry.hpp +44 -0
- kairos_planner-1.0.3/src/sas/task.hpp +279 -0
- kairos_planner-1.0.3/src/sas/translate.cpp +987 -0
- kairos_planner-1.0.3/src/sas/translate.hpp +86 -0
- kairos_planner-1.0.3/src/search/CMakeLists.txt +22 -0
- kairos_planner-1.0.3/src/search/goals.cpp +323 -0
- kairos_planner-1.0.3/src/search/goals.hpp +60 -0
- kairos_planner-1.0.3/src/search/novelty.cpp +185 -0
- kairos_planner-1.0.3/src/search/novelty.hpp +81 -0
- kairos_planner-1.0.3/src/search/search.cpp +1015 -0
- kairos_planner-1.0.3/src/search/search.hpp +196 -0
- kairos_planner-1.0.3/src/semantic/CMakeLists.txt +21 -0
- kairos_planner-1.0.3/src/semantic/analyzer.cpp +1521 -0
- kairos_planner-1.0.3/src/semantic/analyzer.hpp +51 -0
- kairos_planner-1.0.3/src/semantic/features.cpp +115 -0
- kairos_planner-1.0.3/src/semantic/features.hpp +105 -0
- kairos_planner-1.0.3/src/semantic/model.cpp +188 -0
- kairos_planner-1.0.3/src/semantic/model.hpp +169 -0
- kairos_planner-1.0.3/src/state/CMakeLists.txt +22 -0
- kairos_planner-1.0.3/src/state/eval.cpp +235 -0
- kairos_planner-1.0.3/src/state/eval.hpp +89 -0
- kairos_planner-1.0.3/src/state/packing.cpp +62 -0
- kairos_planner-1.0.3/src/state/packing.hpp +72 -0
- kairos_planner-1.0.3/src/state/registry.cpp +313 -0
- kairos_planner-1.0.3/src/state/registry.hpp +126 -0
- kairos_planner-1.0.3/src/state/successors.cpp +600 -0
- kairos_planner-1.0.3/src/state/successors.hpp +144 -0
- kairos_planner-1.0.3/src/temporal/CMakeLists.txt +26 -0
- kairos_planner-1.0.3/src/temporal/access.hpp +252 -0
- kairos_planner-1.0.3/src/temporal/compress.cpp +796 -0
- kairos_planner-1.0.3/src/temporal/compress.hpp +109 -0
- kairos_planner-1.0.3/src/temporal/durations.cpp +259 -0
- kairos_planner-1.0.3/src/temporal/durations.hpp +57 -0
- kairos_planner-1.0.3/src/temporal/hybrid.cpp +628 -0
- kairos_planner-1.0.3/src/temporal/hybrid.hpp +99 -0
- kairos_planner-1.0.3/src/temporal/profile.cpp +430 -0
- kairos_planner-1.0.3/src/temporal/profile.hpp +54 -0
- kairos_planner-1.0.3/src/temporal/snap.cpp +1093 -0
- kairos_planner-1.0.3/src/temporal/snap.hpp +173 -0
- kairos_planner-1.0.3/src/temporal/stn.cpp +181 -0
- kairos_planner-1.0.3/src/temporal/stn.hpp +107 -0
- kairos_planner-1.0.3/src/temporal/untimed.cpp +120 -0
- kairos_planner-1.0.3/src/temporal/untimed.hpp +61 -0
- kairos_planner-1.0.3/src/validate/CMakeLists.txt +21 -0
- kairos_planner-1.0.3/src/validate/validator.cpp +2931 -0
- kairos_planner-1.0.3/src/validate/validator.hpp +37 -0
- kairos_planner-1.0.3/tests/CMakeLists.txt +57 -0
- kairos_planner-1.0.3/tests/api/CMakeLists.txt +26 -0
- kairos_planner-1.0.3/tests/api/check_test.cpp +236 -0
- kairos_planner-1.0.3/tests/api/examples_test.cpp +213 -0
- kairos_planner-1.0.3/tests/api/planner_test.cpp +2723 -0
- kairos_planner-1.0.3/tests/api/public_api_test.cpp +60 -0
- kairos_planner-1.0.3/tests/cli/CMakeLists.txt +25 -0
- kairos_planner-1.0.3/tests/cli/cli_test.cpp +837 -0
- kairos_planner-1.0.3/tests/core/CMakeLists.txt +27 -0
- kairos_planner-1.0.3/tests/core/budget_test.cpp +415 -0
- kairos_planner-1.0.3/tests/core/diagnostics_test.cpp +135 -0
- kairos_planner-1.0.3/tests/core/id_test.cpp +168 -0
- kairos_planner-1.0.3/tests/core/log_test.cpp +113 -0
- kairos_planner-1.0.3/tests/core/logger_test.cpp +182 -0
- kairos_planner-1.0.3/tests/core/memory_info_test.cpp +296 -0
- kairos_planner-1.0.3/tests/core/result_test.cpp +140 -0
- kairos_planner-1.0.3/tests/core/suggest_test.cpp +92 -0
- kairos_planner-1.0.3/tests/core/symbol_table_test.cpp +151 -0
- kairos_planner-1.0.3/tests/ground/CMakeLists.txt +26 -0
- kairos_planner-1.0.3/tests/ground/datalog_test.cpp +430 -0
- kairos_planner-1.0.3/tests/ground/fd_explore.py +48 -0
- kairos_planner-1.0.3/tests/ground/grounder_test.cpp +1277 -0
- kairos_planner-1.0.3/tests/heuristics/CMakeLists.txt +22 -0
- kairos_planner-1.0.3/tests/heuristics/heuristics_test.cpp +705 -0
- kairos_planner-1.0.3/tests/heuristics/landmarks_test.cpp +550 -0
- kairos_planner-1.0.3/tests/install/CMakeLists.txt +25 -0
- kairos_planner-1.0.3/tests/install/main.cpp +32 -0
- kairos_planner-1.0.3/tests/lift/CMakeLists.txt +24 -0
- kairos_planner-1.0.3/tests/lift/lift_test.cpp +351 -0
- kairos_planner-1.0.3/tests/normalize/CMakeLists.txt +24 -0
- kairos_planner-1.0.3/tests/normalize/normalizer_test.cpp +799 -0
- kairos_planner-1.0.3/tests/pddl/CMakeLists.txt +26 -0
- kairos_planner-1.0.3/tests/pddl/corpus_test.cpp +180 -0
- kairos_planner-1.0.3/tests/pddl/dialect_test.cpp +290 -0
- kairos_planner-1.0.3/tests/pddl/lexer_test.cpp +483 -0
- kairos_planner-1.0.3/tests/pddl/parser_domain_test.cpp +716 -0
- kairos_planner-1.0.3/tests/pddl/parser_problem_test.cpp +299 -0
- kairos_planner-1.0.3/tests/pddl/parser_property_test.cpp +96 -0
- kairos_planner-1.0.3/tests/pddl/printer_test.cpp +166 -0
- kairos_planner-1.0.3/tests/plan/CMakeLists.txt +19 -0
- kairos_planner-1.0.3/tests/plan/plan_test.cpp +413 -0
- kairos_planner-1.0.3/tests/sas/CMakeLists.txt +24 -0
- kairos_planner-1.0.3/tests/sas/fd_check_invariants.py +56 -0
- kairos_planner-1.0.3/tests/sas/fd_groups.py +51 -0
- kairos_planner-1.0.3/tests/sas/invariants_test.cpp +413 -0
- kairos_planner-1.0.3/tests/sas/translate_test.cpp +720 -0
- kairos_planner-1.0.3/tests/search/CMakeLists.txt +26 -0
- kairos_planner-1.0.3/tests/search/goals_test.cpp +259 -0
- kairos_planner-1.0.3/tests/search/novelty_test.cpp +122 -0
- kairos_planner-1.0.3/tests/search/search_test.cpp +556 -0
- kairos_planner-1.0.3/tests/semantic/CMakeLists.txt +24 -0
- kairos_planner-1.0.3/tests/semantic/domain_test.cpp +647 -0
- kairos_planner-1.0.3/tests/semantic/problem_test.cpp +294 -0
- kairos_planner-1.0.3/tests/semantic/semantic_corpus_test.cpp +298 -0
- kairos_planner-1.0.3/tests/semantic/types_features_test.cpp +228 -0
- kairos_planner-1.0.3/tests/state/CMakeLists.txt +21 -0
- kairos_planner-1.0.3/tests/state/state_test.cpp +707 -0
- kairos_planner-1.0.3/tests/support/ground_simulator.hpp +289 -0
- kairos_planner-1.0.3/tests/support/lexer_invariants.hpp +148 -0
- kairos_planner-1.0.3/tests/support/lifted_simulator.hpp +442 -0
- kairos_planner-1.0.3/tests/support/pddl_helpers.hpp +76 -0
- kairos_planner-1.0.3/tests/support/pipeline_helpers.hpp +67 -0
- kairos_planner-1.0.3/tests/support/sas_simulator.hpp +289 -0
- kairos_planner-1.0.3/tests/support/task_helpers.hpp +68 -0
- kairos_planner-1.0.3/tests/temporal/CMakeLists.txt +29 -0
- kairos_planner-1.0.3/tests/temporal/compress_test.cpp +233 -0
- kairos_planner-1.0.3/tests/temporal/durations_test.cpp +259 -0
- kairos_planner-1.0.3/tests/temporal/hybrid_test.cpp +236 -0
- kairos_planner-1.0.3/tests/temporal/profile_test.cpp +402 -0
- kairos_planner-1.0.3/tests/temporal/snap_test.cpp +380 -0
- kairos_planner-1.0.3/tests/temporal/stn_test.cpp +270 -0
- kairos_planner-1.0.3/tests/temporal/untimed_test.cpp +334 -0
- kairos_planner-1.0.3/tests/validate/CMakeLists.txt +19 -0
- kairos_planner-1.0.3/tests/validate/validator_test.cpp +929 -0
- kairos_planner-1.0.3/tools/fetch_corpus.sh +51 -0
- kairos_planner-1.0.3/tools/lint/README.md +15 -0
- kairos_planner-1.0.3/tools/lint/cpplint.py +6933 -0
- kairos_planner-1.0.3/tools/lint/kairos_cpplint.py +87 -0
- kairos_planner-1.0.3/tools/lint/uncrustify.cfg +3694 -0
- 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,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)
|