jarvis-ai-assistant 0.3.34__py3-none-any.whl → 0.4.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. jarvis/__init__.py +1 -1
  2. jarvis/jarvis_agent/__init__.py +44 -12
  3. jarvis/jarvis_agent/agent_manager.py +14 -10
  4. jarvis/jarvis_agent/config.py +2 -1
  5. jarvis/jarvis_agent/edit_file_handler.py +2 -2
  6. jarvis/jarvis_agent/jarvis.py +305 -1
  7. jarvis/jarvis_agent/rewrite_file_handler.py +143 -0
  8. jarvis/jarvis_agent/run_loop.py +5 -4
  9. jarvis/jarvis_agent/stdio_redirect.py +296 -0
  10. jarvis/jarvis_agent/utils.py +5 -1
  11. jarvis/jarvis_agent/web_bridge.py +189 -0
  12. jarvis/jarvis_agent/web_output_sink.py +53 -0
  13. jarvis/jarvis_agent/web_server.py +745 -0
  14. jarvis/jarvis_code_agent/code_agent.py +10 -12
  15. jarvis/jarvis_code_analysis/code_review.py +0 -1
  16. jarvis/jarvis_data/config_schema.json +5 -0
  17. jarvis/jarvis_multi_agent/__init__.py +205 -25
  18. jarvis/jarvis_multi_agent/main.py +10 -2
  19. jarvis/jarvis_platform/base.py +16 -6
  20. jarvis/jarvis_tools/sub_agent.py +11 -38
  21. jarvis/jarvis_tools/sub_code_agent.py +3 -1
  22. jarvis/jarvis_utils/config.py +12 -2
  23. {jarvis_ai_assistant-0.3.34.dist-info → jarvis_ai_assistant-0.4.1.dist-info}/METADATA +1 -1
  24. {jarvis_ai_assistant-0.3.34.dist-info → jarvis_ai_assistant-0.4.1.dist-info}/RECORD +28 -25
  25. jarvis/jarvis_tools/edit_file.py +0 -208
  26. jarvis/jarvis_tools/rewrite_file.py +0 -191
  27. {jarvis_ai_assistant-0.3.34.dist-info → jarvis_ai_assistant-0.4.1.dist-info}/WHEEL +0 -0
  28. {jarvis_ai_assistant-0.3.34.dist-info → jarvis_ai_assistant-0.4.1.dist-info}/entry_points.txt +0 -0
  29. {jarvis_ai_assistant-0.3.34.dist-info → jarvis_ai_assistant-0.4.1.dist-info}/licenses/LICENSE +0 -0
  30. {jarvis_ai_assistant-0.3.34.dist-info → jarvis_ai_assistant-0.4.1.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jarvis-ai-assistant
3
- Version: 0.3.34
3
+ Version: 0.4.1
4
4
  Summary: Jarvis: An AI assistant that uses tools to interact with the system
5
5
  Home-page: https://github.com/skyfireitdiy/Jarvis
6
6
  Author: skyfire
@@ -1,15 +1,15 @@
1
- jarvis/__init__.py,sha256=ox9PkCGjGlQ9QXXXe5Ew6Wz9Ko3PNyfVq7XzjTFuafU,74
2
- jarvis/jarvis_agent/__init__.py,sha256=KNSsotISHDThdLIX9VNAHtm_0fxyf9ZrjlKVxP0ZFCE,49176
3
- jarvis/jarvis_agent/agent_manager.py,sha256=ZjaSEqn7otkQ9Y7Yz8jPqUdDoKqmZ4zpSnYDl5fb8I0,3352
1
+ jarvis/__init__.py,sha256=AruQMrAiWbon9fxEdGwHgikJfqVwLLpY-3aXhycGePc,73
2
+ jarvis/jarvis_agent/__init__.py,sha256=NzMMY4H73aPvRAsK-1G7iNN8beEH1RCkkXK6A9NSAts,51029
3
+ jarvis/jarvis_agent/agent_manager.py,sha256=Q0S-mYTPt8Xd7RKGoLWoWU_RP_wEXFWxCjve8_t2f2A,3807
4
4
  jarvis/jarvis_agent/builtin_input_handler.py,sha256=wS-FqpT3pIXwHn1dfL3SpXonUKWgVThbQueUIeyRc2U,2917
5
- jarvis/jarvis_agent/config.py,sha256=7rSYmgx9hI-PnWA2PLjubOxAbH7_NEDmnDvy6iAnPbQ,3362
5
+ jarvis/jarvis_agent/config.py,sha256=f_VmSfdEtl4a32y-fVxhcZYkni4RznBAUKjv6kET1LU,3517
6
6
  jarvis/jarvis_agent/config_editor.py,sha256=hlb9EYxKWcR_qdW2O89CgNDdciR9Isi743JU_1gD8j4,1927
7
- jarvis/jarvis_agent/edit_file_handler.py,sha256=7xkEvlER6pNHtxyGad_ol23NeDGsYMunq4XmTAx86kw,24722
7
+ jarvis/jarvis_agent/edit_file_handler.py,sha256=8j7SRSWTw468fTuR-ueNKFK_0pR1GwDxTvsGGmm3zlA,24714
8
8
  jarvis/jarvis_agent/event_bus.py,sha256=pRdfk7d0OG18K6yNfWlCvAh_dW5p9sBtT2Yc3jGmzgo,1519
9
9
  jarvis/jarvis_agent/events.py,sha256=rmFQ37PasImCh7OCdCzNBvubk-kHwcUiYLgzmL0t0_4,3689
10
10
  jarvis/jarvis_agent/file_context_handler.py,sha256=2MPn_O_2llX39meFg272Cjk3wMPn5nmgbGMUyX06YQo,2113
11
11
  jarvis/jarvis_agent/file_methodology_manager.py,sha256=LnhgTx5xQXCBK8esjCkFbgFm9iEyFX7TryUlC40Kzpw,4428
12
- jarvis/jarvis_agent/jarvis.py,sha256=oONAMya0MeFWC7vGQ4NvC09JoAMwgIkHsMXBKiczSiY,32640
12
+ jarvis/jarvis_agent/jarvis.py,sha256=4HlG4Wfs0HRqLq3mLHx3kt5MV--yjLpAkK7KtIhskwQ,48591
13
13
  jarvis/jarvis_agent/main.py,sha256=IgS7d3rng2vFlu983OUeCkOAosKjFAn1sFCk3gT9J9Q,4563
14
14
  jarvis/jarvis_agent/memory_manager.py,sha256=WSyUffx9xTmkcj4QrSLEfsjI3sTMUwZmkkC9_N_gTjo,8042
15
15
  jarvis/jarvis_agent/methodology_share_manager.py,sha256=AB_J9BwRgaeENQfL6bH83FOLeLrgHhppMb7psJNevKs,6874
@@ -18,20 +18,25 @@ jarvis/jarvis_agent/prompt_builder.py,sha256=PH1fPDVa8z_RXkoXHJFNDf8PQjUoLNLYwkh
18
18
  jarvis/jarvis_agent/prompt_manager.py,sha256=_1qLBSA3yn4nT_N3X2npTpW40Cp-pMeyvnzu-pnG0iU,2720
19
19
  jarvis/jarvis_agent/prompts.py,sha256=CvbPYx_klEz6OQrxVReZAnC2uQNo53rWkkucmh30uKg,9531
20
20
  jarvis/jarvis_agent/protocols.py,sha256=YFJaC9MHi7JfLzmvlyotJDjiCO4Z07XJXy1gKhVdUy4,956
21
- jarvis/jarvis_agent/run_loop.py,sha256=OWdJSq1dLC6xPx4EQBfSnD_rb3IwszwZp4KbXYiJtcg,4747
21
+ jarvis/jarvis_agent/rewrite_file_handler.py,sha256=FVSrfrC115_cGvdPW9RIn3A-gQAhok7GyyBfnOFdpXs,5276
22
+ jarvis/jarvis_agent/run_loop.py,sha256=kxVwFdzhzP7ZY5_aWl4-HvoQtGr4eYr8SytzvJDEDnU,5006
22
23
  jarvis/jarvis_agent/session_manager.py,sha256=5wVcaZGwJ9cEKTQglSbqyxUDJ2fI5KxYN8C8L16UWLw,3024
23
24
  jarvis/jarvis_agent/share_manager.py,sha256=MF2RlomcgPxF8nVUk28DP6IRddZ_tot5l_YRvy0qXSQ,8726
24
25
  jarvis/jarvis_agent/shell_input_handler.py,sha256=wiAPjB-9uTkcLszbO5dlOUwIfaeR39RgRcZhahIGqoA,2018
26
+ jarvis/jarvis_agent/stdio_redirect.py,sha256=xqF-sENitpefCT3TA9oRwATFqbDrU2dvqM-UiMZRhbE,9944
25
27
  jarvis/jarvis_agent/task_analyzer.py,sha256=JXc-63hnTD7oSX-nIfRcgxqCMhh4fM4QYVc7C1gp--M,7813
26
28
  jarvis/jarvis_agent/task_manager.py,sha256=lme_aN8vaF_a4Tvv2kaSEnWATy8RPSjogTxeLnEYZdg,6504
27
29
  jarvis/jarvis_agent/tool_executor.py,sha256=k73cKhZEZpljvui4ZxALlFEIE-iLzJ32Softsmiwzqk,1896
28
30
  jarvis/jarvis_agent/tool_share_manager.py,sha256=Do08FRxis0ynwR2a6iRoa6Yq0qCP8NkuhMbPrimaxMA,5169
29
31
  jarvis/jarvis_agent/user_interaction.py,sha256=tifFN49GkO_Q80sqOTVmhxwbNWTazF3K0cr8AnnvzdU,1453
30
- jarvis/jarvis_agent/utils.py,sha256=ldgfuNTNu4JU7Y1LtystBl85OC6H3A4OMycg0XBt_Cs,1615
32
+ jarvis/jarvis_agent/utils.py,sha256=WJmKys_ceDALL73GdMCOgmjGHBzeRSPj7rmc8Pkrvzc,1784
33
+ jarvis/jarvis_agent/web_bridge.py,sha256=h15PXuPWWfZynWt8bPW4BDeCpIVoIOlRXfO0je6HDx4,6673
34
+ jarvis/jarvis_agent/web_output_sink.py,sha256=sZ6WbLZnuCdT5dS9d8msHY_g-pnj-dvML-I6uJ7-sbc,1733
35
+ jarvis/jarvis_agent/web_server.py,sha256=oZZy4nAOPhRWJn7K8VjBlho1F9AsvLEYiusKgipjO94,28204
31
36
  jarvis/jarvis_code_agent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- jarvis/jarvis_code_agent/code_agent.py,sha256=G5owx0sm9ge8rWpiiTw9vPRVmZ2fAV9chKoyVmvFpQ8,38101
37
+ jarvis/jarvis_code_agent/code_agent.py,sha256=UaYppteSUzwni-ZUDAKDrGTDijBrXU1Ia91OoLdfYLs,38072
33
38
  jarvis/jarvis_code_agent/lint.py,sha256=_qLJB_bC3PuoHG-j4EGOnYzNGO26jHlKLbkysfyQW1c,3954
34
- jarvis/jarvis_code_analysis/code_review.py,sha256=Z0JsvyVPPHPm6rfo4fqaQr7CdZKIllo9jqStzV0i_-o,34470
39
+ jarvis/jarvis_code_analysis/code_review.py,sha256=A3LaxFAlIH5qCfMajIr02ExG6YiolIVpjl9blsLh4SY,34402
35
40
  jarvis/jarvis_code_analysis/checklists/__init__.py,sha256=LIXAYa1sW3l7foP6kohLWnE98I_EQ0T7z5bYKHq6rJA,78
36
41
  jarvis/jarvis_code_analysis/checklists/c_cpp.py,sha256=9t62bMqs6qTkFSio4SKkj88qyb5ZubWrw3MxJBQ4X1A,1317
37
42
  jarvis/jarvis_code_analysis/checklists/csharp.py,sha256=ShPXrl2_UPAnGaCHAG2wLl90COG3HK2XCSr1UK2dxN4,2420
@@ -52,7 +57,7 @@ jarvis/jarvis_code_analysis/checklists/shell.py,sha256=aRFYhQQvTgbYd-uY5pc8UHIUA
52
57
  jarvis/jarvis_code_analysis/checklists/sql.py,sha256=vR0T6qC7b4dURjJVAd7kSVxyvZEQXPG1Jqc2sNTGp5c,2355
53
58
  jarvis/jarvis_code_analysis/checklists/swift.py,sha256=TPx4I6Gupvs6tSerRKmTSKEPQpOLEbH2Y7LXg1uBgxc,2566
54
59
  jarvis/jarvis_code_analysis/checklists/web.py,sha256=25gGD7pDadZQybNFvALYxWvK0VRjGQb1NVJQElwjyk0,3943
55
- jarvis/jarvis_data/config_schema.json,sha256=IlQ2u6lNvn1y31NNr544cUkH8GS9wQSbWJCiOlGjZMo,14497
60
+ jarvis/jarvis_data/config_schema.json,sha256=zfQni3t9KjfFd4gb6shJA0bqaVDSqBA72VMokMFQJ9c,14682
56
61
  jarvis/jarvis_data/tiktoken/9b5ad71b2ce5302211f9c61530b329a4922fc6a4,sha256=Ijkht27pm96ZW3_3OFE-7xAPtR0YyTWXoRO8_-hlsqc,1681126
57
62
  jarvis/jarvis_git_squash/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
63
  jarvis/jarvis_git_squash/main.py,sha256=BRbsEQVXwseVFKliVqV8_JPh1om6QT6dLTHw0jQ7OE0,2474
@@ -64,11 +69,11 @@ jarvis/jarvis_mcp/streamable_mcp_client.py,sha256=BenOeZGNHdUOJT5Z3cc5MhS6aOeKQg
64
69
  jarvis/jarvis_memory_organizer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
65
70
  jarvis/jarvis_memory_organizer/memory_organizer.py,sha256=CMFL46vvtpcTI6oS3CAlYteR6xAlwCkvVJmMT22uDRw,26295
66
71
  jarvis/jarvis_methodology/main.py,sha256=uiNzk5b5O6xdvRhsOuD7ubxdd2tPcDsFFnvmes8uH8I,11370
67
- jarvis/jarvis_multi_agent/__init__.py,sha256=fBWmW5S9gpEEYzCBJizyE2q0Jj2LUzj4yh7sfoe3Qrc,7170
68
- jarvis/jarvis_multi_agent/main.py,sha256=XXdZ9Gz2QrVaN5Rg45mUMI5K9dEJWBwr-wp4rSRQCIc,3002
72
+ jarvis/jarvis_multi_agent/__init__.py,sha256=Hr3AHSrxKGJjbq2r9wrK1eONiIn1Pu-4Q9rROLBW4HQ,15886
73
+ jarvis/jarvis_multi_agent/main.py,sha256=vqLzHesgQkpScVvbgOSyi6X7XoEDQYq3dJ9gZfGiPZw,3351
69
74
  jarvis/jarvis_platform/__init__.py,sha256=WLQHSiE87PPket2M50_hHzjdMIgPIBx2VF8JfB_NNRk,105
70
75
  jarvis/jarvis_platform/ai8.py,sha256=g8JkqPGs9SEbqstNMCc5rCHO0QcPHX9LNvb7HMWwB-Q,11471
71
- jarvis/jarvis_platform/base.py,sha256=NhhiAiACNsL462zljtGsG61SD8X-RRJyOAz1n1ocAPw,15947
76
+ jarvis/jarvis_platform/base.py,sha256=ngaQXMMHYYALrrq1Llk7WryjGR67tEtZzOTr6TQfp-k,16620
72
77
  jarvis/jarvis_platform/human.py,sha256=jWjW8prEag79e6ddqTPV4nz_Gz6zFBfO4a1EbvP8QWA,4908
73
78
  jarvis/jarvis_platform/kimi.py,sha256=KLsf9udAsPRMbQ2JkBeiAlXkupCBwdtMaJ-hpH4Jdkc,15711
74
79
  jarvis/jarvis_platform/openai.py,sha256=4YapmkmJmPGfrjktORcIejlB98b83Wsi_48zjBymHAc,9500
@@ -98,7 +103,6 @@ jarvis/jarvis_tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
98
103
  jarvis/jarvis_tools/ask_user.py,sha256=M6DdLNryCE8y1JcdZHEifUgZkPUEPNKc-zDW5p0Mb1k,2029
99
104
  jarvis/jarvis_tools/base.py,sha256=tFZkRlbV_a-pbjM-ci9AYmXVJm__FXuzVWKbQEyz4Ao,1639
100
105
  jarvis/jarvis_tools/clear_memory.py,sha256=8DOq6dHLemfKTJqu227PWBIp8Iu5K7EXwINzL8DYk8M,8205
101
- jarvis/jarvis_tools/edit_file.py,sha256=UcJNTVCDEmRaQsN_7_Ip2LjrTDm4wWzj2deuZHiBvLI,9026
102
106
  jarvis/jarvis_tools/execute_script.py,sha256=kjl-c6OmQPEeGqEjbuEGoGhb2nAiQoYzz2_2_Y3tIlY,8277
103
107
  jarvis/jarvis_tools/file_analyzer.py,sha256=jzVb8fAJn3dWwpCiYH-Wuxva4kpHqBB2_V3x3mzY0Gs,4158
104
108
  jarvis/jarvis_tools/generate_new_tool.py,sha256=tJz0YtfDwyH9y00VEWw3Btqr9JCNhvtI8BN9i5hYk_M,8560
@@ -107,18 +111,17 @@ jarvis/jarvis_tools/read_code.py,sha256=F1RuO0c69t0h7CvrUGqrTyNcOCcUrFQPACc61O_Y
107
111
  jarvis/jarvis_tools/read_webpage.py,sha256=dfyXJ9vaX-ZRbua1P5ZlaU_SlSzKkeNw-1kI_3-gxFE,5433
108
112
  jarvis/jarvis_tools/registry.py,sha256=yVXBrJ7plyn7Dr3dD6mPmgd6eiBftmd19Cc84-PwVN8,33312
109
113
  jarvis/jarvis_tools/retrieve_memory.py,sha256=hhhGSr7jebPHICY9oEKICyI8mfqsRtKjh58qZNZApKc,8624
110
- jarvis/jarvis_tools/rewrite_file.py,sha256=CuvjWPTbUaPbex9FKSmw_Ru4r6R-CX_3vqTqCTp8nHA,6959
111
114
  jarvis/jarvis_tools/save_memory.py,sha256=RQtNxcpU53FFv_EBjH0i0oyQ7jWubm-trD1BHuqaGjI,6985
112
115
  jarvis/jarvis_tools/search_web.py,sha256=Hi8WBxcRH02qjOF1qcJP2qSqs3kVOKGFAARfh548Ii4,6370
113
- jarvis/jarvis_tools/sub_agent.py,sha256=kjMZBXQE3OUgm5eO9lNkOuBnugWQGZbCpVP0HNW5W2s,8905
114
- jarvis/jarvis_tools/sub_code_agent.py,sha256=vVPcGKfgyhbZzl8vp2HHbgR1oQzC0TlS0G3THoZgU5Q,9453
116
+ jarvis/jarvis_tools/sub_agent.py,sha256=Qjr5Ikul0gmtwGehCjy1yOSsbwE9hWiGQvwrOWPef_g,8028
117
+ jarvis/jarvis_tools/sub_code_agent.py,sha256=KpwTCU89kq_RGNpfyA1C0bTl-f0dTvsCyDKplU-hrds,9600
115
118
  jarvis/jarvis_tools/virtual_tty.py,sha256=L7-J00ARQvIa25T45Hhqg2eCBl6W2LFgqDlWMWf-7dk,25275
116
119
  jarvis/jarvis_tools/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
117
120
  jarvis/jarvis_tools/cli/main.py,sha256=WL2GNV7WqYl7G1-btRGvCkzDCMk4fPfNvzCrnUFVPxs,9323
118
121
  jarvis/jarvis_utils/__init__.py,sha256=67h0ldisGlh3oK4DAeNEL2Bl_VsI3tSmfclasyVlueM,850
119
122
  jarvis/jarvis_utils/builtin_replace_map.py,sha256=z8iAqsbZUiGFaozxG1xSu128op8udqHOeEw-GxNt4bU,1708
120
123
  jarvis/jarvis_utils/clipboard.py,sha256=D3wzQeqg_yiH7Axs4d6MRxyNa9XxdnenH-ND2uj2WVQ,2967
121
- jarvis/jarvis_utils/config.py,sha256=w_TWfEBabnTgQxJ2CWuP6V36Q1inOwMZLcJRziqV2t4,22363
124
+ jarvis/jarvis_utils/config.py,sha256=Pk-ddQELZ5-vJgRdkwrBbstJJghhGsD_5BtNk5-UO3k,22638
122
125
  jarvis/jarvis_utils/embedding.py,sha256=x6mrkL7Bc3qgfuBDsjc4fg4nKG8ofGxVLVVydbsb8PY,2838
123
126
  jarvis/jarvis_utils/file_processors.py,sha256=XiM248SHS7lLgQDCbORVFWqinbVDUawYxWDOsLXDxP8,3043
124
127
  jarvis/jarvis_utils/fzf.py,sha256=vCs0Uh5dUqGbWzXn2JCtLLCOYE2B39ZNdNveR9PK4DA,1681
@@ -130,9 +133,9 @@ jarvis/jarvis_utils/methodology.py,sha256=z_renvRGgHiC-XTQPuN6rvrJ_ffHlwxK_b1BU_
130
133
  jarvis/jarvis_utils/output.py,sha256=y2fVcao_2ZowFl0IxUrJZCi8T6ZM0z-iPzpk8T8eLxc,13623
131
134
  jarvis/jarvis_utils/tag.py,sha256=f211opbbbTcSyzCDwuIK_oCnKhXPNK-RknYyGzY1yD0,431
132
135
  jarvis/jarvis_utils/utils.py,sha256=uMtfaStxDtp2i9AFIxwtPKgSxLwQxw8Z2rXsX-ZGlis,72728
133
- jarvis_ai_assistant-0.3.34.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
134
- jarvis_ai_assistant-0.3.34.dist-info/METADATA,sha256=fmIYdg00CuxGJa4bjpaRU28NaMonvmku6NTcAQAFymI,18752
135
- jarvis_ai_assistant-0.3.34.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
136
- jarvis_ai_assistant-0.3.34.dist-info/entry_points.txt,sha256=4GcWKFxRJD-QU14gw_3ZaW4KuEVxOcZK9i270rwPdjA,1395
137
- jarvis_ai_assistant-0.3.34.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
138
- jarvis_ai_assistant-0.3.34.dist-info/RECORD,,
136
+ jarvis_ai_assistant-0.4.1.dist-info/licenses/LICENSE,sha256=AGgVgQmTqFvaztRtCAXsAMryUymB18gZif7_l2e1XOg,1063
137
+ jarvis_ai_assistant-0.4.1.dist-info/METADATA,sha256=DR0N8vMawLJe7n5NdIYeeuE-cFC2xBqxXiBvVcUT148,18751
138
+ jarvis_ai_assistant-0.4.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
139
+ jarvis_ai_assistant-0.4.1.dist-info/entry_points.txt,sha256=4GcWKFxRJD-QU14gw_3ZaW4KuEVxOcZK9i270rwPdjA,1395
140
+ jarvis_ai_assistant-0.4.1.dist-info/top_level.txt,sha256=1BOxyWfzOP_ZXj8rVTDnNCJ92bBGB0rwq8N1PCpoMIs,7
141
+ jarvis_ai_assistant-0.4.1.dist-info/RECORD,,
@@ -1,208 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- """
3
- 文件编辑工具类
4
-
5
- 功能概述:
6
- 1. 提供精确的文件内容搜索和替换功能,支持多组修改
7
- 2. 支持单个文件的编辑操作,包括创建新文件
8
- 3. 实现原子操作:所有修改要么全部成功,要么全部回滚
9
- 4. 严格匹配控制:每个搜索文本必须且只能匹配一次
10
-
11
- 核心特性:
12
- - 支持不存在的文件和空文件处理
13
- - 自动创建所需目录结构
14
- - 完善的错误处理和回滚机制
15
- - 严格的格式保持要求
16
- """
17
- from typing import Any, Dict, List
18
-
19
- from jarvis.jarvis_agent.edit_file_handler import EditFileHandler
20
-
21
-
22
- class FileSearchReplaceTool:
23
- name = "edit_file"
24
- description = """代码编辑工具,用于精确修改一个或多个文件
25
-
26
- # 文件编辑工具使用指南
27
-
28
- ## 基本使用
29
- 1. 指定需要修改的文件路径(单个或多个)
30
- 2. 提供一组或多组修改,每个修改支持两种格式:
31
- - 单点替换:
32
- - reason: 修改原因描述
33
- - SEARCH: 需要查找的原始代码(必须包含足够上下文)
34
- - REPLACE: 替换后的新代码
35
- - 区间替换:
36
- - reason: 修改原因描述
37
- - SEARCH_START: 起始标记
38
- - SEARCH_END: 结束标记
39
- - REPLACE: 替换后的新代码
40
- - RANGE: 可选的行号范围 'start-end' (1-based, 闭区间), 用于限定匹配范围
41
- - **说明**: 区间替换会从包含 SEARCH_START 的行首开始,到包含 SEARCH_END 的行尾结束,替换整个区域
42
-
43
- ## 核心原则
44
- 1. **精准修改**: 只修改必要的代码部分,保持其他部分不变
45
- 2. **最小补丁原则**: 生成最小范围的补丁,包含必要的上下文
46
- 3. **唯一匹配**:
47
- - 单点替换:确保 SEARCH 在文件中唯一匹配
48
- - 区间替换:确保在指定范围内,第一个 SEARCH_START 之后能找到 SEARCH_END
49
- 4. **格式保持**: 严格保持原始代码的格式风格
50
- 5. **部分成功**: 支持多个文件编辑,允许部分文件编辑成功
51
-
52
- """
53
- parameters = {
54
- "type": "object",
55
- "properties": {
56
- "files": {
57
- "type": "array",
58
- "description": "需要修改的文件路径列表",
59
- "items": {
60
- "type": "object",
61
- "properties": {
62
- "path": {"type": "string", "description": "文件路径"},
63
- "changes": {
64
- "type": "array",
65
- "description": "一组或多组修改,每个修改必须包含1-2行上下文用于精确定位",
66
- "items": {
67
- "type": "object",
68
- "properties": {
69
- "reason": {
70
- "type": "string",
71
- "description": "修改的原因",
72
- },
73
- "SEARCH": {
74
- "type": "string",
75
- "description": "需要查找的原始代码(单点替换模式)",
76
- },
77
- "SEARCH_START": {
78
- "type": "string",
79
- "description": "区间替换的起始标记(包含在替换范围内)",
80
- },
81
- "SEARCH_END": {
82
- "type": "string",
83
- "description": "区间替换的结束标记(包含在替换范围内)",
84
- },
85
- "REPLACE": {
86
- "type": "string",
87
- "description": "替换后的新代码",
88
- },
89
- "RANGE": {
90
- "type": "string",
91
- "description": "行号范围 'start-end'(1-based,闭区间),可选,仅用于区间替换模式,用于限定匹配与替换的行号范围",
92
- },
93
- },
94
- },
95
- },
96
- },
97
- "required": ["path", "changes"],
98
- },
99
- },
100
- },
101
- "required": ["files"],
102
- }
103
-
104
- def execute(self, args: Dict) -> Dict[str, Any]:
105
- """执行文件编辑操作,支持快速编辑和AI辅助编辑两种模式。
106
-
107
- 主要功能:
108
- 1. 处理多个文件的创建或修改,支持不存在的文件
109
- 2. 每个文件独立处理,允许部分文件编辑成功
110
- 3. 自动选择编辑模式(fast_edit或slow_edit)
111
- 4. 保存修改前后的文件状态以便回滚
112
- 5. 提供详细的执行状态输出
113
-
114
- 参数:
115
- args: 包含以下键的字典:
116
- - files: 文件列表,每个文件包含(必填):
117
- - path: 要修改的文件路径
118
- - changes: 修改列表,每个修改支持两种格式:
119
- 1) 单点替换:
120
- - reason: 修改原因描述
121
- - SEARCH: 需要查找的原始代码(必须包含足够上下文)
122
- - REPLACE: 替换后的新代码
123
- 2) 区间替换:
124
- - reason: 修改原因描述
125
- - SEARCH_START: 起始标记
126
- - SEARCH_END: 结束标记
127
- - REPLACE: 替换后的新代码
128
- - **说明**: 区间替换会从包含 SEARCH_START 的行首开始,到包含 SEARCH_END 的行尾结束,替换整个区域
129
-
130
- 返回:
131
- Dict[str, Any] 包含:
132
- - success: 是否至少有一个文件编辑成功(True/False)
133
- - stdout: 成功时的输出消息
134
- - stderr: 失败时的错误消息
135
- - results: 每个文件的处理结果列表
136
-
137
- 异常处理:
138
- 1. 捕获并记录文件操作异常
139
- 2. 失败的修改尝试回滚到原始状态
140
- 3. 新创建的文件在失败时会被删除
141
- 4. 提供3次重试机制确保操作可靠性
142
- 5. 支持大文件处理(自动上传到模型平台)
143
-
144
- 实现细节:
145
- 1. 优先尝试fast_edit模式
146
- 2. 如果fast_edit失败,则尝试slow_edit模式
147
- 3. 严格检查搜索文本的唯一匹配性
148
- 4. 保持原始代码的格式风格
149
- """
150
- import os
151
-
152
- from jarvis.jarvis_utils.output import OutputType, PrettyOutput
153
-
154
- stdout_messages: List[str] = []
155
- overall_success = False
156
- file_results = []
157
-
158
- for file_info in args["files"]:
159
- file_path = os.path.abspath(file_info["path"])
160
- changes = file_info["changes"]
161
-
162
- try:
163
- success, result = EditFileHandler._fast_edit(file_path, changes)
164
- if success:
165
- stdout_message = f"文件 {file_path} 修改完成"
166
- stdout_messages.append(stdout_message)
167
- overall_success = True
168
- file_results.append(
169
- {
170
- "file": file_path,
171
- "success": True,
172
- "stdout": stdout_message,
173
- "stderr": "",
174
- }
175
- )
176
- else:
177
- PrettyOutput.print(f"文件 {file_path} 处理失败", OutputType.ERROR)
178
- file_results.append(
179
- {
180
- "file": file_path,
181
- "success": False,
182
- "stdout": "",
183
- "stderr": result,
184
- }
185
- )
186
- except Exception as e:
187
- error_msg = f"文件搜索替换操作失败: {str(e)}"
188
- PrettyOutput.print(error_msg, OutputType.WARNING)
189
- file_results.append(
190
- {
191
- "file": file_path,
192
- "success": False,
193
- "stdout": "",
194
- "stderr": error_msg,
195
- }
196
- )
197
-
198
- # 整合所有错误信息到stderr
199
- all_stderr: List[str] = []
200
- for file_result in file_results:
201
- if not file_result["success"]:
202
- all_stderr.append(f"文件 {file_result['file']} 处理失败: {file_result['stderr']}")
203
-
204
- return {
205
- "success": overall_success,
206
- "stdout": "\n".join(stdout_messages) if overall_success else "",
207
- "stderr": "\n".join(all_stderr) if not overall_success else "",
208
- }
@@ -1,191 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- """
3
- 文件重写工具类
4
-
5
- 功能概述:
6
- 1. 提供完整的文件重写功能
7
- 2. 支持创建新文件或完全重写现有文件
8
- 3. 实现原子操作:所有修改要么全部成功,要么全部回滚
9
- 4. 自动创建所需目录结构
10
-
11
- 核心特性:
12
- - 支持不存在的文件和空文件处理
13
- - 自动创建所需目录结构
14
- - 完善的错误处理和回滚机制
15
- - 保持文件格式和编码
16
- """
17
- from typing import Any, Dict
18
-
19
-
20
- class FileRewriteTool:
21
- name = "rewrite_file"
22
- description = """文件重写工具,用于完全重写或创建文件
23
-
24
- # 文件重写规范
25
-
26
- ## 重要提示
27
- 此工具用于完全重写文件内容或创建新文件。与edit_file不同,此工具会替换文件的全部内容。
28
-
29
- ## 基本使用
30
- 1. 指定需要重写的文件路径
31
- 2. 提供新的文件内容
32
- 3. 所有操作要么全部成功,要么全部失败并回滚
33
-
34
- ## 核心原则
35
- 1. **完整重写**:提供完整的文件内容,将替换原文件的所有内容
36
- 2. **格式保持**:
37
- - 保持原始代码的缩进方式(空格或制表符)
38
- - 保持原始代码的空行数量和位置
39
- - 保持原始代码的行尾空格处理方式
40
- - 不改变原始代码的换行风格
41
-
42
- ## 最佳实践
43
- 1. 确保提供格式良好的完整文件内容
44
- 2. 创建新文件时提供完整、格式良好的内容
45
- 3. 不要出现未实现的代码,如:TODO
46
- """
47
- parameters = {
48
- "type": "object",
49
- "properties": {
50
- "file": {"type": "string", "description": "需要重写的文件路径"},
51
- "content": {
52
- "type": "string",
53
- "description": "新的文件内容,将完全替换原文件内容",
54
- },
55
- },
56
- "required": ["file", "content"],
57
- }
58
-
59
- def __init__(self):
60
- """初始化文件重写工具"""
61
- pass
62
-
63
- def execute(self, args: Dict) -> Dict[str, Any]:
64
- """
65
- 执行文件重写操作,完全替换文件内容
66
-
67
- 参数:
68
- file (str): 文件路径
69
- content (str): 新的文件内容
70
-
71
- 返回:
72
- dict: 包含执行结果的字典
73
- {
74
- "success": bool, # 是否成功完成重写
75
- "stdout": str, # 标准输出信息
76
- "stderr": str # 错误信息
77
- }
78
- """
79
- import os
80
-
81
- from jarvis.jarvis_utils.output import OutputType, PrettyOutput
82
-
83
- stdout_messages = []
84
- stderr_messages = []
85
- success = True
86
-
87
- file_path = args["file"]
88
- new_content = args["content"]
89
- agent = args.get("agent", None)
90
- abs_path = os.path.abspath(file_path)
91
-
92
- # 创建已处理文件变量,用于失败时回滚
93
- original_content = None
94
- processed = False
95
-
96
- try:
97
- file_exists = os.path.exists(file_path)
98
-
99
- try:
100
- # 如果文件存在,则读取原内容用于回滚
101
- if file_exists:
102
- with open(abs_path, "r", encoding="utf-8") as f:
103
- original_content = f.read()
104
-
105
- # 确保目录存在
106
- os.makedirs(os.path.dirname(abs_path), exist_ok=True)
107
-
108
- # 写入新内容
109
- with open(abs_path, "w", encoding="utf-8") as f:
110
- f.write(new_content)
111
-
112
- processed = True
113
-
114
- action = "创建并写入" if not file_exists else "成功重写"
115
- stdout_message = f"文件 {abs_path} {action}"
116
- stdout_messages.append(stdout_message)
117
-
118
- except Exception as e:
119
- stderr_message = f"处理文件 {file_path} 时出错: {str(e)}"
120
- stderr_messages.append(stderr_message)
121
- PrettyOutput.print(stderr_message, OutputType.WARNING)
122
- success = False
123
-
124
- # 如果操作失败,回滚已修改的文件
125
- if not success and processed:
126
- rollback_message = "操作失败,正在回滚修改..."
127
- stderr_messages.append(rollback_message)
128
-
129
- try:
130
- if original_content is None:
131
- # 如果是新创建的文件,则删除
132
- if os.path.exists(abs_path):
133
- os.remove(abs_path)
134
- rollback_file_message = f"已删除新创建的文件: {abs_path}"
135
- else:
136
- # 如果是修改的文件,则恢复原内容
137
- with open(abs_path, "w", encoding="utf-8") as f:
138
- f.write(original_content)
139
- rollback_file_message = f"已回滚文件: {abs_path}"
140
-
141
- stderr_messages.append(rollback_file_message)
142
- except Exception as e:
143
- rollback_error = f"回滚文件 {file_path} 失败: {str(e)}"
144
- stderr_messages.append(rollback_error)
145
- PrettyOutput.print(rollback_error, OutputType.WARNING)
146
-
147
- # 记录成功处理的文件(使用绝对路径)
148
- if success and agent:
149
- abs_path = os.path.abspath(file_path)
150
- files = agent.get_user_data("files")
151
- if files:
152
- if abs_path not in files:
153
- files.append(abs_path)
154
- else:
155
- files = [abs_path]
156
- agent.set_user_data("files", files)
157
-
158
- return {
159
- "success": success,
160
- "stdout": "\n".join(stdout_messages),
161
- "stderr": "\n".join(stderr_messages),
162
- }
163
-
164
- except Exception as e:
165
- error_msg = f"文件重写操作失败: {str(e)}"
166
- PrettyOutput.print(error_msg, OutputType.WARNING)
167
-
168
- # 如果有已修改的文件,尝试回滚
169
- if processed:
170
- rollback_message = "操作失败,正在回滚修改..."
171
- stderr_messages.append(rollback_message)
172
-
173
- try:
174
- if original_content is None:
175
- # 如果是新创建的文件,则删除
176
- if os.path.exists(file_path):
177
- os.remove(file_path)
178
- stderr_messages.append(f"已删除新创建的文件: {file_path}")
179
- else:
180
- # 如果是修改的文件,则恢复原内容
181
- with open(file_path, "w", encoding="utf-8") as f:
182
- f.write(original_content)
183
- stderr_messages.append(f"已回滚文件: {file_path}")
184
- except:
185
- stderr_messages.append(f"回滚文件失败: {file_path}")
186
-
187
- return {
188
- "success": False,
189
- "stdout": "",
190
- "stderr": error_msg + "\n" + "\n".join(stderr_messages),
191
- }