wcgw 2.8.0__tar.gz → 2.8.2__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 (157) hide show
  1. {wcgw-2.8.0 → wcgw-2.8.2}/.gitmodules +1 -1
  2. {wcgw-2.8.0 → wcgw-2.8.2}/PKG-INFO +19 -2
  3. {wcgw-2.8.0 → wcgw-2.8.2}/README.md +18 -1
  4. {wcgw-2.8.0 → wcgw-2.8.2}/pyproject.toml +3 -3
  5. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/tools.py +8 -6
  6. {wcgw-2.8.0 → wcgw-2.8.2}/.github/workflows/python-publish.yml +0 -0
  7. {wcgw-2.8.0 → wcgw-2.8.2}/.github/workflows/python-tests.yml +0 -0
  8. {wcgw-2.8.0 → wcgw-2.8.2}/.github/workflows/python-types.yml +0 -0
  9. {wcgw-2.8.0 → wcgw-2.8.2}/.gitignore +0 -0
  10. {wcgw-2.8.0 → wcgw-2.8.2}/.python-version +0 -0
  11. {wcgw-2.8.0 → wcgw-2.8.2}/.vscode/settings.json +0 -0
  12. {wcgw-2.8.0 → wcgw-2.8.2}/LICENSE +0 -0
  13. {wcgw-2.8.0 → wcgw-2.8.2}/gpt_action_json_schema.json +0 -0
  14. {wcgw-2.8.0 → wcgw-2.8.2}/gpt_instructions.txt +0 -0
  15. {wcgw-2.8.0 → wcgw-2.8.2}/openai.md +0 -0
  16. {wcgw-2.8.0 → wcgw-2.8.2}/src/__init__.py +0 -0
  17. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/.git +0 -0
  18. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  19. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  20. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/.github/workflows/main-checks.yml +0 -0
  21. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/.github/workflows/publish-pypi.yml +0 -0
  22. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/.github/workflows/pull-request-checks.yml +0 -0
  23. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/.github/workflows/shared.yml +0 -0
  24. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/.gitignore +0 -0
  25. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/.python-version +0 -0
  26. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/CODE_OF_CONDUCT.md +0 -0
  27. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/CONTRIBUTING.md +0 -0
  28. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/LICENSE +0 -0
  29. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/README.md +0 -0
  30. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/RELEASE.md +0 -0
  31. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/SECURITY.md +0 -0
  32. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/examples/README.md +0 -0
  33. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/examples/servers/simple-prompt/.python-version +0 -0
  34. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/examples/servers/simple-prompt/README.md +0 -0
  35. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/examples/servers/simple-prompt/mcp_simple_prompt/__init__.py +0 -0
  36. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/examples/servers/simple-prompt/mcp_simple_prompt/__main__.py +0 -0
  37. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/examples/servers/simple-prompt/mcp_simple_prompt/server.py +0 -0
  38. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/examples/servers/simple-prompt/pyproject.toml +0 -0
  39. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/examples/servers/simple-resource/.python-version +0 -0
  40. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/examples/servers/simple-resource/README.md +0 -0
  41. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/examples/servers/simple-resource/mcp_simple_resource/__init__.py +0 -0
  42. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/examples/servers/simple-resource/mcp_simple_resource/__main__.py +0 -0
  43. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/examples/servers/simple-resource/mcp_simple_resource/server.py +0 -0
  44. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/examples/servers/simple-resource/pyproject.toml +0 -0
  45. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/examples/servers/simple-tool/.python-version +0 -0
  46. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/examples/servers/simple-tool/README.md +0 -0
  47. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/examples/servers/simple-tool/mcp_simple_tool/__init__.py +0 -0
  48. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/examples/servers/simple-tool/mcp_simple_tool/__main__.py +0 -0
  49. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/examples/servers/simple-tool/mcp_simple_tool/server.py +0 -0
  50. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/examples/servers/simple-tool/pyproject.toml +0 -0
  51. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/pyproject.toml +0 -0
  52. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/__init__.py +0 -0
  53. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/client/__init__.py +0 -0
  54. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/client/__main__.py +0 -0
  55. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/client/session.py +0 -0
  56. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/client/sse.py +0 -0
  57. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/client/stdio.py +0 -0
  58. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/py.typed +0 -0
  59. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/server/__init__.py +0 -0
  60. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/server/__main__.py +0 -0
  61. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/server/models.py +0 -0
  62. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/server/session.py +0 -0
  63. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/server/sse.py +0 -0
  64. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/server/stdio.py +0 -0
  65. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/server/websocket.py +0 -0
  66. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/shared/__init__.py +0 -0
  67. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/shared/context.py +0 -0
  68. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/shared/exceptions.py +0 -0
  69. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/shared/memory.py +0 -0
  70. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/shared/progress.py +0 -0
  71. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/shared/session.py +0 -0
  72. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/shared/version.py +0 -0
  73. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/src/mcp_wcgw/types.py +0 -0
  74. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/tests/__init__.py +0 -0
  75. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/tests/client/__init__.py +0 -0
  76. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/tests/client/test_session.py +0 -0
  77. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/tests/client/test_stdio.py +0 -0
  78. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/tests/conftest.py +0 -0
  79. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/tests/server/__init__.py +0 -0
  80. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/tests/server/test_session.py +0 -0
  81. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/tests/server/test_stdio.py +0 -0
  82. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/tests/shared/test_memory.py +0 -0
  83. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/tests/test_types.py +0 -0
  84. {wcgw-2.8.0/src/mcp_wcgw → wcgw-2.8.2/src/mcp_wcgw_fork}/uv.lock +0 -0
  85. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/__init__.py +0 -0
  86. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/__init__.py +0 -0
  87. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/__main__.py +0 -0
  88. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/anthropic_client.py +0 -0
  89. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/cli.py +0 -0
  90. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/common.py +0 -0
  91. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/computer_use.py +0 -0
  92. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/diff-instructions.txt +0 -0
  93. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/file_ops/diff_edit.py +0 -0
  94. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/file_ops/search_replace.py +0 -0
  95. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/mcp_server/Readme.md +0 -0
  96. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/mcp_server/__init__.py +0 -0
  97. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/mcp_server/server.py +0 -0
  98. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/memory.py +0 -0
  99. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/modes.py +0 -0
  100. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/openai_client.py +0 -0
  101. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/openai_utils.py +0 -0
  102. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/repo_ops/display_tree.py +0 -0
  103. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/repo_ops/path_prob.py +0 -0
  104. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/repo_ops/paths_model.vocab +0 -0
  105. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/repo_ops/paths_tokens.model +0 -0
  106. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/repo_ops/repo_context.py +0 -0
  107. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/client/sys_utils.py +0 -0
  108. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/relay/serve.py +0 -0
  109. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/relay/static/privacy.txt +0 -0
  110. {wcgw-2.8.0 → wcgw-2.8.2}/src/wcgw/types_.py +0 -0
  111. {wcgw-2.8.0 → wcgw-2.8.2}/static/claude-ss.jpg +0 -0
  112. {wcgw-2.8.0 → wcgw-2.8.2}/static/computer-use.jpg +0 -0
  113. {wcgw-2.8.0 → wcgw-2.8.2}/static/example.jpg +0 -0
  114. {wcgw-2.8.0 → wcgw-2.8.2}/static/rocket-icon.png +0 -0
  115. {wcgw-2.8.0 → wcgw-2.8.2}/static/ss1.png +0 -0
  116. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/file_ops/test_diff_edit.py +0 -0
  117. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/file_ops/test_search_replace.py +0 -0
  118. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/repo_ops/__init__.py +0 -0
  119. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/repo_ops/test_display_tree.py +0 -0
  120. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/repo_ops/test_display_tree_simple.py +0 -0
  121. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/repo_ops/test_path_prob.py +0 -0
  122. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/repo_ops/test_repo_context.py +0 -0
  123. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/test_anthropic_client_utils.py +0 -0
  124. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/test_memory.py +0 -0
  125. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/test_openai_utils.py +0 -0
  126. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/test_tools_basic.py +0 -0
  127. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/test_tools_extended.py +0 -0
  128. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/test_tools_file_ops.py +0 -0
  129. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/test_tools_files.py +0 -0
  130. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/test_tools_shell.py +0 -0
  131. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/test_tools_validation.py +0 -0
  132. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/tools/__init__.py +0 -0
  133. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/tools/test_command_validation.py +0 -0
  134. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/tools/test_docker_operations.py +0 -0
  135. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/tools/test_error_handling.py +0 -0
  136. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/tools/test_execute_bash.py +0 -0
  137. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/tools/test_file_operations.py +0 -0
  138. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/tools/test_files/test1.py +0 -0
  139. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/tools/test_files/test2.py +0 -0
  140. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/tools/test_files/test_file.py +0 -0
  141. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/tools/test_is_int.py +0 -0
  142. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/tools/test_knowledge_transfer.py +0 -0
  143. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/tools/test_large_blocks.py +0 -0
  144. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/tools/test_render_terminal.py +0 -0
  145. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/tools/test_terminal_output.py +0 -0
  146. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/tools/test_user_interaction.py +0 -0
  147. {wcgw-2.8.0 → wcgw-2.8.2}/tests/client/tools/test_write_file.py +0 -0
  148. {wcgw-2.8.0 → wcgw-2.8.2}/tests/conftest.py +0 -0
  149. {wcgw-2.8.0 → wcgw-2.8.2}/tests/test_anthropic_client.py +0 -0
  150. {wcgw-2.8.0 → wcgw-2.8.2}/tests/test_basic.py +0 -0
  151. {wcgw-2.8.0 → wcgw-2.8.2}/tests/test_common.py +0 -0
  152. {wcgw-2.8.0 → wcgw-2.8.2}/tests/test_computer_use.py +0 -0
  153. {wcgw-2.8.0 → wcgw-2.8.2}/tests/test_computer_use_base.py +0 -0
  154. {wcgw-2.8.0 → wcgw-2.8.2}/tests/test_computer_use_shell.py +0 -0
  155. {wcgw-2.8.0 → wcgw-2.8.2}/tests/test_sys_utils.py +0 -0
  156. {wcgw-2.8.0 → wcgw-2.8.2}/tests/test_tools.py +0 -0
  157. {wcgw-2.8.0 → wcgw-2.8.2}/uv.lock +0 -0
