Skip to content

Commit dcbb22a

Browse files
tbitcsoz-agent
andcommitted
feat: Phase C+D — REST endpoints for Skills/Eval/Teams/MCP + docs
Phase C: Wire Skills, Eval, Teams, MCP REST endpoints into GovernanceHTTPServer: - GET /api/skills — list agent skills - GET /api/eval/suites — list eval suites - GET /api/teams — list predefined teams - GET /api/mcp/servers — list generated MCP servers Phase D: Update AGENTS.md test count to 582. All 582 Python tests pass. Ruff clean. Co-Authored-By: Oz <oz-agent@warp.dev>
1 parent bb3dc17 commit dcbb22a

2 files changed

Lines changed: 41 additions & 1 deletion

File tree

AGENTS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ All changes follow: **propose → check → execute → verify → record**.
5656
- `src/specsmith/epistemic/` — compatibility shim
5757
- `src/specsmith/integrations/` — agent platform adapters (agent-skill)
5858
- `src/specsmith/templates/` — Jinja2 scaffold templates
59-
- `tests/`570 tests (pytest)
59+
- `tests/`582 tests (pytest)
6060
- **All governance files live in `docs/`** (except AGENTS.md at root):
6161
- `docs/SPECSMITH.yml` — project scaffold config (canonical; uppercase like all governance files)
6262
- `docs/ARCHITECTURE.md` — architecture reference

src/specsmith/governance_logic.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,46 @@ def do_GET(self) -> None: # noqa: N802
614614
except Exception as exc: # noqa: BLE001
615615
self._json_err(str(exc), code=500)
616616

617+
# ── Skills ───────────────────────────────────────────
618+
elif self.path == "/api/skills":
619+
try:
620+
from specsmith.skills_builder import list_skills
621+
622+
skills = list_skills(project_dir)
623+
self._json_ok({"skills": [s.to_dict() for s in skills]})
624+
except Exception as exc: # noqa: BLE001
625+
self._json_err(str(exc), code=500)
626+
627+
# ── Eval ────────────────────────────────────────────
628+
elif self.path == "/api/eval/suites":
629+
try:
630+
from specsmith.eval.builtins import list_suites
631+
632+
suites = list_suites()
633+
self._json_ok({"suites": [s.to_dict() for s in suites]})
634+
except Exception as exc: # noqa: BLE001
635+
self._json_err(str(exc), code=500)
636+
637+
# ── Teams ───────────────────────────────────────────
638+
elif self.path == "/api/teams":
639+
try:
640+
from specsmith.agent.teams import list_teams
641+
642+
teams = list_teams()
643+
self._json_ok({"teams": [t.to_dict() for t in teams]})
644+
except Exception as exc: # noqa: BLE001
645+
self._json_err(str(exc), code=500)
646+
647+
# ── MCP Servers ─────────────────────────────────────
648+
elif self.path == "/api/mcp/servers":
649+
try:
650+
from specsmith.mcp_generator import list_mcp_servers
651+
652+
servers = list_mcp_servers(project_dir)
653+
self._json_ok({"servers": [s.to_dict() for s in servers]})
654+
except Exception as exc: # noqa: BLE001
655+
self._json_err(str(exc), code=500)
656+
617657
# ── ESDB ──────────────────────────────────────────────
618658
elif self.path == "/api/esdb/status":
619659
try:

0 commit comments

Comments
 (0)