package com.gzzm.lobster.context;

import com.gzzm.lobster.skill.SkillService;

import java.util.List;

/**
 * SkillIndexPolicy —— Skill 薄索引注入策略 / Thin skill index policy.
 *
 * <p>对齐 Claude Code 的 progressive disclosure：system prompt 只放 id + name +
 * description（{@code SkillDefinition.triggerCondition} 字段充当 description，语义
 * 是"什么时候该用这个 skill"）。guidance 全文**不**注入 system，改由模型按
 * description 自主判断是否调用 {@code use_skill} 工具读取。
 *
 * <p>description 建议 1 句话 + 场景关键词前置，便于模型在索引里扫到就能决策。
 */
public final class SkillIndexPolicy {

    public String buildThinIndex(List<SkillService.SkillSummary> summaries) {
        if (summaries == null || summaries.isEmpty()) {
            return "(暂无可用 Skill)";
        }
        StringBuilder sb = new StringBuilder();
        sb.append("## 可用 Skill\n");
        sb.append("匹配到 description 描述的场景时，调用 `use_skill(skillId)` 读取完整方法论后再执行。\n\n");
        for (SkillService.SkillSummary s : summaries) {
            sb.append("- **").append(s.skillId).append("** (").append(s.name).append(")\n");
            if (s.triggerCondition != null && !s.triggerCondition.isEmpty()) {
                sb.append("  ").append(s.triggerCondition).append('\n');
            }
        }
        return sb.toString();
    }
}
