mirror of
https://github.com/github/spec-kit.git
synced 2026-07-07 14:39:00 +08:00
fix(integrations): hermes honors SPECKIT_INTEGRATION_HERMES_EXTRA_ARGS (#3346)
HermesIntegration.build_exec_args routed argv[0] through _resolve_executable() but never called _apply_extra_args_env_var(), so the documented per-integration extra-args env hook was silently dropped for hermes — the same class of bug fixed for cursor-agent in #3265. Insert the hook after the base 'chat -Q' command and before Spec Kit's canonical -m/--json/-s/-q flags (mirrors opencode), so operator args can't displace or clobber the canonical flags. Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -253,6 +253,11 @@ class HermesIntegration(SkillsIntegration):
|
||||
"""
|
||||
args = [self._resolve_executable(), "chat", "-Q"]
|
||||
|
||||
# Operator-supplied SPECKIT_INTEGRATION_HERMES_EXTRA_ARGS go here —
|
||||
# after the base command but before Spec Kit's canonical -m/--json/-s/-q
|
||||
# flags — so they can't displace or clobber them (mirrors opencode).
|
||||
self._apply_extra_args_env_var(args)
|
||||
|
||||
if model:
|
||||
args.extend(["-m", model])
|
||||
if output_json:
|
||||
|
||||
@@ -353,3 +353,38 @@ class TestHermesInitFlow:
|
||||
if "agent-context" not in d.name
|
||||
]
|
||||
assert local_skills == [], f"Local skills dir should be empty, got: {local_skills}"
|
||||
|
||||
|
||||
class TestHermesBuildExecArgs:
|
||||
"""CLI dispatch argv, including the operator extra-args env hook."""
|
||||
|
||||
def test_build_exec_args_default_shape(self):
|
||||
i = get_integration("hermes")
|
||||
assert i.build_exec_args("/speckit-plan hi", output_json=True) == [
|
||||
"hermes", "chat", "-Q", "--json", "-s", "speckit-plan", "-q", "hi",
|
||||
]
|
||||
|
||||
def test_build_exec_args_honors_extra_args(self, monkeypatch):
|
||||
"""SPECKIT_INTEGRATION_HERMES_EXTRA_ARGS is injected before the
|
||||
canonical -m/--json/-s/-q flags (same env hook as codex/opencode/
|
||||
devin; hermes previously skipped _apply_extra_args_env_var entirely).
|
||||
"""
|
||||
monkeypatch.setenv(
|
||||
"SPECKIT_INTEGRATION_HERMES_EXTRA_ARGS", "--temperature 0.2"
|
||||
)
|
||||
i = get_integration("hermes")
|
||||
args = i.build_exec_args("/speckit-plan hi", output_json=True)
|
||||
assert args == [
|
||||
"hermes", "chat", "-Q", "--temperature", "0.2",
|
||||
"--json", "-s", "speckit-plan", "-q", "hi",
|
||||
]
|
||||
# Injected before the canonical flags so it can't displace them.
|
||||
assert args.index("--temperature") < args.index("--json")
|
||||
assert args.index("--temperature") < args.index("-s")
|
||||
|
||||
def test_build_exec_args_honors_executable_override(self, monkeypatch):
|
||||
monkeypatch.setenv(
|
||||
"SPECKIT_INTEGRATION_HERMES_EXECUTABLE", "/custom/hermes"
|
||||
)
|
||||
i = get_integration("hermes")
|
||||
assert i.build_exec_args("/speckit-plan hi")[0] == "/custom/hermes"
|
||||
|
||||
Reference in New Issue
Block a user