devagent-physical-engine 0.11.3__tar.gz → 0.11.5__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 (138) hide show
  1. {devagent_physical_engine-0.11.3/src/devagent_physical_engine.egg-info → devagent_physical_engine-0.11.5}/PKG-INFO +49 -3
  2. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/README.md +49 -3
  3. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/pyproject.toml +1 -1
  4. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/__init__.py +1 -1
  5. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/coordinator.py +40 -1
  6. devagent_physical_engine-0.11.5/src/devagent_physical_engine/ai_cli.py +464 -0
  7. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/engineering_agent.py +44 -1
  8. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/provider_qualification.py +24 -0
  9. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5/src/devagent_physical_engine.egg-info}/PKG-INFO +49 -3
  10. devagent_physical_engine-0.11.5/tests/test_ai_cli.py +210 -0
  11. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_natural_language_agent_v07.py +21 -0
  12. devagent_physical_engine-0.11.3/src/devagent_physical_engine/ai_cli.py +0 -226
  13. devagent_physical_engine-0.11.3/tests/test_ai_cli.py +0 -54
  14. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/NOTICE +0 -0
  15. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/setup.cfg +0 -0
  16. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/__init__.py +0 -0
  17. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/compiler.py +0 -0
  18. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/contracts.py +0 -0
  19. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/critic.py +0 -0
  20. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/evidence.py +0 -0
  21. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/interpreter.py +0 -0
  22. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/planner.py +0 -0
  23. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/recovery.py +0 -0
  24. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/routing.py +0 -0
  25. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/runtime.py +0 -0
  26. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/semantic.py +0 -0
  27. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/structured.py +0 -0
  28. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/cli.py +0 -0
  29. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/continuous_clearance.py +0 -0
  30. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/doctor.py +0 -0
  31. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/engineering_request.py +0 -0
  32. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/execution.py +0 -0
  33. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/models.py +0 -0
  34. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/operating_envelope.py +0 -0
  35. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/optimization/__init__.py +0 -0
  36. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
  37. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/optimization/candidates.py +0 -0
  38. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/optimization/contracts.py +0 -0
  39. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
  40. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/optimization/evidence.py +0 -0
  41. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/optimization/experience.py +0 -0
  42. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/optimization/measured.py +0 -0
  43. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
  44. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
  45. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/physical_campaign.py +0 -0
  46. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/physical_evidence.py +0 -0
  47. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/physical_motion.py +0 -0
  48. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/planning.py +0 -0
  49. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/preexecution_contract.py +0 -0
  50. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
  51. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
  52. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
  53. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
  54. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
  55. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
  56. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/providers.py +0 -0
  57. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/qualification.py +0 -0
  58. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/qualification_cli.py +0 -0
  59. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/qualification_harness.py +0 -0
  60. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/robot_platform.py +0 -0
  61. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/robots.py +0 -0
  62. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/__init__.py +0 -0
  63. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
  64. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/commands.py +0 -0
  65. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
  66. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/doctor.py +0 -0
  67. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
  68. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
  69. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
  70. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
  71. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
  72. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
  73. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
  74. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/qualification.py +0 -0
  75. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
  76. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
  77. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
  78. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
  79. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
  80. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
  81. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
  82. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
  83. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
  84. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
  85. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
  86. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/workpiece_scene.py +0 -0
  87. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
  88. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/setup_profile.py +0 -0
  89. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
  90. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/simulation.py +0 -0
  91. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/simulation_platform.py +0 -0
  92. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/tool_collision.py +0 -0
  93. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
  94. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/twin.py +0 -0
  95. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/twin_builder.py +0 -0
  96. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/twin_materialization.py +0 -0
  97. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/verification.py +0 -0
  98. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
  99. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine.egg-info/SOURCES.txt +0 -0
  100. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
  101. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
  102. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
  103. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
  104. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_agent_core.py +0 -0
  105. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_agent_semantic_hardening.py +0 -0
  106. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_ai_cli_v07.py +0 -0
  107. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_continuous_clearance_v011.py +0 -0
  108. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_core.py +0 -0
  109. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_engineering_request_v07.py +0 -0
  110. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_interpreter_profiles_v08.py +0 -0
  111. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_live_provider_qualification.py +0 -0
  112. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_measured_motion_v10.py +0 -0
  113. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_openai_strict_schema_v0113.py +0 -0
  114. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_optimization_v05.py +0 -0
  115. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_physical_campaign_v09.py +0 -0
  116. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_physical_evidence_v09.py +0 -0
  117. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_physical_motion_v09.py +0 -0
  118. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_preexecution_contract_v10.py +0 -0
  119. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_provider_and_qualification.py +0 -0
  120. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
  121. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_qualification_harness_v06.py +0 -0
  122. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_real_provider_adapters.py +0 -0
  123. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_robot_platform_v08.py +0 -0
  124. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_ros2_production_receipts_v011.py +0 -0
  125. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_ros2_simulation.py +0 -0
  126. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_ros_trajectory_v09.py +0 -0
  127. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_setup_profile.py +0 -0
  128. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_sim_real_qualification_v011.py +0 -0
  129. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_simulation_platform_v08.py +0 -0
  130. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_tool_collision_v011.py +0 -0
  131. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_trajectory_qualification_v09.py +0 -0
  132. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_twin_materialization_v10.py +0 -0
  133. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_twin_v08.py +0 -0
  134. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
  135. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
  136. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_v052_stabilization.py +0 -0
  137. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_v08_catalog_mapping_regression.py +0 -0
  138. {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_workpiece_lifecycle_v011.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devagent-physical-engine
3
- Version: 0.11.3
3
+ Version: 0.11.5
4
4
  Summary: Verification-first agentic planning runtime for robotic and industrial automation.
5
5
  Author: Tom Ha
6
6
  License: All Rights Reserved
@@ -49,11 +49,11 @@ DevAgent Smart Physical Engine adds AI-assisted engineering to existing automati
49
49
 
50
50
  ## Current version
51
51
 
52
- **v0.11.3 — Beta software / evidence-gated physical runtime**
52
+ **v0.11.5 — Beta software / evidence-gated physical runtime**
53
53
 
54
54
  The Python software stack is regression-tested on Python 3.11, 3.12, and 3.13 with separate static/coverage, package-install, and runtime dependency security gates. The UR5e Gazebo/MoveIt path now contains production-candidate continuous-clearance, tool-collision, and workpiece-lifecycle capabilities, but those physical-simulation scopes remain **EXPERIMENTAL until the executable target-workstation v0.11 campaign passes**.
55
55
 
56
- v0.11.3 also normalizes provider-neutral agent schemas at the OpenAI transport boundary so strict Structured Outputs can represent DevAgent optional fields without changing Anthropic/Gemini or deterministic core semantics.
56
+ v0.11.3 normalized provider-neutral agent schemas at the OpenAI transport boundary so strict Structured Outputs can represent DevAgent optional fields without changing Anthropic/Gemini or deterministic core semantics. v0.11.4 added live terminal progress tracing for AI request, engineering, and provider-qualification workflows. v0.11.5 adds explicit visualization modes: `--visualize` requests exact task-specific visualization and fails closed until an exact physical Twin plus compiled `PhysicalMotionPlan` exist; `--visual-demo` launches the UR5e Gazebo/MoveIt motion demo without misrepresenting that generic motion as the requested BOX/source/destination task.
57
57
 
58
58
  Real robot execution remains locked. Functional-safety certification and site qualification are not claimed.
59
59
 
@@ -65,6 +65,9 @@ Real robot execution remains locked. Functional-safety certification and site qu
65
65
  | OpenAI / Anthropic / Gemini structured adapters | Implemented |
66
66
  | Planner / Critic / Recovery | Implemented |
67
67
  | Natural-language engineering request front door | Implemented |
68
+ | Live terminal stage tracing (`stderr`) | Implemented; `--quiet` supported |
69
+ | Explicit AI visual demo (`--visual-demo`) | Implemented for UR5e workstation visual motion; not task-specific |
70
+ | Exact task visualization (`--visualize`) | Evidence-gated; blocked until exact Twin + compiled physical motion are available |
68
71
  | Deterministic compiler / semantic / verification gates | Implemented |
69
72
  | Multi-vendor robot profile registry | Implemented |
70
73
  | UR5e / FANUC CRX / KUKA KR / ABB IRB abstraction | Implemented; physical qualification is vendor-specific |
@@ -210,6 +213,49 @@ devagent-physical-ai engineer \
210
213
  --provider openai --model <model-id>
211
214
  ```
212
215
 
216
+ Live commands show stage-by-stage progress while they are running, for example:
217
+
218
+ ```text
219
+ [DevAgent + 0.00s] START provider=openai model=<model-id>
220
+ [DevAgent + 0.00s] INTERPRETER understanding engineering request
221
+ [DevAgent + 6.84s] INTERPRETER validated request_id=REQ-...
222
+ [DevAgent + 6.84s] REASONING risk_score=1 max_revisions=1 critic_threshold=0.70
223
+ [DevAgent + 6.84s] PLANNER revision=0 generating high-level task graph
224
+ [DevAgent + 12.21s] PLANNER revision=0 proposal compiled and deterministically verified
225
+ [DevAgent + 12.21s] CRITIC revision=0 reviewing verified plan
226
+ [DevAgent + 15.77s] CRITIC revision=0 decision=accept score=0.91
227
+ [DevAgent + 15.77s] PLANNING verified plan accepted after revision=0
228
+ [DevAgent + 15.77s] SIMULATION running deterministic model execution
229
+ [DevAgent + 15.78s] SIMULATION deterministic model execution completed
230
+ [DevAgent + 15.78s] COMPLETE ready_for_twin_simulation=true
231
+ ```
232
+
233
+ Progress logs are emitted to `stderr`, so piping `stdout` still produces clean JSON. For CI or scripts that do not want terminal progress, add `--quiet`.
234
+
235
+ ### Visualization semantics
236
+
237
+ `--visualize` means **visualize the exact engineering task**, not merely make a robot move. Therefore it fails closed until the request has enough physical evidence to build the exact scene and a compiled physical trajectory:
238
+
239
+ ```bash
240
+ devagent-physical-ai engineer \
241
+ "Use a UR5e to load BOX_101 from conveyor_a to cnc_04. Simulate and verify the plan." \
242
+ --provider openai --model <model-id> \
243
+ --visualize
244
+ ```
245
+
246
+ Until the task-specific physical bridge is complete, the result reports `task_visualization_requires_physical_twin_motion_plan` and lists required evidence such as robot/source/destination poses, collision geometry, workpiece/tool geometry, and a compiled `PhysicalMotionPlan`. DevAgent intentionally does not substitute a canned motion and claim it is the requested BOX task.
247
+
248
+ To verify that the workstation can actually launch Gazebo/MoveIt and visibly move a UR5e now, use the explicit demo mode:
249
+
250
+ ```bash
251
+ devagent-physical-ai engineer \
252
+ "Use a UR5e to load BOX_101 from conveyor_a to cnc_04. Simulate and verify the plan." \
253
+ --provider openai --model <model-id> \
254
+ --visual-demo
255
+ ```
256
+
257
+ The visual demo uses the packaged UR simulation motion smoke, records an acceptance report under `~/.devagent/ai-visual`, and leaves Gazebo/MoveIt open after success unless `--close-after` is supplied. Its JSON explicitly reports `task_specific=false` and `motion_source=ur_robot_driver/example_move.py`.
258
+
213
259
  Equivalent routing supports Anthropic and Gemini. Live AI qualification does not unlock real robot execution.
214
260
 
215
261
  ## Software production gates
@@ -8,11 +8,11 @@ DevAgent Smart Physical Engine adds AI-assisted engineering to existing automati
8
8
 
9
9
  ## Current version
10
10
 
11
- **v0.11.3 — Beta software / evidence-gated physical runtime**
11
+ **v0.11.5 — Beta software / evidence-gated physical runtime**
12
12
 
13
13
  The Python software stack is regression-tested on Python 3.11, 3.12, and 3.13 with separate static/coverage, package-install, and runtime dependency security gates. The UR5e Gazebo/MoveIt path now contains production-candidate continuous-clearance, tool-collision, and workpiece-lifecycle capabilities, but those physical-simulation scopes remain **EXPERIMENTAL until the executable target-workstation v0.11 campaign passes**.
14
14
 
15
- v0.11.3 also normalizes provider-neutral agent schemas at the OpenAI transport boundary so strict Structured Outputs can represent DevAgent optional fields without changing Anthropic/Gemini or deterministic core semantics.
15
+ v0.11.3 normalized provider-neutral agent schemas at the OpenAI transport boundary so strict Structured Outputs can represent DevAgent optional fields without changing Anthropic/Gemini or deterministic core semantics. v0.11.4 added live terminal progress tracing for AI request, engineering, and provider-qualification workflows. v0.11.5 adds explicit visualization modes: `--visualize` requests exact task-specific visualization and fails closed until an exact physical Twin plus compiled `PhysicalMotionPlan` exist; `--visual-demo` launches the UR5e Gazebo/MoveIt motion demo without misrepresenting that generic motion as the requested BOX/source/destination task.
16
16
 
17
17
  Real robot execution remains locked. Functional-safety certification and site qualification are not claimed.
18
18
 
@@ -24,6 +24,9 @@ Real robot execution remains locked. Functional-safety certification and site qu
24
24
  | OpenAI / Anthropic / Gemini structured adapters | Implemented |
25
25
  | Planner / Critic / Recovery | Implemented |
26
26
  | Natural-language engineering request front door | Implemented |
27
+ | Live terminal stage tracing (`stderr`) | Implemented; `--quiet` supported |
28
+ | Explicit AI visual demo (`--visual-demo`) | Implemented for UR5e workstation visual motion; not task-specific |
29
+ | Exact task visualization (`--visualize`) | Evidence-gated; blocked until exact Twin + compiled physical motion are available |
27
30
  | Deterministic compiler / semantic / verification gates | Implemented |
28
31
  | Multi-vendor robot profile registry | Implemented |
29
32
  | UR5e / FANUC CRX / KUKA KR / ABB IRB abstraction | Implemented; physical qualification is vendor-specific |
@@ -169,6 +172,49 @@ devagent-physical-ai engineer \
169
172
  --provider openai --model <model-id>
170
173
  ```
171
174
 
175
+ Live commands show stage-by-stage progress while they are running, for example:
176
+
177
+ ```text
178
+ [DevAgent + 0.00s] START provider=openai model=<model-id>
179
+ [DevAgent + 0.00s] INTERPRETER understanding engineering request
180
+ [DevAgent + 6.84s] INTERPRETER validated request_id=REQ-...
181
+ [DevAgent + 6.84s] REASONING risk_score=1 max_revisions=1 critic_threshold=0.70
182
+ [DevAgent + 6.84s] PLANNER revision=0 generating high-level task graph
183
+ [DevAgent + 12.21s] PLANNER revision=0 proposal compiled and deterministically verified
184
+ [DevAgent + 12.21s] CRITIC revision=0 reviewing verified plan
185
+ [DevAgent + 15.77s] CRITIC revision=0 decision=accept score=0.91
186
+ [DevAgent + 15.77s] PLANNING verified plan accepted after revision=0
187
+ [DevAgent + 15.77s] SIMULATION running deterministic model execution
188
+ [DevAgent + 15.78s] SIMULATION deterministic model execution completed
189
+ [DevAgent + 15.78s] COMPLETE ready_for_twin_simulation=true
190
+ ```
191
+
192
+ Progress logs are emitted to `stderr`, so piping `stdout` still produces clean JSON. For CI or scripts that do not want terminal progress, add `--quiet`.
193
+
194
+ ### Visualization semantics
195
+
196
+ `--visualize` means **visualize the exact engineering task**, not merely make a robot move. Therefore it fails closed until the request has enough physical evidence to build the exact scene and a compiled physical trajectory:
197
+
198
+ ```bash
199
+ devagent-physical-ai engineer \
200
+ "Use a UR5e to load BOX_101 from conveyor_a to cnc_04. Simulate and verify the plan." \
201
+ --provider openai --model <model-id> \
202
+ --visualize
203
+ ```
204
+
205
+ Until the task-specific physical bridge is complete, the result reports `task_visualization_requires_physical_twin_motion_plan` and lists required evidence such as robot/source/destination poses, collision geometry, workpiece/tool geometry, and a compiled `PhysicalMotionPlan`. DevAgent intentionally does not substitute a canned motion and claim it is the requested BOX task.
206
+
207
+ To verify that the workstation can actually launch Gazebo/MoveIt and visibly move a UR5e now, use the explicit demo mode:
208
+
209
+ ```bash
210
+ devagent-physical-ai engineer \
211
+ "Use a UR5e to load BOX_101 from conveyor_a to cnc_04. Simulate and verify the plan." \
212
+ --provider openai --model <model-id> \
213
+ --visual-demo
214
+ ```
215
+
216
+ The visual demo uses the packaged UR simulation motion smoke, records an acceptance report under `~/.devagent/ai-visual`, and leaves Gazebo/MoveIt open after success unless `--close-after` is supplied. Its JSON explicitly reports `task_specific=false` and `motion_source=ur_robot_driver/example_move.py`.
217
+
172
218
  Equivalent routing supports Anthropic and Gemini. Live AI qualification does not unlock real robot execution.
173
219
 
174
220
  ## Software production gates
@@ -294,4 +340,4 @@ DevAgent Smart Physical Engine
294
340
  Copyright © 2026 Tom Ha
295
341
  Original creator: Tom Ha
296
342
  Original project: https://github.com/tomha85/devagent-physical-engine
297
- All rights reserved.
343
+ All rights reserved.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "devagent-physical-engine"
7
- version = "0.11.3"
7
+ version = "0.11.5"
8
8
  description = "Verification-first agentic planning runtime for robotic and industrial automation."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -41,4 +41,4 @@ __all__ = [
41
41
  "TwinValidator",
42
42
  ]
43
43
 
44
- __version__ = "0.11.3"
44
+ __version__ = "0.11.5"
@@ -1,7 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from dataclasses import dataclass
4
- from typing import Any, Mapping
4
+ from typing import Any, Callable, Mapping
5
5
 
6
6
  from .contracts import AgentEvidence, CriticDecision, RoutingPolicy
7
7
  from .critic import CriticAgent
@@ -9,6 +9,8 @@ from .evidence import task_graph_hash
9
9
  from .planner import PlannerAgent
10
10
  from ..models import Goal, Resource, TaskGraph, WorldState
11
11
 
12
+ ProgressCallback = Callable[[str, str], None]
13
+
12
14
 
13
15
  class PlanningCoordinationError(RuntimeError):
14
16
  pass
@@ -52,12 +54,18 @@ class PlanningCoordinator:
52
54
  critic_policy: RoutingPolicy,
53
55
  *,
54
56
  engineering_context: Mapping[str, Any] | None = None,
57
+ progress: ProgressCallback | None = None,
55
58
  ) -> VerifiedPlanArtifact:
