mirror of
https://github.com/github/spec-kit.git
synced 2026-07-03 12:28:06 +08:00
* feat: add Firebender integration (Android Studio / IntelliJ) Firebender (https://firebender.com/) is an AI coding agent for Android Studio and IntelliJ. It reads project-local custom slash commands from .firebender/commands/*.mdc and project rules from .firebender/rules/*.mdc. Add a FirebenderIntegration (MarkdownIntegration) that installs the speckit command templates as .mdc command files and writes the managed context section into .firebender/rules/specify-rules.mdc. command_filename is overridden so init-time commands also use the .mdc extension Firebender requires. Register it in the integration registry, add the catalog entry and docs row, and add an integration test covering the .mdc command output. Closes #1548 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * feat: address review - bump catalog updated_at and list firebender as multi-install safe Bump the catalog top-level updated_at to reflect the new entry, and add firebender (with its .firebender/commands + .firebender/rules/specify-rules.mdc isolation paths) to the 'currently declared multi-install safe integrations' table in the docs. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
46 lines
1.9 KiB
Python
46 lines
1.9 KiB
Python
"""Tests for FirebenderIntegration."""
|
|
|
|
from specify_cli.integrations import get_integration
|
|
from specify_cli.integrations.manifest import IntegrationManifest
|
|
|
|
from .test_integration_base_markdown import MarkdownIntegrationTests
|
|
|
|
|
|
class TestFirebenderIntegration(MarkdownIntegrationTests):
|
|
KEY = "firebender"
|
|
FOLDER = ".firebender/"
|
|
COMMANDS_SUBDIR = "commands"
|
|
REGISTRAR_DIR = ".firebender/commands"
|
|
CONTEXT_FILE = ".firebender/rules/specify-rules.mdc"
|
|
|
|
# Firebender reads custom slash commands from ``.firebender/commands/*.mdc``,
|
|
# so this integration uses the ``.mdc`` extension instead of the ``.md``
|
|
# default the base mixin assumes. Override the two extension-specific tests.
|
|
def test_registrar_config(self):
|
|
i = get_integration(self.KEY)
|
|
assert i.registrar_config["dir"] == self.REGISTRAR_DIR
|
|
assert i.registrar_config["format"] == "markdown"
|
|
assert i.registrar_config["args"] == "$ARGUMENTS"
|
|
assert i.registrar_config["extension"] == ".mdc"
|
|
|
|
def test_setup_creates_files(self, tmp_path):
|
|
i = get_integration(self.KEY)
|
|
m = IntegrationManifest(self.KEY, tmp_path)
|
|
created = i.setup(tmp_path, m)
|
|
assert len(created) > 0
|
|
cmd_files = [f for f in created if "scripts" not in f.parts]
|
|
for f in cmd_files:
|
|
assert f.exists()
|
|
assert f.name.startswith("speckit.")
|
|
assert f.name.endswith(".mdc")
|
|
|
|
def _expected_files(self, script_variant: str) -> list[str]:
|
|
# Firebender emits ``.mdc`` command files, so remap the base mixin's
|
|
# ``.md`` expectations for files under this integration's command dir.
|
|
cmd_dir = get_integration(self.KEY).registrar_config["dir"]
|
|
prefix = cmd_dir + "/"
|
|
return sorted(
|
|
f[:-3] + ".mdc" if f.startswith(prefix) and f.endswith(".md") else f
|
|
for f in super()._expected_files(script_variant)
|
|
)
|