Skip to content

feat: add kiro-cli and AGENT_CONFIG consistency coverage#1690

Open
medhatgalal wants to merge 2 commits intogithub:mainfrom
medhatgalal:codex/integrate-ai-agent-updates
Open

feat: add kiro-cli and AGENT_CONFIG consistency coverage#1690
medhatgalal wants to merge 2 commits intogithub:mainfrom
medhatgalal:codex/integrate-ai-agent-updates

Conversation

@medhatgalal
Copy link

Summary

  • Aligns runtime agent configuration, package generation scripts, and docs for 38% > 38% > as a dedicated AI agent entry.
  • Adds regression coverage to keep AGENT_CONFIG/runtime/release/package context in sync.
  • Updates issue templates, devcontainer setup, and agent context scripts for the new agent behavior.

Testing

  •           ███████╗██████╗ ███████╗ ██████╗██╗███████╗██╗   ██╗              
            ██╔════╝██╔══██╗██╔════╝██╔════╝██║██╔════╝╚██╗ ██╔╝              
            ███████╗██████╔╝█████╗  ██║     ██║█████╗   ╚████╔╝               
            ╚════██║██╔═══╝ ██╔══╝  ██║     ██║██╔══╝    ╚██╔╝                
            ███████║██║     ███████╗╚██████╗██║██║        ██║                 
            ╚══════╝╚═╝     ╚══════╝ ╚═════╝╚═╝╚═╝        ╚═╝                 
                                                                              
             GitHub Spec Kit - Spec-Driven Development Toolkit                
    

Usage: specify [OPTIONS] COMMAND [ARGS]...

Setup tool for Specify spec-driven development projects

╭─ Options ────────────────────────────────────────────────────────────────────╮
│ --help Show this message and exit. │
╰──────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────╮
│ init Initialize a new Specify project from the latest template. │
│ check Check that all required tools are installed. │
│ version Display version and system information. │
│ extension Manage spec-kit extensions │
╰──────────────────────────────────────────────────────────────────────────────╯

  • All checks passed! ✅
  • ============================= test session starts ==============================
    platform darwin -- Python 3.14.3, pytest-9.0.2, pluggy-1.6.0 -- /Users/medhat.galal/Desktop/AI_Repos/spec-kit/.venv/bin/python3
    cachedir: .pytest_cache
    rootdir: /Users/medhat.galal/Desktop/AI_Repos/spec-kit
    configfile: pyproject.toml
    testpaths: tests
    plugins: anyio-4.12.1, cov-7.0.0
    collecting ... collected 104 items

