wcgw 5.2.0__tar.gz → 5.3.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-5.2.0 → wcgw-5.3.1}/PKG-INFO +3 -3
- {wcgw-5.2.0 → wcgw-5.3.1}/README.md +1 -1
- {wcgw-5.2.0 → wcgw-5.3.1}/pyproject.toml +2 -2
- wcgw-5.3.1/src/wcgw/client/diff-instructions.txt +72 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/tool_prompts.py +0 -1
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/tools.py +18 -14
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/types_.py +4 -1
- {wcgw-5.2.0 → wcgw-5.3.1}/uv.lock +53 -53
- wcgw-5.2.0/src/wcgw/client/diff-instructions.txt +0 -72
- {wcgw-5.2.0 → wcgw-5.3.1}/.github/workflows/python-publish.yml +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/.github/workflows/python-tests.yml +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/.github/workflows/python-types.yml +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/.gitignore +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/.gitmodules +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/.python-version +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/.vscode/settings.json +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/CLAUDE.md +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/Dockerfile +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/LICENSE +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/__init__.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/__init__.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/bash_state/bash_state.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/bash_state/parser/__init__.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/bash_state/parser/bash_statement_parser.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/common.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/encoder/__init__.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/file_ops/diff_edit.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/file_ops/extensions.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/file_ops/search_replace.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/mcp_server/Readme.md +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/mcp_server/__init__.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/mcp_server/server.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/memory.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/modes.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/repo_ops/display_tree.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/repo_ops/file_stats.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/repo_ops/path_prob.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/repo_ops/paths_model.vocab +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/repo_ops/paths_tokens.model +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/client/repo_ops/repo_context.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw/py.typed +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw_cli/__init__.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw_cli/__main__.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw_cli/anthropic_client.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw_cli/cli.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw_cli/openai_client.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/src/wcgw_cli/openai_utils.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/static/claude-ss.jpg +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/static/computer-use.jpg +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/static/example.jpg +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/static/rocket-icon.png +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/static/ss1.png +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/static/workflow-demo.gif +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/tests/test_bash_parser.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/tests/test_bash_parser_complex.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/tests/test_edit.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/tests/test_file_range_tracking.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/tests/test_mcp_server.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/tests/test_readfiles.py +0 -0
- {wcgw-5.2.0 → wcgw-5.3.1}/tests/test_tools.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: wcgw
|
|
3
|
-
Version: 5.
|
|
3
|
+
Version: 5.3.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>
|
|
@@ -19,7 +19,7 @@ Requires-Dist: pyte>=0.8.2
|
|
|
19
19
|
Requires-Dist: python-dotenv>=1.0.1
|
|
20
20
|
Requires-Dist: rich>=13.8.1
|
|
21
21
|
Requires-Dist: semantic-version>=2.10.0
|
|
22
|
-
Requires-Dist: syntax-checker==0.4.
|
|
22
|
+
Requires-Dist: syntax-checker==0.4.0
|
|
23
23
|
Requires-Dist: tokenizers>=0.21.0
|
|
24
24
|
Requires-Dist: toml>=0.10.2
|
|
25
25
|
Requires-Dist: tree-sitter-bash>=0.23.3
|
|
@@ -41,7 +41,6 @@ wcgw is an MCP server with tightly integrated shell and code editing tools.
|
|
|
41
41
|
[](https://github.com/rusiaaman/wcgw/actions/workflows/python-types.yml)
|
|
42
42
|
[](https://github.com/rusiaaman/wcgw/actions/workflows/python-publish.yml)
|
|
43
43
|
[](https://codecov.io/gh/rusiaaman/wcgw)
|
|
44
|
-
[](https://www.reddit.com/r/wcgw_mcp/)
|
|
45
44
|
|
|
46
45
|
## Demo
|
|
47
46
|
|
|
@@ -87,6 +86,7 @@ wcgw is an MCP server with tightly integrated shell and code editing tools.
|
|
|
87
86
|
- By default it runs in 'wcgw' mode that has no restrictions and full authorisation.
|
|
88
87
|
- More details in [Modes section](#modes)
|
|
89
88
|
- ⚡ **Runs in multiplex terminal** Run `screen -x` to attach to the terminal that the AI runs commands on. See history or interrupt process or interact with the same terminal that AI uses.
|
|
89
|
+
- ⚡ **Automatically load CLAUDE.md** Loads "CLAUDE.md" file in project root and sends as instructions during initialisation. Instructions in a global "~/.wcgw/CLAUDE.md" file are loaded and added along with project specific CLAUDE.md. The file name is case sensitive.
|
|
90
90
|
|
|
91
91
|
## Top use cases examples
|
|
92
92
|
|
|
@@ -10,7 +10,6 @@ wcgw is an MCP server with tightly integrated shell and code editing tools.
|
|
|
10
10
|
[](https://github.com/rusiaaman/wcgw/actions/workflows/python-types.yml)
|
|
11
11
|
[](https://github.com/rusiaaman/wcgw/actions/workflows/python-publish.yml)
|
|
12
12
|
[](https://codecov.io/gh/rusiaaman/wcgw)
|
|
13
|
-
[](https://www.reddit.com/r/wcgw_mcp/)
|
|
14
13
|
|
|
15
14
|
## Demo
|
|
16
15
|
|
|
@@ -56,6 +55,7 @@ wcgw is an MCP server with tightly integrated shell and code editing tools.
|
|
|
56
55
|
- By default it runs in 'wcgw' mode that has no restrictions and full authorisation.
|
|
57
56
|
- More details in [Modes section](#modes)
|
|
58
57
|
- ⚡ **Runs in multiplex terminal** Run `screen -x` to attach to the terminal that the AI runs commands on. See history or interrupt process or interact with the same terminal that AI uses.
|
|
58
|
+
- ⚡ **Automatically load CLAUDE.md** Loads "CLAUDE.md" file in project root and sends as instructions during initialisation. Instructions in a global "~/.wcgw/CLAUDE.md" file are loaded and added along with project specific CLAUDE.md. The file name is case sensitive.
|
|
59
59
|
|
|
60
60
|
## Top use cases examples
|
|
61
61
|
|
|
@@ -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
|
+
version = "5.3.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"
|
|
@@ -22,7 +22,7 @@ dependencies = [
|
|
|
22
22
|
"anthropic>=0.39.0",
|
|
23
23
|
"tokenizers>=0.21.0",
|
|
24
24
|
"pygit2>=1.16.0",
|
|
25
|
-
"syntax-checker==0.4.
|
|
25
|
+
"syntax-checker==0.4.0",
|
|
26
26
|
"psutil>=7.0.0",
|
|
27
27
|
"tree-sitter>=0.24.0",
|
|
28
28
|
"tree-sitter-bash>=0.23.3",
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
|
|
2
|
+
Instructions for editing files.
|
|
3
|
+
# Example
|
|
4
|
+
## Input file
|
|
5
|
+
```
|
|
6
|
+
import numpy as np
|
|
7
|
+
from impls import impl1, impl2
|
|
8
|
+
|
|
9
|
+
def hello():
|
|
10
|
+
"print a greeting"
|
|
11
|
+
|
|
12
|
+
print("hello")
|
|
13
|
+
|
|
14
|
+
def call_hello():
|
|
15
|
+
"call hello"
|
|
16
|
+
|
|
17
|
+
hello()
|
|
18
|
+
print("Called")
|
|
19
|
+
impl1()
|
|
20
|
+
hello()
|
|
21
|
+
impl2()
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
## Edit format on the input file
|
|
25
|
+
```
|
|
26
|
+
<<<<<<< SEARCH
|
|
27
|
+
from impls import impl1, impl2
|
|
28
|
+
=======
|
|
29
|
+
from impls import impl1, impl2
|
|
30
|
+
from hello import hello as hello_renamed
|
|
31
|
+
>>>>>>> REPLACE
|
|
32
|
+
<<<<<<< SEARCH
|
|
33
|
+
def hello():
|
|
34
|
+
"print a greeting"
|
|
35
|
+
|
|
36
|
+
print("hello")
|
|
37
|
+
=======
|
|
38
|
+
>>>>>>> REPLACE
|
|
39
|
+
<<<<<<< SEARCH
|
|
40
|
+
def call_hello():
|
|
41
|
+
"call hello"
|
|
42
|
+
|
|
43
|
+
hello()
|
|
44
|
+
=======
|
|
45
|
+
def call_hello_renamed():
|
|
46
|
+
"call hello renamed"
|
|
47
|
+
|
|
48
|
+
hello_renamed()
|
|
49
|
+
>>>>>>> REPLACE
|
|
50
|
+
<<<<<<< SEARCH
|
|
51
|
+
impl1()
|
|
52
|
+
hello()
|
|
53
|
+
impl2()
|
|
54
|
+
=======
|
|
55
|
+
impl1()
|
|
56
|
+
hello_renamed()
|
|
57
|
+
impl2()
|
|
58
|
+
>>>>>>> REPLACE
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
# *SEARCH/REPLACE block* Rules:
|
|
62
|
+
|
|
63
|
+
- Every "SEARCH" section must *EXACTLY MATCH* the existing file content, character for character, including all comments, docstrings, whitespaces, etc.
|
|
64
|
+
- In a single call the edit blocks should be constructed from top to bottom of the file in a sequence.
|
|
65
|
+
- An edit block can't edit over a previous edit in the same tool call.
|
|
66
|
+
- Including multiple unique *SEARCH/REPLACE* blocks if needed.
|
|
67
|
+
- Include enough and only enough lines in each SEARCH section to uniquely match each set of lines that need to change.
|
|
68
|
+
- Keep *SEARCH/REPLACE* blocks concise.
|
|
69
|
+
- Break large *SEARCH/REPLACE* blocks into a series of smaller blocks that each change a small portion of the file.
|
|
70
|
+
- Include just the changing lines, and a few surrounding lines (0-3 lines) if needed for uniqueness.
|
|
71
|
+
- Other than for uniqueness, avoid including those lines which do not change in search (and replace) blocks. Target 0-3 non trivial extra lines per block.
|
|
72
|
+
- Preserve leading spaces and indentations in both SEARCH and REPLACE blocks.
|
|
@@ -57,7 +57,6 @@ TOOL_PROMPTS = [
|
|
|
57
57
|
- Read full file content of one or more files.
|
|
58
58
|
- Provide absolute paths only (~ allowed)
|
|
59
59
|
- Only if the task requires line numbers understanding:
|
|
60
|
-
- You may populate "show_line_numbers_reason" with your reason, by default null/empty means no line numbers are shown.
|
|
61
60
|
- You may extract a range of lines. E.g., `/path/to/file:1-10` for lines 1-10. You can drop start or end like `/path/to/file:1-` or `/path/to/file:-10`
|
|
62
61
|
""",
|
|
63
62
|
annotations=ToolAnnotations(readOnlyHint=True, openWorldHint=False),
|
|
@@ -263,8 +263,21 @@ def initialize(
|
|
|
263
263
|
)
|
|
264
264
|
initial_files_context = f"---\n# Requested files\n{initial_files}\n---\n"
|
|
265
265
|
|
|
266
|
-
# Check for CLAUDE.md
|
|
266
|
+
# Check for global CLAUDE.md and workspace CLAUDE.md
|
|
267
267
|
alignment_context = ""
|
|
268
|
+
|
|
269
|
+
# First check for global CLAUDE.md in ~/.wcgw/CLAUDE.md
|
|
270
|
+
global_alignment_file_path = os.path.join(expanduser("~"), ".wcgw", "CLAUDE.md")
|
|
271
|
+
if os.path.exists(global_alignment_file_path):
|
|
272
|
+
try:
|
|
273
|
+
with open(global_alignment_file_path, "r") as f:
|
|
274
|
+
global_alignment_content = f.read()
|
|
275
|
+
alignment_context += f"---\n# Important guidelines from the user\n```\n{global_alignment_content}\n```\n---\n\n"
|
|
276
|
+
except Exception:
|
|
277
|
+
# Handle any errors when reading the global file
|
|
278
|
+
pass
|
|
279
|
+
|
|
280
|
+
# Then check for workspace-specific CLAUDE.md
|
|
268
281
|
if folder_to_start:
|
|
269
282
|
alignment_file_path = os.path.join(folder_to_start, "CLAUDE.md")
|
|
270
283
|
if os.path.exists(alignment_file_path):
|
|
@@ -272,10 +285,10 @@ def initialize(
|
|
|
272
285
|
# Read the CLAUDE.md file content
|
|
273
286
|
with open(alignment_file_path, "r") as f:
|
|
274
287
|
alignment_content = f.read()
|
|
275
|
-
alignment_context
|
|
288
|
+
alignment_context += f"---\n# CLAUDE.md - user shared project guidelines to follow\n```\n{alignment_content}\n```\n---\n\n"
|
|
276
289
|
except Exception:
|
|
277
290
|
# Handle any errors when reading the file
|
|
278
|
-
|
|
291
|
+
pass
|
|
279
292
|
|
|
280
293
|
uname_sysname = os.uname().sysname
|
|
281
294
|
uname_machine = os.uname().machine
|
|
@@ -604,15 +617,12 @@ def write_file(
|
|
|
604
617
|
paths_: list[str] = []
|
|
605
618
|
for start, end in unread_ranges:
|
|
606
619
|
paths_.append(path_ + ":" + f"{start}-{end}")
|
|
607
|
-
paths_readfiles = ReadFiles(
|
|
608
|
-
file_paths=paths_, show_line_numbers_reason=""
|
|
609
|
-
)
|
|
620
|
+
paths_readfiles = ReadFiles(file_paths=paths_)
|
|
610
621
|
readfiles, file_ranges_dict, truncated = read_files(
|
|
611
622
|
paths_readfiles.file_paths,
|
|
612
623
|
coding_max_tokens,
|
|
613
624
|
noncoding_max_tokens,
|
|
614
625
|
context,
|
|
615
|
-
show_line_numbers=False,
|
|
616
626
|
start_line_nums=paths_readfiles.start_line_nums,
|
|
617
627
|
end_line_nums=paths_readfiles.end_line_nums,
|
|
618
628
|
)
|
|
@@ -1001,7 +1011,6 @@ def get_tool_output(
|
|
|
1001
1011
|
coding_max_tokens,
|
|
1002
1012
|
noncoding_max_tokens,
|
|
1003
1013
|
context,
|
|
1004
|
-
bool(arg.show_line_numbers_reason),
|
|
1005
1014
|
arg.start_line_nums,
|
|
1006
1015
|
arg.end_line_nums,
|
|
1007
1016
|
)
|
|
@@ -1123,7 +1132,6 @@ def read_files(
|
|
|
1123
1132
|
coding_max_tokens: Optional[int],
|
|
1124
1133
|
noncoding_max_tokens: Optional[int],
|
|
1125
1134
|
context: Context,
|
|
1126
|
-
show_line_numbers: bool = False,
|
|
1127
1135
|
start_line_nums: Optional[list[Optional[int]]] = None,
|
|
1128
1136
|
end_line_nums: Optional[list[Optional[int]]] = None,
|
|
1129
1137
|
) -> tuple[
|
|
@@ -1160,7 +1168,6 @@ def read_files(
|
|
|
1160
1168
|
coding_max_tokens,
|
|
1161
1169
|
noncoding_max_tokens,
|
|
1162
1170
|
context,
|
|
1163
|
-
show_line_numbers,
|
|
1164
1171
|
start_line_num,
|
|
1165
1172
|
end_line_num,
|
|
1166
1173
|
)
|
|
@@ -1204,12 +1211,11 @@ def read_file(
|
|
|
1204
1211
|
coding_max_tokens: Optional[int],
|
|
1205
1212
|
noncoding_max_tokens: Optional[int],
|
|
1206
1213
|
context: Context,
|
|
1207
|
-
show_line_numbers: bool = False,
|
|
1208
1214
|
start_line_num: Optional[int] = None,
|
|
1209
1215
|
end_line_num: Optional[int] = None,
|
|
1210
1216
|
) -> tuple[str, bool, int, str, tuple[int, int]]:
|
|
1211
1217
|
context.console.print(f"Reading file: {file_path}")
|
|
1212
|
-
|
|
1218
|
+
show_line_numbers = True
|
|
1213
1219
|
# Line numbers are now passed as parameters, no need to parse from path
|
|
1214
1220
|
|
|
1215
1221
|
# Expand the path before checking if it's absolute
|
|
@@ -1230,7 +1236,6 @@ def read_file(
|
|
|
1230
1236
|
|
|
1231
1237
|
if all_lines and all_lines[-1].endswith("\n"):
|
|
1232
1238
|
# Special handling of line counts because readlines doesn't consider last empty line as a separate line
|
|
1233
|
-
all_lines[-1] = all_lines[-1][:-1]
|
|
1234
1239
|
all_lines.append("")
|
|
1235
1240
|
|
|
1236
1241
|
total_lines = len(all_lines)
|
|
@@ -1355,7 +1360,6 @@ if __name__ == "__main__":
|
|
|
1355
1360
|
Context(BASH_STATE, BASH_STATE.console),
|
|
1356
1361
|
ReadFiles(
|
|
1357
1362
|
file_paths=["/Users/arusia/repos/wcgw/src/wcgw/client/tools.py"],
|
|
1358
|
-
show_line_numbers_reason="true",
|
|
1359
1363
|
),
|
|
1360
1364
|
default_enc,
|
|
1361
1365
|
0,
|
|
@@ -123,10 +123,13 @@ class WriteIfEmpty(BaseModel):
|
|
|
123
123
|
|
|
124
124
|
class ReadFiles(BaseModel):
|
|
125
125
|
file_paths: list[str]
|
|
126
|
-
show_line_numbers_reason: Optional[str] = None
|
|
127
126
|
_start_line_nums: List[Optional[int]] = PrivateAttr(default_factory=lambda: [])
|
|
128
127
|
_end_line_nums: List[Optional[int]] = PrivateAttr(default_factory=lambda: [])
|
|
129
128
|
|
|
129
|
+
@property
|
|
130
|
+
def show_line_numbers_reason(self) -> str:
|
|
131
|
+
return "True"
|
|
132
|
+
|
|
130
133
|
@property
|
|
131
134
|
def start_line_nums(self) -> List[Optional[int]]:
|
|
132
135
|
"""Get the start line numbers."""
|
|
@@ -1120,57 +1120,57 @@ wheels = [
|
|
|
1120
1120
|
|
|
1121
1121
|
[[package]]
|
|
1122
1122
|
name = "syntax-checker"
|
|
1123
|
-
version = "0.4.
|
|
1124
|
-
source = { registry = "https://pypi.org/simple" }
|
|
1125
|
-
wheels = [
|
|
1126
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1127
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1128
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1129
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1130
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1131
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1132
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1133
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1134
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1135
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1136
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1137
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1138
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1139
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1140
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1141
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1142
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1143
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1144
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1145
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1146
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1147
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1148
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1149
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1150
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1151
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1152
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1153
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1154
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1155
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1156
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1157
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1158
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1159
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1160
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1161
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1162
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1163
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1164
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1165
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1166
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1167
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1168
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1169
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1170
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1171
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1172
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1173
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1123
|
+
version = "0.4.0"
|
|
1124
|
+
source = { registry = "https://pypi.org/simple" }
|
|
1125
|
+
wheels = [
|
|
1126
|
+
{ url = "https://files.pythonhosted.org/packages/11/46/398cc619474f31944b9ca782eebdb4f39fc4e380572dc4daa7aac17e4c88/syntax_checker-0.4.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4405c50923b97bdfa13456189f3524fb6f6d573e5513c8c8c2c32d12e72f1fe0", size = 2385031 },
|
|
1127
|
+
{ url = "https://files.pythonhosted.org/packages/f6/b6/158c2956cc138362894461ce4f027e82bad8819975a00bd396fdf46c71b5/syntax_checker-0.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0a2c42657f0a4fdb9f60000b794198bef478eed0595ebcff18a17a75c68b0e55", size = 2532161 },
|
|
1128
|
+
{ url = "https://files.pythonhosted.org/packages/e9/55/c274dc0c7ec040ff4a27a1d55500b68083b6231505f21d6656979a0614af/syntax_checker-0.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04c1e67cc118e496060ed70cd490bb29645146ea907a711db83ef168786ab5ea", size = 2495058 },
|
|
1129
|
+
{ url = "https://files.pythonhosted.org/packages/62/6f/564a0c6c1d60dda31925596667a4a24441259e941dfe21e8f9b8bbe2b59d/syntax_checker-0.4.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dccc563a133296010249585a727012cbb26ebedf4ecc2573f75467e1867ba553", size = 2503491 },
|
|
1130
|
+
{ url = "https://files.pythonhosted.org/packages/64/1a/514810a18835bdd5aaac05260fc2d646e4acf2b7efd9b0d1591bfeabaaea/syntax_checker-0.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:069f1611a2a726b11fa9fd443d91c2ddd1ae1735d4bf837ba41729dcc4c5787c", size = 2690452 },
|
|
1131
|
+
{ url = "https://files.pythonhosted.org/packages/93/3a/a926c1eb052b4055405e5fb2ca60659f316b8c0c684895e9940d85852add/syntax_checker-0.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce71f02e2216eb754b83de39d87ced0cffa2b6a9dc84a6be34636c1bc1aa5cb5", size = 2448372 },
|
|
1132
|
+
{ url = "https://files.pythonhosted.org/packages/e6/ee/a3723f941a5e7a0f835dd2c3e140214a5c15e21c37308a60f9e118695e9d/syntax_checker-0.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2ecea77d308fa35681f0265cef153ec39f755b29a035b68333a652733c87340e", size = 2512086 },
|
|
1133
|
+
{ url = "https://files.pythonhosted.org/packages/1d/8f/e13d70c47cdf4278b4af6034ec48a4ba8e6ffd7e33ad78607dbb71f25a95/syntax_checker-0.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:78efa8dc220e01a547ff66175dceee21a989e660f141292ab5c491ec7287d33c", size = 2609835 },
|
|
1134
|
+
{ url = "https://files.pythonhosted.org/packages/cf/b1/db71f10ed46a175edb0755e0a8e710c3f5b915996e6ca8ab557cb1a07461/syntax_checker-0.4.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:91d584f9b8d077ab6fe03e90c1904dea53e0a2b5b97a2e15ebcd1945d2b95cf8", size = 2696779 },
|
|
1135
|
+
{ url = "https://files.pythonhosted.org/packages/59/9d/93583ef937babeb889dc53ceec5caf58bf0319f8ddc6da41d9731004f918/syntax_checker-0.4.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ab2f36cfe09cc63a814de120b029a35b928a4825a841b850c3c6ce0efbffa1bf", size = 2695596 },
|
|
1136
|
+
{ url = "https://files.pythonhosted.org/packages/c2/ef/5ce372ba268c82859c0d0a372ee2757303819989259ad36fecaf6bdb3722/syntax_checker-0.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:fb35e4561e0f61f26fa8477b030a82d0728ecea5dfec47137e8b932820307cd2", size = 2620632 },
|
|
1137
|
+
{ url = "https://files.pythonhosted.org/packages/51/eb/03662ea53ebc3a8a1dc761a8d2dc200c15a86bb01d7a0d49582437c53c15/syntax_checker-0.4.0-cp311-cp311-win32.whl", hash = "sha256:432bb6fdc6186da934b9effda2ebcb0e31dbc5fa59caf2fa8770226bb5421359", size = 2229996 },
|
|
1138
|
+
{ url = "https://files.pythonhosted.org/packages/64/f5/518b4d6a415c064c38c0bbcf70e921428156adcf5030cb136b61c2338aa6/syntax_checker-0.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:fd29cc4bacc414de36b446954fef63b8c358dc89ed2905fa455ba401e1f820e0", size = 2239732 },
|
|
1139
|
+
{ url = "https://files.pythonhosted.org/packages/49/1a/699a5546f12fdb44d39730b8e417d37bf1cfc2bc95e90f7556677d8a2f92/syntax_checker-0.4.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:bf48a411f06b4679dff7efbb728e9bc99ad88f1df5ddeb87bcd7b2eeea0bf3a5", size = 2383980 },
|
|
1140
|
+
{ url = "https://files.pythonhosted.org/packages/56/73/97d0ce92a6c71b6e42d7f68cb1e15e8cb9e380e5b5592e87b28b29c833ad/syntax_checker-0.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ac4c6c060ce76aaf7d14acbf81c58ecfc482394f3cf465a8fd8d6c9f2793b9d1", size = 2532182 },
|
|
1141
|
+
{ url = "https://files.pythonhosted.org/packages/de/3c/a15de1242f223de13b0180070ff0481c9a3dc3739e81cee680c80d45af1b/syntax_checker-0.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0eccdc64ce8f1ad1fe093b998fbf419dd8a36e0e487e5a762589cf1f4ae80250", size = 2495389 },
|
|
1142
|
+
{ url = "https://files.pythonhosted.org/packages/cd/00/043cf65d649450c4c2dd2c2617cc09711ec0bfe967f9694cb7c760e9ae61/syntax_checker-0.4.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e730fcc78d7e998a25a04383ff7e507ea62910d78ff259186016d18cdec848b", size = 2502885 },
|
|
1143
|
+
{ url = "https://files.pythonhosted.org/packages/37/65/70af7d75b759b9e3aaf13faf42689cc26bc86eb3a012e3c525361ac18f02/syntax_checker-0.4.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:02fea038816660dbae43d2b1d5625588bfdccb629bed687374f92c98efc16d21", size = 2687901 },
|
|
1144
|
+
{ url = "https://files.pythonhosted.org/packages/86/e2/8707a4bf4135188bd38923f6892913ecf52cd00d0ed8e0f0b3f5140c5789/syntax_checker-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6c07149f14f4d81a0d5832a5c6f5daf4c76d2ff8b89158a3ff07395e2767016", size = 2447731 },
|
|
1145
|
+
{ url = "https://files.pythonhosted.org/packages/38/fa/61a8b11b0b63661fd938a09e10c06eb688b8aec108b695c9e879ffed5669/syntax_checker-0.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5b51cd45eb6c45aa7096d02bdb510cbdc70d9d70128ff8fa32b472f2ddb84efa", size = 2512287 },
|
|
1146
|
+
{ url = "https://files.pythonhosted.org/packages/91/77/63dff7b9a18a7a6e1258c09acd7485751752747c77a9b6cfcafa6b01ef37/syntax_checker-0.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7d01fa67cdf6efd625de6b5b84580710783a74907f586e4cf778dc81fdd75a37", size = 2610286 },
|
|
1147
|
+
{ url = "https://files.pythonhosted.org/packages/e0/f3/0548dd09ca7c3a75ce99d012727a2a75c355a1a53cb96dc2babc702f2c61/syntax_checker-0.4.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:197d0991ecba56f43f26864d403f6602c3156d5643d9433d11bb4345a0dbff27", size = 2695915 },
|
|
1148
|
+
{ url = "https://files.pythonhosted.org/packages/98/fe/656dc63f29c42bdfd8d191bd92d24c02f10cb430c1203f5367f23dcf683b/syntax_checker-0.4.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c81dc78ae45e93567f8e79b70eba021c78c0924c64071a87a0b06a7a2e51e13f", size = 2695576 },
|
|
1149
|
+
{ url = "https://files.pythonhosted.org/packages/f5/b6/b10d3c47a64899e1a742933151e7e0ba3a3f68084a52d781472a2364c9c9/syntax_checker-0.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1dcb60e4d8b26c1d8c27255646b154330c41b30768a5d74756badf78a95b57c7", size = 2620212 },
|
|
1150
|
+
{ url = "https://files.pythonhosted.org/packages/c9/03/75b0ecb579424fe6772cd7e5084827006bf0d59ff3b8a9c508ce41a36f7c/syntax_checker-0.4.0-cp312-cp312-win32.whl", hash = "sha256:2b262c75958d6f6222f22b00f6eace57f4ca9f85d6e935d7a2c7143223bcd995", size = 2228123 },
|
|
1151
|
+
{ url = "https://files.pythonhosted.org/packages/7e/43/02a5981f5a8a9b87fa95c915f4fe7395d04c67eb6b5ca193c9a1af86a265/syntax_checker-0.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:9043456b257cdc8f41e2f52989d7c6781e9ceeee5f4b39083d209645a747f7a2", size = 2240926 },
|
|
1152
|
+
{ url = "https://files.pythonhosted.org/packages/db/e8/09dffa437328dc0e951039714aca4807d0e3bdf5000a3c71a82104a0f938/syntax_checker-0.4.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:16b908d8f64ad26bc421aa11f305c35ed4ef2616632a42b9091de1422b6989ce", size = 2383982 },
|
|
1153
|
+
{ url = "https://files.pythonhosted.org/packages/24/02/4275cd74a71c02645882f4499cfd8798ec188135505f7f7368121716038c/syntax_checker-0.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0375e6dc54e71fc08fc9a5d4eba36ce448903faf5d43534fdd6ffa4916ffd8c6", size = 2532181 },
|
|
1154
|
+
{ url = "https://files.pythonhosted.org/packages/71/ea/f37efec8eed63b790f364cb852b21e31644098a86b4854f39b86ccd07bad/syntax_checker-0.4.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056d283d22056cba36d9d347944b161640374d8fa30e7b2d3c5b0c720908eaa", size = 2495390 },
|
|
1155
|
+
{ url = "https://files.pythonhosted.org/packages/96/60/aa4d6606111f51d35ac391afa1790a3fa888fd26dbc45d7d62c552b9a984/syntax_checker-0.4.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7c264843595a343ce44f3c0500a31417395c07916c1284c27e11a5faa4f909c5", size = 2502884 },
|
|
1156
|
+
{ url = "https://files.pythonhosted.org/packages/10/4e/cd533ce33bf6b8aa40e613c1e344e63cc73c3e74cb101c1aa2eb6f44e2e4/syntax_checker-0.4.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1136da0163bb87af46fabcbc4b412e881b7c8564967a32d8af9e6bc36e3c7e3d", size = 2687903 },
|
|
1157
|
+
{ url = "https://files.pythonhosted.org/packages/b0/39/d62caef93041b3909e588089c044c9ed082dff1d9f6e61cf58b4d43fcee3/syntax_checker-0.4.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59c7563675d2719805edd5c7cfe92cd71a3c1e00b61744bf4b8f510c0d5e6f51", size = 2447732 },
|
|
1158
|
+
{ url = "https://files.pythonhosted.org/packages/35/fb/b6071246a8173ea0668b6b3b179b5f2a3991074cff4993cf76519cff9c65/syntax_checker-0.4.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:159148313edf081846327b140f3436a69db0bf03ba8a2ec69f7b700f01488535", size = 2512286 },
|
|
1159
|
+
{ url = "https://files.pythonhosted.org/packages/b7/85/cfcfeadea1f35ac599828463dc5bce77d19c727d554dd98ffdee97639caf/syntax_checker-0.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:859d8ba059cc83c648e59df8d1dd24480db66732c87bc497eda8cb722998aff5", size = 2610286 },
|
|
1160
|
+
{ url = "https://files.pythonhosted.org/packages/67/7c/7422bf243be56cbe50ba935cd1c1ab609804e62b4926f05cd8b06697827e/syntax_checker-0.4.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:5420beb2652b12fd7204ddba5484bfdbff9ed242abb2799639102b4e3b6a8a8e", size = 2695914 },
|
|
1161
|
+
{ url = "https://files.pythonhosted.org/packages/f7/0c/a0cb1c39dbb3f4d77db83891aa005a196c8e2a907c88eafe676c4652d65b/syntax_checker-0.4.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1864dd200e3d95bc4c0b31ec5a9ff5afbb2e94035799a7a5765e219193482346", size = 2695575 },
|
|
1162
|
+
{ url = "https://files.pythonhosted.org/packages/28/73/c5400e7471194aadfc0bd4ee1ecc511e8a1216bed38b6a42a76c73f5adf4/syntax_checker-0.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:39183000f6b4d66132e7092682530ade520f2febc1d43510f3b96ccdc8a03d63", size = 2620212 },
|
|
1163
|
+
{ url = "https://files.pythonhosted.org/packages/4b/84/efa81028a69ff00a35ccee0567065161224c941bce6494720dc816d398be/syntax_checker-0.4.0-cp313-cp313-win32.whl", hash = "sha256:dabf3b9790de57a47103a9b68ddc3fec04ed8e005ac6f1db807009bb3ab98281", size = 2228121 },
|
|
1164
|
+
{ url = "https://files.pythonhosted.org/packages/84/e2/0575ef0df390a031a66c74c99e907e17c0e0b367cb91c0393687cfc1a695/syntax_checker-0.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:0b8420f9e752025a206377e5001959770a5cade46179242ee42fe66ae01300ef", size = 2240931 },
|
|
1165
|
+
{ url = "https://files.pythonhosted.org/packages/16/8d/18ca503af08d517abb4683e079e788301f6dec24873b6ecb8ea9c4a11721/syntax_checker-0.4.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1dd532af1ee094a7e688e23fb96bb73a388968f7b3029a31ef83cabc5525bf86", size = 2495039 },
|
|
1166
|
+
{ url = "https://files.pythonhosted.org/packages/11/97/fce9da6014d5730c8ee267193095758396b2e482cfd16df947f042213db3/syntax_checker-0.4.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2d09426fef18529a6d68859433b8da934a024d3cb19af079170099e3603110d8", size = 2501868 },
|
|
1167
|
+
{ url = "https://files.pythonhosted.org/packages/43/7f/da71718768b9914f3a0baba02361b0c127e9a0c491e079d2aeec3a42572e/syntax_checker-0.4.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57a75f42e0cad437131eb3692bbb0c96faf89e4fecd6163190565605c1f83979", size = 2689970 },
|
|
1168
|
+
{ url = "https://files.pythonhosted.org/packages/87/f9/513cda0a4b73a858985284ff048dae23efd6ec13dca5efc4df00999914ea/syntax_checker-0.4.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a77816816953c916cb4d9c02673a0e44e564a9d4ac4cfd05b9ab943c50716a7", size = 2447027 },
|
|
1169
|
+
{ url = "https://files.pythonhosted.org/packages/61/88/14194d1ef0efe88486fbc4b03b1fdcc3cc2c6a57b47f3405fd3dd3dd1af3/syntax_checker-0.4.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3dba4f988602eba584fac33f15bf8a9d4c105408f0b323d3918939b162820808", size = 2512275 },
|
|
1170
|
+
{ url = "https://files.pythonhosted.org/packages/c6/5d/477aaaf9764871d8b1461da0450bfca0b6cf02937cda829b000398af8dd1/syntax_checker-0.4.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:33fe268bc9a958b283d2cb6f7d09233e2090f89758cd1a93d37b0670106c18e0", size = 2609841 },
|
|
1171
|
+
{ url = "https://files.pythonhosted.org/packages/1b/40/90ba934cb1c8fe61ec84497bb434ce63cc769654dd758fbb461d0403af8f/syntax_checker-0.4.0-pp311-pypy311_pp73-musllinux_1_2_armv7l.whl", hash = "sha256:2128342617696d14d11d1a882a89a18b79e6ec863e0a9a95a5d932fd0c114392", size = 2695772 },
|
|
1172
|
+
{ url = "https://files.pythonhosted.org/packages/d9/c9/1984320598c28559e361e3a10a733c5bbe0d4f642022f40a4ada00eee27a/syntax_checker-0.4.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:85b30fff88b08104b557edcd15018f61368a50fe1e59b05f55f00719eaf164fa", size = 2696030 },
|
|
1173
|
+
{ url = "https://files.pythonhosted.org/packages/ac/46/54badcc26f46d49f89d49940e6dac60eb0e7e7aa0166a992c91cf2c7bc2d/syntax_checker-0.4.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8dfd806befa9ec09aba8f78045083082e62419d8e34c75ac62f69b3933f5188b", size = 2619730 },
|
|
1174
1174
|
]
|
|
1175
1175
|
|
|
1176
1176
|
[[package]]
|
|
@@ -1398,7 +1398,7 @@ wheels = [
|
|
|
1398
1398
|
|
|
1399
1399
|
[[package]]
|
|
1400
1400
|
name = "wcgw"
|
|
1401
|
-
version = "5.
|
|
1401
|
+
version = "5.3.1"
|
|
1402
1402
|
source = { editable = "." }
|
|
1403
1403
|
dependencies = [
|
|
1404
1404
|
{ name = "anthropic" },
|
|
@@ -1459,7 +1459,7 @@ requires-dist = [
|
|
|
1459
1459
|
{ name = "python-dotenv", specifier = ">=1.0.1" },
|
|
1460
1460
|
{ name = "rich", specifier = ">=13.8.1" },
|
|
1461
1461
|
{ name = "semantic-version", specifier = ">=2.10.0" },
|
|
1462
|
-
{ name = "syntax-checker", specifier = "==0.4.
|
|
1462
|
+
{ name = "syntax-checker", specifier = "==0.4.0" },
|
|
1463
1463
|
{ name = "tokenizers", specifier = ">=0.21.0" },
|
|
1464
1464
|
{ name = "toml", specifier = ">=0.10.2" },
|
|
1465
1465
|
{ name = "tree-sitter", specifier = ">=0.24.0" },
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
Instructions for editing files.
|
|
3
|
-
# Example
|
|
4
|
-
## Input file
|
|
5
|
-
```
|
|
6
|
-
import numpy as np
|
|
7
|
-
from impls import impl1, impl2
|
|
8
|
-
|
|
9
|
-
def hello():
|
|
10
|
-
"print a greeting"
|
|
11
|
-
|
|
12
|
-
print("hello")
|
|
13
|
-
|
|
14
|
-
def call_hello():
|
|
15
|
-
"call hello"
|
|
16
|
-
|
|
17
|
-
hello()
|
|
18
|
-
print("Called")
|
|
19
|
-
impl1()
|
|
20
|
-
hello()
|
|
21
|
-
impl2()
|
|
22
|
-
|
|
23
|
-
```
|
|
24
|
-
## Edit format on the input file
|
|
25
|
-
```
|
|
26
|
-
<<<<<<< SEARCH
|
|
27
|
-
from impls import impl1, impl2
|
|
28
|
-
=======
|
|
29
|
-
from impls import impl1, impl2
|
|
30
|
-
from hello import hello as hello_renamed
|
|
31
|
-
>>>>>>> REPLACE
|
|
32
|
-
<<<<<<< SEARCH
|
|
33
|
-
def hello():
|
|
34
|
-
"print a greeting"
|
|
35
|
-
|
|
36
|
-
print("hello")
|
|
37
|
-
=======
|
|
38
|
-
>>>>>>> REPLACE
|
|
39
|
-
<<<<<<< SEARCH
|
|
40
|
-
def call_hello():
|
|
41
|
-
"call hello"
|
|
42
|
-
|
|
43
|
-
hello()
|
|
44
|
-
=======
|
|
45
|
-
def call_hello_renamed():
|
|
46
|
-
"call hello renamed"
|
|
47
|
-
|
|
48
|
-
hello_renamed()
|
|
49
|
-
>>>>>>> REPLACE
|
|
50
|
-
<<<<<<< SEARCH
|
|
51
|
-
impl1()
|
|
52
|
-
hello()
|
|
53
|
-
impl2()
|
|
54
|
-
=======
|
|
55
|
-
impl1()
|
|
56
|
-
hello_renamed()
|
|
57
|
-
impl2()
|
|
58
|
-
>>>>>>> REPLACE
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
# *SEARCH/REPLACE block* Rules:
|
|
62
|
-
Every "<<<<<<< SEARCH" section must *EXACTLY MATCH* the existing file content, character for character, including all comments, docstrings, whitespaces, etc.
|
|
63
|
-
|
|
64
|
-
Including multiple unique *SEARCH/REPLACE* blocks if needed.
|
|
65
|
-
Include enough and only enough lines in each SEARCH section to uniquely match each set of lines that need to change.
|
|
66
|
-
|
|
67
|
-
Keep *SEARCH/REPLACE* blocks concise.
|
|
68
|
-
Break large *SEARCH/REPLACE* blocks into a series of smaller blocks that each change a small portion of the file.
|
|
69
|
-
Include just the changing lines, and a few surrounding lines (0-3 lines) if needed for uniqueness.
|
|
70
|
-
Other than for uniqueness, avoid including those lines which do not change in search (and replace) blocks. Target 0-3 non trivial extra lines per block.
|
|
71
|
-
|
|
72
|
-
Preserve leading spaces and indentations in both SEARCH and REPLACE blocks.
|
|
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
|
|
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
|