wcgw 5.4.4__tar.gz → 5.4.5__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.

Potentially problematic release.


This version of wcgw might be problematic. Click here for more details.

Files changed (60) hide show
  1. {wcgw-5.4.4 → wcgw-5.4.5}/PKG-INFO +2 -1
  2. {wcgw-5.4.4 → wcgw-5.4.5}/pyproject.toml +2 -1
  3. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/tools.py +5 -5
  4. {wcgw-5.4.4 → wcgw-5.4.5}/uv.lock +24 -1
  5. {wcgw-5.4.4 → wcgw-5.4.5}/.github/workflows/python-publish.yml +0 -0
  6. {wcgw-5.4.4 → wcgw-5.4.5}/.github/workflows/python-tests.yml +0 -0
  7. {wcgw-5.4.4 → wcgw-5.4.5}/.github/workflows/python-types.yml +0 -0
  8. {wcgw-5.4.4 → wcgw-5.4.5}/.gitignore +0 -0
  9. {wcgw-5.4.4 → wcgw-5.4.5}/.gitmodules +0 -0
  10. {wcgw-5.4.4 → wcgw-5.4.5}/.python-version +0 -0
  11. {wcgw-5.4.4 → wcgw-5.4.5}/.vscode/settings.json +0 -0
  12. {wcgw-5.4.4 → wcgw-5.4.5}/CLAUDE.md +0 -0
  13. {wcgw-5.4.4 → wcgw-5.4.5}/Dockerfile +0 -0
  14. {wcgw-5.4.4 → wcgw-5.4.5}/LICENSE +0 -0
  15. {wcgw-5.4.4 → wcgw-5.4.5}/README.md +0 -0
  16. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/__init__.py +0 -0
  17. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/__init__.py +0 -0
  18. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/bash_state/bash_state.py +0 -0
  19. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/bash_state/parser/__init__.py +0 -0
  20. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/bash_state/parser/bash_statement_parser.py +0 -0
  21. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/common.py +0 -0
  22. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/diff-instructions.txt +0 -0
  23. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/encoder/__init__.py +0 -0
  24. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/file_ops/diff_edit.py +0 -0
  25. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/file_ops/extensions.py +0 -0
  26. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/file_ops/search_replace.py +0 -0
  27. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/mcp_server/Readme.md +0 -0
  28. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/mcp_server/__init__.py +0 -0
  29. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/mcp_server/server.py +0 -0
  30. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/memory.py +0 -0
  31. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/modes.py +0 -0
  32. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/repo_ops/display_tree.py +0 -0
  33. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/repo_ops/file_stats.py +0 -0
  34. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/repo_ops/path_prob.py +0 -0
  35. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/repo_ops/paths_model.vocab +0 -0
  36. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/repo_ops/paths_tokens.model +0 -0
  37. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/repo_ops/repo_context.py +0 -0
  38. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/schema_generator.py +0 -0
  39. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/client/tool_prompts.py +0 -0
  40. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/py.typed +0 -0
  41. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw/types_.py +0 -0
  42. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw_cli/__init__.py +0 -0
  43. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw_cli/__main__.py +0 -0
  44. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw_cli/anthropic_client.py +0 -0
  45. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw_cli/cli.py +0 -0
  46. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw_cli/openai_client.py +0 -0
  47. {wcgw-5.4.4 → wcgw-5.4.5}/src/wcgw_cli/openai_utils.py +0 -0
  48. {wcgw-5.4.4 → wcgw-5.4.5}/static/claude-ss.jpg +0 -0
  49. {wcgw-5.4.4 → wcgw-5.4.5}/static/computer-use.jpg +0 -0
  50. {wcgw-5.4.4 → wcgw-5.4.5}/static/example.jpg +0 -0
  51. {wcgw-5.4.4 → wcgw-5.4.5}/static/rocket-icon.png +0 -0
  52. {wcgw-5.4.4 → wcgw-5.4.5}/static/ss1.png +0 -0
  53. {wcgw-5.4.4 → wcgw-5.4.5}/static/workflow-demo.gif +0 -0
  54. {wcgw-5.4.4 → wcgw-5.4.5}/tests/test_bash_parser.py +0 -0
  55. {wcgw-5.4.4 → wcgw-5.4.5}/tests/test_bash_parser_complex.py +0 -0
  56. {wcgw-5.4.4 → wcgw-5.4.5}/tests/test_edit.py +0 -0
  57. {wcgw-5.4.4 → wcgw-5.4.5}/tests/test_file_range_tracking.py +0 -0
  58. {wcgw-5.4.4 → wcgw-5.4.5}/tests/test_mcp_server.py +0 -0
  59. {wcgw-5.4.4 → wcgw-5.4.5}/tests/test_readfiles.py +0 -0
  60. {wcgw-5.4.4 → wcgw-5.4.5}/tests/test_tools.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wcgw
