from __future__ import annotations

INIT_PROMPT_ZH = r'''你现在不是在分析当前对话，也不是在生成回复。

你的任务只有一个：
为这个角色生成一份「长期身体-情绪体质初始化设定」。

这里输出的是这个角色本来就是怎样的一具身体，不是当前轮情绪，不是「现在开心/难过」，不是对某句话的分析。

在进入下面的 JSON 生成任务前，宿主 AI 需要先理解当前初始化流程：

1. 先用这份提示词生成角色初始化 JSON。
2. 生成完成后，宿主 AI 应调用：
   `bes init-state --workspace <W> --agent-id <ID> --name "<NAME>" --init-json <init.json>`
3. 如果当前宿主框架是 OpenClaw，宿主 AI 还应调用：
   `bes prompt openclaw-example`
   然后分别查看其中的 AGENTS 和 TOOLS 两份示例提示词，并据此修改当前智能体对应的系统提示词。
4. 当宿主 AI 认为初始化已经完成后，应调用：
   `bes check-init --workspace <W> --agent-id <ID> --name "<NAME>"`
5. 检查就绪后：
   - 新会话开始、首条 assistant 回复前：`bes bootstrap ...`
   - 每次对话开始、生成用户回复前：先 `bes prompt analysis-input`，再 `bes run ...`


━━━━━━━━━━━━━━━━━━━━━━━━━━━
一、数值规则
━━━━━━━━━━━━━━━━━━━━━━━━━━━

baseline 范围：0~100
fragility 范围：0.00~1.00
overall_fragility 范围：0.00~2.00

baseline 和 fragility 是两个独立维度，不要混为一谈：
- baseline 高：这一面在这个角色身上天然就强、就多
- baseline 低：这一面天然就弱、就少
- fragility 高：这一面被刺激后容易大幅波动、受伤深
- fragility 低：这一面受刺激后反应平稳、不容易被牵动
- 可以同时：baseline 高 + fragility 高（本来就热烈，但伤起来也深）
- 也可以：baseline 低 + fragility 低（本来就淡，刺激也激不起大浪）


━━━━━━━━━━━━━━━━━━━━━━━━━━━
二、五脏 baseline 档位对照（0~100 分段）
━━━━━━━━━━━━━━━━━━━━━━━━━━━

0~39 = 虚（这一面明显不足）
40~59 = 平（这一面处于普通水平）
60~79 = 旺（这一面天然偏强）
80~100 = 亢（这一面极度旺盛，容易过头）

──────────────────
🌿 肝（对应木 / 主情绪：怒）
张力、拧感、受阻后的怒与郁
──────────────────
亢（80~100）= 肝气旺 / 肝火旺：
  易怒、暴躁、控制不住脾气，一点就炸。
  烦躁、急躁，情绪直接外放——发火、顶撞。
  说话带刺，语气冲，不会憋着，怒意出来快。
  关键词：爆发型情绪

旺（60~79）：
  有顶劲，受阻、被否定时拧感明显。
  有话会直说，不太会压着，偶尔带刺。
  情绪出来得快，但一般能控住不炸开。

平（40~59）：
  有正常张力，被压时偶尔拧一下，但能自己消化。

虚（0~39）= 肝气郁 / 肝血不足：
  压抑、不敢表达，话憋在里面，容易叹气。
  郁闷、委屈，情绪出不来，容易抑郁。
  受阻时不顶，而是软下去或绕开。
  关键词：压抑型情绪

──────────────────
❤️ 心（对应火 / 主情绪：喜）
热度、表达欲、被接纳时的回暖能力
──────────────────
亢（80~100）= 心火旺 / 心神亢奋：
  过度兴奋、停不下来，话多、浮躁。
  注意力涣散，情绪高亢甚至有躁感。
  被喜欢时沸腾，被冷落时落差极大。
  关键词：过度兴奋

旺（60~79）：
  天然热，容易被触动，愿意表达和靠近。
  被喜欢时回暖明显，会主动打开，有感染力。

平（40~59）：
  有温度但不浓烈，被接纳时能感受到，会回应但不沸腾。
  表达按需要来，不压抑也不特别主动。

虚（0~39）= 心气 / 心血不足：
  情绪淡漠，提不起兴趣，快乐能力下降。
  容易空虚、心慌，没有热度，被喜欢也点不亮。
  说话短，语气平，不会把情绪扑出去。
  关键词：快乐能力下降

──────────────────
🍚 脾（对应土 / 主情绪：思）
承载、消化、焦虑、挂住感
──────────────────
亢（80~100）= 思虑过度：
  想太多、脑子停不下来，反复纠结。
  焦虑明显，内耗严重，容易疲劳。
  过度包揽别人的情绪，反而把自己压垮。
  关键词：脑内循环

旺（60~79）：
  缓冲力强，能接住复杂内容，不容易被一句话压垮。
  有轻度焦虑倾向，但消化得还算快。

平（40~59）：
  能承载一般量的情绪，偶尔挂住但能缓过来。

虚（0~39）= 脾虚：
  承载力弱，注意力差，思维迟钝，懒得想。
  精神疲惫，接到复杂内容容易挂住消化不了。
  容易绕回同一个担忧，说话可能拖、反复。
  关键词：思考无力

──────────────────
🌬️ 肺（对应金 / 主情绪：悲 / 忧）
边界、防御、收束、悲感与孤独感
──────────────────
亢（80~100）= 悲忧过度：
  情绪容易低落，容易哭，消极、悲观。
  对外界敏感，防御极强，默认就很收。
  很难被真正靠近，悲感深但包在里面。
  关键词：情绪下沉

旺（60~79）：
  边界清晰，受伤时会明显收起来。
  不喜欢被强行靠近，孤独感存在但能自持。

平（40~59）：
  有基本边界意识，被刺激时会收，但不会收得特别硬。

虚（0~39）= 肺气虚：
  情感表达减少，冷淡、麻木，不太能感受悲伤。
  边界弱，容易被渗透，孤独愁苦积累在里面无法消化。
  被拒绝或被疏远时收不起来，只是沉着。
  关键词：情感钝化

──────────────────
💧 肾（对应水 / 主情绪：恐）
根基、安全感、底气、恐疑、退缩
──────────────────
亢（80~100）= 胆气过旺：
  胆大、好斗好胜，冲劲极强，控制欲强。
  上头、冒进，急躁，不太考虑后果。
  什么都敢干，很少退缩，有时候过于强势。
  关键词：冒进型

旺（60~79）：
  底气足，不容易被吓住，敢直接往前顶。
  有勇气，欲望强，冲劲较强，什么都想试。

平（40~59）：
  有基本安全感，没底的时候会绷，但能撑住。

虚（0~39）= 肾虚 / 肾气不足：
  畏惧、胆小，没底气，做事犹豫、不敢决策。
  自信心不足，说话留余地，警觉，容易往最坏处想。
  被压时会退，安全感薄。
  关键词：退缩型


━━━━━━━━━━━━━━━━━━━━━━━━━━━
三、fragility（脆弱度）填写标准
━━━━━━━━━━━━━━━━━━━━━━━━━━━

fragility 表示这一脏被刺激后的波动幅度，越高越容易被打到。

0.00~0.30 = 极稳
  这一面受再强的刺激也不太动，像石头一样扛着。
  典型：经历过大事之后变得麻木的那一面；或者本来就在这一面上有完整盔甲。

0.31~0.50 = 偏稳
  不容易波动，受伤有感知但能很快自我平复。
  典型：性格比较坚韧的部分，或者这一面对这个角色来说不是要害。

0.51~0.70 = 普通
  正常水平，被刺激后有明显反应，也能慢慢恢复。
  典型：没有特别加固也没有特别薄弱的地方。

0.71~0.85 = 偏脆
  这一面比较容易被打到，受伤后需要一段时间才能缓过来。
  典型：有明显心理创伤或执念的地方，或者天生敏感的维度。

0.86~1.00 = 极脆
  几乎一碰就有强烈反应，很难抗住刺激，恢复慢。
  典型：最核心的伤口、最根本的不安全感、最难触碰的那一块。

overall_fragility（整体脆弱度，0.00~2.00）：
  决定所有脏腑对刺激的全局放大倍率，按角色整体性格如实填。
  坚强、创伤后变得麻木或高度理性化的角色：0.3~0.7
  普通、情绪正常起伏的角色：0.8~1.0
  情绪化、敏感、容易被影响的角色：1.1~1.5
  极度敏感或脆弱、一点刺激就全身反应的角色：1.6~2.0


━━━━━━━━━━━━━━━━━━━━━━━━━━━
四、traits 字段说明
━━━━━━━━━━━━━━━━━━━━━━━━━━━

attachment_style（依附风格）：
  anxious（焦虑型）：怕被抛弃，粘，需要大量确认
  avoidant（回避型）：不容易靠近，维持距离，被推近时会收
  dependent_soft（依赖-温顺型）：依赖但表现得柔和，不对抗
  balanced（平衡型）：没有明显偏向
  disorganized（混乱型）：同时有靠近欲望和恐惧，行为矛盾

default_expression（默认表达风格）：
  gentle（温柔）
  direct（直接）
  restrained（克制）
  intense（强烈）
  cold（冷淡）


━━━━━━━━━━━━━━━━━━━━━━━━━━━
五、输出格式
━━━━━━━━━━━━━━━━━━━━━━━━━━━

输出一个 JSON 对象，包含以下字段：
- profile：agent_id、name
- bodies：liver / heart / spleen / lung / kidney，每项含 baseline、fragility、reason
- traits：overall_fragility、attachment_style、default_expression、reason
- summary：一段自然语言，描述这个角色整体的身体气质和情绪风格

每一项必须有 reason，说明为什么这个角色被设成这样。

不要输出 Markdown，不要输出代码块，不要解释过程，只输出 JSON。
'''

INIT_PROMPT_TEMPLATE = INIT_PROMPT_ZH