56
59
  feedback: tuple[str, ...] = ()
57
60
  planner_evidence: list[AgentEvidence] = []
58
61
  critic_evidence: list[AgentEvidence] = []
59
62
 
60
63
  for revision in range(self.max_revision_rounds + 1):
64
+ if progress is not None:
65
+ progress(
66
+ "PLANNER",
67
+ f"revision={revision} generating high-level task graph",
68
+ )
61
69
  planned = self.planner.plan(
62
70
  goal,
63
71
  resources,
@@ -67,6 +75,15 @@ class PlanningCoordinator:
67
75
  engineering_context=engineering_context,
68
76
  )
69
77
  planner_evidence.append(planned.evidence)
78
+ if progress is not None:
79
+ progress(
80
+ "PLANNER",
81
+ f"revision={revision} proposal compiled and deterministically verified",
82
+ )
83
+ progress(
84
+ "CRITIC",
85
+ f"revision={revision} reviewing verified plan",
86
+ )
70
87
 
71
88
  reviewed = self.critic.review(
72
89
  goal,
@@ -77,11 +94,24 @@ class PlanningCoordinator:
77
94
  engineering_context=engineering_context,
78
95
  )
79
96
  critic_evidence.append(reviewed.evidence)
97
+ if progress is not None:
98
+ progress(
99
+ "CRITIC",
100
+ (
101
+ f"revision={revision} decision={reviewed.critique.decision.value} "
102
+ f"score={reviewed.critique.score:.2f}"
103
+ ),
104
+ )
80
105
 
