patchpal 0.21.2__tar.gz → 0.21.3__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.
Files changed (66) hide show
  1. {patchpal-0.21.2/patchpal.egg-info → patchpal-0.21.3}/PKG-INFO +27 -1
  2. {patchpal-0.21.2 → patchpal-0.21.3}/README.md +26 -0
  3. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/__init__.py +1 -1
  4. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/cli/sandbox.py +16 -6
  5. {patchpal-0.21.2 → patchpal-0.21.3/patchpal.egg-info}/PKG-INFO +27 -1
  6. {patchpal-0.21.2 → patchpal-0.21.3}/LICENSE +0 -0
  7. {patchpal-0.21.2 → patchpal-0.21.3}/MANIFEST.in +0 -0
  8. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/agent/__init__.py +0 -0
  9. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/agent/function_calling.py +0 -0
  10. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/agent/react.py +0 -0
  11. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/cli/__init__.py +0 -0
  12. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/cli/autopilot.py +0 -0
  13. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/cli/interactive.py +0 -0
  14. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/cli/mcp.py +0 -0
  15. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/cli/streaming.py +0 -0
  16. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/config.py +0 -0
  17. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/context.py +0 -0
  18. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/permissions.py +0 -0
  19. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/prompts/react_prompt.md +0 -0
  20. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/prompts/system_prompt.md +0 -0
  21. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/skills.py +0 -0
  22. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/tools/__init__.py +0 -0
  23. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/tools/code_analysis.py +0 -0
  24. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/tools/common.py +0 -0
  25. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/tools/definitions.py +0 -0
  26. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/tools/file_reading.py +0 -0
  27. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/tools/file_writing.py +0 -0
  28. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/tools/find_tool.py +0 -0
  29. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/tools/grep_tool.py +0 -0
  30. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/tools/image_handler.py +0 -0
  31. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/tools/mcp.py +0 -0
  32. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/tools/repo_map.py +0 -0
  33. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/tools/shell_tools.py +0 -0
  34. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/tools/todo_tools.py +0 -0
  35. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/tools/tool_schema.py +0 -0
  36. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/tools/user_interaction.py +0 -0
  37. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal/tools/web_tools.py +0 -0
  38. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal.egg-info/SOURCES.txt +0 -0
  39. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal.egg-info/dependency_links.txt +0 -0
  40. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal.egg-info/entry_points.txt +0 -0
  41. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal.egg-info/requires.txt +0 -0
  42. {patchpal-0.21.2 → patchpal-0.21.3}/patchpal.egg-info/top_level.txt +0 -0
  43. {patchpal-0.21.2 → patchpal-0.21.3}/pyproject.toml +0 -0
  44. {patchpal-0.21.2 → patchpal-0.21.3}/setup.cfg +0 -0
  45. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_agent.py +0 -0
  46. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_cli.py +0 -0
  47. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_config_dynamic.py +0 -0
  48. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_context.py +0 -0
  49. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_custom_tools.py +0 -0
  50. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_enabled_tools.py +0 -0
  51. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_find_tool.py +0 -0
  52. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_guardrails.py +0 -0
  53. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_image_blocking.py +0 -0
  54. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_maximum_security.py +0 -0
  55. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_mcp_config.py +0 -0
  56. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_memory.py +0 -0
  57. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_operational_safety.py +0 -0
  58. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_optional_tools.py +0 -0
  59. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_permissions.py +0 -0
  60. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_react.py +0 -0
  61. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_reasoning_content.py +0 -0
  62. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_repo_map.py +0 -0
  63. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_simplified_prompt.py +0 -0
  64. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_skills.py +0 -0
  65. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_streaming.py +0 -0
  66. {patchpal-0.21.2 → patchpal-0.21.3}/tests/test_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: patchpal
3
- Version: 0.21.2
3
+ Version: 0.21.3
4
4
  Summary: An agentic coding and automation assistant, supporting both local and cloud LLMs
5
5
  Author: PatchPal Contributors
6
6
  License-Expression: Apache-2.0
@@ -79,6 +79,32 @@ $ patchpal # start
79
79
 
