ó
    |¤jg  ã                  ó„   • S r SSKJr  SSKrSSKJr  SSKJr  SSKJ	r	  SS jr
    SS jrSS	 jrSS
 jrSS jrSS jrg)uê  Skill Evolution: Generate new skills from successful trajectories.

Based on the Skill Evolution pattern (Weng 2026): Agent analyzes successful
tool call sequences and distills them into reusable skill templates.

Architecture:
- Analyzes conversation history for successful multi-tool patterns
- Identifies recurring workflows (e.g., "read file â†’ edit â†’ test")
- Generates skill markdown with proper parameter declarations
- Stores in the workspace .acli/skills/ for automatic loading
é    )ÚannotationsN)ÚPath)ÚAny©ÚWORKSPACE_DIRc                 ó   • [         S-  $ )NÚskillsr   © ó    Ú³C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\dashscope/acli/memory/skill_evolution.pyÚ_skills_dirr      s   € Ü˜8Ñ#Ð#r   c           
     óè  ^
• U (       d  g/ nU  Hq  nUR                  S5      S:X  d  M  SU;   d  M"  US    HF  nUR                  S0 5      R                  SS5      nU(       d  M.  XA;  d  M5  UR                  U5        MH     Ms     [        U5      S:  a  gSm
[        U 5       H,  nUR                  S5      S:X  d  M  UR                  S	S5      m
  O   T
(       d  g/ S
Qn[	        U
4S jU 5       5      (       a  g[        U 5       HY  nUR                  S5      S:w  a  M  UR                  S	S5      n[        U[        5      (       a  UR                  S5      (       a    g  O   [        U5      nU(       d  gSnU  HC  nUR                  S5      S:X  d  M  UR                  S	S5      n[        U[        5      (       a  Un  O   [        U5      n	UUS[        U5       SSR                  USS 5       3U	USS S.$ )a  Analyze a conversation trajectory for skill-worthy patterns.

Returns a dict with:
- pattern_name: suggested skill name
- tools_sequence: list of tools used in order
- rationale: why this is a good skill candidate
- parameters: extracted parameters from the conversation
NÚroleÚ	assistantÚ
tool_callsÚfunctionÚnameÚ é   Úcontent)õ   é”™è¯¯u   å¤±è´¥u   æ— æ³•ÚerrorÚfailedÚcannotÚunablec              3  óH   >#   • U  H  oTR                  5       ;   v •  M     g 7f)N)Úlower)Ú.0ÚkwÚlast_assistants     €r   Ú	<genexpr>Ú%analyze_trajectory.<locals>.<genexpr>J   s   øé € Ð
A².¨B�×%Ñ%Ó'Ö'².ùs   ƒ"Útool)ÚErrorr   ÚuserzSuccessful z-tool workflow: u    â†’ é   éd   )Úpattern_nameÚtools_sequenceÚ	rationaleÚ
parametersÚsample_request)ÚgetÚappendÚlenÚreversedÚanyÚ
isinstanceÚstrÚ
startswithÚ_identify_patternÚ_extract_parametersÚjoin)ÚmessagesÚtool_sequenceÚmsgÚtcr   Úerror_keywordsr   r(   Ú
first_userr+   r    s             @r   Úanalyze_trajectoryr>      sõ  ø€ ö Øð €MÛˆØ�7‰7�6‹?˜kÕ)¨l¸cÕ.AØ˜,Ô'�Ø—v‘v˜j¨"Ó-×1Ñ1°&¸"Ó=�ß�4˜DÕ5Ø!×(Ñ(¨Ö.ó (ñ ô ˆ=Ó˜AÓØð €NÜ˜Ö!ˆØ�7‰7�6‹?˜kÕ)Ø ŸW™W Y°Ó3ˆNÙñ "ö
 Øò€Nô Ô
A±.Ó
A×AÑAØô ˜Ö!ˆØ�7‰7�6‹?˜fÓ$ÙØ—'‘'˜) RÓ(ˆÜ�gœs×#Ñ#¨×(:Ñ(:Ø÷)
ñ )
ñ Ùñ "ô % ]Ó3€LÞØð €JÛˆØ�7‰7�6‹?˜fÕ$Ø—g‘g˜i¨Ó,ˆGÜ˜'¤3×'Ñ'Ø$�
Ùñ ô % ZÓ0€Jð %Ø'àœ#˜mÓ,Ð-Ð-=Ø�|‰|˜M¨"¨1Ð-Ó.Ð/ð1ð !Ø$ T cÐ*ñ	ð 	r   c                óä   • SU ;   a  SU ;   a  SU ;   a  ggSU ;   a  SU ;   a  gSU ;   a  SU ;   a  [        S U  5       5      (       a  g	S
U ;   d  SU ;   a  SU ;   a  g[        S U  5       5      (       a  gg)z,Identify a named pattern from tool sequence.Ú	read_fileÚ
write_fileÚrun_commandzedit-and-testz	file-editÚ	edit_filezcode-refactorc              3  óD   #   • U  H  nS U;   =(       d    SU;   v •  M     g7f)ÚinitÚcreateNr
   ©r   Úts     r   r!   Ú$_identify_pattern.<locals>.<genexpr>†   s    é € ÐC²]°ˆv˜‰{×+˜h¨!™mÔ+²]ùs   ‚ zproject-setupÚsearch_filesÚgrepzsearch-and-analyzec              3  ó,   #   • U  H
  nS U;   v •  M     g7f)ÚgitNr
   rG   s     r   r!   rI   �   s   é € Ð
-š}˜!ˆ5�AŽ:š}ùs   ‚zgit-workflowN)r1   )r9   s    r   r5   r5   x   s�   € ð �mÓ#¨¸Ó(EØ˜MÓ)Ø"Øð �mÓ#¨°}Ó(DØð ˜Ó%¨,¸-Ó*GÜÑC±]ÓC×CÑCØ"ð ˜Ó&¨&°MÓ*AØ˜-Ó'Ø'ô Ñ
-™}Ó
-×-Ñ-Øàr   c                óâ   • / n[         R                  " SU 5      nU(       a  UR                  SSUS   S.5        [         R                  " SU 5      nU(       a  UR                  SSUS   S.5        U$ )	z/Extract potential parameters from user request.z[`\s]([\w\-./]+\.\w+)[`\s]Ú	file_pathzTarget file pathr   )r   ÚdescriptionÚexamplez	`([^`]+)`ÚcommandzCommand to execute)ÚreÚfindallr.   )Úuser_requestÚparamsÚpathsÚcommandss       r   r6   r6   •   su   € à€Fô �JŠJÐ4°lÓC€EÞØ�‰à#Ø1Ø  ™8ñô	
ô �zŠz˜,¨Ó5€HÞØ�‰à!Ø3Ø# A™;ñô	
ð €Mr   c                ó”  • U S   nU S   nU S   nSSU 3SU S    3S/nU Ha  nUR                  S	US
    35        UR                  SUS    35        UR                  S5        SU;   d  MJ  UR                  SUS    35        Mc     UR                  S5        UR                  S5        UR                  SU 35        UR                  S5        UR                  S5        UR                  S5        [        US5       H  u  pgUR                  U SU S35        M     UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  SU SU(       a  US   S   OS 35        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        UR                  S5        [        US5       H  u  pgUR                  U SU S35        M     UR                  S5        UR                  S 5        S!R                  U5      $ )"z1Generate skill markdown from trajectory analysis.r(   r)   r+   z---zname: z"description: Automated workflow - r*   z
arguments:z
  - name: r   z    description: rP   z    required: truerQ   z    example: r   z# z)Automatically run the following workflow:é   z. `Ú`z## Usage examplez```Ú/Ú r   z<arg>z## Workflowz%Execute the following steps in order:z. Call the `z` toolzReport the results when done.Ú
)r.   Ú	enumerater7   )Úanalysisr   ÚtoolsrV   ÚlinesÚpÚir#   s           r   Úgenerate_skill_markdownre   ²   s#  € à�NÑ#€DØÐ%Ñ&€EØ�lÑ#€Fð 	Ø
��ˆØ
,¨X°kÑ-BÐ,CÐDØð	€Eó ˆØ�‰�z ! F¡) Ð-Ô.Ø�‰Ð(¨¨=Ñ)9Ð(:Ð;Ô<Ø�‰Ð)Ô*Ø˜�>Ø�L‰L˜=¨¨9©¨Ð7Ö8ñ ð 
‡L�L�ÔØ	‡L�L�ÔØ	‡L�L�2�d�V�ÔØ	‡L�L�ÔØ	‡L�LÐ<Ô=Ø	‡L�L�ÔÜ˜U AÖ&‰ˆØ�‰˜�s˜#˜d˜V 1Ð%Ö&ñ 'à	‡L�L�ÔØ	‡L�LÐ#Ô$Ø	‡L�L�ÔØ	‡L�L�ÔØ	‡L�L�1�T�F˜!¶F˜F 1™I iÒ0ÀÐHÐIÔJØ	‡L�L�ÔØ	‡L�L�ÔØ	‡L�L�ÔØ	‡L�L�ÔØ	‡L�LÐ8Ô9Ø	‡L�L�ÔÜ˜U AÖ&‰ˆØ�‰˜�s˜, t f¨FÐ3Ö4ñ 'à	‡L�L�ÔØ	‡L�LÐ0Ô1à�9‰9�UÓÐr   c                óÖ   •  [        5       nUR                  SSS9  U S   nX S3-  nUR                  5       (       a  g[        U 5      nUR	                  USS9  U$ ! [
         a     gf = f)z4Save generated skill to the workspace .acli/skills/.T)ÚparentsÚexist_okr(   z.mdNzutf-8)Úencoding)r   ÚmkdirÚexistsre   Ú
write_textÚ	Exception)r`   Ú
skills_dirr   Ú
skill_fileÚmarkdowns        r   Úsave_generated_skillrq   â   s‚   € ðÜ “]ˆ
Ø×Ñ °ÐÑ5à˜Ñ'ˆØ F¨# ,Ñ.ˆ
ð ×Ñ×ÑØä*¨8Ó4ˆØ×Ñ˜h°ÐÑ9àÐøÜó Ùðús   ‚;A ¾A Á
A(Á'A()Úreturnr   )r8   zlist[dict[str, Any]]rr   zdict[str, Any] | None)r9   z	list[str]rr   z
str | None)rU   r3   rr   zlist[dict[str, str]])r`   údict[str, Any]rr   r3   )r`   rs   rr   zPath | None)Ú__doc__Ú
__future__r   rS   Úpathlibr   Útypingr   Údashscope.acli.configr   r   r>   r5   r6   re   rq   r
   r   r   Ú<module>ry      sN   ðñ
õ #ã 	Ý Ý å /ô$ðYØ"ðYàôYôxô:ô:-õ`r   