diff --git a/docs/reference/integrations.md b/docs/reference/integrations.md index dcb9a2b354..0abd1b9eb9 100644 --- a/docs/reference/integrations.md +++ b/docs/reference/integrations.md @@ -23,6 +23,7 @@ The Specify CLI supports a wide range of AI coding agents. When you run `specify | [Kilo Code](https://github.com/Kilo-Org/kilocode) | `kilocode` | | | [Kimi Code](https://code.kimi.com/) | `kimi` | Skills-based integration; supports `--migrate-legacy` for dotted→hyphenated directory migration | | [Kiro CLI](https://kiro.dev/docs/cli/) | `kiro-cli` | Alias: `--integration kiro` | +| [Lingma](https://lingma.aliyun.com/) | `lingma` | Skills-based integration; skills are installed automatically | | [Mistral Vibe](https://github.com/mistralai/mistral-vibe) | `vibe` | | | [opencode](https://opencode.ai/) | `opencode` | | | [Pi Coding Agent](https://pi.dev) | `pi` | Pi doesn't have MCP support out of the box, so `taskstoissues` won't work as intended. MCP support can be added via [extensions](https://github.com/badlogic/pi-mono/tree/main/packages/coding-agent#extensions) | diff --git a/integrations/catalog.json b/integrations/catalog.json index 3df96b8789..2024a8a2d5 100644 --- a/integrations/catalog.json +++ b/integrations/catalog.json @@ -201,6 +201,15 @@ "repository": "https://github.com/github/spec-kit", "tags": ["cli", "skills"] }, + "lingma": { + "id": "lingma", + "name": "Lingma", + "version": "1.0.0", + "description": "Lingma IDE skills-based integration", + "author": "spec-kit-core", + "repository": "https://github.com/github/spec-kit", + "tags": ["ide", "skills"] + }, "pi": { "id": "pi", "name": "Pi Coding Agent", diff --git a/src/specify_cli/integrations/__init__.py b/src/specify_cli/integrations/__init__.py index a5fb3833dc..82e864be40 100644 --- a/src/specify_cli/integrations/__init__.py +++ b/src/specify_cli/integrations/__init__.py @@ -65,6 +65,7 @@ def _register_builtins() -> None: from .kilocode import KilocodeIntegration from .kimi import KimiIntegration from .kiro_cli import KiroCliIntegration + from .lingma import LingmaIntegration from .opencode import OpencodeIntegration from .pi import PiIntegration from .qodercli import QodercliIntegration @@ -95,6 +96,7 @@ def _register_builtins() -> None: _register(KilocodeIntegration()) _register(KimiIntegration()) _register(KiroCliIntegration()) + _register(LingmaIntegration()) _register(OpencodeIntegration()) _register(PiIntegration()) _register(QodercliIntegration()) diff --git a/src/specify_cli/integrations/lingma/__init__.py b/src/specify_cli/integrations/lingma/__init__.py new file mode 100644 index 0000000000..7ffea46cce --- /dev/null +++ b/src/specify_cli/integrations/lingma/__init__.py @@ -0,0 +1,40 @@ +"""Lingma IDE integration. — skills-based agent. + +Lingma IDE uses ``.lingma/skills/speckit-/SKILL.md`` layout. +In the Specify CLI Lingma integration, explicit command support was deprecated +since v0.5.1; ``--skills`` defaults to ``True``. +""" + +from __future__ import annotations +from ..base import IntegrationOption, SkillsIntegration + + +class LingmaIntegration(SkillsIntegration): + """Integration for Lingma IDE.""" + + key = "lingma" + config = { + "name": "Lingma", + "folder": ".lingma/", + "commands_subdir": "skills", + "install_url": None, + "requires_cli": False, + } + registrar_config = { + "dir": ".lingma/skills", + "format": "markdown", + "args": "$ARGUMENTS", + "extension": "/SKILL.md", + } + context_file = ".lingma/rules/specify-rules.md" + + @classmethod + def options(cls) -> list[IntegrationOption]: + return [ + IntegrationOption( + "--skills", + is_flag=True, + default=True, + help="Install as agent skills (default for lingma since v0.5.1)", + ), + ] diff --git a/tests/integrations/test_integration_lingma.py b/tests/integrations/test_integration_lingma.py new file mode 100644 index 0000000000..959de8d657 --- /dev/null +++ b/tests/integrations/test_integration_lingma.py @@ -0,0 +1,11 @@ +"""Tests for LingmaIntegration.""" + +from .test_integration_base_skills import SkillsIntegrationTests + + +class TestLingmaIntegration(SkillsIntegrationTests): + KEY = "lingma" + FOLDER = ".lingma/" + COMMANDS_SUBDIR = "skills" + REGISTRAR_DIR = ".lingma/skills" + CONTEXT_FILE = ".lingma/rules/specify-rules.md"