/**
 * playbooks —— **次要业务线的做法，按需取用**（`open_playbook`）。
 *
 * ═══ 这是提示词分层的第三种加载方式 ═══════════════════════════════
 *   常驻      ①②③④⑤        每轮都发。只配给**主职责**（今天是分配）。
 *   push      `_guide`      随**返回值**下发（见 mcp/guides.ts）：零往返、必然到达，
 *                           但只在**调完之后** —— 它答的是「这批数怎么读」。
 *   pull      本文件         模型**先发现、再主动取** —— 它答的是「这件活怎么干」，
 *                           而那件事在它决定动手**之前**就要知道，来不及等返回值。
 *
 * ═══ 为什么次要业务线必须是 pull ═══════════════════════════════════
 * 🔴 常驻的成本不是"多几百字"，是**每条线都常驻**之后的总和：分配、追踪、排班、复盘、盘点……
 *   每加一条，其余所有会话都在为它白付上下文，而且规则越多每条被遵守的概率越低。
 * ⇒ 主职责常驻（他多数时候就在干这个），其余留一个**索引**让模型自己发现。
 *
 * ═══ 索引在哪 ═══════════════════════════════════════════════════
 * ⭐ **索引就是 `open_playbook` 的取值域本身** —— 每个取值旁边写着"他问什么时候用它"。
 *   ⛔ 别再往系统提示词里加一句「遇到 X 先去取做法」：那是第二份，而工具描述本来就是
 *   模型在决定调不调时读的东西（同 `show_guidance` 的 `id`：取值的含义写在取值上）。
 *
 * ═══ 边界 ═══════════════════════════════════════════════════════
 * ✅ 写**顺序和取舍**：先调哪个后调哪个、他要的到底是什么、什么时候该停。
 * ⛔ 不写「这批数怎么读」—— 那在 `_guide` 里，它会随返回值自己到。写两份必然漂。
 * ⛔ 不写工具的参数怎么填 —— 那在参数说明里。
 * ⛔ 不写成品句子。护栏写成规范，⛔ 不写成台词（2026-08-08 那次照抄事故）。
 */

/** 一篇做法：`什么时候用` 进索引（工具的取值域），`正文` 只在取用时才发。 */
interface Playbook {
  /** 他问什么算这一类 —— ⚠️ 这句会进工具描述，是模型**发现**它的唯一线索 */
  什么时候用: string;
  正文: string;
}

export const PLAYBOOKS: Readonly<Record<string, Playbook>> = {
  分配追踪: {
    什么时候用: '他问已经分下去的批次现在怎么样了、哪批有问题、谁堆着没动、某个人为什么被分给谁',
    正文: `## 追一批已经分下去的活

顺序：先 list_assignment_batches 看所有批次的汇总，定位他问的那一批；再 get_assignment_detail 拿那一批的全貌。
问某个患者「为什么是他 / 为什么给了这个人」用 explain_assignment —— 那是查分配当时的决策快照，⛔ 别从画像自己推。
要整批收回用 revoke_assignment，且只在他明确要求时。

⚠️ 这几个工具的返回值里带 \`_guide\`：这批数最容易被误读的地方都写在那儿，读数之前先看它。

他要的往往不是一张表，是**下一步做什么** —— 哪几条该催、哪几条该撤回重分、谁手上堆着一直没动。
数报完给一句这个，⛔ 别停在一堆百分比上。`,
  },
};

/** `open_playbook` 的取值域 —— 与上表同源，⛔ 别另写一份。 */
export const PLAYBOOK_TOPICS = Object.keys(PLAYBOOKS);

/**
 * 取值域的说明 = **索引**：每个取值旁边就是"他问什么时候用它"。
 *
 * ⚠️ 生成的，⛔ 不是手写的常量：手写那份会和 `PLAYBOOKS` 漂开，而漂了不报错 ——
 *   模型照着索引去取一篇不存在的，或者有一篇它永远发现不了。
 */
export const PLAYBOOK_INDEX = PLAYBOOK_TOPICS.map(
  (k) => `${k} = ${PLAYBOOKS[k]!.什么时候用}`,
).join('；');