3
- Version: 5.4.4
3
+ Version: 5.4.5
4
4
  Summary: Shell and coding agent for Claude and other mcp clients
5
5
  Project-URL: Homepage, https://github.com/rusiaaman/wcgw
6
6
  Author-email: Aman Rusia <gapypi@arcfu.com>
@@ -26,6 +26,7 @@ Requires-Dist: tree-sitter-bash>=0.23.3
26
26
  Requires-Dist: tree-sitter>=0.24.0
27
27
  Requires-Dist: typer>=0.12.5
28
28
  Requires-Dist: uvicorn>=0.31.0
29
+ Requires-Dist: wcmatch>=10.1
29
30
  Requires-Dist: websockets>=13.1
30
31
  Description-Content-Type: text/markdown
31
32
 
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  authors = [{ name = "Aman Rusia", email = "gapypi@arcfu.com" }]
3
3
  name = "wcgw"
4
- version = "5.4.4"
4
+ version = "5.4.5"
5
5
  description = "Shell and coding agent for Claude and other mcp clients"
6
6
  readme = "README.md"
7
7
  requires-python = ">=3.11"
@@ -27,6 +27,7 @@ dependencies = [
27
27
  "tree-sitter>=0.24.0",
28
28
  "tree-sitter-bash>=0.23.3",
29
29
  "mcp>=1.7.0",
30
+ "wcmatch>=10.1",
30
31
  ]
31
32
 
32
33
  [project.urls]
@@ -1,5 +1,4 @@
1
1
  import base64
2
- import fnmatch
3
2
  import glob
4
3
  import json
5
4
  import mimetypes
