mirror of
https://github.com/github/spec-kit.git
synced 2026-07-03 12:28:06 +08:00
feat(integrations): add omp support (#3107)
* feat(integrations): add omp support * Update updated_at timestamp * refactor(integrations): delegate omp build_exec_args to base, register in issue templates Inherit MarkdownIntegration.build_exec_args so omp picks up shared CLI contract changes (requires_cli gating, extra-args ordering, --model handling) automatically; only specialize the --mode json flag. Also add Oh My Pi / omp to the issue-template agent lists so test_issue_template_agent_lists_match_runtime_integrations passes. * fix(integrations): use --print + positional prompt for omp argv OMP's CLI parser treats `-p`/`--print` as a boolean (one-shot mode) and consumes the prompt as a positional message; the previous inherited `-p <prompt>` shape worked by accident only because `-p` ignores its next token. Build the argv explicitly with flags first and the prompt as a trailing positional, matching upstream args.ts.
This commit is contained in:
@@ -70,6 +70,7 @@ def _register_builtins() -> None:
|
||||
from .kimi import KimiIntegration
|
||||
from .kiro_cli import KiroCliIntegration
|
||||
from .lingma import LingmaIntegration
|
||||
from .omp import OmpIntegration
|
||||
from .opencode import OpencodeIntegration
|
||||
from .pi import PiIntegration
|
||||
from .qodercli import QodercliIntegration
|
||||
@@ -108,6 +109,7 @@ def _register_builtins() -> None:
|
||||
_register(KimiIntegration())
|
||||
_register(KiroCliIntegration())
|
||||
_register(LingmaIntegration())
|
||||
_register(OmpIntegration())
|
||||
_register(OpencodeIntegration())
|
||||
_register(PiIntegration())
|
||||
_register(QodercliIntegration())
|
||||
|
||||
45
src/specify_cli/integrations/omp/__init__.py
Normal file
45
src/specify_cli/integrations/omp/__init__.py
Normal file
@@ -0,0 +1,45 @@
|
||||
"""Oh My Pi (omp) coding agent integration."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from ..base import MarkdownIntegration
|
||||
|
||||
|
||||
class OmpIntegration(MarkdownIntegration):
|
||||
key = "omp"
|
||||
config = {
|
||||
"name": "Oh My Pi",
|
||||
"folder": ".omp/",
|
||||
"commands_subdir": "commands",
|
||||
"install_url": "https://www.npmjs.com/package/@oh-my-pi/pi-coding-agent",
|
||||
"requires_cli": True,
|
||||
}
|
||||
registrar_config = {
|
||||
"dir": ".omp/commands",
|
||||
"format": "markdown",
|
||||
"args": "$ARGUMENTS",
|
||||
"extension": ".md",
|
||||
}
|
||||
context_file = "AGENTS.md"
|
||||
|
||||
def build_exec_args(
|
||||
self,
|
||||
prompt: str,
|
||||
*,
|
||||
model: str | None = None,
|
||||
output_json: bool = True,
|
||||
) -> list[str] | None:
|
||||
# Diverges from MarkdownIntegration.build_exec_args because OMP's
|
||||
# CLI parser treats `-p`/`--print` as a boolean (one-shot mode) and
|
||||
# consumes the prompt as a positional argument — see args.ts in
|
||||
# can1357/oh-my-pi. JSON output is selected via `--mode json`.
|
||||
if not self.config or not self.config.get("requires_cli"):
|
||||
return None
|
||||
args = [self._resolve_executable(), "--print"]
|
||||
self._apply_extra_args_env_var(args)
|
||||
if model:
|
||||
args.extend(["--model", model])
|
||||
if output_json:
|
||||
args.extend(["--mode", "json"])
|
||||
args.append(prompt)
|
||||
return args
|
||||
Reference in New Issue
Block a user