From 3ac9f70fbe80405e5d531b19c2ef57909b0cc5f9 Mon Sep 17 00:00:00 2001 From: wangchenguang Date: Fri, 3 Jul 2026 00:09:16 +0800 Subject: [PATCH] fix(integration): prevent stale script help guidance The integration lifecycle commands already accept the Python script type through the shared script-type resolver. Their option help still mentioned only shell and PowerShell, which made supported usage look invalid. Constraint: Script type choices are defined centrally and currently include sh, ps, and py. Confidence: high Scope-risk: narrow Tested: .venv/bin/specify integration install --help Tested: .venv/bin/specify integration switch --help Tested: .venv/bin/specify integration upgrade --help Tested: .venv/bin/python -m pytest tests/integrations/test_integration_subcommand.py -q Assisted-by: OpenAI Codex (model: GPT-5, autonomous) --- src/specify_cli/integrations/_install_commands.py | 2 +- src/specify_cli/integrations/_migrate_commands.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/specify_cli/integrations/_install_commands.py b/src/specify_cli/integrations/_install_commands.py index 66fd2b2d26..8a70b791ba 100644 --- a/src/specify_cli/integrations/_install_commands.py +++ b/src/specify_cli/integrations/_install_commands.py @@ -38,7 +38,7 @@ @integration_app.command("install") def integration_install( key: str = typer.Argument(help="Integration key to install (e.g. claude, copilot)"), - script: str | None = typer.Option(None, "--script", help="Script type: sh or ps (default: from init-options.json or platform default)"), + script: str | None = typer.Option(None, "--script", help="Script type: sh, ps, or py (default: from init-options.json or platform default)"), force: bool = typer.Option(False, "--force", help="Allow multi-install when integrations are not declared safe"), integration_options: str | None = typer.Option(None, "--integration-options", help='Options for the integration (e.g. --integration-options="--commands-dir .myagent/cmds")'), ): diff --git a/src/specify_cli/integrations/_migrate_commands.py b/src/specify_cli/integrations/_migrate_commands.py index 6568d1af18..6c1589c7b5 100644 --- a/src/specify_cli/integrations/_migrate_commands.py +++ b/src/specify_cli/integrations/_migrate_commands.py @@ -43,7 +43,7 @@ @integration_app.command("switch") def integration_switch( target: str = typer.Argument(help="Integration key to switch to"), - script: str | None = typer.Option(None, "--script", help="Script type: sh or ps (default: from init-options.json or platform default)"), + script: str | None = typer.Option(None, "--script", help="Script type: sh, ps, or py (default: from init-options.json or platform default)"), force: bool = typer.Option(False, "--force", help="Force removal of modified files during uninstall of the previous integration"), refresh_shared_infra: bool = typer.Option(False, "--refresh-shared-infra", help="Also overwrite shared infrastructure files even if you customized them (otherwise customizations are preserved)"), integration_options: str | None = typer.Option(None, "--integration-options", help='Options for the target integration'), @@ -336,7 +336,7 @@ def integration_switch( def integration_upgrade( key: str | None = typer.Argument(None, help="Integration key to upgrade (default: current integration)"), force: bool = typer.Option(False, "--force", help="Force upgrade even if files are modified"), - script: str | None = typer.Option(None, "--script", help="Script type: sh or ps (default: from init-options.json or platform default)"), + script: str | None = typer.Option(None, "--script", help="Script type: sh, ps, or py (default: from init-options.json or platform default)"), integration_options: str | None = typer.Option(None, "--integration-options", help="Options for the integration"), ): """Upgrade an integration by reinstalling with diff-aware file handling.