devagent-physical-engine 1.8.6__tar.gz → 1.8.8__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-1.8.6/src/devagent_physical_engine.egg-info → devagent_physical_engine-1.8.8}/PKG-INFO +16 -6
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/README.md +15 -5
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/pyproject.toml +3 -1
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/__init__.py +1 -1
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/workpiece_scene.py +1 -1
- devagent_physical_engine-1.8.8/src/devagent_physical_engine/ros2/workpiece_scene_probe_v187.py +408 -0
- devagent_physical_engine-1.8.8/src/devagent_physical_engine/ros2/workpiece_scene_probe_v188.py +283 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8/src/devagent_physical_engine.egg-info}/PKG-INFO +16 -6
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine.egg-info/SOURCES.txt +2 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_industrial_motion_v170.py +2 -2
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_package_metadata_v184.py +2 -2
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_transfer_place_diagnostic_v172.py +2 -2
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_workpiece_semantic_lifecycle_v186.py +13 -1
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/NOTICE +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/setup.cfg +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/__init__.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/compiler.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/contracts.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/coordinator.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/critic.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/evidence.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/interpreter.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/planner.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/recovery.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/routing.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/runtime.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/semantic.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/agent/structured.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ai_cli.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/cli.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/commercial.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/commercial_campaign.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/commercial_cli.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/commercial_importer.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/commercial_intelligence.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/commercial_readiness.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/commercial_repository.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/continuous_clearance.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/controller_runtime_hotfix_v181.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/doctor.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/engineering_agent.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/engineering_request.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/evidence_replay.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/evidence_trust.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/execution.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/industrial_motion_hotfix_v170.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/industrial_motion_v170.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/industrial_motion_v182.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/models.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/one_command.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/one_command_runtime.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/one_command_v15.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/one_command_v16.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/operating_envelope.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/optimization/__init__.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/optimization/candidates.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/optimization/contracts.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/optimization/evidence.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/optimization/experience.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/optimization/measured.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/physical_campaign.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/physical_evidence.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/physical_motion.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/planning.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/pose_math.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/preexecution_contract.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/production_authority.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/production_grade.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/project.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/provider_criterion.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/provider_qualification.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/providers.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/qualification.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/qualification_cli.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/qualification_harness.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/reference_workcell.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/report_test_execution.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/report_test_execution_strict.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/robot_platform.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/robot_support_v18.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/robots.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/__init__.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/abb_irb1200.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/abb_irb1200_preview.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/commands.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/controller_action_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/destination_support_contact_v182.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/doctor.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/fk_pose.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/gazebo_cli.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/gazebo_pose.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v170.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v171.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v172.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/industrial_sequence_planner_v182.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/joint_state_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/moveit_joint_plan_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/moveit_joint_plan_v161_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/moveit_task_planner.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/pilz_sequence_plan_probe_v182.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/preexecution.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/qualification.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/qualification_v11.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/qualification_v12.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/report_test_visualization.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/report_test_visualization_v170.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/support_contact_acm_probe_v170.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/support_contact_lease_v170.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/support_contact_runner_v161.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/support_contact_v161.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/task_adapter.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/task_visualization.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/tool_scene.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/tool_scene_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/trajectory_action_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/trajectory_tracking.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/workpiece_follow.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/workpiece_gazebo_follower.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/ros2/workpiece_scene_probe_v186.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/selective_verification.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/selective_verification_v16.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/setup_profile.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/sim_real_qualification.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/simulation.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/simulation_platform.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/smooth_motion_hotfix_v162.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/support_contact_hotfix_v161.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/tool_collision.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/twin.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/twin_builder.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/twin_codec.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/twin_materialization.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/user_cli.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/user_cli_v15.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/user_cli_v16.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/user_cli_v18.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/verification.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine/workpiece_lifecycle.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine.egg-info/requires.txt +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_abb_irb1200_visual_v18.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_agent_core.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_agent_semantic_hardening.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_ai_cli.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_ai_cli_v07.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_commercial_importer_v1.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_commercial_intelligence_v15.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_commercial_readiness_v1.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_commercial_v1.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_continuous_clearance_v011.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_controller_runtime_hotfix_v181.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_core.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_destination_support_contact_v182.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_engineering_request_v07.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_evidence_replay_v12.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_evidence_trust_coverage_v12.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_evidence_trust_transport_v12.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_evidence_trust_v12.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_evidence_viewer_palette_v130.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_gazebo_cli_v0122.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_golden_abb_runner_v171.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_golden_abb_showcase.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_interpreter_profiles_v08.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_joint_state_probe_v0125.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_live_provider_qualification.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_measured_motion_v10.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_moveit_planning_diagnostics_v0125.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_moveit_scene_v0123.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_natural_language_agent_v07.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_one_command_hardening_v13.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_one_command_pose_hardening_v15.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_one_command_regression_v141.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_one_command_v13.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_openai_strict_schema_v0113.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_optimization_v05.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_physical_campaign_v09.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_physical_evidence_v09.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_physical_motion_v09.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_planning_fallback_v012.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_pose_math_v0125.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_preexecution_contract_v10.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_production_authority_v11.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_production_grade_coverage_v11.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_production_grade_v11.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_project_spine_v013.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_provider_and_qualification.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_provider_criterion_v15.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_qualification_harness_v06.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_readme_pypi.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_real_provider_adapters.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_reference_workcell_ros_frames_v0125.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_reference_workcell_v012.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_report_test_contract_coverage_v16.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_report_test_lineage_v16.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_report_test_visual_execution_v16.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_robot_platform_v08.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_ros2_production_receipts_v011.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_ros2_simulation.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_ros_trajectory_v09.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_selective_verification_v14.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_setup_profile.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_sim_real_qualification_v011.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_simulation_platform_v08.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_smooth_motion_hotfix_v162.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_support_contact_hotfix_v161.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_tool_collision_v011.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_tool_scene_v0124.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_trajectory_action_probe_v0125.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_trajectory_qualification_v09.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_trajectory_tracking_v0125.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_twin_materialization_v10.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_twin_v08.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_user_cli_interactive_v131.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_user_cli_progress_v131.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_user_cli_report_visual_v16.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_user_cli_selective_v14.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_user_cli_v15.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_user_cli_v15_hotfix_inheritance.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_v052_stabilization.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_v08_catalog_mapping_regression.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_workpiece_attach_semantics_v183.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_workpiece_lifecycle_v011.py +0 -0
- {devagent_physical_engine-1.8.6 → devagent_physical_engine-1.8.8}/tests/test_workpiece_scene_probe_v185.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devagent-physical-engine
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.8
|
|
4
4
|
Summary: Verification-first robotics commissioning runtime with exact-Twin evidence, qualified UR5e Gazebo/MoveIt report execution, truthful robot support tiers, selective verification, replay, regression, and FAT reporting.
|
|
5
5
|
Author: Tom Ha
|
|
6
6
|
License: All Rights Reserved
|
|
@@ -76,7 +76,7 @@ regression + FAT report + Evidence Viewer
|
|
|
76
76
|
Python 3.11+ is required.
|
|
77
77
|
|
|
78
78
|
```bash
|
|
79
|
-
python -m pip install --upgrade devagent-physical-engine==1.8.
|
|
79
|
+
python -m pip install --upgrade devagent-physical-engine==1.8.8
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
Verify the installed package:
|
|
@@ -88,7 +88,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
|
|
|
88
88
|
Expected:
|
|
89
89
|
|
|
90
90
|
```text
|
|
91
|
-
1.8.
|
|
91
|
+
1.8.8
|
|
92
92
|
```
|
|
93
93
|
|
|
94
94
|
Run the normal customer workflow:
|
|
@@ -438,6 +438,16 @@ Every lifecycle transition persists a deterministic receipt containing probe std
|
|
|
438
438
|
|
|
439
439
|
This release does not disable collision checking, change the verified tool/workpiece geometry, modify motion targets, planner types or speeds, detach early, grant site qualification, or expand real-execution authority.
|
|
440
440
|
|
|
441
|
+
## v1.8.8 canonical world integrity gate before GRASP
|
|
442
|
+
|
|
443
|
+
v1.8.8 packages the latest workpiece-lifecycle diagnostics as an unambiguous release version so target acceptance no longer runs newer code while reporting `1.8.6`.
|
|
444
|
+
|
|
445
|
+
Before ATTACH, DevAgent now reasserts the exact canonical Twin workpiece into the live MoveIt world, synchronously reads the object back, normalizes ROS `uint8/octet` primitive representations safely, and requires exact identity/frame/geometry plus bounded pose agreement before attachment is attempted. Primitive type `0` remains invalid; DevAgent does not infer BOX/CYLINDER from dimensions or weaken collision checking.
|
|
446
|
+
|
|
447
|
+
The lifecycle receipt records the pre/post primitive type representation, canonical-world reassert result, semantic verification, and the exact inner failure code. Existing target poses, conservative Pilz motion limits, tool/workpiece geometry, site-qualification boundaries, and `real_execution_allowed = false` remain unchanged.
|
|
448
|
+
|
|
449
|
+
Hosted CI qualifies the software/build/install contract. The ROS/Gazebo/MoveIt workstation still requires a fresh target acceptance run of the released 1.8.8 artifact before this specific workpiece path can be called physically qualified.
|
|
450
|
+
|
|
441
451
|
## Qualified visual-execution scope
|
|
442
452
|
|
|
443
453
|
Measured report-test execution remains intentionally narrow:
|
|
@@ -638,9 +648,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
638
648
|
|
|
639
649
|
# Project status
|
|
640
650
|
|
|
641
|
-
**v1.8.
|
|
651
|
+
**v1.8.8 — Production/Stable software workflow**
|
|
642
652
|
|
|
643
|
-
v1.8.
|
|
653
|
+
v1.8.8 retains the v1.8.6 semantic lifecycle and the target-candidate improvements layered after it, while making the package/version identity explicit. The current GRASP path adds ROS-octet-safe diagnostics and a synchronous canonical-world reassert/readback gate before attachment. This release is intended to make the next workstation qualification run reproducible and attributable to one exact installable artifact.
|
|
644
654
|
|
|
645
655
|
Production-oriented software capabilities include:
|
|
646
656
|
|
|
@@ -655,7 +665,7 @@ exact Requirement → Mapping → Verification Plan → Case provenance
|
|
|
655
665
|
truthful robot support tiers
|
|
656
666
|
qualified UR5e report-test visual execution contract
|
|
657
667
|
direct UR5e controller-manager/action readiness binding
|
|
658
|
-
canonical MoveIt
|
|
668
|
+
canonical MoveIt workpiece lifecycle with world-integrity gate
|
|
659
669
|
semantic workpiece pose/geometry verification with persistent diagnostics
|
|
660
670
|
scoped destination-support place contact
|
|
661
671
|
experimental exact ABB IRB1200 Gazebo/MoveIt/RViz preview
|
|
@@ -35,7 +35,7 @@ regression + FAT report + Evidence Viewer
|
|
|
35
35
|
Python 3.11+ is required.
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
python -m pip install --upgrade devagent-physical-engine==1.8.
|
|
38
|
+
python -m pip install --upgrade devagent-physical-engine==1.8.8
|
|
39
39
|
```
|
|
40
40
|
|
|
41
41
|
Verify the installed package:
|
|
@@ -47,7 +47,7 @@ python -c "import devagent_physical_engine as d; print(d.__version__)"
|
|
|
47
47
|
Expected:
|
|
48
48
|
|
|
49
49
|
```text
|
|
50
|
-
1.8.
|
|
50
|
+
1.8.8
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
Run the normal customer workflow:
|
|
@@ -397,6 +397,16 @@ Every lifecycle transition persists a deterministic receipt containing probe std
|
|
|
397
397
|
|
|
398
398
|
This release does not disable collision checking, change the verified tool/workpiece geometry, modify motion targets, planner types or speeds, detach early, grant site qualification, or expand real-execution authority.
|
|
399
399
|
|
|
400
|
+
## v1.8.8 canonical world integrity gate before GRASP
|
|
401
|
+
|
|
402
|
+
v1.8.8 packages the latest workpiece-lifecycle diagnostics as an unambiguous release version so target acceptance no longer runs newer code while reporting `1.8.6`.
|
|
403
|
+
|
|
404
|
+
Before ATTACH, DevAgent now reasserts the exact canonical Twin workpiece into the live MoveIt world, synchronously reads the object back, normalizes ROS `uint8/octet` primitive representations safely, and requires exact identity/frame/geometry plus bounded pose agreement before attachment is attempted. Primitive type `0` remains invalid; DevAgent does not infer BOX/CYLINDER from dimensions or weaken collision checking.
|
|
405
|
+
|
|
406
|
+
The lifecycle receipt records the pre/post primitive type representation, canonical-world reassert result, semantic verification, and the exact inner failure code. Existing target poses, conservative Pilz motion limits, tool/workpiece geometry, site-qualification boundaries, and `real_execution_allowed = false` remain unchanged.
|
|
407
|
+
|
|
408
|
+
Hosted CI qualifies the software/build/install contract. The ROS/Gazebo/MoveIt workstation still requires a fresh target acceptance run of the released 1.8.8 artifact before this specific workpiece path can be called physically qualified.
|
|
409
|
+
|
|
400
410
|
## Qualified visual-execution scope
|
|
401
411
|
|
|
402
412
|
Measured report-test execution remains intentionally narrow:
|
|
@@ -597,9 +607,9 @@ devagent-physical-ai optional provider-backed engineering front end
|
|
|
597
607
|
|
|
598
608
|
# Project status
|
|
599
609
|
|
|
600
|
-
**v1.8.
|
|
610
|
+
**v1.8.8 — Production/Stable software workflow**
|
|
601
611
|
|
|
602
|
-
v1.8.
|
|
612
|
+
v1.8.8 retains the v1.8.6 semantic lifecycle and the target-candidate improvements layered after it, while making the package/version identity explicit. The current GRASP path adds ROS-octet-safe diagnostics and a synchronous canonical-world reassert/readback gate before attachment. This release is intended to make the next workstation qualification run reproducible and attributable to one exact installable artifact.
|
|
603
613
|
|
|
604
614
|
Production-oriented software capabilities include:
|
|
605
615
|
|
|
@@ -614,7 +624,7 @@ exact Requirement → Mapping → Verification Plan → Case provenance
|
|
|
614
624
|
truthful robot support tiers
|
|
615
625
|
qualified UR5e report-test visual execution contract
|
|
616
626
|
direct UR5e controller-manager/action readiness binding
|
|
617
|
-
canonical MoveIt
|
|
627
|
+
canonical MoveIt workpiece lifecycle with world-integrity gate
|
|
618
628
|
semantic workpiece pose/geometry verification with persistent diagnostics
|
|
619
629
|
scoped destination-support place contact
|
|
620
630
|
experimental exact ABB IRB1200 Gazebo/MoveIt/RViz preview
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "devagent-physical-engine"
|
|
7
|
-
version = "1.8.
|
|
7
|
+
version = "1.8.8"
|
|
8
8
|
description = "Verification-first robotics commissioning runtime with exact-Twin evidence, qualified UR5e Gazebo/MoveIt report execution, truthful robot support tiers, selective verification, replay, regression, and FAT reporting."
|
|
9
9
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -66,6 +66,8 @@ omit = [
|
|
|
66
66
|
# Pure contracts/reference-workcell logic remains inside the hosted coverage gate.
|
|
67
67
|
"src/devagent_physical_engine/ros2/*_probe.py",
|
|
68
68
|
"src/devagent_physical_engine/ros2/workpiece_scene_probe_v186.py",
|
|
69
|
+
"src/devagent_physical_engine/ros2/workpiece_scene_probe_v187.py",
|
|
70
|
+
"src/devagent_physical_engine/ros2/workpiece_scene_probe_v188.py",
|
|
69
71
|
"src/devagent_physical_engine/ros2/qualification*.py",
|
|
70
72
|
"src/devagent_physical_engine/ros2/joint_state_recorder.py",
|
|
71
73
|
"src/devagent_physical_engine/ros2/ur5e_adapter.py",
|
|
@@ -124,7 +124,7 @@ class MoveItWorkpieceLifecycleBridge:
|
|
|
124
124
|
)
|
|
125
125
|
temporary.replace(payload_path)
|
|
126
126
|
|
|
127
|
-
helper = Path(__file__).with_name("
|
|
127
|
+
helper = Path(__file__).with_name("workpiece_scene_probe_v188.py").resolve()
|
|
128
128
|
result = self.runner.run(
|
|
129
129
|
(
|
|
130
130
|
"python3",
|
devagent_physical_engine-1.8.8/src/devagent_physical_engine/ros2/workpiece_scene_probe_v187.py
ADDED
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import argparse
|
|
4
|
+
import json
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
try:
|
|
9
|
+
from .workpiece_scene_probe import (
|
|
10
|
+
_canonical_attachment,
|
|
11
|
+
_collision_object,
|
|
12
|
+
_compose,
|
|
13
|
+
_hash,
|
|
14
|
+
_lookup_transform,
|
|
15
|
+
_pose_payload,
|
|
16
|
+
)
|
|
17
|
+
from .workpiece_scene_probe_v186 import (
|
|
18
|
+
GEOMETRY_DIMENSION_TOLERANCE_M,
|
|
19
|
+
_apply_scene,
|
|
20
|
+
_dimensions_match,
|
|
21
|
+
_inspect_collision,
|
|
22
|
+
_read_scene_state,
|
|
23
|
+
_verify_semantics,
|
|
24
|
+
)
|
|
25
|
+
except ImportError: # Direct helper execution under distro Python.
|
|
26
|
+
from workpiece_scene_probe import ( # type: ignore[no-redef]
|
|
27
|
+
_canonical_attachment,
|
|
28
|
+
_collision_object,
|
|
29
|
+
_compose,
|
|
30
|
+
_hash,
|
|
31
|
+
_lookup_transform,
|
|
32
|
+
_pose_payload,
|
|
33
|
+
)
|
|
34
|
+
from workpiece_scene_probe_v186 import ( # type: ignore[no-redef]
|
|
35
|
+
GEOMETRY_DIMENSION_TOLERANCE_M,
|
|
36
|
+
_apply_scene,
|
|
37
|
+
_dimensions_match,
|
|
38
|
+
_inspect_collision,
|
|
39
|
+
_read_scene_state,
|
|
40
|
+
_verify_semantics,
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def _diagnostic_hash(
|
|
45
|
+
*,
|
|
46
|
+
tool_link: str,
|
|
47
|
+
item: dict[str, Any],
|
|
48
|
+
position,
|
|
49
|
+
quaternion,
|
|
50
|
+
) -> str:
|
|
51
|
+
return _hash(_canonical_attachment(tool_link, item, position, quaternion))
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def transition(path: Path, *, operation: str, timeout_s: float) -> dict[str, Any]:
|
|
55
|
+
payload = json.loads(path.read_text(encoding="utf-8"))
|
|
56
|
+
item = dict(payload["workpiece"])
|
|
57
|
+
planning_frame = str(payload["planning_frame"])
|
|
58
|
+
tool_link = str(payload["tool_link"])
|
|
59
|
+
touch_links = tuple(str(value) for value in payload.get("touch_links", [tool_link]))
|
|
60
|
+
materialization_hash = str(payload["materialization_hash"])
|
|
61
|
+
twin_hash = str(payload["twin_hash"])
|
|
62
|
+
workpiece_id = str(item["id"])
|
|
63
|
+
|
|
64
|
+
pose_data = item["pose"]
|
|
65
|
+
expected_world_position = tuple(float(value) for value in pose_data["position_m"])
|
|
66
|
+
expected_world_q = tuple(float(value) for value in pose_data["quaternion_xyzw"])
|
|
67
|
+
expected_item = {
|
|
68
|
+
"id": workpiece_id,
|
|
69
|
+
"geometry_kind": str(item["geometry_kind"]),
|
|
70
|
+
"dimensions_m": [float(value) for value in item["dimensions_m"]],
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
import rclpy
|
|
74
|
+
from geometry_msgs.msg import Pose
|
|
75
|
+
from moveit_msgs.msg import AttachedCollisionObject, CollisionObject, PlanningScene
|
|
76
|
+
from moveit_msgs.srv import ApplyPlanningScene, GetPlanningScene
|
|
77
|
+
from shape_msgs.msg import SolidPrimitive
|
|
78
|
+
from tf2_ros import Buffer, TransformListener
|
|
79
|
+
|
|
80
|
+
rclpy.init()
|
|
81
|
+
node = rclpy.create_node("devagent_workpiece_scene_probe_v187")
|
|
82
|
+
apply_client = node.create_client(ApplyPlanningScene, "/apply_planning_scene")
|
|
83
|
+
get_client = node.create_client(GetPlanningScene, "/get_planning_scene")
|
|
84
|
+
buffer = Buffer()
|
|
85
|
+
listener = TransformListener(buffer, node, spin_thread=False)
|
|
86
|
+
try:
|
|
87
|
+
if not apply_client.wait_for_service(timeout_sec=timeout_s):
|
|
88
|
+
return {"success": False, "code": "apply_planning_scene_unavailable"}
|
|
89
|
+
if not get_client.wait_for_service(timeout_sec=timeout_s):
|
|
90
|
+
return {"success": False, "code": "get_planning_scene_unavailable"}
|
|
91
|
+
|
|
92
|
+
pre_world, pre_attached = _read_scene_state(
|
|
93
|
+
get_client, node, timeout_s, workpiece_id
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
if operation == "attach":
|
|
97
|
+
if len(pre_world) != 1 or pre_attached:
|
|
98
|
+
return {
|
|
99
|
+
"success": False,
|
|
100
|
+
"code": "workpiece_attach_precondition_mismatch",
|
|
101
|
+
"observed_world_count": len(pre_world),
|
|
102
|
+
"observed_attached_count": len(pre_attached),
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
try:
|
|
106
|
+
observed_world = _inspect_collision(pre_world[0], SolidPrimitive)
|
|
107
|
+
except ValueError as exc:
|
|
108
|
+
return {
|
|
109
|
+
"success": False,
|
|
110
|
+
"code": "workpiece_world_shape_invalid",
|
|
111
|
+
"detail": str(exc),
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
world_semantics = _verify_semantics(
|
|
115
|
+
expected_item=expected_item,
|
|
116
|
+
expected_frame=planning_frame,
|
|
117
|
+
expected_position=expected_world_position,
|
|
118
|
+
expected_quaternion=expected_world_q,
|
|
119
|
+
observed=observed_world,
|
|
120
|
+
)
|
|
121
|
+
if not world_semantics["success"]:
|
|
122
|
+
return {
|
|
123
|
+
"success": False,
|
|
124
|
+
"code": "workpiece_world_semantic_mismatch",
|
|
125
|
+
"observed_world": observed_world,
|
|
126
|
+
"world_semantics": world_semantics,
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
transform = _lookup_transform(
|
|
130
|
+
node,
|
|
131
|
+
buffer,
|
|
132
|
+
target_frame=tool_link,
|
|
133
|
+
source_frame=planning_frame,
|
|
134
|
+
timeout_s=timeout_s,
|
|
135
|
+
)
|
|
136
|
+
transform_position = (
|
|
137
|
+
float(transform.transform.translation.x),
|
|
138
|
+
float(transform.transform.translation.y),
|
|
139
|
+
float(transform.transform.translation.z),
|
|
140
|
+
)
|
|
141
|
+
transform_q = (
|
|
142
|
+
float(transform.transform.rotation.x),
|
|
143
|
+
float(transform.transform.rotation.y),
|
|
144
|
+
float(transform.transform.rotation.z),
|
|
145
|
+
float(transform.transform.rotation.w),
|
|
146
|
+
)
|
|
147
|
+
expected_relative_position, expected_relative_q = _compose(
|
|
148
|
+
transform_position,
|
|
149
|
+
transform_q,
|
|
150
|
+
observed_world["position_m"],
|
|
151
|
+
observed_world["quaternion_xyzw"],
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
# v1.8.5 target evidence proved this explicit AttachedCollisionObject
|
|
155
|
+
# representation is accepted by the real Jazzy MoveIt stack. v1.8.6
|
|
156
|
+
# changed both the verifier and the attach mechanism to an ID-only transfer,
|
|
157
|
+
# making the resulting relative pose depend on MoveIt's asynchronously
|
|
158
|
+
# sampled internal RobotState while the verifier used live TF. Keep semantic
|
|
159
|
+
# verification, but make the command and verifier share this exact TF-derived
|
|
160
|
+
# tool-relative pose and the already-verified geometry. MoveIt removes the
|
|
161
|
+
# same-ID world object as part of the attach; no redundant world REMOVE is sent.
|
|
162
|
+
attached = AttachedCollisionObject()
|
|
163
|
+
attached.link_name = tool_link
|
|
164
|
+
attached.touch_links = list(touch_links)
|
|
165
|
+
attached.object = _collision_object(
|
|
166
|
+
expected_item,
|
|
167
|
+
tool_link,
|
|
168
|
+
expected_relative_position,
|
|
169
|
+
expected_relative_q,
|
|
170
|
+
operation=CollisionObject.ADD,
|
|
171
|
+
CollisionObject=CollisionObject,
|
|
172
|
+
Pose=Pose,
|
|
173
|
+
SolidPrimitive=SolidPrimitive,
|
|
174
|
+
)
|
|
175
|
+
scene = PlanningScene()
|
|
176
|
+
scene.is_diff = True
|
|
177
|
+
scene.robot_state.is_diff = True
|
|
178
|
+
scene.robot_state.attached_collision_objects.append(attached)
|
|
179
|
+
failure = _apply_scene(apply_client, node, scene, timeout_s)
|
|
180
|
+
if failure is not None:
|
|
181
|
+
return {
|
|
182
|
+
**failure,
|
|
183
|
+
"attach_mode": "explicit_verified_geometry",
|
|
184
|
+
"expected_attachment_pose": _pose_payload(
|
|
185
|
+
expected_relative_position, expected_relative_q
|
|
186
|
+
),
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
post_world, post_attached = _read_scene_state(
|
|
190
|
+
get_client, node, timeout_s, workpiece_id
|
|
191
|
+
)
|
|
192
|
+
observed_link = (
|
|
193
|
+
post_attached[0].link_name if len(post_attached) == 1 else None
|
|
194
|
+
)
|
|
195
|
+
if post_world or len(post_attached) != 1 or observed_link != tool_link:
|
|
196
|
+
return {
|
|
197
|
+
"success": False,
|
|
198
|
+
"code": "workpiece_attach_readback_mismatch",
|
|
199
|
+
"attach_mode": "explicit_verified_geometry",
|
|
200
|
+
"observed_world_count": len(post_world),
|
|
201
|
+
"observed_attached_count": len(post_attached),
|
|
202
|
+
"observed_attached_link": observed_link,
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
observed_touch_links = tuple(sorted(set(post_attached[0].touch_links)))
|
|
206
|
+
expected_touch_links = tuple(sorted(set(touch_links)))
|
|
207
|
+
if observed_touch_links != expected_touch_links:
|
|
208
|
+
return {
|
|
209
|
+
"success": False,
|
|
210
|
+
"code": "workpiece_attachment_touch_links_mismatch",
|
|
211
|
+
"attach_mode": "explicit_verified_geometry",
|
|
212
|
+
"expected_touch_links": list(expected_touch_links),
|
|
213
|
+
"observed_touch_links": list(observed_touch_links),
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
try:
|
|
217
|
+
observed_attached = _inspect_collision(
|
|
218
|
+
post_attached[0].object, SolidPrimitive
|
|
219
|
+
)
|
|
220
|
+
except ValueError as exc:
|
|
221
|
+
return {
|
|
222
|
+
"success": False,
|
|
223
|
+
"code": "workpiece_attached_shape_invalid",
|
|
224
|
+
"attach_mode": "explicit_verified_geometry",
|
|
225
|
+
"detail": str(exc),
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
attached_semantics = _verify_semantics(
|
|
229
|
+
expected_item=expected_item,
|
|
230
|
+
expected_frame=tool_link,
|
|
231
|
+
expected_position=expected_relative_position,
|
|
232
|
+
expected_quaternion=expected_relative_q,
|
|
233
|
+
observed=observed_attached,
|
|
234
|
+
)
|
|
235
|
+
expected_hash = _diagnostic_hash(
|
|
236
|
+
tool_link=tool_link,
|
|
237
|
+
item=expected_item,
|
|
238
|
+
position=expected_relative_position,
|
|
239
|
+
quaternion=expected_relative_q,
|
|
240
|
+
)
|
|
241
|
+
observed_item = {
|
|
242
|
+
"id": observed_attached["id"],
|
|
243
|
+
"geometry_kind": observed_attached["geometry_kind"],
|
|
244
|
+
"dimensions_m": observed_attached["dimensions_m"],
|
|
245
|
+
}
|
|
246
|
+
observed_hash = _diagnostic_hash(
|
|
247
|
+
tool_link=tool_link,
|
|
248
|
+
item=observed_item,
|
|
249
|
+
position=observed_attached["position_m"],
|
|
250
|
+
quaternion=observed_attached["quaternion_xyzw"],
|
|
251
|
+
)
|
|
252
|
+
diagnostic = {
|
|
253
|
+
"materialization_hash": materialization_hash,
|
|
254
|
+
"twin_hash": twin_hash,
|
|
255
|
+
"attach_mode": "explicit_verified_geometry",
|
|
256
|
+
"observed_world_present": False,
|
|
257
|
+
"observed_attached_link": tool_link,
|
|
258
|
+
"expected_attachment_hash": expected_hash,
|
|
259
|
+
"observed_attachment_hash": observed_hash,
|
|
260
|
+
"representation_hash_match": observed_hash == expected_hash,
|
|
261
|
+
"expected_attachment_pose": _pose_payload(
|
|
262
|
+
expected_relative_position, expected_relative_q
|
|
263
|
+
),
|
|
264
|
+
"observed_attachment": observed_attached,
|
|
265
|
+
"attachment_semantics": attached_semantics,
|
|
266
|
+
"expected_touch_links": list(expected_touch_links),
|
|
267
|
+
"observed_touch_links": list(observed_touch_links),
|
|
268
|
+
}
|
|
269
|
+
if not attached_semantics["success"]:
|
|
270
|
+
return {
|
|
271
|
+
"success": False,
|
|
272
|
+
"code": "workpiece_attachment_semantic_mismatch",
|
|
273
|
+
**diagnostic,
|
|
274
|
+
}
|
|
275
|
+
return {
|
|
276
|
+
"success": True,
|
|
277
|
+
"code": "workpiece_attach_verified",
|
|
278
|
+
"attachment_hash": expected_hash,
|
|
279
|
+
**diagnostic,
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
if operation == "detach":
|
|
283
|
+
if pre_world or len(pre_attached) != 1:
|
|
284
|
+
return {
|
|
285
|
+
"success": False,
|
|
286
|
+
"code": "workpiece_detach_precondition_mismatch",
|
|
287
|
+
"observed_world_count": len(pre_world),
|
|
288
|
+
"observed_attached_count": len(pre_attached),
|
|
289
|
+
}
|
|
290
|
+
if pre_attached[0].link_name != tool_link:
|
|
291
|
+
return {
|
|
292
|
+
"success": False,
|
|
293
|
+
"code": "workpiece_detach_link_mismatch",
|
|
294
|
+
"observed_attached_link": pre_attached[0].link_name,
|
|
295
|
+
"expected_attached_link": tool_link,
|
|
296
|
+
}
|
|
297
|
+
try:
|
|
298
|
+
before_detach = _inspect_collision(
|
|
299
|
+
pre_attached[0].object, SolidPrimitive
|
|
300
|
+
)
|
|
301
|
+
except ValueError as exc:
|
|
302
|
+
return {
|
|
303
|
+
"success": False,
|
|
304
|
+
"code": "workpiece_attached_shape_invalid",
|
|
305
|
+
"detail": str(exc),
|
|
306
|
+
}
|
|
307
|
+
if (
|
|
308
|
+
before_detach["geometry_kind"] != expected_item["geometry_kind"]
|
|
309
|
+
or not _dimensions_match(
|
|
310
|
+
expected_item["dimensions_m"],
|
|
311
|
+
before_detach["dimensions_m"],
|
|
312
|
+
GEOMETRY_DIMENSION_TOLERANCE_M,
|
|
313
|
+
)
|
|
314
|
+
):
|
|
315
|
+
return {
|
|
316
|
+
"success": False,
|
|
317
|
+
"code": "workpiece_detach_geometry_mismatch",
|
|
318
|
+
"observed_attachment": before_detach,
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
attached = AttachedCollisionObject()
|
|
322
|
+
attached.link_name = tool_link
|
|
323
|
+
attached.object.id = workpiece_id
|
|
324
|
+
attached.object.operation = CollisionObject.REMOVE
|
|
325
|
+
scene = PlanningScene()
|
|
326
|
+
scene.is_diff = True
|
|
327
|
+
scene.robot_state.is_diff = True
|
|
328
|
+
scene.robot_state.attached_collision_objects.append(attached)
|
|
329
|
+
failure = _apply_scene(apply_client, node, scene, timeout_s)
|
|
330
|
+
if failure is not None:
|
|
331
|
+
return failure
|
|
332
|
+
|
|
333
|
+
post_world, post_attached = _read_scene_state(
|
|
334
|
+
get_client, node, timeout_s, workpiece_id
|
|
335
|
+
)
|
|
336
|
+
if len(post_world) != 1 or post_attached:
|
|
337
|
+
return {
|
|
338
|
+
"success": False,
|
|
339
|
+
"code": "workpiece_detach_readback_mismatch",
|
|
340
|
+
"observed_world_count": len(post_world),
|
|
341
|
+
"observed_attached_count": len(post_attached),
|
|
342
|
+
}
|
|
343
|
+
try:
|
|
344
|
+
observed_world = _inspect_collision(post_world[0], SolidPrimitive)
|
|
345
|
+
except ValueError as exc:
|
|
346
|
+
return {
|
|
347
|
+
"success": False,
|
|
348
|
+
"code": "workpiece_world_shape_invalid",
|
|
349
|
+
"detail": str(exc),
|
|
350
|
+
}
|
|
351
|
+
world_semantics = _verify_semantics(
|
|
352
|
+
expected_item=expected_item,
|
|
353
|
+
expected_frame=planning_frame,
|
|
354
|
+
expected_position=expected_world_position,
|
|
355
|
+
expected_quaternion=expected_world_q,
|
|
356
|
+
observed=observed_world,
|
|
357
|
+
)
|
|
358
|
+
diagnostic = {
|
|
359
|
+
"materialization_hash": materialization_hash,
|
|
360
|
+
"twin_hash": twin_hash,
|
|
361
|
+
"observed_world_present": True,
|
|
362
|
+
"observed_attached_link": None,
|
|
363
|
+
"observed_world": observed_world,
|
|
364
|
+
"world_semantics": world_semantics,
|
|
365
|
+
}
|
|
366
|
+
if not world_semantics["success"]:
|
|
367
|
+
return {
|
|
368
|
+
"success": False,
|
|
369
|
+
"code": "workpiece_detach_semantic_mismatch",
|
|
370
|
+
**diagnostic,
|
|
371
|
+
}
|
|
372
|
+
return {
|
|
373
|
+
"success": True,
|
|
374
|
+
"code": "workpiece_detach_verified",
|
|
375
|
+
**diagnostic,
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
return {"success": False, "code": "workpiece_operation_invalid"}
|
|
379
|
+
finally:
|
|
380
|
+
del listener
|
|
381
|
+
node.destroy_node()
|
|
382
|
+
rclpy.shutdown()
|
|
383
|
+
|
|
384
|
+
|
|
385
|
+
def main() -> int:
|
|
386
|
+
parser = argparse.ArgumentParser()
|
|
387
|
+
parser.add_argument("operation", choices=("attach", "detach"))
|
|
388
|
+
parser.add_argument("--input", required=True)
|
|
389
|
+
parser.add_argument("--timeout", type=float, default=20.0)
|
|
390
|
+
args = parser.parse_args()
|
|
391
|
+
try:
|
|
392
|
+
result = transition(
|
|
393
|
+
Path(args.input).expanduser().resolve(),
|
|
394
|
+
operation=str(args.operation),
|
|
395
|
+
timeout_s=float(args.timeout),
|
|
396
|
+
)
|
|
397
|
+
except Exception as exc:
|
|
398
|
+
result = {
|
|
399
|
+
"success": False,
|
|
400
|
+
"code": f"workpiece_scene_probe_error:{type(exc).__name__}",
|
|
401
|
+
"detail": str(exc),
|
|
402
|
+
}
|
|
403
|
+
print(json.dumps(result, sort_keys=True))
|
|
404
|
+
return 0 if result.get("success") else 2
|
|
405
|
+
|
|
406
|
+
|
|
407
|
+
if __name__ == "__main__":
|
|
408
|
+
raise SystemExit(main())
|