wcgw 5.0.0__tar.gz → 5.0.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.

Potentially problematic release.


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

Files changed (126) hide show
  1. {wcgw-5.0.0 → wcgw-5.0.1}/PKG-INFO +4 -2
  2. {wcgw-5.0.0 → wcgw-5.0.1}/README.md +3 -1
  3. {wcgw-5.0.0 → wcgw-5.0.1}/pyproject.toml +1 -1
  4. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/tools.py +4 -1
  5. {wcgw-5.0.0 → wcgw-5.0.1}/tests/test_tools.py +24 -0
  6. {wcgw-5.0.0 → wcgw-5.0.1}/uv.lock +1 -1
  7. {wcgw-5.0.0 → wcgw-5.0.1}/.github/workflows/python-publish.yml +0 -0
  8. {wcgw-5.0.0 → wcgw-5.0.1}/.github/workflows/python-tests.yml +0 -0
  9. {wcgw-5.0.0 → wcgw-5.0.1}/.github/workflows/python-types.yml +0 -0
  10. {wcgw-5.0.0 → wcgw-5.0.1}/.gitignore +0 -0
  11. {wcgw-5.0.0 → wcgw-5.0.1}/.gitmodules +0 -0
  12. {wcgw-5.0.0 → wcgw-5.0.1}/.python-version +0 -0
  13. {wcgw-5.0.0 → wcgw-5.0.1}/.vscode/settings.json +0 -0
  14. {wcgw-5.0.0 → wcgw-5.0.1}/CLAUDE.md +0 -0
  15. {wcgw-5.0.0 → wcgw-5.0.1}/Dockerfile +0 -0
  16. {wcgw-5.0.0 → wcgw-5.0.1}/LICENSE +0 -0
  17. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/.git +0 -0
  18. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  19. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  20. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/.github/workflows/main-checks.yml +0 -0
  21. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/.github/workflows/publish-pypi.yml +0 -0
  22. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/.github/workflows/pull-request-checks.yml +0 -0
  23. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/.github/workflows/shared.yml +0 -0
  24. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/.gitignore +0 -0
  25. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/.python-version +0 -0
  26. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/CODE_OF_CONDUCT.md +0 -0
  27. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/CONTRIBUTING.md +0 -0
  28. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/LICENSE +0 -0
  29. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/README.md +0 -0
  30. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/RELEASE.md +0 -0
  31. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/SECURITY.md +0 -0
  32. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/examples/README.md +0 -0
  33. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/examples/servers/simple-prompt/.python-version +0 -0
  34. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/examples/servers/simple-prompt/README.md +0 -0
  35. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/examples/servers/simple-prompt/mcp_simple_prompt/__init__.py +0 -0
  36. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/examples/servers/simple-prompt/mcp_simple_prompt/__main__.py +0 -0
  37. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/examples/servers/simple-prompt/mcp_simple_prompt/server.py +0 -0
  38. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/examples/servers/simple-prompt/pyproject.toml +0 -0
  39. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/examples/servers/simple-resource/.python-version +0 -0
  40. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/examples/servers/simple-resource/README.md +0 -0
  41. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/examples/servers/simple-resource/mcp_simple_resource/__init__.py +0 -0
  42. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/examples/servers/simple-resource/mcp_simple_resource/__main__.py +0 -0
  43. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/examples/servers/simple-resource/mcp_simple_resource/server.py +0 -0
  44. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/examples/servers/simple-resource/pyproject.toml +0 -0
  45. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/examples/servers/simple-tool/.python-version +0 -0
  46. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/examples/servers/simple-tool/README.md +0 -0
  47. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/examples/servers/simple-tool/mcp_simple_tool/__init__.py +0 -0
  48. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/examples/servers/simple-tool/mcp_simple_tool/__main__.py +0 -0
  49. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/examples/servers/simple-tool/mcp_simple_tool/server.py +0 -0
  50. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/examples/servers/simple-tool/pyproject.toml +0 -0
  51. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/pyproject.toml +0 -0
  52. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/__init__.py +0 -0
  53. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/client/__init__.py +0 -0
  54. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/client/__main__.py +0 -0
  55. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/client/session.py +0 -0
  56. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/client/sse.py +0 -0
  57. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/client/stdio.py +0 -0
  58. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/py.typed +0 -0
  59. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/server/__init__.py +0 -0
  60. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/server/__main__.py +0 -0
  61. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/server/models.py +0 -0
  62. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/server/session.py +0 -0
  63. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/server/sse.py +0 -0
  64. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/server/stdio.py +0 -0
  65. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/server/websocket.py +0 -0
  66. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/shared/__init__.py +0 -0
  67. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/shared/context.py +0 -0
  68. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/shared/exceptions.py +0 -0
  69. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/shared/memory.py +0 -0
  70. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/shared/progress.py +0 -0
  71. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/shared/session.py +0 -0
  72. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/shared/version.py +0 -0
  73. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/types.py +0 -0
  74. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/tests/__init__.py +0 -0
  75. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/tests/client/__init__.py +0 -0
  76. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/tests/client/test_session.py +0 -0
  77. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/tests/client/test_stdio.py +0 -0
  78. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/tests/conftest.py +0 -0
  79. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/tests/server/__init__.py +0 -0
  80. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/tests/server/test_session.py +0 -0
  81. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/tests/server/test_stdio.py +0 -0
  82. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/tests/shared/test_memory.py +0 -0
  83. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/tests/test_types.py +0 -0
  84. {wcgw-5.0.0 → wcgw-5.0.1}/src/mcp_wcgw_fork/uv.lock +0 -0
  85. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/__init__.py +0 -0
  86. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/__init__.py +0 -0
  87. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/bash_state/bash_state.py +0 -0
  88. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/bash_state/parser/__init__.py +0 -0
  89. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/bash_state/parser/bash_statement_parser.py +0 -0
  90. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/common.py +0 -0
  91. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/diff-instructions.txt +0 -0
  92. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/encoder/__init__.py +0 -0
  93. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/file_ops/diff_edit.py +0 -0
  94. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/file_ops/search_replace.py +0 -0
  95. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/mcp_server/Readme.md +0 -0
  96. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/mcp_server/__init__.py +0 -0
  97. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/mcp_server/server.py +0 -0
  98. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/memory.py +0 -0
  99. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/modes.py +0 -0
  100. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/repo_ops/display_tree.py +0 -0
  101. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/repo_ops/file_stats.py +0 -0
  102. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/repo_ops/path_prob.py +0 -0
  103. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/repo_ops/paths_model.vocab +0 -0
  104. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/repo_ops/paths_tokens.model +0 -0
  105. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/repo_ops/repo_context.py +0 -0
  106. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/client/tool_prompts.py +0 -0
  107. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/py.typed +0 -0
  108. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw/types_.py +0 -0
  109. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw_cli/__init__.py +0 -0
  110. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw_cli/__main__.py +0 -0
  111. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw_cli/anthropic_client.py +0 -0
  112. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw_cli/cli.py +0 -0
  113. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw_cli/openai_client.py +0 -0
  114. {wcgw-5.0.0 → wcgw-5.0.1}/src/wcgw_cli/openai_utils.py +0 -0
  115. {wcgw-5.0.0 → wcgw-5.0.1}/static/claude-ss.jpg +0 -0
  116. {wcgw-5.0.0 → wcgw-5.0.1}/static/computer-use.jpg +0 -0
  117. {wcgw-5.0.0 → wcgw-5.0.1}/static/example.jpg +0 -0
  118. {wcgw-5.0.0 → wcgw-5.0.1}/static/rocket-icon.png +0 -0
  119. {wcgw-5.0.0 → wcgw-5.0.1}/static/ss1.png +0 -0
  120. {wcgw-5.0.0 → wcgw-5.0.1}/static/workflow-demo.gif +0 -0
  121. {wcgw-5.0.0 → wcgw-5.0.1}/tests/test_bash_parser.py +0 -0
  122. {wcgw-5.0.0 → wcgw-5.0.1}/tests/test_bash_parser_complex.py +0 -0
  123. {wcgw-5.0.0 → wcgw-5.0.1}/tests/test_edit.py +0 -0
  124. {wcgw-5.0.0 → wcgw-5.0.1}/tests/test_file_range_tracking.py +0 -0
  125. {wcgw-5.0.0 → wcgw-5.0.1}/tests/test_mcp_server.py +0 -0
  126. {wcgw-5.0.0 → wcgw-5.0.1}/tests/test_readfiles.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wcgw
