* Initial plan
* feat!: remove legacy --ai, --ai-commands-dir, and --ai-skills flags at 0.10.0
* refactor(tests): rename stale test_ai_help_* methods to test_agent_config_*
* fix: address review — derive agent folder for generic integration and remove redundant test
- Security notice now falls back to integration_parsed_options['commands_dir']
when AGENT_CONFIG folder is None (generic integration).
- Remove test_agent_config_includes_kiro_cli which duplicates the assertion
in test_runtime_config_uses_kiro_cli_and_removes_q.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* docs: scrub all remaining --ai flag references from source and tests
- Remove dead AI_ASSISTANT_ALIASES, AI_ASSISTANT_HELP, and
_build_ai_assistant_help() from _agent_config.py
- Update comments/docstrings in extensions.py, presets.py, and
integration subpackages to reference 'skills mode' or
'--integration' instead of the removed flags
- Fix catalog.json generic integration description
- Update test docstrings/comments in test_extension_skills.py,
test_extensions.py, and test_presets.py
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* test: remove legacy --ai flag rejection tests
The flags are fully removed from the CLI; typer handles unknown options
generically. No custom rejection logic exists to test.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* revert: remove manual CHANGELOG.md entry
CHANGELOG is generated automatically; manual edits should not be made.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix: make generic catalog description self-explanatory
Include the required --commands-dir sub-option in the description so
readers don't need to look up integration docs.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(tests): rename duplicate test classes to avoid shadowing
The rename from Test*AutoPromote to Test*Integration collided with the
existing Test*Integration(SkillsIntegrationTests) base classes, causing
the shared test suites to be silently overwritten. Rename the CLI init
flow classes to Test*InitFlow instead.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Manfred Riem <mnriem@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* feat(integrations): add Devin for Terminal skills-based integration
- Register DevinIntegration as a SkillsIntegration with .devin/skills/ layout
- Add catalog entry, docs row, and supported-agents listing
- Display /speckit-<command> hyphen syntax in init "Next Steps" panel
(matches Claude/Cursor/Copilot skills mode, since Devin invokes skills
by directory name)
Closes#2346
* fix(devin): implement -p non-interactive dispatch; clarify skills comment
Addresses Copilot review on PR #2364:
- Override build_exec_args() in DevinIntegration to emit
'devin -p <prompt> [--model X]' for non-interactive text dispatch
(verified Devin CLI supports -p / --print). Returns None when
output_json=True since Devin has no structured-output flag, so
CommandStep workflows that require JSON cleanly raise
NotImplementedError instead of crashing on an unknown CLI flag.
requires_cli=True is retained for tool detection.
- Extend the skills-integrations enumeration comment in
specify_cli/__init__.py to include copilot and devin so the
comment matches the code below it.
* fix(devin): always return exec args; document plain-text stdout
Addresses third Copilot review comment on PR #2364.
Returning None from build_exec_args() when output_json=True
incorrectly used the codebase's IDE-only sentinel: workflow
CommandStep checks 'impl.build_exec_args("test") is None' to
detect non-dispatchable integrations (test_workflows.py exercises
this with WindsurfIntegration). The previous implementation made
Devin appear non-dispatchable to all command steps even though it
runs fine via 'devin -p'.
Always return the args list. When output_json is requested, Devin
is still dispatched and returns plain-text stdout instead of
structured JSON; the docstring documents this explicitly.
* docs(devin): include claude in skills-integrations enumeration comment
Addresses Copilot review on PR #2364: the comment listing skills
integrations omitted Claude, which is also a SkillsIntegration
subclass. Updated to keep the comment accurate for future readers.
* test(devin): add build_exec_args regression tests; bump catalog updated_at
Addresses Copilot review on PR #2364, per @mnriem's request to
'address the Copilot feedback, especially the testing ask':
- tests/integrations/test_integration_devin.py: add TestDevinBuildExecArgs
with three regression assertions:
* build_exec_args returns args (not the None IDE-only sentinel)
* --output-format is never emitted, regardless of output_json
* --model flag is passed through correctly
- integrations/catalog.json: bump top-level updated_at to reflect the
Devin entry addition so downstream catalog consumers can detect the
change reliably.