wcgw 2.8.10__tar.gz → 3.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.
- {wcgw-2.8.10 → wcgw-3.0.1}/.github/workflows/python-tests.yml +2 -2
- {wcgw-2.8.10 → wcgw-3.0.1}/.github/workflows/python-types.yml +1 -1
- {wcgw-2.8.10 → wcgw-3.0.1}/PKG-INFO +4 -3
- {wcgw-2.8.10 → wcgw-3.0.1}/README.md +2 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/gpt_action_json_schema.json +119 -169
- {wcgw-2.8.10 → wcgw-3.0.1}/gpt_instructions.txt +15 -23
- {wcgw-2.8.10 → wcgw-3.0.1}/pyproject.toml +5 -4
- {wcgw-2.8.10 → wcgw-3.0.1}/src/wcgw/__init__.py +1 -1
- wcgw-3.0.1/src/wcgw/client/bash_state/bash_state.py +788 -0
- wcgw-3.0.1/src/wcgw/client/encoder/__init__.py +47 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/wcgw/client/file_ops/diff_edit.py +52 -1
- wcgw-3.0.1/src/wcgw/client/mcp_server/Readme.md +3 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/wcgw/client/mcp_server/__init__.py +2 -2
- wcgw-3.0.1/src/wcgw/client/mcp_server/server.py +177 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/wcgw/client/modes.py +16 -21
- {wcgw-2.8.10 → wcgw-3.0.1}/src/wcgw/client/repo_ops/display_tree.py +1 -12
- wcgw-3.0.1/src/wcgw/client/tool_prompts.py +99 -0
- wcgw-3.0.1/src/wcgw/client/tools.py +761 -0
- wcgw-3.0.1/src/wcgw/relay/client.py +95 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/wcgw/relay/serve.py +4 -69
- {wcgw-2.8.10 → wcgw-3.0.1}/src/wcgw/types_.py +57 -63
- wcgw-3.0.1/src/wcgw_cli/anthropic_client.py +493 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/wcgw_cli/cli.py +0 -2
- wcgw-3.0.1/src/wcgw_cli/openai_client.py +411 -0
- wcgw-3.0.1/tests/test_edit.py +451 -0
- wcgw-3.0.1/tests/test_mcp_server.py +254 -0
- wcgw-3.0.1/tests/test_tools.py +783 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/uv.lock +230 -81
- wcgw-2.8.10/src/wcgw/client/computer_use.py +0 -435
- wcgw-2.8.10/src/wcgw/client/mcp_server/Readme.md +0 -89
- wcgw-2.8.10/src/wcgw/client/mcp_server/server.py +0 -337
- wcgw-2.8.10/src/wcgw/client/sys_utils.py +0 -41
- wcgw-2.8.10/src/wcgw/client/tools.py +0 -1561
- wcgw-2.8.10/src/wcgw_cli/anthropic_client.py +0 -590
- wcgw-2.8.10/src/wcgw_cli/openai_client.py +0 -467
- wcgw-2.8.10/tests/client/file_ops/test_diff_edit.py +0 -222
- wcgw-2.8.10/tests/client/file_ops/test_search_replace.py +0 -190
- wcgw-2.8.10/tests/client/repo_ops/__init__.py +0 -0
- wcgw-2.8.10/tests/client/repo_ops/test_display_tree.py +0 -152
- wcgw-2.8.10/tests/client/repo_ops/test_display_tree_simple.py +0 -62
- wcgw-2.8.10/tests/client/repo_ops/test_path_prob.py +0 -115
- wcgw-2.8.10/tests/client/repo_ops/test_repo_context.py +0 -150
- wcgw-2.8.10/tests/client/test_anthropic_client_utils.py +0 -107
- wcgw-2.8.10/tests/client/test_memory.py +0 -162
- wcgw-2.8.10/tests/client/test_openai_utils.py +0 -101
- wcgw-2.8.10/tests/client/test_tools_basic.py +0 -22
- wcgw-2.8.10/tests/client/test_tools_extended.py +0 -553
- wcgw-2.8.10/tests/client/test_tools_file_ops.py +0 -132
- wcgw-2.8.10/tests/client/test_tools_files.py +0 -121
- wcgw-2.8.10/tests/client/test_tools_shell.py +0 -505
- wcgw-2.8.10/tests/client/test_tools_validation.py +0 -251
- wcgw-2.8.10/tests/client/tools/__init__.py +0 -1
- wcgw-2.8.10/tests/client/tools/test_command_validation.py +0 -127
- wcgw-2.8.10/tests/client/tools/test_docker_operations.py +0 -39
- wcgw-2.8.10/tests/client/tools/test_error_handling.py +0 -22
- wcgw-2.8.10/tests/client/tools/test_error_handling_full.py +0 -152
- wcgw-2.8.10/tests/client/tools/test_execute_bash.py +0 -110
- wcgw-2.8.10/tests/client/tools/test_file_errors.py +0 -22
- wcgw-2.8.10/tests/client/tools/test_file_operations.py +0 -156
- wcgw-2.8.10/tests/client/tools/test_files/test1.py +0 -4
- wcgw-2.8.10/tests/client/tools/test_files/test2.py +0 -4
- wcgw-2.8.10/tests/client/tools/test_files/test_file.py +0 -1
- wcgw-2.8.10/tests/client/tools/test_full_coverage.py +0 -66
- wcgw-2.8.10/tests/client/tools/test_is_int.py +0 -25
- wcgw-2.8.10/tests/client/tools/test_knowledge_transfer.py +0 -155
- wcgw-2.8.10/tests/client/tools/test_large_blocks.py +0 -37
- wcgw-2.8.10/tests/client/tools/test_prompt_update.py +0 -48
- wcgw-2.8.10/tests/client/tools/test_render_terminal.py +0 -25
- wcgw-2.8.10/tests/client/tools/test_terminal_output.py +0 -187
- wcgw-2.8.10/tests/client/tools/test_terminal_output_full.py +0 -114
- wcgw-2.8.10/tests/client/tools/test_terminal_output_incremental.py +0 -46
- wcgw-2.8.10/tests/client/tools/test_terminal_output_raw.py +0 -57
- wcgw-2.8.10/tests/client/tools/test_terminal_sequence.py +0 -50
- wcgw-2.8.10/tests/client/tools/test_timeout_handling.py +0 -100
- wcgw-2.8.10/tests/client/tools/test_timeout_state.py +0 -30
- wcgw-2.8.10/tests/client/tools/test_user_interaction.py +0 -132
- wcgw-2.8.10/tests/client/tools/test_write_file.py +0 -118
- wcgw-2.8.10/tests/conftest.py +0 -12
- wcgw-2.8.10/tests/test_anthropic_client.py +0 -84
- wcgw-2.8.10/tests/test_basic.py +0 -69
- wcgw-2.8.10/tests/test_common.py +0 -111
- wcgw-2.8.10/tests/test_computer_use.py +0 -142
- wcgw-2.8.10/tests/test_computer_use_base.py +0 -123
- wcgw-2.8.10/tests/test_computer_use_shell.py +0 -120
- wcgw-2.8.10/tests/test_initialize.py +0 -325
- wcgw-2.8.10/tests/test_sys_utils.py +0 -102
- wcgw-2.8.10/tests/test_tools.py +0 -39
- {wcgw-2.8.10 → wcgw-3.0.1}/.github/workflows/python-publish.yml +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/.gitignore +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/.gitmodules +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/.python-version +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/.vscode/settings.json +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/Dockerfile +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/LICENSE +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/openai.md +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/.git +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/.github/workflows/main-checks.yml +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/.github/workflows/publish-pypi.yml +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/.github/workflows/pull-request-checks.yml +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/.github/workflows/shared.yml +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/.gitignore +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/.python-version +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/CODE_OF_CONDUCT.md +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/CONTRIBUTING.md +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/LICENSE +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/README.md +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/RELEASE.md +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/SECURITY.md +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/examples/README.md +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/examples/servers/simple-prompt/.python-version +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/examples/servers/simple-prompt/README.md +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/examples/servers/simple-prompt/mcp_simple_prompt/__init__.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/examples/servers/simple-prompt/mcp_simple_prompt/__main__.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/examples/servers/simple-prompt/mcp_simple_prompt/server.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/examples/servers/simple-prompt/pyproject.toml +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/examples/servers/simple-resource/.python-version +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/examples/servers/simple-resource/README.md +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/examples/servers/simple-resource/mcp_simple_resource/__init__.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/examples/servers/simple-resource/mcp_simple_resource/__main__.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/examples/servers/simple-resource/mcp_simple_resource/server.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/examples/servers/simple-resource/pyproject.toml +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/examples/servers/simple-tool/.python-version +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/examples/servers/simple-tool/README.md +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/examples/servers/simple-tool/mcp_simple_tool/__init__.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/examples/servers/simple-tool/mcp_simple_tool/__main__.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/examples/servers/simple-tool/mcp_simple_tool/server.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/examples/servers/simple-tool/pyproject.toml +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/pyproject.toml +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/__init__.py +0 -0
- {wcgw-2.8.10/src → wcgw-3.0.1/src/mcp_wcgw_fork/src/mcp_wcgw/client}/__init__.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/client/__main__.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/client/session.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/client/sse.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/client/stdio.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/py.typed +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/server/__init__.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/server/__main__.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/server/models.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/server/session.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/server/sse.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/server/stdio.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/server/websocket.py +0 -0
- {wcgw-2.8.10/src/mcp_wcgw_fork/src/mcp_wcgw/client → wcgw-3.0.1/src/mcp_wcgw_fork/src/mcp_wcgw/shared}/__init__.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/shared/context.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/shared/exceptions.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/shared/memory.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/shared/progress.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/shared/session.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/shared/version.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/src/mcp_wcgw/types.py +0 -0
- {wcgw-2.8.10/src/mcp_wcgw_fork/src/mcp_wcgw/shared → wcgw-3.0.1/src/mcp_wcgw_fork/tests}/__init__.py +0 -0
- {wcgw-2.8.10/src/mcp_wcgw_fork/tests → wcgw-3.0.1/src/mcp_wcgw_fork/tests/client}/__init__.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/tests/client/test_session.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/tests/client/test_stdio.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/tests/conftest.py +0 -0
- {wcgw-2.8.10/src/mcp_wcgw_fork/tests/client → wcgw-3.0.1/src/mcp_wcgw_fork/tests/server}/__init__.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/tests/server/test_session.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/tests/server/test_stdio.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/tests/shared/test_memory.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/tests/test_types.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/mcp_wcgw_fork/uv.lock +0 -0
- {wcgw-2.8.10/src/mcp_wcgw_fork/tests/server → wcgw-3.0.1/src/wcgw/client}/__init__.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/wcgw/client/common.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/wcgw/client/diff-instructions.txt +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/wcgw/client/file_ops/search_replace.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/wcgw/client/memory.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/wcgw/client/repo_ops/path_prob.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/wcgw/client/repo_ops/paths_model.vocab +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/wcgw/client/repo_ops/paths_tokens.model +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/wcgw/client/repo_ops/repo_context.py +0 -0
- /wcgw-2.8.10/src/wcgw/client/__init__.py → /wcgw-3.0.1/src/wcgw/py.typed +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/wcgw/relay/static/privacy.txt +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/wcgw_cli/__init__.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/wcgw_cli/__main__.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/src/wcgw_cli/openai_utils.py +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/static/claude-ss.jpg +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/static/computer-use.jpg +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/static/example.jpg +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/static/rocket-icon.png +0 -0
- {wcgw-2.8.10 → wcgw-3.0.1}/static/ss1.png +0 -0
|
@@ -13,7 +13,7 @@ jobs:
|
|
|
13
13
|
runs-on: ubuntu-latest
|
|
14
14
|
strategy:
|
|
15
15
|
matrix:
|
|
16
|
-
python-version: ["3.11", "3.12"]
|
|
16
|
+
python-version: ["3.11", "3.12", "3.13"]
|
|
17
17
|
steps:
|
|
18
18
|
- uses: actions/checkout@v4
|
|
19
19
|
with:
|
|
@@ -29,7 +29,7 @@ jobs:
|
|
|
29
29
|
- name: Run tests with coverage
|
|
30
30
|
run: |
|
|
31
31
|
uv pip install pytest pytest-cov
|
|
32
|
-
uv run pytest --cov=wcgw --cov-report=xml --cov-report=term-missing
|
|
32
|
+
uv run pytest --cov=wcgw --cov-report=xml --cov-report=term-missing
|
|
33
33
|
- name: Upload coverage reports to Codecov
|
|
34
34
|
uses: codecov/codecov-action@v4
|
|
35
35
|
if: success()
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wcgw
|
|
3
|
-
Version:
|
|
3
|
+
Version: 3.0.1
|
|
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>
|
|
7
7
|
License-File: LICENSE
|
|
8
|
-
Requires-Python:
|
|
8
|
+
Requires-Python: >=3.11
|
|
9
9
|
Requires-Dist: anthropic>=0.39.0
|
|
10
10
|
Requires-Dist: fastapi>=0.115.0
|
|
11
11
|
Requires-Dist: openai>=1.46.0
|
|
@@ -22,7 +22,6 @@ Requires-Dist: syntax-checker>=0.3.0
|
|
|
22
22
|
Requires-Dist: tokenizers>=0.21.0
|
|
23
23
|
Requires-Dist: toml>=0.10.2
|
|
24
24
|
Requires-Dist: typer>=0.12.5
|
|
25
|
-
Requires-Dist: types-pexpect>=4.9.0.20240806
|
|
26
25
|
Requires-Dist: uvicorn>=0.31.0
|
|
27
26
|
Requires-Dist: websockets>=13.1
|
|
28
27
|
Description-Content-Type: text/markdown
|
|
@@ -103,6 +102,8 @@ First install `uv` using homebrew `brew install uv`
|
|
|
103
102
|
|
|
104
103
|
Then update `claude_desktop_config.json` (~/Library/Application Support/Claude/claude_desktop_config.json)
|
|
105
104
|
|
|
105
|
+
If it doesn't exist, you can just `touch ~/Library/Application\ Support/Claude/claude_desktop_config.json` or create the file.
|
|
106
|
+
|
|
106
107
|
```json
|
|
107
108
|
{
|
|
108
109
|
"mcpServers": {
|
|
@@ -74,6 +74,8 @@ First install `uv` using homebrew `brew install uv`
|
|
|
74
74
|
|
|
75
75
|
Then update `claude_desktop_config.json` (~/Library/Application Support/Claude/claude_desktop_config.json)
|
|
76
76
|
|
|
77
|
+
If it doesn't exist, you can just `touch ~/Library/Application\ Support/Claude/claude_desktop_config.json` or create the file.
|
|
78
|
+
|
|
77
79
|
```json
|
|
78
80
|
{
|
|
79
81
|
"mcpServers": {
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
},
|
|
7
7
|
"servers": [
|
|
8
8
|
{
|
|
9
|
-
"url": "https://
|
|
9
|
+
"url": "https://7781-2401-4900-1c2d-12ae-c55d-45dc-459-c089.ngrok-free.app"
|
|
10
10
|
}
|
|
11
11
|
],
|
|
12
12
|
"paths": {
|
|
@@ -90,46 +90,6 @@
|
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
},
|
|
93
|
-
"/v1/reset_shell": {
|
|
94
|
-
"post": {
|
|
95
|
-
"x-openai-isConsequential": false,
|
|
96
|
-
"summary": "Reset Shell",
|
|
97
|
-
"operationId": "reset_shell_v1_reset_shell_post",
|
|
98
|
-
"requestBody": {
|
|
99
|
-
"content": {
|
|
100
|
-
"application/json": {
|
|
101
|
-
"schema": {
|
|
102
|
-
"$ref": "#/components/schemas/ResetShellWithUUID"
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
"required": true
|
|
107
|
-
},
|
|
108
|
-
"responses": {
|
|
109
|
-
"200": {
|
|
110
|
-
"description": "Successful Response",
|
|
111
|
-
"content": {
|
|
112
|
-
"application/json": {
|
|
113
|
-
"schema": {
|
|
114
|
-
"type": "string",
|
|
115
|
-
"title": "Response Reset Shell V1 Reset Shell Post"
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
},
|
|
120
|
-
"422": {
|
|
121
|
-
"description": "Validation Error",
|
|
122
|
-
"content": {
|
|
123
|
-
"application/json": {
|
|
124
|
-
"schema": {
|
|
125
|
-
"$ref": "#/components/schemas/HTTPValidationError"
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
},
|
|
133
93
|
"/v1/bash_command": {
|
|
134
94
|
"post": {
|
|
135
95
|
"x-openai-isConsequential": false,
|
|
@@ -170,46 +130,6 @@
|
|
|
170
130
|
}
|
|
171
131
|
}
|
|
172
132
|
},
|
|
173
|
-
"/v1/bash_interaction": {
|
|
174
|
-
"post": {
|
|
175
|
-
"x-openai-isConsequential": false,
|
|
176
|
-
"summary": "Bash Interaction",
|
|
177
|
-
"operationId": "bash_interaction_v1_bash_interaction_post",
|
|
178
|
-
"requestBody": {
|
|
179
|
-
"content": {
|
|
180
|
-
"application/json": {
|
|
181
|
-
"schema": {
|
|
182
|
-
"$ref": "#/components/schemas/BashInteractionWithUUID"
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
},
|
|
186
|
-
"required": true
|
|
187
|
-
},
|
|
188
|
-
"responses": {
|
|
189
|
-
"200": {
|
|
190
|
-
"description": "Successful Response",
|
|
191
|
-
"content": {
|
|
192
|
-
"application/json": {
|
|
193
|
-
"schema": {
|
|
194
|
-
"type": "string",
|
|
195
|
-
"title": "Response Bash Interaction V1 Bash Interaction Post"
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
},
|
|
200
|
-
"422": {
|
|
201
|
-
"description": "Validation Error",
|
|
202
|
-
"content": {
|
|
203
|
-
"application/json": {
|
|
204
|
-
"schema": {
|
|
205
|
-
"$ref": "#/components/schemas/HTTPValidationError"
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
},
|
|
213
133
|
"/v1/read_file": {
|
|
214
134
|
"post": {
|
|
215
135
|
"x-openai-isConsequential": false,
|
|
@@ -333,81 +253,6 @@
|
|
|
333
253
|
},
|
|
334
254
|
"components": {
|
|
335
255
|
"schemas": {
|
|
336
|
-
"BashInteractionWithUUID": {
|
|
337
|
-
"properties": {
|
|
338
|
-
"send_text": {
|
|
339
|
-
"anyOf": [
|
|
340
|
-
{
|
|
341
|
-
"type": "string"
|
|
342
|
-
},
|
|
343
|
-
{
|
|
344
|
-
"type": "null"
|
|
345
|
-
}
|
|
346
|
-
],
|
|
347
|
-
"title": "Send Text"
|
|
348
|
-
},
|
|
349
|
-
"send_specials": {
|
|
350
|
-
"anyOf": [
|
|
351
|
-
{
|
|
352
|
-
"items": {
|
|
353
|
-
"type": "string",
|
|
354
|
-
"enum": [
|
|
355
|
-
"Key-up",
|
|
356
|
-
"Key-down",
|
|
357
|
-
"Key-left",
|
|
358
|
-
"Key-right",
|
|
359
|
-
"Enter",
|
|
360
|
-
"Ctrl-c",
|
|
361
|
-
"Ctrl-d",
|
|
362
|
-
"Ctrl-z"
|
|
363
|
-
]
|
|
364
|
-
},
|
|
365
|
-
"type": "array"
|
|
366
|
-
},
|
|
367
|
-
{
|
|
368
|
-
"type": "null"
|
|
369
|
-
}
|
|
370
|
-
],
|
|
371
|
-
"title": "Send Specials"
|
|
372
|
-
},
|
|
373
|
-
"send_ascii": {
|
|
374
|
-
"anyOf": [
|
|
375
|
-
{
|
|
376
|
-
"items": {
|
|
377
|
-
"type": "integer"
|
|
378
|
-
},
|
|
379
|
-
"type": "array"
|
|
380
|
-
},
|
|
381
|
-
{
|
|
382
|
-
"type": "null"
|
|
383
|
-
}
|
|
384
|
-
],
|
|
385
|
-
"title": "Send Ascii"
|
|
386
|
-
},
|
|
387
|
-
"wait_for_seconds": {
|
|
388
|
-
"anyOf": [
|
|
389
|
-
{
|
|
390
|
-
"type": "integer"
|
|
391
|
-
},
|
|
392
|
-
{
|
|
393
|
-
"type": "null"
|
|
394
|
-
}
|
|
395
|
-
],
|
|
396
|
-
"title": "Wait For Seconds"
|
|
397
|
-
},
|
|
398
|
-
"user_id": {
|
|
399
|
-
"type": "string",
|
|
400
|
-
"format": "uuid",
|
|
401
|
-
"title": "User Id"
|
|
402
|
-
}
|
|
403
|
-
},
|
|
404
|
-
"additionalProperties": false,
|
|
405
|
-
"type": "object",
|
|
406
|
-
"required": [
|
|
407
|
-
"user_id"
|
|
408
|
-
],
|
|
409
|
-
"title": "BashInteractionWithUUID"
|
|
410
|
-
},
|
|
411
256
|
"CodeWriterMode": {
|
|
412
257
|
"properties": {
|
|
413
258
|
"allowed_globs": {
|
|
@@ -449,11 +294,52 @@
|
|
|
449
294
|
],
|
|
450
295
|
"title": "CodeWriterMode"
|
|
451
296
|
},
|
|
452
|
-
"
|
|
297
|
+
"Command": {
|
|
453
298
|
"properties": {
|
|
454
299
|
"command": {
|
|
455
300
|
"type": "string",
|
|
456
301
|
"title": "Command"
|
|
302
|
+
}
|
|
303
|
+
},
|
|
304
|
+
"additionalProperties": false,
|
|
305
|
+
"type": "object",
|
|
306
|
+
"required": [
|
|
307
|
+
"command"
|
|
308
|
+
],
|
|
309
|
+
"title": "Command"
|
|
310
|
+
},
|
|
311
|
+
"CommandWithUUID": {
|
|
312
|
+
"properties": {
|
|
313
|
+
"action": {
|
|
314
|
+
"anyOf": [
|
|
315
|
+
{
|
|
316
|
+
"$ref": "#/components/schemas/Command"
|
|
317
|
+
},
|
|
318
|
+
{
|
|
319
|
+
"$ref": "#/components/schemas/StatusCheck"
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
"$ref": "#/components/schemas/SendText"
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
"$ref": "#/components/schemas/SendSpecials"
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
"$ref": "#/components/schemas/SendAscii"
|
|
329
|
+
}
|
|
330
|
+
],
|
|
331
|
+
"title": "Action"
|
|
332
|
+
},
|
|
333
|
+
"wait_for_seconds": {
|
|
334
|
+
"anyOf": [
|
|
335
|
+
{
|
|
336
|
+
"type": "number"
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"type": "null"
|
|
340
|
+
}
|
|
341
|
+
],
|
|
342
|
+
"title": "Wait For Seconds"
|
|
457
343
|
},
|
|
458
344
|
"user_id": {
|
|
459
345
|
"type": "string",
|
|
@@ -461,9 +347,10 @@
|
|
|
461
347
|
"title": "User Id"
|
|
462
348
|
}
|
|
463
349
|
},
|
|
350
|
+
"additionalProperties": false,
|
|
464
351
|
"type": "object",
|
|
465
352
|
"required": [
|
|
466
|
-
"
|
|
353
|
+
"action",
|
|
467
354
|
"user_id"
|
|
468
355
|
],
|
|
469
356
|
"title": "CommandWithUUID"
|
|
@@ -546,6 +433,16 @@
|
|
|
546
433
|
},
|
|
547
434
|
"InitializeWithUUID": {
|
|
548
435
|
"properties": {
|
|
436
|
+
"type": {
|
|
437
|
+
"type": "string",
|
|
438
|
+
"enum": [
|
|
439
|
+
"first_call",
|
|
440
|
+
"user_asked_mode_change",
|
|
441
|
+
"reset_shell",
|
|
442
|
+
"user_asked_change_workspace"
|
|
443
|
+
],
|
|
444
|
+
"title": "Type"
|
|
445
|
+
},
|
|
549
446
|
"any_workspace_path": {
|
|
550
447
|
"type": "string",
|
|
551
448
|
"title": "Any Workspace Path"
|
|
@@ -589,6 +486,7 @@
|
|
|
589
486
|
"additionalProperties": false,
|
|
590
487
|
"type": "object",
|
|
591
488
|
"required": [
|
|
489
|
+
"type",
|
|
592
490
|
"any_workspace_path",
|
|
593
491
|
"initial_files_to_read",
|
|
594
492
|
"task_id_to_resume",
|
|
@@ -620,26 +518,78 @@
|
|
|
620
518
|
],
|
|
621
519
|
"title": "ReadFileWithUUID"
|
|
622
520
|
},
|
|
623
|
-
"
|
|
521
|
+
"SendAscii": {
|
|
624
522
|
"properties": {
|
|
625
|
-
"
|
|
523
|
+
"send_ascii": {
|
|
524
|
+
"items": {
|
|
525
|
+
"type": "integer"
|
|
526
|
+
},
|
|
527
|
+
"type": "array",
|
|
528
|
+
"title": "Send Ascii"
|
|
529
|
+
}
|
|
530
|
+
},
|
|
531
|
+
"additionalProperties": false,
|
|
532
|
+
"type": "object",
|
|
533
|
+
"required": [
|
|
534
|
+
"send_ascii"
|
|
535
|
+
],
|
|
536
|
+
"title": "SendAscii"
|
|
537
|
+
},
|
|
538
|
+
"SendSpecials": {
|
|
539
|
+
"properties": {
|
|
540
|
+
"send_specials": {
|
|
541
|
+
"items": {
|
|
542
|
+
"type": "string",
|
|
543
|
+
"enum": [
|
|
544
|
+
"Enter",
|
|
545
|
+
"Key-up",
|
|
546
|
+
"Key-down",
|
|
547
|
+
"Key-left",
|
|
548
|
+
"Key-right",
|
|
549
|
+
"Ctrl-c",
|
|
550
|
+
"Ctrl-d",
|
|
551
|
+
"Ctrl-z"
|
|
552
|
+
]
|
|
553
|
+
},
|
|
554
|
+
"type": "array",
|
|
555
|
+
"title": "Send Specials"
|
|
556
|
+
}
|
|
557
|
+
},
|
|
558
|
+
"additionalProperties": false,
|
|
559
|
+
"type": "object",
|
|
560
|
+
"required": [
|
|
561
|
+
"send_specials"
|
|
562
|
+
],
|
|
563
|
+
"title": "SendSpecials"
|
|
564
|
+
},
|
|
565
|
+
"SendText": {
|
|
566
|
+
"properties": {
|
|
567
|
+
"send_text": {
|
|
568
|
+
"type": "string",
|
|
569
|
+
"title": "Send Text"
|
|
570
|
+
}
|
|
571
|
+
},
|
|
572
|
+
"additionalProperties": false,
|
|
573
|
+
"type": "object",
|
|
574
|
+
"required": [
|
|
575
|
+
"send_text"
|
|
576
|
+
],
|
|
577
|
+
"title": "SendText"
|
|
578
|
+
},
|
|
579
|
+
"StatusCheck": {
|
|
580
|
+
"properties": {
|
|
581
|
+
"status_check": {
|
|
626
582
|
"type": "boolean",
|
|
627
583
|
"const": true,
|
|
628
|
-
"title": "
|
|
629
|
-
},
|
|
630
|
-
"user_id": {
|
|
631
|
-
"type": "string",
|
|
632
|
-
"format": "uuid",
|
|
633
|
-
"title": "User Id"
|
|
584
|
+
"title": "Status Check"
|
|
634
585
|
}
|
|
635
586
|
},
|
|
636
587
|
"additionalProperties": false,
|
|
637
588
|
"type": "object",
|
|
638
589
|
"required": [
|
|
639
|
-
"
|
|
640
|
-
"user_id"
|
|
590
|
+
"status_check"
|
|
641
591
|
],
|
|
642
|
-
"title": "
|
|
592
|
+
"title": "StatusCheck"
|
|
643
593
|
},
|
|
644
594
|
"ValidationError": {
|
|
645
595
|
"properties": {
|
|
@@ -9,25 +9,27 @@ Instructions:
|
|
|
9
9
|
- Do not install new tools/packages before ensuring no such tools/package or an alternative already exists.
|
|
10
10
|
|
|
11
11
|
Instructions for `Initialize`:
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
12
|
+
- Always call this at the start of the conversation before using any of the shell tools from wcgw.
|
|
13
|
+
- Use `any_workspace_path` to initialize the shell in the appropriate project directory.
|
|
14
|
+
- If the user has mentioned a workspace or project root or any other file or folder use it to set `any_workspace_path`.
|
|
15
|
+
- If user has mentioned any files use `initial_files_to_read` to read, use absolute paths only.
|
|
16
|
+
- By default use mode "wcgw"
|
|
17
|
+
- In "code-writer" mode, set the commands and globs which user asked to set, otherwise use 'all'.
|
|
18
|
+
- Use type="first_call" if it's the first call to this tool.
|
|
19
|
+
- Use type="user_asked_mode_change" if in a conversation user has asked to change mode.
|
|
20
|
+
- Use type="reset_shell" if in a conversation shell is not working after multiple tries.
|
|
21
|
+
- Use type="user_asked_change_workspace" if in a conversation user asked to change workspace
|
|
22
22
|
|
|
23
23
|
Instructions for `BashCommand`:
|
|
24
24
|
- Execute a bash command. This is stateful (beware with subsequent calls).
|
|
25
|
-
- Do not use interactive commands like nano. Prefer writing simpler commands.
|
|
26
25
|
- Status of the command and the current working directory will always be returned at the end.
|
|
27
|
-
- Optionally `exit shell has restarted` is the output, in which case environment resets, you can run fresh commands.
|
|
28
26
|
- The first or the last line might be `(...truncated)` if the output is too long.
|
|
29
|
-
- The control will return to you in 5 seconds regardless of the status. For heavy commands, keep checking status using BashInteraction till they are finished.
|
|
30
27
|
- Run long running commands in background using screen instead of "&".
|
|
28
|
+
- Only one command allowed at a time, you need to wait for the first command to finish before running the next one.
|
|
29
|
+
- In order to check status of previous command, use `status_check` with empty command argument.
|
|
30
|
+
- Programs don't hang easily, so most likely explanation for no output is usually that the program is still running, and you need to check status again.
|
|
31
|
+
- Do not send Ctrl-c before checking for status till 10 minutes or whatever is appropriate for the program to finish.
|
|
32
|
+
- Use SendText or SendSpecials or SendAscii to interact with running command.
|
|
31
33
|
|
|
32
34
|
Instructions for `Read Files`
|
|
33
35
|
- Read full file content of one or more files.
|
|
@@ -38,16 +40,6 @@ Instructions for `Write if Empty`
|
|
|
38
40
|
- Provide absolute file path only.
|
|
39
41
|
- For editing existing files, use FileEdit.
|
|
40
42
|
|
|
41
|
-
Instructions for `BashInteraction`
|
|
42
|
-
- Interact with running program using this tool
|
|
43
|
-
- Special keys like arrows, interrupts, enter, etc.
|
|
44
|
-
- Send text input to the running program.
|
|
45
|
-
- Send send_specials=["Enter"] to recheck status of a running program.
|
|
46
|
-
- Only one of send_text, send_specials, send_ascii should be provided.
|
|
47
|
-
|
|
48
|
-
Instructions for `ResetShell`
|
|
49
|
-
- Resets the shell. Use only if all interrupts and prompt reset attempts have failed repeatedly.
|
|
50
|
-
|
|
51
43
|
Instructions for `ContextSave`
|
|
52
44
|
- Saves provided description and file contents of all the relevant file paths or globs in a single text file.
|
|
53
45
|
- Provide random unqiue id or whatever user provided.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
authors = [{ name = "Aman Rusia", email = "gapypi@arcfu.com" }]
|
|
3
3
|
name = "wcgw"
|
|
4
|
-
version = "
|
|
4
|
+
version = "3.0.1"
|
|
5
5
|
description = "Shell and coding agent on claude and chatgpt"
|
|
6
6
|
readme = "README.md"
|
|
7
|
-
requires-python = ">=3.11
|
|
7
|
+
requires-python = ">=3.11"
|
|
8
8
|
dependencies = [
|
|
9
9
|
"openai>=1.46.0",
|
|
10
10
|
"typer>=0.12.5",
|
|
@@ -12,7 +12,6 @@ dependencies = [
|
|
|
12
12
|
"python-dotenv>=1.0.1",
|
|
13
13
|
"pexpect>=4.9.0",
|
|
14
14
|
"shell>=1.0.1",
|
|
15
|
-
"types-pexpect>=4.9.0.20240806",
|
|
16
15
|
"toml>=0.10.2",
|
|
17
16
|
"petname>=2.6",
|
|
18
17
|
"pyte>=0.8.2",
|
|
@@ -58,8 +57,10 @@ dev-dependencies = [
|
|
|
58
57
|
"pytest>=8.0.0",
|
|
59
58
|
"pytest-cov>=4.1.0",
|
|
60
59
|
"line-profiler>=4.2.0",
|
|
60
|
+
"pytest-asyncio>=0.25.3",
|
|
61
|
+
"types-pexpect>=4.9.0.20241208",
|
|
61
62
|
]
|
|
62
63
|
|
|
63
64
|
[tool.pytest.ini_options]
|
|
64
|
-
addopts = "--cov=wcgw --cov-report=term-missing
|
|
65
|
+
addopts = "--cov=wcgw --cov-report=term-missing --cov-report=html"
|
|
65
66
|
testpaths = ["tests"]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
from .client.mcp_server import main as mcp_server
|
|
2
|
-
from .client
|
|
2
|
+
from .relay.client import run as listen
|