codeaway 0.1.0__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.
- codeaway-0.1.0/.github/workflows/publish.yml +82 -0
- codeaway-0.1.0/.github/workflows/test.yml +43 -0
- codeaway-0.1.0/.gitignore +6 -0
- codeaway-0.1.0/LICENSE +21 -0
- codeaway-0.1.0/PKG-INFO +113 -0
- codeaway-0.1.0/README.md +88 -0
- codeaway-0.1.0/docs/assets/codeaway-hero.png +0 -0
- codeaway-0.1.0/pyproject.toml +62 -0
- codeaway-0.1.0/src/codeaway/__init__.py +4 -0
- codeaway-0.1.0/src/codeaway/__main__.py +5 -0
- codeaway-0.1.0/src/codeaway/agents.py +427 -0
- codeaway-0.1.0/src/codeaway/cli.py +221 -0
- codeaway-0.1.0/src/codeaway/config.py +157 -0
- codeaway-0.1.0/src/codeaway/desktop.py +644 -0
- codeaway-0.1.0/src/codeaway/server.py +673 -0
- codeaway-0.1.0/src/codeaway/web/__init__.py +1 -0
- codeaway-0.1.0/src/codeaway/web/app.js +747 -0
- codeaway-0.1.0/src/codeaway/web/index.html +41 -0
- codeaway-0.1.0/src/codeaway/web/setup.html +57 -0
- codeaway-0.1.0/src/codeaway/web/style.css +280 -0
- codeaway-0.1.0/tests/test_agents.py +700 -0
- codeaway-0.1.0/tests/test_cli.py +331 -0
- codeaway-0.1.0/tests/test_config.py +126 -0
- codeaway-0.1.0/tests/test_desktop.py +778 -0
- codeaway-0.1.0/tests/test_package.py +116 -0
- codeaway-0.1.0/tests/test_server.py +930 -0
- codeaway-0.1.0/tests/test_web_dom.cjs +482 -0
- codeaway-0.1.0/tests/test_web_theme.cjs +167 -0
- codeaway-0.1.0/tests/test_web_ui.cjs +184 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
name: publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
build:
|
|
13
|
+
name: Build and validate distributions
|
|
14
|
+
runs-on: windows-latest
|
|
15
|
+
|
|
16
|
+
steps:
|
|
17
|
+
- name: Check out repository
|
|
18
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
19
|
+
|
|
20
|
+
- name: Install uv and Python
|
|
21
|
+
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
22
|
+
with:
|
|
23
|
+
python-version: "3.11"
|
|
24
|
+
|
|
25
|
+
- name: Install test environment
|
|
26
|
+
run: uv sync --extra test
|
|
27
|
+
|
|
28
|
+
- name: Run Python tests
|
|
29
|
+
run: uv run pytest -q
|
|
30
|
+
|
|
31
|
+
- name: Run browser tests
|
|
32
|
+
run: node --test tests/test_web_ui.cjs tests/test_web_dom.cjs tests/test_web_theme.cjs
|
|
33
|
+
|
|
34
|
+
- name: Build distributions
|
|
35
|
+
run: uv build
|
|
36
|
+
|
|
37
|
+
- name: Check distribution metadata
|
|
38
|
+
run: uv run --isolated --no-project --with twine twine check dist/*
|
|
39
|
+
|
|
40
|
+
- name: Smoke-test wheel and source distribution
|
|
41
|
+
shell: pwsh
|
|
42
|
+
run: |
|
|
43
|
+
$wheels = @(Get-ChildItem -Path dist -Filter *.whl -File)
|
|
44
|
+
$sdists = @(Get-ChildItem -Path dist -Filter *.tar.gz -File)
|
|
45
|
+
if ($wheels.Count -ne 1) {
|
|
46
|
+
throw "Expected exactly one wheel in dist/, found $($wheels.Count)."
|
|
47
|
+
}
|
|
48
|
+
if ($sdists.Count -ne 1) {
|
|
49
|
+
throw "Expected exactly one source distribution in dist/, found $($sdists.Count)."
|
|
50
|
+
}
|
|
51
|
+
uv run --isolated --no-project --with $wheels[0].FullName codeaway --help
|
|
52
|
+
uv run --isolated --no-project --with $sdists[0].FullName codeaway --help
|
|
53
|
+
|
|
54
|
+
- name: Upload distributions
|
|
55
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
56
|
+
with:
|
|
57
|
+
name: distributions
|
|
58
|
+
path: dist/
|
|
59
|
+
if-no-files-found: error
|
|
60
|
+
|
|
61
|
+
publish:
|
|
62
|
+
name: Publish to PyPI
|
|
63
|
+
runs-on: ubuntu-latest
|
|
64
|
+
needs: build
|
|
65
|
+
environment:
|
|
66
|
+
name: pypi
|
|
67
|
+
url: https://pypi.org/p/codeaway
|
|
68
|
+
permissions:
|
|
69
|
+
contents: read
|
|
70
|
+
id-token: write
|
|
71
|
+
|
|
72
|
+
steps:
|
|
73
|
+
- name: Download distributions
|
|
74
|
+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
75
|
+
with:
|
|
76
|
+
name: distributions
|
|
77
|
+
path: dist/
|
|
78
|
+
|
|
79
|
+
- name: Publish distributions to PyPI
|
|
80
|
+
uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # release/v1
|
|
81
|
+
with:
|
|
82
|
+
packages-dir: dist/
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
name: test
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
pull_request:
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
test:
|
|
12
|
+
name: Windows / Python 3.11
|
|
13
|
+
runs-on: windows-latest
|
|
14
|
+
|
|
15
|
+
steps:
|
|
16
|
+
- name: Check out repository
|
|
17
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
18
|
+
|
|
19
|
+
- name: Install uv and Python
|
|
20
|
+
uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
21
|
+
with:
|
|
22
|
+
python-version: "3.11"
|
|
23
|
+
|
|
24
|
+
- name: Install test environment
|
|
25
|
+
run: uv sync --extra test
|
|
26
|
+
|
|
27
|
+
- name: Run Python tests
|
|
28
|
+
run: uv run pytest -q
|
|
29
|
+
|
|
30
|
+
- name: Run browser tests
|
|
31
|
+
run: node --test tests/test_web_ui.cjs tests/test_web_dom.cjs tests/test_web_theme.cjs
|
|
32
|
+
|
|
33
|
+
- name: Build distributions
|
|
34
|
+
run: uv build
|
|
35
|
+
|
|
36
|
+
- name: Install wheel in a clean environment and run the command
|
|
37
|
+
shell: pwsh
|
|
38
|
+
run: |
|
|
39
|
+
$wheels = @(Get-ChildItem -Path dist -Filter *.whl -File)
|
|
40
|
+
if ($wheels.Count -ne 1) {
|
|
41
|
+
throw "Expected exactly one wheel in dist/, found $($wheels.Count)."
|
|
42
|
+
}
|
|
43
|
+
uv run --isolated --no-project --with $wheels[0].FullName codeaway --help
|
codeaway-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 CodeAway contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
codeaway-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: codeaway
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Control a local coding agent from your phone
|
|
5
|
+
Project-URL: Homepage, https://github.com/jmoraispk/codeaway2
|
|
6
|
+
Project-URL: Repository, https://github.com/jmoraispk/codeaway2
|
|
7
|
+
Project-URL: Issues, https://github.com/jmoraispk/codeaway2/issues
|
|
8
|
+
License-Expression: MIT
|
|
9
|
+
License-File: LICENSE
|
|
10
|
+
Keywords: ai,coding agents,remote control,tailscale
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Operating System :: Microsoft :: Windows
|
|
15
|
+
Classifier: Programming Language :: Python
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Topic :: Software Development
|
|
19
|
+
Requires-Python: >=3.11
|
|
20
|
+
Requires-Dist: pillow>=11.0
|
|
21
|
+
Requires-Dist: uiautomation>=2.0.20; sys_platform == 'win32'
|
|
22
|
+
Provides-Extra: test
|
|
23
|
+
Requires-Dist: pytest>=8.0; extra == 'test'
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
|
|
26
|
+
# CodeAway
|
|
27
|
+
|
|
28
|
+

|
|
29
|
+
|
|
30
|
+
CodeAway is a thin, browser-based remote control for local AI coding agents.
|
|
31
|
+
Version 0.1 supports one pairing only: **Windows with Codex Desktop**. The
|
|
32
|
+
source repository is `codeaway2`; the Python package and command are
|
|
33
|
+
`codeaway`.
|
|
34
|
+
|
|
35
|
+
> Status: early alpha. The Windows/Codex Desktop phone flow has been
|
|
36
|
+
> smoke-tested; expect rough edges and breaking changes.
|
|
37
|
+
|
|
38
|
+
## Install
|
|
39
|
+
|
|
40
|
+
The shortest recommended path is:
|
|
41
|
+
|
|
42
|
+
```powershell
|
|
43
|
+
uvx codeaway
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
`uvx` is convenient, not required. You can instead install with either:
|
|
47
|
+
|
|
48
|
+
```powershell
|
|
49
|
+
pipx install codeaway
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
```powershell
|
|
53
|
+
py -m pip install codeaway
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Platform support
|
|
57
|
+
|
|
58
|
+
Windows with Codex Desktop is the supported pairing. macOS and Linux can
|
|
59
|
+
install the package, but desktop control for those platforms is not implemented
|
|
60
|
+
yet.
|
|
61
|
+
|
|
62
|
+
## Run CodeAway
|
|
63
|
+
|
|
64
|
+
The first run is laptop-only. Start CodeAway in the foreground:
|
|
65
|
+
|
|
66
|
+
```powershell
|
|
67
|
+
uvx codeaway
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
It listens on `127.0.0.1:8765` and opens `/setup` in the laptop browser. Choose
|
|
71
|
+
the visible Codex Desktop window and draw all three capture regions:
|
|
72
|
+
|
|
73
|
+
- **Sidebar:** the projects and tasks on the left.
|
|
74
|
+
- **Conversation:** the right pane above the input.
|
|
75
|
+
- **Composer:** the chat box only; it may grow taller. Do not include the
|
|
76
|
+
full-width toolbar or status row.
|
|
77
|
+
|
|
78
|
+
To enable phone access, restart with an address assigned to the laptop on your
|
|
79
|
+
LAN or Tailscale network:
|
|
80
|
+
|
|
81
|
+
```powershell
|
|
82
|
+
uvx codeaway --ip <IPv4-LAN-or-Tailscale-address>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
The explicit address is saved only after it binds successfully. Later
|
|
86
|
+
`uvx codeaway` launches reuse both that address and the saved calibration. If
|
|
87
|
+
the saved Codex window and all three regions resolve, CodeAway prints the phone
|
|
88
|
+
workspace URL without opening a laptop browser. The phone workspace still
|
|
89
|
+
links to `/setup` when recalibration is needed.
|
|
90
|
+
|
|
91
|
+
If a cached address is no longer available, CodeAway warns, falls back to
|
|
92
|
+
`127.0.0.1`, and saves that fallback. An invalid explicit address exits instead
|
|
93
|
+
of silently changing interfaces. Use `--no-browser` to suppress an otherwise
|
|
94
|
+
necessary setup launch and `--port PORT` to select and cache another port.
|
|
95
|
+
CodeAway v0.1 accepts IPv4 literals only; IPv6 addresses are rejected with an
|
|
96
|
+
actionable startup error.
|
|
97
|
+
|
|
98
|
+
> **Security:** A non-loopback endpoint grants full desktop mouse and keyboard
|
|
99
|
+
> input control to every device that can reach it. CodeAway v0.1 has no pairing
|
|
100
|
+
> or authentication, so expose it only on a network boundary you trust.
|
|
101
|
+
|
|
102
|
+
## Architecture
|
|
103
|
+
|
|
104
|
+
CodeAway deliberately separates two independent backend axes:
|
|
105
|
+
|
|
106
|
+
| Module | Backends | Responsibility |
|
|
107
|
+
| --- | --- | --- |
|
|
108
|
+
| `agents.py` | Codex first; Claude Code and Cursor later | Owns application semantics: detection, projects and tasks, navigation, calibrated surfaces, and actions |
|
|
109
|
+
| `desktop.py` | Windows first; macOS and Linux later | Owns OS mechanics: windows, screenshots, accessibility, mouse, keyboard, and clipboard operations |
|
|
110
|
+
|
|
111
|
+
The server composes one agent backend with one desktop backend. For the first
|
|
112
|
+
release that pair is Codex Desktop on Windows. Agent backends do not contain
|
|
113
|
+
Windows APIs, and desktop backends do not contain Codex-specific behavior.
|
codeaway-0.1.0/README.md
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
# CodeAway
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
CodeAway is a thin, browser-based remote control for local AI coding agents.
|
|
6
|
+
Version 0.1 supports one pairing only: **Windows with Codex Desktop**. The
|
|
7
|
+
source repository is `codeaway2`; the Python package and command are
|
|
8
|
+
`codeaway`.
|
|
9
|
+
|
|
10
|
+
> Status: early alpha. The Windows/Codex Desktop phone flow has been
|
|
11
|
+
> smoke-tested; expect rough edges and breaking changes.
|
|
12
|
+
|
|
13
|
+
## Install
|
|
14
|
+
|
|
15
|
+
The shortest recommended path is:
|
|
16
|
+
|
|
17
|
+
```powershell
|
|
18
|
+
uvx codeaway
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
`uvx` is convenient, not required. You can instead install with either:
|
|
22
|
+
|
|
23
|
+
```powershell
|
|
24
|
+
pipx install codeaway
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
```powershell
|
|
28
|
+
py -m pip install codeaway
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Platform support
|
|
32
|
+
|
|
33
|
+
Windows with Codex Desktop is the supported pairing. macOS and Linux can
|
|
34
|
+
install the package, but desktop control for those platforms is not implemented
|
|
35
|
+
yet.
|
|
36
|
+
|
|
37
|
+
## Run CodeAway
|
|
38
|
+
|
|
39
|
+
The first run is laptop-only. Start CodeAway in the foreground:
|
|
40
|
+
|
|
41
|
+
```powershell
|
|
42
|
+
uvx codeaway
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
It listens on `127.0.0.1:8765` and opens `/setup` in the laptop browser. Choose
|
|
46
|
+
the visible Codex Desktop window and draw all three capture regions:
|
|
47
|
+
|
|
48
|
+
- **Sidebar:** the projects and tasks on the left.
|
|
49
|
+
- **Conversation:** the right pane above the input.
|
|
50
|
+
- **Composer:** the chat box only; it may grow taller. Do not include the
|
|
51
|
+
full-width toolbar or status row.
|
|
52
|
+
|
|
53
|
+
To enable phone access, restart with an address assigned to the laptop on your
|
|
54
|
+
LAN or Tailscale network:
|
|
55
|
+
|
|
56
|
+
```powershell
|
|
57
|
+
uvx codeaway --ip <IPv4-LAN-or-Tailscale-address>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
The explicit address is saved only after it binds successfully. Later
|
|
61
|
+
`uvx codeaway` launches reuse both that address and the saved calibration. If
|
|
62
|
+
the saved Codex window and all three regions resolve, CodeAway prints the phone
|
|
63
|
+
workspace URL without opening a laptop browser. The phone workspace still
|
|
64
|
+
links to `/setup` when recalibration is needed.
|
|
65
|
+
|
|
66
|
+
If a cached address is no longer available, CodeAway warns, falls back to
|
|
67
|
+
`127.0.0.1`, and saves that fallback. An invalid explicit address exits instead
|
|
68
|
+
of silently changing interfaces. Use `--no-browser` to suppress an otherwise
|
|
69
|
+
necessary setup launch and `--port PORT` to select and cache another port.
|
|
70
|
+
CodeAway v0.1 accepts IPv4 literals only; IPv6 addresses are rejected with an
|
|
71
|
+
actionable startup error.
|
|
72
|
+
|
|
73
|
+
> **Security:** A non-loopback endpoint grants full desktop mouse and keyboard
|
|
74
|
+
> input control to every device that can reach it. CodeAway v0.1 has no pairing
|
|
75
|
+
> or authentication, so expose it only on a network boundary you trust.
|
|
76
|
+
|
|
77
|
+
## Architecture
|
|
78
|
+
|
|
79
|
+
CodeAway deliberately separates two independent backend axes:
|
|
80
|
+
|
|
81
|
+
| Module | Backends | Responsibility |
|
|
82
|
+
| --- | --- | --- |
|
|
83
|
+
| `agents.py` | Codex first; Claude Code and Cursor later | Owns application semantics: detection, projects and tasks, navigation, calibrated surfaces, and actions |
|
|
84
|
+
| `desktop.py` | Windows first; macOS and Linux later | Owns OS mechanics: windows, screenshots, accessibility, mouse, keyboard, and clipboard operations |
|
|
85
|
+
|
|
86
|
+
The server composes one agent backend with one desktop backend. For the first
|
|
87
|
+
release that pair is Codex Desktop on Windows. Agent backends do not contain
|
|
88
|
+
Windows APIs, and desktop backends do not contain Codex-specific behavior.
|
|
Binary file
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling>=1.27"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "codeaway"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Control a local coding agent from your phone"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.11"
|
|
11
|
+
license = "MIT"
|
|
12
|
+
license-files = ["LICENSE"]
|
|
13
|
+
keywords = ["ai", "coding agents", "remote control", "tailscale"]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Development Status :: 3 - Alpha",
|
|
16
|
+
"Intended Audience :: Developers",
|
|
17
|
+
"Topic :: Software Development",
|
|
18
|
+
"License :: OSI Approved :: MIT License",
|
|
19
|
+
"Operating System :: Microsoft :: Windows",
|
|
20
|
+
"Programming Language :: Python",
|
|
21
|
+
"Programming Language :: Python :: 3",
|
|
22
|
+
"Programming Language :: Python :: 3.11",
|
|
23
|
+
]
|
|
24
|
+
dependencies = [
|
|
25
|
+
"Pillow>=11.0",
|
|
26
|
+
"uiautomation>=2.0.20; sys_platform == 'win32'",
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
[project.urls]
|
|
30
|
+
Homepage = "https://github.com/jmoraispk/codeaway2"
|
|
31
|
+
Repository = "https://github.com/jmoraispk/codeaway2"
|
|
32
|
+
Issues = "https://github.com/jmoraispk/codeaway2/issues"
|
|
33
|
+
|
|
34
|
+
[project.optional-dependencies]
|
|
35
|
+
test = ["pytest>=8.0"]
|
|
36
|
+
|
|
37
|
+
[project.scripts]
|
|
38
|
+
codeaway = "codeaway.cli:main"
|
|
39
|
+
|
|
40
|
+
[tool.hatch.build.targets.wheel]
|
|
41
|
+
packages = ["src/codeaway"]
|
|
42
|
+
artifacts = [
|
|
43
|
+
"src/codeaway/web/*.html",
|
|
44
|
+
"src/codeaway/web/*.css",
|
|
45
|
+
"src/codeaway/web/*.js",
|
|
46
|
+
]
|
|
47
|
+
|
|
48
|
+
[tool.hatch.build.targets.sdist]
|
|
49
|
+
exclude = [
|
|
50
|
+
"/.superpowers/**",
|
|
51
|
+
"/output/**",
|
|
52
|
+
"/dist/**",
|
|
53
|
+
"/uv.lock",
|
|
54
|
+
"/.pytest_cache/**",
|
|
55
|
+
"/.ruff_cache/**",
|
|
56
|
+
"/.mypy_cache/**",
|
|
57
|
+
"**/__pycache__/**",
|
|
58
|
+
"**/*.py[cod]",
|
|
59
|
+
]
|
|
60
|
+
|
|
61
|
+
[tool.pytest.ini_options]
|
|
62
|
+
testpaths = ["tests"]
|