redeploy 0.2.71__tar.gz → 0.2.73__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.
- {redeploy-0.2.71 → redeploy-0.2.73}/PKG-INFO +39 -7
- {redeploy-0.2.71 → redeploy-0.2.73}/README.md +38 -6
- {redeploy-0.2.71 → redeploy-0.2.73}/pyproject.toml +1 -1
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/__init__.py +1 -1
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/analyze/preflight_schema.py +9 -15
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/analyze/spec_analyzer.py +2 -5
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/exec_.py +3 -7
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy.egg-info/PKG-INFO +39 -7
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/analyze/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/analyze/checkers/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/apply/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/apply/exceptions.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/apply/executor.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/apply/handlers.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/apply/progress.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/apply/rollback.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/apply/state.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/apply/state_apply.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/apply/utils/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/apply/utils/run_container_build.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/audit.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/blueprint/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/blueprint/extractor.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/blueprint/generators/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/blueprint/generators/docker_compose.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/blueprint/generators/migration.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/blueprint/sources/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/blueprint/sources/compose.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/blueprint/sources/hardware.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/blueprint/sources/infra.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/blueprint/sources/migration.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/audit.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/blueprint.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/bump_fix.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/detect.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/device_map.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/device_map_renderers.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/devices.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/diagnose.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/diff.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/export.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/gh_workflow.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/hardware.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/import_.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/init.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/inspect.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/lint.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/mcp_cmd.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/patterns.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/plan_apply.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/plugin.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/probe.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/prompt_cmd.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/push.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/state.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/status.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/target.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/version/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/version/commands.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/version/helpers.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/version/monorepo.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/version/release.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/version/scanner.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/version/utils/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/version/utils/changelog_config.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/version/utils/git_config.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/commands/workflow.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/core.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/display.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli/query.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/cli.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/config_apply/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/config_apply/applier.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/config_apply/handlers/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/config_apply/handlers/display.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/config_apply/loader.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/data_sync.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/detect/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/detect/builtin/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/detect/detector.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/detect/hardware.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/detect/hardware_rules.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/detect/probes.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/detect/remote.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/detect/templates.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/detect/workflow.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/discovery.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/dsl/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/dsl/loader.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/dsl/parser.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/dsl_python/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/dsl_python/context.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/dsl_python/decorators.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/dsl_python/docker_steps.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/dsl_python/exceptions.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/dsl_python/runner.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/dsl_python/steps.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/fleet.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/hardware/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/hardware/config_txt.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/hardware/data/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/hardware/data/hyperpixel.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/hardware/data/official.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/hardware/data/waveshare.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/hardware/fixes.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/hardware/kiosk/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/hardware/kiosk/autostart.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/hardware/kiosk/browsers.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/hardware/kiosk/compositors.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/hardware/kiosk/output_profiles.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/hardware/panels.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/hardware/raspi_config.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/heal/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/heal/decider.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/heal/hint_provider.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/heal/log_writer.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/heal/loop_detector.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/heal/runner.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/heal.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/iac/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/iac/base.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/iac/config_hints.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/iac/docker_compose.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/iac/parsers/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/iac/parsers/compose.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/iac/registry.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/integrations/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/integrations/op3_bridge.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/markpact/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/markpact/compiler.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/markpact/models.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/markpact/parser.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/mcp_server.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/models/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/models/blueprint.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/models/devices.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/models/enums.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/models/hardware.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/models/infra.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/models/manifest.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/models/persisted.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/models/pipeline.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/models/plan.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/models/spec.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/observe.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/parse.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/patterns.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/plan/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/plan/planner.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/plugins/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/plugins/builtin/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/plugins/builtin/browser_reload.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/plugins/builtin/hardware_diagnostic.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/plugins/builtin/notify.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/plugins/builtin/process_control.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/plugins/builtin/systemd_reload.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/schema.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/spec_loader.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/ssh.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/steps/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/steps/docker.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/steps/generic.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/steps/hardware.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/steps/k3s.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/steps/kiosk.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/steps/podman.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/steps/process.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/steps/scm.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/steps/transfer.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_analyze.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_audit.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_cli.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_data_sync.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_discovery.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_dsl.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_examples.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_executor.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_fleet.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_git_integration.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_heal.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_heal_decider.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_hooks.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_iac.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_iac_compose_contract.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_iac_docker_compose_contract.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_manifest.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_markpact_compiler.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_markpact_parser.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_models.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_observe.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_parse.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_patterns.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_planner_edge.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_plugins.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_probes.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_public_api.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_resume.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_security_hardening.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_spec_loader.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_ssh.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_steps_registry.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_templates.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_verify.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_version.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_version_changelog.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_version_cli.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_version_manifest.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_version_sources.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/tests/test_workflow.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/verify.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/version/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/version/bump.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/version/changelog.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/version/commits.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/version/diff.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/version/git_integration.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/version/git_transaction.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/version/manifest.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/version/sources/__init__.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/version/sources/base.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/version/sources/json_.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/version/sources/plain.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/version/sources/regex.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/version/sources/toml_.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/version/sources/yaml_.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/version/transaction.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy/version.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy.egg-info/SOURCES.txt +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy.egg-info/dependency_links.txt +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy.egg-info/entry_points.txt +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy.egg-info/requires.txt +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/redeploy.egg-info/top_level.txt +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/setup.cfg +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/tests/test_blueprint_sources.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/tests/test_blueprint_sources_compose.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/tests/test_cli_gh_workflow.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/tests/test_cli_query.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/tests/test_example_argocd_flux_plugin.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/tests/test_example_gitops_ci_plugin.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/tests/test_example_helm_kustomize_plugin.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/tests/test_hardware_config.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/tests/test_hardware_kiosk.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/tests/test_hardware_rules.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/tests/test_heal_decider.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/tests/test_heal_loop_detector.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/tests/test_iac.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/tests/test_iac_config_hints.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/tests/test_iac_plugin_loading.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/tests/test_import_plugin_template.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/tests/test_parse.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/tests/test_prompt_llm.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/tests/test_redeploy.py +0 -0
- {redeploy-0.2.71 → redeploy-0.2.73}/tests/test_steps_kiosk.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: redeploy
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.73
|
|
4
4
|
Summary: Infrastructure migration toolkit: detect → plan → apply
|
|
5
5
|
Requires-Python: >=3.11
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -32,17 +32,17 @@ Requires-Dist: mcp>=1.0; extra == "mcp"
|
|
|
32
32
|
|
|
33
33
|
## AI Cost Tracking
|
|
34
34
|
|
|
35
|
-
     
|
|
36
|
+
  
|
|
37
37
|
|
|
38
|
-
- 🤖 **LLM usage:** $7.5000 (
|
|
39
|
-
- 👤 **Human dev:** ~$
|
|
38
|
+
- 🤖 **LLM usage:** $7.5000 (94 commits)
|
|
39
|
+
- 👤 **Human dev:** ~$3948 (39.5h @ $100/h, 30min dedup)
|
|
40
40
|
|
|
41
|
-
Generated on 2026-04-
|
|
41
|
+
Generated on 2026-04-24 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
|
|
42
42
|
|
|
43
43
|
---
|
|
44
44
|
|
|
45
|
-
    
|
|
46
46
|
|
|
47
47
|
Infrastructure migration and device deploy toolkit — VPS, Raspberry Pi kiosk, Podman Quadlet, k3s.
|
|
48
48
|
|
|
@@ -1109,6 +1109,38 @@ redeploy blueprint show blueprint.yaml --apply-config blueprint.yaml
|
|
|
1109
1109
|
redeploy blueprint show blueprint.yaml --query "hardware.drm_outputs[0].transform"
|
|
1110
1110
|
```
|
|
1111
1111
|
|
|
1112
|
+
## Dependencies
|
|
1113
|
+
|
|
1114
|
+
Core runtime dependencies:
|
|
1115
|
+
|
|
1116
|
+
| Package | Purpose |
|
|
1117
|
+
|---------|---------|
|
|
1118
|
+
| `pydantic>=2.0` | Data validation and settings |
|
|
1119
|
+
| `pyyaml>=6.0` | YAML parsing/serialization |
|
|
1120
|
+
| `markdown-it-py>=3.0` | Markdown parsing (markpact specs) |
|
|
1121
|
+
| `click>=8.0` | CLI framework |
|
|
1122
|
+
| `loguru>=0.7` | Structured logging |
|
|
1123
|
+
| `paramiko>=3.0` | SSH client |
|
|
1124
|
+
| `httpx>=0.25` | HTTP client |
|
|
1125
|
+
| `rich>=13.0` | Terminal UI |
|
|
1126
|
+
| `jmespath>=1.0` | JSON/YAML query expressions |
|
|
1127
|
+
| `goal>=2.1.0` | Goal tracking |
|
|
1128
|
+
| `costs>=0.1.20` | AI cost tracking |
|
|
1129
|
+
| `pfix>=0.1.60` | Self-healing Python |
|
|
1130
|
+
|
|
1131
|
+
Optional dependencies:
|
|
1132
|
+
|
|
1133
|
+
| Package | Purpose |
|
|
1134
|
+
|---------|---------|
|
|
1135
|
+
| `op3>=0.1.8` | OP3 support |
|
|
1136
|
+
| `mcp>=1.0` | MCP server mode |
|
|
1137
|
+
|
|
1138
|
+
### Internal Modules
|
|
1139
|
+
|
|
1140
|
+
- **`markpact`** — Markdown-native deployment spec format (markpact:config, markpact:steps)
|
|
1141
|
+
- **`goal`** — Migration goal tracking and validation
|
|
1142
|
+
- **`costs`** — AI cost tracking and reporting
|
|
1143
|
+
|
|
1112
1144
|
## License
|
|
1113
1145
|
|
|
1114
1146
|
Licensed under Apache-2.0.
|
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
|
|
4
4
|
## AI Cost Tracking
|
|
5
5
|
|
|
6
|
-
     
|
|
7
|
+
  
|
|
8
8
|
|
|
9
|
-
- 🤖 **LLM usage:** $7.5000 (
|
|
10
|
-
- 👤 **Human dev:** ~$
|
|
9
|
+
- 🤖 **LLM usage:** $7.5000 (94 commits)
|
|
10
|
+
- 👤 **Human dev:** ~$3948 (39.5h @ $100/h, 30min dedup)
|
|
11
11
|
|
|
12
|
-
Generated on 2026-04-
|
|
12
|
+
Generated on 2026-04-24 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
|
|
16
|
-
    
|
|
17
17
|
|
|
18
18
|
Infrastructure migration and device deploy toolkit — VPS, Raspberry Pi kiosk, Podman Quadlet, k3s.
|
|
19
19
|
|
|
@@ -1080,6 +1080,38 @@ redeploy blueprint show blueprint.yaml --apply-config blueprint.yaml
|
|
|
1080
1080
|
redeploy blueprint show blueprint.yaml --query "hardware.drm_outputs[0].transform"
|
|
1081
1081
|
```
|
|
1082
1082
|
|
|
1083
|
+
## Dependencies
|
|
1084
|
+
|
|
1085
|
+
Core runtime dependencies:
|
|
1086
|
+
|
|
1087
|
+
| Package | Purpose |
|
|
1088
|
+
|---------|---------|
|
|
1089
|
+
| `pydantic>=2.0` | Data validation and settings |
|
|
1090
|
+
| `pyyaml>=6.0` | YAML parsing/serialization |
|
|
1091
|
+
| `markdown-it-py>=3.0` | Markdown parsing (markpact specs) |
|
|
1092
|
+
| `click>=8.0` | CLI framework |
|
|
1093
|
+
| `loguru>=0.7` | Structured logging |
|
|
1094
|
+
| `paramiko>=3.0` | SSH client |
|
|
1095
|
+
| `httpx>=0.25` | HTTP client |
|
|
1096
|
+
| `rich>=13.0` | Terminal UI |
|
|
1097
|
+
| `jmespath>=1.0` | JSON/YAML query expressions |
|
|
1098
|
+
| `goal>=2.1.0` | Goal tracking |
|
|
1099
|
+
| `costs>=0.1.20` | AI cost tracking |
|
|
1100
|
+
| `pfix>=0.1.60` | Self-healing Python |
|
|
1101
|
+
|
|
1102
|
+
Optional dependencies:
|
|
1103
|
+
|
|
1104
|
+
| Package | Purpose |
|
|
1105
|
+
|---------|---------|
|
|
1106
|
+
| `op3>=0.1.8` | OP3 support |
|
|
1107
|
+
| `mcp>=1.0` | MCP server mode |
|
|
1108
|
+
|
|
1109
|
+
### Internal Modules
|
|
1110
|
+
|
|
1111
|
+
- **`markpact`** — Markdown-native deployment spec format (markpact:config, markpact:steps)
|
|
1112
|
+
- **`goal`** — Migration goal tracking and validation
|
|
1113
|
+
- **`costs`** — AI cost tracking and reporting
|
|
1114
|
+
|
|
1083
1115
|
## License
|
|
1084
1116
|
|
|
1085
1117
|
Licensed under Apache-2.0.
|
|
@@ -7,7 +7,7 @@ Public API (stable from 0.2.0, semver guaranteed)::
|
|
|
7
7
|
|
|
8
8
|
Everything not listed in ``__all__`` is internal and may change without notice.
|
|
9
9
|
"""
|
|
10
|
-
__version__ = "0.2.
|
|
10
|
+
__version__ = "0.2.73"
|
|
11
11
|
|
|
12
12
|
# ── Core models ───────────────────────────────────────────────────────────────
|
|
13
13
|
from .models import ( # noqa: F401
|
|
@@ -124,7 +124,7 @@ def save_preflight_schema(schema: dict[str, Any], output_path: Path) -> None:
|
|
|
124
124
|
|
|
125
125
|
|
|
126
126
|
def _resolve_command_refs(spec, spec_path: Path, blockers: list[dict[str, Any]]) -> list[dict[str, Any]]:
|
|
127
|
-
from ..markpact.parser import
|
|
127
|
+
from ..markpact.parser import resolve_script_ref
|
|
128
128
|
|
|
129
129
|
out: list[dict[str, Any]] = []
|
|
130
130
|
for step in spec.extra_steps:
|
|
@@ -156,14 +156,11 @@ def _resolve_command_refs(spec, spec_path: Path, blockers: list[dict[str, Any]])
|
|
|
156
156
|
})
|
|
157
157
|
continue
|
|
158
158
|
text = ref_file.read_text(encoding="utf-8", errors="replace")
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
if by_ref is not None:
|
|
159
|
+
result = resolve_script_ref(text, ref_id, language="bash")
|
|
160
|
+
if result is not None:
|
|
162
161
|
entry["resolved"] = True
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
entry["resolved"] = True
|
|
166
|
-
entry["mode"] = "heading"
|
|
162
|
+
_, lookup_method = result
|
|
163
|
+
entry["mode"] = "markpact_ref" if lookup_method == "markpact:ref" else "heading"
|
|
167
164
|
else:
|
|
168
165
|
blockers.append({
|
|
169
166
|
"type": "missing_command_ref",
|
|
@@ -178,14 +175,11 @@ def _resolve_command_refs(spec, spec_path: Path, blockers: list[dict[str, Any]])
|
|
|
178
175
|
entry["file"] = str(ref_file)
|
|
179
176
|
entry["ref"] = cref
|
|
180
177
|
text = ref_file.read_text(encoding="utf-8", errors="replace") if ref_file.exists() else ""
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
if by_ref is not None:
|
|
184
|
-
entry["resolved"] = True
|
|
185
|
-
entry["mode"] = "markpact_ref"
|
|
186
|
-
elif by_heading is not None:
|
|
178
|
+
result = resolve_script_ref(text, cref, language="bash")
|
|
179
|
+
if result is not None:
|
|
187
180
|
entry["resolved"] = True
|
|
188
|
-
|
|
181
|
+
_, lookup_method = result
|
|
182
|
+
entry["mode"] = "markpact_ref" if lookup_method == "markpact:ref" else "heading"
|
|
189
183
|
else:
|
|
190
184
|
blockers.append({
|
|
191
185
|
"type": "missing_command_ref",
|
|
@@ -523,7 +523,7 @@ class _CommandRefChecker(_Checker):
|
|
|
523
523
|
"""Validate command_ref references for nested markdown/script dependencies."""
|
|
524
524
|
|
|
525
525
|
def check(self, spec, document, base_dir, result):
|
|
526
|
-
from ..markpact.parser import
|
|
526
|
+
from ..markpact.parser import resolve_script_ref
|
|
527
527
|
|
|
528
528
|
in_doc_refs: set[str] = set()
|
|
529
529
|
if document:
|
|
@@ -551,10 +551,7 @@ class _CommandRefChecker(_Checker):
|
|
|
551
551
|
)
|
|
552
552
|
continue
|
|
553
553
|
text = file_path.read_text(encoding="utf-8", errors="replace")
|
|
554
|
-
if
|
|
555
|
-
extract_script_by_ref(text, ref_id, language="bash")
|
|
556
|
-
or extract_script_from_markdown(text, ref_id, language="bash")
|
|
557
|
-
):
|
|
554
|
+
if resolve_script_ref(text, ref_id, language="bash") is None:
|
|
558
555
|
result.add(
|
|
559
556
|
IssueSeverity.ERROR,
|
|
560
557
|
"command_ref",
|
|
@@ -34,7 +34,6 @@ def exec_cmd(ctx, ref, host, markdown_file, dry_run, timeout):
|
|
|
34
34
|
redeploy exec '#install-deps' --host root@server.com --file deploy.md --dry-run
|
|
35
35
|
redeploy exec 'kiosk-browser-configuration-script' --host pi@192.168.188.108 --file migration.md
|
|
36
36
|
"""
|
|
37
|
-
from ...markpact.parser import extract_script_by_ref
|
|
38
37
|
from ...apply.executor import Executor, MigrationPlan, MigrationStep, StepAction
|
|
39
38
|
|
|
40
39
|
console = Console()
|
|
@@ -65,15 +64,14 @@ def exec_cmd(ctx, ref, host, markdown_file, dry_run, timeout):
|
|
|
65
64
|
console.print(f"[dim]Reading {md_path}...[/dim]")
|
|
66
65
|
md_content = md_path.read_text(encoding="utf-8")
|
|
67
66
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
if script is None:
|
|
67
|
+
result = _extract_script_for_ref(md_content, ref_id)
|
|
68
|
+
if result is None:
|
|
72
69
|
console.print(f"[red]✗ Could not find bash script with ref '#{ref_id}'[/red]")
|
|
73
70
|
console.print("[dim] Make sure there's either:[/dim]")
|
|
74
71
|
console.print("[dim] - A codeblock: ```bash markpact:ref {ref_id}[/dim]")
|
|
75
72
|
console.print("[dim] - Or a ## section heading and ```bash codeblock[/dim]")
|
|
76
73
|
sys.exit(1)
|
|
74
|
+
script, lookup_method = result
|
|
77
75
|
|
|
78
76
|
console.print(f"[green]✓[/green] Found script ({len(script)} chars) via {lookup_method} '#{ref_id}'")
|
|
79
77
|
|
|
@@ -183,8 +181,6 @@ def exec_multi_cmd(ctx, refs, host, markdown_file, dry_run, timeout, parallel):
|
|
|
183
181
|
|
|
184
182
|
def _extract_all_scripts(md_path, ref_list, console) -> list[tuple[str, str, str]]:
|
|
185
183
|
"""Extract all scripts from markdown by ref list."""
|
|
186
|
-
from ...markpact.parser import extract_script_from_markdown, extract_script_by_ref
|
|
187
|
-
|
|
188
184
|
md_content = md_path.read_text(encoding="utf-8")
|
|
189
185
|
scripts: list[tuple[str, str, str]] = []
|
|
190
186
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: redeploy
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.73
|
|
4
4
|
Summary: Infrastructure migration toolkit: detect → plan → apply
|
|
5
5
|
Requires-Python: >=3.11
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -32,17 +32,17 @@ Requires-Dist: mcp>=1.0; extra == "mcp"
|
|
|
32
32
|
|
|
33
33
|
## AI Cost Tracking
|
|
34
34
|
|
|
35
|
-
     
|
|
36
|
+
  
|
|
37
37
|
|
|
38
|
-
- 🤖 **LLM usage:** $7.5000 (
|
|
39
|
-
- 👤 **Human dev:** ~$
|
|
38
|
+
- 🤖 **LLM usage:** $7.5000 (94 commits)
|
|
39
|
+
- 👤 **Human dev:** ~$3948 (39.5h @ $100/h, 30min dedup)
|
|
40
40
|
|
|
41
|
-
Generated on 2026-04-
|
|
41
|
+
Generated on 2026-04-24 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
|
|
42
42
|
|
|
43
43
|
---
|
|
44
44
|
|
|
45
|
-
    
|
|
46
46
|
|
|
47
47
|
Infrastructure migration and device deploy toolkit — VPS, Raspberry Pi kiosk, Podman Quadlet, k3s.
|
|
48
48
|
|
|
@@ -1109,6 +1109,38 @@ redeploy blueprint show blueprint.yaml --apply-config blueprint.yaml
|
|
|
1109
1109
|
redeploy blueprint show blueprint.yaml --query "hardware.drm_outputs[0].transform"
|
|
1110
1110
|
```
|
|
1111
1111
|
|
|
1112
|
+
## Dependencies
|
|
1113
|
+
|
|
1114
|
+
Core runtime dependencies:
|
|
1115
|
+
|
|
1116
|
+
| Package | Purpose |
|
|
1117
|
+
|---------|---------|
|
|
1118
|
+
| `pydantic>=2.0` | Data validation and settings |
|
|
1119
|
+
| `pyyaml>=6.0` | YAML parsing/serialization |
|
|
1120
|
+
| `markdown-it-py>=3.0` | Markdown parsing (markpact specs) |
|
|
1121
|
+
| `click>=8.0` | CLI framework |
|
|
1122
|
+
| `loguru>=0.7` | Structured logging |
|
|
1123
|
+
| `paramiko>=3.0` | SSH client |
|
|
1124
|
+
| `httpx>=0.25` | HTTP client |
|
|
1125
|
+
| `rich>=13.0` | Terminal UI |
|
|
1126
|
+
| `jmespath>=1.0` | JSON/YAML query expressions |
|
|
1127
|
+
| `goal>=2.1.0` | Goal tracking |
|
|
1128
|
+
| `costs>=0.1.20` | AI cost tracking |
|
|
1129
|
+
| `pfix>=0.1.60` | Self-healing Python |
|
|
1130
|
+
|
|
1131
|
+
Optional dependencies:
|
|
1132
|
+
|
|
1133
|
+
| Package | Purpose |
|
|
1134
|
+
|---------|---------|
|
|
1135
|
+
| `op3>=0.1.8` | OP3 support |
|
|
1136
|
+
| `mcp>=1.0` | MCP server mode |
|
|
1137
|
+
|
|
1138
|
+
### Internal Modules
|
|
1139
|
+
|
|
1140
|
+
- **`markpact`** — Markdown-native deployment spec format (markpact:config, markpact:steps)
|
|
1141
|
+
- **`goal`** — Migration goal tracking and validation
|
|
1142
|
+
- **`costs`** — AI cost tracking and reporting
|
|
1143
|
+
|
|
1112
1144
|
## License
|
|
1113
1145
|
|
|
1114
1146
|
Licensed under Apache-2.0.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|