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 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
+ ]
@@ -0,0 +1,7 @@
1
+ """sknext - Task status viewer for speckit projects.
2
+
3
+ A CLI tool that reads speckit tasks.md files and displays uncompleted tasks
4
+ with flexible viewing options.
5
+ """
6
+
7
+ __version__ = "0.1.0"
@@ -0,0 +1,6 @@
1
+ """Entry point for python -m sknext."""
2
+
3
+ from sknext.cli import app
4
+
5
+ if __name__ == "__main__":
6
+ app()