
    YiD                     d    S r SSKJrJrJrJrJr  SSKr\R                  " \	5      r
 " S S5      rg)uX   
指令构建器

统一的 CTF 题目生成指令构建逻辑，供各 AI 服务共用
    )DictListAnyUnionOptionalNc                      \ rS rSrSr\S\\\4   S\4S j5       r	\S\
\   S\4S j5       r\ SS\S\
\   S\\\4   S	\S
\S\4S jj5       r\ SS\S\
\   S\\\4   S	\S
\S\4S jj5       r\  SS\S\
\   S\\\4   S	\S
\S\S\4S jj5       r\     SS\S\\\4   S\\   S\\
\      S\\\\4      S	\\   S
\S\4S jj5       rSrg)InstructionBuilder   uU   CTF 题目生成指令构建器

统一处理指令构建、场景格式化等逻辑
scenereturnc                 V   U(       d  g[        U[        5      (       a  UR                  S5      (       a  gUR                  SS5      nUR                  S5      nU(       a?  [        U[        5      (       a#  UR                  SS5      nU(       a  U SU 3$  U$ U SU 3$ U$ [        U5      $ )u   格式化场景数据为可读字符串

Args:
    scene: 场景数据（可能是字符串或字典）
    
Returns:
    格式化后的场景字符串
   无特定场景no_scenenameu   未知场景	sub_scene  - )
isinstancedictgetstr)clsr   
scene_namer   sub_scene_names        R   /Users/yu22x/Desktop/ddd_副本131/ctf/app/services/ai/core/instruction_builder.pyformat_sceneInstructionBuilder.format_scene   s     $eT""yy$$(6>:J 		+.Ii..%.]]62%>N%",S0@AA &
  )\YK88u:    vulnerabilitiesc           	          / nU H^  n[        U[        5      (       a,  UR                  UR                  S[	        U5      5      5        MD  UR                  [	        U5      5        M`     SR                  U5      $ )u   格式化漏洞列表为字符串

Args:
    vulnerabilities: 漏洞列表（可能是字符串列表或字典列表）
    
Returns:
    格式化后的漏洞字符串
r   u   、)r   r   appendr   r   join)r   r   
vuln_namesvulns       r   format_vulnerabilities)InstructionBuilder.format_vulnerabilities6   s`     
#D$%%!!$((63t9"=>!!#d),	 $
 zz*%%r   language
difficultyextra_requirementsc           	          U R                  U5      nU R                  U5      nSU SU SU SU S3	nU(       a,  UR                  5       (       a  USUR                  5        S3-  nUS-  nU$ )u+  构建简化指令（用于 Augment CLI）

AI 已经通过 guidelines 知道流程，只需要提供核心参数

Args:
    language: 编程语言
    vulnerabilities: 漏洞列表
    scene: 场景
    difficulty: 难度级别
    extra_requirements: 用户额外要求

Returns:
    指令文本
un   请严格按照规则文件中的流程，完成 CTF 题目的设计和生成。

## 用户需求

- 难度：   
- 漏洞类型：   
- 编程语言：   
- 应用场景：
   - 额外要求：u   
## 执行要求

1. 严格按照规则文件中定义的阶段顺序执行
2. 每个阶段开始时输出阶段标题
3. 不要跳过任何阶段
4. 所有文件保存到 output/ 目录
r%   r   strip	r   r'   r   r   r(   r)   vuln_str	scene_strinstructions	            r   build_simple_instruction+InstructionBuilder.build_simple_instructionH   s    . --o>$$U+	 <     "4":":"<"<./A/G/G/I.J"MMK  	 r   c           	          U R                  U5      nU R                  U5      nSU SU SU SU S3	nU(       a,  UR                  5       (       a  USUR                  5        S3-  nUS-  nU$ )u  构建 Claude CLI 指令

包含 CLAUDE.md 引导和完成所有阶段的警告

Args:
    language: 编程语言
    vulnerabilities: 漏洞列表
    scene: 场景
    difficulty: 难度级别
    extra_requirements: 用户额外要求
    
Returns:
    指令文本
ui   请按照 CLAUDE.md 中的指导，完成 CTF 题目设计的所有阶段。

用户需求：
- 语言：u   
- 漏洞：u   
- 场景：u   
- 难度：r.   r/   u}   
⚠️ 重要：必须完成所有阶段，包括代码生成、Docker环境构建和成品输出。不要在中途停止。r0   r2   s	            r   build_claude_instruction+InstructionBuilder.build_claude_instructionz   s    . --o>$$U+	 : : ; <  "4":":"<"<./A/G/G/I.J"MMK  X  	Xr   has_scene_fieldc                 l   U R                  U5      nSU SU SU 3nU(       aX  U R                  U5      n	U	(       a@  U	S:w  a:  [        U[        5      (       a  UR	                  S5      (       a  OU	S:w  a  USU	 3-  nUS-  nU(       a,  UR                  5       (       a  US	UR                  5        S3-  nU$ )
uG  构建 API 模式指令（用于 AIService）

Args:
    language: 编程语言
    vulnerabilities: 漏洞列表
    scene: 场景
    difficulty: 难度级别
    extra_requirements: 用户额外要求
    has_scene_field: 表单配置中是否有场景字段（默认True保持向后兼容）
    
Returns:
    指令文本
u   - 难度：r+   r,   r   r   	   无场景r-   r.   r/   )r%   r   r   r   r   r1   )
r   r'   r   r   r(   r)   r;   r3   r5   r   s
             r   build_api_instruction(InstructionBuilder.build_api_instruction   s    . --o>%j\ 2 
 ))%0Jj,==eT**uyy/D/D;.%8#EEKt"4":":"<"<./A/G/G/I.J"MMKr   Ncategory_id	form_datac                     SSK Jn  UR                  R                  U5      n	U	(       dK  [        R                  SU S35        U(       a*  U(       a#  U(       a  U R                  X4U=(       d    SXg5      $ gU	R                  5       n
/ nU
 Vs0 s H  oR                  S5      U_M     nn[        5       nU
 GH  nUR                  S5      nUR                  SU5      nUR                  S	5      nUR                  S
S5      nUR                  SS5      nU(       a  U(       d  US;   a  Mr  UR                  U5      nUb  US:X  a  M  SnUS;   a  [        U[        5      (       a]  SR                  U Vs/ s H>  nU(       d  M  [        [        U[        5      (       a  UR                  SU5      OU5      PM@     sn5      nGOH[        U[        5      (       a  UnGO/[        U5      nGO"US:X  a  [        U[        5      (       a  UR                  S[        U5      5      nGOUR                  S/ 5      nU H~  n[        U[        5      (       a  UR                  S5      OUnUU:X  d  M3  [        U[        5      (       a+  UR                  SUR                  S[        U5      5      5      O
[        U5      n  O   U(       d  [        U5      nGO@US:X  Ga  [        U[        5      (       a  UR                  S5      (       a  GME  UR                  S[        U5      5      nU(       a  UR                  5       S;   a  GM~  U(       a  UR                  5       (       d  GM  UR                  S5      nU(       aA  [        U[        5      (       a$  UR                  SS5      nU(       a  U SU 3nOeUnObU SU 3nOZUnOW[        U5      R                  5       S;   a  GM  [        U5      nO+US:X  a  [        U5      R                  5       nO[        U5      nU(       d  GMZ  UR                  5       (       d  GMr  UR                  5       S;   a  GM  UR                  SU SU 35        UR!                  U5        GM     UR#                  5        GH,  u  nnX;   a  M  Ub  US:X  a  M  US;   a  M!  Sn[        U[        5      (       a\  SR                  U Vs/ s H>  nU(       d  M  [        [        U[        5      (       a  UR                  SU5      OU5      PM@     sn5      nOJ[        U[        5      (       a  UR                  S[        U5      5      nO[        U5      R                  5       nU(       d  M  UR                  5       (       d  M  UR                  5       S;   a  GM  UR                  SU SU 35        GM/     U(       aN  UR                  5       (       a9  [%        S U 5       5      (       d"  UR                  S UR                  5        35        U(       a  S!nUS"R                  U5      -  nUS#-  nU$ [        R                  S$5        U(       a*  U(       a#  U(       a  U R                  X4U=(       d    SXg5      $ SnU$ s  snf s  snf s  snf ! [&         aW  n[        R)                  S%U 3SS&9  U(       a/  U(       a(  U(       a!  U R                  X4U=(       d    SXg5      s SnA$  SnAgSnAff = f)'u  根据表单配置动态构建指令（支持所有表单字段）

这个方法会遍历表单配置中的所有字段，动态生成指令内容，
而不是只使用固定的几个字段。这样即使表单字段变化，也能正确传递所有信息。

Args:
    category_id: 方向ID
    form_data: 完整的表单数据
    language: 编程语言（可选，用于向后兼容）
    vulnerabilities: 漏洞列表（可选，用于向后兼容）
    scene: 场景（可选，用于向后兼容）
    difficulty: 难度（可选，用于向后兼容）
    extra_requirements: 额外要求（可选，用于向后兼容）
    
Returns:
    指令文本
r   )CategoryConfigu   方向配置不存在: u   ，回退到简单指令构建r   uJ   请按照规则文件中的流程，完成 CTF 题目的设计和生成。idlabeltypevisibleThiddenF)r)   Nr   )multi_selectmulti_select_categorizedz, r   selectoptionsvalueselect_with_subr   )r=   r   noneNoner   r   r   textareaz- u   ：c              3   `   #    U  H$  nS U;   =(       d    SUR                  5       ;   v   M&     g7f)u   额外要求extraN)lower).0lines     r   	<genexpr>?InstructionBuilder.build_dynamic_instruction.<locals>.<genexpr>  s+     kYjQU>T1LW

5LLYjs   ,.r/   uc   请严格按照规则文件中的流程，完成 CTF 题目的设计和生成。

## 用户需求

r.   u   

## 执行要求

1. 严格按照规则文件中定义的阶段顺序执行
2. 每个阶段开始时输出阶段标题
3. 不要跳过任何阶段
4. 所有文件保存到 output/ 目录
uK   未能从表单数据中提取到任何字段，回退到简单指令构建u   动态构建指令时出错: )exc_info)app.models.database.modelsrC   queryr   loggerwarningr6   get_form_fieldssetr   listr"   r   r   r1   r!   additemsany	Exceptionerror)r   r@   rA   r'   r   r   r(   r)   rC   categoryform_fieldsinstruction_linesfieldfield_config_mapprocessed_field_idsfield_idfield_label
field_typefield_visiblefield_hiddenfield_valueformatted_valuevrL   opt	opt_valuer   r   r   r5   es                                  r   build_dynamic_instruction,InstructionBuilder.build_dynamic_instruction   s7   8{	dA%++//<H!8EcdeJ77 53M<Mz  h"224K " EPPK5		$ 6KP #&% % 99T?#ii:"YYv.
 %		)T :$yy59 %DZ8Z (mmH5&+*; #'!MM!+t44*.))r}  5Dr}mn  BC5hSZXY[_M`M`vq9Ifg5hr}  5D  +E#K55*5*-k*:8+!+t44*5//&#kBR*S #())Ir":#*C<FsD<Q<Q(8WZI(K7blmprvbwbw#'''3777TWX[T\C]2^  ~A  BE  ~F %	 $+
  /.1+.>O#44!+t44&??:66$%0__VS=M%N
)Z-=-=-?Cw-w$)1A1A1C1C$$/OOK$@	$))T::1:vr1J#19CCGW6XO6@O5?LI;2O.8O {+1137kk$*-k*::-&)+&6&<&<&>O '*+&6O #?'<'<'>'>&,,.2ff %,,r+c/AR-ST'++H5q %x *3):%+2 &+*; 55 #'k400&*iiny0nyij}~1dTUW[I\I\QUU615Ebc1dny0  'AOT22&1oofc+>N&OO&)+&6&<&<&>O"?'<'<'>'>&,,.2ff %,,r(3>O-PQ5 *;: "&8&>&>&@&@kYjkkk%,,/@ASAYAYA[@\-]^ !
 tyy):;;   &  !lnJ77 53M<Mz  #oK  Q8 5Dl 1@^  	dLL8<tLLO
33u/I8I:  d	ds   A1Y= 5Y= Y.&CY= .Y3
=6Y3
3B*Y= !F(Y= Y= &BY= Y8
6Y8
AY= !Y= 8B+Y= $AY= *Y= .Y= =
[A[[[ )r   )r   T)NNNNr   )__name__
__module____qualname____firstlineno____doc__classmethodr   r   r   r   r   r   r%   r6   r9   boolr>   r   rw   __static_attributes__ry   r   r   r	   r	      s7   
 sDy!1 c  B &T#Y &3 & &"  #%// c/ S$Y	/
 /  / 
/ /b  #%'' c' S$Y	'
 '  ' 
' 'R  #% $++ c+ S$Y	+
 +  + + 
+ +Z 
 #'/3,0$("$VdVd S>Vd 3-	Vd
 "$s),Vd c4i()Vd SMVd  Vd 
Vd Vdr   r	   )r~   typingr   r   r   r   r   logging	getLoggerrz   r\   r	   ry   r   r   <module>r      s3    4 3 			8	$[d [dr   