devagent-physical-engine 0.11.5__tar.gz → 0.12.0__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 (152) hide show
  1. devagent_physical_engine-0.12.0/PKG-INFO +429 -0
  2. devagent_physical_engine-0.12.0/README.md +388 -0
  3. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/pyproject.toml +14 -6
  4. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/__init__.py +1 -1
  5. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/agent/coordinator.py +30 -1
  6. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ai_cli.py +64 -41
  7. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/engineering_agent.py +23 -15
  8. devagent_physical_engine-0.12.0/src/devagent_physical_engine/reference_workcell.py +271 -0
  9. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/__init__.py +3 -0
  10. devagent_physical_engine-0.12.0/src/devagent_physical_engine/ros2/fk_pose.py +91 -0
  11. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/fk_probe.py +21 -5
  12. devagent_physical_engine-0.12.0/src/devagent_physical_engine/ros2/gazebo_pose.py +104 -0
  13. devagent_physical_engine-0.12.0/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +159 -0
  14. devagent_physical_engine-0.12.0/src/devagent_physical_engine/ros2/moveit_task_planner.py +139 -0
  15. devagent_physical_engine-0.12.0/src/devagent_physical_engine/ros2/qualification_v12.py +97 -0
  16. devagent_physical_engine-0.12.0/src/devagent_physical_engine/ros2/task_adapter.py +52 -0
  17. devagent_physical_engine-0.12.0/src/devagent_physical_engine/ros2/task_visualization.py +325 -0
  18. devagent_physical_engine-0.12.0/src/devagent_physical_engine/ros2/workpiece_follow.py +107 -0
  19. devagent_physical_engine-0.12.0/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +218 -0
  20. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/workpiece_scene.py +26 -2
  21. devagent_physical_engine-0.12.0/src/devagent_physical_engine.egg-info/PKG-INFO +429 -0
  22. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine.egg-info/SOURCES.txt +13 -0
  23. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_ai_cli.py +66 -22
  24. devagent_physical_engine-0.12.0/tests/test_planning_fallback_v012.py +165 -0
  25. devagent_physical_engine-0.12.0/tests/test_readme_pypi.py +35 -0
  26. devagent_physical_engine-0.12.0/tests/test_reference_workcell_v012.py +152 -0
  27. devagent_physical_engine-0.11.5/PKG-INFO +0 -384
  28. devagent_physical_engine-0.11.5/README.md +0 -343
  29. devagent_physical_engine-0.11.5/src/devagent_physical_engine.egg-info/PKG-INFO +0 -384
  30. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/NOTICE +0 -0
  31. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/setup.cfg +0 -0
  32. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/agent/__init__.py +0 -0
  33. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/agent/compiler.py +0 -0
  34. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/agent/contracts.py +0 -0
  35. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/agent/critic.py +0 -0
  36. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/agent/evidence.py +0 -0
  37. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/agent/interpreter.py +0 -0
  38. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/agent/planner.py +0 -0
  39. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/agent/recovery.py +0 -0
  40. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/agent/routing.py +0 -0
  41. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/agent/runtime.py +0 -0
  42. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/agent/semantic.py +0 -0
  43. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/agent/structured.py +0 -0
  44. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/cli.py +0 -0
  45. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/continuous_clearance.py +0 -0
  46. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/doctor.py +0 -0
  47. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/engineering_request.py +0 -0
  48. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/execution.py +0 -0
  49. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/models.py +0 -0
  50. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/operating_envelope.py +0 -0
  51. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/optimization/__init__.py +0 -0
  52. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
  53. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/optimization/candidates.py +0 -0
  54. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/optimization/contracts.py +0 -0
  55. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
  56. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/optimization/evidence.py +0 -0
  57. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/optimization/experience.py +0 -0
  58. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/optimization/measured.py +0 -0
  59. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
  60. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
  61. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/physical_campaign.py +0 -0
  62. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/physical_evidence.py +0 -0
  63. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/physical_motion.py +0 -0
  64. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/planning.py +0 -0
  65. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/preexecution_contract.py +0 -0
  66. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
  67. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
  68. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
  69. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
  70. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
  71. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
  72. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/provider_qualification.py +0 -0
  73. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/providers.py +0 -0
  74. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/qualification.py +0 -0
  75. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/qualification_cli.py +0 -0
  76. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/qualification_harness.py +0 -0
  77. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/robot_platform.py +0 -0
  78. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/robots.py +0 -0
  79. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
  80. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/commands.py +0 -0
  81. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
  82. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/doctor.py +0 -0
  83. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
  84. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
  85. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
  86. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
  87. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
  88. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
  89. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/qualification.py +0 -0
  90. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
  91. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
  92. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
  93. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
  94. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
  95. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
  96. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
  97. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
  98. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
  99. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
  100. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
  101. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
  102. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/setup_profile.py +0 -0
  103. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
  104. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/simulation.py +0 -0
  105. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/simulation_platform.py +0 -0
  106. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/tool_collision.py +0 -0
  107. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
  108. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/twin.py +0 -0
  109. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/twin_builder.py +0 -0
  110. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/twin_materialization.py +0 -0
  111. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/verification.py +0 -0
  112. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
  113. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
  114. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
  115. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
  116. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
  117. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_agent_core.py +0 -0
  118. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_agent_semantic_hardening.py +0 -0
  119. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_ai_cli_v07.py +0 -0
  120. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_continuous_clearance_v011.py +0 -0
  121. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_core.py +0 -0
  122. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_engineering_request_v07.py +0 -0
  123. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_interpreter_profiles_v08.py +0 -0
  124. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_live_provider_qualification.py +0 -0
  125. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_measured_motion_v10.py +0 -0
  126. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_natural_language_agent_v07.py +0 -0
  127. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_openai_strict_schema_v0113.py +0 -0
  128. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_optimization_v05.py +0 -0
  129. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_physical_campaign_v09.py +0 -0
  130. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_physical_evidence_v09.py +0 -0
  131. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_physical_motion_v09.py +0 -0
  132. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_preexecution_contract_v10.py +0 -0
  133. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_provider_and_qualification.py +0 -0
  134. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
  135. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_qualification_harness_v06.py +0 -0
  136. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_real_provider_adapters.py +0 -0
  137. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_robot_platform_v08.py +0 -0
  138. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_ros2_production_receipts_v011.py +0 -0
  139. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_ros2_simulation.py +0 -0
  140. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_ros_trajectory_v09.py +0 -0
  141. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_setup_profile.py +0 -0
  142. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_sim_real_qualification_v011.py +0 -0
  143. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_simulation_platform_v08.py +0 -0
  144. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_tool_collision_v011.py +0 -0
  145. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_trajectory_qualification_v09.py +0 -0
  146. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_twin_materialization_v10.py +0 -0
  147. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_twin_v08.py +0 -0
  148. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
  149. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
  150. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_v052_stabilization.py +0 -0
  151. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_v08_catalog_mapping_regression.py +0 -0
  152. {devagent_physical_engine-0.11.5 → devagent_physical_engine-0.12.0}/tests/test_workpiece_lifecycle_v011.py +0 -0
