forked from github/spec-kit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path__init__.py
More file actions
94 lines (71 loc) · 2.99 KB
/
__init__.py
File metadata and controls
94 lines (71 loc) · 2.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
"""Integration registry for AI coding assistants.
Each integration is a self-contained subpackage that handles setup/teardown
for a specific AI assistant (Copilot, Claude, Gemini, etc.).
"""
from __future__ import annotations
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from .base import IntegrationBase
# Maps integration key → IntegrationBase instance.
# Populated by later stages as integrations are migrated.
INTEGRATION_REGISTRY: dict[str, IntegrationBase] = {}
def _register(integration: IntegrationBase) -> None:
"""Register an integration instance in the global registry.
Raises ``ValueError`` for falsy keys and ``KeyError`` for duplicates.
"""
key = integration.key
if not key:
raise ValueError("Cannot register integration with an empty key.")
if key in INTEGRATION_REGISTRY:
raise KeyError(f"Integration with key {key!r} is already registered.")
INTEGRATION_REGISTRY[key] = integration
def get_integration(key: str) -> IntegrationBase | None:
"""Return the integration for *key*, or ``None`` if not registered."""
return INTEGRATION_REGISTRY.get(key)
# -- Register built-in integrations --------------------------------------
def _register_builtins() -> None:
"""Register all built-in integrations."""
from .copilot import CopilotIntegration
_register(CopilotIntegration())
# Stage 3 — standard markdown integrations
from .claude import ClaudeIntegration
from .qwen import QwenIntegration
from .opencode import OpencodeIntegration
from .junie import JunieIntegration
from .kilocode import KilocodeIntegration
from .auggie import AuggieIntegration
from .roo import RooIntegration
from .codebuddy import CodebuddyIntegration
from .qodercli import QodercliIntegration
from .amp import AmpIntegration
from .shai import ShaiIntegration
from .bob import BobIntegration
from .trae import TraeIntegration
from .pi import PiIntegration
from .iflow import IflowIntegration
_register(ClaudeIntegration())
_register(QwenIntegration())
_register(OpencodeIntegration())
_register(JunieIntegration())
_register(KilocodeIntegration())
_register(AuggieIntegration())
_register(RooIntegration())
_register(CodebuddyIntegration())
_register(QodercliIntegration())
_register(AmpIntegration())
_register(ShaiIntegration())
_register(BobIntegration())
_register(TraeIntegration())
_register(PiIntegration())
_register(IflowIntegration())
# Hyphenated package names — use importlib for kiro-cli and cursor-agent
import importlib
kiro_mod = importlib.import_module(".kiro-cli", __package__)
_register(kiro_mod.KiroCliIntegration())
from .windsurf import WindsurfIntegration
from .vibe import VibeIntegration
_register(WindsurfIntegration())
_register(VibeIntegration())
cursor_mod = importlib.import_module(".cursor-agent", __package__)
_register(cursor_mod.CursorAgentIntegration())
_register_builtins()