threadline-review 0.2.0b1__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.
- threadline_review-0.2.0b1/LICENSE +21 -0
- threadline_review-0.2.0b1/PKG-INFO +198 -0
- threadline_review-0.2.0b1/README.md +155 -0
- threadline_review-0.2.0b1/pyproject.toml +33 -0
- threadline_review-0.2.0b1/setup.cfg +4 -0
- threadline_review-0.2.0b1/threadline/__init__.py +8 -0
- threadline_review-0.2.0b1/threadline/__main__.py +2 -0
- threadline_review-0.2.0b1/threadline/analyzer.py +677 -0
- threadline_review-0.2.0b1/threadline/changes.py +215 -0
- threadline_review-0.2.0b1/threadline/cli.py +47 -0
- threadline_review-0.2.0b1/threadline/server.py +158 -0
- threadline_review-0.2.0b1/threadline/service.py +436 -0
- threadline_review-0.2.0b1/threadline/static/__init__.py +1 -0
- threadline_review-0.2.0b1/threadline/static/app.js +651 -0
- threadline_review-0.2.0b1/threadline/static/index.html +61 -0
- threadline_review-0.2.0b1/threadline/static/styles.css +375 -0
- threadline_review-0.2.0b1/threadline/static/workflow.js +177 -0
- threadline_review-0.2.0b1/threadline/workflows.py +262 -0
- threadline_review-0.2.0b1/threadline_review.egg-info/PKG-INFO +198 -0
- threadline_review-0.2.0b1/threadline_review.egg-info/SOURCES.txt +22 -0
- threadline_review-0.2.0b1/threadline_review.egg-info/dependency_links.txt +1 -0
- threadline_review-0.2.0b1/threadline_review.egg-info/entry_points.txt +2 -0
- threadline_review-0.2.0b1/threadline_review.egg-info/requires.txt +4 -0
- threadline_review-0.2.0b1/threadline_review.egg-info/top_level.txt +1 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Threadline 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.
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: threadline-review
|
|
3
|
+
Version: 0.2.0b1
|
|
4
|
+
Summary: Visual, source-backed review of Python workflows before execution
|
|
5
|
+
Author: Threadline contributors
|
|
6
|
+
License: MIT License
|
|
7
|
+
|
|
8
|
+
Copyright (c) 2026 Threadline contributors
|
|
9
|
+
|
|
10
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
12
|
+
in the Software without restriction, including without limitation the rights
|
|
13
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
14
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
15
|
+
furnished to do so, subject to the following conditions:
|
|
16
|
+
|
|
17
|
+
The above copyright notice and this permission notice shall be included in all
|
|
18
|
+
copies or substantial portions of the Software.
|
|
19
|
+
|
|
20
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
21
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
22
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
23
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
24
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
25
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
26
|
+
SOFTWARE.
|
|
27
|
+
|
|
28
|
+
Project-URL: Homepage, https://github.com/Raman369AI/threadline
|
|
29
|
+
Project-URL: Documentation, https://github.com/Raman369AI/threadline/tree/main/docs
|
|
30
|
+
Project-URL: Repository, https://github.com/Raman369AI/threadline
|
|
31
|
+
Project-URL: Issues, https://github.com/Raman369AI/threadline/issues
|
|
32
|
+
Keywords: python,static-analysis,code-review,visualization
|
|
33
|
+
Classifier: Development Status :: 4 - Beta
|
|
34
|
+
Classifier: Programming Language :: Python :: 3
|
|
35
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
36
|
+
Requires-Python: >=3.12
|
|
37
|
+
Description-Content-Type: text/markdown
|
|
38
|
+
License-File: LICENSE
|
|
39
|
+
Provides-Extra: browser-test
|
|
40
|
+
Requires-Dist: websocket-client<2,>=1.7; extra == "browser-test"
|
|
41
|
+
Requires-Dist: selenium<5,>=4.35; extra == "browser-test"
|
|
42
|
+
Dynamic: license-file
|
|
43
|
+
|
|
44
|
+
# Threadline
|
|
45
|
+
|
|
46
|
+
[Documentation](docs/README.md) · [Getting started](docs/USING_THREADLINE.md) · [Capabilities](docs/CAPABILITIES.md) · [Contributing](CONTRIBUTING.md)
|
|
47
|
+
|
|
48
|
+
Threadline is a visual Python code reviewer for understanding a workflow before running it.
|
|
49
|
+
|
|
50
|
+
Select any function or method. Threadline shows its inputs and outputs, local control flow, calls into other files, return destinations, effects, and unresolved targets. Select any step to inspect the exact original source while keeping the surrounding workflow visible.
|
|
51
|
+
|
|
52
|
+
Threadline parses source. It does not import or execute the project being reviewed.
|
|
53
|
+
|
|
54
|
+
## What you see
|
|
55
|
+
|
|
56
|
+
```text
|
|
57
|
+
Request
|
|
58
|
+
│ request fields
|
|
59
|
+
▼
|
|
60
|
+
Validate
|
|
61
|
+
├─ invalid → early return
|
|
62
|
+
│ validated items + coupon
|
|
63
|
+
▼
|
|
64
|
+
Calculate total
|
|
65
|
+
│ subtotal − discount + tax
|
|
66
|
+
▼
|
|
67
|
+
Save order
|
|
68
|
+
│ persisted order
|
|
69
|
+
▼
|
|
70
|
+
Response
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
The interface provides three levels without sending you to another page:
|
|
74
|
+
|
|
75
|
+
- **Workflow:** the flow starting from the selected method.
|
|
76
|
+
- **Focused step:** branches, calls, transformations, effects, and returns at that point.
|
|
77
|
+
- **Source:** the exact code supporting the selected operation.
|
|
78
|
+
|
|
79
|
+
Calls stay nested under their call site. Workflow pages load progressively, and branch bodies load when expanded. Loops appear once, recursion is marked, and possible or unknown targets remain visibly uncertain.
|
|
80
|
+
|
|
81
|
+
## Requirements
|
|
82
|
+
|
|
83
|
+
- Python 3.12 or later
|
|
84
|
+
- A local directory containing Python source
|
|
85
|
+
- A modern browser
|
|
86
|
+
|
|
87
|
+
The target project does not need to be installed and its dependencies do not need to be available.
|
|
88
|
+
|
|
89
|
+
## Install
|
|
90
|
+
|
|
91
|
+
From a source checkout:
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
git clone https://github.com/Raman369AI/threadline.git
|
|
95
|
+
cd threadline
|
|
96
|
+
python3 -m venv .venv
|
|
97
|
+
.venv/bin/python -m pip install .
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
If you have a locally built or shared release wheel:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
python3 -m venv .venv
|
|
104
|
+
.venv/bin/python -m pip install threadline_review-0.2.0b1-py3-none-any.whl
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
## Review a repository
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
.venv/bin/threadline review /path/to/python-repository
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Threadline prints and opens a local URL, normally <http://127.0.0.1:4173/>. Use `--port 4180` if that port is occupied.
|
|
114
|
+
|
|
115
|
+
In the browser:
|
|
116
|
+
|
|
117
|
+
1. Use **Endpoints**, **Commands & tasks**, or **Modules & methods**, or search across all three.
|
|
118
|
+
2. One click opens its workflow, local logic, and original source.
|
|
119
|
+
3. Follow source-linked calls across files from that selected method.
|
|
120
|
+
4. Expand branches or calls in place; use **Back to caller** to resume where you left off.
|
|
121
|
+
5. Open **Coverage** to see parse failures, excluded paths, and unmodeled call syntax.
|
|
122
|
+
|
|
123
|
+
Try the bundled example:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
.venv/bin/threadline review example
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
## Review a Git change
|
|
130
|
+
|
|
131
|
+
Run Threadline from the working tree and provide the Git baseline:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
.venv/bin/threadline review /path/to/git-repository --base HEAD
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
The **Changes** view distinguishes modified methods, previous and deleted methods, current source-linked callers, historical baseline callers, and possible impact. Choose **Compare before / after** to read both retained versions together. Threadline reads Git objects without checking out or executing either version.
|
|
138
|
+
|
|
139
|
+
## Structured output
|
|
140
|
+
|
|
141
|
+
The browser is the primary interface. JSON commands are available for scripts and CI:
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
threadline inspect /path/to/repository --query create_order
|
|
145
|
+
threadline inspect /path/to/repository --entrypoint package.module:create_order
|
|
146
|
+
threadline changes /path/to/repository --base HEAD
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Use `--source-root path` to select an application source directory. Repeat `--exclude path` for generated, vendored, or irrelevant directories.
|
|
150
|
+
|
|
151
|
+
## What static analysis can establish
|
|
152
|
+
|
|
153
|
+
Threadline labels call relationships according to their evidence:
|
|
154
|
+
|
|
155
|
+
- **Supported:** the source resolves one local target.
|
|
156
|
+
- **Possible:** the source identifies one or more candidates but runtime dispatch remains uncertain.
|
|
157
|
+
- **External:** the target belongs outside the analyzed source.
|
|
158
|
+
- **Unknown:** the source does not identify a target.
|
|
159
|
+
|
|
160
|
+
These labels describe source structure. They do not represent an observed execution or prove that the code is correct.
|
|
161
|
+
|
|
162
|
+
See the [capability matrix](docs/CAPABILITIES.md), [usage guide](docs/USING_THREADLINE.md), and [validation record](docs/VALIDATION.md) for details.
|
|
163
|
+
|
|
164
|
+
## Documentation
|
|
165
|
+
|
|
166
|
+
Start with the **[documentation hub](docs/README.md)** for installation, everyday review, analysis limits, and project maintenance.
|
|
167
|
+
|
|
168
|
+
| I want to… | Read |
|
|
169
|
+
| --- | --- |
|
|
170
|
+
| Review a repository or Git change | [Usage guide](docs/USING_THREADLINE.md) |
|
|
171
|
+
| Understand supported syntax and uncertain calls | [Capability matrix](docs/CAPABILITIES.md) |
|
|
172
|
+
| Check test results and platform coverage | [Validation record](docs/VALIDATION.md) |
|
|
173
|
+
| Understand keyboard access and browser checks | [Accessibility](docs/ACCESSIBILITY.md) |
|
|
174
|
+
| Check resource limits for a larger repository | [Performance and resource budgets](docs/PERFORMANCE.md) |
|
|
175
|
+
| Publish a package release | [PyPI publishing guide](docs/PUBLISHING.md) |
|
|
176
|
+
| Report a vulnerability privately | [Security policy](SECURITY.md) |
|
|
177
|
+
|
|
178
|
+
## Validation
|
|
179
|
+
|
|
180
|
+
The self-contained suite covers source non-execution, exact statement and call accounting, branches, exceptions, loops, recursion, cross-file calls, snapshot evidence, Git changes, HTTP restrictions, packaging, and browser behavior.
|
|
181
|
+
|
|
182
|
+
A separate acceptance corpus tests pinned versions of [Flask](https://github.com/pallets/flask), [Requests](https://github.com/psf/requests), [FastAPI](https://github.com/fastapi/fastapi), [Celery](https://github.com/celery/celery), [Django](https://github.com/django/django), [OpenTelemetry](https://github.com/open-telemetry/opentelemetry-python), and [Pants](https://github.com/pantsbuild/pants). See [public repository validation](docs/ONLINE_VALIDATION.md).
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
python3 -m unittest discover -v
|
|
186
|
+
node --check threadline/static/app.js
|
|
187
|
+
node --check threadline/static/workflow.js
|
|
188
|
+
python3 tests/browser_smoke.py
|
|
189
|
+
python3 tests/online_repo_smoke.py --report artifacts/online-validation.json
|
|
190
|
+
python3 -m pip wheel . --no-deps -w dist
|
|
191
|
+
python3 tests/release_smoke.py dist/*.whl
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## Project status
|
|
195
|
+
|
|
196
|
+
Threadline is a developer beta. The standalone application and wheel are usable now. The expanded corpus, performance budgets, Linux/macOS matrix, native Safari, accessibility checks, and clean-wheel installs pass. The maintainer owns the three first-time reviewer sessions and final release sign-off. See the [release checklist](docs/RELEASE_CHECKLIST.md) and [resource budgets](docs/PERFORMANCE.md).
|
|
197
|
+
|
|
198
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md), [SECURITY.md](SECURITY.md), [CHANGELOG.md](CHANGELOG.md), and the [MIT License](LICENSE).
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# Threadline
|
|
2
|
+
|
|
3
|
+
[Documentation](docs/README.md) · [Getting started](docs/USING_THREADLINE.md) · [Capabilities](docs/CAPABILITIES.md) · [Contributing](CONTRIBUTING.md)
|
|
4
|
+
|
|
5
|
+
Threadline is a visual Python code reviewer for understanding a workflow before running it.
|
|
6
|
+
|
|
7
|
+
Select any function or method. Threadline shows its inputs and outputs, local control flow, calls into other files, return destinations, effects, and unresolved targets. Select any step to inspect the exact original source while keeping the surrounding workflow visible.
|
|
8
|
+
|
|
9
|
+
Threadline parses source. It does not import or execute the project being reviewed.
|
|
10
|
+
|
|
11
|
+
## What you see
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
Request
|
|
15
|
+
│ request fields
|
|
16
|
+
▼
|
|
17
|
+
Validate
|
|
18
|
+
├─ invalid → early return
|
|
19
|
+
│ validated items + coupon
|
|
20
|
+
▼
|
|
21
|
+
Calculate total
|
|
22
|
+
│ subtotal − discount + tax
|
|
23
|
+
▼
|
|
24
|
+
Save order
|
|
25
|
+
│ persisted order
|
|
26
|
+
▼
|
|
27
|
+
Response
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
The interface provides three levels without sending you to another page:
|
|
31
|
+
|
|
32
|
+
- **Workflow:** the flow starting from the selected method.
|
|
33
|
+
- **Focused step:** branches, calls, transformations, effects, and returns at that point.
|
|
34
|
+
- **Source:** the exact code supporting the selected operation.
|
|
35
|
+
|
|
36
|
+
Calls stay nested under their call site. Workflow pages load progressively, and branch bodies load when expanded. Loops appear once, recursion is marked, and possible or unknown targets remain visibly uncertain.
|
|
37
|
+
|
|
38
|
+
## Requirements
|
|
39
|
+
|
|
40
|
+
- Python 3.12 or later
|
|
41
|
+
- A local directory containing Python source
|
|
42
|
+
- A modern browser
|
|
43
|
+
|
|
44
|
+
The target project does not need to be installed and its dependencies do not need to be available.
|
|
45
|
+
|
|
46
|
+
## Install
|
|
47
|
+
|
|
48
|
+
From a source checkout:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
git clone https://github.com/Raman369AI/threadline.git
|
|
52
|
+
cd threadline
|
|
53
|
+
python3 -m venv .venv
|
|
54
|
+
.venv/bin/python -m pip install .
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
If you have a locally built or shared release wheel:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
python3 -m venv .venv
|
|
61
|
+
.venv/bin/python -m pip install threadline_review-0.2.0b1-py3-none-any.whl
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Review a repository
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
.venv/bin/threadline review /path/to/python-repository
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Threadline prints and opens a local URL, normally <http://127.0.0.1:4173/>. Use `--port 4180` if that port is occupied.
|
|
71
|
+
|
|
72
|
+
In the browser:
|
|
73
|
+
|
|
74
|
+
1. Use **Endpoints**, **Commands & tasks**, or **Modules & methods**, or search across all three.
|
|
75
|
+
2. One click opens its workflow, local logic, and original source.
|
|
76
|
+
3. Follow source-linked calls across files from that selected method.
|
|
77
|
+
4. Expand branches or calls in place; use **Back to caller** to resume where you left off.
|
|
78
|
+
5. Open **Coverage** to see parse failures, excluded paths, and unmodeled call syntax.
|
|
79
|
+
|
|
80
|
+
Try the bundled example:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
.venv/bin/threadline review example
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Review a Git change
|
|
87
|
+
|
|
88
|
+
Run Threadline from the working tree and provide the Git baseline:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
.venv/bin/threadline review /path/to/git-repository --base HEAD
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
The **Changes** view distinguishes modified methods, previous and deleted methods, current source-linked callers, historical baseline callers, and possible impact. Choose **Compare before / after** to read both retained versions together. Threadline reads Git objects without checking out or executing either version.
|
|
95
|
+
|
|
96
|
+
## Structured output
|
|
97
|
+
|
|
98
|
+
The browser is the primary interface. JSON commands are available for scripts and CI:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
threadline inspect /path/to/repository --query create_order
|
|
102
|
+
threadline inspect /path/to/repository --entrypoint package.module:create_order
|
|
103
|
+
threadline changes /path/to/repository --base HEAD
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Use `--source-root path` to select an application source directory. Repeat `--exclude path` for generated, vendored, or irrelevant directories.
|
|
107
|
+
|
|
108
|
+
## What static analysis can establish
|
|
109
|
+
|
|
110
|
+
Threadline labels call relationships according to their evidence:
|
|
111
|
+
|
|
112
|
+
- **Supported:** the source resolves one local target.
|
|
113
|
+
- **Possible:** the source identifies one or more candidates but runtime dispatch remains uncertain.
|
|
114
|
+
- **External:** the target belongs outside the analyzed source.
|
|
115
|
+
- **Unknown:** the source does not identify a target.
|
|
116
|
+
|
|
117
|
+
These labels describe source structure. They do not represent an observed execution or prove that the code is correct.
|
|
118
|
+
|
|
119
|
+
See the [capability matrix](docs/CAPABILITIES.md), [usage guide](docs/USING_THREADLINE.md), and [validation record](docs/VALIDATION.md) for details.
|
|
120
|
+
|
|
121
|
+
## Documentation
|
|
122
|
+
|
|
123
|
+
Start with the **[documentation hub](docs/README.md)** for installation, everyday review, analysis limits, and project maintenance.
|
|
124
|
+
|
|
125
|
+
| I want to… | Read |
|
|
126
|
+
| --- | --- |
|
|
127
|
+
| Review a repository or Git change | [Usage guide](docs/USING_THREADLINE.md) |
|
|
128
|
+
| Understand supported syntax and uncertain calls | [Capability matrix](docs/CAPABILITIES.md) |
|
|
129
|
+
| Check test results and platform coverage | [Validation record](docs/VALIDATION.md) |
|
|
130
|
+
| Understand keyboard access and browser checks | [Accessibility](docs/ACCESSIBILITY.md) |
|
|
131
|
+
| Check resource limits for a larger repository | [Performance and resource budgets](docs/PERFORMANCE.md) |
|
|
132
|
+
| Publish a package release | [PyPI publishing guide](docs/PUBLISHING.md) |
|
|
133
|
+
| Report a vulnerability privately | [Security policy](SECURITY.md) |
|
|
134
|
+
|
|
135
|
+
## Validation
|
|
136
|
+
|
|
137
|
+
The self-contained suite covers source non-execution, exact statement and call accounting, branches, exceptions, loops, recursion, cross-file calls, snapshot evidence, Git changes, HTTP restrictions, packaging, and browser behavior.
|
|
138
|
+
|
|
139
|
+
A separate acceptance corpus tests pinned versions of [Flask](https://github.com/pallets/flask), [Requests](https://github.com/psf/requests), [FastAPI](https://github.com/fastapi/fastapi), [Celery](https://github.com/celery/celery), [Django](https://github.com/django/django), [OpenTelemetry](https://github.com/open-telemetry/opentelemetry-python), and [Pants](https://github.com/pantsbuild/pants). See [public repository validation](docs/ONLINE_VALIDATION.md).
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
python3 -m unittest discover -v
|
|
143
|
+
node --check threadline/static/app.js
|
|
144
|
+
node --check threadline/static/workflow.js
|
|
145
|
+
python3 tests/browser_smoke.py
|
|
146
|
+
python3 tests/online_repo_smoke.py --report artifacts/online-validation.json
|
|
147
|
+
python3 -m pip wheel . --no-deps -w dist
|
|
148
|
+
python3 tests/release_smoke.py dist/*.whl
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Project status
|
|
152
|
+
|
|
153
|
+
Threadline is a developer beta. The standalone application and wheel are usable now. The expanded corpus, performance budgets, Linux/macOS matrix, native Safari, accessibility checks, and clean-wheel installs pass. The maintainer owns the three first-time reviewer sessions and final release sign-off. See the [release checklist](docs/RELEASE_CHECKLIST.md) and [resource budgets](docs/PERFORMANCE.md).
|
|
154
|
+
|
|
155
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md), [SECURITY.md](SECURITY.md), [CHANGELOG.md](CHANGELOG.md), and the [MIT License](LICENSE).
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=69", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "threadline-review"
|
|
7
|
+
version = "0.2.0b1"
|
|
8
|
+
description = "Visual, source-backed review of Python workflows before execution"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.12"
|
|
11
|
+
license = {file = "LICENSE"}
|
|
12
|
+
authors = [{name = "Threadline contributors"}]
|
|
13
|
+
classifiers = ["Development Status :: 4 - Beta", "Programming Language :: Python :: 3", "License :: OSI Approved :: MIT License"]
|
|
14
|
+
keywords = ["python", "static-analysis", "code-review", "visualization"]
|
|
15
|
+
|
|
16
|
+
[project.urls]
|
|
17
|
+
Homepage = "https://github.com/Raman369AI/threadline"
|
|
18
|
+
Documentation = "https://github.com/Raman369AI/threadline/tree/main/docs"
|
|
19
|
+
Repository = "https://github.com/Raman369AI/threadline"
|
|
20
|
+
Issues = "https://github.com/Raman369AI/threadline/issues"
|
|
21
|
+
|
|
22
|
+
[project.optional-dependencies]
|
|
23
|
+
browser-test = ["websocket-client>=1.7,<2", "selenium>=4.35,<5"]
|
|
24
|
+
|
|
25
|
+
[project.scripts]
|
|
26
|
+
threadline = "threadline.cli:main"
|
|
27
|
+
|
|
28
|
+
[tool.setuptools]
|
|
29
|
+
include-package-data = true
|
|
30
|
+
packages = ["threadline", "threadline.static"]
|
|
31
|
+
|
|
32
|
+
[tool.setuptools.package-data]
|
|
33
|
+
"threadline.static" = ["*.html", "*.js", "*.css"]
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"""Threadline: source-backed Python workflow review."""
|
|
2
|
+
|
|
3
|
+
__version__ = "0.2.0b1"
|
|
4
|
+
|
|
5
|
+
from .analyzer import Analyzer, analyze
|
|
6
|
+
from .service import SnapshotStore, ThreadlineError
|
|
7
|
+
|
|
8
|
+
__all__ = ["Analyzer", "SnapshotStore", "ThreadlineError", "analyze", "__version__"]
|