devagent-ai 0.8.7__tar.gz → 0.8.12__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (421) hide show
  1. {devagent_ai-0.8.7/devagent_ai.egg-info → devagent_ai-0.8.12}/PKG-INFO +552 -18
  2. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/README.md +549 -18
  3. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/__init__.py +1 -1
  4. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/entrypoint.py +12 -0
  5. devagent_ai-0.8.12/devagent/live/__init__.py +374 -0
  6. devagent_ai-0.8.12/devagent/live/_commercial_realtime_impl.py +1151 -0
  7. devagent_ai-0.8.12/devagent/live/advanced_assistant.py +603 -0
  8. devagent_ai-0.8.12/devagent/live/advanced_semantics.py +567 -0
  9. devagent_ai-0.8.12/devagent/live/agent_integration.py +482 -0
  10. devagent_ai-0.8.12/devagent/live/assist_cli.py +476 -0
  11. devagent_ai-0.8.12/devagent/live/assist_production_cli.py +91 -0
  12. devagent_ai-0.8.12/devagent/live/assistant.py +458 -0
  13. devagent_ai-0.8.12/devagent/live/certificate_material.py +174 -0
  14. devagent_ai-0.8.12/devagent/live/cli.py +747 -0
  15. devagent_ai-0.8.12/devagent/live/cli_security.py +182 -0
  16. devagent_ai-0.8.12/devagent/live/commercial_assistant.py +102 -0
  17. devagent_ai-0.8.12/devagent/live/commercial_readiness.py +539 -0
  18. devagent_ai-0.8.12/devagent/live/commercial_realtime.py +24 -0
  19. devagent_ai-0.8.12/devagent/live/commission.py +595 -0
  20. devagent_ai-0.8.12/devagent/live/connection_guidance.py +404 -0
  21. devagent_ai-0.8.12/devagent/live/control_guard.py +59 -0
  22. devagent_ai-0.8.12/devagent/live/diagnosis.py +663 -0
  23. devagent_ai-0.8.12/devagent/live/diagnosis_guard.py +91 -0
  24. devagent_ai-0.8.12/devagent/live/doctor.py +334 -0
  25. devagent_ai-0.8.12/devagent/live/engineering_context.py +394 -0
  26. devagent_ai-0.8.12/devagent/live/errors.py +17 -0
  27. devagent_ai-0.8.12/devagent/live/history.py +605 -0
  28. devagent_ai-0.8.12/devagent/live/manager.py +387 -0
  29. devagent_ai-0.8.12/devagent/live/models.py +70 -0
  30. devagent_ai-0.8.12/devagent/live/opcua_client.py +950 -0
  31. devagent_ai-0.8.12/devagent/live/plan.py +386 -0
  32. devagent_ai-0.8.12/devagent/live/production_integration.py +418 -0
  33. devagent_ai-0.8.12/devagent/live/production_realtime.py +325 -0
  34. devagent_ai-0.8.12/devagent/live/project_folder.py +344 -0
  35. devagent_ai-0.8.12/devagent/live/qa.py +460 -0
  36. devagent_ai-0.8.12/devagent/live/qualification.py +644 -0
  37. devagent_ai-0.8.12/devagent/live/question_resolution.py +46 -0
  38. devagent_ai-0.8.12/devagent/live/readiness.py +515 -0
  39. devagent_ai-0.8.12/devagent/live/realtime_assistant.py +595 -0
  40. devagent_ai-0.8.12/devagent/live/realtime_manager.py +619 -0
  41. devagent_ai-0.8.12/devagent/live/reconciled_evidence.py +158 -0
  42. devagent_ai-0.8.12/devagent/live/recursive_assistant.py +565 -0
  43. devagent_ai-0.8.12/devagent/live/recursive_diagnosis.py +515 -0
  44. devagent_ai-0.8.12/devagent/live/runtime_environment.py +60 -0
  45. devagent_ai-0.8.12/devagent/live/security.py +332 -0
  46. devagent_ai-0.8.12/devagent/live/semantic_assistant.py +477 -0
  47. devagent_ai-0.8.12/devagent/live/semantic_intent.py +296 -0
  48. devagent_ai-0.8.12/devagent/live/sim_cli.py +107 -0
  49. devagent_ai-0.8.12/devagent/live/simulator.py +439 -0
  50. devagent_ai-0.8.12/devagent/live/simulator_scenarios.py +180 -0
  51. devagent_ai-0.8.12/devagent/live/soak.py +445 -0
  52. devagent_ai-0.8.12/devagent/live/stateful_assistant.py +103 -0
  53. devagent_ai-0.8.12/devagent/live/stateful_context.py +496 -0
  54. devagent_ai-0.8.12/devagent/live/system_health.py +635 -0
  55. devagent_ai-0.8.12/devagent/live/tag_reconciliation.py +710 -0
  56. devagent_ai-0.8.12/devagent/live/vendor_qualification.py +297 -0
  57. devagent_ai-0.8.12/devagent/live/workflow.py +296 -0
  58. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/__init__.py +49 -1
  59. devagent_ai-0.8.12/devagent/plc/plc_dispatch.py +66 -0
  60. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/professional_report_install_v14.py +5 -0
  61. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/professional_report_v14.py +107 -6
  62. devagent_ai-0.8.12/devagent/plc/report_contract_console_v1.py +75 -0
  63. devagent_ai-0.8.12/devagent/plc/report_contract_v1.py +188 -0
  64. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_stateful_runtime.py +1 -1
  65. devagent_ai-0.8.12/devagent/plc/schneider_call_graph_v3.py +1660 -0
  66. devagent_ai-0.8.12/devagent/plc/schneider_cli_install_v1.py +97 -0
  67. devagent_ai-0.8.12/devagent/plc/schneider_closeout_v9.py +800 -0
  68. devagent_ai-0.8.12/devagent/plc/schneider_control_expert_v1.py +836 -0
  69. devagent_ai-0.8.12/devagent/plc/schneider_fault_recovery_v7.py +1037 -0
  70. devagent_ai-0.8.12/devagent/plc/schneider_graphical_v4.py +1329 -0
  71. devagent_ai-0.8.12/devagent/plc/schneider_graphical_writer_hardening_v4.py +87 -0
  72. devagent_ai-0.8.12/devagent/plc/schneider_identity_hardening_v8.py +220 -0
  73. devagent_ai-0.8.12/devagent/plc/schneider_identity_types_v8.py +932 -0
  74. devagent_ai-0.8.12/devagent/plc/schneider_integration_v1.py +405 -0
  75. devagent_ai-0.8.12/devagent/plc/schneider_interlock_permissive_hardening_v6.py +99 -0
  76. devagent_ai-0.8.12/devagent/plc/schneider_interlock_permissive_v6.py +1204 -0
  77. devagent_ai-0.8.12/devagent/plc/schneider_production_readiness.py +448 -0
  78. devagent_ai-0.8.12/devagent/plc/schneider_real_export_audit_hardening_v9.py +113 -0
  79. devagent_ai-0.8.12/devagent/plc/schneider_real_st_actions_v10.py +391 -0
  80. devagent_ai-0.8.12/devagent/plc/schneider_real_st_gap_analysis.py +256 -0
  81. devagent_ai-0.8.12/devagent/plc/schneider_regression_hardening_v9.py +207 -0
  82. devagent_ai-0.8.12/devagent/plc/schneider_report_install_v1.py +152 -0
  83. devagent_ai-0.8.12/devagent/plc/schneider_st_control_flow_v2.py +858 -0
  84. devagent_ai-0.8.12/devagent/plc/schneider_state_machine_hardening_v5.py +300 -0
  85. devagent_ai-0.8.12/devagent/plc/schneider_state_machine_v5.py +1492 -0
  86. devagent_ai-0.8.12/devagent/plc/schneider_tag_merge_v1.py +47 -0
  87. devagent_ai-0.8.12/devagent/plc/schneider_v5_bindings_v1.py +118 -0
  88. devagent_ai-0.8.12/devagent/plc/schneider_v8_compat_hardening.py +146 -0
  89. devagent_ai-0.8.12/devagent/plc/schneider_v9_hardening.py +69 -0
  90. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/signature_trust.py +1 -0
  91. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/top_engineering_risks_v1.py +15 -6
  92. {devagent_ai-0.8.7 → devagent_ai-0.8.12/devagent_ai.egg-info}/PKG-INFO +552 -18
  93. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent_ai.egg-info/SOURCES.txt +187 -0
  94. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent_ai.egg-info/requires.txt +4 -0
  95. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/pyproject.toml +3 -2
  96. devagent_ai-0.8.12/tests/test_live_advanced_contract_v1.py +53 -0
  97. devagent_ai-0.8.12/tests/test_live_advanced_hardening_v1.py +84 -0
  98. devagent_ai-0.8.12/tests/test_live_advanced_review_fixes_v1.py +137 -0
  99. devagent_ai-0.8.12/tests/test_live_advanced_rll_v1.py +81 -0
  100. devagent_ai-0.8.12/tests/test_live_advanced_scoped_tag_v1.py +60 -0
  101. devagent_ai-0.8.12/tests/test_live_advanced_semantics_v1.py +280 -0
  102. devagent_ai-0.8.12/tests/test_live_agent_integration.py +374 -0
  103. devagent_ai-0.8.12/tests/test_live_assist_cli_v1.py +117 -0
  104. devagent_ai-0.8.12/tests/test_live_certificate_format_compat.py +335 -0
  105. devagent_ai-0.8.12/tests/test_live_commercial_cli_v1.py +141 -0
  106. devagent_ai-0.8.12/tests/test_live_commercial_readiness_v1.py +227 -0
  107. devagent_ai-0.8.12/tests/test_live_commission_command.py +162 -0
  108. devagent_ai-0.8.12/tests/test_live_commission_config.py +319 -0
  109. devagent_ai-0.8.12/tests/test_live_commission_security_profiles.py +81 -0
  110. devagent_ai-0.8.12/tests/test_live_commission_summary_redaction.py +59 -0
  111. devagent_ai-0.8.12/tests/test_live_commissioning_qa_v1.py +414 -0
  112. devagent_ai-0.8.12/tests/test_live_commissioning_workflow.py +425 -0
  113. devagent_ai-0.8.12/tests/test_live_connection_guidance.py +257 -0
  114. devagent_ai-0.8.12/tests/test_live_control_guard_v1.py +63 -0
  115. devagent_ai-0.8.12/tests/test_live_conversation_final_review_guards_v2.py +123 -0
  116. devagent_ai-0.8.12/tests/test_live_diagnosis_guard_v1.py +105 -0
  117. devagent_ai-0.8.12/tests/test_live_doctor_soak_runtime_v1.py +174 -0
  118. devagent_ai-0.8.12/tests/test_live_entrypoint.py +21 -0
  119. devagent_ai-0.8.12/tests/test_live_history_question_defaults_v1.py +19 -0
  120. devagent_ai-0.8.12/tests/test_live_insecure_username_profile.py +102 -0
  121. devagent_ai-0.8.12/tests/test_live_manager.py +390 -0
  122. devagent_ai-0.8.12/tests/test_live_models.py +34 -0
  123. devagent_ai-0.8.12/tests/test_live_multi_plc_integration.py +96 -0
  124. devagent_ai-0.8.12/tests/test_live_opcua.py +207 -0
  125. devagent_ai-0.8.12/tests/test_live_opcua_certificate_format_integration.py +212 -0
  126. devagent_ai-0.8.12/tests/test_live_opcua_profile_runtime_integration.py +233 -0
  127. devagent_ai-0.8.12/tests/test_live_opcua_security_integration.py +207 -0
  128. devagent_ai-0.8.12/tests/test_live_opcua_trust_store_integration.py +234 -0
  129. devagent_ai-0.8.12/tests/test_live_pkcs12_server_pin.py +104 -0
  130. devagent_ai-0.8.12/tests/test_live_plan_command.py +153 -0
  131. devagent_ai-0.8.12/tests/test_live_plan_generator.py +255 -0
  132. devagent_ai-0.8.12/tests/test_live_probe_guidance_integration.py +39 -0
  133. devagent_ai-0.8.12/tests/test_live_probe_status_output.py +71 -0
  134. devagent_ai-0.8.12/tests/test_live_production_integration.py +274 -0
  135. devagent_ai-0.8.12/tests/test_live_production_readiness.py +173 -0
  136. devagent_ai-0.8.12/tests/test_live_production_readiness_command.py +132 -0
  137. devagent_ai-0.8.12/tests/test_live_project_folder_example_v1.py +20 -0
  138. devagent_ai-0.8.12/tests/test_live_project_folder_intake_v1.py +124 -0
  139. devagent_ai-0.8.12/tests/test_live_realistic_agent_matrix_v1.py +121 -0
  140. devagent_ai-0.8.12/tests/test_live_realistic_agent_qa_v1.py +122 -0
  141. devagent_ai-0.8.12/tests/test_live_realtime_conversation_context_v1.py +432 -0
  142. devagent_ai-0.8.12/tests/test_live_realtime_evidence_integrity_integration_v2.py +144 -0
  143. devagent_ai-0.8.12/tests/test_live_realtime_evidence_integrity_regressions_v2.py +276 -0
  144. devagent_ai-0.8.12/tests/test_live_realtime_evidence_integrity_v2.py +324 -0
  145. devagent_ai-0.8.12/tests/test_live_realtime_evidence_v1.py +484 -0
  146. devagent_ai-0.8.12/tests/test_live_realtime_final_review_regressions_v2.py +360 -0
  147. devagent_ai-0.8.12/tests/test_live_realtime_race_hardening_v1.py +255 -0
  148. devagent_ai-0.8.12/tests/test_live_realtime_reconfiguration_integrity_v2.py +85 -0
  149. devagent_ai-0.8.12/tests/test_live_realtime_revalidation_v1.py +258 -0
  150. devagent_ai-0.8.12/tests/test_live_reconciled_evidence.py +204 -0
  151. devagent_ai-0.8.12/tests/test_live_reconciled_evidence_scope.py +108 -0
  152. devagent_ai-0.8.12/tests/test_live_reconnect_unit.py +321 -0
  153. devagent_ai-0.8.12/tests/test_live_recursive_assistant_contract_v1.py +78 -0
  154. devagent_ai-0.8.12/tests/test_live_recursive_diagnosis_v1.py +252 -0
  155. devagent_ai-0.8.12/tests/test_live_release_qualification.py +192 -0
  156. devagent_ai-0.8.12/tests/test_live_release_qualification_command.py +72 -0
  157. devagent_ai-0.8.12/tests/test_live_release_qualification_hardening.py +64 -0
  158. devagent_ai-0.8.12/tests/test_live_review_hardening_v1.py +96 -0
  159. devagent_ai-0.8.12/tests/test_live_security.py +458 -0
  160. devagent_ai-0.8.12/tests/test_live_security_backward_compat.py +29 -0
  161. devagent_ai-0.8.12/tests/test_live_security_exception_chain.py +79 -0
  162. devagent_ai-0.8.12/tests/test_live_semantic_intent_router_v2.py +289 -0
  163. devagent_ai-0.8.12/tests/test_live_semantic_intent_router_v2_p1_regressions.py +452 -0
  164. devagent_ai-0.8.12/tests/test_live_semantic_router_observability_v1.py +33 -0
  165. devagent_ai-0.8.12/tests/test_live_server_hostname_validation.py +67 -0
  166. devagent_ai-0.8.12/tests/test_live_sim_matrix_cli_v1.py +27 -0
  167. devagent_ai-0.8.12/tests/test_live_simulator_demo_project_v1.py +52 -0
  168. devagent_ai-0.8.12/tests/test_live_simulator_scenarios_v1.py +128 -0
  169. devagent_ai-0.8.12/tests/test_live_simulator_security_unit.py +44 -0
  170. devagent_ai-0.8.12/tests/test_live_stateful_failclosed_v1.py +39 -0
  171. devagent_ai-0.8.12/tests/test_live_stateful_history_v1.py +269 -0
  172. devagent_ai-0.8.12/tests/test_live_stateful_missing_rungs_v1.py +16 -0
  173. devagent_ai-0.8.12/tests/test_live_system_health_fail_closed_v1.py +122 -0
  174. devagent_ai-0.8.12/tests/test_live_system_health_v1.py +315 -0
  175. devagent_ai-0.8.12/tests/test_live_system_master_overview_v1.py +134 -0
  176. devagent_ai-0.8.12/tests/test_live_system_master_routing_v1.py +110 -0
  177. devagent_ai-0.8.12/tests/test_live_system_master_simulator_integration_v1.py +109 -0
  178. devagent_ai-0.8.12/tests/test_live_tag_reconciliation.py +399 -0
  179. devagent_ai-0.8.12/tests/test_live_trust_store.py +267 -0
  180. devagent_ai-0.8.12/tests/test_live_vendor_soak_v1.py +178 -0
  181. devagent_ai-0.8.12/tests/test_live_workflow_public_api.py +30 -0
  182. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_cli_live_progress.py +40 -0
  183. devagent_ai-0.8.12/tests/test_plc_report_contract_v1.py +169 -0
  184. devagent_ai-0.8.12/tests/test_plc_schneider_core.py +143 -0
  185. devagent_ai-0.8.12/tests/test_plc_schneider_production.py +122 -0
  186. devagent_ai-0.8.12/tests/test_plc_schneider_production_readiness.py +268 -0
  187. devagent_ai-0.8.12/tests/test_plc_schneider_production_readiness_hardening.py +102 -0
  188. devagent_ai-0.8.12/tests/test_plc_schneider_real_st_actions_v10.py +146 -0
  189. devagent_ai-0.8.12/tests/test_plc_schneider_real_st_gap_analysis.py +84 -0
  190. devagent_ai-0.8.12/tests/test_plc_schneider_regression_hardening.py +147 -0
  191. devagent_ai-0.8.12/tests/test_plc_schneider_v2.py +314 -0
  192. devagent_ai-0.8.12/tests/test_plc_schneider_v3.py +315 -0
  193. devagent_ai-0.8.12/tests/test_plc_schneider_v4.py +292 -0
  194. devagent_ai-0.8.12/tests/test_plc_schneider_v4_writer_hardening.py +91 -0
  195. devagent_ai-0.8.12/tests/test_plc_schneider_v5.py +374 -0
  196. devagent_ai-0.8.12/tests/test_plc_schneider_v5_hardening.py +249 -0
  197. devagent_ai-0.8.12/tests/test_plc_schneider_v6.py +362 -0
  198. devagent_ai-0.8.12/tests/test_plc_schneider_v6_hardening.py +52 -0
  199. devagent_ai-0.8.12/tests/test_plc_schneider_v7.py +319 -0
  200. devagent_ai-0.8.12/tests/test_plc_schneider_v8.py +281 -0
  201. devagent_ai-0.8.12/tests/test_plc_schneider_v8_downstream_hardening.py +71 -0
  202. devagent_ai-0.8.12/tests/test_plc_schneider_v9.py +201 -0
  203. devagent_ai-0.8.12/tests/test_plc_schneider_v9_hardening.py +137 -0
  204. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_production_v040.py +1 -1
  205. devagent_ai-0.8.7/devagent/plc/plc_dispatch.py +0 -41
  206. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/LICENSE +0 -0
  207. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/NOTICE +0 -0
  208. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/agent/__init__.py +0 -0
  209. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/agent/llm.py +0 -0
  210. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/agent/loop.py +0 -0
  211. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/agent/memory.py +0 -0
  212. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/agent/prompts.py +0 -0
  213. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/agent/tools.py +0 -0
  214. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/__main__.py +0 -0
  215. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/artifacts.py +0 -0
  216. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/automations.py +0 -0
  217. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/autonomy.py +0 -0
  218. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/browser.py +0 -0
  219. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/cli.py +0 -0
  220. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/config.py +0 -0
  221. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/discovery.py +0 -0
  222. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/evaluation.py +0 -0
  223. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/memory.py +0 -0
  224. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/models.py +0 -0
  225. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/orchestrator.py +0 -0
  226. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/agent_harness_install_v15.py +0 -0
  227. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/agent_harness_v15.py +0 -0
  228. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/analysis.py +0 -0
  229. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/cli.py +0 -0
  230. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/execution_trust.py +0 -0
  231. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/fat_procedure_v12.py +0 -0
  232. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/four_contract_v13.py +0 -0
  233. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/inspect_cli.py +0 -0
  234. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/models.py +0 -0
  235. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production.py +0 -0
  236. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_ai.py +0 -0
  237. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_evidence.py +0 -0
  238. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_models.py +0 -0
  239. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_readiness.py +0 -0
  240. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_readiness_v5.py +0 -0
  241. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_regression.py +0 -0
  242. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_report.py +0 -0
  243. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_review.py +0 -0
  244. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_utils.py +0 -0
  245. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_v5.py +0 -0
  246. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_verification.py +0 -0
  247. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/release_policy.py +0 -0
  248. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/report.py +0 -0
  249. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/report_clarity_install_v16.py +0 -0
  250. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/report_levels.py +0 -0
  251. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/requirements.py +0 -0
  252. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_action_requirements.py +0 -0
  253. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_alias_hardening.py +0 -0
  254. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_branch_coverage_v16.py +0 -0
  255. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_closeout.py +0 -0
  256. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_closeout_gate_hardening.py +0 -0
  257. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_compare.py +0 -0
  258. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_compare_hardening.py +0 -0
  259. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_compare_reachability_hardening.py +0 -0
  260. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_core_review_v12.py +0 -0
  261. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_echo.py +0 -0
  262. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_echo_gate.py +0 -0
  263. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_entrypoint_hardening.py +0 -0
  264. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_general_actions.py +0 -0
  265. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_l5x.py +0 -0
  266. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_motion_runtime_v11.py +0 -0
  267. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_regression_case_compat_v12.py +0 -0
  268. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_regression_evidence_hardening.py +0 -0
  269. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_requirement_hardening.py +0 -0
  270. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_risk_hardening.py +0 -0
  271. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_semantic_capabilities.py +0 -0
  272. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_st_case_v11.py +0 -0
  273. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_st_v10.py +0 -0
  274. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_standard_catalog.py +0 -0
  275. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_state_machine_v11.py +0 -0
  276. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_structure.py +0 -0
  277. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_system_service_install_v17.py +0 -0
  278. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_system_service_report_install_v17.py +0 -0
  279. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_system_service_v17.py +0 -0
  280. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_v10_semantics.py +0 -0
  281. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/safe_analysis.py +0 -0
  282. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/semantic_coverage.py +0 -0
  283. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/semantic_coverage_report.py +0 -0
  284. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_call_graph_v3.py +0 -0
  285. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_cli_install_v1.py +0 -0
  286. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_closeout_v9.py +0 -0
  287. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_flgnet_extended_hardening_v4.py +0 -0
  288. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_flgnet_extended_v4.py +0 -0
  289. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_flgnet_hardening_v4.py +0 -0
  290. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_flgnet_v4.py +0 -0
  291. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_identity_types_v8.py +0 -0
  292. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_integration_v1.py +0 -0
  293. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_interlock_permissive_v6.py +0 -0
  294. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_recovery_v7.py +0 -0
  295. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_scl_control_flow_hardening_v2.py +0 -0
  296. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_scl_control_flow_v2.py +0 -0
  297. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_state_machine_hardening_v5.py +0 -0
  298. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_state_machine_v5.py +0 -0
  299. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_tia_v1.py +0 -0
  300. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_v5_bindings_v1.py +0 -0
  301. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_v6_v7_token_hardening.py +0 -0
  302. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_v8_v9_compat_hardening.py +0 -0
  303. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/trusted_snapshot.py +0 -0
  304. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/v2_guardrails.py +0 -0
  305. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/v2_semantics.py +0 -0
  306. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/provider_benchmark.py +0 -0
  307. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/providers.py +0 -0
  308. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/qualification.py +0 -0
  309. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/realworld.py +0 -0
  310. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/report.py +0 -0
  311. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/retrieval.py +0 -0
  312. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/routing.py +0 -0
  313. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/runtime.py +0 -0
  314. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/safety.py +0 -0
  315. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/skills.py +0 -0
  316. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/source_control.py +0 -0
  317. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/state_machine.py +0 -0
  318. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/tasking.py +0 -0
  319. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/technical_review.py +0 -0
  320. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/workspace.py +0 -0
  321. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/worktree.py +0 -0
  322. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent_ai.egg-info/dependency_links.txt +0 -0
  323. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent_ai.egg-info/entry_points.txt +0 -0
  324. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent_ai.egg-info/top_level.txt +0 -0
  325. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/setup.cfg +0 -0
  326. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_acceptance_contract.py +0 -0
  327. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_benchmark_catalog.py +0 -0
  328. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_browser_verification.py +0 -0
  329. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_capability_discovery.py +0 -0
  330. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_cli.py +0 -0
  331. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_cli_progress.py +0 -0
  332. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_developer_review_report.py +0 -0
  333. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_discovery_memory.py +0 -0
  334. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_e2e_fake_provider.py +0 -0
  335. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_evaluation_harness.py +0 -0
  336. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_evaluation_matrix.py +0 -0
  337. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_evaluation_regression_evidence.py +0 -0
  338. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_functional_qualification.py +0 -0
  339. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_huge_monorepo_v070.py +0 -0
  340. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_migration_e2e_v070.py +0 -0
  341. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_model_routing.py +0 -0
  342. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_multilang_technical_review.py +0 -0
  343. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_multistack_devagent_e2e.py +0 -0
  344. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_multistack_qualification.py +0 -0
  345. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_packaging_metadata.py +0 -0
  346. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plan_verification_normalization.py +0 -0
  347. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_agent_harness_trace_v15.py +0 -0
  348. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_agent_harness_v15.py +0 -0
  349. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_execution_trust.py +0 -0
  350. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_four_contract_v13.py +0 -0
  351. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_product_contract_v12.py +0 -0
  352. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_production.py +0 -0
  353. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_production_v5.py +0 -0
  354. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_release_policy.py +0 -0
  355. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_report_levels.py +0 -0
  356. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_boolean_alias_proof.py +0 -0
  357. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_canonical_risks.py +0 -0
  358. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_closeout_v9.py +0 -0
  359. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_closeout_v9_guardrails.py +0 -0
  360. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_closeout_v9_review_regressions.py +0 -0
  361. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_compare_v8.py +0 -0
  362. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_compare_v8_aliases.py +0 -0
  363. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_compare_v8_hardening.py +0 -0
  364. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_compare_v8_identity_assertions.py +0 -0
  365. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_compare_v8_review_regressions.py +0 -0
  366. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_echo_cli_v6.py +0 -0
  367. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_echo_v6.py +0 -0
  368. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_hardening.py +0 -0
  369. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_semantics_v7.py +0 -0
  370. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v1.py +0 -0
  371. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v10_action_requirements.py +0 -0
  372. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v10_arbitrary_project_qualification.py +0 -0
  373. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v10_echo_compatibility.py +0 -0
  374. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v10_general_actions.py +0 -0
  375. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v10_general_semantics.py +0 -0
  376. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v10_inspect_cli.py +0 -0
  377. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v10_semantic_coverage.py +0 -0
  378. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v10_st_safe_functions.py +0 -0
  379. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v10_stateful_runtime.py +0 -0
  380. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v11_reporting.py +0 -0
  381. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v11_st_motion.py +0 -0
  382. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v11_state_machine.py +0 -0
  383. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v16_semantic_hardening.py +0 -0
  384. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v17_system_service_fat.py +0 -0
  385. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v17_system_service_generic.py +0 -0
  386. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v2.py +0 -0
  387. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v9_entry_edgecases.py +0 -0
  388. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v9_final_codex.py +0 -0
  389. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v9_merge_gates.py +0 -0
  390. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v9_reachable_writers.py +0 -0
  391. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_siemens_v1.py +0 -0
  392. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_siemens_v2.py +0 -0
  393. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_siemens_v3_call_graph.py +0 -0
  394. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_siemens_v4_extended.py +0 -0
  395. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_siemens_v4_flgnet.py +0 -0
  396. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_siemens_v5_state_machine.py +0 -0
  397. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_siemens_v6_v7.py +0 -0
  398. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_siemens_v8_v9.py +0 -0
  399. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_signature_trust.py +0 -0
  400. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_top_engineering_risks.py +0 -0
  401. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_v5_security_floor.py +0 -0
  402. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_v5_toctou.py +0 -0
  403. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_preservation_contradiction.py +0 -0
  404. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_production_hardening.py +0 -0
  405. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_realworld_benchmark.py +0 -0
  406. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_requirement_compiler_v082.py +0 -0
  407. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_requirement_intelligence_v083.py +0 -0
  408. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_retrieval.py +0 -0
  409. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_runtime_sandbox.py +0 -0
  410. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_safety_workspace.py +0 -0
  411. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_source_control_publish.py +0 -0
  412. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_structural_devagent_e2e_v070.py +0 -0
  413. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_structural_operations.py +0 -0
  414. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_structured_provider_contract.py +0 -0
  415. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_tasking_state.py +0 -0
  416. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_v070_engineering_breadth.py +0 -0
  417. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_v080_autonomy.py +0 -0
  418. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_v080_provider_benchmark.py +0 -0
  419. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_v080_skills_automations.py +0 -0
  420. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_workspace_environment.py +0 -0
  421. {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_worktree.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: devagent-ai
3
- Version: 0.8.7
3
+ Version: 0.8.12
4
4
  Summary: Evidence-driven local autonomous software engineering agent
5
5
  Author: Tom Ha
6
6
  Maintainer: Tom Ha
@@ -26,9 +26,12 @@ Requires-Dist: openai>=1.40.0
26
26
  Requires-Dist: anthropic>=0.34.0
27
27
  Requires-Dist: cryptography>=42.0.0
28
28
  Requires-Dist: tomli>=2.0.0; python_version < "3.11"
29
+ Provides-Extra: live
30
+ Requires-Dist: asyncua<3,>=2.0; extra == "live"
29
31
  Provides-Extra: dev
30
32
  Requires-Dist: pytest>=8.0; extra == "dev"
31
33
  Requires-Dist: pytest-cov>=5.0; extra == "dev"
34
+ Requires-Dist: asyncua<3,>=2.0; extra == "dev"
32
35
  Dynamic: license-file
33
36
 
34
37
  # DevAgent
@@ -39,21 +42,76 @@ Dynamic: license-file
39
42
  [![Production CI](https://github.com/tomha85/devagent/actions/workflows/ci.yml/badge.svg)](https://github.com/tomha85/devagent/actions/workflows/ci.yml)
40
43
  [![Sponsor DevAgent](https://img.shields.io/badge/Sponsor-DevAgent-EA4AAA?logo=githubsponsors&logoColor=white)](https://github.com/sponsors/tomha85)
41
44
 
42
- **A local, evidence-driven software engineering agent that turns a requirement into a tested, independently reviewed patch, prints a developer-grade engineering report, and only publishes a branch when the result is `VERIFIED`.**
45
+ **A local, evidence-driven engineering agent for software engineering, offline PLC engineering/FAT review, and read-only onsite commissioning that turns source evidence and trusted runtime observations into bounded engineering decisions without treating model confidence as proof.**
43
46
 
44
- > **From requirement to evidence-backed verified branch.**
47
+ > **From requirement to evidence-backed engineering decisions.**
45
48
 
46
49
  > ❤️ **DevAgent is free during public beta.** If DevAgent saves you engineering time, consider [sponsoring continued development](https://github.com/sponsors/tomha85).
47
50
 
48
- DevAgent runs against a developer's local repository. It discovers the application, gathers source evidence, compiles explicit acceptance criteria, plans a bounded change, creates backups, implements the minimum necessary patch, runs repository-supported verification, independently reviews the final diff, and decides `VERIFIED`, `PARTIALLY_VERIFIED`, or `BLOCKED` from evidence rather than model confidence.
51
+ DevAgent runs against a developer's local repository or supported exported PLC engineering artifacts. For software work, it discovers the application, gathers source evidence, compiles explicit acceptance criteria, plans a bounded change, creates backups, implements the minimum necessary patch, runs repository-supported verification, independently reviews the final diff, and decides `VERIFIED`, `PARTIALLY_VERIFIED`, or `BLOCKED` from evidence rather than model confidence.
49
52
 
50
- For a normal verified run the deterministic harness prints the complete engineering report first, then commits reviewed paths and fast-forward pushes the developer's current non-protected branch. If the developer starts on `main`, `master`, or `trunk`, DevAgent creates a new safe branch instead. Runtime DevAgent never creates a pull request, merges, rebases, force-pushes, or deploys.
53
+ For PLC engineering, **DevAgent PLC** provides a vendor-dispatched offline/pre-site review workflow for **Siemens TIA Portal**, **Rockwell Studio 5000 / Logix Designer**, and **Schneider Electric EcoStruxure Control Expert / Unity Pro**. It normalizes supported exports into a canonical PLC model, analyzes logic and dependencies, verifies requirements where evidence permits, detects engineering risks, generates FAT procedures, evaluates regression impact, produces recommendations and evidence, and reports release readiness without pretending that static analysis replaces simulator, HIL, or real-PLC execution.
54
+
55
+ For onsite commissioning, **DevAgent Live** is a separate first-class **read-only product branch**. It owns its own onsite commissioning workflow, connects to OPC UA endpoints, reconciles engineering tags to runtime nodes, rejects bad/stale/replayed/ambiguous evidence, and supports deterministic blocker diagnosis, recursive tracing, stateful/historical context, numeric/analog comparisons, handshakes, AOI/FB context, fault codes, sequencers, motion/PID context, and bounded AI explanation. Live may consume stable canonical PLC engineering context through a read-only adapter contract, but it is not a sub-branch of DevAgent PLC and does not inherit FAT or release-readiness authority.
56
+
57
+ For a normal verified software run the deterministic harness prints the complete engineering report first, then commits reviewed paths and fast-forward pushes the developer's current non-protected branch. If the developer starts on `main`, `master`, or `trunk`, DevAgent creates a new safe branch instead. Runtime DevAgent never creates a pull request, merges, rebases, force-pushes, or deploys.
58
+
59
+ ## General Architecture
60
+
61
+ DevAgent has **three sibling product branches** under one evidence-driven core. Each branch owns a distinct engineering responsibility, input model, safety boundary, and qualification path.
62
+
63
+ ```mermaid
64
+ %%{init: {"flowchart": {"curve": "linear", "nodeSpacing": 50, "rankSpacing": 55}}}%%
65
+ flowchart TB
66
+ CORE["DevAgent Core<br/>Evidence-Driven Engineering Platform"]
67
+
68
+ CORE --> SW["Software Engineering<br/>Product Branch #1"]
69
+ CORE --> PLC["DevAgent PLC<br/>Product Branch #2"]
70
+ CORE --> LIVE["DevAgent Live<br/>Product Branch #3"]
71
+
72
+ SW --> SW_IN["Local / GitHub Repository"]
73
+ SW_IN --> SW_FLOW["Understand · Plan · Modify · Test · Review"]
74
+ SW_FLOW --> SW_OUT["Engineering Report · Safe Branch"]
75
+
76
+ PLC --> PLC_IN["PLC Engineering Export"]
77
+ PLC_IN --> PLC_VENDOR["Siemens · Rockwell · Schneider"]
78
+ PLC_VENDOR --> PLC_MODEL["Canonical PLC Engineering Model"]
79
+ PLC_MODEL --> PLC_OUT["Analyze · Verify · FAT · Release Readiness"]
80
+
81
+ LIVE --> LIVE_IN["Engineering Context + OPC UA Endpoint(s)"]
82
+ LIVE_IN --> LIVE_TRUST["Reconcile · Trust · Freshness · History"]
83
+ LIVE_TRUST --> LIVE_DIAG["Deterministic Commissioning Diagnosis"]
84
+ LIVE_DIAG --> LIVE_OUT["Evidence · Explanation · Next Check"]
85
+ ```
86
+
87
+ | Product branch | Primary input | Authority |
88
+ | --- | --- | --- |
89
+ | **Software Engineering** | Local / GitHub repository | Understand, modify, verify, review, report, publish a safe branch |
90
+ | **DevAgent PLC** | Exported PLC engineering artifacts | Offline engineering review, requirements, FAT, evidence, release readiness |
91
+ | **DevAgent Live** | Read-only engineering context + OPC UA runtime | Onsite commissioning diagnosis, runtime evidence, history, Q&A — **no PLC control** |
92
+
93
+ ### Read-only PLC → Live integration contract
94
+
95
+ DevAgent Live is **not a child of DevAgent PLC**. PLC engineering context crosses into Live through a bounded data contract; PLC theorem/FAT ownership remains in DevAgent PLC, while OPC UA sessions, runtime trust/history, diagnosis, and commissioning Q&A remain owned by DevAgent Live.
96
+
97
+ ```mermaid
98
+ %%{init: {"flowchart": {"curve": "linear", "nodeSpacing": 50, "rankSpacing": 45}}}%%
99
+ flowchart LR
100
+ MODEL["Canonical PLC Engineering Model"] -. "READ-ONLY ENGINEERING CONTEXT" .-> ADAPTER["DevAgent Live Adapter"]
101
+ OPC["OPC UA Runtime Evidence"] --> ADAPTER
102
+ ADAPTER --> JOIN["Engineering ↔ Runtime Join"]
103
+ JOIN --> DIAG["Commissioning Diagnosis"]
104
+ ```
105
+
106
+ **Solid lines** represent normal execution/data flow. The **dotted line** represents the read-only engineering-context contract; it does not transfer FAT, release-readiness, or PLC control authority to Live.
107
+
108
+ For the expanded branch boundaries, ownership model, internal flows, and evidence rules, see [General Architecture](docs/general-architecture.md).
51
109
 
52
110
  ## Why DevAgent?
53
111
 
54
112
  Many coding agents optimize first for code generation. DevAgent is built around a different question:
55
113
 
56
- **Can this change be supported by repository evidence and verified on the current revision?**
114
+ **Can this change or engineering claim be supported by evidence on the exact analyzed revision/export?**
57
115
 
58
116
  Core principles:
59
117
 
@@ -68,6 +126,7 @@ Core principles:
68
126
  - **Developer-grade reporting** — implementation logic, symbols, tests, acceptance evidence, verification, failures, gaps, and source-control status are recorded before publication.
69
127
  - **Bring your own model** — OpenAI, Anthropic/Claude, xAI/Grok, Google Gemini, and OpenAI-compatible endpoints use one engineering workflow.
70
128
  - **Deterministic branch publication** — only a `VERIFIED` isolated run can be committed and normally fast-forward pushed; `--no-publish` keeps the result local.
129
+ - **Read-only commissioning boundary** — DevAgent Live can diagnose trusted runtime state but cannot turn an AI answer into PLC control authority.
71
130
 
72
131
  ## Install
73
132
 
@@ -77,6 +136,12 @@ From PyPI:
77
136
  python -m pip install devagent-ai
78
137
  ```
79
138
 
139
+ For DevAgent Live with OPC UA runtime support:
140
+
141
+ ```bash
142
+ python -m pip install "devagent-ai[live]"
143
+ ```
144
+
80
145
  For an isolated CLI installation:
81
146
 
82
147
  ```bash
@@ -256,13 +321,13 @@ Binary data, invalid UTF-8, secret-like paths, and files above the input-size bo
256
321
 
257
322
  ## PLC engineer quick start
258
323
 
259
- DevAgent also provides an **offline PLC engineering review, requirement-verification, regression-analysis, risk-review, and FAT-planning workflow** through `devagent plc`.
324
+ DevAgent also provides an **offline PLC engineering review, requirement-verification, regression-analysis, risk-review, and FAT-planning workflow** through `devagent plc` for Siemens, Rockwell, and Schneider engineering exports.
260
325
 
261
- The PLC workflow is intended for controls/PLC engineers who want to review exported engineering artifacts before FAT, site travel, commissioning, or release. DevAgent does **not** connect to, upload to, download to, force, start, stop, or control a PLC, TIA Portal, Studio 5000, PLCSIM, Logix Echo, HIL bench, or production machine. Runtime FAT and commissioning execution remain owned by the PLC engineer.
326
+ The PLC workflow is intended for controls/PLC engineers who want to review exported engineering artifacts before FAT, site travel, commissioning, or release. DevAgent PLC does **not** connect to, upload to, download to, force, start, stop, or control a PLC, TIA Portal, Studio 5000, Control Expert, PLCSIM, Logix Echo, HIL bench, or production machine. Runtime FAT and commissioning execution remain owned by the PLC engineer; onsite read-only assistance belongs to the separate `devagent live` product branch.
262
327
 
263
328
  ### 1. Export the PLC project
264
329
 
265
- **Rockwell Studio 5000:** export the full controller project as `.L5X`.
330
+ **Rockwell Studio 5000 / Logix Designer:** export the full controller project as `.L5X`.
266
331
 
267
332
  ```text
268
333
  Line1_Controller.L5X
@@ -270,6 +335,12 @@ Line1_Controller.L5X
270
335
 
271
336
  **Siemens TIA Portal:** provide a TIA Openness/XML/generated-source file or export directory. Supported engineering inputs include `.scl`, `.db`, `.udt`, `.xml`, `.stl`, and `.awl`. Proprietary `.ap*` / `.zap*` project archives must be exported from TIA Portal first.
272
337
 
338
+ **Schneider Electric EcoStruxure Control Expert / Unity Pro:** export `.XEF` when possible. DevAgent also accepts supported granular Control Expert XML exchange files such as `.XSY`, `.XST`, `.XLD`, `.XBD`, `.XSF`, `.XIL`, `.XDD`, `.XDB`, `.XHW`, and `.XCM`. `.STU` and `.STA` work/archive formats are not direct static-analysis inputs; export the project to `.XEF`. A `.ZEF` may contain broader project exchange data, but use an extracted/supported engineering export for DevAgent analysis rather than assuming the archive itself is directly analyzable.
339
+
340
+ ```text
341
+ Machine_Controller.XEF
342
+ ```
343
+
273
344
  #### Siemens `.zapXX` archived projects
274
345
 
275
346
  Files such as `.zap17`, `.zap18`, `.zap19`, and `.zap20` are **TIA Portal archived projects**, not direct DevAgent static-analysis inputs. Do not point `devagent plc` directly at a `.zapXX` archive and assume the internal archive contents are equivalent to a supported engineering export.
@@ -370,6 +441,15 @@ devagent plc ./exports/TIA_Line1/ \
370
441
  --output-dir ./plc-review/line1-current
371
442
  ```
372
443
 
444
+ Schneider:
445
+
446
+ ```bash
447
+ devagent plc ./exports/Machine_Controller.XEF \
448
+ --requirements ./requirements/line1.md \
449
+ --ai \
450
+ --output-dir ./plc-review/line1-current
451
+ ```
452
+
373
453
  `--ai` enables the evidence-constrained AI engineering-review layer. It is optional; the deterministic PLC analysis and FAT-planning path still runs without it.
374
454
 
375
455
  ### 4. Compare a PLC revision
@@ -384,7 +464,7 @@ devagent plc ./exports/new/TIA_Line1/ \
384
464
  --output-dir ./plc-review/line1-revision
385
465
  ```
386
466
 
387
- The same pattern works for Rockwell using current and previous `.L5X` files.
467
+ The same pattern works for Rockwell using current and previous `.L5X` files and for Schneider using current and previous supported Control Expert exports such as `.XEF`.
388
468
 
389
469
  ### 5. Review the evidence package
390
470
 
@@ -418,8 +498,442 @@ ENGINEERING APPROVAL
418
498
  ↓
419
499
  SITE COMMISSIONING / RELEASE PROCESS
420
500
  ```
501
+ For signed runtime-result, policy, trust-store, and approval workflows, and a complete explanation of Rockwell/Siemens/Schneider evidence boundaries, see **[PLC Engineer Guide](docs/plc-engineer-guide.md)**.
502
+
503
+ ## DevAgent Live onsite commissioning quick start
504
+
505
+ Use **DevAgent Live** when an onsite controls engineer needs to understand the running controller/system, inspect trusted current state, diagnose why an output is blocked, trace modeled PLC logic upstream, inspect recent trusted transitions, or identify the next evidence-backed check. Live is a separate read-only product branch: the LLM may understand the engineer's wording, but **deterministic PLC logic plus trusted OPC UA evidence decide the engineering result**.
506
+
507
+ ```text
508
+ DevAgent PLC = Product Branch #2 — offline engineering / FAT authority
509
+ DevAgent Live = Product Branch #3 — onsite read-only commissioning
510
+ ```
511
+
512
+ For the strongest diagnosis, provide both the supported PLC engineering export/context and a read-only OPC UA endpoint:
513
+
514
+ ```text
515
+ Supported PLC engineering export
516
+ +
517
+ OPC UA runtime endpoint
518
+ ↓
519
+ DevAgent Live
520
+ ↓
521
+ reconcile engineering ↔ runtime
522
+ ↓
523
+ deterministic diagnosis + evidence
524
+ ```
421
525
 
422
- For signed runtime-result, policy, trust-store, and approval workflows, and a complete explanation of Rockwell/Siemens evidence boundaries, see **[PLC Engineer Guide](docs/plc-engineer-guide.md)**.
526
+ ### 1. Install Live support
527
+
528
+ From PyPI:
529
+
530
+ ```bash
531
+ python -m pip install "devagent-ai[live]"
532
+ ```
533
+
534
+ From a source checkout:
535
+
536
+ ```bash
537
+ git clone https://github.com/tomha85/devagent.git
538
+ cd devagent
539
+ python -m venv .venv
540
+ source .venv/bin/activate
541
+ python -m pip install -e ".[dev]"
542
+ ```
543
+
544
+ If AI language routing is enabled, configure a provider and keep its API key in an environment variable. Example with OpenAI:
545
+
546
+ ```bash
547
+ export OPENAI_API_KEY=...
548
+ devagent setup --provider openai --model YOUR_OPENAI_MODEL
549
+ ```
550
+
551
+ Do not paste API keys into prompts, command history, issue comments, or logs.
552
+
553
+ ### 2. Run the included Rockwell + OPC UA demo
554
+
555
+ The repository includes a small commissioning handoff package:
556
+
557
+ ```text
558
+ examples/live/
559
+ ├── warehouse_commissioning_demo.L5X # authoritative Rockwell engineering export
560
+ ├── IO_List.csv # supplemental context
561
+ ├── Tag_Descriptions.csv # supplemental context
562
+ ├── requirements.md # supplemental context
563
+ └── FAT_tests.csv # supplemental context
564
+ ```
565
+
566
+ Terminal 1 — start the built-in read-only OPC UA simulator in a healthy state:
567
+
568
+ ```bash
569
+ cd ~/devagent
570
+ source .venv/bin/activate
571
+
572
+ devagent live sim \
573
+ --endpoint opc.tcp://127.0.0.1:4841/devagent/simulator/ \
574
+ --scenario healthy
575
+ ```
576
+
577
+ Useful simulator scenarios include:
578
+
579
+ ```text
580
+ healthy steady healthy operation
581
+ idle intentional inactivity; not a proven machine fault
582
+ drive_fault DriveFault=True, DriveReady=False, FaultCode=101
583
+ downstream_blocker downstream permissive blocks RunCmd
584
+ safety_trip safety chain fault
585
+ multi_blocker multiple missing permissives
586
+ logic_conflict modeled logic expects RunCmd=True but runtime is False
587
+ stuck_on_conflict modeled logic expects RunCmd=False but runtime is True
588
+ normal dynamic test mode with changing DownstreamReady/RunCmd
589
+ ```
590
+
591
+ The simulator is for development and qualification of the software path. It does **not** certify a real PLC/vendor endpoint for commercial field readiness.
592
+
593
+ ### 3. Start the interactive Live assistant
594
+
595
+ Terminal 2:
596
+
597
+ ```bash
598
+ cd ~/devagent
599
+ source .venv/bin/activate
600
+
601
+ devagent live assist \
602
+ --project-folder examples/live \
603
+ --primary-project warehouse_commissioning_demo.L5X \
604
+ --endpoint opc.tcp://127.0.0.1:4841/devagent/simulator/ \
605
+ --history-seconds 60 \
606
+ --ai \
607
+ --provider openai \
608
+ --model YOUR_OPENAI_MODEL
609
+ ```
610
+
611
+ For customer/site work, prefer an explicit `--primary-project` so the authoritative PLC source is unambiguous. If AI is not needed, omit `--ai`, `--provider`, and `--model`; deterministic exact-tag/current-state diagnosis remains available.
612
+
613
+ A successful session prints the selected engineering project, vendor/controller, endpoint, `Mode: READ ONLY`, mapping counts, recursive-trace limits, and history status. If the OPC UA server prints a negotiated session timeout such as:
614
+
615
+ ```text
616
+ Requested session timeout to be 3600000ms, got 600000ms instead
617
+ ```
618
+
619
+ that is informational when the session continues successfully; the server accepted a lower timeout.
620
+
621
+ ### 4. Ask normal commissioning questions
622
+
623
+ With `--ai`, engineers can use natural wording rather than memorizing fixed command phrases:
624
+
625
+ ```text
626
+ is system ok?
627
+ are there any errors?
628
+ anything I should worry about?
629
+ what is RunCmd?
630
+ why is RunCmd false?
631
+ is motor fault?
632
+ what is DriveReady?
633
+ what error do we have now?
634
+ why did RunCmd stop 20 seconds ago?
635
+ what should I check next?
636
+ ```
637
+
638
+ After a whole-system health answer, immediate bounded follow-ups can be conversational:
639
+
640
+ ```text
641
+ how do I fix this?
642
+ why?
643
+ what should I check first?
644
+ is it still bad?
645
+ ```
646
+
647
+ Example healthy result:
648
+
649
+ ```text
650
+ > is system ok
651
+ DEVAGENT LIVE SYSTEM HEALTH
652
+ Status: NO_CURRENT_PROVEN_FAULT
653
+ ...
654
+ DriveFault = False
655
+ FaultCode = 0
656
+ MachineState = RUNNING
657
+ ```
658
+
659
+ Example drive-fault result when Terminal 1 uses `--scenario drive_fault`:
660
+
661
+ ```text
662
+ > are there any errors
663
+ DEVAGENT LIVE SYSTEM HEALTH
664
+ Status: ATTENTION_REQUIRED
665
+ ...
666
+ DriveFault = True
667
+ DriveReady = False
668
+ FaultCode = 101
669
+ RunCmd = False
670
+ ```
671
+
672
+ A question such as `is motor fault?` may resolve to the exact engineering signal `DriveFault`. DevAgent can prove the **current PLC signal value** when trusted evidence exists, but it will not claim a physical motor/device root cause unless that deeper cause is actually supported by imported engineering or device/runtime evidence.
673
+
674
+ #### Conversational whole-system follow-ups
675
+
676
+ After a validated whole-system `SYSTEM_HEALTH` result, DevAgent may use one bounded conversational context to understand immediate follow-ups such as `how to fix`, `why`, `what should I check first?`, or `is it still bad?`. The previous answer is **context only, not current engineering truth**.
677
+
678
+ Before answering an accepted whole-system follow-up, Live re-runs the deterministic **CURRENT** system-health diagnosis from trusted OPC UA evidence. The LLM may explain that newly proven result, but it cannot replace it. If the runtime health truth changes while AI wording is being prepared and the configured final-revalidation threshold is exceeded, the AI wording is discarded and the newest deterministic result wins.
679
+
680
+ Unrelated or confidently different-topic turns clear the whole-system conversational context. Ambiguous/low-confidence routing remains fail-closed. PLC control/write/force/reset/bypass/upload/download/mode/start/stop/jog/override requests never enter whole-system recovery; they are refused under the READ ONLY boundary and terminate stale conversational context rather than reusing it later.
681
+
682
+ ### 5. Current state is refreshed when you ask again
683
+
684
+ Current-state answers are query-driven and evidence-bounded. Each new current-state question reads fresh trusted OPC UA evidence for the required signals. DevAgent does not keep an old fault as current truth just because it appeared earlier in the conversation.
685
+
686
+ Example:
687
+
688
+ ```text
689
+ 10:00 DriveFault=True, DriveReady=False, FaultCode=101
690
+ engineer asks: "is system ok?"
691
+ → ATTENTION_REQUIRED
692
+
693
+ 10:03 fault is cleared in the PLC/device
694
+ DriveFault=False, DriveReady=True, FaultCode=0
695
+ engineer asks again: "is system ok now?"
696
+ → current status is evaluated from the new OPC UA values
697
+ ```
698
+
699
+ Conversation context can help interpret immediate bounded follow-ups, but every accepted whole-system follow-up re-runs current deterministic health before explanation; prior conversational text never overrides trusted current PLC evidence.
700
+
701
+ Historical questions are separate. Enable a positive retention window such as `--history-seconds 60` or `--history-seconds 900` so Live can retain a bounded rolling timeline of trusted transitions. `--history-seconds 0` disables historical capture.
702
+
703
+ The `normal` simulator scenario is useful for proving that repeated questions see changing runtime values because `DownstreamReady` and `RunCmd` transition over time.
704
+
705
+ ### 6. Inspect workspace, mapping, connection, and history
706
+
707
+ Inside `devagent live assist`:
708
+
709
+ ```text
710
+ :workspace show the project-folder inventory and authoritative PLC input
711
+ :status show OPC UA connection/security state
712
+ :mappings show accepted and unresolved engineering ↔ OPC UA mappings
713
+ :refresh re-browse OPC UA and rebuild reconciliation
714
+ :overview show engineering, mapping, trace, stateful, and history coverage
715
+ :help show interactive help
716
+ :disconnect close the read-only session
717
+ ```
718
+
719
+ Unresolved, stale, BAD, replayed, uncertain, missing, type-incompatible, or ambiguous runtime evidence is not silently trusted as definitive current-state proof.
720
+
721
+ ### 7. Browse limits and diagnosis-trace limits are different
722
+
723
+ These options control OPC UA browse/reconciliation:
724
+
725
+ ```text
726
+ --max-depth
727
+ --max-nodes
728
+ ```
729
+
730
+ These separate options control recursive deterministic PLC root-cause tracing:
731
+
732
+ ```text
733
+ --trace-max-depth
734
+ --trace-max-nodes
735
+ ```
736
+
737
+ Therefore a command using `--max-depth 5 --max-nodes 500` may still print a banner such as `Recursive root-cause trace: ENABLED (depth=6, nodes=64)` if the trace options were left at their defaults. That is expected.
738
+
739
+ ### OPC UA connection and security setup
740
+
741
+ For a real PLC, gateway, Ignition OPC UA server, Kepware/KEPServerEX instance, or other OPC UA server, **start with endpoint discovery instead of guessing the security profile**:
742
+
743
+ ```bash
744
+ devagent live probe opc.tcp://192.168.10.20:4840/
745
+ ```
746
+
747
+ `probe` reports the server-advertised endpoint, SecurityPolicy, MessageSecurityMode, user-token types, certificate requirements, DevAgent compatibility, and a preferred supported profile. DevAgent does not modify the server during discovery or connection.
748
+
749
+ Use the same OPC UA endpoint/security information already configured for the customer's SCADA or OPC UA client. The server administrator remains responsible for endpoint enablement, accounts, certificates, trust lists, firewall/network access, and permissions.
750
+
751
+ | Existing OPC UA server profile | DevAgent setup |
752
+ | --- | --- |
753
+ | `NoSecurity` + Anonymous | `--endpoint` only |
754
+ | `NoSecurity` + UserName | `--username`, `--password-env`, and explicit `--allow-insecure-username-password` |
755
+ | Secure + Anonymous | application certificate/key + `--trust-store` or `--server-certificate` |
756
+ | Secure + UserName | application certificate/key + server trust + `--username` / `--password-env` |
757
+ | Secure + X.509 user | application certificate/key + server trust + user certificate/key |
758
+
759
+ For most customer/factory PKI deployments, prefer a reusable **trust store / CA trust** rather than pinning a separate server certificate for every PLC:
760
+
761
+ ```text
762
+ pki/
763
+ ├── devagent-app.der
764
+ ├── devagent-app-key.pem
765
+ └── trusted/
766
+ ├── factory-opcua-root-ca.crt
767
+ └── factory-opcua-intermediate-ca.cer
768
+ ```
769
+
770
+ Then a typical production connection is:
771
+
772
+ ```bash
773
+ export PLC_OPCUA_PASSWORD='...'
774
+
775
+ devagent live assist \
776
+ --project-folder /path/to/customer-line1 \
777
+ --primary-project plc/Line1.L5X \
778
+ --endpoint opc.tcp://plc01.factory.local:4840/ \
779
+ --security-policy Basic256Sha256 \
780
+ --security-mode SignAndEncrypt \
781
+ --client-certificate ./pki/devagent-app.der \
782
+ --client-private-key ./pki/devagent-app-key.pem \
783
+ --trust-store ./pki/trusted \
784
+ --username devagent_reader \
785
+ --password-env PLC_OPCUA_PASSWORD
786
+ ```
787
+
788
+ If PLC01, PLC02, PLC03, and other servers have certificates issued by the same trusted CA chain, the same `--trust-store` can validate them; a separate `--server-certificate` is not required for each PLC. For a self-signed server or when exact per-server pinning is desired, use:
789
+
790
+ ```bash
791
+ --server-certificate ./pki/plc01-server.der
792
+ ```
793
+
794
+ `--server-certificate` and `--trust-store` may also be supplied together for exact pinning plus CA/trust validation. An optional CRL directory can be added with a trust store:
795
+
796
+ ```bash
797
+ --trust-store ./pki/trusted \
798
+ --crl-store ./pki/crl
799
+ ```
800
+
801
+ DevAgent accepts the common certificate formats customers encounter in OPC UA, Windows/enterprise PKI, Ignition, and PLC engineering tools:
802
+
803
+ | Certificate input | Supported formats |
804
+ | --- | --- |
805
+ | Client application certificate | `.der`, `.pem`, `.cer`, `.crt`, `.pfx`, `.p12` |
806
+ | Pinned server certificate | `.der`, `.pem`, `.cer`, `.crt`, `.pfx`, `.p12` |
807
+ | Trust-store certificates / CA roots | `.der`, `.pem`, `.cer`, `.crt`, `.pfx`, `.p12` |
808
+ | X.509 user certificate | `.der`, `.pem`, `.cer`, `.crt`, `.pfx`, `.p12` |
809
+ | CRL | `.der`, `.pem`, `.crl` |
810
+
811
+ `.cer` and `.crt` are detected from their content, so either DER-encoded or PEM-encoded certificate files are accepted. A `.pfx/.p12` bundle may contain both the certificate and its private key, so a separate key file is not required for that identity.
812
+
813
+ Example password-protected application `.pfx`:
814
+
815
+ ```bash
816
+ export DEVAGENT_PFX_PASSWORD='...'
817
+ export PLC_OPCUA_PASSWORD='...'
818
+
819
+ devagent live assist \
820
+ --project-folder /path/to/customer-line1 \
821
+ --primary-project plc/Line1.L5X \
822
+ --endpoint opc.tcp://plc01.factory.local:4840/ \
823
+ --security-policy Basic256Sha256 \
824
+ --security-mode SignAndEncrypt \
825
+ --client-certificate ./pki/devagent-client.pfx \
826
+ --private-key-password-env DEVAGENT_PFX_PASSWORD \
827
+ --trust-store ./pki/trusted \
828
+ --username devagent_reader \
829
+ --password-env PLC_OPCUA_PASSWORD
830
+ ```
831
+
832
+ There is intentionally no `--client-private-key` above because the private key is inside the PKCS#12 bundle.
833
+
834
+ OPC UA **application identity** and **X.509 user identity** are different concepts. `--client-certificate` identifies the DevAgent OPC UA application/SecureChannel; `--user-certificate` is an optional certificate-based user login for the Session. For a server that uses X.509 user authentication:
835
+
836
+ ```bash
837
+ devagent live assist \
838
+ --project-folder /path/to/customer-line1 \
839
+ --primary-project plc/Line1.L5X \
840
+ --endpoint opc.tcp://plc01.factory.local:4840/ \
841
+ --security-policy Basic256Sha256 \
842
+ --security-mode SignAndEncrypt \
843
+ --client-certificate ./pki/devagent-app.der \
844
+ --client-private-key ./pki/devagent-app-key.pem \
845
+ --trust-store ./pki/trusted \
846
+ --user-certificate ./pki/operator-user.der \
847
+ --user-private-key ./pki/operator-user-key.pem
848
+ ```
849
+
850
+ If the X.509 user identity is a `.pfx/.p12` containing its private key, use `--user-certificate` plus `--user-private-key-password-env` and omit `--user-private-key`.
851
+
852
+ Passwords and PKCS#12/key passwords are referenced through environment variables; do not put literal secrets on the command line or in commissioning JSON.
853
+
854
+ Modern executable secure-channel policies include `Basic256Sha256`, `Aes128_Sha256_RsaOaep` / `Aes128Sha256RsaOaep`, and `Aes256_Sha256_RsaPss` / `Aes256Sha256RsaPss`, with `Sign` or `SignAndEncrypt`. `Basic128Rsa15` and `Basic256` remain deprecated compatibility profiles. Recognized ECC policies and IssuedToken/JWT profiles are reported as runtime-unavailable rather than silently downgraded.
855
+
856
+ For the complete profile matrix, trust-store/CRL rules, PKCS#12 password options, exact-pin behavior, aliases, multi-PLC commissioning JSON, and unsupported-runtime boundaries, see **[DevAgent Live OPC UA Connection Profiles V1](docs/live/opcua-connection-profiles-v1.md)**.
857
+
858
+ ### 8. Connect to a real customer/site project
859
+
860
+ A typical handoff workspace can contain one authoritative PLC engineering export plus supplemental engineering files:
861
+
862
+ ```text
863
+ customer-line1/
864
+ ├── plc/
865
+ │ └── Line1.L5X
866
+ ├── io/
867
+ │ └── IO_List.csv
868
+ ├── tags/
869
+ │ └── Tag_Descriptions.xlsx
870
+ ├── requirements/
871
+ │ └── FDS.md
872
+ ├── fat/
873
+ │ └── FAT_tests.csv
874
+ └── drawings/
875
+ └── conveyor_layout.pdf
876
+ ```
877
+
878
+ Example real-site command:
879
+
880
+ ```bash
881
+ devagent live assist \
882
+ --project-folder /path/to/customer-line1 \
883
+ --primary-project plc/Line1.L5X \
884
+ --endpoint opc.tcp://192.168.10.20:4840/ \
885
+ --history-seconds 900 \
886
+ --history-poll-seconds 1 \
887
+ --history-max-tags 128 \
888
+ --ai \
889
+ --provider openai \
890
+ --model YOUR_OPENAI_MODEL
891
+ ```
892
+
893
+ Supported authoritative engineering surfaces remain vendor-specific: Rockwell Studio 5000 `.L5X`, supported Siemens TIA exported source/XML bundles, and supported Schneider Control Expert/Unity Pro XML exchange exports with `.XEF` preferred. Supplemental files help provide auditable engineering context but do not silently override canonical PLC logic.
894
+
895
+ For project-folder behavior and authority boundaries, see **[DevAgent Live Project Folder Intake V1](docs/live/project-folder-intake-v1.md)**.
896
+
897
+ ### 9. Read-only safety boundary
898
+
899
+ DevAgent Live is deliberately read only:
900
+
901
+ ```text
902
+ READ ONLY
903
+ no write
904
+ no force
905
+ no reset
906
+ no bypass
907
+ no upload / download
908
+ no mode change
909
+ no start / stop control
910
+ ```
911
+
912
+ The LLM is used only for bounded language interpretation/explanation. It cannot turn model confidence into PLC truth, invent a valid target, or authorize a PLC control action. Deterministic control/write guards execute before semantic routing.
913
+
914
+ The Live diagnosis stack can use supported canonical engineering evidence for Boolean logic, recursive dependencies, timers/counters/state machines, numeric/analog comparisons, one-shot/latch context, handshakes, AOI/FB context, fault-code observations, sequencers, motion/PID context, and UDT/array structure context. Unsupported, partial, source-protected, ambiguous, stateful-history-dependent, or untrusted regions remain limited/indeterminate instead of being guessed.
915
+
916
+ Useful Live commands include:
917
+
918
+ ```bash
919
+ devagent live --help
920
+ devagent live doctor --help
921
+ devagent live probe --help
922
+ devagent live browse --help
923
+ devagent live read --help
924
+ devagent live snapshot --help
925
+ devagent live watch --help
926
+ devagent live plan --help
927
+ devagent live commission --help
928
+ devagent live assist --help
929
+ devagent live qualify --help
930
+ devagent live vendor-qualify --help
931
+ devagent live soak --help
932
+ devagent live readiness --help
933
+ devagent live commercial-readiness --help
934
+ ```
935
+
936
+ Commercial V1 field qualification remains evidence-driven. Real runtime/vendor endpoints and the required soak/doctor artifacts must pass; simulator or missing runtime evidence cannot be converted into a production PASS. See **[DevAgent Live Commercial V1 Qualification Runbook](docs/live/commercial-v1-runbook.md)**.
423
937
 
424
938
  ## Practical examples
425
939
 
@@ -537,6 +1051,7 @@ devagent doctor
537
1051
  devagent models
538
1052
  devagent status
539
1053
  devagent plc --help
1054
+ devagent live --help
540
1055
  devagent benchmark --help
541
1056
  ```
542
1057
 
@@ -574,7 +1089,7 @@ A truthful conservative result is preferable to a false `VERIFIED`.
574
1089
 
575
1090
  ## Safety boundary
576
1091
 
577
- DevAgent uses defense-in-depth controls around repository modification, command execution, and publishing:
1092
+ DevAgent uses defense-in-depth controls around repository modification, command execution, publishing, and industrial runtime evidence:
578
1093
 
579
1094
  - external isolated worktrees for clean repositories by default;
580
1095
  - dirty tracked and real untracked developer files are protected;
@@ -588,7 +1103,9 @@ DevAgent uses defense-in-depth controls around repository modification, command
588
1103
  - only reviewed changed paths are staged;
589
1104
  - remote branch state is captured and rechecked to block publication races;
590
1105
  - protected targets are refused and force push is never used;
591
- - no runtime PR, merge, rebase, force-push, or deployment automation.
1106
+ - no runtime PR, merge, rebase, force-push, or deployment automation;
1107
+ - DevAgent Live exposes no PLC write/force/reset/bypass/upload/download/mode-change/start-stop control surface;
1108
+ - DevAgent Live uses trusted-current/freshness/reconciliation gates before runtime values can support definitive commissioning conclusions.
592
1109
 
593
1110
  On Linux, DevAgent can execute engineering commands inside a bubblewrap-based operating-system sandbox. Production qualification exercises required sandbox mode with network access denied. Required mode fails closed when isolation cannot be established rather than silently falling back. Review the report and pushed branch before integrating customer or production code: sandboxing reduces execution risk, but it does not make arbitrary generated changes universally safe.
594
1111
 
@@ -656,6 +1173,20 @@ Production CI also runs Python 3.10/3.11/3.12, a clean wheel build/install, real
656
1173
 
657
1174
  See [docs/production-readiness.md](docs/production-readiness.md) for the project's earlier readiness assessment and its explicit limitations.
658
1175
 
1176
+ ### DevAgent Live commercial qualification
1177
+
1178
+ DevAgent Live has a separate field-readiness contract because onsite OPC UA behavior cannot be proven by software/static fixtures alone. Commercial V1 requires five evidence gates:
1179
+
1180
+ ```text
1181
+ CV1-001 Real OPC UA LQ-001..LQ-014 = 14 PASS / 0 FAIL / 0 BLOCKED
1182
+ CV1-002 Real Rockwell + Siemens + Schneider endpoint qualification
1183
+ CV1-003 Deterministic stateful / sequence diagnosis contract
1184
+ CV1-004 Trusted historical commissioning timeline contract
1185
+ CV1-005 Production doctor PASS + real read-only soak >= 8 hours
1186
+ ```
1187
+
1188
+ Missing real runtime evidence remains `BLOCKED`; an inconsistent or below-contract artifact is `FAIL`. A simulator is useful for development/runtime validation but does not certify a real vendor endpoint. See [docs/live/commercial-v1-runbook.md](docs/live/commercial-v1-runbook.md).
1189
+
659
1190
  ## Provider architecture
660
1191
 
661
1192
  Currently supported:
@@ -712,11 +1243,13 @@ DevAgent 0.8.6 is **beta software with a verified core release baseline**. The e
712
1243
 
713
1244
  The current core includes evidence-backed `VERIFIED` / `PARTIALLY_VERIFIED` / `BLOCKED` outcomes, backup-first editing, isolated worktrees, bounded structural file operations, repository-native verification, independent review, safe branch publication, provider/model choice, Java and .NET engineering discovery/execution, SQLite migration forward/rollback verification, large-monorepo deep-manifest discovery, bounded parallel agents, repository-local skills, foreground automations, Linux OS sandboxing, bounded browser/local-UI verification, and real-provider structured-contract benchmarking.
714
1245
 
715
- Current `main` also includes vendor-dispatched PLC engineering review for **Rockwell Studio 5000 full-project `.L5X`** and **Siemens TIA Portal exported engineering artifacts**, with separate production qualification workflows and fail-closed evidence boundaries. The Siemens qualification is cumulative through V9 and covers the bounded supported SCL/LAD/FBD, call/interface, state/interlock/recovery, canonical identity/type, support-accounting, malformed-input, revision, and large-project fixture surfaces. Unsupported, protected, ambiguous, or runtime-dependent behavior is withheld from static proof and routed to explicit limitations and engineer-executed FAT rather than silently reported as verified.
1246
+ Current `main` also includes vendor-dispatched **DevAgent PLC** engineering review for **Rockwell Studio 5000 full-project `.L5X`**, **Siemens TIA Portal exported engineering artifacts**, and **Schneider Electric EcoStruxure Control Expert / Unity Pro XML engineering exports with `.XEF` preferred**. All three feed the canonical PLC engineering/review/FAT/report pipeline while preserving vendor-specific proof boundaries. Siemens qualification is cumulative through its V9 support-accounting stack. Schneider includes V9 support closeout plus additive V10 real-ST local-action modeling and the PLC Report Contract V1, while unsupported or stateful/runtime-dependent regions remain explicitly `PARTIAL`, `OPAQUE`, `PROTECTED`, or FAT-gated. Rockwell remains the mature Studio 5000 path. These are bounded static engineering capabilities; they do not claim simulator, HIL, field wiring, process physics, or real-controller execution unless corresponding runtime evidence is supplied.
1247
+
1248
+ Current `main` also includes the independent **DevAgent Live** onsite product branch. Live consumes canonical PLC engineering context through a read-only adapter contract without modifying DevAgent PLC authority, reconciles engineering tags to OPC UA runtime nodes, applies trust/freshness/replay gates, and supports direct/recursive blocker diagnosis, stateful and historical context, numeric/analog comparisons, one-shot/latch awareness, handshake diagnosis, AOI/FB context, fault-code observations, generic sequencer context, motion/PID context, UDT/array structure context, and bounded conversational whole-system follow-ups that re-read current deterministic health before explanation and final-revalidate slow AI wording. Unsupported or insufficiently evidenced behavior remains bounded/indeterminate. Live's Commercial V1 field-readiness gate still requires real OPC UA 14/14, real three-vendor endpoint evidence, production doctor evidence, and a qualifying read-only soak; merged feature coverage is not itself a claim of completed field certification.
716
1249
 
717
- These results are **bounded engineering claims**, not universal-correctness or market-superiority claims. They are tied to explicit qualification cases, pinned revisions, deterministic fixtures/external oracles where applicable, and the environments actually exercised by CI.
1250
+ These results are **bounded engineering claims**, not universal-correctness or market-superiority claims. They are tied to explicit qualification cases, pinned revisions, deterministic fixtures/external oracles where applicable, and the environments actually exercised by CI or documented local qualification.
718
1251
 
719
- Remaining work is primarily **breadth and external validation**, not missing core architecture: a larger public corpus of pinned upstream repositories and tasks; broader browser/UI coverage across dynamic applications and multiple browser environments; a wider Java/Gradle, .NET test-framework, and PostgreSQL/MySQL migration matrix beyond the current qualified fixtures; larger and more diverse monorepo stress cases beyond the current >12,000-file deep-manifest case; more real-world multi-agent workload studies; continuous paid real-provider benchmarking across a broader set of model/provider combinations; and additional real license-safe Siemens/Rockwell customer export qualification beyond deterministic repository fixtures. GitHub branch protection/rulesets are external repository settings and must be configured separately; DevAgent does not claim to configure them itself.
1252
+ Remaining work is primarily **breadth and external validation**, not missing core architecture: a larger public corpus of pinned upstream repositories and tasks; broader browser/UI coverage across dynamic applications and multiple browser environments; a wider Java/Gradle, .NET test-framework, and PostgreSQL/MySQL migration matrix beyond the current qualified fixtures; larger and more diverse monorepo stress cases beyond the current >12,000-file deep-manifest case; more real-world multi-agent workload studies; continuous paid real-provider benchmarking across a broader set of model/provider combinations; additional real license-safe Siemens/Rockwell/Schneider PLC export qualification beyond deterministic repository fixtures and official/demo interoperability samples; and real DevAgent Live commissioning qualification across representative vendor-supported OPC UA endpoints and longer site-like soak runs. GitHub branch protection/rulesets are external repository settings and must be configured separately; DevAgent does not claim to configure them itself.
720
1253
 
721
1254
  The project intentionally prioritizes trustworthy outcomes, reproducible evidence, and safe engineering behavior over feature count or unsupported "best agent" claims.
722
1255
 
@@ -729,7 +1262,8 @@ If DevAgent saves you engineering time or helps you deliver safer, better-verifi
729
1262
  Your sponsorship helps fund:
730
1263
 
731
1264
  - new engineering and PLC capabilities;
732
- - Siemens and Rockwell verification;
1265
+ - Siemens, Rockwell, and Schneider verification;
1266
+ - DevAgent Live onsite commissioning qualification;
733
1267
  - additional AI provider support;
734
1268
  - regression and production qualification;
735
1269
  - documentation and examples;
@@ -739,7 +1273,7 @@ Your sponsorship helps fund:
739
1273
 
740
1274
  ## Contributing
741
1275
 
742
- Contributions are welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a pull request. Changes to safety, verification, reporting, acceptance semantics, providers, or bounded publication behavior should include regression evidence and must not give model-generated actions unrestricted Git publishing authority.
1276
+ Contributions are welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a pull request. Changes to safety, verification, reporting, acceptance semantics, providers, bounded publication behavior, PLC engineering proof boundaries, or DevAgent Live trust/read-only behavior should include regression evidence and must not give model-generated actions unrestricted Git or PLC control authority.
743
1277
 
744
1278
  ## Security
745
1279