@@ -0,0 +1,429 @@
1
+ Metadata-Version: 2.4
2
+ Name: devagent-physical-engine
3
+ Version: 0.12.0
4
+ Summary: Verification-first agentic engineering, simulation, and evidence runtime for robotics and industrial automation.
5
+ Author: Tom Ha
6
+ License: All Rights Reserved
7
+ Project-URL: Homepage, https://github.com/tomha85/devagent-physical-engine
8
+ Project-URL: Repository, https://github.com/tomha85/devagent-physical-engine
9
+ Project-URL: Issues, https://github.com/tomha85/devagent-physical-engine/issues
10
+ Keywords: robotics,industrial-automation,agentic-ai,ros2,verification
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
19
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
+ Requires-Python: >=3.11
21
+ Description-Content-Type: text/markdown
22
+ License-File: NOTICE
23
+ Requires-Dist: PyYAML<7,>=6.0
24
+ Provides-Extra: openai
25
+ Requires-Dist: openai<4,>=3.0; extra == "openai"
26
+ Provides-Extra: anthropic
27
+ Requires-Dist: anthropic<2,>=1.0; extra == "anthropic"
28
+ Provides-Extra: gemini
29
+ Requires-Dist: google-genai<3,>=2.0; extra == "gemini"
30
+ Provides-Extra: ai
31
+ Requires-Dist: openai<4,>=3.0; extra == "ai"
32
+ Requires-Dist: anthropic<2,>=1.0; extra == "ai"
33
+ Requires-Dist: google-genai<3,>=2.0; extra == "ai"
34
+ Provides-Extra: dev
35
+ Requires-Dist: build==1.6.0; extra == "dev"
36
+ Requires-Dist: twine==7.0.0; extra == "dev"
37
+ Requires-Dist: coverage[toml]<8,>=7.6; extra == "dev"
38
+ Requires-Dist: ruff<1,>=0.12; extra == "dev"
39
+ Requires-Dist: pip-audit<3,>=2.9; extra == "dev"
40
+ Dynamic: license-file
41
+
42
+ # DevAgent Smart Physical Engine
43
+
44
+ [![PyPI](https://img.shields.io/pypi/v/devagent-physical-engine.svg)](https://pypi.org/project/devagent-physical-engine/)
45
+ [![Python](https://img.shields.io/pypi/pyversions/devagent-physical-engine.svg)](https://pypi.org/project/devagent-physical-engine/)
46
+ [![Status: Beta](https://img.shields.io/badge/status-beta-blue.svg)](#project-status)
47
+
48
+ **Verification-first agentic engineering, planning, simulation, optimization, and evidence for robotic and industrial automation.**
49
+
50
+ > **AI proposes. Deterministic engines validate, compile, verify, simulate, measure, and gate promotion. Existing certified controllers remain authoritative.**
51
+
52
+ DevAgent Smart Physical Engine turns an engineering request into a bounded, evidence-backed automation plan without giving an LLM direct robot-control authority. It is designed for engineers who want to reason about robot tasks, generate and critique plans, build a canonical physical Twin, simulate through ROS 2 / Gazebo / MoveIt, measure results, and preserve verification evidence before anything reaches real equipment.
53
+
54
+ The runtime is provider-neutral. OpenAI, Anthropic, and Gemini can be used for interpretation, planning, critique, and recovery while deterministic code remains responsible for safety boundaries, compilation, verification, physical evidence, qualification, and execution policy.
55
+
56
+ ## Why DevAgent Physical Engine?
57
+
58
+ Many AI robotics demos stop after producing a plan or showing a robot moving. DevAgent Physical Engine is built around a stricter question:
59
+
60
+ **Can this robotic engineering claim be supported by deterministic checks and measured evidence for the exact plan and physical model being evaluated?**
61
+
62
+ Core principles:
63
+
64
+ - **Evidence before promotion** — missing physical evidence blocks stronger claims instead of being silently assumed.
65
+ - **Provider-neutral AI** — model output proposes engineering intent; it does not own collision truth, qualification, or real-hardware authorization.
66
+ - **Deterministic verification** — task graphs, motion contracts, collision constraints, scene state, and promotion gates are checked outside the model.
67
+ - **Exact Twin binding** — physical motion is bound to a canonical Twin and immutable fingerprints rather than free-form model text.
68
+ - **Measured simulation** — supported ROS 2 / Gazebo / MoveIt paths collect runtime evidence instead of treating a generated plan as proof.
69
+ - **No fake task visualization** — generic demo motion is never labeled as the requested BOX/source/destination task.
70
+ - **Real execution remains locked** — simulation success is not site qualification, functional-safety certification, or permission to run production hardware.
71
+
72
+ ## Install
73
+
74
+ Python 3.11+ is required.
75
+
76
+ From PyPI:
77
+
78
+ ```bash
79
+ python -m pip install devagent-physical-engine
80
+ ```
81
+
82
+ Install one AI provider:
83
+
84
+ ```bash
85
+ python -m pip install "devagent-physical-engine[openai]"
86
+ python -m pip install "devagent-physical-engine[anthropic]"
87
+ python -m pip install "devagent-physical-engine[gemini]"
88
+ ```
89
+
90
+ Or install all supported provider SDKs:
91
+
92
+ ```bash
93
+ python -m pip install "devagent-physical-engine[ai]"
94
+ ```
95
+
96
+ For development from source:
97
+
98
+ ```bash
99
+ git clone https://github.com/tomha85/devagent-physical-engine.git
100
+ cd devagent-physical-engine
101
+ python -m venv .venv
102
+ source .venv/bin/activate
103
+ python -m pip install --upgrade pip
104
+ python -m pip install -e ".[dev,ai]"
105
+ ```
106
+
107
+ `pip install` does not install ROS, Gazebo, MoveIt, robot drivers, or privileged operating-system dependencies.
108
+
109
+ ## Quick start
110
+
111
+ Configure the credential for the provider you want to use:
112
+
113
+ ```bash
114
+ export OPENAI_API_KEY='...'
115
+ # or ANTHROPIC_API_KEY / GEMINI_API_KEY
116
+ ```
117
+
118
+ Check the provider locally:
119
+
120
+ ```bash
121
+ devagent-physical-ai doctor --provider openai
122
+ ```
123
+
124
+ Run an engineering request:
125
+
126
+ ```bash
127
+ devagent-physical-ai engineer \
128
+ "Use a UR5e to load BOX_101 from conveyor_a to cnc_04. Simulate and verify the plan." \
129
+ --provider openai \
130
+ --model <model-id>
131
+ ```
132
+
133
+ While the command runs, stage-by-stage progress is printed to `stderr` and the final machine-readable result remains on `stdout`:
134
+
135
+ ```text
136
+ [DevAgent + 0.00s] START provider=openai model=<model-id>
137
+ [DevAgent + 0.00s] INTERPRETER understanding engineering request
138
+ [DevAgent + 4.20s] PLANNER revision=0 generating high-level task graph
139
+ [DevAgent + 10.30s] CRITIC revision=0 reviewing verified plan
140
+ [DevAgent + 13.10s] SIMULATION deterministic model execution completed
141
+ [DevAgent + 13.11s] COMPLETE ready_for_twin_simulation=true
142
+ ```
143
+
144
+ Use `--quiet` when a script or CI job needs JSON without terminal progress.
145
+
146
+ ## Task-specific visual simulation
147
+
148
+ For the supported v0.12 UR5e `load` scope, `--visualize` continues from the verified high-level task into a physical simulation path:
149
+
150
+ ```bash
151
+ devagent-physical-ai engineer \
152
+ "Use a UR5e to load BOX_101 from conveyor_a to cnc_04. Simulate and verify the plan." \
153
+ --provider openai \
154
+ --model <model-id> \
155
+ --visualize
156
+ ```
157
+
158
+ The current task-specific path uses the packaged `ur5e_reference_load_cell_v1` canonical workcell. The request identities remain exact (`BOX_101`, `conveyor_a`, `cnc_04`), while the reference source/destination poses, primitive geometry, nominal workpiece geometry, and reference tool are deterministic template facts rather than guessed customer-site facts.
159
+
160
+ The runtime then performs this bounded sequence:
161
+
162
+ ```text
163
+ validated AI task graph
164
+ |
165
+ v
166
+ packaged canonical UR5e load Twin
167
+ |
168
+ v
169
+ Gazebo + MoveIt world materialization and read-back
170
+ |
171
+ v
172
+ MoveIt FK cross-check of reference pick/place targets
173
+ |
174
+ v
175
+ MoveIt joint-space plan for each physical phase
176
+ |
177
+ v
178
+ pre-pick -> pick -> attach BOX -> lift -> transfer -> place
179
+ |
180
+ v
181
+ BOX visually follows tool0 while attached in Gazebo
182
+ |
183
+ v
184
+ verified destination pose -> detach -> retract -> home
185
+ |
186
+ v
187
+ measured motion/evidence report
188
+ ```
189
+
190
+ On a successful run, Gazebo / MoveIt remains open by default so the engineer can inspect the final workcell. Add `--close-after` to close it after success.
191
+
192
+ The packaged reference workcell is **not customer-site geometry**. Arbitrary plant layouts require an imported or user-declared physical Twin with trusted poses, collision geometry, tool/TCP information, and workpiece properties. DevAgent does not invent those site facts from a natural-language prompt.
193
+
194
+ The v0.12 implementation remains evidence-gated: source/CI success does not prove the ROS target campaign has passed on a particular workstation. Use the executable qualification below before treating the task-specific path as qualified on that target.
195
+
196
+ ### Visual stack demo
197
+
198
+ To test only that the workstation can launch Gazebo / MoveIt and visibly move a UR5e, without claiming that motion represents the requested BOX task, use:
199
+
200
+ ```bash
201
+ devagent-physical-ai engineer \
202
+ "Use a UR5e to load BOX_101 from conveyor_a to cnc_04. Simulate and verify the plan." \
203
+ --provider openai \
204
+ --model <model-id> \
205
+ --visual-demo
206
+ ```
207
+
208
+ `--visual-demo` is explicitly reported as `task_specific=false`.
209
+
210
+ ## How it works
211
+
212
+ A normal engineering flow is intentionally layered:
213
+
214
+ ```text
215
+ NATURAL-LANGUAGE ENGINEERING REQUEST
216
+ |
217
+ v
218
+ PROVIDER-NEUTRAL INTERPRETER
219
+ |
220
+ v
221
+ PLANNER -> DETERMINISTIC COMPILE / VERIFY <- CRITIC
222
+ |
223
+ v
224
+ VERIFIED HIGH-LEVEL TASK GRAPH
225
+ |
226
+ v
227
+ CANONICAL PHYSICAL TWIN + IMMUTABLE HASH
228
+ |
229
+ v
230
+ MOVEIT-COMPILED PHYSICAL MOTION CONTRACTS
231
+ |
232
+ v
233
+ GAZEBO / MOVEIT MATERIALIZATION + READ-BACK
234
+ |
235
+ v
236
+ COLLISION / TOOL / WORKPIECE VERIFICATION
237
+ |
238
+ v
239
+ ROS 2 SIMULATION + MEASURED RUNTIME EVIDENCE
240
+ |
241
+ v
242
+ REPLAYABLE EVIDENCE + PROMOTION GATES
243
+ |
244
+ v
245
+ REAL HARDWARE AUTHORIZATION REMAINS SEPARATELY LOCKED
246
+ ```
247
+
248
+ The high-level AI task graph and the physical motion plan are not the same artifact. A `pick -> move -> place` graph is engineering intent. Gazebo execution requires a physically grounded Twin and compiled trajectory. This separation prevents an AI-generated task description from becoming an implicit motor command.
249
+
250
+ For a nominal low-risk `load` simulation, the Critic remains advisory after deterministic compilation and verification. If it repeatedly requests subjective revisions but never rejects the plan, DevAgent may use a bounded deterministic advisory fallback after the revision budget is exhausted. A Critic `REJECT`, deterministic violation, higher-risk qualification/commissioning intent, fault injection, physical variation, or explicit engineering threshold still blocks that fallback.
251
+
252
+ ## General architecture
253
+
254
+ The architecture has three authority layers:
255
+
256
+ ```text
257
+ +--------------------------------------------------------------+
258
+ | ENGINEER / CUSTOMER |
259
+ | requirement, robot, object, source, destination |
260
+ +-------------------------------+------------------------------+
261
+ |
262
+ v
263
+ +--------------------------------------------------------------+
264
+ | AI ENGINEERING LAYER |
265
+ | Interpreter | Planner | Critic | Recovery |
266
+ | OpenAI / Anthropic / Gemini |
267
+ | Proposes intent and candidates; owns no physical authority. |
268
+ +-------------------------------+------------------------------+
269
+ |
270
+ v
271
+ +--------------------------------------------------------------+
272
+ | DEVAGENT DETERMINISTIC CORE |
273
+ | Request validation | Compiler | Semantic policy |
274
+ | TwinSpec | Motion contract | Collision / clearance |
275
+ | Tool/workpiece state | Simulation measurement | Evidence |
276
+ | Qualification and promotion gates |
277
+ +-------------------------------+------------------------------+
278
+ |
279
+ v
280
+ +--------------------------------------------------------------+
281
+ | PHYSICAL SIMULATION ADAPTERS |
282
+ | ROS 2 | Gazebo | MoveIt | robot-specific adapters |
283
+ | Scene materialization, trajectory execution, measured state |
284
+ +-------------------------------+------------------------------+
285
+ |
286
+ v
287
+ +--------------------------------------------------------------+
288
+ | OEM CONTROLLER / PLC / SAFETY |
289
+ | Remains authoritative for real equipment and safe execution. |
290
+ | DevAgent real execution is locked by default. |
291
+ +--------------------------------------------------------------+
292
+ ```
293
+
294
+ This plain-text diagram is intentionally used instead of Mermaid so the same README renders correctly on GitHub and PyPI.
295
+
296
+ ## Physical Twin and verification
297
+
298
+ The canonical Twin records robot identity, frames, source/destination entities, workpiece, tool, geometry, physics evidence, controller metadata, uncertainty, and provenance. Unknown physical information remains unknown rather than being filled with AI guesses.
299
+
300
+ The UR5e canonical adapter can bind one materialization to Gazebo and MoveIt, verify world/scene read-back, apply a runtime-owned tool collision object, verify workpiece attach/detach transitions, execute compiled joint trajectories, record joint states, and compute MoveIt FK metrics.
301
+
302
+ The stronger production-candidate verifier can additionally use measured collision distance and conservative continuous-path clearance proof. A stronger pre-execution receipt requires evidence such as:
303
+
304
+ ```text
305
+ verified=true
306
+ continuous_collision_check=true
307
+ clearance_measured=true
308
+ minimum_clearance_m > 0
309
+ materialization_hash=<exact Twin materialization>
310
+ failure_codes=[]
311
+ ```
312
+
313
+ The conservative collision-distance bound must be qualified for the exact robot/tool/collision model. DevAgent does not invent that bound.
314
+
315
+ ## Supported robot abstraction
316
+
317
+ The deterministic robot-profile layer includes abstractions for:
318
+
319
+ - Universal Robots UR5e
320
+ - FANUC CRX family
321
+ - KUKA KR family
322
+ - ABB IRB family
323
+
324
+ Physical simulation and qualification are adapter- and vendor-specific. The v0.12 task-specific visible `load` runtime is UR5e-specific. A profile existing in the registry does not imply equivalent physical qualification for every vendor.
325
+
326
+ ## ROS 2 / Gazebo reference target
327
+
328
+ Reference workstation stack:
329
+
330
+ ```text
331
+ Ubuntu 24.04
332
+ ROS 2 Jazzy
333
+ Gazebo Harmonic
334
+ gz_ros2_control
335
+ Universal Robots ROS 2 driver
336
+ ur_simulation_gz
337
+ MoveIt 2
338
+ ```
339
+
340
+ Setup and diagnostics:
341
+
342
+ ```bash
343
+ devagent-physical setup --profile ur5e-sim --dry-run
344
+ devagent-physical setup --profile ur5e-sim
345
+ devagent-physical ros doctor
346
+ devagent-physical ros demo
347
+ devagent-physical ros qualify-trajectory-runtime
348
+ ```
349
+
350
+ Run the v0.12 task-specific target qualification:
351
+
352
+ ```bash
353
+ python -m devagent_physical_engine.ros2.qualification_v12
354
+ ```
355
+
356
+ This must visibly execute the reference task and produce a passing report before the target workstation's v0.12 task-specific ROS simulation is considered qualified. It still intentionally reports:
357
+
358
+ ```text
359
+ physical_qualification=false
360
+ commissioning_qualification=false
361
+ site_qualification=false
362
+ real_execution_allowed=false
363
+ ```
364
+
365
+ For the stronger continuous-clearance production-candidate campaign:
366
+
367
+ ```bash
368
+ python -m devagent_physical_engine.ros2.qualification_v11 \
369
+ --moveit-params-file /path/to/ur5e_moveit_params.yaml \
370
+ --distance-lipschitz <qualified-m-per-radian-bound> \
371
+ --safety-margin 0.005 \
372
+ --log-dir ~/.devagent/v11-production-candidate-qualification
373
+ ```
374
+
375
+ A successful source/workstation campaign can qualify specific simulation evidence. It still does not automatically imply physical commissioning, site qualification, functional-safety certification, or permission to execute on a real robot.
376
+
377
+ ## AI providers
378
+
379
+ The CLI currently supports OpenAI, Anthropic, and Gemini through one provider-neutral agent contract.
380
+
381
+ Examples:
382
+
383
+ ```bash
384
+ devagent-physical-ai qualify --provider openai --model <model-id>
385
+ devagent-physical-ai qualify --provider anthropic --model <model-id>
386
+ devagent-physical-ai qualify --provider gemini --model <model-id>
387
+ ```
388
+
389
+ Provider qualification uses API credits and verifies the bounded Interpreter / Planner / Critic / Recovery path. Provider success never unlocks real robot execution.
390
+
391
+ ## Software verification and releases
392
+
393
+ Repository CI verifies Python 3.11, 3.12, and 3.13, Ruff correctness, branch coverage, package build, clean wheel installation, and runtime dependency vulnerability audit.
394
+
395
+ ROS/Gazebo/MoveIt executable orchestration is separately target-qualified because hosted Python CI cannot truthfully exercise a graphical Gazebo process, MoveIt `move_group`, TF, ROS controllers, and Gazebo services. Pure reference-workcell contracts and deterministic planning logic remain covered by normal unit/coverage gates.
396
+
397
+ A green `main` release is tied to the exact CI-tested commit. Release artifacts are rebuilt and verified from the exact tag, checked with Twine, installed into a clean environment, accompanied by SHA256 checksums and an SBOM, attached to the GitHub Release, and published to PyPI through Trusted Publishing.
398
+
399
+ ## Documentation
400
+
401
+ Detailed engineering documentation lives in the repository:
402
+
403
+ - [Production readiness](https://github.com/tomha85/devagent-physical-engine/blob/main/docs/PRODUCTION_READINESS.md)
404
+ - [Architecture](https://github.com/tomha85/devagent-physical-engine/blob/main/docs/ARCHITECTURE.md)
405
+ - [Agent Core](https://github.com/tomha85/devagent-physical-engine/blob/main/docs/AGENT_CORE.md)
406
+ - [AI providers](https://github.com/tomha85/devagent-physical-engine/blob/main/docs/AI_PROVIDERS.md)
407
+ - [Natural-language engineering](https://github.com/tomha85/devagent-physical-engine/blob/main/docs/NATURAL_LANGUAGE_ENGINEERING.md)
408
+ - [Robot platform and Twin](https://github.com/tomha85/devagent-physical-engine/blob/main/docs/ROBOT_PLATFORM_AND_TWIN.md)
409
+ - [Measured physical runtime](https://github.com/tomha85/devagent-physical-engine/blob/main/docs/MEASURED_PHYSICAL_RUNTIME.md)
410
+ - [Canonical Twin runtime](https://github.com/tomha85/devagent-physical-engine/blob/main/docs/CANONICAL_TWIN_RUNTIME.md)
411
+ - [Qualification](https://github.com/tomha85/devagent-physical-engine/blob/main/docs/QUALIFICATION.md)
412
+ - [Optimization](https://github.com/tomha85/devagent-physical-engine/blob/main/docs/OPTIMIZATION.md)
413
+ - [Workstation setup](https://github.com/tomha85/devagent-physical-engine/blob/main/docs/SETUP.md)
414
+ - [Laptop acceptance](https://github.com/tomha85/devagent-physical-engine/blob/main/docs/LAPTOP_ACCEPTANCE.md)
415
+ - [PyPI release process](https://github.com/tomha85/devagent-physical-engine/blob/main/docs/PYPI_RELEASE.md)
416
+
417
+ ## Project status
418
+
419
+ **v0.12.0 — Beta software / evidence-gated task-specific physical simulation.**
420
+
421
+ The software and release pipeline are production-oriented, but physical readiness is scope-specific and evidence-driven. The new UR5e task-specific reference-workcell path must pass the executable v0.12 ROS/Gazebo/MoveIt campaign on the target workstation before that scope is considered simulation-qualified there. Real robot execution remains locked. Functional-safety certification and site qualification are not claimed.
422
+
423
+ ## Ownership
424
+
425
+ DevAgent Smart Physical Engine
426
+ Copyright © 2026 Tom Ha
427
+ Original creator: Tom Ha
428
+ Original project: https://github.com/tomha85/devagent-physical-engine
429
+ All rights reserved.