@@ -1,3 +1,3 @@
1
1
  [submodule "src/mcp_wcgw"]
2
- path = src/mcp_wcgw
2
+ path = src/mcp_wcgw_fork
3
3
  url = https://github.com/rusiaaman/python-sdk.git
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: wcgw
3
- Version: 2.8.0
3
+ Version: 2.8.2
4
4
  Summary: Shell and coding agent on claude and chatgpt
5
5
  Project-URL: Homepage, https://github.com/rusiaaman/wcgw
6
6
  Author-email: Aman Rusia <gapypi@arcfu.com>
@@ -41,6 +41,8 @@ Description-Content-Type: text/markdown
41
41
  [![codecov](https://codecov.io/gh/rusiaaman/wcgw/graph/badge.svg)](https://codecov.io/gh/rusiaaman/wcgw)
42
42
 
43
43
  ## Updates
44
+ - [15 Jan 2025] Modes introduced: architect, code-writer, and all powerful wcgw mode.
45
+
44
46
  - [8 Jan 2025] Context saving tool for saving relevant file paths along with a description in a single file. Can be used as a task checkpoint or for knowledge transfer.
45
47
 
46
48
  - [29 Dec 2024] Syntax checking on file writing and edits is now stable. Made `initialize` tool call useful; sending smart repo structure to claude if any repo is referenced. Large file handling is also now improved.
@@ -64,11 +66,16 @@ Description-Content-Type: text/markdown
64
66
  - File edit based on search-replace tries to find correct search block if it has multiple matches based on previous search blocks. Fails otherwise (for correctness).
65
67
  - File edit has spacing tolerant matching, with warning on issues like indentation mismatch. If there's no match, the closest match is returned to the AI to fix its mistakes.
66
68
  - Using Aider-like search and replace, which has better performance than tool call based search and replace.
67
- - ⚡ **Shell optimisations**:
69
+ - ⚡ **Shell optimizations**:
68
70
  - Only one command is allowed to be run at a time, simplifying management and avoiding rogue processes. There's only single shell instance at any point of time.
69
71
  - Current working directory is always returned after any shell command to prevent AI from getting lost.
70
72
  - Command polling exits after a quick timeout to avoid slow feedback. However, status checking has wait tolerance based on fresh output streaming from a command. Both of these approach combined provides a good shell interaction experience.
71
73
  - ⚡ **Saving repo context in a single file**: Task checkpointing using "ContextSave" tool saves detailed context in a single file. Tasks can later be resumed in a new chat asking "Resume `task id`". The saved file can be used to do other kinds of knowledge transfer, such as taking help from another AI.
74
+ - ⚡ **Easily switch between various modes**:
75
+ - Ask it to run in 'architect' mode for planning. Inspired by adier's architect mode, work with Claude to come up with a plan first. Leads to better accuracy and prevents premature file editing.
76
+ - Ask it to run in 'code-writer' mode for code editing and project building. You can provide specific paths with wild card support to prevent other files getting edited.
77
+ - By default it runs in 'wcgw' mode that has no restrictions and full authorisation.
78
+ - More details in [Modes section](#modes)
72
79
 
73
80
  ## Top use cases examples
74
81
 
@@ -148,6 +155,16 @@ Then ask claude to execute shell commands, read files, edit files, run your code
148
155
  - You can in a new chat say "Resume '<task id>'", the AI should then call "Initialize" with the task id and load the context from there.
149
156
  - Or you can directly open the file generated and share it with another AI for help.
150
157
 
158
+ #### Modes
159
+ There are three built-in modes. You may ask Claude to run in one of the modes, like "Use 'architect' mode"
160
+ | **Mode** | **Description** | **Allows** | **Denies** | **Invoke prompt** |
161
+ |-----------------|-----------------------------------------------------------------------------|---------------------------------------------------------|----------------------------------------------|----------------------------------------------------------------------------------------------------|
162
+ | **Architect** | Designed for you to work with Claude to investigate and understand your repo. | Read-only commands | FileEdit and Write tool | Run in mode='architect' |
163
+ | **Code-writer** | For code writing and development | Specified path globs for editing or writing, specified commands | FileEdit for paths not matching specified glob, Write for paths not matching specified glob | Run in code writer mode, only 'tests/**' allowed, only uv command allowed |
164
+ | **wcgw** | Default mode with everything allowed | Everything | Nothing | No prompt, or "Run in wcgw mode" |
165
+
166
+ Note: in code-writer mode either all commands are allowed or none are allowed for now. If you give a list of allowed commands, Claude is instructed to run only those commands, but no actual check happens. (WIP)
167
+
151
168
  ### [Optional] Vs code extension
152
169
  https://marketplace.visualstudio.com/items?itemName=AmanRusia.wcgw
153
170
 
@@ -12,6 +12,8 @@
12
12
  [![codecov](https://codecov.io/gh/rusiaaman/wcgw/graph/badge.svg)](https://codecov.io/gh/rusiaaman/wcgw)
13
13
 
14
14
  ## Updates
15
+ - [15 Jan 2025] Modes introduced: architect, code-writer, and all powerful wcgw mode.
16
+
15
17
  - [8 Jan 2025] Context saving tool for saving relevant file paths along with a description in a single file. Can be used as a task checkpoint or for knowledge transfer.
16
18
 
17
19
  - [29 Dec 2024] Syntax checking on file writing and edits is now stable. Made `initialize` tool call useful; sending smart repo structure to claude if any repo is referenced. Large file handling is also now improved.
@@ -35,11 +37,16 @@
35
37
  - File edit based on search-replace tries to find correct search block if it has multiple matches based on previous search blocks. Fails otherwise (for correctness).
36
38
  - File edit has spacing tolerant matching, with warning on issues like indentation mismatch. If there's no match, the closest match is returned to the AI to fix its mistakes.
37
39
  - Using Aider-like search and replace, which has better performance than tool call based search and replace.
38
- - ⚡ **Shell optimisations**:
40
+ - ⚡ **Shell optimizations**:
39
41
  - Only one command is allowed to be run at a time, simplifying management and avoiding rogue processes. There's only single shell instance at any point of time.
40
42
  - Current working directory is always returned after any shell command to prevent AI from getting lost.
41
43
  - Command polling exits after a quick timeout to avoid slow feedback. However, status checking has wait tolerance based on fresh output streaming from a command. Both of these approach combined provides a good shell interaction experience.
42
44
  - ⚡ **Saving repo context in a single file**: Task checkpointing using "ContextSave" tool saves detailed context in a single file. Tasks can later be resumed in a new chat asking "Resume `task id`". The saved file can be used to do other kinds of knowledge transfer, such as taking help from another AI.
45
+ - ⚡ **Easily switch between various modes**:
46
+ - Ask it to run in 'architect' mode for planning. Inspired by adier's architect mode, work with Claude to come up with a plan first. Leads to better accuracy and prevents premature file editing.
47
+ - Ask it to run in 'code-writer' mode for code editing and project building. You can provide specific paths with wild card support to prevent other files getting edited.
48
+ - By default it runs in 'wcgw' mode that has no restrictions and full authorisation.
49
+ - More details in [Modes section](#modes)
43
50
 
44
51
  ## Top use cases examples
45
52
 
@@ -119,6 +126,16 @@ Then ask claude to execute shell commands, read files, edit files, run your code
119
126
  - You can in a new chat say "Resume '<task id>'", the AI should then call "Initialize" with the task id and load the context from there.
120
127
  - Or you can directly open the file generated and share it with another AI for help.
121
128
 
129
+ #### Modes
130
+ There are three built-in modes. You may ask Claude to run in one of the modes, like "Use 'architect' mode"
131
+ | **Mode** | **Description** | **Allows** | **Denies** | **Invoke prompt** |
132
+ |-----------------|-----------------------------------------------------------------------------|---------------------------------------------------------|----------------------------------------------|----------------------------------------------------------------------------------------------------|
133
+ | **Architect** | Designed for you to work with Claude to investigate and understand your repo. | Read-only commands | FileEdit and Write tool | Run in mode='architect' |
134
+ | **Code-writer** | For code writing and development | Specified path globs for editing or writing, specified commands | FileEdit for paths not matching specified glob, Write for paths not matching specified glob | Run in code writer mode, only 'tests/**' allowed, only uv command allowed |
135
+ | **wcgw** | Default mode with everything allowed | Everything | Nothing | No prompt, or "Run in wcgw mode" |
136
+
137
+ Note: in code-writer mode either all commands are allowed or none are allowed for now. If you give a list of allowed commands, Claude is instructed to run only those commands, but no actual check happens. (WIP)
138
+
122
139
  ### [Optional] Vs code extension
123
140
  https://marketplace.visualstudio.com/items?itemName=AmanRusia.wcgw
124
141
 
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  authors = [{ name = "Aman Rusia", email = "gapypi@arcfu.com" }]
3
3
  name = "wcgw"
4
- version = "2.8.0"
4
+ version = "2.8.2"
5
5
  description = "Shell and coding agent on claude and chatgpt"
6
6
  readme = "README.md"
7
7
  requires-python = ">=3.11, <3.13"
@@ -35,10 +35,10 @@ requires = ["hatchling"]
35
35
  build-backend = "hatchling.build"
36
36
 
37
37
  [tool.hatch.build.targets.wheel]
38
- packages = ["src/wcgw", "src/mcp_wcgw/src/mcp_wcgw"]
38
+ packages = ["src/wcgw", "src/mcp_wcgw_fork/src/mcp_wcgw"]
39
39
 
40
40
  [tool.hatch.build.targets.wheel.sources]
41
- "src/mcp_wcgw/src/mcp_wcgw" = "mcp_wcgw"
41
+ "src/mcp_wcgw_fork/src/mcp_wcgw" = "mcp_wcgw"
42
42
  "src/wcgw" = "wcgw"
43
43
 
44
44
  [project.scripts]
@@ -138,11 +138,11 @@ PROMPT = PROMPT_CONST
138
138
 
139
139
 
140
140
  def start_shell(is_restricted_mode: bool, initial_dir: str) -> pexpect.spawn: # type: ignore
141
- try:
142
- cmd = "/bin/bash"
143
- if is_restricted_mode:
144
- cmd += " -r"
141
+ cmd = "/bin/bash"
142
+ if is_restricted_mode:
143
+ cmd += " -r"
145
144
 
145
+ try:
146
146
  shell = pexpect.spawn(
147
147
  cmd,
148
148
  env={**os.environ, **{"PS1": PROMPT}}, # type: ignore[arg-type]
@@ -151,7 +151,8 @@ def start_shell(is_restricted_mode: bool, initial_dir: str) -> pexpect.spawn: #
151
151
  timeout=TIMEOUT,
152
152
  cwd=initial_dir,
153
153
  )
154
- shell.sendline(f"export PS1={PROMPT}")
154
+ shell.sendline(f"export PROMPT_COMMAND= PS1={PROMPT}") # Unset prompt command to avoid interfering
155
+ shell.expect(PROMPT, timeout=TIMEOUT)
155
156
  except Exception as e:
156
157
  console.print(traceback.format_exc())
157
158
  console.log(f"Error starting shell: {e}. Retrying without rc ...")
@@ -163,8 +164,9 @@ def start_shell(is_restricted_mode: bool, initial_dir: str) -> pexpect.spawn: #
163
164
  encoding="utf-8",
164
165
  timeout=TIMEOUT,
165
166
  )
167
+ shell.sendline(f"export PS1={PROMPT}")
168
+ shell.expect(PROMPT, timeout=TIMEOUT)
166
169
 
167
- shell.expect(PROMPT, timeout=TIMEOUT)
168
170
  shell.sendline("stty -icanon -echo")
169
171
  shell.expect(PROMPT, timeout=TIMEOUT)
170
172
  shell.sendline("set +o pipefail")
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