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.
- {devagent_ai-0.8.7/devagent_ai.egg-info → devagent_ai-0.8.12}/PKG-INFO +552 -18
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/README.md +549 -18
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/__init__.py +1 -1
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/entrypoint.py +12 -0
- devagent_ai-0.8.12/devagent/live/__init__.py +374 -0
- devagent_ai-0.8.12/devagent/live/_commercial_realtime_impl.py +1151 -0
- devagent_ai-0.8.12/devagent/live/advanced_assistant.py +603 -0
- devagent_ai-0.8.12/devagent/live/advanced_semantics.py +567 -0
- devagent_ai-0.8.12/devagent/live/agent_integration.py +482 -0
- devagent_ai-0.8.12/devagent/live/assist_cli.py +476 -0
- devagent_ai-0.8.12/devagent/live/assist_production_cli.py +91 -0
- devagent_ai-0.8.12/devagent/live/assistant.py +458 -0
- devagent_ai-0.8.12/devagent/live/certificate_material.py +174 -0
- devagent_ai-0.8.12/devagent/live/cli.py +747 -0
- devagent_ai-0.8.12/devagent/live/cli_security.py +182 -0
- devagent_ai-0.8.12/devagent/live/commercial_assistant.py +102 -0
- devagent_ai-0.8.12/devagent/live/commercial_readiness.py +539 -0
- devagent_ai-0.8.12/devagent/live/commercial_realtime.py +24 -0
- devagent_ai-0.8.12/devagent/live/commission.py +595 -0
- devagent_ai-0.8.12/devagent/live/connection_guidance.py +404 -0
- devagent_ai-0.8.12/devagent/live/control_guard.py +59 -0
- devagent_ai-0.8.12/devagent/live/diagnosis.py +663 -0
- devagent_ai-0.8.12/devagent/live/diagnosis_guard.py +91 -0
- devagent_ai-0.8.12/devagent/live/doctor.py +334 -0
- devagent_ai-0.8.12/devagent/live/engineering_context.py +394 -0
- devagent_ai-0.8.12/devagent/live/errors.py +17 -0
- devagent_ai-0.8.12/devagent/live/history.py +605 -0
- devagent_ai-0.8.12/devagent/live/manager.py +387 -0
- devagent_ai-0.8.12/devagent/live/models.py +70 -0
- devagent_ai-0.8.12/devagent/live/opcua_client.py +950 -0
- devagent_ai-0.8.12/devagent/live/plan.py +386 -0
- devagent_ai-0.8.12/devagent/live/production_integration.py +418 -0
- devagent_ai-0.8.12/devagent/live/production_realtime.py +325 -0
- devagent_ai-0.8.12/devagent/live/project_folder.py +344 -0
- devagent_ai-0.8.12/devagent/live/qa.py +460 -0
- devagent_ai-0.8.12/devagent/live/qualification.py +644 -0
- devagent_ai-0.8.12/devagent/live/question_resolution.py +46 -0
- devagent_ai-0.8.12/devagent/live/readiness.py +515 -0
- devagent_ai-0.8.12/devagent/live/realtime_assistant.py +595 -0
- devagent_ai-0.8.12/devagent/live/realtime_manager.py +619 -0
- devagent_ai-0.8.12/devagent/live/reconciled_evidence.py +158 -0
- devagent_ai-0.8.12/devagent/live/recursive_assistant.py +565 -0
- devagent_ai-0.8.12/devagent/live/recursive_diagnosis.py +515 -0
- devagent_ai-0.8.12/devagent/live/runtime_environment.py +60 -0
- devagent_ai-0.8.12/devagent/live/security.py +332 -0
- devagent_ai-0.8.12/devagent/live/semantic_assistant.py +477 -0
- devagent_ai-0.8.12/devagent/live/semantic_intent.py +296 -0
- devagent_ai-0.8.12/devagent/live/sim_cli.py +107 -0
- devagent_ai-0.8.12/devagent/live/simulator.py +439 -0
- devagent_ai-0.8.12/devagent/live/simulator_scenarios.py +180 -0
- devagent_ai-0.8.12/devagent/live/soak.py +445 -0
- devagent_ai-0.8.12/devagent/live/stateful_assistant.py +103 -0
- devagent_ai-0.8.12/devagent/live/stateful_context.py +496 -0
- devagent_ai-0.8.12/devagent/live/system_health.py +635 -0
- devagent_ai-0.8.12/devagent/live/tag_reconciliation.py +710 -0
- devagent_ai-0.8.12/devagent/live/vendor_qualification.py +297 -0
- devagent_ai-0.8.12/devagent/live/workflow.py +296 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/__init__.py +49 -1
- devagent_ai-0.8.12/devagent/plc/plc_dispatch.py +66 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/professional_report_install_v14.py +5 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/professional_report_v14.py +107 -6
- devagent_ai-0.8.12/devagent/plc/report_contract_console_v1.py +75 -0
- devagent_ai-0.8.12/devagent/plc/report_contract_v1.py +188 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_stateful_runtime.py +1 -1
- devagent_ai-0.8.12/devagent/plc/schneider_call_graph_v3.py +1660 -0
- devagent_ai-0.8.12/devagent/plc/schneider_cli_install_v1.py +97 -0
- devagent_ai-0.8.12/devagent/plc/schneider_closeout_v9.py +800 -0
- devagent_ai-0.8.12/devagent/plc/schneider_control_expert_v1.py +836 -0
- devagent_ai-0.8.12/devagent/plc/schneider_fault_recovery_v7.py +1037 -0
- devagent_ai-0.8.12/devagent/plc/schneider_graphical_v4.py +1329 -0
- devagent_ai-0.8.12/devagent/plc/schneider_graphical_writer_hardening_v4.py +87 -0
- devagent_ai-0.8.12/devagent/plc/schneider_identity_hardening_v8.py +220 -0
- devagent_ai-0.8.12/devagent/plc/schneider_identity_types_v8.py +932 -0
- devagent_ai-0.8.12/devagent/plc/schneider_integration_v1.py +405 -0
- devagent_ai-0.8.12/devagent/plc/schneider_interlock_permissive_hardening_v6.py +99 -0
- devagent_ai-0.8.12/devagent/plc/schneider_interlock_permissive_v6.py +1204 -0
- devagent_ai-0.8.12/devagent/plc/schneider_production_readiness.py +448 -0
- devagent_ai-0.8.12/devagent/plc/schneider_real_export_audit_hardening_v9.py +113 -0
- devagent_ai-0.8.12/devagent/plc/schneider_real_st_actions_v10.py +391 -0
- devagent_ai-0.8.12/devagent/plc/schneider_real_st_gap_analysis.py +256 -0
- devagent_ai-0.8.12/devagent/plc/schneider_regression_hardening_v9.py +207 -0
- devagent_ai-0.8.12/devagent/plc/schneider_report_install_v1.py +152 -0
- devagent_ai-0.8.12/devagent/plc/schneider_st_control_flow_v2.py +858 -0
- devagent_ai-0.8.12/devagent/plc/schneider_state_machine_hardening_v5.py +300 -0
- devagent_ai-0.8.12/devagent/plc/schneider_state_machine_v5.py +1492 -0
- devagent_ai-0.8.12/devagent/plc/schneider_tag_merge_v1.py +47 -0
- devagent_ai-0.8.12/devagent/plc/schneider_v5_bindings_v1.py +118 -0
- devagent_ai-0.8.12/devagent/plc/schneider_v8_compat_hardening.py +146 -0
- devagent_ai-0.8.12/devagent/plc/schneider_v9_hardening.py +69 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/signature_trust.py +1 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/top_engineering_risks_v1.py +15 -6
- {devagent_ai-0.8.7 → devagent_ai-0.8.12/devagent_ai.egg-info}/PKG-INFO +552 -18
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent_ai.egg-info/SOURCES.txt +187 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent_ai.egg-info/requires.txt +4 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/pyproject.toml +3 -2
- devagent_ai-0.8.12/tests/test_live_advanced_contract_v1.py +53 -0
- devagent_ai-0.8.12/tests/test_live_advanced_hardening_v1.py +84 -0
- devagent_ai-0.8.12/tests/test_live_advanced_review_fixes_v1.py +137 -0
- devagent_ai-0.8.12/tests/test_live_advanced_rll_v1.py +81 -0
- devagent_ai-0.8.12/tests/test_live_advanced_scoped_tag_v1.py +60 -0
- devagent_ai-0.8.12/tests/test_live_advanced_semantics_v1.py +280 -0
- devagent_ai-0.8.12/tests/test_live_agent_integration.py +374 -0
- devagent_ai-0.8.12/tests/test_live_assist_cli_v1.py +117 -0
- devagent_ai-0.8.12/tests/test_live_certificate_format_compat.py +335 -0
- devagent_ai-0.8.12/tests/test_live_commercial_cli_v1.py +141 -0
- devagent_ai-0.8.12/tests/test_live_commercial_readiness_v1.py +227 -0
- devagent_ai-0.8.12/tests/test_live_commission_command.py +162 -0
- devagent_ai-0.8.12/tests/test_live_commission_config.py +319 -0
- devagent_ai-0.8.12/tests/test_live_commission_security_profiles.py +81 -0
- devagent_ai-0.8.12/tests/test_live_commission_summary_redaction.py +59 -0
- devagent_ai-0.8.12/tests/test_live_commissioning_qa_v1.py +414 -0
- devagent_ai-0.8.12/tests/test_live_commissioning_workflow.py +425 -0
- devagent_ai-0.8.12/tests/test_live_connection_guidance.py +257 -0
- devagent_ai-0.8.12/tests/test_live_control_guard_v1.py +63 -0
- devagent_ai-0.8.12/tests/test_live_conversation_final_review_guards_v2.py +123 -0
- devagent_ai-0.8.12/tests/test_live_diagnosis_guard_v1.py +105 -0
- devagent_ai-0.8.12/tests/test_live_doctor_soak_runtime_v1.py +174 -0
- devagent_ai-0.8.12/tests/test_live_entrypoint.py +21 -0
- devagent_ai-0.8.12/tests/test_live_history_question_defaults_v1.py +19 -0
- devagent_ai-0.8.12/tests/test_live_insecure_username_profile.py +102 -0
- devagent_ai-0.8.12/tests/test_live_manager.py +390 -0
- devagent_ai-0.8.12/tests/test_live_models.py +34 -0
- devagent_ai-0.8.12/tests/test_live_multi_plc_integration.py +96 -0
- devagent_ai-0.8.12/tests/test_live_opcua.py +207 -0
- devagent_ai-0.8.12/tests/test_live_opcua_certificate_format_integration.py +212 -0
- devagent_ai-0.8.12/tests/test_live_opcua_profile_runtime_integration.py +233 -0
- devagent_ai-0.8.12/tests/test_live_opcua_security_integration.py +207 -0
- devagent_ai-0.8.12/tests/test_live_opcua_trust_store_integration.py +234 -0
- devagent_ai-0.8.12/tests/test_live_pkcs12_server_pin.py +104 -0
- devagent_ai-0.8.12/tests/test_live_plan_command.py +153 -0
- devagent_ai-0.8.12/tests/test_live_plan_generator.py +255 -0
- devagent_ai-0.8.12/tests/test_live_probe_guidance_integration.py +39 -0
- devagent_ai-0.8.12/tests/test_live_probe_status_output.py +71 -0
- devagent_ai-0.8.12/tests/test_live_production_integration.py +274 -0
- devagent_ai-0.8.12/tests/test_live_production_readiness.py +173 -0
- devagent_ai-0.8.12/tests/test_live_production_readiness_command.py +132 -0
- devagent_ai-0.8.12/tests/test_live_project_folder_example_v1.py +20 -0
- devagent_ai-0.8.12/tests/test_live_project_folder_intake_v1.py +124 -0
- devagent_ai-0.8.12/tests/test_live_realistic_agent_matrix_v1.py +121 -0
- devagent_ai-0.8.12/tests/test_live_realistic_agent_qa_v1.py +122 -0
- devagent_ai-0.8.12/tests/test_live_realtime_conversation_context_v1.py +432 -0
- devagent_ai-0.8.12/tests/test_live_realtime_evidence_integrity_integration_v2.py +144 -0
- devagent_ai-0.8.12/tests/test_live_realtime_evidence_integrity_regressions_v2.py +276 -0
- devagent_ai-0.8.12/tests/test_live_realtime_evidence_integrity_v2.py +324 -0
- devagent_ai-0.8.12/tests/test_live_realtime_evidence_v1.py +484 -0
- devagent_ai-0.8.12/tests/test_live_realtime_final_review_regressions_v2.py +360 -0
- devagent_ai-0.8.12/tests/test_live_realtime_race_hardening_v1.py +255 -0
- devagent_ai-0.8.12/tests/test_live_realtime_reconfiguration_integrity_v2.py +85 -0
- devagent_ai-0.8.12/tests/test_live_realtime_revalidation_v1.py +258 -0
- devagent_ai-0.8.12/tests/test_live_reconciled_evidence.py +204 -0
- devagent_ai-0.8.12/tests/test_live_reconciled_evidence_scope.py +108 -0
- devagent_ai-0.8.12/tests/test_live_reconnect_unit.py +321 -0
- devagent_ai-0.8.12/tests/test_live_recursive_assistant_contract_v1.py +78 -0
- devagent_ai-0.8.12/tests/test_live_recursive_diagnosis_v1.py +252 -0
- devagent_ai-0.8.12/tests/test_live_release_qualification.py +192 -0
- devagent_ai-0.8.12/tests/test_live_release_qualification_command.py +72 -0
- devagent_ai-0.8.12/tests/test_live_release_qualification_hardening.py +64 -0
- devagent_ai-0.8.12/tests/test_live_review_hardening_v1.py +96 -0
- devagent_ai-0.8.12/tests/test_live_security.py +458 -0
- devagent_ai-0.8.12/tests/test_live_security_backward_compat.py +29 -0
- devagent_ai-0.8.12/tests/test_live_security_exception_chain.py +79 -0
- devagent_ai-0.8.12/tests/test_live_semantic_intent_router_v2.py +289 -0
- devagent_ai-0.8.12/tests/test_live_semantic_intent_router_v2_p1_regressions.py +452 -0
- devagent_ai-0.8.12/tests/test_live_semantic_router_observability_v1.py +33 -0
- devagent_ai-0.8.12/tests/test_live_server_hostname_validation.py +67 -0
- devagent_ai-0.8.12/tests/test_live_sim_matrix_cli_v1.py +27 -0
- devagent_ai-0.8.12/tests/test_live_simulator_demo_project_v1.py +52 -0
- devagent_ai-0.8.12/tests/test_live_simulator_scenarios_v1.py +128 -0
- devagent_ai-0.8.12/tests/test_live_simulator_security_unit.py +44 -0
- devagent_ai-0.8.12/tests/test_live_stateful_failclosed_v1.py +39 -0
- devagent_ai-0.8.12/tests/test_live_stateful_history_v1.py +269 -0
- devagent_ai-0.8.12/tests/test_live_stateful_missing_rungs_v1.py +16 -0
- devagent_ai-0.8.12/tests/test_live_system_health_fail_closed_v1.py +122 -0
- devagent_ai-0.8.12/tests/test_live_system_health_v1.py +315 -0
- devagent_ai-0.8.12/tests/test_live_system_master_overview_v1.py +134 -0
- devagent_ai-0.8.12/tests/test_live_system_master_routing_v1.py +110 -0
- devagent_ai-0.8.12/tests/test_live_system_master_simulator_integration_v1.py +109 -0
- devagent_ai-0.8.12/tests/test_live_tag_reconciliation.py +399 -0
- devagent_ai-0.8.12/tests/test_live_trust_store.py +267 -0
- devagent_ai-0.8.12/tests/test_live_vendor_soak_v1.py +178 -0
- devagent_ai-0.8.12/tests/test_live_workflow_public_api.py +30 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_cli_live_progress.py +40 -0
- devagent_ai-0.8.12/tests/test_plc_report_contract_v1.py +169 -0
- devagent_ai-0.8.12/tests/test_plc_schneider_core.py +143 -0
- devagent_ai-0.8.12/tests/test_plc_schneider_production.py +122 -0
- devagent_ai-0.8.12/tests/test_plc_schneider_production_readiness.py +268 -0
- devagent_ai-0.8.12/tests/test_plc_schneider_production_readiness_hardening.py +102 -0
- devagent_ai-0.8.12/tests/test_plc_schneider_real_st_actions_v10.py +146 -0
- devagent_ai-0.8.12/tests/test_plc_schneider_real_st_gap_analysis.py +84 -0
- devagent_ai-0.8.12/tests/test_plc_schneider_regression_hardening.py +147 -0
- devagent_ai-0.8.12/tests/test_plc_schneider_v2.py +314 -0
- devagent_ai-0.8.12/tests/test_plc_schneider_v3.py +315 -0
- devagent_ai-0.8.12/tests/test_plc_schneider_v4.py +292 -0
- devagent_ai-0.8.12/tests/test_plc_schneider_v4_writer_hardening.py +91 -0
- devagent_ai-0.8.12/tests/test_plc_schneider_v5.py +374 -0
- devagent_ai-0.8.12/tests/test_plc_schneider_v5_hardening.py +249 -0
- devagent_ai-0.8.12/tests/test_plc_schneider_v6.py +362 -0
- devagent_ai-0.8.12/tests/test_plc_schneider_v6_hardening.py +52 -0
- devagent_ai-0.8.12/tests/test_plc_schneider_v7.py +319 -0
- devagent_ai-0.8.12/tests/test_plc_schneider_v8.py +281 -0
- devagent_ai-0.8.12/tests/test_plc_schneider_v8_downstream_hardening.py +71 -0
- devagent_ai-0.8.12/tests/test_plc_schneider_v9.py +201 -0
- devagent_ai-0.8.12/tests/test_plc_schneider_v9_hardening.py +137 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_production_v040.py +1 -1
- devagent_ai-0.8.7/devagent/plc/plc_dispatch.py +0 -41
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/LICENSE +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/NOTICE +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/agent/__init__.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/agent/llm.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/agent/loop.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/agent/memory.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/agent/prompts.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/agent/tools.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/__main__.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/artifacts.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/automations.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/autonomy.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/browser.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/cli.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/config.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/discovery.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/evaluation.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/memory.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/models.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/orchestrator.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/agent_harness_install_v15.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/agent_harness_v15.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/analysis.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/cli.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/execution_trust.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/fat_procedure_v12.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/four_contract_v13.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/inspect_cli.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/models.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_ai.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_evidence.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_models.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_readiness.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_readiness_v5.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_regression.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_report.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_review.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_utils.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_v5.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/production_verification.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/release_policy.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/report.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/report_clarity_install_v16.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/report_levels.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/requirements.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_action_requirements.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_alias_hardening.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_branch_coverage_v16.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_closeout.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_closeout_gate_hardening.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_compare.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_compare_hardening.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_compare_reachability_hardening.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_core_review_v12.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_echo.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_echo_gate.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_entrypoint_hardening.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_general_actions.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_l5x.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_motion_runtime_v11.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_regression_case_compat_v12.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_regression_evidence_hardening.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_requirement_hardening.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_risk_hardening.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_semantic_capabilities.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_st_case_v11.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_st_v10.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_standard_catalog.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_state_machine_v11.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_structure.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_system_service_install_v17.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_system_service_report_install_v17.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_system_service_v17.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/rockwell_v10_semantics.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/safe_analysis.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/semantic_coverage.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/semantic_coverage_report.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_call_graph_v3.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_cli_install_v1.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_closeout_v9.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_flgnet_extended_hardening_v4.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_flgnet_extended_v4.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_flgnet_hardening_v4.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_flgnet_v4.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_identity_types_v8.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_integration_v1.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_interlock_permissive_v6.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_recovery_v7.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_scl_control_flow_hardening_v2.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_scl_control_flow_v2.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_state_machine_hardening_v5.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_state_machine_v5.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_tia_v1.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_v5_bindings_v1.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_v6_v7_token_hardening.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/siemens_v8_v9_compat_hardening.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/trusted_snapshot.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/v2_guardrails.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/plc/v2_semantics.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/provider_benchmark.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/providers.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/qualification.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/realworld.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/report.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/retrieval.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/routing.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/runtime.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/safety.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/skills.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/source_control.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/state_machine.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/tasking.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/technical_review.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/workspace.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent/worktree.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent_ai.egg-info/dependency_links.txt +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent_ai.egg-info/entry_points.txt +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/devagent_ai.egg-info/top_level.txt +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/setup.cfg +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_acceptance_contract.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_benchmark_catalog.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_browser_verification.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_capability_discovery.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_cli.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_cli_progress.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_developer_review_report.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_discovery_memory.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_e2e_fake_provider.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_evaluation_harness.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_evaluation_matrix.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_evaluation_regression_evidence.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_functional_qualification.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_huge_monorepo_v070.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_migration_e2e_v070.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_model_routing.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_multilang_technical_review.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_multistack_devagent_e2e.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_multistack_qualification.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_packaging_metadata.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plan_verification_normalization.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_agent_harness_trace_v15.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_agent_harness_v15.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_execution_trust.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_four_contract_v13.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_product_contract_v12.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_production.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_production_v5.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_release_policy.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_report_levels.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_boolean_alias_proof.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_canonical_risks.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_closeout_v9.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_closeout_v9_guardrails.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_closeout_v9_review_regressions.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_compare_v8.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_compare_v8_aliases.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_compare_v8_hardening.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_compare_v8_identity_assertions.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_compare_v8_review_regressions.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_echo_cli_v6.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_echo_v6.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_hardening.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_semantics_v7.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v1.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v10_action_requirements.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v10_arbitrary_project_qualification.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v10_echo_compatibility.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v10_general_actions.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v10_general_semantics.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v10_inspect_cli.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v10_semantic_coverage.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v10_st_safe_functions.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v10_stateful_runtime.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v11_reporting.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v11_st_motion.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v11_state_machine.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v16_semantic_hardening.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v17_system_service_fat.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v17_system_service_generic.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v2.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v9_entry_edgecases.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v9_final_codex.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v9_merge_gates.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_rockwell_v9_reachable_writers.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_siemens_v1.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_siemens_v2.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_siemens_v3_call_graph.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_siemens_v4_extended.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_siemens_v4_flgnet.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_siemens_v5_state_machine.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_siemens_v6_v7.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_siemens_v8_v9.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_signature_trust.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_top_engineering_risks.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_v5_security_floor.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_plc_v5_toctou.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_preservation_contradiction.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_production_hardening.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_realworld_benchmark.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_requirement_compiler_v082.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_requirement_intelligence_v083.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_retrieval.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_runtime_sandbox.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_safety_workspace.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_source_control_publish.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_structural_devagent_e2e_v070.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_structural_operations.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_structured_provider_contract.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_tasking_state.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_v070_engineering_breadth.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_v080_autonomy.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_v080_provider_benchmark.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_v080_skills_automations.py +0 -0
- {devagent_ai-0.8.7 → devagent_ai-0.8.12}/tests/test_workspace_environment.py +0 -0
- {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.
|
|
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
|
[](https://github.com/tomha85/devagent/actions/workflows/ci.yml)
|
|
40
43
|
[](https://github.com/sponsors/tomha85)
|
|
41
44
|
|
|
42
|
-
**A local, evidence-driven
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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;
|
|
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
|
|
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,
|
|
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
|
|