project-kit-cli 0.5.1__tar.gz → 0.5.2__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.
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/PKG-INFO +7 -1
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/README.md +6 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/pyproject.toml +1 -1
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/pyproject.toml.orig +1 -1
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/context_files.py +3 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/doctor.py +56 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/LICENSE +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/__init__.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/__main__.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/agents.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/ai_attribution.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/approval.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/docs/agents.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/docs/backlog-schema.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/docs/handoff.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/docs/provisioning.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/docs/skills.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/docs/statusline.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/docs/upgrade.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/hooks/commit-msg +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/project/skills-catalog.yml +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/project/workflow.yml +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-amend/SKILL.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-decide/SKILL.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-discover/SKILL.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-foundations/SKILL.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-grill/SKILL.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-handoff/SKILL.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-import/SKILL.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-next/SKILL.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-plan/SKILL.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-provision/SKILL.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-skills/SKILL.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-start/SKILL.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-verify/SKILL.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-workflow/SKILL.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/subagents/pk-reviewer.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/templates/adr.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/templates/backlog.example.json +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/templates/brief.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/templates/constitution-input.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/templates/development-workflow.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/templates/github/ISSUE_TEMPLATE/adr.yml +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/templates/github/ISSUE_TEMPLATE/bug.yml +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/templates/github/ISSUE_TEMPLATE/config.yml +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/templates/github/ISSUE_TEMPLATE/epic.yml +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/templates/github/ISSUE_TEMPLATE/feature.yml +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/templates/github/pull_request_template.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/templates/gitlab/issue_templates/adr.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/templates/gitlab/issue_templates/bug.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/templates/gitlab/issue_templates/epic.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/templates/gitlab/issue_templates/feature.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/templates/gitlab/merge_request_templates/Default.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/templates/interview.md +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/backlog.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/claude_hooks.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/cli.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/config.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/entry.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/fsutil.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/gh.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/glab.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/handoff.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/help.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/installer.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/labels.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/manifest.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/next_step.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/project_choice.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/providers/__init__.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/providers/github.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/providers/gitlab.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/provision.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/provision_gitlab.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/provision_issues.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/skills.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/sources.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/state.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/statusline.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/templating.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/trace.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/upgrade.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/userdocs.py +0 -0
- {project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/workflow.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: project-kit-cli
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.2
|
|
4
4
|
Summary: Project definition and dev-workflow kit that hands off to Spec Kit
|
|
5
5
|
Keywords: project-management,spec-kit,claude-code,workflow,github
|
|
6
6
|
Author: Miguel Tomás
|
|
@@ -64,6 +64,12 @@ uv tool upgrade project-kit-cli # later, to update the program
|
|
|
64
64
|
The package is called `project-kit-cli`; the command is `pjkit`. To try it without
|
|
65
65
|
installing: `uvx --from project-kit-cli pjkit help`.
|
|
66
66
|
|
|
67
|
+
**`pjkit` not found, or `No pyvenv.cfg file`.** The skills and hooks call `pjkit` by name, so it
|
|
68
|
+
must be on the PATH of the terminal that starts your agent. Install it with `uv tool install`
|
|
69
|
+
(not inside a project's virtual environment) and run `uv tool update-shell` once. That error means
|
|
70
|
+
a `python` or `pjkit` on the PATH belongs to a virtual environment that was deleted or is being
|
|
71
|
+
rebuilt: recreate it, deactivate it, or take it off the PATH. `pjkit doctor` points at the cause.
|
|
72
|
+
|
|
67
73
|
**Updating a project.** `init` copies the skills and templates into your repository and never
|
|
68
74
|
overwrites them, so a new version of the program does not change a project that already exists.
|
|
69
75
|
Run `pjkit upgrade` inside it to see what is out of date, and `pjkit upgrade --apply`
|
|
@@ -46,6 +46,12 @@ uv tool upgrade project-kit-cli # later, to update the program
|
|
|
46
46
|
The package is called `project-kit-cli`; the command is `pjkit`. To try it without
|
|
47
47
|
installing: `uvx --from project-kit-cli pjkit help`.
|
|
48
48
|
|
|
49
|
+
**`pjkit` not found, or `No pyvenv.cfg file`.** The skills and hooks call `pjkit` by name, so it
|
|
50
|
+
must be on the PATH of the terminal that starts your agent. Install it with `uv tool install`
|
|
51
|
+
(not inside a project's virtual environment) and run `uv tool update-shell` once. That error means
|
|
52
|
+
a `python` or `pjkit` on the PATH belongs to a virtual environment that was deleted or is being
|
|
53
|
+
rebuilt: recreate it, deactivate it, or take it off the PATH. `pjkit doctor` points at the cause.
|
|
54
|
+
|
|
49
55
|
**Updating a project.** `init` copies the skills and templates into your repository and never
|
|
50
56
|
overwrites them, so a new version of the program does not change a project that already exists.
|
|
51
57
|
Run `pjkit upgrade` inside it to see what is out of date, and `pjkit upgrade --apply`
|
|
@@ -95,6 +95,9 @@ def render_block(root: Path, config: Config) -> str:
|
|
|
95
95
|
"- The user does not need to know the skills. Pick the one that fits what they ask, "
|
|
96
96
|
"using the table below; when unsure, use `pk-next`. Only the user approves a phase: "
|
|
97
97
|
"never run `pjkit approve` on your own.",
|
|
98
|
+
"- If `pjkit` does not start (not found, or an error such as `No pyvenv.cfg file`), stop: "
|
|
99
|
+
"do not work around it with `python` or by editing `.project-kit/` by hand. Tell the "
|
|
100
|
+
"user to run `pjkit doctor` and, if that fails too, `uv tool install project-kit-cli`.",
|
|
98
101
|
]
|
|
99
102
|
lines += ["", "### Which skill for what", "", "| The user wants | Skill |", "|---|---|"]
|
|
100
103
|
lines += [f"| {want} | {skill} |" for want, skill in ROUTING]
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import re
|
|
4
4
|
import shutil
|
|
5
5
|
import subprocess
|
|
6
|
+
import sys
|
|
6
7
|
from collections.abc import Callable
|
|
7
8
|
from dataclasses import dataclass
|
|
8
9
|
from enum import Enum
|
|
@@ -153,6 +154,59 @@ def check_glab(glab: Glab) -> list[Check]:
|
|
|
153
154
|
return checks
|
|
154
155
|
|
|
155
156
|
|
|
157
|
+
def check_pjkit(which: Which, running: str | None = None) -> Check:
|
|
158
|
+
"""Skills, hooks and the status bar call ``pjkit`` by name: it has to be on PATH."""
|
|
159
|
+
found = which("pjkit")
|
|
160
|
+
if not found:
|
|
161
|
+
return Check(
|
|
162
|
+
"pjkit",
|
|
163
|
+
Status.WARN,
|
|
164
|
+
"not on PATH",
|
|
165
|
+
"Skills and hooks run `pjkit` by name. Install it with `uv tool install "
|
|
166
|
+
"project-kit-cli` and run `uv tool update-shell`, or start the agent from a "
|
|
167
|
+
"terminal where its environment is active.",
|
|
168
|
+
)
|
|
169
|
+
current = running if running is not None else sys.argv[0]
|
|
170
|
+
if Path(current).stem.lower() == "pjkit" and not _same_file(found, current):
|
|
171
|
+
return Check(
|
|
172
|
+
"pjkit",
|
|
173
|
+
Status.WARN,
|
|
174
|
+
f"PATH runs {found}, not {current}",
|
|
175
|
+
"Skills and hooks will use the one on PATH. Remove one of them or fix PATH.",
|
|
176
|
+
)
|
|
177
|
+
return Check("pjkit", Status.OK, found)
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
def _same_file(a: str, b: str) -> bool:
|
|
181
|
+
try:
|
|
182
|
+
first, second = Path(a).resolve(), Path(b).resolve() # argv[0] may lack ".exe"
|
|
183
|
+
return first.parent == second.parent and first.stem.lower() == second.stem.lower()
|
|
184
|
+
except OSError:
|
|
185
|
+
return False
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def check_python_env(which: Which) -> Check | None:
|
|
189
|
+
"""A ``python`` on PATH inside a virtual environment that lost its ``pyvenv.cfg``.
|
|
190
|
+
|
|
191
|
+
Python then stops with ``No pyvenv.cfg file``, and so does every ``pjkit`` that depends on it.
|
|
192
|
+
"""
|
|
193
|
+
found = which("python")
|
|
194
|
+
if not found:
|
|
195
|
+
return None
|
|
196
|
+
folder = Path(found).parent
|
|
197
|
+
env = folder.parent
|
|
198
|
+
if folder.name.lower() not in ("scripts", "bin") or (env / "pyvenv.cfg").exists():
|
|
199
|
+
return None
|
|
200
|
+
if not any((folder / a).exists() for a in ("activate", "activate.bat")):
|
|
201
|
+
return None
|
|
202
|
+
return Check(
|
|
203
|
+
"python",
|
|
204
|
+
Status.WARN,
|
|
205
|
+
f"{found} belongs to a broken virtual environment (no pyvenv.cfg)",
|
|
206
|
+
f"Recreate it (`uv sync` in its project), deactivate it, or remove {env} from PATH.",
|
|
207
|
+
)
|
|
208
|
+
|
|
209
|
+
|
|
156
210
|
def check_uv(which: Which, runner: Runner) -> Check:
|
|
157
211
|
if not which("uv"):
|
|
158
212
|
return Check(
|
|
@@ -245,6 +299,8 @@ def run_checks(
|
|
|
245
299
|
return [
|
|
246
300
|
check_git(which, runner),
|
|
247
301
|
*host_checks,
|
|
302
|
+
check_pjkit(which),
|
|
303
|
+
*filter(None, [check_python_env(which)]),
|
|
248
304
|
check_uv(which, runner),
|
|
249
305
|
check_speckit(which, runner, here),
|
|
250
306
|
*check_agents(which, here),
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/docs/backlog-schema.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/project/skills-catalog.yml
RENAMED
|
File without changes
|
|
File without changes
|
{project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-amend/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-decide/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-discover/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
{project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-grill/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-handoff/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-import/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-next/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-plan/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-provision/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-skills/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-start/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-verify/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/skills/pk-workflow/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/subagents/pk-reviewer.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{project_kit_cli-0.5.1 → project_kit_cli-0.5.2}/src/project_kit/assets/templates/interview.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|