patchpal 0.21.2__tar.gz → 0.21.4__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.4}/PKG-INFO +27 -1
  2. {patchpal-0.21.2 → patchpal-0.21.4}/README.md +26 -0
  3. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/__init__.py +1 -1
  4. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/cli/sandbox.py +30 -15
  5. {patchpal-0.21.2 → patchpal-0.21.4/patchpal.egg-info}/PKG-INFO +27 -1
  6. {patchpal-0.21.2 → patchpal-0.21.4}/LICENSE +0 -0
  7. {patchpal-0.21.2 → patchpal-0.21.4}/MANIFEST.in +0 -0
  8. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/agent/__init__.py +0 -0
  9. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/agent/function_calling.py +0 -0
  10. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/agent/react.py +0 -0
  11. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/cli/__init__.py +0 -0
  12. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/cli/autopilot.py +0 -0
  13. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/cli/interactive.py +0 -0
  14. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/cli/mcp.py +0 -0
  15. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/cli/streaming.py +0 -0
  16. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/config.py +0 -0
  17. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/context.py +0 -0
  18. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/permissions.py +0 -0
  19. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/prompts/react_prompt.md +0 -0
  20. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/prompts/system_prompt.md +0 -0
  21. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/skills.py +0 -0
  22. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/tools/__init__.py +0 -0
  23. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/tools/code_analysis.py +0 -0
  24. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/tools/common.py +0 -0
  25. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/tools/definitions.py +0 -0
  26. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/tools/file_reading.py +0 -0
  27. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/tools/file_writing.py +0 -0
  28. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/tools/find_tool.py +0 -0
  29. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/tools/grep_tool.py +0 -0
  30. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/tools/image_handler.py +0 -0
  31. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/tools/mcp.py +0 -0
  32. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/tools/repo_map.py +0 -0
  33. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/tools/shell_tools.py +0 -0
  34. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/tools/todo_tools.py +0 -0
  35. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/tools/tool_schema.py +0 -0
  36. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/tools/user_interaction.py +0 -0
  37. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal/tools/web_tools.py +0 -0
  38. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal.egg-info/SOURCES.txt +0 -0
  39. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal.egg-info/dependency_links.txt +0 -0
  40. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal.egg-info/entry_points.txt +0 -0
  41. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal.egg-info/requires.txt +0 -0
  42. {patchpal-0.21.2 → patchpal-0.21.4}/patchpal.egg-info/top_level.txt +0 -0
  43. {patchpal-0.21.2 → patchpal-0.21.4}/pyproject.toml +0 -0
  44. {patchpal-0.21.2 → patchpal-0.21.4}/setup.cfg +0 -0
  45. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_agent.py +0 -0
  46. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_cli.py +0 -0
  47. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_config_dynamic.py +0 -0
  48. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_context.py +0 -0
  49. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_custom_tools.py +0 -0
  50. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_enabled_tools.py +0 -0
  51. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_find_tool.py +0 -0
  52. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_guardrails.py +0 -0
  53. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_image_blocking.py +0 -0
  54. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_maximum_security.py +0 -0
  55. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_mcp_config.py +0 -0
  56. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_memory.py +0 -0
  57. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_operational_safety.py +0 -0
  58. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_optional_tools.py +0 -0
  59. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_permissions.py +0 -0
  60. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_react.py +0 -0
  61. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_reasoning_content.py +0 -0
  62. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_repo_map.py +0 -0
  63. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_simplified_prompt.py +0 -0
  64. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_skills.py +0 -0
  65. {patchpal-0.21.2 → patchpal-0.21.4}/tests/test_streaming.py +0 -0
  66. {patchpal-0.21.2 → patchpal-0.21.4}/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.4
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.4"
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
@@ -314,8 +322,9 @@ ENVIRONMENT VARIABLES:
314
322
  # Custom endpoints (optional)
315
323
  OPENAI_BASE_URL=https://your-proxy.com/v1
316
324
 
