devagent-physical-engine 0.10.0__tar.gz → 0.11.2__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.2/PKG-INFO +336 -0
- devagent_physical_engine-0.11.2/README.md +295 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/pyproject.toml +28 -2
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/__init__.py +1 -1
- devagent_physical_engine-0.11.2/src/devagent_physical_engine/continuous_clearance.py +188 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/preexecution_contract.py +14 -0
- devagent_physical_engine-0.11.2/src/devagent_physical_engine/ros2/continuous_clearance_probe.py +143 -0
- devagent_physical_engine-0.11.2/src/devagent_physical_engine/ros2/preexecution.py +241 -0
- devagent_physical_engine-0.11.2/src/devagent_physical_engine/ros2/qualification_v11.py +256 -0
- devagent_physical_engine-0.11.2/src/devagent_physical_engine/ros2/tool_scene.py +127 -0
- devagent_physical_engine-0.11.2/src/devagent_physical_engine/ros2/tool_scene_probe.py +201 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/ur5e_v10_adapter.py +134 -18
- devagent_physical_engine-0.11.2/src/devagent_physical_engine/ros2/workpiece_scene.py +162 -0
- devagent_physical_engine-0.11.2/src/devagent_physical_engine/ros2/workpiece_scene_probe.py +355 -0
- devagent_physical_engine-0.11.2/src/devagent_physical_engine/sim_real_qualification.py +83 -0
- devagent_physical_engine-0.11.2/src/devagent_physical_engine/tool_collision.py +80 -0
- devagent_physical_engine-0.11.2/src/devagent_physical_engine/workpiece_lifecycle.py +66 -0
- devagent_physical_engine-0.11.2/src/devagent_physical_engine.egg-info/PKG-INFO +336 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine.egg-info/SOURCES.txt +16 -1
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine.egg-info/requires.txt +7 -0
- devagent_physical_engine-0.11.2/tests/test_continuous_clearance_v011.py +85 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_preexecution_contract_v10.py +27 -1
- devagent_physical_engine-0.11.2/tests/test_ros2_production_receipts_v011.py +155 -0
- devagent_physical_engine-0.11.2/tests/test_sim_real_qualification_v011.py +55 -0
- devagent_physical_engine-0.11.2/tests/test_tool_collision_v011.py +48 -0
- devagent_physical_engine-0.11.2/tests/test_workpiece_lifecycle_v011.py +81 -0
- devagent_physical_engine-0.10.0/PKG-INFO +0 -315
- devagent_physical_engine-0.10.0/README.md +0 -280
- devagent_physical_engine-0.10.0/src/devagent_physical_engine/ros2/preexecution.py +0 -113
- devagent_physical_engine-0.10.0/src/devagent_physical_engine.egg-info/PKG-INFO +0 -315
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/NOTICE +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/setup.cfg +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/__init__.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/compiler.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/contracts.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/coordinator.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/critic.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/evidence.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/interpreter.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/planner.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/recovery.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/routing.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/runtime.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/semantic.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/agent/structured.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ai_cli.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/cli.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/doctor.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/engineering_agent.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/engineering_request.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/execution.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/models.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/operating_envelope.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/optimization/__init__.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/optimization/benchmark.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/optimization/candidates.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/optimization/contracts.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/optimization/evaluator.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/optimization/evidence.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/optimization/experience.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/optimization/measured.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/optimization/optimizer.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/optimization/orchestrator.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/physical_campaign.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/physical_evidence.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/physical_motion.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/planning.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/provider_adapters/__init__.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/provider_adapters/anthropic.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/provider_adapters/common.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/provider_adapters/factory.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/provider_adapters/gemini.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/provider_adapters/openai.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/provider_qualification.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/providers.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/qualification.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/qualification_cli.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/qualification_harness.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/robot_platform.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/robots.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/__init__.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/acceptance.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/commands.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/doctor.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/fk_probe.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/frame_alignment.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/gazebo_world.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/joint_state_recorder.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/measured_motion.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/moveit_scene.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/qualification.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/qualification_v10.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/scene_probe.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/state_validity_probe.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/tf_probe.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/trajectory.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/ur5e.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/ros2/ur5e_adapter.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/setup_profile.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/simulation.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/simulation_platform.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/trajectory_qualification.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/twin.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/twin_builder.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/twin_materialization.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine/verification.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine.egg-info/dependency_links.txt +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine.egg-info/entry_points.txt +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/src/devagent_physical_engine.egg-info/top_level.txt +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_agent_core.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_agent_semantic_hardening.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_ai_cli.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_ai_cli_v07.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_core.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_engineering_request_v07.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_interpreter_profiles_v08.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_live_provider_qualification.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_measured_motion_v10.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_natural_language_agent_v07.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_optimization_v05.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_physical_campaign_v09.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_physical_evidence_v09.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_physical_motion_v09.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_provider_and_qualification.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_qualification_cli_lifecycle_v06.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_qualification_harness_v06.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_real_provider_adapters.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_robot_platform_v08.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_ros2_simulation.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_ros_trajectory_v09.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_setup_profile.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_simulation_platform_v08.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_trajectory_qualification_v09.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_twin_materialization_v10.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_twin_v08.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_ur5e_adapter_scopes_v09.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_ur5e_v10_adapter_scopes.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_v052_stabilization.py +0 -0
- {devagent_physical_engine-0.10.0 → devagent_physical_engine-0.11.2}/tests/test_v08_catalog_mapping_regression.py +0 -0
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: devagent-physical-engine
|
|
3
|
+
Version: 0.11.2
|
|
4
|
+
Summary: Verification-first agentic planning runtime for robotic and industrial automation.
|
|
5
|
+
Author: Tom Ha
|
|
6
|
+
License: All Rights Reserved
|
|
7
|
+
Project-URL: Homepage, https://github.com/tomha85/devagent-physical-engine
|
|
8
|
+
Project-URL: Repository, https://github.com/tomha85/devagent-physical-engine
|
|
9
|
+
Project-URL: Issues, https://github.com/tomha85/devagent-physical-engine/issues
|
|
10
|
+
Keywords: robotics,industrial-automation,agentic-ai,ros2,verification
|
|
11
|
+
Classifier: Development Status :: 4 - Beta
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
19
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
20
|
+
Requires-Python: >=3.11
|
|
21
|
+
Description-Content-Type: text/markdown
|
|
22
|
+
License-File: NOTICE
|
|
23
|
+
Requires-Dist: PyYAML<7,>=6.0
|
|
24
|
+
Provides-Extra: openai
|
|
25
|
+
Requires-Dist: openai<4,>=3.0; extra == "openai"
|
|
26
|
+
Provides-Extra: anthropic
|
|
27
|
+
Requires-Dist: anthropic<2,>=1.0; extra == "anthropic"
|
|
28
|
+
Provides-Extra: gemini
|
|
29
|
+
Requires-Dist: google-genai<3,>=2.0; extra == "gemini"
|
|
30
|
+
Provides-Extra: ai
|
|
31
|
+
Requires-Dist: openai<4,>=3.0; extra == "ai"
|
|
32
|
+
Requires-Dist: anthropic<2,>=1.0; extra == "ai"
|
|
33
|
+
Requires-Dist: google-genai<3,>=2.0; extra == "ai"
|
|
34
|
+
Provides-Extra: dev
|
|
35
|
+
Requires-Dist: build==1.6.0; extra == "dev"
|
|
36
|
+
Requires-Dist: twine==7.0.0; extra == "dev"
|
|
37
|
+
Requires-Dist: coverage[toml]<8,>=7.6; extra == "dev"
|
|
38
|
+
Requires-Dist: ruff<1,>=0.12; extra == "dev"
|
|
39
|
+
Requires-Dist: pip-audit<3,>=2.9; extra == "dev"
|
|
40
|
+
Dynamic: license-file
|
|
41
|
+
|
|
42
|
+
# DevAgent Smart Physical Engine
|
|
43
|
+
|
|
44
|
+
**Verification-first agentic engineering, planning, optimization, simulation, and evidence runtime for robotic and industrial automation.**
|
|
45
|
+
|
|
46
|
+
> **AI proposes. Deterministic engines validate, compile, verify, simulate, measure, and gate promotion. Existing certified controllers remain authoritative.**
|
|
47
|
+
|
|
48
|
+
DevAgent Smart Physical Engine adds AI-assisted engineering to existing automation without replacing robot controllers, PLCs, safety controllers, or real-time servo loops. The core is provider-neutral and keeps engineering authority separated from model output.
|
|
49
|
+
|
|
50
|
+
## Current version
|
|
51
|
+
|
|
52
|
+
**v0.11.2 — Beta software / evidence-gated physical runtime**
|
|
53
|
+
|
|
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
|
+
|
|
56
|
+
Real robot execution remains locked. Functional-safety certification and site qualification are not claimed.
|
|
57
|
+
|
|
58
|
+
## v0.11 capability status
|
|
59
|
+
|
|
60
|
+
| Area | Status |
|
|
61
|
+
| --- | --- |
|
|
62
|
+
| Provider-neutral Agent Core | Implemented |
|
|
63
|
+
| OpenAI / Anthropic / Gemini structured adapters | Implemented |
|
|
64
|
+
| Planner / Critic / Recovery | Implemented |
|
|
65
|
+
| Natural-language engineering request front door | Implemented |
|
|
66
|
+
| Deterministic compiler / semantic / verification gates | Implemented |
|
|
67
|
+
| Multi-vendor robot profile registry | Implemented |
|
|
68
|
+
| UR5e / FANUC CRX / KUKA KR / ABB IRB abstraction | Implemented; physical qualification is vendor-specific |
|
|
69
|
+
| Evidence-aware canonical TwinSpec | Implemented |
|
|
70
|
+
| Canonical Twin → Gazebo + MoveIt materialization | Implemented |
|
|
71
|
+
| Gazebo / TF / MoveIt world read-back | Implemented |
|
|
72
|
+
| Runtime-owned tool collision binding + read-back | Implemented; target qualification required |
|
|
73
|
+
| Runtime-owned workpiece attach/detach + read-back | Implemented; target qualification required |
|
|
74
|
+
| Discrete MoveIt state-validity precheck | Implemented; simulation/debug only |
|
|
75
|
+
| Measured MoveIt collision distance | Implemented in production-candidate verifier |
|
|
76
|
+
| Adaptive conservative continuous-path proof | Implemented; qualified bound required |
|
|
77
|
+
| Measured minimum clearance + safety margin | Implemented; target qualification required |
|
|
78
|
+
| Measured joint-state trajectory runtime | Implemented |
|
|
79
|
+
| MoveIt FK TCP path / final TCP error | Implemented |
|
|
80
|
+
| Quantitative sim↔real qualification gate | Implemented; measured hardware dataset required |
|
|
81
|
+
| Python package/release supply chain | Hardened CI + exact-green-main release + direct `release.yml` PyPI OIDC deployment |
|
|
82
|
+
| UR5e production-candidate simulation evidence | **Requires executable v0.11 target campaign** |
|
|
83
|
+
| Physical commissioning | **Not qualified by source/CI alone** |
|
|
84
|
+
| Site qualification | **Not qualified** |
|
|
85
|
+
| Real robot execution | **Locked** |
|
|
86
|
+
| Functional-safety certification | Not claimed |
|
|
87
|
+
|
|
88
|
+
## Trust chain
|
|
89
|
+
|
|
90
|
+
```mermaid
|
|
91
|
+
flowchart TD
|
|
92
|
+
USER[Engineer / customer application] --> REQUEST[Natural-language engineering request]
|
|
93
|
+
REQUEST --> AI[Provider-neutral AI / Planner / Critic / Recovery]
|
|
94
|
+
AI --> COMPILE[Deterministic compile + semantic policy]
|
|
95
|
+
COMPILE --> VERIFY[Verified plan artifact]
|
|
96
|
+
VERIFY --> TWIN[Canonical TwinSpec + SHA256]
|
|
97
|
+
TWIN --> MATERIALIZE[Canonical materialization]
|
|
98
|
+
MATERIALIZE --> GZ[Gazebo world]
|
|
99
|
+
MATERIALIZE --> MOVEIT[MoveIt PlanningScene]
|
|
100
|
+
MATERIALIZE --> TF[TF frames]
|
|
101
|
+
GZ --> READBACK[Backend read-back]
|
|
102
|
+
MOVEIT --> READBACK
|
|
103
|
+
TF --> READBACK
|
|
104
|
+
READBACK --> TOOL[Verified tool collision receipt]
|
|
105
|
+
TOOL --> WORKPIECE[Verified workpiece lifecycle receipt]
|
|
106
|
+
WORKPIECE --> MOTION[Exact PhysicalMotionPlan / Twin binding]
|
|
107
|
+
MOTION --> CLEAR[Measured clearance + continuous proof]
|
|
108
|
+
CLEAR --> SIM[ROS 2 / Gazebo execution]
|
|
109
|
+
SIM --> MEASURE[Measured joint states + MoveIt FK]
|
|
110
|
+
MEASURE --> EVIDENCE[Replayable evidence]
|
|
111
|
+
EVIDENCE --> PROMOTION[Scope-specific promotion gate]
|
|
112
|
+
PROMOTION --> LOCKED[Real execution remains separately locked]
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
The model never owns collision policy, minimum-clearance truth, dynamic scene state, qualification promotion, or real-hardware authorization.
|
|
116
|
+
|
|
117
|
+
## Continuous collision and clearance semantics
|
|
118
|
+
|
|
119
|
+
The legacy/discrete verifier remains available for development and simulation but can never produce commissioning-usable evidence.
|
|
120
|
+
|
|
121
|
+
The v0.11 production-candidate verifier synchronizes the authoritative MoveIt PlanningScene, measures minimum collision distance, and adaptively proves every joint interval using a conservative collision-distance Lipschitz bound. If the proof cannot be established within configured sample/depth limits, it fails closed. There is no automatic downgrade to a sampled “pass.”
|
|
122
|
+
|
|
123
|
+
A commissioning-usable pre-execution receipt requires all of:
|
|
124
|
+
|
|
125
|
+
```text
|
|
126
|
+
verified=true
|
|
127
|
+
continuous_collision_check=true
|
|
128
|
+
clearance_measured=true
|
|
129
|
+
minimum_clearance_m > 0
|
|
130
|
+
materialization_hash=<exact Twin materialization>
|
|
131
|
+
failure_codes=[]
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
The distance Lipschitz bound is itself qualification evidence and must be conservative for the exact robot/tool/collision model.
|
|
135
|
+
|
|
136
|
+
## Tool and workpiece authority
|
|
137
|
+
|
|
138
|
+
Customer motion metadata can no longer claim that a tool collision model or workpiece attachment is verified.
|
|
139
|
+
|
|
140
|
+
`ToolCollisionBinding` is runtime configuration. The tool is applied as a MoveIt attached collision object and verified by geometry/link read-back before a receipt is accepted.
|
|
141
|
+
|
|
142
|
+
Workpiece state uses verified transitions:
|
|
143
|
+
|
|
144
|
+
```text
|
|
145
|
+
WORLD → ATTACHED → WORLD
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
Attach/detach applies the PlanningScene change and verifies the resulting world/attached state. Missing or inconsistent read-back blocks the motion.
|
|
149
|
+
|
|
150
|
+
## Installation
|
|
151
|
+
|
|
152
|
+
Python 3.11+ is required.
|
|
153
|
+
|
|
154
|
+
From PyPI after the corresponding release is published:
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
python -m pip install devagent-physical-engine
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
From source:
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
git clone https://github.com/tomha85/devagent-physical-engine.git
|
|
164
|
+
cd devagent-physical-engine
|
|
165
|
+
python -m venv .venv
|
|
166
|
+
source .venv/bin/activate
|
|
167
|
+
python -m pip install --upgrade pip
|
|
168
|
+
python -m pip install -e .
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
Optional provider SDKs:
|
|
172
|
+
|
|
173
|
+
```bash
|
|
174
|
+
python -m pip install -e ".[openai]"
|
|
175
|
+
python -m pip install -e ".[anthropic]"
|
|
176
|
+
python -m pip install -e ".[gemini]"
|
|
177
|
+
python -m pip install -e ".[ai]"
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Development/qualification tooling:
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
python -m pip install -e ".[dev]"
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
`pip install` does not install ROS/Gazebo system packages or perform privileged OS changes.
|
|
187
|
+
|
|
188
|
+
## AI providers
|
|
189
|
+
|
|
190
|
+
Keep credentials outside WorldState/Twin data:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
export OPENAI_API_KEY='...'
|
|
194
|
+
export ANTHROPIC_API_KEY='...'
|
|
195
|
+
export GEMINI_API_KEY='...'
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Examples:
|
|
199
|
+
|
|
200
|
+
```bash
|
|
201
|
+
devagent-physical-ai doctor --provider openai
|
|
202
|
+
devagent-physical-ai qualify --provider openai --model <model-id>
|
|
203
|
+
devagent-physical-ai request \
|
|
204
|
+
"Use a UR5e to move a part from conveyor_a to cnc_04" \
|
|
205
|
+
--provider openai --model <model-id>
|
|
206
|
+
devagent-physical-ai engineer \
|
|
207
|
+
"Use a UR5e to move a part from conveyor_a to cnc_04" \
|
|
208
|
+
--provider openai --model <model-id>
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
Equivalent routing supports Anthropic and Gemini. Live AI qualification does not unlock real robot execution.
|
|
212
|
+
|
|
213
|
+
## Software production gates
|
|
214
|
+
|
|
215
|
+
Repository CI now requires:
|
|
216
|
+
|
|
217
|
+
```text
|
|
218
|
+
Python 3.11 regression
|
|
219
|
+
Python 3.12 regression
|
|
220
|
+
Python 3.13 regression
|
|
221
|
+
compileall
|
|
222
|
+
Ruff correctness checks
|
|
223
|
+
branch coverage threshold
|
|
224
|
+
wheel + sdist build
|
|
225
|
+
twine --strict
|
|
226
|
+
clean wheel installation/version smoke
|
|
227
|
+
runtime dependency vulnerability audit
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
Critical checkout/setup/artifact GitHub Actions are pinned to exact commits.
|
|
231
|
+
|
|
232
|
+
A successful `main` CI run drives `release-on-ci.yml`, which validates the package version and creates a normal GitHub Release at the **exact CI-tested SHA**. It then dispatches `release.yml` with `workflow_dispatch` at the exact release tag. Running Trusted Publishing in the directly dispatched `release.yml` is intentional: PyPI binds the OIDC publisher identity to that workflow filename and does not currently support reusable workflows for Trusted Publishing. `release.yml` rebuilds and re-verifies the exact tag, attaches wheel/sdist/SBOM/checksum evidence to the GitHub Release, and publishes through the GitHub `pypi` environment using OIDC.
|
|
233
|
+
|
|
234
|
+
## UR5e ROS 2 / Gazebo target
|
|
235
|
+
|
|
236
|
+
Reference target:
|
|
237
|
+
|
|
238
|
+
```text
|
|
239
|
+
Ubuntu 24.04
|
|
240
|
+
ROS 2 Jazzy
|
|
241
|
+
Gazebo Harmonic
|
|
242
|
+
gz_ros2_control
|
|
243
|
+
Universal Robots ROS 2 driver
|
|
244
|
+
ur_simulation_gz
|
|
245
|
+
MoveIt 2
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
Setup/diagnostics:
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
devagent-physical setup --profile ur5e-sim --dry-run
|
|
252
|
+
devagent-physical setup --profile ur5e-sim
|
|
253
|
+
devagent-physical ros doctor
|
|
254
|
+
devagent-physical ros demo
|
|
255
|
+
devagent-physical ros qualify-trajectory-runtime
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
## v0.11 production-candidate executable qualification
|
|
259
|
+
|
|
260
|
+
The stronger campaign is deliberately separate from ordinary hosted GitHub CI because it requires the exact ROS/Gazebo/MoveIt target stack and qualified robot/tool collision-distance bound:
|
|
261
|
+
|
|
262
|
+
```bash
|
|
263
|
+
python -m devagent_physical_engine.ros2.qualification_v11 \
|
|
264
|
+
--moveit-params-file /path/to/ur5e_moveit_params.yaml \
|
|
265
|
+
--distance-lipschitz <qualified-m-per-radian-bound> \
|
|
266
|
+
--safety-margin 0.005 \
|
|
267
|
+
--log-dir ~/.devagent/v11-production-candidate-qualification
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
A green campaign requires canonical world read-back, verified tool attachment, verified workpiece attach+detach, synchronized MoveIt scene, conservative continuous collision/clearance proof, minimum clearance above margin, measured joint-state execution, and MoveIt FK evidence.
|
|
271
|
+
|
|
272
|
+
It may report:
|
|
273
|
+
|
|
274
|
+
```text
|
|
275
|
+
promotion_candidate=true
|
|
276
|
+
simulation_commissioning_evidence_qualified=true
|
|
277
|
+
continuous_collision_check=true
|
|
278
|
+
minimum_clearance_measured=true
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
but still intentionally reports:
|
|
282
|
+
|
|
283
|
+
```text
|
|
284
|
+
physical_qualification=false
|
|
285
|
+
commissioning_qualification=false
|
|
286
|
+
real_execution_allowed=false
|
|
287
|
+
site_qualification=false
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
Physical/site promotion requires measured hardware/shadow evidence.
|
|
291
|
+
|
|
292
|
+
## Sim↔real qualification
|
|
293
|
+
|
|
294
|
+
The source now includes an explicit quantitative correlation gate. Default minimum criteria are:
|
|
295
|
+
|
|
296
|
+
```text
|
|
297
|
+
observations >= 30
|
|
298
|
+
cycle-time gap p95 <= 10%
|
|
299
|
+
TCP error p95 <= 10 mm
|
|
300
|
+
behavior agreement >= 0.99
|
|
301
|
+
measured origin + dataset reference required
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
Missing evidence never qualifies. Customers may set stricter thresholds.
|
|
305
|
+
|
|
306
|
+
## Optimization semantics
|
|
307
|
+
|
|
308
|
+
DevAgent does **not** claim a mathematical global optimum. It selects the best evaluated verified candidate among candidates actually generated, verified, and measured under the configured objective. A hard violation, failed verification/simulation, unknown required metric, or failed quality gate makes the candidate ineligible regardless of weighted score.
|
|
309
|
+
|
|
310
|
+
## Documentation
|
|
311
|
+
|
|
312
|
+
- [`docs/PRODUCTION_READINESS.md`](docs/PRODUCTION_READINESS.md) — v0.11 readiness scopes and qualification boundaries.
|
|
313
|
+
- [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) — current trust boundaries and runtime architecture.
|
|
314
|
+
- [`docs/AGENT_CORE.md`](docs/AGENT_CORE.md) — Agent Core authority model.
|
|
315
|
+
- [`docs/AI_PROVIDERS.md`](docs/AI_PROVIDERS.md) — provider installation, credentials, and qualification.
|
|
316
|
+
- [`docs/NATURAL_LANGUAGE_ENGINEERING.md`](docs/NATURAL_LANGUAGE_ENGINEERING.md) — natural-language engineering request flow.
|
|
317
|
+
- [`docs/ROBOT_PLATFORM_AND_TWIN.md`](docs/ROBOT_PLATFORM_AND_TWIN.md) — robot abstraction and evidence-aware Twin.
|
|
318
|
+
- [`docs/MEASURED_PHYSICAL_RUNTIME.md`](docs/MEASURED_PHYSICAL_RUNTIME.md) — motion and measured runtime.
|
|
319
|
+
- [`docs/CANONICAL_TWIN_RUNTIME.md`](docs/CANONICAL_TWIN_RUNTIME.md) — canonical scene, continuous clearance, and dynamic scene lifecycle.
|
|
320
|
+
- [`docs/QUALIFICATION.md`](docs/QUALIFICATION.md) — qualification/evidence model.
|
|
321
|
+
- [`docs/OPTIMIZATION.md`](docs/OPTIMIZATION.md) — search, metrics, Pareto ranking, and evidence.
|
|
322
|
+
- [`docs/SETUP.md`](docs/SETUP.md) — explicit workstation bootstrap.
|
|
323
|
+
- [`docs/LAPTOP_ACCEPTANCE.md`](docs/LAPTOP_ACCEPTANCE.md) — UR5e workstation acceptance.
|
|
324
|
+
- [`docs/PYPI_RELEASE.md`](docs/PYPI_RELEASE.md) — Trusted Publishing release pipeline.
|
|
325
|
+
|
|
326
|
+
## Release policy
|
|
327
|
+
|
|
328
|
+
v0.11 is a **Beta software release**, not a declaration that every robot/site is physically commissioned. Capability promotion remains evidence-driven and scope-specific. Simulation evidence cannot silently become hardware/site qualification.
|
|
329
|
+
|
|
330
|
+
## Ownership
|
|
331
|
+
|
|
332
|
+
DevAgent Smart Physical Engine
|
|
333
|
+
Copyright © 2026 Tom Ha
|
|
334
|
+
Original creator: Tom Ha
|
|
335
|
+
Original project: https://github.com/tomha85/devagent-physical-engine
|
|
336
|
+
All rights reserved.
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
# DevAgent Smart Physical Engine
|
|
2
|
+
|
|
3
|
+
**Verification-first agentic engineering, planning, optimization, simulation, and evidence runtime for robotic and industrial automation.**
|
|
4
|
+
|
|
5
|
+
> **AI proposes. Deterministic engines validate, compile, verify, simulate, measure, and gate promotion. Existing certified controllers remain authoritative.**
|
|
6
|
+
|
|
7
|
+
DevAgent Smart Physical Engine adds AI-assisted engineering to existing automation without replacing robot controllers, PLCs, safety controllers, or real-time servo loops. The core is provider-neutral and keeps engineering authority separated from model output.
|
|
8
|
+
|
|
9
|
+
## Current version
|
|
10
|
+
|
|
11
|
+
**v0.11.2 — Beta software / evidence-gated physical runtime**
|
|
12
|
+
|
|
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
|
+
|
|
15
|
+
Real robot execution remains locked. Functional-safety certification and site qualification are not claimed.
|
|
16
|
+
|
|
17
|
+
## v0.11 capability status
|
|
18
|
+
|
|
19
|
+
| Area | Status |
|
|
20
|
+
| --- | --- |
|
|
21
|
+
| Provider-neutral Agent Core | Implemented |
|
|
22
|
+
| OpenAI / Anthropic / Gemini structured adapters | Implemented |
|
|
23
|
+
| Planner / Critic / Recovery | Implemented |
|
|
24
|
+
| Natural-language engineering request front door | Implemented |
|
|
25
|
+
| Deterministic compiler / semantic / verification gates | Implemented |
|
|
26
|
+
| Multi-vendor robot profile registry | Implemented |
|
|
27
|
+
| UR5e / FANUC CRX / KUKA KR / ABB IRB abstraction | Implemented; physical qualification is vendor-specific |
|
|
28
|
+
| Evidence-aware canonical TwinSpec | Implemented |
|
|
29
|
+
| Canonical Twin → Gazebo + MoveIt materialization | Implemented |
|
|
30
|
+
| Gazebo / TF / MoveIt world read-back | Implemented |
|
|
31
|
+
| Runtime-owned tool collision binding + read-back | Implemented; target qualification required |
|
|
32
|
+
| Runtime-owned workpiece attach/detach + read-back | Implemented; target qualification required |
|
|
33
|
+
| Discrete MoveIt state-validity precheck | Implemented; simulation/debug only |
|
|
34
|
+
| Measured MoveIt collision distance | Implemented in production-candidate verifier |
|
|
35
|
+
| Adaptive conservative continuous-path proof | Implemented; qualified bound required |
|
|
36
|
+
| Measured minimum clearance + safety margin | Implemented; target qualification required |
|
|
37
|
+
| Measured joint-state trajectory runtime | Implemented |
|
|
38
|
+
| MoveIt FK TCP path / final TCP error | Implemented |
|
|
39
|
+
| Quantitative sim↔real qualification gate | Implemented; measured hardware dataset required |
|
|
40
|
+
| Python package/release supply chain | Hardened CI + exact-green-main release + direct `release.yml` PyPI OIDC deployment |
|
|
41
|
+
| UR5e production-candidate simulation evidence | **Requires executable v0.11 target campaign** |
|
|
42
|
+
| Physical commissioning | **Not qualified by source/CI alone** |
|
|
43
|
+
| Site qualification | **Not qualified** |
|
|
44
|
+
| Real robot execution | **Locked** |
|
|
45
|
+
| Functional-safety certification | Not claimed |
|
|
46
|
+
|
|
47
|
+
## Trust chain
|
|
48
|
+
|
|
49
|
+
```mermaid
|
|
50
|
+
flowchart TD
|
|
51
|
+
USER[Engineer / customer application] --> REQUEST[Natural-language engineering request]
|
|
52
|
+
REQUEST --> AI[Provider-neutral AI / Planner / Critic / Recovery]
|
|
53
|
+
AI --> COMPILE[Deterministic compile + semantic policy]
|
|
54
|
+
COMPILE --> VERIFY[Verified plan artifact]
|
|
55
|
+
VERIFY --> TWIN[Canonical TwinSpec + SHA256]
|
|
56
|
+
TWIN --> MATERIALIZE[Canonical materialization]
|
|
57
|
+
MATERIALIZE --> GZ[Gazebo world]
|
|
58
|
+
MATERIALIZE --> MOVEIT[MoveIt PlanningScene]
|
|
59
|
+
MATERIALIZE --> TF[TF frames]
|
|
60
|
+
GZ --> READBACK[Backend read-back]
|
|
61
|
+
MOVEIT --> READBACK
|
|
62
|
+
TF --> READBACK
|
|
63
|
+
READBACK --> TOOL[Verified tool collision receipt]
|
|
64
|
+
TOOL --> WORKPIECE[Verified workpiece lifecycle receipt]
|
|
65
|
+
WORKPIECE --> MOTION[Exact PhysicalMotionPlan / Twin binding]
|
|
66
|
+
MOTION --> CLEAR[Measured clearance + continuous proof]
|
|
67
|
+
CLEAR --> SIM[ROS 2 / Gazebo execution]
|
|
68
|
+
SIM --> MEASURE[Measured joint states + MoveIt FK]
|
|
69
|
+
MEASURE --> EVIDENCE[Replayable evidence]
|
|
70
|
+
EVIDENCE --> PROMOTION[Scope-specific promotion gate]
|
|
71
|
+
PROMOTION --> LOCKED[Real execution remains separately locked]
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
The model never owns collision policy, minimum-clearance truth, dynamic scene state, qualification promotion, or real-hardware authorization.
|
|
75
|
+
|
|
76
|
+
## Continuous collision and clearance semantics
|
|
77
|
+
|
|
78
|
+
The legacy/discrete verifier remains available for development and simulation but can never produce commissioning-usable evidence.
|
|
79
|
+
|
|
80
|
+
The v0.11 production-candidate verifier synchronizes the authoritative MoveIt PlanningScene, measures minimum collision distance, and adaptively proves every joint interval using a conservative collision-distance Lipschitz bound. If the proof cannot be established within configured sample/depth limits, it fails closed. There is no automatic downgrade to a sampled “pass.”
|
|
81
|
+
|
|
82
|
+
A commissioning-usable pre-execution receipt requires all of:
|
|
83
|
+
|
|
84
|
+
```text
|
|
85
|
+
verified=true
|
|
86
|
+
continuous_collision_check=true
|
|
87
|
+
clearance_measured=true
|
|
88
|
+
minimum_clearance_m > 0
|
|
89
|
+
materialization_hash=<exact Twin materialization>
|
|
90
|
+
failure_codes=[]
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
The distance Lipschitz bound is itself qualification evidence and must be conservative for the exact robot/tool/collision model.
|
|
94
|
+
|
|
95
|
+
## Tool and workpiece authority
|
|
96
|
+
|
|
97
|
+
Customer motion metadata can no longer claim that a tool collision model or workpiece attachment is verified.
|
|
98
|
+
|
|
99
|
+
`ToolCollisionBinding` is runtime configuration. The tool is applied as a MoveIt attached collision object and verified by geometry/link read-back before a receipt is accepted.
|
|
100
|
+
|
|
101
|
+
Workpiece state uses verified transitions:
|
|
102
|
+
|
|
103
|
+
```text
|
|
104
|
+
WORLD → ATTACHED → WORLD
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
Attach/detach applies the PlanningScene change and verifies the resulting world/attached state. Missing or inconsistent read-back blocks the motion.
|
|
108
|
+
|
|
109
|
+
## Installation
|
|
110
|
+
|
|
111
|
+
Python 3.11+ is required.
|
|
112
|
+
|
|
113
|
+
From PyPI after the corresponding release is published:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
python -m pip install devagent-physical-engine
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
From source:
|
|
120
|
+
|
|
121
|
+
```bash
|
|
122
|
+
git clone https://github.com/tomha85/devagent-physical-engine.git
|
|
123
|
+
cd devagent-physical-engine
|
|
124
|
+
python -m venv .venv
|
|
125
|
+
source .venv/bin/activate
|
|
126
|
+
python -m pip install --upgrade pip
|
|
127
|
+
python -m pip install -e .
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Optional provider SDKs:
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
python -m pip install -e ".[openai]"
|
|
134
|
+
python -m pip install -e ".[anthropic]"
|
|
135
|
+
python -m pip install -e ".[gemini]"
|
|
136
|
+
python -m pip install -e ".[ai]"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Development/qualification tooling:
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
python -m pip install -e ".[dev]"
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
`pip install` does not install ROS/Gazebo system packages or perform privileged OS changes.
|
|
146
|
+
|
|
147
|
+
## AI providers
|
|
148
|
+
|
|
149
|
+
Keep credentials outside WorldState/Twin data:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
export OPENAI_API_KEY='...'
|
|
153
|
+
export ANTHROPIC_API_KEY='...'
|
|
154
|
+
export GEMINI_API_KEY='...'
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
Examples:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
devagent-physical-ai doctor --provider openai
|
|
161
|
+
devagent-physical-ai qualify --provider openai --model <model-id>
|
|
162
|
+
devagent-physical-ai request \
|
|
163
|
+
"Use a UR5e to move a part from conveyor_a to cnc_04" \
|
|
164
|
+
--provider openai --model <model-id>
|
|
165
|
+
devagent-physical-ai engineer \
|
|
166
|
+
"Use a UR5e to move a part from conveyor_a to cnc_04" \
|
|
167
|
+
--provider openai --model <model-id>
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Equivalent routing supports Anthropic and Gemini. Live AI qualification does not unlock real robot execution.
|
|
171
|
+
|
|
172
|
+
## Software production gates
|
|
173
|
+
|
|
174
|
+
Repository CI now requires:
|
|
175
|
+
|
|
176
|
+
```text
|
|
177
|
+
Python 3.11 regression
|
|
178
|
+
Python 3.12 regression
|
|
179
|
+
Python 3.13 regression
|
|
180
|
+
compileall
|
|
181
|
+
Ruff correctness checks
|
|
182
|
+
branch coverage threshold
|
|
183
|
+
wheel + sdist build
|
|
184
|
+
twine --strict
|
|
185
|
+
clean wheel installation/version smoke
|
|
186
|
+
runtime dependency vulnerability audit
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
Critical checkout/setup/artifact GitHub Actions are pinned to exact commits.
|
|
190
|
+
|
|
191
|
+
A successful `main` CI run drives `release-on-ci.yml`, which validates the package version and creates a normal GitHub Release at the **exact CI-tested SHA**. It then dispatches `release.yml` with `workflow_dispatch` at the exact release tag. Running Trusted Publishing in the directly dispatched `release.yml` is intentional: PyPI binds the OIDC publisher identity to that workflow filename and does not currently support reusable workflows for Trusted Publishing. `release.yml` rebuilds and re-verifies the exact tag, attaches wheel/sdist/SBOM/checksum evidence to the GitHub Release, and publishes through the GitHub `pypi` environment using OIDC.
|
|
192
|
+
|
|
193
|
+
## UR5e ROS 2 / Gazebo target
|
|
194
|
+
|
|
195
|
+
Reference target:
|
|
196
|
+
|
|
197
|
+
```text
|
|
198
|
+
Ubuntu 24.04
|
|
199
|
+
ROS 2 Jazzy
|
|
200
|
+
Gazebo Harmonic
|
|
201
|
+
gz_ros2_control
|
|
202
|
+
Universal Robots ROS 2 driver
|
|
203
|
+
ur_simulation_gz
|
|
204
|
+
MoveIt 2
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
Setup/diagnostics:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
devagent-physical setup --profile ur5e-sim --dry-run
|
|
211
|
+
devagent-physical setup --profile ur5e-sim
|
|
212
|
+
devagent-physical ros doctor
|
|
213
|
+
devagent-physical ros demo
|
|
214
|
+
devagent-physical ros qualify-trajectory-runtime
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## v0.11 production-candidate executable qualification
|
|
218
|
+
|
|
219
|
+
The stronger campaign is deliberately separate from ordinary hosted GitHub CI because it requires the exact ROS/Gazebo/MoveIt target stack and qualified robot/tool collision-distance bound:
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
python -m devagent_physical_engine.ros2.qualification_v11 \
|
|
223
|
+
--moveit-params-file /path/to/ur5e_moveit_params.yaml \
|
|
224
|
+
--distance-lipschitz <qualified-m-per-radian-bound> \
|
|
225
|
+
--safety-margin 0.005 \
|
|
226
|
+
--log-dir ~/.devagent/v11-production-candidate-qualification
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
A green campaign requires canonical world read-back, verified tool attachment, verified workpiece attach+detach, synchronized MoveIt scene, conservative continuous collision/clearance proof, minimum clearance above margin, measured joint-state execution, and MoveIt FK evidence.
|
|
230
|
+
|
|
231
|
+
It may report:
|
|
232
|
+
|
|
233
|
+
```text
|
|
234
|
+
promotion_candidate=true
|
|
235
|
+
simulation_commissioning_evidence_qualified=true
|
|
236
|
+
continuous_collision_check=true
|
|
237
|
+
minimum_clearance_measured=true
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
but still intentionally reports:
|
|
241
|
+
|
|
242
|
+
```text
|
|
243
|
+
physical_qualification=false
|
|
244
|
+
commissioning_qualification=false
|
|
245
|
+
real_execution_allowed=false
|
|
246
|
+
site_qualification=false
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
Physical/site promotion requires measured hardware/shadow evidence.
|
|
250
|
+
|
|
251
|
+
## Sim↔real qualification
|
|
252
|
+
|
|
253
|
+
The source now includes an explicit quantitative correlation gate. Default minimum criteria are:
|
|
254
|
+
|
|
255
|
+
```text
|
|
256
|
+
observations >= 30
|
|
257
|
+
cycle-time gap p95 <= 10%
|
|
258
|
+
TCP error p95 <= 10 mm
|
|
259
|
+
behavior agreement >= 0.99
|
|
260
|
+
measured origin + dataset reference required
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
Missing evidence never qualifies. Customers may set stricter thresholds.
|
|
264
|
+
|
|
265
|
+
## Optimization semantics
|
|
266
|
+
|
|
267
|
+
DevAgent does **not** claim a mathematical global optimum. It selects the best evaluated verified candidate among candidates actually generated, verified, and measured under the configured objective. A hard violation, failed verification/simulation, unknown required metric, or failed quality gate makes the candidate ineligible regardless of weighted score.
|
|
268
|
+
|
|
269
|
+
## Documentation
|
|
270
|
+
|
|
271
|
+
- [`docs/PRODUCTION_READINESS.md`](docs/PRODUCTION_READINESS.md) — v0.11 readiness scopes and qualification boundaries.
|
|
272
|
+
- [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md) — current trust boundaries and runtime architecture.
|
|
273
|
+
- [`docs/AGENT_CORE.md`](docs/AGENT_CORE.md) — Agent Core authority model.
|
|
274
|
+
- [`docs/AI_PROVIDERS.md`](docs/AI_PROVIDERS.md) — provider installation, credentials, and qualification.
|
|
275
|
+
- [`docs/NATURAL_LANGUAGE_ENGINEERING.md`](docs/NATURAL_LANGUAGE_ENGINEERING.md) — natural-language engineering request flow.
|
|
276
|
+
- [`docs/ROBOT_PLATFORM_AND_TWIN.md`](docs/ROBOT_PLATFORM_AND_TWIN.md) — robot abstraction and evidence-aware Twin.
|
|
277
|
+
- [`docs/MEASURED_PHYSICAL_RUNTIME.md`](docs/MEASURED_PHYSICAL_RUNTIME.md) — motion and measured runtime.
|
|
278
|
+
- [`docs/CANONICAL_TWIN_RUNTIME.md`](docs/CANONICAL_TWIN_RUNTIME.md) — canonical scene, continuous clearance, and dynamic scene lifecycle.
|
|
279
|
+
- [`docs/QUALIFICATION.md`](docs/QUALIFICATION.md) — qualification/evidence model.
|
|
280
|
+
- [`docs/OPTIMIZATION.md`](docs/OPTIMIZATION.md) — search, metrics, Pareto ranking, and evidence.
|
|
281
|
+
- [`docs/SETUP.md`](docs/SETUP.md) — explicit workstation bootstrap.
|
|
282
|
+
- [`docs/LAPTOP_ACCEPTANCE.md`](docs/LAPTOP_ACCEPTANCE.md) — UR5e workstation acceptance.
|
|
283
|
+
- [`docs/PYPI_RELEASE.md`](docs/PYPI_RELEASE.md) — Trusted Publishing release pipeline.
|
|
284
|
+
|
|
285
|
+
## Release policy
|
|
286
|
+
|
|
287
|
+
v0.11 is a **Beta software release**, not a declaration that every robot/site is physically commissioned. Capability promotion remains evidence-driven and scope-specific. Simulation evidence cannot silently become hardware/site qualification.
|
|
288
|
+
|
|
289
|
+
## Ownership
|
|
290
|
+
|
|
291
|
+
DevAgent Smart Physical Engine
|
|
292
|
+
Copyright © 2026 Tom Ha
|
|
293
|
+
Original creator: Tom Ha
|
|
294
|
+
Original project: https://github.com/tomha85/devagent-physical-engine
|
|
295
|
+
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.
|
|
7
|
+
version = "0.11.2"
|
|
8
8
|
description = "Verification-first agentic planning runtime for robotic and industrial automation."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -13,7 +13,7 @@ authors = [{ name = "Tom Ha" }]
|
|
|
13
13
|
license = { text = "All Rights Reserved" }
|
|
14
14
|
keywords = ["robotics", "industrial-automation", "agentic-ai", "ros2", "verification"]
|
|
15
15
|
classifiers = [
|
|
16
|
-
"Development Status ::
|
|
16
|
+
"Development Status :: 4 - Beta",
|
|
17
17
|
"Intended Audience :: Developers",
|
|
18
18
|
"Operating System :: OS Independent",
|
|
19
19
|
"Programming Language :: Python :: 3",
|
|
@@ -33,6 +33,13 @@ ai = [
|
|
|
33
33
|
"anthropic>=1.0,<2",
|
|
34
34
|
"google-genai>=2.0,<3",
|
|
35
35
|
]
|
|
36
|
+
dev = [
|
|
37
|
+
"build==1.6.0",
|
|
38
|
+
"twine==7.0.0",
|
|
39
|
+
"coverage[toml]>=7.6,<8",
|
|
40
|
+
"ruff>=0.12,<1",
|
|
41
|
+
"pip-audit>=2.9,<3",
|
|
42
|
+
]
|
|
36
43
|
|
|
37
44
|
[project.urls]
|
|
38
45
|
Homepage = "https://github.com/tomha85/devagent-physical-engine"
|
|
@@ -45,3 +52,22 @@ devagent-physical-ai = "devagent_physical_engine.ai_cli:main"
|
|
|
45
52
|
|
|
46
53
|
[tool.setuptools.packages.find]
|
|
47
54
|
where = ["src"]
|
|
55
|
+
|
|
56
|
+
[tool.coverage.run]
|
|
57
|
+
branch = true
|
|
58
|
+
source = ["devagent_physical_engine"]
|
|
59
|
+
omit = [
|
|
60
|
+
# ROS probe scripts and target-stack orchestration require a real ROS/Jazzy/
|
|
61
|
+
# Gazebo/MoveIt environment. They are qualified by qualification_v11 rather than
|
|
62
|
+
# pretending hosted unit execution covers them.
|
|
63
|
+
"src/devagent_physical_engine/ros2/*_probe.py",
|
|
64
|
+
"src/devagent_physical_engine/ros2/qualification*.py",
|
|
65
|
+
"src/devagent_physical_engine/ros2/joint_state_recorder.py",
|
|
66
|
+
"src/devagent_physical_engine/ros2/ur5e_adapter.py",
|
|
67
|
+
"src/devagent_physical_engine/ros2/ur5e_v10_adapter.py",
|
|
68
|
+
]
|
|
69
|
+
|
|
70
|
+
[tool.coverage.report]
|
|
71
|
+
fail_under = 75
|
|
72
|
+
show_missing = true
|
|
73
|
+
skip_covered = false
|