3
- Version: 5.0.0
3
+ Version: 5.0.1
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>
@@ -30,7 +30,7 @@ Description-Content-Type: text/markdown
30
30
 
31
31
  # Shell and Coding agent for Claude and other mcp clients
32
32
 
33
- Empowering AI to code, build and run on your local machine.
33
+ Empowering chat applications to code, build and run on your local machine.
34
34
 
35
35
  wcgw is an MCP server with tightly integrated shell and code editing tools.
36
36
 
@@ -48,6 +48,8 @@ wcgw is an MCP server with tightly integrated shell and code editing tools.
48
48
 
49
49
  ## Updates
50
50
 
51
+ - [27 Apr 2025] Removed support for GPTs over relay server. Only MCP server is supported in version >= 5.
52
+
51
53
  - [24 Mar 2025] Improved writing and editing experience for sonnet 3.7, CLAUDE.md gets loaded automatically.
52
54
 
53
55
  - [16 Feb 2025] You can now attach to the working terminal that the AI uses. See the "attach-to-terminal" section below.
@@ -1,6 +1,6 @@
1
1
  # Shell and Coding agent for Claude and other mcp clients
2
2
 
3
- Empowering AI to code, build and run on your local machine.
3
+ Empowering chat applications to code, build and run on your local machine.
4
4
 
