redeploy 0.2.49__tar.gz → 0.2.52__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.49 → redeploy-0.2.52}/PKG-INFO +266 -6
- {redeploy-0.2.49 → redeploy-0.2.52}/README.md +263 -5
- {redeploy-0.2.49 → redeploy-0.2.52}/pyproject.toml +3 -1
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/__init__.py +5 -1
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/apply/executor.py +88 -2
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/blueprint/extractor.py +25 -2
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/__init__.py +4 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/bump_fix.py +115 -17
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/detect.py +20 -1
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/hardware.py +10 -34
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/import_.py +111 -4
- redeploy-0.2.52/redeploy/cli/commands/mcp_cmd.py +54 -0
- redeploy-0.2.52/redeploy/cli/commands/prompt_cmd.py +264 -0
- redeploy-0.2.52/redeploy/detect/hardware.py +83 -0
- redeploy-0.2.52/redeploy/detect/hardware_rules.py +56 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/heal.py +37 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/iac/__init__.py +7 -2
- redeploy-0.2.52/redeploy/iac/config_hints.py +289 -0
- redeploy-0.2.52/redeploy/iac/registry.py +107 -0
- redeploy-0.2.52/redeploy/integrations/op3_bridge.py +250 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/markpact/compiler.py +6 -1
- redeploy-0.2.52/redeploy/mcp_server.py +314 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/models.py +102 -5
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/plan/planner.py +1 -0
- redeploy-0.2.52/redeploy/schema.py +309 -0
- redeploy-0.2.52/redeploy/tests/test_heal.py +26 -0
- redeploy-0.2.52/redeploy/tests/test_hooks.py +123 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy.egg-info/PKG-INFO +266 -6
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy.egg-info/SOURCES.txt +19 -1
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy.egg-info/entry_points.txt +1 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy.egg-info/requires.txt +3 -0
- redeploy-0.2.52/tests/test_blueprint_sources.py +186 -0
- redeploy-0.2.52/tests/test_blueprint_sources_compose.py +153 -0
- redeploy-0.2.52/tests/test_cli_query.py +79 -0
- redeploy-0.2.52/tests/test_example_argocd_flux_plugin.py +82 -0
- redeploy-0.2.52/tests/test_example_gitops_ci_plugin.py +74 -0
- redeploy-0.2.52/tests/test_example_helm_kustomize_plugin.py +72 -0
- redeploy-0.2.52/tests/test_iac_config_hints.py +129 -0
- redeploy-0.2.52/tests/test_iac_plugin_loading.py +79 -0
- redeploy-0.2.52/tests/test_import_plugin_template.py +55 -0
- redeploy-0.2.52/tests/test_prompt_llm.py +362 -0
- redeploy-0.2.52/tests/test_steps_kiosk.py +93 -0
- redeploy-0.2.49/redeploy/detect/hardware.py +0 -353
- redeploy-0.2.49/redeploy/detect/hardware_rules.py +0 -489
- redeploy-0.2.49/redeploy/iac/registry.py +0 -37
- redeploy-0.2.49/redeploy/integrations/op3_bridge.py +0 -196
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/apply/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/apply/exceptions.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/apply/handlers.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/apply/progress.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/apply/rollback.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/apply/state.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/apply/state_apply.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/apply/utils/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/apply/utils/run_container_build.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/audit.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/blueprint/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/blueprint/generators/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/blueprint/generators/docker_compose.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/blueprint/generators/migration.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/blueprint/sources/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/blueprint/sources/compose.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/blueprint/sources/hardware.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/blueprint/sources/infra.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/blueprint/sources/migration.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/audit.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/blueprint.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/device_map.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/device_map_renderers.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/devices.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/diagnose.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/diff.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/exec_.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/export.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/init.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/inspect.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/patterns.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/plan_apply.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/plugin.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/probe.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/push.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/state.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/status.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/target.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/version/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/version/commands.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/version/helpers.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/version/monorepo.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/version/release.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/version/scanner.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/commands/workflow.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/core.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/display.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli/query.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/cli.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/config_apply/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/config_apply/applier.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/config_apply/loader.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/data_sync.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/detect/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/detect/builtin/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/detect/detector.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/detect/probes.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/detect/remote.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/detect/templates.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/detect/workflow.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/discovery.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/dsl/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/dsl/loader.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/dsl/parser.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/dsl_python/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/dsl_python/context.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/dsl_python/decorators.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/dsl_python/docker_steps.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/dsl_python/exceptions.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/dsl_python/runner.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/dsl_python/steps.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/fleet.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/hardware/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/hardware/config_txt.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/hardware/data/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/hardware/data/hyperpixel.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/hardware/data/official.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/hardware/data/waveshare.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/hardware/fixes.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/hardware/kiosk/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/hardware/kiosk/autostart.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/hardware/kiosk/browsers.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/hardware/kiosk/compositors.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/hardware/kiosk/output_profiles.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/hardware/panels.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/hardware/raspi_config.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/iac/base.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/iac/docker_compose.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/iac/parsers/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/iac/parsers/compose.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/integrations/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/markpact/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/markpact/models.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/markpact/parser.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/observe.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/parse.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/patterns.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/plan/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/plugins/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/plugins/builtin/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/plugins/builtin/browser_reload.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/plugins/builtin/hardware_diagnostic.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/plugins/builtin/notify.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/plugins/builtin/process_control.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/plugins/builtin/systemd_reload.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/spec_loader.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/ssh.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/steps/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/steps/builtins.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/steps/kiosk.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_audit.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_cli.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_data_sync.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_discovery.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_dsl.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_examples.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_executor.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_fleet.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_git_integration.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_iac.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_manifest.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_markpact_compiler.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_markpact_parser.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_models.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_observe.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_parse.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_patterns.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_planner_edge.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_plugins.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_probes.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_public_api.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_resume.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_spec_loader.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_ssh.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_templates.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_verify.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_version.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_version_changelog.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_version_cli.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_version_manifest.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_version_sources.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/tests/test_workflow.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/verify.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/version/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/version/bump.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/version/changelog.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/version/commits.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/version/diff.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/version/git_integration.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/version/git_transaction.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/version/manifest.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/version/sources/__init__.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/version/sources/base.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/version/sources/json_.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/version/sources/plain.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/version/sources/regex.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/version/sources/toml_.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/version/sources/yaml_.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/version/transaction.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy/version.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy.egg-info/dependency_links.txt +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/redeploy.egg-info/top_level.txt +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/setup.cfg +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/tests/test_hardware_config.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/tests/test_hardware_kiosk.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/tests/test_hardware_rules.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/tests/test_iac.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/tests/test_parse.py +0 -0
- {redeploy-0.2.49 → redeploy-0.2.52}/tests/test_redeploy.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.52
|
|
4
4
|
Summary: Infrastructure migration toolkit: detect → plan → apply
|
|
5
5
|
Requires-Python: >=3.11
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -24,23 +24,25 @@ Requires-Dist: costs>=0.1.20; extra == "dev"
|
|
|
24
24
|
Requires-Dist: pfix>=0.1.60; extra == "dev"
|
|
25
25
|
Provides-Extra: op3
|
|
26
26
|
Requires-Dist: op3>=0.1.8; extra == "op3"
|
|
27
|
+
Provides-Extra: mcp
|
|
28
|
+
Requires-Dist: mcp>=1.0; extra == "mcp"
|
|
27
29
|
|
|
28
30
|
# redeploy
|
|
29
31
|
|
|
30
32
|
|
|
31
33
|
## AI Cost Tracking
|
|
32
34
|
|
|
33
|
-
     