@@ -29,6 +28,7 @@ from openai.types.chat import (
29
28
  from pydantic import BaseModel, TypeAdapter, ValidationError
30
29
  from syntax_checker import Output as SCOutput
31
30
  from syntax_checker import check_syntax as raw_check_syntax
31
+ from wcmatch import glob as wcglob
32
32
 
33
33
  from ..client.bash_state.bash_state import (
34
34
  BashState,
@@ -570,8 +570,8 @@ def write_file(
570
570
 
571
571
  # Validate using write_if_empty_mode after checking whitelist
572
572
  allowed_globs = context.bash_state.write_if_empty_mode.allowed_globs
573
- if allowed_globs != "all" and not any(
574
- fnmatch.fnmatch(path_, pattern) for pattern in allowed_globs
573
+ if allowed_globs != "all" and not wcglob.globmatch(
574
+ path_, allowed_globs, flags=wcglob.GLOBSTAR
575
575
  ):
576
576
  return (
577
577
  f"Error: updating file {path_} not allowed in current mode. Doesn't match allowed globs: {allowed_globs}",
@@ -762,8 +762,8 @@ def _do_diff_edit(
762
762
 
763
763
  # Validate using file_edit_mode
764
764
  allowed_globs = context.bash_state.file_edit_mode.allowed_globs
765
- if allowed_globs != "all" and not any(
766
- fnmatch.fnmatch(path_, pattern) for pattern in allowed_globs
765
+ if allowed_globs != "all" and not wcglob.globmatch(
766
+ path_, allowed_globs, flags=wcglob.GLOBSTAR
767
767
  ):
768
768
  raise Exception(
769
769
  f"Error: updating file {path_} not allowed in current mode. Doesn't match allowed globs: {allowed_globs}"
@@ -64,6 +64,15 @@ wheels = [
64
64
  { url = "https://files.pythonhosted.org/packages/a2/ee/3fd29bf416eb4f1c5579cf12bf393ae954099258abd7bde03c4f9716ef6b/autoflake-2.3.1-py3-none-any.whl", hash = "sha256:3ae7495db9084b7b32818b4140e6dc4fc280b712fb414f5b8fe57b0a8e85a840", size = 32483, upload-time = "2024-03-13T03:41:26.969Z" },
65
65
  ]
66
66
 
67
+ [[package]]
68
+ name = "bracex"
69
+ version = "2.6"
70
+ source = { registry = "https://pypi.org/simple" }
71
+ sdist = { url = "https://files.pythonhosted.org/packages/63/9a/fec38644694abfaaeca2798b58e276a8e61de49e2e37494ace423395febc/bracex-2.6.tar.gz", hash = "sha256:98f1347cd77e22ee8d967a30ad4e310b233f7754dbf31ff3fceb76145ba47dc7", size = 26642, upload-time = "2025-06-22T19:12:31.254Z" }
72
+ wheels = [
73
+ { url = "https://files.pythonhosted.org/packages/9d/2a/9186535ce58db529927f6cf5990a849aa9e052eea3e2cfefe20b9e1802da/bracex-2.6-py3-none-any.whl", hash = "sha256:0b0049264e7340b3ec782b5cb99beb325f36c3782a32e36e876452fd49a09952", size = 11508, upload-time = "2025-06-22T19:12:29.781Z" },
74
+ ]
75
+
67
76
  [[package]]
68
77
  name = "certifi"
69
78
  version = "2025.4.26"
@@ -1398,7 +1407,7 @@ wheels = [
1398
1407
 
1399
1408
  [[package]]
1400
1409
  name = "wcgw"
1401
- version = "5.4.4"
1410
+ version = "5.4.5"
1402
1411
  source = { editable = "." }
1403
1412
  dependencies = [
1404
1413
  { name = "anthropic" },
@@ -1421,6 +1430,7 @@ dependencies = [
1421
1430
  { name = "tree-sitter-bash" },
1422
1431
  { name = "typer" },
1423
1432
  { name = "uvicorn" },
1433
+ { name = "wcmatch" },
1424
1434
  { name = "websockets" },
1425
1435
  ]
1426
1436
 
@@ -1466,6 +1476,7 @@ requires-dist = [
1466
1476
  { name = "tree-sitter-bash", specifier = ">=0.23.3" },
1467
1477
  { name = "typer", specifier = ">=0.12.5" },
1468
1478
  { name = "uvicorn", specifier = ">=0.31.0" },
1479
+ { name = "wcmatch", specifier = ">=10.1" },
1469
1480
  { name = "websockets", specifier = ">=13.1" },
1470
1481
  ]
1471
1482
 
@@ -1489,6 +1500,18 @@ types = [
1489
1500
  { name = "types-toml", specifier = ">=0.10.8.20240310" },
1490
1501
  ]
1491
1502
 
1503
+ [[package]]
1504
+ name = "wcmatch"
1505
+ version = "10.1"
1506
+ source = { registry = "https://pypi.org/simple" }
1507
+ dependencies = [
1508
+ { name = "bracex" },
1509
+ ]
1510
+ sdist = { url = "https://files.pythonhosted.org/packages/79/3e/c0bdc27cf06f4e47680bd5803a07cb3dfd17de84cde92dd217dcb9e05253/wcmatch-10.1.tar.gz", hash = "sha256:f11f94208c8c8484a16f4f48638a85d771d9513f4ab3f37595978801cb9465af", size = 117421, upload-time = "2025-06-22T19:14:02.49Z" }
1511
+ wheels = [
1512
+ { url = "https://files.pythonhosted.org/packages/eb/d8/0d1d2e9d3fabcf5d6840362adcf05f8cf3cd06a73358140c3a97189238ae/wcmatch-10.1-py3-none-any.whl", hash = "sha256:5848ace7dbb0476e5e55ab63c6bbd529745089343427caa5537f230cc01beb8a", size = 39854, upload-time = "2025-06-22T19:14:00.978Z" },
1513
+ ]
1514
+
1492
1515
  [[package]]
1493
1516
  name = "wcwidth"
1494
1517
  version = "0.2.13"
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
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes