feat: mount canonical gitea-workflow skill for Codex and MCP inventory (Closes #551)
Expose gitea-workflow / llm-project-workflow / git-pr-workflows as one workflow router in mcp_list_project_skills, add preflight + Codex install script, and document multi-runtime skill name parity.
This commit is contained in:
+37
-1
@@ -827,6 +827,7 @@ import reconciliation_workflow # noqa: E402
|
||||
import audit_reconciliation_mode # noqa: E402
|
||||
import review_merge_state_machine # noqa: E402
|
||||
import pr_work_lease # noqa: E402
|
||||
import workflow_skill # noqa: E402
|
||||
import native_mcp_preference # noqa: E402
|
||||
import worktree_cleanup_audit # noqa: E402
|
||||
|
||||
@@ -6933,6 +6934,9 @@ _PROJECT_SKILLS = {
|
||||
},
|
||||
}
|
||||
|
||||
# Canonical workflow router skill names for Claude/Codex/Gemini parity (#551).
|
||||
_PROJECT_SKILLS.update(workflow_skill.workflow_skill_registry_entries())
|
||||
|
||||
|
||||
@mcp.tool()
|
||||
def mcp_get_control_plane_guide(
|
||||
@@ -7046,7 +7050,7 @@ def mcp_get_control_plane_guide(
|
||||
|
||||
@mcp.tool()
|
||||
def mcp_list_project_skills() -> dict:
|
||||
"""List the project's workflow skills and when to use them (#128).
|
||||
"""List the project's workflow skills and when to use them (#128, #551).
|
||||
|
||||
Read-only; makes no API calls. Each skill reports its name,
|
||||
description, when-to-use guidance, required operations, status
|
||||
@@ -7054,6 +7058,9 @@ def mcp_list_project_skills() -> dict:
|
||||
'operator-only'), and whether the current profile's operations permit it. Use
|
||||
mcp_get_skill_guide(name) for the step-by-step guide.
|
||||
|
||||
Includes the canonical workflow router under gitea-workflow,
|
||||
llm-project-workflow, and git-pr-workflows (#551).
|
||||
|
||||
Returns:
|
||||
dict with 'read_only', 'count', and 'skills' (list). Never secrets.
|
||||
"""
|
||||
@@ -7078,10 +7085,39 @@ def mcp_list_project_skills() -> dict:
|
||||
}
|
||||
if meta.get("notes"):
|
||||
entry["notes"] = meta["notes"]
|
||||
if meta.get("repo_path"):
|
||||
entry["repo_path"] = meta["repo_path"]
|
||||
if meta.get("canonical"):
|
||||
entry["canonical"] = True
|
||||
skills.append(entry)
|
||||
return {"read_only": True, "count": len(skills), "skills": skills}
|
||||
|
||||
|
||||
@mcp.tool()
|
||||
def mcp_check_workflow_skill_preflight(
|
||||
project_root: str | None = None,
|
||||
) -> dict:
|
||||
"""Fail-closed preflight for the canonical workflow skill wall (#551).
|
||||
|
||||
Verifies skills/llm-project-workflow/SKILL.md exists in the project tree
|
||||
and reports whether Codex has a matching mount under ~/.codex/skills.
|
||||
Call before git/Gitea mutations when the controller requires gitea-workflow.
|
||||
|
||||
Args:
|
||||
project_root: Optional override; defaults to this MCP process root.
|
||||
|
||||
Returns:
|
||||
dict with workflow_skill_ready, blocked, canonical_names, codex mount
|
||||
status, and safe_next_action. Never secrets.
|
||||
"""
|
||||
root = (project_root or PROJECT_ROOT).strip()
|
||||
result = workflow_skill.assess_workflow_skill_presence(root)
|
||||
result["success"] = not result.get("blocked")
|
||||
result["project_root"] = root
|
||||
result["read_only"] = True
|
||||
return result
|
||||
|
||||
|
||||
@mcp.tool()
|
||||
def mcp_get_skill_guide(skill_name: str) -> dict:
|
||||
"""Step-by-step guide for one named project skill (#128).
|
||||
|
||||
Reference in New Issue
Block a user