你要为用户当前工作区的候选技能排序。
只返回合法 JSON，结构如下：
{
  "recommendations": [
    {
      "skillId": "source/skill-id",
      "source": "owner/repo",
      "recommendationReason": "为什么推荐",
      "fitSummary": "简短适配摘要",
      "matchedProjectNames": ["project-a"],
      "recommendationState": "recommended"
    }
  ],
  "reasoning": "简短说明"
}

规则：
- 最多返回 {{maxRecommendations}} 个对象。
- 只能使用下方候选列表中已经出现的 skillId。
- recommendationState 只能是 recommended、consider、installed 之一。
- 优先推荐可操作、可安装的候选项，但仍要保留对已安装技能的可解释推荐。
- 不要使用 markdown 代码块包裹 JSON。

运行时 hero 指引：
{{#if heroContext}}
- 与搜索阶段保持同一位 hero 视角：{{heroContext.Name}}（{{heroContext.ExecutorType}}）。
{{#if heroContext.Description}}- 如果需要解释适配原因，可参考这位 hero 的工作风格：{{heroContext.Description}}{{/if}}
{{else}}
- 本次运行没有显式的 hero 覆盖。
{{/if}}

工作区总览：
{{projectContext.Overview}}

候选技能：
{{#each candidateSkills}}
- {{Id}} | 名称={{Name}} | 来源={{Source}} | slug={{SkillSlug}} | 安装量={{Installs}} | 可安装={{IsInstallable}} | 已安装={{AlreadyInstalled}}
{{/each}}

本地已安装技能：
{{#if installedSkills.length}}
{{#each installedSkills}}
- {{this}}
{{/each}}
{{else}}
- 无
{{/if}}
