patchpal 0.21.8__tar.gz → 0.22.1__tar.gz
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.
- {patchpal-0.21.8/patchpal.egg-info → patchpal-0.22.1}/PKG-INFO +1 -1
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/__init__.py +1 -1
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/agent/function_calling.py +4 -4
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/agent/react.py +2 -2
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/cli/mcp.py +1 -1
- patchpal-0.22.1/patchpal/cli/sandbox.py +1074 -0
- {patchpal-0.21.8 → patchpal-0.22.1/patchpal.egg-info}/PKG-INFO +1 -1
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_cli.py +1 -0
- patchpal-0.21.8/patchpal/cli/sandbox.py +0 -535
- {patchpal-0.21.8 → patchpal-0.22.1}/LICENSE +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/MANIFEST.in +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/README.md +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/agent/__init__.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/cli/__init__.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/cli/autopilot.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/cli/interactive.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/cli/streaming.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/config.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/context.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/permissions.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/prompts/react_prompt.md +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/prompts/system_prompt.md +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/skills.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/tools/__init__.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/tools/code_analysis.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/tools/common.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/tools/definitions.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/tools/file_reading.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/tools/file_writing.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/tools/find_tool.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/tools/grep_tool.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/tools/image_handler.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/tools/mcp.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/tools/repo_map.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/tools/shell_tools.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/tools/todo_tools.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/tools/tool_schema.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/tools/user_interaction.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal/tools/web_tools.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal.egg-info/SOURCES.txt +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal.egg-info/dependency_links.txt +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal.egg-info/entry_points.txt +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal.egg-info/requires.txt +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/patchpal.egg-info/top_level.txt +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/pyproject.toml +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/setup.cfg +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_agent.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_config_dynamic.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_context.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_custom_tools.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_enabled_tools.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_find_tool.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_guardrails.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_image_blocking.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_maximum_security.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_mcp_config.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_memory.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_operational_safety.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_optional_tools.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_permissions.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_react.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_reasoning_content.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_repo_map.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_simplified_prompt.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_skills.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_streaming.py +0 -0
- {patchpal-0.21.8 → patchpal-0.22.1}/tests/test_tools.py +0 -0
|
@@ -819,7 +819,7 @@ It's currently empty (just the template). The file is automatically loaded at se
|
|
|
819
819
|
|
|
820
820
|
except Exception as e:
|
|
821
821
|
# Compaction failed - warn but continue
|
|
822
|
-
print(f"\033[1;31m✗ Compaction failed: {e}\033[0m")
|
|
822
|
+
print(f"\033[1;31m✗ Compaction failed: {e}\033[0m\n", flush=True)
|
|
823
823
|
print(
|
|
824
824
|
"\033[1;33m Continuing without compaction. Consider starting a new session.\033[0m\n"
|
|
825
825
|
)
|
|
@@ -1203,7 +1203,7 @@ It's currently empty (just the template). The file is automatically loaded at se
|
|
|
1203
1203
|
tool_args = json.loads(tool_args_str)
|
|
1204
1204
|
except json.JSONDecodeError:
|
|
1205
1205
|
tool_result = f"Error: Invalid JSON arguments for {tool_name}"
|
|
1206
|
-
print(f"\033[1;31m✗ {tool_name}: Invalid arguments\033[0m")
|
|
1206
|
+
print(f"\033[1;31m✗ {tool_name}: Invalid arguments\033[0m\n", flush=True)
|
|
1207
1207
|
else:
|
|
1208
1208
|
# Get the tool function (check custom tools first, then built-in)
|
|
1209
1209
|
tool_func = self.custom_tool_funcs.get(tool_name) or TOOL_FUNCTIONS.get(
|
|
@@ -1211,7 +1211,7 @@ It's currently empty (just the template). The file is automatically loaded at se
|
|
|
1211
1211
|
)
|
|
1212
1212
|
if tool_func is None:
|
|
1213
1213
|
tool_result = f"Error: Unknown tool {tool_name}"
|
|
1214
|
-
print(f"\033[1;31m✗ Unknown tool: {tool_name}\033[0m")
|
|
1214
|
+
print(f"\033[1;31m✗ Unknown tool: {tool_name}\033[0m\n", flush=True)
|
|
1215
1215
|
else:
|
|
1216
1216
|
# Show tool call message
|
|
1217
1217
|
if tool_name in self.custom_tool_funcs:
|
|
@@ -1411,7 +1411,7 @@ It's currently empty (just the template). The file is automatically loaded at se
|
|
|
1411
1411
|
tool_result = tool_func(**filtered_args)
|
|
1412
1412
|
except Exception as e:
|
|
1413
1413
|
tool_result = f"Error executing {tool_name}: {e}"
|
|
1414
|
-
print(f"\033[1;31m✗ {tool_name}: {e}\033[0m")
|
|
1414
|
+
print(f"\033[1;31m✗ {tool_name}: {e}\033[0m\n", flush=True)
|
|
1415
1415
|
|
|
1416
1416
|
# Add tool result to messages
|
|
1417
1417
|
result_str = str(tool_result)
|
|
@@ -533,7 +533,7 @@ class ReActAgent:
|
|
|
533
533
|
tool_func = self.tool_functions.get(tool_name)
|
|
534
534
|
if tool_func is None:
|
|
535
535
|
error_msg = f"Error: Unknown tool '{tool_name}'"
|
|
536
|
-
print(f"\033[1;31m✗ {error_msg}\033[0m")
|
|
536
|
+
print(f"\033[1;31m✗ {error_msg}\033[0m\n", flush=True)
|
|
537
537
|
self.messages.append({"role": "user", "content": f"Observation: {error_msg}"})
|
|
538
538
|
continue
|
|
539
539
|
|
|
@@ -571,7 +571,7 @@ class ReActAgent:
|
|
|
571
571
|
|
|
572
572
|
except Exception as e:
|
|
573
573
|
tool_result = f"Error executing {tool_name}: {e}"
|
|
574
|
-
print(f"\033[1;31m✗ {tool_name}: {e}\033[0m")
|
|
574
|
+
print(f"\033[1;31m✗ {tool_name}: {e}\033[0m\n", flush=True)
|
|
575
575
|
|
|
576
576
|
# Check if operation was cancelled
|
|
577
577
|
if str(tool_result).strip() == "Operation cancelled by user.":
|