feat: add kiro-cli and AGENT_CONFIG consistency coverage#1690
feat: add kiro-cli and AGENT_CONFIG consistency coverage#1690medhatgalal wants to merge 4 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.
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. |
|
Applied one requested deterministic fix from the latest review comments and pushed commit
Other Copilot review items in Note: full test/lint runs could not be executed in this environment yet due missing runtime deps ( |
|
Updated PR branch with a second commit ( Changes in
Validation run:
Notes:
|
|
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 Claude CLI... 🤖 Installing Codex CLI... 🤖 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). |
|
I’ve resolved the original review points from Copilot on PR #1690 and re-checked the current PR head. Current head is Proof in branch:
Note: the unresolved review threads still visible are from Copilot and are now marked Request:
If anything else is still required as a fresh comment, I can patch it immediately. |
There was a problem hiding this comment.
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
AGENTSsubset is incomplete (it omits agents that are actually inALL_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 fromALL_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.
|
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. |
|
I’ve implemented all currently open comments on this PR:
Also updated tests in tests/test_agent_config_consistency.py to assert:
Please re-review these changes. |
There was a problem hiding this comment.
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.
| 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\"" | ||
|
|
There was a problem hiding this comment.
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.
| "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, |
There was a problem hiding this comment.
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).
|
@medhatgalal Can you address the remaining feedback? |
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.