81
106
  if (
82
107
  reviewed.critique.decision is CriticDecision.ACCEPT
83
108
  and reviewed.critique.score >= self.min_accept_score
84
109
  ):
110
+ if progress is not None:
111
+ progress(
112
+ "PLANNING",
113
+ f"verified plan accepted after revision={revision}",
114
+ )
85
115
  return VerifiedPlanArtifact(
86
116
  graph=planned.graph,
87
117
  graph_hash=task_graph_hash(planned.graph),
@@ -91,6 +121,8 @@ class PlanningCoordinator:
91
121
  )
92
122
 
93
123
  if reviewed.critique.decision is CriticDecision.REJECT:
124
+ if progress is not None:
125
+ progress("PLANNING", f"critic rejected revision={revision}")
94
126
  raise PlanningCoordinationError(
95
127
  "critic_rejected_plan:"
96
128
  + ";".join(reviewed.critique.issues)
@@ -104,5 +136,12 @@ class PlanningCoordinator:
104
136
  feedback = reviewed.critique.issues or (
105
137
  "critic_requested_revision",
106
138
  )
139
+ if progress is not None:
140
+ progress(
141
+ "PLANNING",
142
+ f"revision={revision} requires another planning round",
143
+ )
107
144
 
145
+ if progress is not None:
146
+ progress("PLANNING", "revision budget exhausted")
108
147
  raise PlanningCoordinationError("revision_budget_exhausted")