317
- # Disable permissions for autopilot
318
- PATCHPAL_REQUIRE_PERMISSION=false
325
+ # Optional: Disable permissions for interactive mode
326
+ # (Not needed for autopilot - it disables permissions automatically)
327
+ # PATCHPAL_REQUIRE_PERMISSION=false
319
328
 
320
329
  Note: SSL_CERT_FILE and REQUESTS_CA_BUNDLE paths are auto-mounted if they exist.
321
330
 
@@ -329,10 +338,15 @@ SECURITY:
329
338
  - No resource limits by default (trust Docker/Podman and OS limits)
330
339
  - Clean environment on each run (--rm flag)
331
340
  - Workspace files visible but container has limited privileges
341
+ - Permissions behavior:
342
+ * Interactive mode (default): Permissions ENABLED (prompts before operations)
343
+ * Autopilot mode: Permissions DISABLED automatically (autonomous operation)
332
344
 
333
345
  NOTES:
334
- - First run downloads the Python image (~130MB)
335
- - Each run reinstalls patchpal (takes ~10s)
346
+ - Default image (ghcr.io/amaiya/patchpal-sandbox:latest) has patchpal pre-installed for fast startup
347
+ - First run downloads the image (~150MB, one-time)
348
+ - Subsequent runs start instantly (no pip install needed)
349
+ - For latest patchpal from PyPI use: --image python:3.11-slim (slower, ~10-30s pip install)
336
350
  - Current directory mounted at /workspace (read-write)
337
351
  - ~/.patchpal mounted at /root/.patchpal if it exists
338
352
  - SSL certificates auto-mounted from /etc/ssl/certs if present
@@ -356,17 +370,18 @@ CORPORATE NETWORKS (Linux/WSL):
356
370
  You may need to add certificates to Docker Desktop's trusted CAs.
357
371
 
358
372
  EXAMPLES:
359
- # Cloud LLM: Load API keys from .env file
360
- patchpal-sandbox --env-file .env -- --model openai/gpt-5.2-codex
361
- patchpal-sandbox --env-file ~/.config/patchpal/.env -- --model anthropic/claude-sonnet-4-5
362
373
 
363
- #Cloud LLM: Interactive mode with cloud LLM (network enabled by default)
374
+ # Interactive mode - permissions ENABLED (prompts before operations)
364
375
  patchpal-sandbox -- --model anthropic/claude-sonnet-4-5
365
376
 
366
- # AutoPilot Mode: non-interactive, permissions automatically disabled
367
- patchpal-sandbox --env-file .env -- autopilot --model openai/gpt-5.2-codex --prompt "Add error handling to auth.py" --completion-promise "COMPLETE"
377
+ # Interactive mode - load API keys from .env file
378
+ patchpal-sandbox --env-file .env -- --model openai/gpt-5.2-codex
379
+ patchpal-sandbox --env-file ~/.config/patchpal/.env -- --model anthropic/claude-sonnet-4-5
380
+
381
+ # AutoPilot mode - permissions automatically DISABLED
382
+ patchpal-sandbox -- autopilot --model openai/gpt-5-mini --prompt "Add error handling to auth.py" --completion-promise "COMPLETE"
368
383
 
369
- # AutoPilot Mode: read file containing prompt
384
+ # AutoPilot mode - read file containing prompt and and .env file
370
385
  patchpal-sandbox --env-file .env -- autopilot --model openai/gpt-5.2-codex --prompt-file task.md --completion-promise "DONE"
371
386
 
372
387
  # Ollama: Linux/WSL requires host network to reach Ollama on localhost
@@ -411,7 +426,7 @@ def main():
411
426
 
412
427
  # Parse sandbox arguments
413
428
  parser = argparse.ArgumentParser(add_help=False) # We handle help manually
414
- parser.add_argument("--image", default="python:3.11-slim")
429
+ parser.add_argument("--image", default="ghcr.io/amaiya/patchpal-sandbox:latest")
415
430
  parser.add_argument("--network", default="bridge")
416
431
  parser.add_argument("--no-network", action="store_true")
417
432
  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.4
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