80
80
  > Platform support: Linux, macOS, and Windows are all supported
81
81
 
82
+ **Alternative: Run with Docker/Podman (no installation required)**
83
+
84
+ ```bash
85
+ # Using pre-built image with patchpal installed (default model)
86
+ docker run -it --rm \
87
+ -v $(pwd):/workspace \
88
+ -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \
89
+ ghcr.io/amaiya/patchpal-sandbox:latest \
90
+ patchpal
91
+
92
+ # Or with Podman
93
+ podman run -it --rm \
94
+ -v $(pwd):/workspace \
95
+ -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \
96
+ ghcr.io/amaiya/patchpal-sandbox:latest \
97
+ patchpal
98
+
99
+ # Specify a different model with --model
100
+ docker run -it --rm \
101
+ -v $(pwd):/workspace \
102
+ -e OPENAI_API_KEY=$OPENAI_API_KEY \
103
+ ghcr.io/amaiya/patchpal-sandbox:latest \
104
+ patchpal --model openai/gpt-5-mini
105
+ ```
106
+
107
+
82
108
  ## Setup
83
109
  0. **Install**: `pip install patchpal`
84
110
  1. **Get an API key or a Local LLM Engine**:
@@ -30,6 +30,32 @@ $ patchpal # start
30
30
 
31
31
  > Platform support: Linux, macOS, and Windows are all supported
32
32
 
33
+ **Alternative: Run with Docker/Podman (no installation required)**
34
+
35
+ ```bash
36
+ # Using pre-built image with patchpal installed (default model)
37
+ docker run -it --rm \
38
+ -v $(pwd):/workspace \
39
+ -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \
40
+ ghcr.io/amaiya/patchpal-sandbox:latest \
41
+ patchpal
42
+
43
+ # Or with Podman
44
+ podman run -it --rm \
45
+ -v $(pwd):/workspace \
46
+ -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \
47
+ ghcr.io/amaiya/patchpal-sandbox:latest \
48
+ patchpal
49
+
50
+ # Specify a different model with --model
51
+ docker run -it --rm \
52
+ -v $(pwd):/workspace \
53
+ -e OPENAI_API_KEY=$OPENAI_API_KEY \
54
+ ghcr.io/amaiya/patchpal-sandbox:latest \
55
+ patchpal --model openai/gpt-5-mini
56
+ ```
57
+
58
+
33
59
  ## Setup
34
60
  0. **Install**: `pip install patchpal`
35
61
  1. **Get an API key or a Local LLM Engine**:
@@ -1,6 +1,6 @@
1
1
  """PatchPal - An open-source Claude Code clone implemented purely in Python."""
2
2
 
3
- __version__ = "0.21.2"
3
+ __version__ = "0.21.3"
4
4
 
5
5
  from patchpal.agent import create_agent, create_react_agent
6
6
  from patchpal.cli.autopilot import autopilot_loop
@@ -247,7 +247,14 @@ def build_container_args(sandbox_args, patchpal_args):
247
247
  import shlex
248
248
 
249
249
  quoted_args = " ".join(shlex.quote(arg) for arg in patchpal_cmd_args)
250
- shell_cmd = f"pip install -q patchpal && {patchpal_cmd} {quoted_args}"
250
+
251
+ # If using pre-built patchpal-sandbox image, skip pip install
252
+ # Otherwise, install patchpal first (fallback for custom images)
253
+ if "patchpal-sandbox" in sandbox_args.image:
254
+ shell_cmd = f"{patchpal_cmd} {quoted_args}"
255
+ else:
256
+ shell_cmd = f"pip install -q patchpal && {patchpal_cmd} {quoted_args}"
257
+
251
258
  container_args.extend(["bash", "-c", shell_cmd])
252
259
 
253
260
  return container_args, runtime
@@ -269,7 +276,7 @@ DESCRIPTION:
269
276
  - Network access (required for cloud LLMs like OpenAI, Anthropic)
270
277
  - No resource limits by default (uses Docker/Podman defaults)
271
278
  - Current directory mounted as /workspace
