Files
assist/src/agent/__pycache__/tool_manager.cpython-311.pyc

126 lines
21 KiB
Plaintext
Raw Normal View History

2025-09-06 21:06:18 +08:00
<EFBFBD>
z"5i-B<00><00><><00>dZddlZddlZddlmZmZmZmZmZddl m Z ddl
2025-09-06 21:06:18 +08:00
Z
ej e <0C><00>Z Gd<05>d<06><00>ZdS)u3
工具管理器
负责管理和执行各种工具
<EFBFBD>N)<05>Dict<63>List<73>Any<6E>Optional<61>Callable)<01>datetimec <00><><00>eZdZdZd<02>Zd<03>Zd<dededee ee
ffd<08>Z ded e fd
<EFBFBD>Z d ed e ee
fd e ee
ffd <0A>Zd ede defd<10>Zd ee ee
ffd<11>Zd ed ee ee
ffd<12>Zdee ee
ffd<14>Zd=deded e ee
ffd<18>Zd>dedededed e ee
ff
d<1E>Zded e ee
ffd <20>Zd?d"ed#ed e ee
ffd$<24>Zd@d&ed'ed e ee
ffd(<28>ZdAd"ed*eed+ed e ee
ffd,<2C>Zd-ed.ed/e ee
fd e ee
ffd0<64>ZdBded2ed e ee
ffd3<64>Zd?d4ed5ed6ed e ee
ffd7<64>ZdCded9ed e ee
ffd:<3A>Zd e ee
ffd;<3B>Z dS)D<> ToolManageru工具管理器c<00>X<00>i|_i|_i|_|<00><00><00>dS<00>N)<04>tools<6C>tool_usage_stats<74>tool_performance<63>_register_default_tools<6C><01>selfs <20>(D:\code\assist\src\agent\tool_manager.py<70>__init__zToolManager.__init__s1<00><00><17><04>
2025-09-06 21:06:18 +08:00
<EFBFBD> "<22><04><1D> "<22><04><1D> <0C>$<24>$<24>&<26>&<26>&<26>&<26>&<26>c<00><><00>|<00>d|j<00><00>|<00>d|j<00><00>|<00>d|j<00><00>|<00>d|j<00><00>|<00>d|j<00><00>|<00>d|j<00><00>|<00>d|j<00><00>|<00>d|j<00><00>|<00>d |j <00><00>|<00>d
|j
<00><00>t<00> d t|j<00><00><00>d <0C><03><00>d S)u注册默认工具<E5B7A5>search_knowledge<67>create_work_order<65>update_work_order<65>generate_response<73> analyze_data<74>send_notification<6F> schedule_task<73>
web_search<EFBFBD>file_operation<6F>database_queryu
已注册 u 个默认工具N)<0F> register_tool<6F>_search_knowledge_tool<6F>_create_work_order_tool<6F>_update_work_order_tool<6F>_generate_response_tool<6F>_analyze_data_tool<6F>_send_notification_tool<6F>_schedule_task_tool<6F>_web_search_tool<6F>_file_operation_tool<6F>_database_query_tool<6F>logger<65>info<66>lenr rs rrz#ToolManager._register_default_toolss1<00><00> <0A><1A><1A>-<2D>t<EFBFBD>/J<>K<>K<>K<> <0C><1A><1A>.<2E><04>0L<30>M<>M<>M<> <0C><1A><1A>.<2E><04>0L<30>M<>M<>M<> <0C><1A><1A>.<2E><04>0L<30>M<>M<>M<> <0C><1A><1A>><3E>4<EFBFBD>+B<>C<>C<>C<> <0C><1A><1A>.<2E><04>0L<30>M<>M<>M<> <0C><1A><1A>?<3F>D<EFBFBD>,D<>E<>E<>E<> <0C><1A><1A><<3C><14>)><3E>?<3F>?<3F>?<3F> <0C><1A><1A>+<2B>T<EFBFBD>-F<>G<>G<>G<> <0C><1A><1A>+<2B>T<EFBFBD>-F<>G<>G<>G<><0E> <0B> <0B>B<><13>T<EFBFBD>Z<EFBFBD><1F><1F>B<>B<>B<>C<>C<>C<>C<>CrN<>name<6D>func<6E>metadatac<00>d<00>||pidddd<04>|j|<t<00>d|<01><00><02><00>dS)u 注册工具rN<>)<05>functionr1<00> usage_count<6E> last_used<65> success_rateu注册工具: <20>r r,r-)rr/r0r1s rr!zToolManager.register_tool)sM<00><00><1D> <20><0E>B<EFBFBD><1C><1D><1F> 
<EFBFBD>
<EFBFBD><04>
<EFBFBD>4<EFBFBD><18> <0F> <0B> <0B>+<2B>T<EFBFBD>+<2B>+<2B>,<2C>,<2C>,<2C>,<2C>,r<00>returnc<00>f<00>||jvr'|j|=t<00>d|<01><00><02><00>dSdS)u 注销工具u注销工具: TFr8)rr/s r<00>unregister_toolzToolManager.unregister_tool5s><00><00> <0F>4<EFBFBD>:<3A> <1D> <1D><14>
<EFBFBD>4<EFBFBD> <20> <12>K<EFBFBD>K<EFBFBD>/<2F><14>/<2F>/<2F> 0<> 0<> 0<><17>4<EFBFBD><14>ur<00> tool_name<6D>
parametersc<00><00><>K<00>||jvr dd|<01>d<03>d<04>S|j|}tj<00><00>} |dxxdz cc<||d<tj|d<00><00>r|ddi|<02><01><01>d {V<00><03>}n|ddi|<02><01>}tj<00><00>|z
<00><00><00>}|<00>|d
|<06><00>t<00>d|<01>d |d <0C>d <0A><05><00>d
|||d<0E>S#t$r}}t<00>
d|<01>d|<07><00><04><00>tj<00><00>|z
<00><00><00>}|<00>|d|<06><00>dt|<07><00>||d<10>cYd }~Sd }~wwxYw)u 执行工具Fu工具 'u ' 不存在)<02>success<73>errorr5<00>r6r4NTu' 执行成功,耗时: z.2fu秒)r?<00>result<6C>execution_time<6D>toolu' 执行失败: )r?r@rCrD<00>) r r<00>now<6F>asyncio<69>iscoroutinefunction<6F> total_seconds<64>_update_tool_performancer,r-<00> Exceptionr@<00>str)rr<r=rD<00>
start_timerBrC<00>es r<00> execute_toolzToolManager.execute_tool=s <00><00><00><00> <14>D<EFBFBD>J<EFBFBD> &<26> &<26> <20>:<3A>I<EFBFBD>:<3A>:<3A>:<3A><0E><0E> <0E>
<14>z<EFBFBD>)<29>$<24><04><1D>\<5C>^<5E>^<5E>
<EFBFBD>$ <0E> <10><1D> <1F> <1F> <1F>1<EFBFBD> $<24> <1F> <1F> <1F> *<2A>D<EFBFBD><1B> <1D><17>*<2A>4<EFBFBD>
<EFBFBD>+;<3B><<3C><<3C> 8<>/<2F>t<EFBFBD>J<EFBFBD>/<2F>=<3D>=<3D>*<2A>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D><06><06>)<29><14>j<EFBFBD>)<29>7<>7<>J<EFBFBD>7<>7<><06>'<27>l<EFBFBD>n<EFBFBD>n<EFBFBD>z<EFBFBD>9<>H<>H<>J<>J<>N<EFBFBD> <10> )<29> )<29>)<29>T<EFBFBD>><3E> J<> J<> J<> <12>K<EFBFBD>K<EFBFBD>^<5E>9<EFBFBD>^<5E>^<5E>~<7E>^<5E>^<5E>^<5E>^<5E> _<> _<> _<> <20> <20>"0<>!<21> <0E><0E> <0E><><19> <0E> <0E> <0E> <12>L<EFBFBD>L<EFBFBD>B<>I<EFBFBD>B<>B<>q<EFBFBD>B<>B<> C<> C<> C<>'<27>l<EFBFBD>n<EFBFBD>n<EFBFBD>z<EFBFBD>9<>H<>H<>J<>J<>N<EFBFBD> <10> )<29> )<29>)<29>U<EFBFBD>N<EFBFBD> K<> K<> K<>!<21><1C>Q<EFBFBD><16><16>"0<>!<21> <0E><0E> <0E> <0E> <0E> <0E> <0E> <0E><><EFBFBD><EFBFBD><EFBFBD> <0E><><EFBFBD>s<00>B9C0<00>0
E7<03>:A2E2<03>,E7<03>2E7r?rCc<00>2<00>||jvrdddddd<03>|j|<|j|}|dxxdz cc<|dxx|z cc<|d|dz |d<|r|dxxdz cc<|d|dz |d <|d |j|d <d
S) u更新工具性能统计rr3)<05>total_executions<6E>successful_executions<6E>
total_time<EFBFBD>avg_execution_timer7rQrArSrTrRr7N)rr )rr<r?rC<00>perfs rrJz$ToolManager._update_tool_performancens<><00><00> <14>D<EFBFBD>1<> 1<> 1<>$%<25>)*<2A>!<21>&)<29> #<23> 0<0E>0<0E>D<EFBFBD> !<21>)<29> ,<2C><14>$<24>Y<EFBFBD>/<2F><04> <0C> <1F> <20> <20> <20>A<EFBFBD>%<25> <20> <20> <20> <0C>\<5C><1A><1A><1A>n<EFBFBD>,<2C><1A><1A><1A>%)<29>,<2C>%7<>$<24>?Q<>:R<>%R<><04> !<21>"<22> <12> /<2F> <10>(<28> )<29> )<29> )<29>Q<EFBFBD> .<2E> )<29> )<29> )<29>#<23>$;<3B><<3C>t<EFBFBD>DV<44>?W<>W<><04>^<5E><1C>15<31>^<5E>0D<30><04>
<EFBFBD>9<EFBFBD><1D>n<EFBFBD>-<2D>-<2D>-rc<00>^<00>g}|j<00><00><00>D]<5D>\}}||d|d|dr|d<00><00><00>nd|dd<06>}||jvr1|j|}|<04>|d|dd <09><02><00>|<01>|<04><00><00><>|S)
u获取可用工具列表r1r5r6Nr7<00>r/r1r5r6r7rTrQ)rTrQ)r <00>items<6D> isoformatr<00>update<74>append)r<00>
tools_infor/rD<00> tool_inforUs r<00>get_available_toolszToolManager.get_available_tools<6C>s<><00><00><17>
<EFBFBD><1E>*<2A>*<2A>*<2A>,<2C>,<2C> )<29> )<29>J<EFBFBD>D<EFBFBD>$<24><1C> <20><1A>,<2C>#<23>M<EFBFBD>2<>>B<>;<3B>>O<>Y<>T<EFBFBD>+<2B>.<2E>8<>8<>:<3A>:<3A>:<3A>UY<55> $<24>^<5E> 4<> <0E><0E>I<EFBFBD><14>t<EFBFBD>,<2C>,<2C>,<2C><1B>,<2C>T<EFBFBD>2<><04><19> <20> <20>*.<2E>/C<>*D<>(,<2C>-?<3F>(@<40>"<12>"<12><13><13><13>
<17> <1D> <1D>i<EFBFBD> (<28> (<28> (<28> (<28><19>rc<00><00>||jvrdS|j|}||d|d|dr|d<00><00><00>nd|dd<06>}||jvr |<03>|j|<00><00>|S)u获取工具信息Nr1r5r6r7rW)r rYrrZ)rr<rDr-s r<00> get_tool_infozToolManager.get_tool_info<66>s<><00><00> <14>D<EFBFBD>J<EFBFBD> &<26> &<26><17>4<EFBFBD><13>z<EFBFBD>)<29>$<24><04><1D><1C>Z<EFBFBD>(<28><1F> <0A>.<2E>:><3E>{<7B>:K<>U<><14>k<EFBFBD>*<2A>4<>4<>6<>6<>6<>QU<51> <20><1E>0<> 
<EFBFBD>
<EFBFBD><04> <15><04>-<2D> -<2D> -<2D> <10>K<EFBFBD>K<EFBFBD><04>-<2D>i<EFBFBD>8<> 9<> 9<> 9<><13> r<00>
tool_usagec<00><><00>|D]O}|<02>d<01><00>}||jvr/|j|dxx|<02>dd<04><00>z cc<<00>PdS)u更新工具使用统计rDr5<00>countrAN)<02>getr )rra<00>usager<s r<00>update_usage_statszToolManager.update_usage_stats<74>so<00><00><1F> N<01> N<01>E<EFBFBD><1D> <09> <09>&<26>)<29>)<29>I<EFBFBD><18>D<EFBFBD>J<EFBFBD>&<26>&<26><14>
<EFBFBD>9<EFBFBD>%<25>m<EFBFBD>4<>4<>4<><05> <09> <09>'<27>1<EFBFBD>8M<38>8M<38>M<>4<>4<>4<><34> N<01> Nr<00><00>query<72>top_kc<00><00>K<00> ddlm}|<04><00>}|<05>||<02><00>}||t|<06><00>d<03>S#t$r8}t
<00>d|<07><00><02><00>dt|<07><00>icYd}~Sd}~wwxYw)u搜索知识库工具<E5B7A5>)<01>KnowledgeManager<65>rh<00>resultsrcu搜索知识库失败: r@N)<08> knowledge_base.knowledge_managerrlrr.rKr,r@rL)rrhri<00>kwargsrl<00>knowledge_managerrnrNs rr"z"ToolManager._search_knowledge_tool<6F>s<><00><00><00><00> %<25> K<> K<> K<> K<> K<> K<> 0<> 0<> 2<> 2<> <1D>'<27>8<>8<><15><05>F<>F<>G<EFBFBD><1F>"<22><1C>W<EFBFBD><1C><1C><0E><0E> <0E><>
<19> %<25> %<25> %<25> <12>L<EFBFBD>L<EFBFBD>6<>1<EFBFBD>6<>6<> 7<> 7<> 7<><1B>S<EFBFBD><11>V<EFBFBD>V<EFBFBD>$<24> $<24> $<24> $<24> $<24> $<24> $<24><><EFBFBD><EFBFBD><EFBFBD> %<25><><EFBFBD>s<00>8=<00>
A?<03>-A:<03>4A?<03>:A?<03>medium<75>title<6C> description<6F>category<72>priorityc<00><00><>K<00> ddlm}|<06><00>}|<07>||||<04><00>}|S#t$r8} t<00>d| <09><00><02><00>dt | <09><00>icYd} ~ Sd} ~ wwxYw)u创建工单工具rk<00><01>DialogueManageru创建工单失败: r@N)<07>dialogue.dialogue_managerryrrKr,r@rL)
rrsrtrurvrpry<00>dialogue_managerrBrNs
rr#z#ToolManager._create_work_order_tool<6F>s<><00><00><00><00> %<25> C<> C<> C<> C<> C<> C<>.<2E><EFBFBD>0<>0<> <1C>%<25>7<>7<><05>{<7B>H<EFBFBD>V^<5E>_<>_<>F<EFBFBD><19>M<EFBFBD><4D><18> %<25> %<25> %<25> <12>L<EFBFBD>L<EFBFBD>3<><01>3<>3<> 4<> 4<> 4<><1B>S<EFBFBD><11>V<EFBFBD>V<EFBFBD>$<24> $<24> $<24> $<24> $<24> $<24> $<24><><EFBFBD><EFBFBD><EFBFBD> %<25><><EFBFBD>s<00>).<00>
A0<03>-A+<03>%A0<03>+A0<03> work_order_idc<00><00>K<00> ddlm}|<03><00>}|j|fi|<02><01>}||t|<02><00><00><00><00>d<03>S#t
$r8}t <00>d|<06><00><02><00>dt|<06><00>icYd}~Sd}~wwxYw)u更新工单工具rkrx)r?r|<00>updated_fieldsu更新工单失败: r@N) rzryr<00>list<73>keysrKr,r@rL)rr|rpryr{r?rNs rr$z#ToolManager._update_work_order_tool<6F>s<><00><00><00><00> %<25> C<> C<> C<> C<> C<> C<>.<2E><EFBFBD>0<>0<> <1C>8<>&<26>8<><1D>Q<>Q<>&<26>Q<>Q<>G<EFBFBD>#<23>!.<2E>"&<26>v<EFBFBD>{<7B>{<7B>}<7D>}<7D>"5<>"5<><0E><0E> <0E><>
<19> %<25> %<25> %<25> <12>L<EFBFBD>L<EFBFBD>3<><01>3<>3<> 4<> 4<> 4<><1B>S<EFBFBD><11>V<EFBFBD>V<EFBFBD>$<24> $<24> $<24> $<24> $<24> $<24> $<24><><EFBFBD><EFBFBD><EFBFBD> %<25><><EFBFBD>s<00>AA<00>
B <03>-B<03>>B <03>B <03><00>message<67>contextc<00><00><>K<00> ddlm}|<04><00>}|<05>||<02><00>}|S#t$r8}t<00>d|<07><00><02><00>dt |<07><00>icYd}~Sd}~wwxYw)u生成回复工具rk)<01>
QwenClientu生成回复失败: r@N)<07>core.llm_clientr<74>rrKr,r@rL)rr<>r<>rpr<><00>
llm_clientrBrNs rr%z#ToolManager._generate_response_tool<6F>s<><00><00><00><00> %<25> 4<> 4<> 4<> 4<> 4<> 4<>#<23><1A><1C><1C>J<EFBFBD><1F>1<>1<>'<27>7<EFBFBD>C<>C<>F<EFBFBD><19>M<EFBFBD><4D><18> %<25> %<25> %<25> <12>L<EFBFBD>L<EFBFBD>3<><01>3<>3<> 4<> 4<> 4<><1B>S<EFBFBD><11>V<EFBFBD>V<EFBFBD>$<24> $<24> $<24> $<24> $<24> $<24> $<24><><EFBFBD><EFBFBD><EFBFBD> %<25><><EFBFBD>s<00>',<00>
A.<03>-A)<03>#A.<03>)A.<03> last_7_days<79> data_type<70>
date_rangec<00><00>fK<00> ddlm}|<04><00>}|dkr|<05><00><00>}n=|dkr|<05><00><00>}n"|dkr|<05><00><00>}ndd|<01><00>i}|S#t
$r8}t <00>d|<07><00><02><00>dt|<07><00>icYd }~Sd }~wwxYw)
u数据分析工具rk)<01>AnalyticsManager<65>daily_analytics<63>summary<72>category_performancer@u不支持的数据类型: u数据分析失败: N) <09>analytics.analytics_managerr<72><00>generate_daily_analytics<63>get_analytics_summary<72>get_category_performancerKr,r@rL)rr<>r<>rpr<><00>analytics_managerrBrNs rr&zToolManager._analyze_data_tool<6F>s<><00><00><00><00> %<25> F<> F<> F<> F<> F<> F<> 0<> 0<> 2<> 2<> <1D><18>-<2D>-<2D>-<2D>*<2A>C<>C<>E<>E<><06><06><1A>i<EFBFBD>'<27>'<27>*<2A>@<40>@<40>B<>B<><06><06><1A>4<>4<>4<>*<2A>C<>C<>E<>E<><06><06>!<21>#K<> <09>#K<>#K<>L<><06><19>M<EFBFBD><4D><18> %<25> %<25> %<25> <12>L<EFBFBD>L<EFBFBD>3<><01>3<>3<> 4<> 4<> 4<><1B>S<EFBFBD><11>V<EFBFBD>V<EFBFBD>$<24> $<24> $<24> $<24> $<24> $<24> $<24><><EFBFBD><EFBFBD><EFBFBD> %<25><><EFBFBD>s<00>A)A.<00>.
B0<03>8-B+<03>%B0<03>+B0r-<00>
recipients<EFBFBD>notification_typec<00><00><>K<00> |||tj<00><00><00><00><00>d<01>}t<00>d|<01>d|<02><00><04><00>ddtj<00><00><00>d<06><00><00><00>|d<07>S#t $r8}t<00>d|<06><00><02><00>d t|<06><00>icYd
}~Sd
}~wwxYw) u发送通知工具)r<>r<><00>type<70> timestampu发送通知: u 给 T<>notif_<66> %Y%m%d_%H%M%S)r?<00>notification_id<69>datau发送通知失败: r@N<> rrFrYr,r-<00>strftimerKr@rL)rr<>r<>r<>rp<00>notification_datarNs rr'z#ToolManager._send_notification_tool s<><00><00><00><00> %<25>
#<23>(<28>)<29>%<25>\<5C>^<5E>^<5E>5<>5<>7<>7<> !<0E>!<0E> <1D> <13>K<EFBFBD>K<EFBFBD>C<><17>C<>C<>z<EFBFBD>C<>C<> D<> D<> D<> <20>#V<>H<EFBFBD>L<EFBFBD>N<EFBFBD>N<EFBFBD>,C<>,C<>O<EFBFBD>,T<>,T<>#V<>#V<>)<29><0E><0E> <0E><>
<19> %<25> %<25> %<25> <12>L<EFBFBD>L<EFBFBD>3<><01>3<>3<> 4<> 4<> 4<><1B>S<EFBFBD><11>V<EFBFBD>V<EFBFBD>$<24> $<24> $<24> $<24> $<24> $<24> $<24><><EFBFBD><EFBFBD><EFBFBD> %<25><><EFBFBD><EFBFBD><00>A6A;<00>;
B=<03>-B8<03>2B=<03>8B=<03> task_name<6D> schedule_time<6D> task_datac<00><00><>K<00> |||tj<00><00><00><00><00>d<01>}t<00>d|<01>d|<02><00><04><00>ddtj<00><00><00>d<06><00><00><00>|d<07>S#t $r8}t<00>d|<06><00><02><00>d t|<06><00>icYd
}~Sd
}~wwxYw) u调度任务工具)r<>r<>r<><00>
created_atu调度任务: u 在 T<> schedule_r<5F>)r?<00> schedule_idr<64>u调度任务失败: r@Nr<4E>)rr<>r<>r<>rp<00> schedule_datarNs rr(zToolManager._schedule_task_tool$s<><00><00><00><00> %<25>
'<27>!.<2E>&<26>&<26>l<EFBFBD>n<EFBFBD>n<EFBFBD>6<>6<>8<>8<> <0E><0E>M<EFBFBD> <13>K<EFBFBD>K<EFBFBD>H<><19>H<>H<><1D>H<>H<> I<> I<> I<> <20>U<>8<EFBFBD><<3C>><3E>><3E>+B<>+B<>?<3F>+S<>+S<>U<>U<>%<25><0E><0E> <0E><>
<19> %<25> %<25> %<25> <12>L<EFBFBD>L<EFBFBD>3<><01>3<>3<> 4<> 4<> 4<><1B>S<EFBFBD><11>V<EFBFBD>V<EFBFBD>$<24> $<24> $<24> $<24> $<24> $<24> $<24><><EFBFBD><EFBFBD><EFBFBD> %<25><><EFBFBD>r<EFBFBD><00><00> max_resultsc<00><00>F<00>K<00> <00>fd<01>tt|d<02><00><00><00>D<00><00>}t<00>d<03><01><00><02><00><00>|t |<04><00>d<04>S#t
$r8}t<00>d|<05><00><02><00>dt|<05><00>icYd}~Sd}~wwxYw)u网络搜索工具c <00>F<00><01>g|]}d|dz<00><00>d|dz<00><00>d<03><02>d|dz<00><00>d<05><03><02>S)u 搜索结果 rAzhttps://example.com/resultu这是关于 'u' 的搜索结果摘要 )rs<00>url<72>snippetrE)<03>.0<EFBFBD>irhs <20>r<00>
<listcomp>z0ToolManager._web_search_tool.<locals>.<listcomp>Bsh<00><><00><0E><0E><0E> <16> 3<>Q<EFBFBD>q<EFBFBD>S<EFBFBD>2<>2<>=<3D><01>!<21><03>=<3D>=<3D>T<><05>T<>T<>q<EFBFBD>QR<51>s<EFBFBD>T<>T<><12><12><0E><0E>rrgu网络搜索: rmu网络搜索失败: r@N)<08>range<67>minr,r-r.rKr@rL)rrhr<>rp<00>search_resultsrNs ` rr)zToolManager._web_search_tool<s<><00><><00><00><00> %<25><0E><0E><0E><0E> <1F>s<EFBFBD>;<3B><01>2<>2<>3<>3<> <0E><0E><0E>N<EFBFBD> <13>K<EFBFBD>K<EFBFBD>0<><15>0<>0<> 1<> 1<> 1<><1F>)<29><1C>^<5E>,<2C>,<2C><0E><0E> <0E><>
<19> %<25> %<25> %<25> <12>L<EFBFBD>L<EFBFBD>3<><01>3<>3<> 4<> 4<> 4<><1B>S<EFBFBD><11>V<EFBFBD>V<EFBFBD>$<24> $<24> $<24> $<24> $<24> $<24> $<24><><EFBFBD><EFBFBD><EFBFBD> %<25><><EFBFBD>s<00>AA<00>
B <03>(-B<03>B <03>B <03> operation<6F> file_path<74>contentc<00><00>K<00> ddl}|dkrDt|dd<05><06><00>5}|<06><00><00>}ddd<02><00>n #1swxYwYd|dd<08>S|d krEt|d
d<05><06><00>5}|<06>|<03><00>ddd<02><00>n #1swxYwYdd |d <0B>S|d kr |j<00>|<02><00>}d||d <0A>Sdd|<01><00>iS#t $r8}t<00>d|<08><00><02><00>dt|<08><00>icYd}~Sd}~wwxYw)u文件操作工具rN<>read<61>rzutf-8)<01>encodingT)r?r<>r<><00>write<74>w)r?r<>r<><00>exists)r?r<>r<>r@u不支持的文件操作: u文件操作失败: )
<EFBFBD>os<6F>openr<6E>r<><00>pathr<68>rKr,r@rL) rr<>r<>r<>rpr<><00>fr<66>rNs rr*z ToolManager._file_operation_toolVs<><00><00><00><00> %<25> <15>I<EFBFBD>I<EFBFBD>I<EFBFBD><18>F<EFBFBD>"<22>"<22><19>)<29>S<EFBFBD>7<EFBFBD>;<3B>;<3B>;<3B>'<27>q<EFBFBD><1F>f<EFBFBD>f<EFBFBD>h<EFBFBD>h<EFBFBD>G<EFBFBD>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27>'<27><><EFBFBD><EFBFBD>'<27>'<27>'<27>'<27>#'<27>G<EFBFBD>&<26>Q<>Q<>Q<><1A>g<EFBFBD>%<25>%<25><19>)<29>S<EFBFBD>7<EFBFBD>;<3B>;<3B>;<3B>%<25>q<EFBFBD><15>G<EFBFBD>G<EFBFBD>G<EFBFBD>$<24>$<24>$<24>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25>%<25><><EFBFBD><EFBFBD>%<25>%<25>%<25>%<25>#'<27>g<EFBFBD>I<EFBFBD>V<>V<>V<><1A>h<EFBFBD>&<26>&<26><1B><17><1E><1E> <09>2<>2<><06>#'<27>6<EFBFBD> <09>R<>R<>R<> <20>!I<>i<EFBFBD>!I<>!I<>J<>J<><4A><18> %<25> %<25> %<25> <12>L<EFBFBD>L<EFBFBD>3<><01>3<>3<> 4<> 4<> 4<><1B>S<EFBFBD><11>V<EFBFBD>V<EFBFBD>$<24> $<24> $<24> $<24> $<24> $<24> $<24><><EFBFBD><EFBFBD><EFBFBD> %<25><><EFBFBD>su<00>C
<00>A<03> C
<00>A<07>C
<00>A<07> C
<00>C
<00>*B <03> C
<00> B<07>C
<00>B<07>C
<00>%C
<00>C
<00>
D <03>-D<03>D <03>D <03>select<63>
query_typec<00><00>K<00> ddlm}|<04><00><00>5}|dkrP|<05>|<01><00><00><00><00>}dd<05>|D<00><00>t |<06><00>d<06>cddd<07><00>S|<05>|<01><00>|<05><00><00>d|d<08>cddd<07><00>S#1swxYwYdS#t$r8}t<00> d |<07><00><02><00>d
t|<07><00>icYd}~Sd}~wwxYw) u数据库查询工具rk)<01>
db_managerr<EFBFBD>Tc<00>,<00>g|]}t|<01><00><00><02>SrE)<01>dict)r<><00>rows rr<>z4ToolManager._database_query_tool.<locals>.<listcomp>zs<00><00>"?<3F>"?<3F>"?<3F><13>4<EFBFBD><03>9<EFBFBD>9<EFBFBD>"?<3F>"?<3F>"?r)r?rBrcN)r?r<>u数据库查询失败: r@) <0B> core.databaser<65><00> get_session<6F>execute<74>fetchallr.<00>commitrKr,r@rL)rrhr<>rpr<><00>sessionrBrNs rr+z ToolManager._database_query_toolps<><00><00><00><00> %<25> 2<> 2<> 2<> 2<> 2<> 2<><1B>'<27>'<27>)<29>)<29> F<01>W<EFBFBD><1D><18>)<29>)<29>$<24>_<EFBFBD>_<EFBFBD>U<EFBFBD>3<>3<><<3C><<3C>><3E>><3E>F<EFBFBD>#'<27>"?<3F>"?<3F><06>"?<3F>"?<3F>"?<3F>!$<24>V<EFBFBD><1B><1B><16><16> F<01> F<01> F<01> F<01> F<01> F<01> F<01> F<01><1C>O<EFBFBD>O<EFBFBD>E<EFBFBD>*<2A>*<2A>*<2A><1B>N<EFBFBD>N<EFBFBD>$<24>$<24>$<24>'+<2B>*<2A>E<>E<> F<01> F<01> F<01> F<01> F<01> F<01> F<01> F<01> F<01> F<01> F<01> F<01><><EFBFBD><EFBFBD> F<01> F<01> F<01> F<01> F<01> F<01><><19> %<25> %<25> %<25> <12>L<EFBFBD>L<EFBFBD>6<>1<EFBFBD>6<>6<> 7<> 7<> 7<><1B>S<EFBFBD><11>V<EFBFBD>V<EFBFBD>$<24> $<24> $<24> $<24> $<24> $<24> $<24><><EFBFBD><EFBFBD><EFBFBD> %<25><><EFBFBD>sM<00>B<<00>A
B/<03>( B<<00>5-B/<03>" B<<00>/B3<07>3B<<00>6B3<07>7B<<00><
C><03>-C9<03>3C><03>9C>c<00><><00>t|j<00><00>iddddd<02>d<03>}|js|Sd}d}td<05><00>}d}|j<00><00><00>D]<5D>\}}||d|<|d|kr|d}||dd <|d
|kr|d
}||dd <|d |kr|d }||dd <|d |kr|d }||dd<<00><>|S)u获取工具性能报告N)<04> most_used<65> most_reliable<6C>fastest<73>slowest)<03> total_toolsrr<>r<00>infrrQr<>r<>r7r<>rTr<>r<>)r.r r<00>floatrX)r<00>report<72>most_used_count<6E>most_reliable_rate<74> fastest_time<6D> slowest_timer<rUs r<00>get_tool_performance_reportz'ToolManager.get_tool_performance_report<72>sO<00><00><1F>t<EFBFBD>z<EFBFBD>?<3F>?<3F> "<22>!<21>!%<25><1F><1F> <0E><0E> 
<EFBFBD> 
<EFBFBD><06><14>$<24> <1A><19>M<EFBFBD><1C><0F><1E><1A><1C>U<EFBFBD>|<7C>|<7C> <0C><18> <0C>#<23>4<>:<3A>:<3A><<3C><<3C> 9<> 9<>O<EFBFBD>I<EFBFBD>t<EFBFBD>48<34>F<EFBFBD>%<25> &<26>y<EFBFBD> 1<><14>&<26>'<27>/<2F>9<>9<>"&<26>'9<>":<3A><0F>1:<3A><06>y<EFBFBD>!<21>+<2B>.<2E><14>N<EFBFBD>#<23>&8<>8<>8<>%)<29>.<2E>%9<>"<22>5><3E><06>y<EFBFBD>!<21>/<2F>2<><14>(<28>)<29>L<EFBFBD>8<>8<>#<23>$8<>9<> <0C>/8<><06>y<EFBFBD>!<21>)<29>,<2C><14>(<28>)<29>L<EFBFBD>8<>8<>#<23>$8<>9<> <0C>/8<><06>y<EFBFBD>!<21>)<29>,<2C><><15> rr )rg)rr)r<>)r<>)r-)r<>)r<>)!<21>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__rrrLrrrrr!<00>boolr;rOr<>rJrr^r`rf<00>intr"r#r$r%r&r'r(r)r*r+r<>rErrr
r
sW<00><00><00><00><00><00><19><19>'<27>'<27>'<27> D<01>D<01>D<01>
-<2D>
-<2D>#<23>
-<2D>X<EFBFBD>
-<2D><18>$<24>s<EFBFBD>TW<54>x<EFBFBD>.<2E>AY<41>
-<2D>
-<2D>
-<2D>
-<2D><15>C<EFBFBD><15>D<EFBFBD><15><15><15><15>/<0E>C<EFBFBD>/<0E>T<EFBFBD>#<23>s<EFBFBD>(<28>^<5E>/<0E>PT<50>UX<55>Z]<5D>U]<5D>P^<5E>/<0E>/<0E>/<0E>/<0E>bE<01>#<23>E<01><04>E<01>V[<5B>E<01>E<01>E<01>E<01>0<1A>T<EFBFBD>$<24>s<EFBFBD>C<EFBFBD>x<EFBFBD>.<2E>%9<><1A><1A><1A><1A>2<14>s<EFBFBD><14>x<EFBFBD><04>S<EFBFBD>#<23>X<EFBFBD><0E>/G<><14><14><14><14>&N<01>T<EFBFBD>$<24>s<EFBFBD>C<EFBFBD>x<EFBFBD>.<2E>-A<>N<01>N<01>N<01>N<01>%<25>%<25>#<23>%<25>c<EFBFBD>%<25>TX<54>Y\<5C>^a<>Ya<59>Tb<54>%<25>%<25>%<25>%<25>" %<25> %<25>3<EFBFBD> %<25>S<EFBFBD> %<25>TW<54> %<25>cf<63> %<25>AE<02>FI<02>KN<02>FN<02>AO<02> %<25> %<25> %<25> %<25>%<25>3<EFBFBD>%<25>T<EFBFBD>RU<52>WZ<57>RZ<52>^<5E>%<25>%<25>%<25>%<25>" %<25> %<25>S<EFBFBD> %<25>3<EFBFBD> %<25>Z^<5E>_b<5F>dg<64>_g<5F>Zh<5A> %<25> %<25> %<25> %<25>%<25>%<25>#<23>%<25>3<EFBFBD>%<25>ei<65>jm<6A>or<6F>jr<6A>es<65>%<25>%<25>%<25>%<25>(%<25>%<25>S<EFBFBD>%<25>d<EFBFBD>3<EFBFBD>i<EFBFBD>%<25>dg<64>%<25>@D<02>EH<02>JM<02>EM<02>@N<02>%<25>%<25>%<25>%<25>2%<25>3<EFBFBD>%<25>s<EFBFBD>%<25>W[<5B>\_<>ad<61>\d<>We<57>%<25>tx<74>y|<7C>B<02>zB<02>uC<02>%<25>%<25>%<25>%<25>0%<25>%<25>C<EFBFBD>%<25>c<EFBFBD>%<25>TX<54>Y\<5C>^a<>Ya<59>Tb<54>%<25>%<25>%<25>%<25>4%<25>%<25>C<EFBFBD>%<25>C<EFBFBD>%<25>RU<52>%<25>im<69>nq<6E>sv<73>nv<6E>iw<69>%<25>%<25>%<25>%<25>4%<25>%<25><03>%<25><13>%<25>^b<>cf<63>hk<68>ck<63>^l<>%<25>%<25>%<25>%<25>,-<16>T<EFBFBD>#<23>s<EFBFBD>(<28>^<5E>-<16>-<16>-<16>-<16>-<16>-rr
)r<><00>loggingrG<00>typingrrrrrr<00>json<6F> getLoggerr<72>r,r
rErr<00><module>r<>s<><00><01><04><04>
<0F><0E><0E><0E><0E><0E><0E><0E>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<>6<><1D><1D><1D><1D><1D><1D> <0B> <0B> <0B> <0B> <1A><17> <1A>8<EFBFBD> $<24> $<24><06>c<16>c<16>c<16>c<16>c<16>c<16>c<16>c<16>c<16>cr