feat(external-llm): add external LLM integration (fc-004)

Implements external LLM routing via opencode CLI for:
- GitHub Copilot (gpt-5.2, claude-sonnet-4.5, claude-haiku-4.5, o3, gemini-3-pro)
- Z.AI (glm-4.7 for code generation)
- OpenCode native (big-pickle)

Components:
- mcp/llm-router/invoke.py: Main router with task-based model selection
- mcp/llm-router/delegate.py: Agent delegation helper (respects external mode)
- mcp/llm-router/toggle.py: Enable/disable external-only mode
- mcp/llm-router/providers/: CLI wrappers for opencode and gemini

Features:
- Persistent toggle via state/external-mode.json
- Task routing: reasoning -> gpt-5.2, code-gen -> glm-4.7, long-context -> gemini
- Claude tier mapping: opus -> gpt-5.2, sonnet -> claude-sonnet-4.5, haiku -> claude-haiku-4.5
- Session-start hook announces when external mode is active
- Natural language toggle support via component registry

Plan: gleaming-routing-mercury

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
OpenCode Test
2026-01-08 13:34:35 -08:00
parent 7dcb8af1bb
commit df6cf94dae
14 changed files with 1831 additions and 5 deletions

View File

@@ -32,12 +32,24 @@ with open('${PA_DIR}/memory/decisions.json') as f:
" 2>/dev/null || echo "0")
fi
# Check external mode
EXTERNAL_MODE="disabled"
if [[ -f "${STATE_DIR}/external-mode.json" ]]; then
EXTERNAL_ENABLED=$(jq -r '.enabled // false' "${STATE_DIR}/external-mode.json" 2>/dev/null || echo "false")
if [[ "${EXTERNAL_ENABLED}" == "true" ]]; then
EXTERNAL_MODE="enabled"
fi
fi
# Output context as system reminder format
echo "SessionStart:Callback hook success: Success"
echo "SessionStart:resume hook success: Success"
# Add additional context if there's something noteworthy
if [[ "${UNSUMMARIZED}" -gt 0 || "${PENDING_DECISIONS}" -gt 0 ]]; then
if [[ "${UNSUMMARIZED}" -gt 0 || "${PENDING_DECISIONS}" -gt 0 || "${EXTERNAL_MODE}" == "enabled" ]]; then
echo "SessionStart hook additional context: "
if [[ "${EXTERNAL_MODE}" == "enabled" ]]; then
echo "- EXTERNAL MODE ACTIVE: All requests routed to external LLMs"
fi
if [[ "${UNSUMMARIZED}" -gt 0 ]]; then
echo "- ${UNSUMMARIZED} unsummarized session(s) available for review"
fi