272
- - Auto-installs patchpal in container
279
+ - Pre-built image with patchpal installed (fast startup)
273
280
  - Auto-mounts ~/.patchpal for custom tools, config, and memory
274
281
  - Custom tools work automatically (from ~/.patchpal/tools/ and <repo>/.patchpal/tools/)
275
282
  - Auto-sets OLLAMA_CONTEXT_LENGTH for Ollama models:
@@ -279,7 +286,8 @@ DESCRIPTION:
279
286
  Recommended for autopilot mode and high-risk operations.
280
287
 
281
288
  SCRIPT OPTIONS:
282
- --image IMAGE Container image to use (default: python:3.11-slim)
289
+ --image IMAGE Container image to use (default: ghcr.io/amaiya/patchpal-sandbox:latest)
290
+ Use python:3.11-slim to get latest patchpal from PyPI (slower startup)
283
291
  --no-network Disable network access (incompatible with cloud LLMs)
284
292
  --host-network Use host network (for local Ollama/vLLM servers on localhost)
285
293
  --memory LIMIT Memory limit (e.g., 2g, 4g) - optional, no limit by default
@@ -331,8 +339,10 @@ SECURITY:
331
339
  - Workspace files visible but container has limited privileges
332
340
 
333
341
  NOTES:
334
- - First run downloads the Python image (~130MB)
335
- - Each run reinstalls patchpal (takes ~10s)
342
+ - Default image (ghcr.io/amaiya/patchpal-sandbox:latest) has patchpal pre-installed for fast startup
343
+ - First run downloads the image (~150MB, one-time)
344
+ - Subsequent runs start instantly (no pip install needed)
345
+ - For latest patchpal from PyPI use: --image python:3.11-slim (slower, ~10-30s pip install)
336
346
  - Current directory mounted at /workspace (read-write)
337
347
  - ~/.patchpal mounted at /root/.patchpal if it exists
338
348
  - SSL certificates auto-mounted from /etc/ssl/certs if present
@@ -411,7 +421,7 @@ def main():
411
421
 
412
422
  # Parse sandbox arguments
413
423
  parser = argparse.ArgumentParser(add_help=False) # We handle help manually
414
- parser.add_argument("--image", default="python:3.11-slim")
424
+ parser.add_argument("--image", default="ghcr.io/amaiya/patchpal-sandbox:latest")
415
425
  parser.add_argument("--network", default="bridge")
416
426
  parser.add_argument("--no-network", action="store_true")
417
427
  parser.add_argument("--host-network", action="store_true")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: patchpal
3
- Version: 0.21.2
3
+ Version: 0.21.3
4
4
  Summary: An agentic coding and automation assistant, supporting both local and cloud LLMs
5
5
  Author: PatchPal Contributors
6
6
  License-Expression: Apache-2.0
@@ -79,6 +79,32 @@ $ patchpal # start
79
79
 
80
80
  > Platform support: Linux, macOS, and Windows are all supported
81
81
 
82
+ **Alternative: Run with Docker/Podman (no installation required)**
83
+
84
+ ```bash
85
+ # Using pre-built image with patchpal installed (default model)
86
+ docker run -it --rm \
87
+ -v $(pwd):/workspace \
88
+ -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \
89
+ ghcr.io/amaiya/patchpal-sandbox:latest \
90
+ patchpal
91
+
92
+ # Or with Podman
93
+ podman run -it --rm \
94
+ -v $(pwd):/workspace \
95
+ -e ANTHROPIC_API_KEY=$ANTHROPIC_API_KEY \
96
+ ghcr.io/amaiya/patchpal-sandbox:latest \
97
+ patchpal
98
+
99
+ # Specify a different model with --model
100
+ docker run -it --rm \
101
+ -v $(pwd):/workspace \
102
+ -e OPENAI_API_KEY=$OPENAI_API_KEY \
103
+ ghcr.io/amaiya/patchpal-sandbox:latest \
104
+ patchpal --model openai/gpt-5-mini
105
+ ```
106
+
107
+
82
108
  ## Setup
83
109
  0. **Install**: `pip install patchpal`
84
110
  1. **Get an API key or a Local LLM Engine**:
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes