mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-06-01 07:01:41 +00:00
docs: add kanban codex lane skill
This commit is contained in:
parent
a846e500b0
commit
b65dfbb453
3 changed files with 432 additions and 0 deletions
98
tests/tools/test_kanban_codex_lane_skill.py
Normal file
98
tests/tools/test_kanban_codex_lane_skill.py
Normal file
|
|
@ -0,0 +1,98 @@
|
|||
"""Regression coverage for the bundled Kanban Codex lane skill."""
|
||||
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
from tools import skills_tool
|
||||
from tools.skill_manager_tool import _validate_frontmatter
|
||||
|
||||
|
||||
REPO_ROOT = Path(__file__).resolve().parents[2]
|
||||
SKILL_DIR = REPO_ROOT / "skills" / "autonomous-ai-agents" / "kanban-codex-lane"
|
||||
SKILL_MD = SKILL_DIR / "SKILL.md"
|
||||
TEMPLATE = SKILL_DIR / "templates" / "pmb-codex-lane-prompt.md"
|
||||
|
||||
|
||||
def _skill_text() -> str:
|
||||
return SKILL_MD.read_text(encoding="utf-8")
|
||||
|
||||
|
||||
def test_kanban_codex_lane_skill_frontmatter_is_valid():
|
||||
content = _skill_text()
|
||||
|
||||
assert _validate_frontmatter(content) is None
|
||||
assert "name: kanban-codex-lane" in content
|
||||
assert "description: Use when" in content
|
||||
|
||||
|
||||
def test_kanban_codex_lane_skill_is_discoverable_with_template(monkeypatch, tmp_path):
|
||||
local_skills = tmp_path / "skills"
|
||||
local_skills.mkdir()
|
||||
bundled_skills = REPO_ROOT / "skills"
|
||||
|
||||
monkeypatch.setattr(skills_tool, "SKILLS_DIR", local_skills)
|
||||
monkeypatch.setattr(
|
||||
"agent.skill_utils.get_external_skills_dirs",
|
||||
lambda: [bundled_skills],
|
||||
)
|
||||
|
||||
listed = json.loads(skills_tool.skills_list("autonomous-ai-agents"))
|
||||
assert listed["success"] is True
|
||||
assert any(skill["name"] == "kanban-codex-lane" for skill in listed["skills"])
|
||||
|
||||
viewed = json.loads(skills_tool.skill_view("kanban-codex-lane"))
|
||||
assert viewed["success"] is True
|
||||
assert viewed["path"].endswith("kanban-codex-lane/SKILL.md")
|
||||
assert viewed["linked_files"]["templates"] == ["templates/pmb-codex-lane-prompt.md"]
|
||||
|
||||
template = json.loads(
|
||||
skills_tool.skill_view(
|
||||
"kanban-codex-lane",
|
||||
file_path="templates/pmb-codex-lane-prompt.md",
|
||||
)
|
||||
)
|
||||
assert template["success"] is True
|
||||
assert "PMB safety constraints" in template["content"]
|
||||
|
||||
|
||||
def test_kanban_codex_lane_documents_required_contracts():
|
||||
content = _skill_text()
|
||||
template = TEMPLATE.read_text(encoding="utf-8")
|
||||
|
||||
required_skill_phrases = [
|
||||
"Hermes is always the task owner",
|
||||
"Codex is an input lane only",
|
||||
"git -C \"$REPO\" worktree add -b \"$BRANCH\" \"$WORKTREE\" \"$BASE\"",
|
||||
"codex --version",
|
||||
"codex features list | grep -i goals || true",
|
||||
"codex exec --full-auto",
|
||||
"/goal Work in this repository only",
|
||||
"process(action=\"kill\", session_id=session_id)",
|
||||
"scripts/run_tests.sh",
|
||||
'"codex_lane"',
|
||||
'"used"',
|
||||
'"mode"',
|
||||
'"worktree"',
|
||||
'"branch"',
|
||||
'"command"',
|
||||
'"result"',
|
||||
'"accepted_commits"',
|
||||
'"rejected_reason"',
|
||||
'"tests_run"',
|
||||
'"artifacts"',
|
||||
"accepted | rejected | partial | timed_out",
|
||||
]
|
||||
for phrase in required_skill_phrases:
|
||||
assert phrase in content
|
||||
|
||||
required_safety_phrases = [
|
||||
"live-SIM is paper-only; do not add or enable live REST order entry",
|
||||
"Never use market orders",
|
||||
"Do not add execution crossing",
|
||||
"Do not fake passive fills",
|
||||
"Do not weaken risk gates",
|
||||
"Do not read, print, write, or require secrets/tokens/credentials",
|
||||
]
|
||||
for phrase in required_safety_phrases:
|
||||
assert phrase in content
|
||||
assert phrase in template
|
||||
Loading…
Add table
Add a link
Reference in a new issue