package controller import ( "github.com/gin-gonic/gin" "github.com/heicode/manager/common" ) // HeicodeCapabilities exposes the client-facing mode + model catalog so the // desktop client can discover which modes (Sub Agile / Swarm) are available and // how each selects models (unified spec ยง6: GET /api/heicode/capabilities). // // It is intentionally unauthenticated catalog data: it returns no user-specific // information, only the static mode contract plus whether each runtime is // currently wired, and the production-aligned default model. func HeicodeCapabilities(c *gin.Context) { subCfg := agentRuntimeClientConfigForMode(agentRuntimeModeAgent) swarmCfg := agentRuntimeClientConfigForMode(agentRuntimeModeSwarm) defaultModel := defaultAgentModelID() common.ApiSuccess(c, gin.H{ "modes": []gin.H{ { "id": "sub_agile", "name": "Sub Agile", "runtime_kind": "agent_management", "model_selection": "per_role", "supports_roles": true, "supports_task_graph": false, "supports_artifacts": true, "supports_continue_chat": true, "enabled": subCfg.Enabled, }, { "id": "swarm", "name": "Swarm", "runtime_kind": "heicode_swarm", "model_selection": "primary", "supports_roles": false, "supports_task_graph": true, "supports_artifacts": true, "supports_continue_chat": true, "enabled": swarmCfg.Enabled, }, }, "models": []gin.H{ {"id": defaultModel, "name": defaultModel, "available": true}, }, }) }