5
5
  wcgw is an MCP server with tightly integrated shell and code editing tools.
6
6
 
@@ -18,6 +18,8 @@ wcgw is an MCP server with tightly integrated shell and code editing tools.
18
18
 
19
19
  ## Updates
20
20
 
21
+ - [27 Apr 2025] Removed support for GPTs over relay server. Only MCP server is supported in version >= 5.
22
+
21
23
  - [24 Mar 2025] Improved writing and editing experience for sonnet 3.7, CLAUDE.md gets loaded automatically.
22
24
 
23
25
  - [16 Feb 2025] You can now attach to the working terminal that the AI uses. See the "attach-to-terminal" section below.
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  authors = [{ name = "Aman Rusia", email = "gapypi@arcfu.com" }]
3
3
  name = "wcgw"
4
- version = "5.0.0"
4
+ version = "5.0.1"
5
5
  description = "Shell and coding agent for Claude and other mcp clients"
6
6
  readme = "README.md"
7
7
  requires-python = ">=3.11"
@@ -1043,6 +1043,9 @@ def get_tool_output(
1043
1043
  if file_paths_with_ranges: # Only add to whitelist if we have paths
1044
1044
  context.bash_state.add_to_whitelist_for_overwrite(file_paths_with_ranges)
1045
1045
 
1046
+ # Save bash_state
1047
+ context.bash_state.save_state_to_disk()
1048
+
1046
1049
  if isinstance(output[0], str):
1047
1050
  context.console.print(str(output[0]))
1048
1051
  else:
@@ -1162,7 +1165,7 @@ def read_file(
1162
1165
  with path.open("r") as f:
1163
1166
  all_lines = f.readlines(10_000_000)
1164
1167
 
1165
- if all_lines[-1].endswith("\n"):
1168
+ if all_lines and all_lines[-1].endswith("\n"):
1166
1169
  # Special handling of line counts because readlines doesn't consider last empty line as a separate line
1167
1170
  all_lines[-1] = all_lines[-1][:-1]
1168
1171
  all_lines.append("")
@@ -867,6 +867,30 @@ def test_git_recent_files(context: Context, temp_dir: str) -> None:
867
867
  assert file in repo_structure
868
868
 
869
869
 
870
+ def test_write_empty_file_and_read(context: Context, temp_dir: str) -> None:
871
+ """Test writing an empty file and reading it."""
872
+ _test_init(context, temp_dir)
873
+
874
+ test_file = os.path.join(temp_dir, "empty.txt")
875
+ write_args = FileWriteOrEdit(
876
+ file_path=test_file,
877
+ percentage_to_change=100,
878
+ file_content_or_search_replace_blocks="",
879
+ chat_id=context.bash_state._current_chat_id,
880
+ )
881
+ outputs, _ = get_tool_output(
882
+ context, write_args, default_enc, 1.0, lambda x, y: ("", 0.0), None
883
+ )
884
+ assert len(outputs) == 1
885
+ assert "Success" in outputs[0]
886
+
887
+ read_args = ReadFiles(file_paths=[test_file])
888
+ outputs, _ = get_tool_output(
889
+ context, read_args, default_enc, 1.0, lambda x, y: ("", 0.0), None
890
+ )
891
+ assert len(outputs) == 1
892
+
893
+
870
894
  def test_error_cases(context: Context, temp_dir: str) -> None:
871
895
  """Test various error cases."""
872
896
  # First initialize
@@ -1238,7 +1238,7 @@ wheels = [
1238
1238
 
1239
1239
  [[package]]
1240
1240
  name = "wcgw"
1241
- version = "4.1.3"
1241
+ version = "5.0.1"
1242
1242
  source = { editable = "." }
1243
1243
  dependencies = [
1244
1244
  { name = "anthropic" },
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
File without changes
File without changes
File without changes
File without changes
File without changes