wrencode 0.1.4__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.
@@ -0,0 +1,28 @@
1
+ # Secrets / local config — never commit these
2
+ .env
3
+ .env.*
4
+ !.env.example
5
+
6
+ # Python
7
+ __pycache__/
8
+ *.py[cod]
9
+ *.egg-info/
10
+
11
+ # Build artifacts (PyInstaller)
12
+ build/
13
+ dist/
14
+ *.spec
15
+
16
+ # Virtual environments
17
+ .venv/
18
+ venv/
19
+ env/
20
+
21
+ # WrenCode local state (when pointed at a repo-local config dir)
22
+ .wrencode/
23
+
24
+ # Editor / OS
25
+ .DS_Store
26
+ .idea/
27
+ .vscode/
28
+ *.swp
@@ -0,0 +1,263 @@
1
+ Metadata-Version: 2.4
2
+ Name: wrencode
3
+ Version: 0.1.4
4
+ Summary: A minimal agentic coding assistant in a single Python file
5
+ Project-URL: Homepage, https://github.com/almostly/wrencode
6
+ Project-URL: Repository, https://github.com/almostly/wrencode
7
+ Project-URL: Issues, https://github.com/almostly/wrencode/issues
8
+ Author: Denis Burakov
9
+ License-Expression: MIT
10
+ Keywords: agent,ai,anthropic,cli,coding-assistant,llm,mlx,ollama,openai
11
+ Classifier: Development Status :: 4 - Beta
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Topic :: Software Development :: Code Generators
16
+ Requires-Python: >=3.9
17
+ Provides-Extra: mlx
18
+ Requires-Dist: mlx-lm; extra == 'mlx'
19
+ Provides-Extra: transformers
20
+ Requires-Dist: torch; extra == 'transformers'
21
+ Requires-Dist: transformers; extra == 'transformers'
22
+ Description-Content-Type: text/markdown
23
+
24
+ # 🐦 WrenCode
25
+
26
+ A minimal agentic coding assistant in a single Python file.
27
+
28
+ Named after Harold Wren - the alias of a genius who built a superintelligent AI and operated quietly in the background.
29
+
30
+ -----
31
+
32
+ ## What it is
33
+
34
+ WrenCode is a lightweight alternative to Claude Code. It runs a tool-calling agent loop locally or via API, giving an LLM the ability to read, write, and edit files, search codebases, and run shell commands - enough to autonomously navigate and modify a real project.
35
+
36
+ Where Claude Code is the batteries-included tool, WrenCode is the **"understand and own your agent" tool**: the entire agent loop fits in one readable file, runs against local or hosted models, and is yours to hack.
37
+
38
+ ## Backends
39
+
40
+ On first run WrenCode asks you to pick a backend and saves the choice to
41
+ `~/.wrencode/config.json`. Run `wrencode --configure` any time to change it.
42
+ Set `BACKEND` (and the matching API key) in the environment to override the
43
+ saved choice, e.g. for CI.
44
+
45
+ |Backend |Description |Availability |
46
+ |--------------|----------------------------------------|----------------------|
47
+ |`anthropic` |Claude via Anthropic API |binary + source |
48
+ |`openai` |GPT models via OpenAI API |binary + source |
49
+ |`openrouter` |Any model via OpenRouter |binary + source |
50
+ |`ollama` |Local models via a running `ollama serve`|binary + source |
51
+ |`local` |Local proxy via Anthropic-compatible API|binary + source |
52
+ |`transformers`|HuggingFace Transformers (CPU/MPS/GPU) |source install only |
53
+ |`mlx` |Apple Silicon via MLX |source install, macOS |
54
+
55
+ The standalone binary can't bundle the heavy ML stack, so the local-weights
56
+ backends (`mlx`, `transformers`) are only offered when running from source.
57
+
58
+ ## Tools
59
+
60
+ The agent has access to seven tools:
61
+
62
+ - **read** - read a file with line numbers, or list a directory
63
+ - **write** - write content to a file
64
+ - **edit** - replace a unique string in a file
65
+ - **glob** - find files by pattern, sorted by modification time
66
+ - **grep** - search files for a regex pattern using `rg` when available, falling back to `grep`
67
+ - **bash** - run a shell command with timeout and streaming output
68
+ - **task** - delegate a self-contained subtask to a fresh subagent (its own context, same tools) that returns only its final result
69
+
70
+ All file operations are sandboxed to the workspace root by default.
71
+
72
+ ### Subagents
73
+
74
+ The `task` tool runs a nested agent loop on a fresh message history, so the
75
+ parent's context only grows by the returned summary — useful for context-heavy
76
+ subtasks. Recursion is capped by `WRENCODE_MAX_SUBAGENT_DEPTH` (default 2), and
77
+ each subagent round is bounded. For autonomous subagent runs, enable
78
+ `--yes` / `WRENCODE_AUTO_APPROVE` so sub-tool calls don't block on confirmation.
79
+
80
+ ## Installation
81
+
82
+ ### Option 1: Standalone binary (recommended)
83
+
84
+ Run the guided installer:
85
+
86
+ ```bash
87
+ curl -fsSL https://raw.githubusercontent.com/almostly/wrencode/main/install.sh | sh
88
+ ```
89
+
90
+ It detects your OS/arch, downloads the matching binary from the latest GitHub
91
+ Release, and installs it to `~/.local/bin` (no sudo). Override the location with
92
+ `WRENCODE_INSTALL_DIR`, or pin a release with `WRENCODE_VERSION`:
93
+
94
+ ```bash
95
+ curl -fsSL https://raw.githubusercontent.com/almostly/wrencode/main/install.sh \
96
+ | WRENCODE_INSTALL_DIR=/usr/local/bin WRENCODE_VERSION=0.1.3 sh
97
+ ```
98
+
99
+ Or download and run it locally:
100
+
101
+ ```bash
102
+ curl -fsSL https://raw.githubusercontent.com/almostly/wrencode/main/install.sh -o install.sh
103
+ chmod +x install.sh
104
+ ./install.sh
105
+ ```
106
+
107
+ Manual install (fallback): download the right binary from GitHub Releases, make it executable, and move it into your `PATH`.
108
+
109
+ macOS Apple Silicon:
110
+
111
+ ```bash
112
+ curl -L https://github.com/almostly/wrencode/releases/latest/download/wrencode-macos-arm64 -o wrencode
113
+ chmod +x wrencode
114
+ sudo mv wrencode /usr/local/bin/wrencode
115
+ ```
116
+
117
+ macOS Intel:
118
+
119
+ ```bash
120
+ curl -L https://github.com/almostly/wrencode/releases/latest/download/wrencode-macos-x64 -o wrencode
121
+ chmod +x wrencode
122
+ sudo mv wrencode /usr/local/bin/wrencode
123
+ ```
124
+
125
+ Linux x64:
126
+
127
+ ```bash
128
+ curl -L https://github.com/almostly/wrencode/releases/latest/download/wrencode-linux-x64 -o wrencode
129
+ chmod +x wrencode
130
+ sudo mv wrencode /usr/local/bin/wrencode
131
+ ```
132
+
133
+ ### Option 2: Run from source
134
+
135
+ Single file, standard library only (except the backend you choose).
136
+
137
+ ```bash
138
+ git clone https://github.com/almostly/wrencode
139
+ cd wrencode
140
+ ```
141
+
142
+ For MLX (Mac Silicon):
143
+
144
+ ```bash
145
+ pip install mlx-lm
146
+ ```
147
+
148
+ For Anthropic:
149
+
150
+ ```bash
151
+ pip install anthropic # not required - uses urllib directly
152
+ export ANTHROPIC_API_KEY=your_key
153
+ ```
154
+
155
+ For OpenAI:
156
+
157
+ ```bash
158
+ export OPENAI_API_KEY=your_key
159
+ ```
160
+
161
+ For OpenRouter:
162
+
163
+ ```bash
164
+ export OPENROUTER_API_KEY=your_key
165
+ ```
166
+
167
+ For HuggingFace Transformers:
168
+
169
+ ```bash
170
+ pip install transformers torch
171
+ ```
172
+
173
+ ## Usage
174
+
175
+ ```bash
176
+ # Standalone binary — prompts for a backend on first run
177
+ wrencode
178
+
179
+ # Re-pick the backend at any time
180
+ wrencode --configure
181
+
182
+ # Or from source — also prompts on first run
183
+ python3 wrencode.py
184
+
185
+ # Anthropic Claude
186
+ BACKEND=anthropic python3 wrencode.py
187
+
188
+ # OpenAI
189
+ BACKEND=openai MODEL=gpt-4o python3 wrencode.py
190
+
191
+ # OpenRouter
192
+ BACKEND=openrouter MODEL=anthropic/claude-3-haiku python3 wrencode.py
193
+
194
+ # Ollama (needs `ollama serve` running and the model pulled)
195
+ BACKEND=ollama MODEL=llama3.2 python3 wrencode.py
196
+
197
+ # HuggingFace model
198
+ BACKEND=transformers MODEL=deburky/gpt-oss-claude-code python3 wrencode.py
199
+
200
+ # Local proxy
201
+ BACKEND=local LOCAL_PORT=8082 python3 wrencode.py
202
+ ```
203
+
204
+ ## Releasing binaries
205
+
206
+ Binaries are built automatically by GitHub Actions when you push a version tag:
207
+
208
+ ```bash
209
+ git tag v0.1.0
210
+ git push origin v0.1.0
211
+ ```
212
+
213
+ This publishes release assets:
214
+ - `wrencode-linux-x64`
215
+ - `wrencode-macos-x64`
216
+ - `wrencode-macos-arm64`
217
+
218
+ ## Slash Commands
219
+
220
+ |Command |Description |
221
+ |--------------|----------------------------------------------|
222
+ |`/help` |Show available commands |
223
+ |`/c` |Clear conversation history |
224
+ |`/compact` |Summarize history to reduce context (mlx only)|
225
+ |`/q` or `exit`|Quit |
226
+
227
+ ## Environment Variables
228
+
229
+ |Variable |Default |Description |
230
+ |-----------------------------|-----------------------|----------------------------------|
231
+ |`BACKEND` |chooser/saved config |Override the saved inference backend|
232
+ |`MODEL` |backend-dependent |Model path or ID |
233
+ |`WRENCODE_CONFIG_DIR` |`~/.wrencode` |Dir for `config.json` (saved backend/key)|
234
+ |`WRENCODE_WORKSPACE` |cwd |Root directory for file operations|
235
+ |`WRENCODE_HISTORY_FILE` |`~/.wrencode/history.json`|Conversation history file path |
236
+ |`WRENCODE_UNRESTRICTED_PATHS`|`0` |Allow paths outside workspace |
237
+ |`WRENCODE_AUTO_APPROVE` |`0` |Skip y/N confirmation for writes/commands (headless; also `--yes`)|
238
+ |`WRENCODE_MAX_SUBAGENT_DEPTH`|`2` |Max nested subagent recursion depth (`task` tool)|
239
+ |`MAX_TOKENS` |`4096` |Max tokens per response |
240
+ |`MAX_READ_BYTES` |`4MB` |Max file size to read |
241
+ |`MAX_READ_LINES` |`800` |Max lines returned per read |
242
+ |`GREP_MAX_MATCHES` |`80` |Max grep results |
243
+ |`BASH_TIMEOUT` |`120` |Shell command timeout in seconds |
244
+ |`MAX_TOOL_OUTPUT_CHARS` |`48000` |Max tool output before truncation |
245
+ |`GLOB_SKIP_DIRS` |`.git,node_modules,...`|Directories to skip in glob |
246
+ |`OPENROUTER_API_KEY` |- |OpenRouter API key |
247
+ |`OPENAI_API_KEY` |- |OpenAI API key |
248
+ |`ANTHROPIC_API_KEY` |- |Anthropic API key |
249
+ |`LOCAL_API_KEY` |`local` |Local proxy API key |
250
+ |`LOCAL_PORT` |`8082` |Local proxy port |
251
+ |`OLLAMA_HOST` |`http://localhost:11434`|Ollama server base URL |
252
+
253
+ ## History
254
+
255
+ Conversation history is persisted to `~/.wrencode/history.json` by default. It is restored automatically on next launch.
256
+
257
+ To override the history file location, set `WRENCODE_HISTORY_FILE` to a custom path.
258
+
259
+ To clear history: use `/c` in the session, or delete `~/.wrencode/history.json` (or your override path).
260
+
261
+ ## License
262
+
263
+ MIT - Copyright 2026 Denis Burakov.
@@ -0,0 +1,240 @@
1
+ # 🐦 WrenCode
2
+
3
+ A minimal agentic coding assistant in a single Python file.
4
+
5
+ Named after Harold Wren - the alias of a genius who built a superintelligent AI and operated quietly in the background.
6
+
7
+ -----
8
+
9
+ ## What it is
10
+
11
+ WrenCode is a lightweight alternative to Claude Code. It runs a tool-calling agent loop locally or via API, giving an LLM the ability to read, write, and edit files, search codebases, and run shell commands - enough to autonomously navigate and modify a real project.
12
+
13
+ Where Claude Code is the batteries-included tool, WrenCode is the **"understand and own your agent" tool**: the entire agent loop fits in one readable file, runs against local or hosted models, and is yours to hack.
14
+
15
+ ## Backends
16
+
17
+ On first run WrenCode asks you to pick a backend and saves the choice to
18
+ `~/.wrencode/config.json`. Run `wrencode --configure` any time to change it.
19
+ Set `BACKEND` (and the matching API key) in the environment to override the
20
+ saved choice, e.g. for CI.
21
+
22
+ |Backend |Description |Availability |
23
+ |--------------|----------------------------------------|----------------------|
24
+ |`anthropic` |Claude via Anthropic API |binary + source |
25
+ |`openai` |GPT models via OpenAI API |binary + source |
26
+ |`openrouter` |Any model via OpenRouter |binary + source |
27
+ |`ollama` |Local models via a running `ollama serve`|binary + source |
28
+ |`local` |Local proxy via Anthropic-compatible API|binary + source |
29
+ |`transformers`|HuggingFace Transformers (CPU/MPS/GPU) |source install only |
30
+ |`mlx` |Apple Silicon via MLX |source install, macOS |
31
+
32
+ The standalone binary can't bundle the heavy ML stack, so the local-weights
33
+ backends (`mlx`, `transformers`) are only offered when running from source.
34
+
35
+ ## Tools
36
+
37
+ The agent has access to seven tools:
38
+
39
+ - **read** - read a file with line numbers, or list a directory
40
+ - **write** - write content to a file
41
+ - **edit** - replace a unique string in a file
42
+ - **glob** - find files by pattern, sorted by modification time
43
+ - **grep** - search files for a regex pattern using `rg` when available, falling back to `grep`
44
+ - **bash** - run a shell command with timeout and streaming output
45
+ - **task** - delegate a self-contained subtask to a fresh subagent (its own context, same tools) that returns only its final result
46
+
47
+ All file operations are sandboxed to the workspace root by default.
48
+
49
+ ### Subagents
50
+
51
+ The `task` tool runs a nested agent loop on a fresh message history, so the
52
+ parent's context only grows by the returned summary — useful for context-heavy
53
+ subtasks. Recursion is capped by `WRENCODE_MAX_SUBAGENT_DEPTH` (default 2), and
54
+ each subagent round is bounded. For autonomous subagent runs, enable
55
+ `--yes` / `WRENCODE_AUTO_APPROVE` so sub-tool calls don't block on confirmation.
56
+
57
+ ## Installation
58
+
59
+ ### Option 1: Standalone binary (recommended)
60
+
61
+ Run the guided installer:
62
+
63
+ ```bash
64
+ curl -fsSL https://raw.githubusercontent.com/almostly/wrencode/main/install.sh | sh
65
+ ```
66
+
67
+ It detects your OS/arch, downloads the matching binary from the latest GitHub
68
+ Release, and installs it to `~/.local/bin` (no sudo). Override the location with
69
+ `WRENCODE_INSTALL_DIR`, or pin a release with `WRENCODE_VERSION`:
70
+
71
+ ```bash
72
+ curl -fsSL https://raw.githubusercontent.com/almostly/wrencode/main/install.sh \
73
+ | WRENCODE_INSTALL_DIR=/usr/local/bin WRENCODE_VERSION=0.1.3 sh
74
+ ```
75
+
76
+ Or download and run it locally:
77
+
78
+ ```bash
79
+ curl -fsSL https://raw.githubusercontent.com/almostly/wrencode/main/install.sh -o install.sh
80
+ chmod +x install.sh
81
+ ./install.sh
82
+ ```
83
+
84
+ Manual install (fallback): download the right binary from GitHub Releases, make it executable, and move it into your `PATH`.
85
+
86
+ macOS Apple Silicon:
87
+
88
+ ```bash
89
+ curl -L https://github.com/almostly/wrencode/releases/latest/download/wrencode-macos-arm64 -o wrencode
90
+ chmod +x wrencode
91
+ sudo mv wrencode /usr/local/bin/wrencode
92
+ ```
93
+
94
+ macOS Intel:
95
+
96
+ ```bash
97
+ curl -L https://github.com/almostly/wrencode/releases/latest/download/wrencode-macos-x64 -o wrencode
98
+ chmod +x wrencode
99
+ sudo mv wrencode /usr/local/bin/wrencode
100
+ ```
101
+
102
+ Linux x64:
103
+
104
+ ```bash
105
+ curl -L https://github.com/almostly/wrencode/releases/latest/download/wrencode-linux-x64 -o wrencode
106
+ chmod +x wrencode
107
+ sudo mv wrencode /usr/local/bin/wrencode
108
+ ```
109
+
110
+ ### Option 2: Run from source
111
+
112
+ Single file, standard library only (except the backend you choose).
113
+
114
+ ```bash
115
+ git clone https://github.com/almostly/wrencode
116
+ cd wrencode
117
+ ```
118
+
119
+ For MLX (Mac Silicon):
120
+
121
+ ```bash
122
+ pip install mlx-lm
123
+ ```
124
+
125
+ For Anthropic:
126
+
127
+ ```bash
128
+ pip install anthropic # not required - uses urllib directly
129
+ export ANTHROPIC_API_KEY=your_key
130
+ ```
131
+
132
+ For OpenAI:
133
+
134
+ ```bash
135
+ export OPENAI_API_KEY=your_key
136
+ ```
137
+
138
+ For OpenRouter:
139
+
140
+ ```bash
141
+ export OPENROUTER_API_KEY=your_key
142
+ ```
143
+
144
+ For HuggingFace Transformers:
145
+
146
+ ```bash
147
+ pip install transformers torch
148
+ ```
149
+
150
+ ## Usage
151
+
152
+ ```bash
153
+ # Standalone binary — prompts for a backend on first run
154
+ wrencode
155
+
156
+ # Re-pick the backend at any time
157
+ wrencode --configure
158
+
159
+ # Or from source — also prompts on first run
160
+ python3 wrencode.py
161
+
162
+ # Anthropic Claude
163
+ BACKEND=anthropic python3 wrencode.py
164
+
165
+ # OpenAI
166
+ BACKEND=openai MODEL=gpt-4o python3 wrencode.py
167
+
168
+ # OpenRouter
169
+ BACKEND=openrouter MODEL=anthropic/claude-3-haiku python3 wrencode.py
170
+
171
+ # Ollama (needs `ollama serve` running and the model pulled)
172
+ BACKEND=ollama MODEL=llama3.2 python3 wrencode.py
173
+
174
+ # HuggingFace model
175
+ BACKEND=transformers MODEL=deburky/gpt-oss-claude-code python3 wrencode.py
176
+
177
+ # Local proxy
178
+ BACKEND=local LOCAL_PORT=8082 python3 wrencode.py
179
+ ```
180
+
181
+ ## Releasing binaries
182
+
183
+ Binaries are built automatically by GitHub Actions when you push a version tag:
184
+
185
+ ```bash
186
+ git tag v0.1.0
187
+ git push origin v0.1.0
188
+ ```
189
+
190
+ This publishes release assets:
191
+ - `wrencode-linux-x64`
192
+ - `wrencode-macos-x64`
193
+ - `wrencode-macos-arm64`
194
+
195
+ ## Slash Commands
196
+
197
+ |Command |Description |
198
+ |--------------|----------------------------------------------|
199
+ |`/help` |Show available commands |
200
+ |`/c` |Clear conversation history |
201
+ |`/compact` |Summarize history to reduce context (mlx only)|
202
+ |`/q` or `exit`|Quit |
203
+
204
+ ## Environment Variables
205
+
206
+ |Variable |Default |Description |
207
+ |-----------------------------|-----------------------|----------------------------------|
208
+ |`BACKEND` |chooser/saved config |Override the saved inference backend|
209
+ |`MODEL` |backend-dependent |Model path or ID |
210
+ |`WRENCODE_CONFIG_DIR` |`~/.wrencode` |Dir for `config.json` (saved backend/key)|
211
+ |`WRENCODE_WORKSPACE` |cwd |Root directory for file operations|
212
+ |`WRENCODE_HISTORY_FILE` |`~/.wrencode/history.json`|Conversation history file path |
213
+ |`WRENCODE_UNRESTRICTED_PATHS`|`0` |Allow paths outside workspace |
214
+ |`WRENCODE_AUTO_APPROVE` |`0` |Skip y/N confirmation for writes/commands (headless; also `--yes`)|
215
+ |`WRENCODE_MAX_SUBAGENT_DEPTH`|`2` |Max nested subagent recursion depth (`task` tool)|
216
+ |`MAX_TOKENS` |`4096` |Max tokens per response |
217
+ |`MAX_READ_BYTES` |`4MB` |Max file size to read |
218
+ |`MAX_READ_LINES` |`800` |Max lines returned per read |
219
+ |`GREP_MAX_MATCHES` |`80` |Max grep results |
220
+ |`BASH_TIMEOUT` |`120` |Shell command timeout in seconds |
221
+ |`MAX_TOOL_OUTPUT_CHARS` |`48000` |Max tool output before truncation |
222
+ |`GLOB_SKIP_DIRS` |`.git,node_modules,...`|Directories to skip in glob |
223
+ |`OPENROUTER_API_KEY` |- |OpenRouter API key |
224
+ |`OPENAI_API_KEY` |- |OpenAI API key |
225
+ |`ANTHROPIC_API_KEY` |- |Anthropic API key |
226
+ |`LOCAL_API_KEY` |`local` |Local proxy API key |
227
+ |`LOCAL_PORT` |`8082` |Local proxy port |
228
+ |`OLLAMA_HOST` |`http://localhost:11434`|Ollama server base URL |
229
+
230
+ ## History
231
+
232
+ Conversation history is persisted to `~/.wrencode/history.json` by default. It is restored automatically on next launch.
233
+
234
+ To override the history file location, set `WRENCODE_HISTORY_FILE` to a custom path.
235
+
236
+ To clear history: use `/c` in the session, or delete `~/.wrencode/history.json` (or your override path).
237
+
238
+ ## License
239
+
240
+ MIT - Copyright 2026 Denis Burakov.
@@ -0,0 +1,54 @@
1
+ [build-system]
2
+ requires = ["hatchling"]
3
+ build-backend = "hatchling.build"
4
+
5
+ [project]
6
+ name = "wrencode"
7
+ dynamic = ["version"]
8
+ description = "A minimal agentic coding assistant in a single Python file"
9
+ readme = "README.md"
10
+ requires-python = ">=3.9"
11
+ license = "MIT"
12
+ authors = [{ name = "Denis Burakov" }]
13
+ keywords = [
14
+ "agent",
15
+ "llm",
16
+ "coding-assistant",
17
+ "cli",
18
+ "ai",
19
+ "mlx",
20
+ "anthropic",
21
+ "openai",
22
+ "ollama",
23
+ ]
24
+ classifiers = [
25
+ "Development Status :: 4 - Beta",
26
+ "Environment :: Console",
27
+ "Intended Audience :: Developers",
28
+ "Programming Language :: Python :: 3",
29
+ "Topic :: Software Development :: Code Generators",
30
+ ]
31
+ # API backends (anthropic/openai/openrouter/ollama/local) use only the stdlib.
32
+ dependencies = []
33
+
34
+ [project.optional-dependencies]
35
+ mlx = ["mlx-lm"]
36
+ transformers = ["transformers", "torch"]
37
+
38
+ [project.scripts]
39
+ wrencode = "wrencode:main"
40
+
41
+ [project.urls]
42
+ Homepage = "https://github.com/almostly/wrencode"
43
+ Repository = "https://github.com/almostly/wrencode"
44
+ Issues = "https://github.com/almostly/wrencode/issues"
45
+
46
+ [tool.hatch.version]
47
+ path = "wrencode.py"
48
+ pattern = 'WRENCODE_VERSION = "(?P<version>[^"]+)"'
49
+
50
+ [tool.hatch.build.targets.wheel]
51
+ include = ["wrencode.py"]
52
+
53
+ [tool.hatch.build.targets.sdist]
54
+ include = ["wrencode.py", "README.md"]