mirror of
https://github.com/github/spec-kit.git
synced 2026-08-03 06:26:30 +08:00
fix: migrate extension commands on integration switch (#2404)
* fix: migrate extension commands on integration switch When switching integrations (e.g. kimi → opencode), extension commands were not re-registered for the new agent, leaving the new agent without extension support and orphaning files in the old agent's directory. Changes: - Add ExtensionManager.unregister_agent_artifacts() to clean up old agent extension files and registry entries during switch - Add ExtensionManager.register_enabled_extensions_for_agent() to re-register all enabled extensions for the new agent - Wire both into integration_switch() after uninstall/install phases - Handle skills mode (Copilot --skills) correctly - Add tests for kimi→opencode→claude migration, Copilot skills mode, and disabled extension handling Fixes extension commands not appearing after integration switch. * Update src/specify_cli/extensions.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
This commit is contained in:
@@ -2376,6 +2376,19 @@ def integration_switch(
|
||||
)
|
||||
raise typer.Exit(1)
|
||||
|
||||
# Unregister extension commands for the old agent so they don't
|
||||
# remain as orphans in the old agent's directory.
|
||||
try:
|
||||
from .extensions import ExtensionManager
|
||||
|
||||
ext_mgr = ExtensionManager(project_root)
|
||||
ext_mgr.unregister_agent_artifacts(installed_key)
|
||||
except Exception as ext_err:
|
||||
console.print(
|
||||
f"[yellow]Warning:[/yellow] Could not clean up extension artifacts "
|
||||
f"(commands, skills, registry entries) for '{installed_key}': {ext_err}"
|
||||
)
|
||||
|
||||
# Clear metadata so a failed Phase 2 doesn't leave stale references
|
||||
_remove_integration_json(project_root)
|
||||
opts = load_init_options(project_root)
|
||||
@@ -2415,6 +2428,19 @@ def integration_switch(
|
||||
_write_integration_json(project_root, target_integration.key)
|
||||
_update_init_options_for_integration(project_root, target_integration, script_type=selected_script)
|
||||
|
||||
# Re-register extension commands for the new agent so that
|
||||
# previously-installed extensions are available in the new integration.
|
||||
try:
|
||||
from .extensions import ExtensionManager
|
||||
|
||||
ext_mgr = ExtensionManager(project_root)
|
||||
ext_mgr.register_enabled_extensions_for_agent(target)
|
||||
except Exception as ext_err:
|
||||
console.print(
|
||||
f"[yellow]Warning:[/yellow] Could not register extension commands, skills, "
|
||||
f"or related artifacts for '{target}': {ext_err}"
|
||||
)
|
||||
|
||||
except Exception as e:
|
||||
# Attempt rollback of any files written by setup
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user