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.
- {devagent_physical_engine-0.11.3/src/devagent_physical_engine.egg-info → devagent_physical_engine-0.11.5}/PKG-INFO +49 -3
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/README.md +49 -3
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/pyproject.toml +1 -1
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/__init__.py +1 -1
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/coordinator.py +40 -1
- devagent_physical_engine-0.11.5/src/devagent_physical_engine/ai_cli.py +464 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/engineering_agent.py +44 -1
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/provider_qualification.py +24 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5/src/devagent_physical_engine.egg-info}/PKG-INFO +49 -3
- devagent_physical_engine-0.11.5/tests/test_ai_cli.py +210 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_natural_language_agent_v07.py +21 -0
- devagent_physical_engine-0.11.3/src/devagent_physical_engine/ai_cli.py +0 -226
- devagent_physical_engine-0.11.3/tests/test_ai_cli.py +0 -54
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/NOTICE +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/setup.cfg +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/__init__.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/compiler.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/contracts.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/critic.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/evidence.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/interpreter.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/planner.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/recovery.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/routing.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/runtime.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/semantic.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/agent/structured.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/cli.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/continuous_clearance.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/doctor.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/engineering_request.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/execution.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/models.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/operating_envelope.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/optimization/__init__.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/optimization/candidates.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/optimization/contracts.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/optimization/evidence.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/optimization/experience.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/optimization/measured.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/physical_campaign.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/physical_evidence.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/physical_motion.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/planning.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/preexecution_contract.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/providers.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/qualification.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/qualification_cli.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/qualification_harness.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/robot_platform.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/robots.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/__init__.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/commands.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/doctor.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/qualification.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/workpiece_scene.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/setup_profile.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/simulation.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/simulation_platform.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/tool_collision.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/twin.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/twin_builder.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/twin_materialization.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/verification.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine.egg-info/SOURCES.txt +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_agent_core.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_agent_semantic_hardening.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_ai_cli_v07.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_continuous_clearance_v011.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_core.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_engineering_request_v07.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_interpreter_profiles_v08.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_live_provider_qualification.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_measured_motion_v10.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_openai_strict_schema_v0113.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_optimization_v05.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_physical_campaign_v09.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_physical_evidence_v09.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_physical_motion_v09.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_preexecution_contract_v10.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_provider_and_qualification.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_qualification_harness_v06.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_real_provider_adapters.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_robot_platform_v08.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_ros2_production_receipts_v011.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_ros2_simulation.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_ros_trajectory_v09.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_setup_profile.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_sim_real_qualification_v011.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_simulation_platform_v08.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_tool_collision_v011.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_trajectory_qualification_v09.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_twin_materialization_v10.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_twin_v08.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_v052_stabilization.py +0 -0
- {devagent_physical_engine-0.11.3 → devagent_physical_engine-0.11.5}/tests/test_v08_catalog_mapping_regression.py +0 -0
- {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
|
+
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.
|
|
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
|
|
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.
|
|
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
|
|
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.
|
|
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"
|
|
@@ -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")
|