Skip to content

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

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

feat: add kiro-cli and AGENT_CONFIG consistency coverage#1690
medhatgalal wants to merge 4 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.

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.

@medhatgalal
Copy link
Author

Applied one requested deterministic fix from the latest review comments and pushed commit e3fd551 to codex/integrate-ai-agent-updates.

  • In tests/test_ai_skills.py, updated the TestNewProjectCommandSkip.test_here_mode_commands_preserved path to capture runner.invoke(...) result before assertions and assert result.exit_code == 0.

Other Copilot review items in .devcontainer/post-create.sh are already addressed in this branch (curl downloaded to temp file with optional checksum verification and runtime check supports both kiro-cli/kiro).

Note: full test/lint runs could not be executed in this environment yet due missing runtime deps (typer not installed in current Python env).

@medhatgalal
Copy link
Author

Updated PR branch with a second commit (6afc1a5) to fully apply the Copilot request on tests/test_ai_skills.py while keeping the test deterministic.

Changes in tests/test_ai_skills.py (test_here_mode_commands_preserved):

  • Capture the return value of runner.invoke(...) in a variable.
  • Assert result.exit_code == 0.
  • Provide input="y\n" so the existing --here merge confirmation is exercised deterministically in non-interactive mode.

Validation run:

  • uv run --with ".[test]" pytest -q tests/test_ai_skills.py -k test_here_mode_commands_preserved => pass.
  • uv run --with ".[test]" pytest -q tests/test_ai_skills.py => 8/59 failures unrelated to this change (existing environment/fixtures path issue: command templates not found in this environment).

Notes:

  • The two .devcontainer/post-create.sh review items appear on outdated threads but are already satisfied in current branch content (installer download hardening + kiro/kiro-cli fallback check).

@medhatgalal
Copy link
Author

Applied one requested deterministic fix from the latest review comments and pushed commit to .\n\n- In , updated the path to capture result before assertions and assert .\n\nOther Copilot review items in
🤖 Installing Copilot CLI...
✅ Done

🤖 Installing Claude CLI...
✅ Done

🤖 Installing Codex CLI...
✅ Done

🤖 Installing Gemini CLI... are already addressed in this branch ( downloaded to temp file with optional checksum verification and runtime check supports both 20% > 20% > /).\n\nNote: full test/lint runs could not be executed in this environment yet due missing runtime deps ( not installed in current Python env).

@medhatgalal
Copy link
Author

I’ve resolved the original review points from Copilot on PR #1690 and re-checked the current PR head.

Current head is 6afc1a5 (chain: 3372aa1 -> e636367 -> e3fd551 -> 6afc1a5).

Proof in branch:

  • .devcontainer/post-create.sh
    • Downloads installer to temp file via mktemp and curl -fsSL ... -o "$KIRO_INSTALLER_PATH".
    • Optional checksum verification via KIRO_INSTALLER_SHA256 + sha256sum -c.
    • Supports both binaries for validation (kiro-cli or kiro) before calling --help.
  • tests/test_ai_skills.py (here-mode test)
    • Captures runner.invoke(...) result.
    • Asserts result.exit_code == 0.
    • Provides deterministic input input="y\n" for the here-mode confirmation path.

Note: the unresolved review threads still visible are from Copilot and are now marked isOutdated=true in GraphQL thread state.

Request:

  1. Please dismiss/resolve the outdated threads and
  2. please re-run/re-submit review so reviewDecision can refresh.

If anything else is still required as a fresh comment, I can patch it immediately.

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

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

Comments suppressed due to low confidence (1)

.github/workflows/scripts/create-release-packages.sh:10

  • The comment describing the valid AGENTS subset is incomplete (it omits agents that are actually in ALL_AGENTS, e.g. kilocode, auggie, roo, codebuddy, agy, qodercli). This can mislead maintainers/users of the script; please update the comment to reflect the real allowed list (or derive it from ALL_AGENTS).
#   Optionally set AGENTS and/or SCRIPTS env vars to limit what gets built.
#     AGENTS  : space or comma separated subset of: claude gemini copilot cursor-agent qwen opencode windsurf codex amp shai bob kiro-cli generic (default: all)
#     SCRIPTS : space or comma separated subset of: sh ps (default: both)

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

@medhatgalal
Copy link
Author

