pycoze 0.1.387__py3-none-any.whl → 0.1.389__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.
- pycoze/api/lib/window.py +0 -1
- pycoze/bot/chat.py +14 -1
- pycoze/bot/chat_base.py +33 -23
- pycoze/bot/lib.py +0 -1
- {pycoze-0.1.387.dist-info → pycoze-0.1.389.dist-info}/METADATA +1 -1
- {pycoze-0.1.387.dist-info → pycoze-0.1.389.dist-info}/RECORD +9 -9
- {pycoze-0.1.387.dist-info → pycoze-0.1.389.dist-info}/LICENSE +0 -0
- {pycoze-0.1.387.dist-info → pycoze-0.1.389.dist-info}/WHEEL +0 -0
- {pycoze-0.1.387.dist-info → pycoze-0.1.389.dist-info}/top_level.txt +0 -0
pycoze/api/lib/window.py
CHANGED
pycoze/bot/chat.py
CHANGED
@@ -12,14 +12,27 @@ from pathlib import Path
|
|
12
12
|
|
13
13
|
|
14
14
|
def eclipse_tool_result(text, threshold=100):
|
15
|
+
if not isinstance(threshold, int) or threshold < 0:
|
16
|
+
return text
|
17
|
+
|
15
18
|
pattern = r'\[Tool Result Begin\](.*?)\[Tool Result End\]'
|
16
19
|
|
20
|
+
# 检查标签是否匹配
|
21
|
+
begin_count = text.count('[Tool Result Begin]')
|
22
|
+
end_count = text.count('[Tool Result End]')
|
23
|
+
if begin_count != end_count:
|
24
|
+
return text
|
25
|
+
|
17
26
|
def replace_match(match):
|
18
27
|
content = match.group(1)
|
28
|
+
# 检查嵌套标签
|
29
|
+
if '[Tool Result Begin]' in content or '[Tool Result End]' in content:
|
30
|
+
return match.group(0) # 返回原始匹配内容,不替换
|
31
|
+
|
19
32
|
if len(content) < threshold:
|
20
33
|
return match.group(0) # 返回原始匹配内容,不替换
|
21
34
|
else:
|
22
|
-
return
|
35
|
+
return "[Tool Result Begin]too long to remember...[Tool Result End]"
|
23
36
|
|
24
37
|
replaced_text = re.sub(pattern, replace_match, text, flags=re.DOTALL)
|
25
38
|
return replaced_text
|
pycoze/bot/chat_base.py
CHANGED
@@ -19,26 +19,34 @@ def guess_files_in_message(cwd: str, user_message: str) -> List[str]:
|
|
19
19
|
return []
|
20
20
|
|
21
21
|
|
22
|
-
def
|
22
|
+
def content_str(cwd, potential_paths, conversation_history):
|
23
|
+
content = []
|
24
|
+
for file_path in potential_paths:
|
25
|
+
file_path = resolve_relative_path(cwd, file_path)
|
26
|
+
if os.path.isfile(file_path):
|
27
|
+
file_marker = f"[[{file_path}]]'"
|
28
|
+
file_content = read_local_file(file_path)
|
29
|
+
if not any(
|
30
|
+
file_marker in msg["content"] for msg in conversation_history
|
31
|
+
):
|
32
|
+
content.append(f"{file_marker}\n{file_content}")
|
33
|
+
return (
|
34
|
+
"Partial contents of files are as follows:" + "\n".join(content)
|
35
|
+
if content
|
36
|
+
else ""
|
37
|
+
)
|
38
|
+
|
39
|
+
def user_task_prompt(conversation_history, cwd, user_input: str, programmer_mode: bool, opened_files: List[str]):
|
23
40
|
if programmer_mode:
|
24
41
|
potential_paths = guess_files_in_message(cwd, user_input)
|
25
42
|
|
26
43
|
exist_files = get_formatted_filelist_str(cwd, True, 200)
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
file_marker = f"[[{file_path}]]'"
|
32
|
-
file_content = read_local_file(file_path)
|
33
|
-
if not any(
|
34
|
-
file_marker in msg["content"] for msg in conversation_history
|
35
|
-
):
|
36
|
-
content.append(f"{file_marker}\n{file_content}")
|
37
|
-
content_str = (
|
38
|
-
"Partial contents of files are as follows:" + "\n".join(content)
|
39
|
-
if content
|
40
|
-
else ""
|
44
|
+
exist_files_str = f"Files in current directory:\n{exist_files}" if exist_files else ""
|
45
|
+
|
46
|
+
opened_files_str = (
|
47
|
+
f"Opened files:\n{'\n'.join(opened_files)}" if opened_files else ""
|
41
48
|
)
|
49
|
+
|
42
50
|
return f"""<task>
|
43
51
|
{user_input}
|
44
52
|
</task>
|
@@ -46,10 +54,11 @@ def user_task_prompt(conversation_history, cwd, user_input: str, programmer_mode
|
|
46
54
|
<environment_details>
|
47
55
|
Current working directory: {cwd}
|
48
56
|
|
49
|
-
|
50
|
-
{exist_files}
|
57
|
+
{exist_files_str}
|
51
58
|
|
52
|
-
{
|
59
|
+
{opened_files_str}
|
60
|
+
|
61
|
+
{content_str(cwd, potential_paths, conversation_history)}
|
53
62
|
|
54
63
|
</environment_details>
|
55
64
|
"""
|
@@ -144,6 +153,7 @@ async def handle_user_inputs(
|
|
144
153
|
no_exit_if_incomplete = bot_setting["systemAbility"]["no_exit_if_incomplete"]
|
145
154
|
programmer_mode = bot_setting["programmerMode"]
|
146
155
|
show_tool_results = bot_setting["showToolResults"]
|
156
|
+
opened_files = bot_setting["openedFiles"]
|
147
157
|
|
148
158
|
start_new_stream = {
|
149
159
|
"value": False
|
@@ -157,7 +167,7 @@ async def handle_user_inputs(
|
|
157
167
|
{
|
158
168
|
"role": "user",
|
159
169
|
"content": user_task_prompt(
|
160
|
-
conversation_history, cwd, user_input, programmer_mode
|
170
|
+
conversation_history, cwd, user_input, programmer_mode, opened_files
|
161
171
|
),
|
162
172
|
}
|
163
173
|
)
|
@@ -219,18 +229,18 @@ async def handle_user_inputs(
|
|
219
229
|
)
|
220
230
|
|
221
231
|
assistant_content = (
|
222
|
-
"Executing tool: "
|
232
|
+
"Executing tool: \n"
|
223
233
|
+ dumps_markdown_json(tool_request)
|
224
234
|
+ "\n\n[Tool Result Begin]\n"
|
225
235
|
+ result
|
226
236
|
+ "\n[Tool Result End]\n"
|
227
237
|
)
|
228
238
|
lang = "json" if is_json_dumps else "text"
|
229
|
-
|
239
|
+
|
230
240
|
if show_tool_results:
|
241
|
+
status_str = "✅\n" if ok else "❌\n"
|
231
242
|
info("assistant", status_str + f"\n```{lang}\n" + result + "\n```\n\n")
|
232
|
-
|
233
|
-
info("assistant", status_str)
|
243
|
+
|
234
244
|
conversation_history.append(
|
235
245
|
{"role": "assistant", "content": assistant_content}
|
236
246
|
)
|
pycoze/bot/lib.py
CHANGED
@@ -9,11 +9,11 @@ pycoze/api/lib/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
9
9
|
pycoze/api/lib/tab.py,sha256=DWO8ElI-VOODtIxqUFWaDB8VRrrFYAZRWivuIeD1wG0,2619
|
10
10
|
pycoze/api/lib/view.py,sha256=_PIpTfeuTPPlMDKshMGsqFQYMq7ZiO4Hg5XwHwDoU60,7357
|
11
11
|
pycoze/api/lib/web.py,sha256=GWgtiTJOolKOX2drXcwuyqTcbo5FQVxa1NuBGcNyjyc,223
|
12
|
-
pycoze/api/lib/window.py,sha256=
|
12
|
+
pycoze/api/lib/window.py,sha256=dkzWfLwn5pE_L0DfQ38K8nx9tQyT5KO-GYyXi0rytFc,2073
|
13
13
|
pycoze/bot/__init__.py,sha256=rL3Q-ycczRpSFfKn84fg3QBl5k22WpyeIU5qOEjEby8,79
|
14
|
-
pycoze/bot/chat.py,sha256=
|
15
|
-
pycoze/bot/chat_base.py,sha256=
|
16
|
-
pycoze/bot/lib.py,sha256=
|
14
|
+
pycoze/bot/chat.py,sha256=4RGMwg2TjFERd-4LTIpQ6ilaRx4eP566KaQma2jg2O4,6296
|
15
|
+
pycoze/bot/chat_base.py,sha256=wkmwulx35OWmiNPzwjJ84GitGRj0fCWdA6jkygIowRY,10011
|
16
|
+
pycoze/bot/lib.py,sha256=WMVhyKFXvNoLrS2wvNOakIJXyUmVE6ujCV6XVDV0M6A,7213
|
17
17
|
pycoze/bot/message.py,sha256=udnIi-h4QgGzkbr_5VcAsVGjoLp9wXJSfBCeuOz7_Bk,802
|
18
18
|
pycoze/bot/prompt.md,sha256=Km8GzmmC44HN0rnZh8txZxY52_0KWgyKh6GkjGQ3bCI,15379
|
19
19
|
pycoze/bot/tools.py,sha256=X5gpYbiRQZMvduhfXZy8VGYwjXGw5ndqbGHb-gXTQIE,10276
|
@@ -32,8 +32,8 @@ pycoze/utils/arg.py,sha256=jop1tBfe5hYkHW1NSpCeaZBEznkgguBscj_7M2dWfrs,503
|
|
32
32
|
pycoze/utils/env.py,sha256=5pWlXfM1F5ZU9hhv1rHlDEanjEW5wf0nbyez9bNRqqA,559
|
33
33
|
pycoze/utils/socket.py,sha256=bZbFFRH4mfThzRqt55BAAGQ6eICx_ja4x8UGGrUdAm8,2428
|
34
34
|
pycoze/utils/text_or_file.py,sha256=gpxZVWt2DW6YiEg_MnMuwg36VNf3TX383QD_1oZNB0Y,551
|
35
|
-
pycoze-0.1.
|
36
|
-
pycoze-0.1.
|
37
|
-
pycoze-0.1.
|
38
|
-
pycoze-0.1.
|
39
|
-
pycoze-0.1.
|
35
|
+
pycoze-0.1.389.dist-info/LICENSE,sha256=QStd_Qsd0-kAam_-sOesCIp_uKrGWeoKwt9M49NVkNU,1090
|
36
|
+
pycoze-0.1.389.dist-info/METADATA,sha256=saYtER2TJvFDoZVkRqJ8LyZr8skWikf0vq7ZRt5Myng,854
|
37
|
+
pycoze-0.1.389.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
38
|
+
pycoze-0.1.389.dist-info/top_level.txt,sha256=76dPeDhKvOCleL3ZC5gl1-y4vdS1tT_U1hxWVAn7sFo,7
|
39
|
+
pycoze-0.1.389.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|