|
|
36
|
+
  
|
|
35
37
|
|
|
36
|
-
- 🤖 **LLM usage:** $7.5000 (
|
|
37
|
-
- 👤 **Human dev:** ~$
|
|
38
|
+
- 🤖 **LLM usage:** $7.5000 (72 commits)
|
|
39
|
+
- 👤 **Human dev:** ~$2695 (27.0h @ $100/h, 30min dedup)
|
|
38
40
|
|
|
39
41
|
Generated on 2026-04-21 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
|
|
40
42
|
|
|
41
43
|
---
|
|
42
44
|
|
|
43
|
-
    
|
|
44
46
|
|
|
45
47
|
Infrastructure migration and device deploy toolkit — VPS, Raspberry Pi kiosk, Podman Quadlet, k3s.
|
|
46
48
|
|
|
@@ -49,6 +51,10 @@ redeploy detect → live probe host (what is there now)
|
|
|
49
51
|
redeploy plan → migration-plan.yaml (what to do)
|
|
50
52
|
redeploy apply → execute plan (do it)
|
|
51
53
|
redeploy run → detect + plan + apply (all at once from spec)
|
|
54
|
+
redeploy fix → bump + run + LLM heal (smart self-healing deploy)
|
|
55
|
+
redeploy bump → bump version in spec (patch/minor/major)
|
|
56
|
+
redeploy prompt → NLP → command via LLM (natural language interface)
|
|
57
|
+
redeploy mcp → start MCP server (Claude Desktop / VS Code / remote API)
|
|
52
58
|
redeploy scan → find devices on LAN (device registry)
|
|
53
59
|
redeploy target → deploy to named device (fleet)
|
|
54
60
|
```
|
|
@@ -664,6 +670,57 @@ doql `DEPLOY.target` → redeploy `strategy` mapping:
|
|
|
664
670
|
| `kiosk-appliance` | `native_kiosk` |
|
|
665
671
|
| `kubernetes` | `k3s` |
|
|
666
672
|
|
|
673
|
+
IaC/CI config coverage (via `redeploy import`, used by doql/redeploy workflows):
|
|
674
|
+
- Docker Compose + Dockerfile
|
|
675
|
+
- nginx configs (`nginx.conf`, `*.conf`)
|
|
676
|
+
- Kubernetes manifests (`apiVersion` + `kind` YAML)
|
|
677
|
+
- Terraform (`*.tf`, `*.tfvars`)
|
|
678
|
+
- TOML (`pyproject.toml`, app/tool TOML)
|
|
679
|
+
- Vite config (`vite.config.ts/js/mjs/cjs`)
|
|
680
|
+
- CI/CD: GitHub Actions, GitLab CI, Jenkinsfile
|
|
681
|
+
|
|
682
|
+
Parser plugin extension:
|
|
683
|
+
- Python entry points: `redeploy.iac.parsers`
|
|
684
|
+
- Project-local parsers: `./redeploy_iac_parsers/*.py`
|
|
685
|
+
- User-global parsers: `~/.redeploy/iac_parsers/*.py`
|
|
686
|
+
|
|
687
|
+
Built-in template generator:
|
|
688
|
+
- `redeploy import --list-plugin-templates`
|
|
689
|
+
- `redeploy import --plugin-template helm-kustomize`
|
|
690
|
+
- `redeploy import --plugin-template argocd-flux --plugin-dir redeploy_iac_parsers`
|
|
691
|
+
|
|
692
|
+
Example external plugin (Helm + Ansible):
|
|
693
|
+
- Source template: `examples/redeploy_iac_parsers/helm_ansible.py`
|
|
694
|
+
- Quick start:
|
|
695
|
+
1. `mkdir -p redeploy_iac_parsers`
|
|
696
|
+
2. `cp examples/redeploy_iac_parsers/helm_ansible.py redeploy_iac_parsers/`
|
|
697
|
+
3. `redeploy import path/to/Chart.yaml`
|
|
698
|
+
4. `redeploy import path/to/playbook.yml`
|
|
699
|
+
|
|
700
|
+
Example external plugin (Helm templates + Kustomize):
|
|
701
|
+
- Source template: `examples/redeploy_iac_parsers/helm_kustomize.py`
|
|
702
|
+
- Quick start:
|
|
703
|
+
1. `mkdir -p redeploy_iac_parsers`
|
|
704
|
+
2. `cp examples/redeploy_iac_parsers/helm_kustomize.py redeploy_iac_parsers/`
|
|
705
|
+
3. `redeploy import path/to/chart/templates/deployment.yaml`
|
|
706
|
+
4. `redeploy import path/to/kustomization.yaml`
|
|
707
|
+
|
|
708
|
+
Example external plugin (ArgoCD Application + Flux Kustomization):
|
|
709
|
+
- Source template: `examples/redeploy_iac_parsers/argocd_flux.py`
|
|
710
|
+
- Quick start:
|
|
711
|
+
1. `mkdir -p redeploy_iac_parsers`
|
|
712
|
+
2. `cp examples/redeploy_iac_parsers/argocd_flux.py redeploy_iac_parsers/`
|
|
713
|
+
3. `redeploy import path/to/argocd-application.yaml`
|
|
714
|
+
4. `redeploy import path/to/flux-kustomization.yaml`
|
|
715
|
+
|
|
716
|
+
Example external plugin (GitOps CI for ArgoCD/Flux):
|
|
717
|
+
- Source template: `examples/redeploy_iac_parsers/gitops_ci.py`
|
|
718
|
+
- Quick start:
|
|
719
|
+
1. `mkdir -p redeploy_iac_parsers`
|
|
720
|
+
2. `cp examples/redeploy_iac_parsers/gitops_ci.py redeploy_iac_parsers/`
|
|
721
|
+
3. `redeploy import .github/workflows/deploy-gitops.yml`
|
|
722
|
+
4. `redeploy import .gitlab-ci.yml`
|
|
723
|
+
|
|
667
724
|
## Examples
|
|
668
725
|
|
|
669
726
|
| Directory | Scenario | Strategy |
|
|
@@ -683,10 +740,213 @@ redeploy run examples/01-vps-version-bump/migration.yaml --plan-only
|
|
|
683
740
|
redeploy run examples/04-rpi-kiosk/migration.yaml --plan-only
|
|
684
741
|
```
|
|
685
742
|
|
|
743
|
+
## Self-healing deploy — `redeploy fix`
|
|
744
|
+
|
|
745
|
+
`redeploy fix` is the recommended day-to-day deploy command. It:
|
|
746
|
+
1. bumps the patch version in `VERSION` + spec header
|
|
747
|
+
2. applies the migration spec with `--heal` enabled
|
|
748
|
+
3. if a step fails, calls an LLM (via LiteLLM / OpenRouter) to suggest a fix and retries automatically
|
|
749
|
+
|
|
750
|
+
```bash
|
|
751
|
+
# Self-healing deploy: bump version → run → LLM retry on failure
|
|
752
|
+
redeploy fix .
|
|
753
|
+
redeploy fix redeploy/pi109/migration.md
|
|
754
|
+
|
|
755
|
+
# With a problem hint for the LLM
|
|
756
|
+
redeploy fix . --hint "service not starting after update"
|
|
757
|
+
redeploy fix . --hint "brak ikon SVG w menu"
|
|
758
|
+
|
|
759
|
+
# Preview only (no apply)
|
|
760
|
+
redeploy fix . --dry-run
|
|
761
|
+
|
|
762
|
+
# Bump minor version instead of patch
|
|
763
|
+
redeploy fix . --minor
|
|
764
|
+
|
|
765
|
+
# Bump major version
|
|
766
|
+
redeploy fix . --major
|
|
767
|
+
redeploy fix . --retries 5
|
|
768
|
+
|
|
769
|
+
# Skip version bump
|
|
770
|
+
redeploy fix . --no-bump
|
|
771
|
+
```
|
|
772
|
+
|
|
773
|
+
Spec discovery from `.`:
|
|
774
|
+
- `./migration.md` or `./migration.yaml` — direct match
|
|
775
|
+
- `./redeploy/<target>/migration.md` — project pattern (lists targets, asks if multiple)
|
|
776
|
+
- Recursive fallback anywhere under the directory
|
|
777
|
+
|
|
778
|
+
`redeploy fix` automatically discovers migration specs — running from project root
|
|
779
|
+
with multiple targets prompts interactively.
|
|
780
|
+
|
|
781
|
+
### Version management — `redeploy bump`
|
|
782
|
+
|
|
783
|
+
```bash
|
|
784
|
+
# Bump patch (default): 1.0.31 → 1.0.32
|
|
785
|
+
redeploy bump .
|
|
786
|
+
redeploy bump redeploy/pi109/migration.md
|
|
787
|
+
|
|
788
|
+
# Bump minor: 1.0.31 → 1.1.0
|
|
789
|
+
redeploy bump . --minor
|
|
790
|
+
|
|
791
|
+
# Bump major: 1.0.31 → 2.0.0
|
|
792
|
+
redeploy bump . --major
|
|
793
|
+
```
|
|
794
|
+
|
|
795
|
+
Updates `VERSION` file and all version references in the migration spec
|
|
796
|
+
(`version:`, `name: "... vX.Y.Z"`, `description: "... vX.Y.Z"`).
|
|
797
|
+
|
|
798
|
+
### LLM self-healing on `redeploy run`
|
|
799
|
+
|
|
800
|
+
`redeploy run` also supports `--heal` mode (enabled by default):
|
|
801
|
+
|
|
802
|
+
```bash
|
|
803
|
+
# Run with LLM self-healing (default)
|
|
804
|
+
redeploy run migration.yaml
|
|
805
|
+
|
|
806
|
+
# Disable healing
|
|
807
|
+
redeploy run migration.yaml --no-heal
|
|
808
|
+
|
|
809
|
+
# Pass problem description to LLM
|
|
810
|
+
redeploy run migration.yaml --fix "nginx port conflict"
|
|
811
|
+
|
|
812
|
+
# Max heal retries
|
|
813
|
+
redeploy run migration.yaml --max-heal-retries 5
|
|
814
|
+
```
|
|
815
|
+
|
|
816
|
+
LLM reads the failed step output, runs SSH diagnostics, and patches the spec YAML.
|
|
817
|
+
Repairs are logged to `REPAIR_LOG.md` next to the spec.
|
|
818
|
+
|
|
819
|
+
Requires `OPENROUTER_API_KEY` (or `OPENAI_API_KEY`) in `.env` or `~/.redeploy/.env`.
|
|
820
|
+
Model defaults to `openrouter/qwen/qwen3-coder-next` (override with `LLM_MODEL=...`).
|
|
821
|
+
|
|
822
|
+
---
|
|
823
|
+
|
|
824
|
+
## Natural language interface — `redeploy prompt`
|
|
825
|
+
|
|
826
|
+
```bash
|
|
827
|
+
# Map a natural language instruction to a redeploy command
|
|
828
|
+
redeploy prompt "deploy c2004 to pi109"
|
|
829
|
+
redeploy prompt "pokaż plan deployu na pi109"
|
|
830
|
+
redeploy prompt "bump version and redeploy" --yes
|
|
831
|
+
redeploy prompt "what specs are available?" --schema-only
|
|
832
|
+
|
|
833
|
+
# Force dry-run on generated command
|
|
834
|
+
redeploy prompt "run the pi109 migration" --dry-run
|
|
835
|
+
|
|
836
|
+
# Skip confirmation
|
|
837
|
+
redeploy prompt "fix the frontend service" --yes
|
|
838
|
+
|
|
839
|
+
# Preview the workspace schema sent to the LLM
|
|
840
|
+
redeploy prompt "..." --show-schema
|
|
841
|
+
```
|
|
842
|
+
|
|
843
|
+
The LLM receives a workspace schema (discovered specs, version, git branch, command catalogue)
|
|
844
|
+
and maps the instruction to a concrete `redeploy` invocation.
|
|
845
|
+
|
|
846
|
+
Language is auto-detected — Polish, English, or any language the model supports.
|
|
847
|
+
|
|
848
|
+
---
|
|
849
|
+
|
|
850
|
+
## MCP server — `redeploy mcp`
|
|
851
|
+
|
|
852
|
+
redeploy exposes an [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server,
|
|
853
|
+
letting AI assistants (Claude Desktop, VS Code Copilot, custom agents) call redeploy operations
|
|
854
|
+
as structured tools.
|
|
855
|
+
|
|
856
|
+
### Start
|
|
857
|
+
|
|
858
|
+
```bash
|
|
859
|
+
# stdio — for Claude Desktop / VS Code local integration
|
|
860
|
+
redeploy mcp
|
|
861
|
+
|
|
862
|
+
# HTTP SSE — for remote/shared access
|
|
863
|
+
redeploy mcp --transport sse --port 8811
|
|
864
|
+
|
|
865
|
+
# Streamable HTTP
|
|
866
|
+
redeploy mcp --transport http --port 8811
|
|
867
|
+
|
|
868
|
+
# Standalone binary (no CLI wrapper)
|
|
869
|
+
redeploy-mcp --transport sse
|
|
870
|
+
```
|
|
871
|
+
|
|
872
|
+
### Available MCP tools
|
|
873
|
+
|
|
874
|
+
| Tool | Description |
|
|
875
|
+
|------|-------------|
|
|
876
|
+
| `schema` | Discover workspace: specs, version, git branch, command catalogue |
|
|
877
|
+
| `list_specs` | List all migration specs found in a directory |
|
|
878
|
+
| `plan_spec` | Preview a spec (dry-run) — safe, no changes |
|
|
879
|
+
| `run_spec` | Apply a migration spec |
|
|
880
|
+
| `fix_spec` | Self-healing deploy: bump → apply → LLM retry |
|
|
881
|
+
| `bump_version` | Bump patch/minor/major version |
|
|
882
|
+
| `diagnose` | SSH diagnostics on a remote host |
|
|
883
|
+
| `exec_ssh` | Run an ad-hoc command on a remote host |
|
|
884
|
+
| `nlp_command` | Translate NLP instruction → redeploy command |
|
|
885
|
+
|
|
886
|
+
### MCP resources
|
|
887
|
+
|
|
888
|
+
| URI | Description |
|
|
889
|
+
|-----|-------------|
|
|
890
|
+
| `redeploy://workspace` | Current workspace schema as JSON |
|
|
891
|
+
| `redeploy://spec/{path}` | Raw content of a migration spec file |
|
|
892
|
+
|
|
893
|
+
### Claude Desktop integration
|
|
894
|
+
|
|
895
|
+
Add to `~/.config/claude/claude_desktop_config.json`:
|
|
896
|
+
|
|
897
|
+
```json
|
|
898
|
+
{
|
|
899
|
+
"mcpServers": {
|
|
900
|
+
"redeploy": {
|
|
901
|
+
"command": "redeploy",
|
|
902
|
+
"args": ["mcp"]
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
```
|
|
907
|
+
|
|
908
|
+
### VS Code Copilot integration
|
|
909
|
+
|
|
910
|
+
Add to `.vscode/mcp.json` in your workspace:
|
|
911
|
+
|
|
912
|
+
```json
|
|
913
|
+
{
|
|
914
|
+
"servers": {
|
|
915
|
+
"redeploy": {
|
|
916
|
+
"type": "stdio",
|
|
917
|
+
"command": "redeploy",
|
|
918
|
+
"args": ["mcp"]
|
|
919
|
+
}
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
```
|
|
923
|
+
|
|
924
|
+
Or for an SSE server already running on a remote machine:
|
|
925
|
+
|
|
926
|
+
```json
|
|
927
|
+
{
|
|
928
|
+
"servers": {
|
|
929
|
+
"redeploy-remote": {
|
|
930
|
+
"type": "sse",
|
|
931
|
+
"url": "http://192.168.188.109:8811/sse"
|
|
932
|
+
}
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
```
|
|
936
|
+
|
|
937
|
+
### Install with MCP dependencies
|
|
938
|
+
|
|
939
|
+
```bash
|
|
940
|
+
pip install "redeploy[mcp]"
|
|
941
|
+
```
|
|
942
|
+
|
|
943
|
+
---
|
|
944
|
+
|
|
686
945
|
## Hardware diagnostics commands
|
|
687
946
|
|
|
688
947
|
### `redeploy hardware HOST [options]`
|
|
689
948
|
|
|
949
|
+
|
|
690
950
|
Probe and diagnose hardware on a remote host (DSI display, DRM connectors, backlight, I2C, config.txt, Wayland compositor).
|
|
691
951
|
|
|
692
952
|
| Option | Description |
|
|
@@ -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 (72 commits)
|
|
10
|
+
- 👤 **Human dev:** ~$2695 (27.0h @ $100/h, 30min dedup)
|
|
11
11
|
|
|
12
12
|
Generated on 2026-04-21 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
|
|
|
@@ -22,6 +22,10 @@ redeploy detect → live probe host (what is there now)
|
|
|
22
22
|
redeploy plan → migration-plan.yaml (what to do)
|
|
23
23
|
redeploy apply → execute plan (do it)
|
|
24
24
|
redeploy run → detect + plan + apply (all at once from spec)
|
|
25
|
+
redeploy fix → bump + run + LLM heal (smart self-healing deploy)
|
|
26
|
+
redeploy bump → bump version in spec (patch/minor/major)
|
|
27
|
+
redeploy prompt → NLP → command via LLM (natural language interface)
|
|
28
|
+
redeploy mcp → start MCP server (Claude Desktop / VS Code / remote API)
|
|
25
29
|
redeploy scan → find devices on LAN (device registry)
|
|
26
30
|
redeploy target → deploy to named device (fleet)
|
|
27
31
|
```
|
|
@@ -637,6 +641,57 @@ doql `DEPLOY.target` → redeploy `strategy` mapping:
|
|
|
637
641
|
| `kiosk-appliance` | `native_kiosk` |
|
|
638
642
|
| `kubernetes` | `k3s` |
|
|
639
643
|
|
|
644
|
+
IaC/CI config coverage (via `redeploy import`, used by doql/redeploy workflows):
|
|
645
|
+
- Docker Compose + Dockerfile
|
|
646
|
+
- nginx configs (`nginx.conf`, `*.conf`)
|
|
647
|
+
- Kubernetes manifests (`apiVersion` + `kind` YAML)
|
|
648
|
+
- Terraform (`*.tf`, `*.tfvars`)
|
|
649
|
+
- TOML (`pyproject.toml`, app/tool TOML)
|
|
650
|
+
- Vite config (`vite.config.ts/js/mjs/cjs`)
|
|
651
|
+
- CI/CD: GitHub Actions, GitLab CI, Jenkinsfile
|
|
652
|
+
|
|
653
|
+
Parser plugin extension:
|
|
654
|
+
- Python entry points: `redeploy.iac.parsers`
|
|
655
|
+
- Project-local parsers: `./redeploy_iac_parsers/*.py`
|
|
656
|
+
- User-global parsers: `~/.redeploy/iac_parsers/*.py`
|
|
657
|
+
|
|
658
|
+
Built-in template generator:
|
|
659
|
+
- `redeploy import --list-plugin-templates`
|
|
660
|
+
- `redeploy import --plugin-template helm-kustomize`
|
|
661
|
+
- `redeploy import --plugin-template argocd-flux --plugin-dir redeploy_iac_parsers`
|
|
662
|
+
|
|
663
|
+
Example external plugin (Helm + Ansible):
|
|
664
|
+
- Source template: `examples/redeploy_iac_parsers/helm_ansible.py`
|
|
665
|
+
- Quick start:
|
|
666
|
+
1. `mkdir -p redeploy_iac_parsers`
|
|
667
|
+
2. `cp examples/redeploy_iac_parsers/helm_ansible.py redeploy_iac_parsers/`
|
|
668
|
+
3. `redeploy import path/to/Chart.yaml`
|
|
669
|
+
4. `redeploy import path/to/playbook.yml`
|
|
670
|
+
|
|
671
|
+
Example external plugin (Helm templates + Kustomize):
|
|
672
|
+
- Source template: `examples/redeploy_iac_parsers/helm_kustomize.py`
|
|
673
|
+
- Quick start:
|
|
674
|
+
1. `mkdir -p redeploy_iac_parsers`
|
|
675
|
+
2. `cp examples/redeploy_iac_parsers/helm_kustomize.py redeploy_iac_parsers/`
|
|
676
|
+
3. `redeploy import path/to/chart/templates/deployment.yaml`
|
|
677
|
+
4. `redeploy import path/to/kustomization.yaml`
|
|
678
|
+
|
|
679
|
+
Example external plugin (ArgoCD Application + Flux Kustomization):
|
|
680
|
+
- Source template: `examples/redeploy_iac_parsers/argocd_flux.py`
|
|
681
|
+
- Quick start:
|
|
682
|
+
1. `mkdir -p redeploy_iac_parsers`
|
|
683
|
+
2. `cp examples/redeploy_iac_parsers/argocd_flux.py redeploy_iac_parsers/`
|
|
684
|
+
3. `redeploy import path/to/argocd-application.yaml`
|
|
685
|
+
4. `redeploy import path/to/flux-kustomization.yaml`
|
|
686
|
+
|
|
687
|
+
Example external plugin (GitOps CI for ArgoCD/Flux):
|
|
688
|
+
- Source template: `examples/redeploy_iac_parsers/gitops_ci.py`
|
|
689
|
+
- Quick start:
|
|
690
|
+
1. `mkdir -p redeploy_iac_parsers`
|
|
691
|
+
2. `cp examples/redeploy_iac_parsers/gitops_ci.py redeploy_iac_parsers/`
|
|
692
|
+
3. `redeploy import .github/workflows/deploy-gitops.yml`
|
|
693
|
+
4. `redeploy import .gitlab-ci.yml`
|
|
694
|
+
|
|
640
695
|
## Examples
|
|
641
696
|
|
|
642
697
|
| Directory | Scenario | Strategy |
|
|
@@ -656,10 +711,213 @@ redeploy run examples/01-vps-version-bump/migration.yaml --plan-only
|
|
|
656
711
|
redeploy run examples/04-rpi-kiosk/migration.yaml --plan-only
|
|
657
712
|
```
|
|
658
713
|
|
|
714
|
+
## Self-healing deploy — `redeploy fix`
|
|
715
|
+
|
|
716
|
+
`redeploy fix` is the recommended day-to-day deploy command. It:
|
|
717
|
+
1. bumps the patch version in `VERSION` + spec header
|
|
718
|
+
2. applies the migration spec with `--heal` enabled
|
|
719
|
+
3. if a step fails, calls an LLM (via LiteLLM / OpenRouter) to suggest a fix and retries automatically
|
|
720
|
+
|
|
721
|
+
```bash
|
|
722
|
+
# Self-healing deploy: bump version → run → LLM retry on failure
|
|
723
|
+
redeploy fix .
|
|
724
|
+
redeploy fix redeploy/pi109/migration.md
|
|
725
|
+
|
|
726
|
+
# With a problem hint for the LLM
|
|
727
|
+
redeploy fix . --hint "service not starting after update"
|
|
728
|
+
redeploy fix . --hint "brak ikon SVG w menu"
|
|
729
|
+
|
|
730
|
+
# Preview only (no apply)
|
|
731
|
+
redeploy fix . --dry-run
|
|
732
|
+
|
|
733
|
+
# Bump minor version instead of patch
|
|
734
|
+
redeploy fix . --minor
|
|
735
|
+
|
|
736
|
+
# Bump major version
|
|
737
|
+
redeploy fix . --major
|
|
738
|
+
redeploy fix . --retries 5
|
|
739
|
+
|
|
740
|
+
# Skip version bump
|
|
741
|
+
redeploy fix . --no-bump
|
|
742
|
+
```
|
|
743
|
+
|
|
744
|
+
Spec discovery from `.`:
|
|
745
|
+
- `./migration.md` or `./migration.yaml` — direct match
|
|
746
|
+
- `./redeploy/<target>/migration.md` — project pattern (lists targets, asks if multiple)
|
|
747
|
+
- Recursive fallback anywhere under the directory
|
|
748
|
+
|
|
749
|
+
`redeploy fix` automatically discovers migration specs — running from project root
|
|
750
|
+
with multiple targets prompts interactively.
|
|
751
|
+
|
|
752
|
+
### Version management — `redeploy bump`
|
|
753
|
+
|
|
754
|
+
```bash
|
|
755
|
+
# Bump patch (default): 1.0.31 → 1.0.32
|
|
756
|
+
redeploy bump .
|
|
757
|
+
redeploy bump redeploy/pi109/migration.md
|
|
758
|
+
|
|
759
|
+
# Bump minor: 1.0.31 → 1.1.0
|
|
760
|
+
redeploy bump . --minor
|
|
761
|
+
|
|
762
|
+
# Bump major: 1.0.31 → 2.0.0
|
|
763
|
+
redeploy bump . --major
|
|
764
|
+
```
|
|
765
|
+
|
|
766
|
+
Updates `VERSION` file and all version references in the migration spec
|
|
767
|
+
(`version:`, `name: "... vX.Y.Z"`, `description: "... vX.Y.Z"`).
|
|
768
|
+
|
|
769
|
+
### LLM self-healing on `redeploy run`
|
|
770
|
+
|
|
771
|
+
`redeploy run` also supports `--heal` mode (enabled by default):
|
|
772
|
+
|
|
773
|
+
```bash
|
|
774
|
+
# Run with LLM self-healing (default)
|
|
775
|
+
redeploy run migration.yaml
|
|
776
|
+
|
|
777
|
+
# Disable healing
|
|
778
|
+
redeploy run migration.yaml --no-heal
|
|
779
|
+
|
|
780
|
+
# Pass problem description to LLM
|
|
781
|
+
redeploy run migration.yaml --fix "nginx port conflict"
|
|
782
|
+
|
|
783
|
+
# Max heal retries
|
|
784
|
+
redeploy run migration.yaml --max-heal-retries 5
|
|
785
|
+
```
|
|
786
|
+
|
|
787
|
+
LLM reads the failed step output, runs SSH diagnostics, and patches the spec YAML.
|
|
788
|
+
Repairs are logged to `REPAIR_LOG.md` next to the spec.
|
|
789
|
+
|
|
790
|
+
Requires `OPENROUTER_API_KEY` (or `OPENAI_API_KEY`) in `.env` or `~/.redeploy/.env`.
|
|
791
|
+
Model defaults to `openrouter/qwen/qwen3-coder-next` (override with `LLM_MODEL=...`).
|
|
792
|
+
|
|
793
|
+
---
|
|
794
|
+
|
|
795
|
+
## Natural language interface — `redeploy prompt`
|
|
796
|
+
|
|
797
|
+
```bash
|
|
798
|
+
# Map a natural language instruction to a redeploy command
|
|
799
|
+
redeploy prompt "deploy c2004 to pi109"
|
|
800
|
+
redeploy prompt "pokaż plan deployu na pi109"
|
|
801
|
+
redeploy prompt "bump version and redeploy" --yes
|
|
802
|
+
redeploy prompt "what specs are available?" --schema-only
|
|
803
|
+
|
|
804
|
+
# Force dry-run on generated command
|
|
805
|
+
redeploy prompt "run the pi109 migration" --dry-run
|
|
806
|
+
|
|
807
|
+
# Skip confirmation
|
|
808
|
+
redeploy prompt "fix the frontend service" --yes
|
|
809
|
+
|
|
810
|
+
# Preview the workspace schema sent to the LLM
|
|
811
|
+
redeploy prompt "..." --show-schema
|
|
812
|
+
```
|
|
813
|
+
|
|
814
|
+
The LLM receives a workspace schema (discovered specs, version, git branch, command catalogue)
|
|
815
|
+
and maps the instruction to a concrete `redeploy` invocation.
|
|
816
|
+
|
|
817
|
+
Language is auto-detected — Polish, English, or any language the model supports.
|
|
818
|
+
|
|
819
|
+
---
|
|
820
|
+
|
|
821
|
+
## MCP server — `redeploy mcp`
|
|
822
|
+
|
|
823
|
+
redeploy exposes an [MCP (Model Context Protocol)](https://modelcontextprotocol.io) server,
|
|
824
|
+
letting AI assistants (Claude Desktop, VS Code Copilot, custom agents) call redeploy operations
|
|
825
|
+
as structured tools.
|
|
826
|
+
|
|
827
|
+
### Start
|
|
828
|
+
|
|
829
|
+
```bash
|
|
830
|
+
# stdio — for Claude Desktop / VS Code local integration
|
|
831
|
+
redeploy mcp
|
|
832
|
+
|
|
833
|
+
# HTTP SSE — for remote/shared access
|
|
834
|
+
redeploy mcp --transport sse --port 8811
|
|
835
|
+
|
|
836
|
+
# Streamable HTTP
|
|
837
|
+
redeploy mcp --transport http --port 8811
|
|
838
|
+
|
|
839
|
+
# Standalone binary (no CLI wrapper)
|
|
840
|
+
redeploy-mcp --transport sse
|
|
841
|
+
```
|
|
842
|
+
|
|
843
|
+
### Available MCP tools
|
|
844
|
+
|
|
845
|
+
| Tool | Description |
|
|
846
|
+
|------|-------------|
|
|
847
|
+
| `schema` | Discover workspace: specs, version, git branch, command catalogue |
|
|
848
|
+
| `list_specs` | List all migration specs found in a directory |
|
|
849
|
+
| `plan_spec` | Preview a spec (dry-run) — safe, no changes |
|
|
850
|
+
| `run_spec` | Apply a migration spec |
|
|
851
|
+
| `fix_spec` | Self-healing deploy: bump → apply → LLM retry |
|
|
852
|
+
| `bump_version` | Bump patch/minor/major version |
|
|
853
|
+
| `diagnose` | SSH diagnostics on a remote host |
|
|
854
|
+
| `exec_ssh` | Run an ad-hoc command on a remote host |
|
|
855
|
+
| `nlp_command` | Translate NLP instruction → redeploy command |
|
|
856
|
+
|
|
857
|
+
### MCP resources
|
|
858
|
+
|
|
859
|
+
| URI | Description |
|
|
860
|
+
|-----|-------------|
|
|
861
|
+
| `redeploy://workspace` | Current workspace schema as JSON |
|
|
862
|
+
| `redeploy://spec/{path}` | Raw content of a migration spec file |
|
|
863
|
+
|
|
864
|
+
### Claude Desktop integration
|
|
865
|
+
|
|
866
|
+
Add to `~/.config/claude/claude_desktop_config.json`:
|
|
867
|
+
|
|
868
|
+
```json
|
|
869
|
+
{
|
|
870
|
+
"mcpServers": {
|
|
871
|
+
"redeploy": {
|
|
872
|
+
"command": "redeploy",
|
|
873
|
+
"args": ["mcp"]
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
```
|
|
878
|
+
|
|
879
|
+
### VS Code Copilot integration
|
|
880
|
+
|
|
881
|
+
Add to `.vscode/mcp.json` in your workspace:
|
|
882
|
+
|
|
883
|
+
```json
|
|
884
|
+
{
|
|
885
|
+
"servers": {
|
|
886
|
+
"redeploy": {
|
|
887
|
+
"type": "stdio",
|
|
888
|
+
"command": "redeploy",
|
|
889
|
+
"args": ["mcp"]
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
}
|
|
893
|
+
```
|
|
894
|
+
|
|
895
|
+
Or for an SSE server already running on a remote machine:
|
|
896
|
+
|
|
897
|
+
```json
|
|
898
|
+
{
|
|
899
|
+
"servers": {
|
|
900
|
+
"redeploy-remote": {
|
|
901
|
+
"type": "sse",
|
|
902
|
+
"url": "http://192.168.188.109:8811/sse"
|
|
903
|
+
}
|
|
904
|
+
}
|
|
905
|
+
}
|
|
906
|
+
```
|
|
907
|
+
|
|
908
|
+
### Install with MCP dependencies
|
|
909
|
+
|
|
910
|
+
```bash
|
|
911
|
+
pip install "redeploy[mcp]"
|
|
912
|
+
```
|
|
913
|
+
|
|
914
|
+
---
|
|
915
|
+
|
|
659
916
|
## Hardware diagnostics commands
|
|
660
917
|
|
|
661
918
|
### `redeploy hardware HOST [options]`
|
|
662
919
|
|
|
920
|
+
|
|
663
921
|
Probe and diagnose hardware on a remote host (DSI display, DRM connectors, backlight, I2C, config.txt, Wayland compositor).
|
|
664
922
|
|
|
665
923
|
| Option | Description |
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "redeploy"
|
|
7
|
-
version = "0.2.
|
|
7
|
+
version = "0.2.52"
|
|
8
8
|
description = "Infrastructure migration toolkit: detect → plan → apply"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -25,6 +25,7 @@ dependencies = [
|
|
|
25
25
|
|
|
26
26
|
[project.scripts]
|
|
27
27
|
redeploy = "redeploy.cli:cli"
|
|
28
|
+
redeploy-mcp = "redeploy.mcp_server:serve"
|
|
28
29
|
|
|
29
30
|
[project.optional-dependencies]
|
|
30
31
|
dev = ["pytest>=8.0", "ruff>=0.4",
|
|
@@ -33,6 +34,7 @@ dev = ["pytest>=8.0", "ruff>=0.4",
|
|
|
33
34
|
"pfix>=0.1.60",
|
|
34
35
|
]
|
|
35
36
|
op3 = ["op3>=0.1.8"]
|
|
37
|
+
mcp = ["mcp>=1.0"]
|
|
36
38
|
|
|
37
39
|
[tool.ruff]
|
|
38
40
|
line-length = 100
|
|
@@ -7,17 +7,19 @@ 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.52"
|
|
11
11
|
|
|
12
12
|
# ── Core models ───────────────────────────────────────────────────────────────
|
|
13
13
|
from .models import ( # noqa: F401
|
|
14
14
|
ConflictSeverity,
|
|
15
15
|
DeployStrategy,
|
|
16
|
+
Hook,
|
|
16
17
|
InfraSpec,
|
|
17
18
|
InfraState,
|
|
18
19
|
MigrationPlan,
|
|
19
20
|
MigrationSpec,
|
|
20
21
|
MigrationStep,
|
|
22
|
+
PipelinePhase,
|
|
21
23
|
StepAction,
|
|
22
24
|
StepStatus,
|
|
23
25
|
TargetConfig,
|
|
@@ -91,11 +93,13 @@ __all__ = [
|
|
|
91
93
|
# models
|
|
92
94
|
"ConflictSeverity",
|
|
93
95
|
"DeployStrategy",
|
|
96
|
+
"Hook",
|
|
94
97
|
"InfraSpec",
|
|
95
98
|
"InfraState",
|
|
96
99
|
"MigrationPlan",
|
|
97
100
|
"MigrationSpec",
|
|
98
101
|
"MigrationStep",
|
|
102
|
+
"PipelinePhase",
|
|
99
103
|
"StepAction",
|
|
100
104
|
"StepStatus",
|
|
101
105
|
"TargetConfig",
|