I’ve addressed all currently open comments on this PR:\n\n- .github/workflows/scripts/create-release-packages.ps1\n - Added explicit cases for and with correct output dirs (, ) and kept style consistent.\n - Added unsupported-agent default in switch for fail-fast behavior.\n\n- .devcontainer/post-create.sh\n - Tightened Kiro installer flow: checksum verification remains supported via ; default behavior now fails if hash is missing unless explicitly overridden with for explicit opt-in.\n - Kept temp-file install pattern and retained 14% > 14% > / runtime binary fallback + validation.\n\n- src/specify_cli/init.py\n - Updated help generation to be derived from and now includes plus alias note: \n\nAlso updated test coverage in tests/test_agent_config_consistency.py to assert shai/agy packaging script branches and updated help text expectations for roo + kiro alias note.\n\nPlease re-review and refresh comment threads when convenient.

@medhatgalal
Copy link
Author

I’ve implemented all currently open comments on this PR:

  • .github/workflows/scripts/create-release-packages.ps1

    • Added explicit Build-Variant cases for shai and agy with correct output dirs
      • shai -> .shai/commands
      • agy -> .agent/workflows
    • Kept Generate-Commands call style consistent
    • Added unsupported-agent default branch to fail fast
  • .devcontainer/post-create.sh

    • Kept temp-file Kiro download + bash execution flow
    • Enforced deterministic verification semantics by default:
      • Uses KIRO_INSTALLER_SHA256 when present
      • otherwise requires explicit opt-in via KIRO_SKIP_KIRO_INSTALLER_VERIFY=1
    • Retained runtime binary detection for kiro-cli and kiro
  • src/specify_cli/init.py

    • --ai help text now uses AGENT_CONFIG-derived generation
    • Includes roo
    • Includes explicit kiro alias note

Also updated tests in tests/test_agent_config_consistency.py to assert:

  • shai/agy packaging branches and output targets in scripts
  • help text includes roo and the kiro alias note

Please re-review these changes.

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

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


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

Comment on lines +54 to +71
echo -e "\n🤖 Installing Kiro CLI..."
# https://kiro.dev/docs/cli/
KIRO_INSTALLER_URL="https://cli.kiro.dev/install"
KIRO_INSTALLER_PATH="$(mktemp)"

cleanup_kiro_installer() {
rm -f "$KIRO_INSTALLER_PATH"
}
trap cleanup_kiro_installer EXIT

run_command "curl -fsSL \"$KIRO_INSTALLER_URL\" -o \"$KIRO_INSTALLER_PATH\""

if [ -n "${KIRO_INSTALLER_SHA256:-}" ]; then
run_command "echo \"$KIRO_INSTALLER_SHA256 $KIRO_INSTALLER_PATH\" | sha256sum -c -"
fi

run_command "bash \"$KIRO_INSTALLER_PATH\""

Copy link

Copilot AI Feb 27, 2026

Choose a reason for hiding this comment

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

The devcontainer setup downloads an installer script over HTTPS and executes it (bash "$KIRO_INSTALLER_PATH") without any integrity verification by default; checksum validation is only performed if KIRO_INSTALLER_SHA256 is manually provided. To avoid a supply-chain risk regression (the previous Amazon Q flow verified a signature), consider pinning a known checksum/version in the repo or adding an always-on verification step (e.g., shipped checksum/signature in-repo, or installer-provided signature verification) and failing closed when verification data is missing.

Copilot uses AI. Check for mistakes.
Comment on lines +219 to 224
"kiro-cli": {
"name": "Kiro CLI",
"folder": ".kiro/",
"commands_subdir": "prompts", # Special: uses prompts/ not commands/
"install_url": "https://aws.amazon.com/developer/learning/q-developer-cli/",
"install_url": "https://kiro.dev/docs/cli/",
"requires_cli": True,
Copy link

Copilot AI Feb 27, 2026

Choose a reason for hiding this comment

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

AGENT_CONFIG declares commands_subdir: "prompts" for kiro-cli, but init()'s post---ai-skills cleanup later deletes <agent_folder>/commands (hard-coded) rather than using the configured commands_subdir. That means extracted prompts for kiro-cli (and any other non-"commands" agents) won’t be removed even when skills install succeeds, leaving duplicated commands/prompts alongside skills. Update the cleanup logic to delete the configured subdir (and consider using the same commands_subdir variable used by install_ai_skills).

Copilot uses AI. Check for mistakes.
@mnriem
Copy link
Collaborator

mnriem commented Feb 27, 2026

@medhatgalal Can you address the remaining feedback?

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