feat: add kiro-cli and AGENT_CONFIG consistency coverage#1690
feat: add kiro-cli and AGENT_CONFIG consistency coverage#1690medhatgalal wants to merge 2 commits intogithub:mainfrom
Conversation
There was a problem hiding this comment.
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
qwithkiro-cliacrossAGENT_CONFIG, extension command registration, release packaging, and documentation. - Add
--ai kiroalias normalization to canonicalkiro-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_CONFIGSis a class attribute, so instantiatingCommandRegistrar()here isn't necessary and can make the test slightly more coupled to constructor behavior. Prefer referencingCommandRegistrar.AGENT_CONFIGSdirectly 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.
.devcontainer/post-create.sh
Outdated
| 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" |
There was a problem hiding this comment.
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.
| 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" |
.devcontainer/post-create.sh
Outdated
| 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" |
There was a problem hiding this comment.
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.
| 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 |
tests/test_ai_skills.py
Outdated
| 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"]) |
There was a problem hiding this comment.
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.
| 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 |
mnriem
left a comment
There was a problem hiding this comment.
Please address Copilot feedback or explain why it is not needed
|
Addressed all open PR #1690 review items:
Validation run:
All are passing. Please re-review this commit when convenient. |
Summary
Testing
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 │
╰──────────────────────────────────────────────────────────────────────────────╯
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)
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.