sknext 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.
- sknext-0.1.0/PKG-INFO +291 -0
- sknext-0.1.0/README.md +258 -0
- sknext-0.1.0/pyproject.toml +96 -0
- sknext-0.1.0/src/sknext/__init__.py +7 -0
- sknext-0.1.0/src/sknext/__main__.py +6 -0
- sknext-0.1.0/src/sknext/cli.py +138 -0
- sknext-0.1.0/src/sknext/constants.py +14 -0
- sknext-0.1.0/src/sknext/discovery.py +179 -0
- sknext-0.1.0/src/sknext/formatter.py +330 -0
- sknext-0.1.0/src/sknext/models.py +137 -0
- sknext-0.1.0/src/sknext/parser.py +179 -0
sknext-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: sknext
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Task status viewer for speckit projects
|
|
5
|
+
Keywords: task,project-management,cli,speckit,development-tools
|
|
6
|
+
Author: Ken Hiatt
|
|
7
|
+
Author-email: Ken Hiatt <ken.hiatt@gmail.com>
|
|
8
|
+
License: MIT
|
|
9
|
+
Classifier: Development Status :: 4 - Beta
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
17
|
+
Classifier: Topic :: Software Development :: Documentation
|
|
18
|
+
Classifier: Topic :: Utilities
|
|
19
|
+
Classifier: Typing :: Typed
|
|
20
|
+
Requires-Dist: typer>=0.9.0
|
|
21
|
+
Requires-Dist: rich>=13.0.0
|
|
22
|
+
Requires-Dist: pytest>=7.0.0 ; extra == 'dev'
|
|
23
|
+
Requires-Dist: pytest-cov>=4.0.0 ; extra == 'dev'
|
|
24
|
+
Requires-Dist: mypy>=1.0.0 ; extra == 'dev'
|
|
25
|
+
Requires-Dist: ruff>=0.1.0 ; extra == 'dev'
|
|
26
|
+
Requires-Python: >=3.11
|
|
27
|
+
Project-URL: Homepage, https://github.com/kenhia/sknext
|
|
28
|
+
Project-URL: Repository, https://github.com/kenhia/sknext
|
|
29
|
+
Project-URL: Issues, https://github.com/kenhia/sknext/issues
|
|
30
|
+
Project-URL: Changelog, https://github.com/kenhia/sknext/releases
|
|
31
|
+
Provides-Extra: dev
|
|
32
|
+
Description-Content-Type: text/markdown
|
|
33
|
+
|
|
34
|
+
# sknext
|
|
35
|
+
|
|
36
|
+
Task status viewer for speckit projects - a CLI tool to quickly view and track tasks from your project's tasks.md file.
|
|
37
|
+
|
|
38
|
+
## Features
|
|
39
|
+
|
|
40
|
+
- ๐ **Fast**: View next tasks in <2 seconds
|
|
41
|
+
- ๐ **Multiple Views**: 6 different viewing modes for different workflows
|
|
42
|
+
- ๐ **Auto-Discovery**: Automatically finds latest tasks.md in specs/###-*/ directories
|
|
43
|
+
- ๐จ **Rich Formatting**: Color-coded output with priority and story tag highlighting
|
|
44
|
+
- โ
**Type Safe**: 100% type-checked with mypy in strict mode
|
|
45
|
+
- ๐งช **Well Tested**: 97 tests with 94% coverage
|
|
46
|
+
|
|
47
|
+
## Installation
|
|
48
|
+
|
|
49
|
+
### From PyPI (Recommended)
|
|
50
|
+
|
|
51
|
+
Once published, install directly from PyPI:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
pip install sknext
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Or with uv:
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
uv pip install sknext
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### From Source
|
|
64
|
+
|
|
65
|
+
For development or to use the latest unreleased version:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
# Install uv if you don't have it
|
|
69
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
70
|
+
|
|
71
|
+
# Clone and install
|
|
72
|
+
git clone https://github.com/kenhia/sknext.git
|
|
73
|
+
cd sknext
|
|
74
|
+
uv sync
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Usage
|
|
78
|
+
|
|
79
|
+
### Auto-Discovery from Any Directory
|
|
80
|
+
|
|
81
|
+
**sknext** automatically detects your project's repository root and finds the latest `tasks.md` file:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
# Run from any subdirectory in your project
|
|
85
|
+
cd src/mymodule
|
|
86
|
+
sknext
|
|
87
|
+
|
|
88
|
+
# Run from repository root
|
|
89
|
+
cd /path/to/project
|
|
90
|
+
sknext
|
|
91
|
+
|
|
92
|
+
# Run from a feature subdirectory
|
|
93
|
+
cd specs/001-my-feature
|
|
94
|
+
sknext
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**How it works:**
|
|
98
|
+
1. **Git Detection**: Uses `git rev-parse --show-toplevel` to find repository root (fastest)
|
|
99
|
+
2. **VCS Markers**: Falls back to searching for `.git`, `.hg`, or `.svn` directories (up to 10 levels)
|
|
100
|
+
3. **Specs Fallback**: If no VCS found, searches for `specs/` directory (for non-git projects)
|
|
101
|
+
4. **Latest Discovery**: Finds the highest numbered `specs/###-*/tasks.md` file
|
|
102
|
+
|
|
103
|
+
This means you can work deep in your codebase and quickly check task status without navigating to the project root!
|
|
104
|
+
|
|
105
|
+
### Quick Status Check (Default)
|
|
106
|
+
|
|
107
|
+
Show the next 10 uncompleted tasks with full context:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
sknext
|
|
111
|
+
# or
|
|
112
|
+
sknext path/to/tasks.md
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Custom Task Count
|
|
116
|
+
|
|
117
|
+
Show a specific number of tasks:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
sknext -n 5 # Show next 5 tasks
|
|
121
|
+
sknext -n 25 # Show next 25 tasks
|
|
122
|
+
sknext -n 0 # Show header only (no tasks)
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
### Phase Overview
|
|
126
|
+
|
|
127
|
+
Show only phases with uncompleted work (no sections or tasks):
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
sknext --phases-only
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Perfect for quick status updates or understanding high-level progress.
|
|
134
|
+
|
|
135
|
+
### Structure View
|
|
136
|
+
|
|
137
|
+
Show phases and sections with uncompleted work (no individual tasks):
|
|
138
|
+
|
|
139
|
+
```bash
|
|
140
|
+
sknext --structure
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Useful for sprint planning and understanding work distribution across sections.
|
|
144
|
+
|
|
145
|
+
### Combined View
|
|
146
|
+
|
|
147
|
+
Show all incomplete phases followed by N tasks:
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
sknext --all-phases -n 10
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
Combines strategic overview with tactical next steps - perfect for standups!
|
|
154
|
+
|
|
155
|
+
### Task-Only View
|
|
156
|
+
|
|
157
|
+
Show only task lines without any headings:
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
sknext --tasks-only -n 15
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
Great for copy-pasting into status reports or automated processing.
|
|
164
|
+
|
|
165
|
+
### All Remaining Tasks
|
|
166
|
+
|
|
167
|
+
Show every uncompleted task with full context:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
sknext --all
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Perfect for final sprint planning or comprehensive project reviews.
|
|
174
|
+
|
|
175
|
+
## Troubleshooting
|
|
176
|
+
|
|
177
|
+
### No tasks.md found
|
|
178
|
+
|
|
179
|
+
If you get "Error: No Git repository or speckit project detected":
|
|
180
|
+
|
|
181
|
+
1. **Run from within a project**: Make sure you're inside a git repository or directory with a `specs/` folder
|
|
182
|
+
2. **Check your location**: sknext searches up to 10 parent directories for repository markers
|
|
183
|
+
3. **Verify project structure**: Ensure you have either:
|
|
184
|
+
- A `.git` directory (git repository)
|
|
185
|
+
- A `specs/###-feature-name/tasks.md` file structure
|
|
186
|
+
4. **Explicit path**: You can always specify the path directly: `sknext path/to/tasks.md`
|
|
187
|
+
|
|
188
|
+
### Project Detection
|
|
189
|
+
|
|
190
|
+
sknext uses a three-tier approach to find your project:
|
|
191
|
+
|
|
192
|
+
1. **Git command** (`git rev-parse --show-toplevel`) - preferred method
|
|
193
|
+
2. **VCS markers** (`.git`, `.hg`, `.svn` directories) - works in nested repos
|
|
194
|
+
3. **Specs directory** - fallback for non-git projects with specs/ folder
|
|
195
|
+
|
|
196
|
+
### Empty output
|
|
197
|
+
|
|
198
|
+
If sknext shows no tasks:
|
|
199
|
+
|
|
200
|
+
- โ
All your tasks are complete! Great job!
|
|
201
|
+
- Check if tasks are marked with `- [X]` instead of `- [ ]`
|
|
202
|
+
|
|
203
|
+
### Performance issues
|
|
204
|
+
|
|
205
|
+
If sknext is slow:
|
|
206
|
+
|
|
207
|
+
- Check file size - files with >1000 tasks may take longer
|
|
208
|
+
- Expected: <2s for default view, <3s for files with 500 tasks
|
|
209
|
+
- Auto-discovery adds <200ms overhead for repository detection
|
|
210
|
+
- Report performance issues with file size and timing
|
|
211
|
+
|
|
212
|
+
## Development
|
|
213
|
+
|
|
214
|
+
### Setup Development Environment
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
# Clone and setup
|
|
218
|
+
git clone <repository-url>
|
|
219
|
+
cd sknext
|
|
220
|
+
uv sync
|
|
221
|
+
|
|
222
|
+
# Install pre-commit hooks (optional)
|
|
223
|
+
uv run pre-commit install
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Run Tests
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
# Run all tests
|
|
230
|
+
uv run pytest
|
|
231
|
+
|
|
232
|
+
# Run with coverage
|
|
233
|
+
uv run pytest --cov=src/sknext --cov-report=html
|
|
234
|
+
|
|
235
|
+
# Run specific test
|
|
236
|
+
uv run pytest tests/unit/test_parser.py -xvs
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Code Quality
|
|
240
|
+
|
|
241
|
+
```bash
|
|
242
|
+
# Format code
|
|
243
|
+
uv run ruff format .
|
|
244
|
+
|
|
245
|
+
# Lint code
|
|
246
|
+
uv run ruff check .
|
|
247
|
+
|
|
248
|
+
# Type check
|
|
249
|
+
uv run mypy src/sknext
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
## Architecture
|
|
253
|
+
|
|
254
|
+
```
|
|
255
|
+
src/sknext/
|
|
256
|
+
โโโ __init__.py # Package initialization
|
|
257
|
+
โโโ __main__.py # Entry point for python -m sknext
|
|
258
|
+
โโโ cli.py # Typer CLI interface
|
|
259
|
+
โโโ constants.py # Regex patterns and defaults
|
|
260
|
+
โโโ models.py # Frozen dataclasses (Task, Section, Phase)
|
|
261
|
+
โโโ parser.py # Line-by-line state machine parser
|
|
262
|
+
โโโ discovery.py # Auto-discover tasks.md in specs/
|
|
263
|
+
โโโ formatter.py # Rich console output formatters
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
## Contributing
|
|
267
|
+
|
|
268
|
+
1. Fork the repository
|
|
269
|
+
2. Create a feature branch
|
|
270
|
+
3. Add tests for new functionality
|
|
271
|
+
4. Ensure all tests pass and coverage stays >90%
|
|
272
|
+
5. Run ruff format and mypy
|
|
273
|
+
6. Submit a pull request
|
|
274
|
+
|
|
275
|
+
## License
|
|
276
|
+
|
|
277
|
+
[Add your license here]
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
uv run ruff check --fix .
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### Type Check
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
uv run mypy src/
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
## License
|
|
290
|
+
|
|
291
|
+
MIT
|
sknext-0.1.0/README.md
ADDED
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
# sknext
|
|
2
|
+
|
|
3
|
+
Task status viewer for speckit projects - a CLI tool to quickly view and track tasks from your project's tasks.md file.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- ๐ **Fast**: View next tasks in <2 seconds
|
|
8
|
+
- ๐ **Multiple Views**: 6 different viewing modes for different workflows
|
|
9
|
+
- ๐ **Auto-Discovery**: Automatically finds latest tasks.md in specs/###-*/ directories
|
|
10
|
+
- ๐จ **Rich Formatting**: Color-coded output with priority and story tag highlighting
|
|
11
|
+
- โ
**Type Safe**: 100% type-checked with mypy in strict mode
|
|
12
|
+
- ๐งช **Well Tested**: 97 tests with 94% coverage
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
### From PyPI (Recommended)
|
|
17
|
+
|
|
18
|
+
Once published, install directly from PyPI:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
pip install sknext
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Or with uv:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
uv pip install sknext
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### From Source
|
|
31
|
+
|
|
32
|
+
For development or to use the latest unreleased version:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# Install uv if you don't have it
|
|
36
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
37
|
+
|
|
38
|
+
# Clone and install
|
|
39
|
+
git clone https://github.com/kenhia/sknext.git
|
|
40
|
+
cd sknext
|
|
41
|
+
uv sync
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Usage
|
|
45
|
+
|
|
46
|
+
### Auto-Discovery from Any Directory
|
|
47
|
+
|
|
48
|
+
**sknext** automatically detects your project's repository root and finds the latest `tasks.md` file:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# Run from any subdirectory in your project
|
|
52
|
+
cd src/mymodule
|
|
53
|
+
sknext
|
|
54
|
+
|
|
55
|
+
# Run from repository root
|
|
56
|
+
cd /path/to/project
|
|
57
|
+
sknext
|
|
58
|
+
|
|
59
|
+
# Run from a feature subdirectory
|
|
60
|
+
cd specs/001-my-feature
|
|
61
|
+
sknext
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**How it works:**
|
|
65
|
+
1. **Git Detection**: Uses `git rev-parse --show-toplevel` to find repository root (fastest)
|
|
66
|
+
2. **VCS Markers**: Falls back to searching for `.git`, `.hg`, or `.svn` directories (up to 10 levels)
|
|
67
|
+
3. **Specs Fallback**: If no VCS found, searches for `specs/` directory (for non-git projects)
|
|
68
|
+
4. **Latest Discovery**: Finds the highest numbered `specs/###-*/tasks.md` file
|
|
69
|
+
|
|
70
|
+
This means you can work deep in your codebase and quickly check task status without navigating to the project root!
|
|
71
|
+
|
|
72
|
+
### Quick Status Check (Default)
|
|
73
|
+
|
|
74
|
+
Show the next 10 uncompleted tasks with full context:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
sknext
|
|
78
|
+
# or
|
|
79
|
+
sknext path/to/tasks.md
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Custom Task Count
|
|
83
|
+
|
|
84
|
+
Show a specific number of tasks:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
sknext -n 5 # Show next 5 tasks
|
|
88
|
+
sknext -n 25 # Show next 25 tasks
|
|
89
|
+
sknext -n 0 # Show header only (no tasks)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Phase Overview
|
|
93
|
+
|
|
94
|
+
Show only phases with uncompleted work (no sections or tasks):
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
sknext --phases-only
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Perfect for quick status updates or understanding high-level progress.
|
|
101
|
+
|
|
102
|
+
### Structure View
|
|
103
|
+
|
|
104
|
+
Show phases and sections with uncompleted work (no individual tasks):
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
sknext --structure
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Useful for sprint planning and understanding work distribution across sections.
|
|
111
|
+
|
|
112
|
+
### Combined View
|
|
113
|
+
|
|
114
|
+
Show all incomplete phases followed by N tasks:
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
sknext --all-phases -n 10
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Combines strategic overview with tactical next steps - perfect for standups!
|
|
121
|
+
|
|
122
|
+
### Task-Only View
|
|
123
|
+
|
|
124
|
+
Show only task lines without any headings:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
sknext --tasks-only -n 15
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
Great for copy-pasting into status reports or automated processing.
|
|
131
|
+
|
|
132
|
+
### All Remaining Tasks
|
|
133
|
+
|
|
134
|
+
Show every uncompleted task with full context:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
sknext --all
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Perfect for final sprint planning or comprehensive project reviews.
|
|
141
|
+
|
|
142
|
+
## Troubleshooting
|
|
143
|
+
|
|
144
|
+
### No tasks.md found
|
|
145
|
+
|
|
146
|
+
If you get "Error: No Git repository or speckit project detected":
|
|
147
|
+
|
|
148
|
+
1. **Run from within a project**: Make sure you're inside a git repository or directory with a `specs/` folder
|
|
149
|
+
2. **Check your location**: sknext searches up to 10 parent directories for repository markers
|
|
150
|
+
3. **Verify project structure**: Ensure you have either:
|
|
151
|
+
- A `.git` directory (git repository)
|
|
152
|
+
- A `specs/###-feature-name/tasks.md` file structure
|
|
153
|
+
4. **Explicit path**: You can always specify the path directly: `sknext path/to/tasks.md`
|
|
154
|
+
|
|
155
|
+
### Project Detection
|
|
156
|
+
|
|
157
|
+
sknext uses a three-tier approach to find your project:
|
|
158
|
+
|
|
159
|
+
1. **Git command** (`git rev-parse --show-toplevel`) - preferred method
|
|
160
|
+
2. **VCS markers** (`.git`, `.hg`, `.svn` directories) - works in nested repos
|
|
161
|
+
3. **Specs directory** - fallback for non-git projects with specs/ folder
|
|
162
|
+
|
|
163
|
+
### Empty output
|
|
164
|
+
|
|
165
|
+
If sknext shows no tasks:
|
|
166
|
+
|
|
167
|
+
- โ
All your tasks are complete! Great job!
|
|
168
|
+
- Check if tasks are marked with `- [X]` instead of `- [ ]`
|
|
169
|
+
|
|
170
|
+
### Performance issues
|
|
171
|
+
|
|
172
|
+
If sknext is slow:
|
|
173
|
+
|
|
174
|
+
- Check file size - files with >1000 tasks may take longer
|
|
175
|
+
- Expected: <2s for default view, <3s for files with 500 tasks
|
|
176
|
+
- Auto-discovery adds <200ms overhead for repository detection
|
|
177
|
+
- Report performance issues with file size and timing
|
|
178
|
+
|
|
179
|
+
## Development
|
|
180
|
+
|
|
181
|
+
### Setup Development Environment
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
# Clone and setup
|
|
185
|
+
git clone <repository-url>
|
|
186
|
+
cd sknext
|
|
187
|
+
uv sync
|
|
188
|
+
|
|
189
|
+
# Install pre-commit hooks (optional)
|
|
190
|
+
uv run pre-commit install
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Run Tests
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
# Run all tests
|
|
197
|
+
uv run pytest
|
|
198
|
+
|
|
199
|
+
# Run with coverage
|
|
200
|
+
uv run pytest --cov=src/sknext --cov-report=html
|
|
201
|
+
|
|
202
|
+
# Run specific test
|
|
203
|
+
uv run pytest tests/unit/test_parser.py -xvs
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
### Code Quality
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
# Format code
|
|
210
|
+
uv run ruff format .
|
|
211
|
+
|
|
212
|
+
# Lint code
|
|
213
|
+
uv run ruff check .
|
|
214
|
+
|
|
215
|
+
# Type check
|
|
216
|
+
uv run mypy src/sknext
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Architecture
|
|
220
|
+
|
|
221
|
+
```
|
|
222
|
+
src/sknext/
|
|
223
|
+
โโโ __init__.py # Package initialization
|
|
224
|
+
โโโ __main__.py # Entry point for python -m sknext
|
|
225
|
+
โโโ cli.py # Typer CLI interface
|
|
226
|
+
โโโ constants.py # Regex patterns and defaults
|
|
227
|
+
โโโ models.py # Frozen dataclasses (Task, Section, Phase)
|
|
228
|
+
โโโ parser.py # Line-by-line state machine parser
|
|
229
|
+
โโโ discovery.py # Auto-discover tasks.md in specs/
|
|
230
|
+
โโโ formatter.py # Rich console output formatters
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
## Contributing
|
|
234
|
+
|
|
235
|
+
1. Fork the repository
|
|
236
|
+
2. Create a feature branch
|
|
237
|
+
3. Add tests for new functionality
|
|
238
|
+
4. Ensure all tests pass and coverage stays >90%
|
|
239
|
+
5. Run ruff format and mypy
|
|
240
|
+
6. Submit a pull request
|
|
241
|
+
|
|
242
|
+
## License
|
|
243
|
+
|
|
244
|
+
[Add your license here]
|
|
245
|
+
|
|
246
|
+
```bash
|
|
247
|
+
uv run ruff check --fix .
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
### Type Check
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
uv run mypy src/
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
## License
|
|
257
|
+
|
|
258
|
+
MIT
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "sknext"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "Task status viewer for speckit projects"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
license = { text = "MIT" }
|
|
7
|
+
authors = [
|
|
8
|
+
{ name = "Ken Hiatt", email = "ken.hiatt@gmail.com" }
|
|
9
|
+
]
|
|
10
|
+
requires-python = ">=3.11"
|
|
11
|
+
keywords = ["task", "project-management", "cli", "speckit", "development-tools"]
|
|
12
|
+
classifiers = [
|
|
13
|
+
"Development Status :: 4 - Beta",
|
|
14
|
+
"Environment :: Console",
|
|
15
|
+
"Intended Audience :: Developers",
|
|
16
|
+
"License :: OSI Approved :: MIT License",
|
|
17
|
+
"Operating System :: OS Independent",
|
|
18
|
+
"Programming Language :: Python :: 3",
|
|
19
|
+
"Programming Language :: Python :: 3.11",
|
|
20
|
+
"Programming Language :: Python :: 3.12",
|
|
21
|
+
"Topic :: Software Development :: Documentation",
|
|
22
|
+
"Topic :: Utilities",
|
|
23
|
+
"Typing :: Typed",
|
|
24
|
+
]
|
|
25
|
+
dependencies = [
|
|
26
|
+
"typer>=0.9.0",
|
|
27
|
+
"rich>=13.0.0",
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
[project.urls]
|
|
31
|
+
Homepage = "https://github.com/kenhia/sknext"
|
|
32
|
+
Repository = "https://github.com/kenhia/sknext"
|
|
33
|
+
Issues = "https://github.com/kenhia/sknext/issues"
|
|
34
|
+
Changelog = "https://github.com/kenhia/sknext/releases"
|
|
35
|
+
|
|
36
|
+
[project.scripts]
|
|
37
|
+
sknext = "sknext.cli:app"
|
|
38
|
+
|
|
39
|
+
[project.optional-dependencies]
|
|
40
|
+
dev = [
|
|
41
|
+
"pytest>=7.0.0",
|
|
42
|
+
"pytest-cov>=4.0.0",
|
|
43
|
+
"mypy>=1.0.0",
|
|
44
|
+
"ruff>=0.1.0",
|
|
45
|
+
]
|
|
46
|
+
|
|
47
|
+
[tool.ruff]
|
|
48
|
+
line-length = 100
|
|
49
|
+
target-version = "py311"
|
|
50
|
+
|
|
51
|
+
[tool.ruff.lint]
|
|
52
|
+
select = [
|
|
53
|
+
"E", # pycodestyle errors
|
|
54
|
+
"W", # pycodestyle warnings
|
|
55
|
+
"F", # pyflakes
|
|
56
|
+
"I", # isort
|
|
57
|
+
"B", # flake8-bugbear
|
|
58
|
+
"C4", # flake8-comprehensions
|
|
59
|
+
"UP", # pyupgrade
|
|
60
|
+
]
|
|
61
|
+
ignore = []
|
|
62
|
+
|
|
63
|
+
[tool.ruff.format]
|
|
64
|
+
quote-style = "double"
|
|
65
|
+
indent-style = "space"
|
|
66
|
+
|
|
67
|
+
[tool.pytest.ini_options]
|
|
68
|
+
testpaths = ["tests"]
|
|
69
|
+
python_files = ["test_*.py"]
|
|
70
|
+
python_classes = ["Test*"]
|
|
71
|
+
python_functions = ["test_*"]
|
|
72
|
+
addopts = [
|
|
73
|
+
"--strict-markers",
|
|
74
|
+
"--cov=src/sknext",
|
|
75
|
+
"--cov-report=term-missing",
|
|
76
|
+
"--cov-report=html",
|
|
77
|
+
]
|
|
78
|
+
|
|
79
|
+
[tool.mypy]
|
|
80
|
+
python_version = "3.11"
|
|
81
|
+
strict = true
|
|
82
|
+
warn_return_any = true
|
|
83
|
+
warn_unused_configs = true
|
|
84
|
+
disallow_untyped_defs = true
|
|
85
|
+
|
|
86
|
+
[build-system]
|
|
87
|
+
requires = ["uv_build>=0.9.28,<0.10.0"]
|
|
88
|
+
build-backend = "uv_build"
|
|
89
|
+
|
|
90
|
+
[dependency-groups]
|
|
91
|
+
dev = [
|
|
92
|
+
"mypy>=1.19.1",
|
|
93
|
+
"pytest>=9.0.2",
|
|
94
|
+
"pytest-cov>=7.0.0",
|
|
95
|
+
"ruff>=0.15.0",
|
|
96
|
+
]
|