tests/test_agent_config_consistency.py::TestAgentConfigConsistency::test_runtime_config_uses_kiro_cli_and_removes_q PASSED [ 0%]
tests/test_agent_config_consistency.py::TestAgentConfigConsistency::test_extension_registrar_uses_kiro_cli_and_removes_q PASSED [ 1%]
tests/test_agent_config_consistency.py::TestAgentConfigConsistency::test_release_agent_lists_include_kiro_cli_and_exclude_q PASSED [ 2%]
tests/test_agent_config_consistency.py::TestAgentConfigConsistency::test_release_output_targets_kiro_prompt_dir PASSED [ 3%]
tests/test_agent_config_consistency.py::TestAgentConfigConsistency::test_agent_context_scripts_use_kiro_cli PASSED [ 4%]
tests/test_ai_skills.py::TestGetSkillsDir::test_claude_skills_dir PASSED [ 5%]
tests/test_ai_skills.py::TestGetSkillsDir::test_gemini_skills_dir PASSED [ 6%]
tests/test_ai_skills.py::TestGetSkillsDir::test_copilot_skills_dir PASSED [ 7%]
tests/test_ai_skills.py::TestGetSkillsDir::test_codex_uses_override PASSED [ 8%]
tests/test_ai_skills.py::TestGetSkillsDir::test_cursor_agent_skills_dir PASSED [ 9%]
tests/test_ai_skills.py::TestGetSkillsDir::test_kiro_cli_skills_dir PASSED [ 10%]
tests/test_ai_skills.py::TestGetSkillsDir::test_unknown_agent_uses_default PASSED [ 11%]
tests/test_ai_skills.py::TestGetSkillsDir::test_all_configured_agents_resolve PASSED [ 12%]
tests/test_ai_skills.py::TestGetSkillsDir::test_override_takes_precedence_over_config PASSED [ 13%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_installed_with_correct_structure PASSED [ 14%]
tests/test_ai_skills.py::TestInstallAiSkills::test_generated_skill_has_parseable_yaml PASSED [ 15%]
tests/test_ai_skills.py::TestInstallAiSkills::test_empty_yaml_frontmatter PASSED [ 16%]
tests/test_ai_skills.py::TestInstallAiSkills::test_enhanced_descriptions_used_when_available PASSED [ 17%]
tests/test_ai_skills.py::TestInstallAiSkills::test_template_without_frontmatter PASSED [ 18%]
tests/test_ai_skills.py::TestInstallAiSkills::test_missing_templates_directory PASSED [ 19%]
tests/test_ai_skills.py::TestInstallAiSkills::test_empty_templates_directory PASSED [ 20%]
tests/test_ai_skills.py::TestInstallAiSkills::test_malformed_yaml_frontmatter PASSED [ 21%]
tests/test_ai_skills.py::TestInstallAiSkills::test_additive_does_not_overwrite_other_files PASSED [ 22%]
tests/test_ai_skills.py::TestInstallAiSkills::test_return_value PASSED [ 23%]
tests/test_ai_skills.py::TestInstallAiSkills::test_return_false_when_no_templates PASSED [ 24%]
tests/test_ai_skills.py::TestInstallAiSkills::test_non_md_commands_dir_falls_back PASSED [ 25%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[copilot] PASSED [ 25%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[claude] PASSED [ 26%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[gemini] PASSED [ 27%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[cursor-agent] PASSED [ 28%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[qwen] PASSED [ 29%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[opencode] PASSED [ 30%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[codex] PASSED [ 31%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[windsurf] PASSED [ 32%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[kilocode] PASSED [ 33%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[auggie] PASSED [ 34%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[codebuddy] PASSED [ 35%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[qodercli] PASSED [ 36%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[roo] PASSED [ 37%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[kiro-cli] PASSED [ 38%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[amp] PASSED [ 39%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[shai] PASSED [ 40%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[agy] PASSED [ 41%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[bob] PASSED [ 42%]
tests/test_ai_skills.py::TestCommandCoexistence::test_existing_commands_preserved_claude PASSED [ 43%]
tests/test_ai_skills.py::TestCommandCoexistence::test_existing_commands_preserved_gemini PASSED [ 44%]
tests/test_ai_skills.py::TestCommandCoexistence::test_commands_dir_not_removed PASSED [ 45%]
tests/test_ai_skills.py::TestCommandCoexistence::test_no_commands_dir_no_error PASSED [ 46%]
tests/test_ai_skills.py::TestNewProjectCommandSkip::test_new_project_commands_removed_after_skills_succeed PASSED [ 47%]
tests/test_ai_skills.py::TestNewProjectCommandSkip::test_commands_preserved_when_skills_fail PASSED [ 48%]
tests/test_ai_skills.py::TestNewProjectCommandSkip::test_here_mode_commands_preserved PASSED [ 49%]
tests/test_ai_skills.py::TestSkipIfExists::test_existing_skill_not_overwritten PASSED [ 50%]
tests/test_ai_skills.py::TestSkipIfExists::test_fresh_install_writes_all_skills PASSED [ 50%]
tests/test_ai_skills.py::TestSkillDescriptions::test_all_known_commands_have_descriptions PASSED [ 51%]
tests/test_ai_skills.py::TestCliValidation::test_ai_skills_without_ai_fails PASSED [ 52%]
tests/test_ai_skills.py::TestCliValidation::test_ai_skills_without_ai_shows_usage PASSED [ 53%]
tests/test_ai_skills.py::TestCliValidation::test_ai_skills_flag_appears_in_help PASSED [ 54%]
tests/test_ai_skills.py::TestCliValidation::test_kiro_alias_normalized_to_kiro_cli PASSED [ 55%]
tests/test_ai_skills.py::TestCliValidation::test_q_removed_from_agent_config PASSED [ 56%]
tests/test_ai_skills.py::TestParameterOrderingIssue::test_ai_flag_consuming_here_flag PASSED [ 57%]
tests/test_ai_skills.py::TestParameterOrderingIssue::test_ai_flag_consuming_ai_skills_flag PASSED [ 58%]
tests/test_ai_skills.py::TestParameterOrderingIssue::test_error_message_provides_hint PASSED [ 59%]
tests/test_ai_skills.py::TestParameterOrderingIssue::test_error_message_lists_available_agents PASSED [ 60%]
tests/test_ai_skills.py::TestParameterOrderingIssue::test_ai_commands_dir_consuming_flag PASSED [ 61%]
tests/test_extensions.py::TestExtensionManifest::test_valid_manifest PASSED [ 62%]
tests/test_extensions.py::TestExtensionManifest::test_missing_required_field PASSED [ 63%]
tests/test_extensions.py::TestExtensionManifest::test_invalid_extension_id PASSED [ 64%]
tests/test_extensions.py::TestExtensionManifest::test_invalid_version PASSED [ 65%]
tests/test_extensions.py::TestExtensionManifest::test_invalid_command_name PASSED [ 66%]
tests/test_extensions.py::TestExtensionManifest::test_no_commands PASSED [ 67%]
tests/test_extensions.py::TestExtensionManifest::test_manifest_hash PASSED [ 68%]
tests/test_extensions.py::TestExtensionRegistry::test_empty_registry PASSED [ 69%]
tests/test_extensions.py::TestExtensionRegistry::test_add_extension PASSED [ 70%]
tests/test_extensions.py::TestExtensionRegistry::test_remove_extension PASSED [ 71%]
tests/test_extensions.py::TestExtensionRegistry::test_registry_persistence PASSED [ 72%]
tests/test_extensions.py::TestExtensionManager::test_check_compatibility_valid PASSED [ 73%]
tests/test_extensions.py::TestExtensionManager::test_check_compatibility_invalid PASSED [ 74%]
tests/test_extensions.py::TestExtensionManager::test_install_from_directory PASSED [ 75%]
tests/test_extensions.py::TestExtensionManager::test_install_duplicate PASSED [ 75%]
tests/test_extensions.py::TestExtensionManager::test_remove_extension PASSED [ 76%]
tests/test_extensions.py::TestExtensionManager::test_remove_nonexistent PASSED [ 77%]
tests/test_extensions.py::TestExtensionManager::test_list_installed PASSED [ 78%]
tests/test_extensions.py::TestExtensionManager::test_config_backup_on_remove PASSED [ 79%]
tests/test_extensions.py::TestCommandRegistrar::test_kiro_cli_agent_config_present PASSED [ 80%]
tests/test_extensions.py::TestCommandRegistrar::test_parse_frontmatter_valid PASSED [ 81%]
tests/test_extensions.py::TestCommandRegistrar::test_parse_frontmatter_no_frontmatter PASSED [ 82%]
tests/test_extensions.py::TestCommandRegistrar::test_render_frontmatter PASSED [ 83%]
tests/test_extensions.py::TestCommandRegistrar::test_register_commands_for_claude PASSED [ 84%]
tests/test_extensions.py::TestCommandRegistrar::test_command_with_aliases PASSED [ 85%]
tests/test_extensions.py::TestVersionSatisfies::test_version_satisfies_simple PASSED [ 86%]
tests/test_extensions.py::TestVersionSatisfies::test_version_satisfies_range PASSED [ 87%]
tests/test_extensions.py::TestVersionSatisfies::test_version_satisfies_complex PASSED [ 88%]
tests/test_extensions.py::TestVersionSatisfies::test_version_satisfies_invalid PASSED [ 89%]
tests/test_extensions.py::TestIntegration::test_full_install_and_remove_workflow PASSED [ 90%]
tests/test_extensions.py::TestIntegration::test_multiple_extensions PASSED [ 91%]
tests/test_extensions.py::TestExtensionCatalog::test_catalog_initialization PASSED [ 92%]
tests/test_extensions.py::TestExtensionCatalog::test_cache_directory_creation PASSED [ 93%]
tests/test_extensions.py::TestExtensionCatalog::test_cache_expiration PASSED [ 94%]
tests/test_extensions.py::TestExtensionCatalog::test_search_all_extensions PASSED [ 95%]
tests/test_extensions.py::TestExtensionCatalog::test_search_by_query PASSED [ 96%]
tests/test_extensions.py::TestExtensionCatalog::test_search_by_tag PASSED [ 97%]
tests/test_extensions.py::TestExtensionCatalog::test_search_verified_only PASSED [ 98%]
tests/test_extensions.py::TestExtensionCatalog::test_get_extension_info PASSED [ 99%]
tests/test_extensions.py::TestExtensionCatalog::test_clear_cache PASSED [100%]

============================= 104 passed in 0.74s ============================== ✅ (104 passed)

  • ============================= test session starts ==============================
    platform darwin -- Python 3.14.3, pytest-9.0.2, pluggy-1.6.0 -- /Users/medhat.galal/Desktop/AI_Repos/spec-kit/.venv/bin/python3
    cachedir: .pytest_cache
    rootdir: /Users/medhat.galal/Desktop/AI_Repos/spec-kit
    configfile: pyproject.toml
    plugins: anyio-4.12.1, cov-7.0.0
    collecting ... collected 104 items

tests/test_ai_skills.py::TestGetSkillsDir::test_claude_skills_dir PASSED [ 0%]
tests/test_ai_skills.py::TestGetSkillsDir::test_gemini_skills_dir PASSED [ 1%]
tests/test_ai_skills.py::TestGetSkillsDir::test_copilot_skills_dir PASSED [ 2%]
tests/test_ai_skills.py::TestGetSkillsDir::test_codex_uses_override PASSED [ 3%]
tests/test_ai_skills.py::TestGetSkillsDir::test_cursor_agent_skills_dir PASSED [ 4%]
tests/test_ai_skills.py::TestGetSkillsDir::test_kiro_cli_skills_dir PASSED [ 5%]
tests/test_ai_skills.py::TestGetSkillsDir::test_unknown_agent_uses_default PASSED [ 6%]
tests/test_ai_skills.py::TestGetSkillsDir::test_all_configured_agents_resolve PASSED [ 7%]
tests/test_ai_skills.py::TestGetSkillsDir::test_override_takes_precedence_over_config PASSED [ 8%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_installed_with_correct_structure PASSED [ 9%]
tests/test_ai_skills.py::TestInstallAiSkills::test_generated_skill_has_parseable_yaml PASSED [ 10%]
tests/test_ai_skills.py::TestInstallAiSkills::test_empty_yaml_frontmatter PASSED [ 11%]
tests/test_ai_skills.py::TestInstallAiSkills::test_enhanced_descriptions_used_when_available PASSED [ 12%]
tests/test_ai_skills.py::TestInstallAiSkills::test_template_without_frontmatter PASSED [ 13%]
tests/test_ai_skills.py::TestInstallAiSkills::test_missing_templates_directory PASSED [ 14%]
tests/test_ai_skills.py::TestInstallAiSkills::test_empty_templates_directory PASSED [ 15%]
tests/test_ai_skills.py::TestInstallAiSkills::test_malformed_yaml_frontmatter PASSED [ 16%]
tests/test_ai_skills.py::TestInstallAiSkills::test_additive_does_not_overwrite_other_files PASSED [ 17%]
tests/test_ai_skills.py::TestInstallAiSkills::test_return_value PASSED [ 18%]
tests/test_ai_skills.py::TestInstallAiSkills::test_return_false_when_no_templates PASSED [ 19%]
tests/test_ai_skills.py::TestInstallAiSkills::test_non_md_commands_dir_falls_back PASSED [ 20%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[copilot] PASSED [ 21%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[claude] PASSED [ 22%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[gemini] PASSED [ 23%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[cursor-agent] PASSED [ 24%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[qwen] PASSED [ 25%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[opencode] PASSED [ 25%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[codex] PASSED [ 26%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[windsurf] PASSED [ 27%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[kilocode] PASSED [ 28%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[auggie] PASSED [ 29%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[codebuddy] PASSED [ 30%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[qodercli] PASSED [ 31%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[roo] PASSED [ 32%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[kiro-cli] PASSED [ 33%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[amp] PASSED [ 34%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[shai] PASSED [ 35%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[agy] PASSED [ 36%]
tests/test_ai_skills.py::TestInstallAiSkills::test_skills_install_for_all_agents[bob] PASSED [ 37%]
tests/test_ai_skills.py::TestCommandCoexistence::test_existing_commands_preserved_claude PASSED [ 38%]
tests/test_ai_skills.py::TestCommandCoexistence::test_existing_commands_preserved_gemini PASSED [ 39%]
tests/test_ai_skills.py::TestCommandCoexistence::test_commands_dir_not_removed PASSED [ 40%]
tests/test_ai_skills.py::TestCommandCoexistence::test_no_commands_dir_no_error PASSED [ 41%]
tests/test_ai_skills.py::TestNewProjectCommandSkip::test_new_project_commands_removed_after_skills_succeed PASSED [ 42%]
tests/test_ai_skills.py::TestNewProjectCommandSkip::test_commands_preserved_when_skills_fail PASSED [ 43%]
tests/test_ai_skills.py::TestNewProjectCommandSkip::test_here_mode_commands_preserved PASSED [ 44%]
tests/test_ai_skills.py::TestSkipIfExists::test_existing_skill_not_overwritten PASSED [ 45%]
tests/test_ai_skills.py::TestSkipIfExists::test_fresh_install_writes_all_skills PASSED [ 46%]
tests/test_ai_skills.py::TestSkillDescriptions::test_all_known_commands_have_descriptions PASSED [ 47%]
tests/test_ai_skills.py::TestCliValidation::test_ai_skills_without_ai_fails PASSED [ 48%]
tests/test_ai_skills.py::TestCliValidation::test_ai_skills_without_ai_shows_usage PASSED [ 49%]
tests/test_ai_skills.py::TestCliValidation::test_ai_skills_flag_appears_in_help PASSED [ 50%]
tests/test_ai_skills.py::TestCliValidation::test_kiro_alias_normalized_to_kiro_cli PASSED [ 50%]
tests/test_ai_skills.py::TestCliValidation::test_q_removed_from_agent_config PASSED [ 51%]
tests/test_ai_skills.py::TestParameterOrderingIssue::test_ai_flag_consuming_here_flag PASSED [ 52%]
tests/test_ai_skills.py::TestParameterOrderingIssue::test_ai_flag_consuming_ai_skills_flag PASSED [ 53%]
tests/test_ai_skills.py::TestParameterOrderingIssue::test_error_message_provides_hint PASSED [ 54%]
tests/test_ai_skills.py::TestParameterOrderingIssue::test_error_message_lists_available_agents PASSED [ 55%]
tests/test_ai_skills.py::TestParameterOrderingIssue::test_ai_commands_dir_consuming_flag PASSED [ 56%]
tests/test_extensions.py::TestExtensionManifest::test_valid_manifest PASSED [ 57%]
tests/test_extensions.py::TestExtensionManifest::test_missing_required_field PASSED [ 58%]
tests/test_extensions.py::TestExtensionManifest::test_invalid_extension_id PASSED [ 59%]
tests/test_extensions.py::TestExtensionManifest::test_invalid_version PASSED [ 60%]
tests/test_extensions.py::TestExtensionManifest::test_invalid_command_name PASSED [ 61%]
tests/test_extensions.py::TestExtensionManifest::test_no_commands PASSED [ 62%]
tests/test_extensions.py::TestExtensionManifest::test_manifest_hash PASSED [ 63%]
tests/test_extensions.py::TestExtensionRegistry::test_empty_registry PASSED [ 64%]
tests/test_extensions.py::TestExtensionRegistry::test_add_extension PASSED [ 65%]
tests/test_extensions.py::TestExtensionRegistry::test_remove_extension PASSED [ 66%]
tests/test_extensions.py::TestExtensionRegistry::test_registry_persistence PASSED [ 67%]
tests/test_extensions.py::TestExtensionManager::test_check_compatibility_valid PASSED [ 68%]
tests/test_extensions.py::TestExtensionManager::test_check_compatibility_invalid PASSED [ 69%]
tests/test_extensions.py::TestExtensionManager::test_install_from_directory PASSED [ 70%]
tests/test_extensions.py::TestExtensionManager::test_install_duplicate PASSED [ 71%]
tests/test_extensions.py::TestExtensionManager::test_remove_extension PASSED [ 72%]
tests/test_extensions.py::TestExtensionManager::test_remove_nonexistent PASSED [ 73%]
tests/test_extensions.py::TestExtensionManager::test_list_installed PASSED [ 74%]
tests/test_extensions.py::TestExtensionManager::test_config_backup_on_remove PASSED [ 75%]
tests/test_extensions.py::TestCommandRegistrar::test_kiro_cli_agent_config_present PASSED [ 75%]
tests/test_extensions.py::TestCommandRegistrar::test_parse_frontmatter_valid PASSED [ 76%]
tests/test_extensions.py::TestCommandRegistrar::test_parse_frontmatter_no_frontmatter PASSED [ 77%]
tests/test_extensions.py::TestCommandRegistrar::test_render_frontmatter PASSED [ 78%]
tests/test_extensions.py::TestCommandRegistrar::test_register_commands_for_claude PASSED [ 79%]
tests/test_extensions.py::TestCommandRegistrar::test_command_with_aliases PASSED [ 80%]
tests/test_extensions.py::TestVersionSatisfies::test_version_satisfies_simple PASSED [ 81%]
tests/test_extensions.py::TestVersionSatisfies::test_version_satisfies_range PASSED [ 82%]
tests/test_extensions.py::TestVersionSatisfies::test_version_satisfies_complex PASSED [ 83%]
tests/test_extensions.py::TestVersionSatisfies::test_version_satisfies_invalid PASSED [ 84%]
tests/test_extensions.py::TestIntegration::test_full_install_and_remove_workflow PASSED [ 85%]
tests/test_extensions.py::TestIntegration::test_multiple_extensions PASSED [ 86%]
tests/test_extensions.py::TestExtensionCatalog::test_catalog_initialization PASSED [ 87%]
tests/test_extensions.py::TestExtensionCatalog::test_cache_directory_creation PASSED [ 88%]
tests/test_extensions.py::TestExtensionCatalog::test_cache_expiration PASSED [ 89%]
tests/test_extensions.py::TestExtensionCatalog::test_search_all_extensions PASSED [ 90%]
tests/test_extensions.py::TestExtensionCatalog::test_search_by_query PASSED [ 91%]
tests/test_extensions.py::TestExtensionCatalog::test_search_by_tag PASSED [ 92%]
tests/test_extensions.py::TestExtensionCatalog::test_search_verified_only PASSED [ 93%]
tests/test_extensions.py::TestExtensionCatalog::test_get_extension_info PASSED [ 94%]
tests/test_extensions.py::TestExtensionCatalog::test_clear_cache PASSED [ 95%]
tests/test_agent_config_consistency.py::TestAgentConfigConsistency::test_runtime_config_uses_kiro_cli_and_removes_q PASSED [ 96%]
tests/test_agent_config_consistency.py::TestAgentConfigConsistency::test_extension_registrar_uses_kiro_cli_and_removes_q PASSED [ 97%]
tests/test_agent_config_consistency.py::TestAgentConfigConsistency::test_release_agent_lists_include_kiro_cli_and_exclude_q PASSED [ 98%]
tests/test_agent_config_consistency.py::TestAgentConfigConsistency::test_release_output_targets_kiro_prompt_dir PASSED [ 99%]
tests/test_agent_config_consistency.py::TestAgentConfigConsistency::test_agent_context_scripts_use_kiro_cli PASSED [100%]

============================= 104 passed in 0.70s ============================== ✅ (104 passed)

AI Disclosure

Used ChatGPT/Codex as an AI coding assistant for implementing and reviewing the edits.

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR migrates the Spec Kit CLI’s “Amazon Q” agent integration (q) to a new dedicated kiro-cli agent, updating runtime configuration, packaging scripts, context update scripts, docs, and adding regression tests to keep these surfaces consistent.

Changes:

  • Replace q with kiro-cli across AGENT_CONFIG, extension command registration, release packaging, and documentation.
  • Add --ai kiro alias normalization to canonical kiro-cli.
  • Add cross-surface consistency tests to prevent future drift between runtime config, scripts, and release artifacts.

Reviewed changes

Copilot reviewed 19 out of 19 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
src/specify_cli/__init__.py Replaces q with kiro-cli, adds kiro alias normalization, and updates tool detection to accept kiro or kiro-cli.
src/specify_cli/extensions.py Updates CommandRegistrar.AGENT_CONFIGS to emit .kiro/prompts for kiro-cli.
.github/workflows/scripts/create-release-packages.sh Updates agent lists and artifact generation to build .kiro/prompts instead of .amazonq/prompts.
.github/workflows/scripts/create-release-packages.ps1 Mirrors release packaging updates for PowerShell builds.
.github/workflows/scripts/create-github-release.sh Updates GitHub release asset list to include kiro-cli zips instead of q.
scripts/bash/update-agent-context.sh Replaces q with kiro-cli in supported agent lists and update routing.
scripts/powershell/update-agent-context.ps1 Mirrors context update script changes for PowerShell.
.devcontainer/post-create.sh Swaps Amazon Q install steps for Kiro install steps.
.devcontainer/devcontainer.json Removes the Amazon Q VS Code extension.
README.md Updates supported agent documentation and examples for kiro-cli (+ alias).
AGENTS.md Updates agent matrix and instructions to reflect kiro-cli prompts mapping.
CHANGELOG.md Adds 0.1.7 entry documenting the migration.
pyproject.toml Bumps version to 0.1.7.
tests/test_ai_skills.py Adds kiro-cli skills-dir coverage + alias normalization test; strengthens a couple assertions.
tests/test_extensions.py Adds a regression test ensuring the registrar contains kiro-cli and not q.
tests/test_agent_config_consistency.py Adds regression checks for consistency across runtime config, scripts, and release outputs.
.github/ISSUE_TEMPLATE/*.yml Updates issue templates to reference Kiro CLI instead of Amazon Q.
Comments suppressed due to low confidence (1)

tests/test_extensions.py:408

  • AGENT_CONFIGS is a class attribute, so instantiating CommandRegistrar() here isn't necessary and can make the test slightly more coupled to constructor behavior. Prefer referencing CommandRegistrar.AGENT_CONFIGS directly to keep the test focused on the constant mapping.
    def test_kiro_cli_agent_config_present(self):
        """Kiro CLI should be mapped to .kiro/prompts and legacy q removed."""
        registrar = CommandRegistrar()

        assert "kiro-cli" in registrar.AGENT_CONFIGS
        assert registrar.AGENT_CONFIGS["kiro-cli"]["dir"] == ".kiro/prompts"
        assert "q" not in registrar.AGENT_CONFIGS

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

run_command "rm -rf ./q q.zip q.zip.sig amazonq-public-key.asc"
echo -e "\n🤖 Installing Kiro CLI..."
# https://kiro.dev/docs/cli/
run_command "curl -fsSL https://cli.kiro.dev/install | bash"
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The devcontainer setup now installs Kiro via curl ... | bash, which executes a remote script without integrity verification. Consider switching to a pinned versioned artifact with checksum/signature verification (or at least downloading to disk and verifying) to reduce supply-chain risk for anyone building the devcontainer.

Suggested change
run_command "curl -fsSL https://cli.kiro.dev/install | bash"
KIRO_INSTALLER_URL="https://cli.kiro.dev/install"
KIRO_INSTALLER_PATH="/tmp/kiro-install.sh"
run_command "curl -fsSL \"$KIRO_INSTALLER_URL\" -o \"$KIRO_INSTALLER_PATH\""
run_command "bash \"$KIRO_INSTALLER_PATH\""
rm -f "$KIRO_INSTALLER_PATH"

Copilot uses AI. Check for mistakes.
echo -e "\n🤖 Installing Kiro CLI..."
# https://kiro.dev/docs/cli/
run_command "curl -fsSL https://cli.kiro.dev/install | bash"
run_command "kiro-cli --help > /dev/null"
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The script verifies installation by running kiro-cli --help, but the runtime code explicitly supports environments where the executable is named kiro (fallback). If the installer places kiro on PATH, this devcontainer step will fail. Consider checking for either executable (or invoking whichever is present) to match the CLI's detection behavior.

Suggested change
run_command "kiro-cli --help > /dev/null"
if command -v kiro-cli >/dev/null 2>&1; then
run_command "kiro-cli --help > /dev/null"
elif command -v kiro >/dev/null 2>&1; then
run_command "kiro --help > /dev/null"
else
echo -e "\033[0;31m[ERROR] Neither 'kiro-cli' nor 'kiro' was found on PATH after installation.\033[0m" >&2
exit 1
fi

Copilot uses AI. Check for mistakes.
patch("specify_cli.shutil.which", return_value="/usr/bin/git"):
result = runner.invoke(app, ["init", "--here", "--ai", "claude", "--ai-skills", "--script", "sh", "--no-git"])

runner.invoke(app, ["init", "--here", "--ai", "claude", "--ai-skills", "--script", "sh", "--no-git"])
Copy link

Copilot AI Feb 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test no longer captures the runner.invoke(...) result, so it can't assert exit_code (or surface output) and may pass even if init fails. Capture the result and assert success here (similar to the other tests above) to avoid false positives.

Suggested change
runner.invoke(app, ["init", "--here", "--ai", "claude", "--ai-skills", "--script", "sh", "--no-git"])
result = runner.invoke(app, ["init", "--here", "--ai", "claude", "--ai-skills", "--script", "sh", "--no-git"])
assert result.exit_code == 0

Copilot uses AI. Check for mistakes.
Copy link
Collaborator

@mnriem mnriem left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please address Copilot feedback or explain why it is not needed

@medhatgalal
Copy link
Author

Addressed all open PR #1690 review items:

  • tests/test_extensions.py::TestCommandRegistrar.test_kiro_cli_agent_config_present now reads CommandRegistrar.AGENT_CONFIGS directly (no instance construction), matching reviewer guidance.
  • .devcontainer/post-create.sh installer updated to a safer flow: download installer to mktemp path, optional integrity check via KIRO_INSTALLER_SHA256, execute script from file, assert either 38% > 38% > or is available, and verify help output with the detected binary.
  • tests/test_ai_skills.py::TestNewProjectCommandSkip::test_here_mode_commands_preserved now captures from and asserts before filesystem checks. Added to avoid flaky interactive confirmation on non-empty directories.

Validation run:

  • uv run pytest tests/test_ai_skills.py tests/test_extensions.py
  • uv run pytest
  • uvx ruff check src/
  • uv run specify --help

All are passing. Please re-review this commit when convenient.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants