prizmkit 1.1.118 → 1.1.119
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.
- package/bundled/VERSION.json +3 -3
- package/bundled/dev-pipeline/prizmkit_runtime/gitops.py +2 -4
- package/bundled/dev-pipeline/prizmkit_runtime/runner_bookkeeping.py +21 -11
- package/bundled/dev-pipeline/tests/test_unified_cli.py +22 -1
- package/bundled/skills/_metadata.json +1 -1
- package/bundled/skills/bugfix-pipeline-launcher/SKILL.md +4 -2
- package/bundled/skills/bugfix-pipeline-launcher/references/configuration.md +40 -1
- package/bundled/skills/feature-pipeline-launcher/SKILL.md +4 -2
- package/bundled/skills/feature-pipeline-launcher/references/configuration.md +40 -1
- package/bundled/skills/refactor-pipeline-launcher/SKILL.md +4 -2
- package/bundled/skills/refactor-pipeline-launcher/references/configuration.md +40 -1
- package/package.json +1 -1
package/bundled/VERSION.json
CHANGED
|
@@ -33,10 +33,8 @@ HIDDEN_TOOL_WORKTREE_EXCLUDES = (
|
|
|
33
33
|
":(top,exclude).prizmkit/manifest.json",
|
|
34
34
|
":(top,exclude).prizmkit/state",
|
|
35
35
|
":(top,exclude,glob).prizmkit/state/**",
|
|
36
|
-
":(top,exclude).prizmkit/dev-pipeline
|
|
37
|
-
":(top,exclude,glob).prizmkit/dev-pipeline
|
|
38
|
-
":(top,exclude).prizmkit/dev-pipeline/prizmkit_runtime",
|
|
39
|
-
":(top,exclude,glob).prizmkit/dev-pipeline/prizmkit_runtime/**",
|
|
36
|
+
":(top,exclude).prizmkit/dev-pipeline",
|
|
37
|
+
":(top,exclude,glob).prizmkit/dev-pipeline/**",
|
|
40
38
|
)
|
|
41
39
|
|
|
42
40
|
PIPELINE_FALLBACK_GIT_NAME = "PrizmKit Pipeline"
|
|
@@ -46,18 +46,27 @@ def _visible_status_result(project_root: Path) -> GitCommandResult:
|
|
|
46
46
|
return run_git_command(project_root, ("status", "--porcelain", "--", ".", *HIDDEN_TOOL_WORKTREE_EXCLUDES))
|
|
47
47
|
|
|
48
48
|
|
|
49
|
+
def _paths_from_status(stdout: str) -> tuple[str, ...]:
|
|
50
|
+
changed: list[str] = []
|
|
51
|
+
seen: set[str] = set()
|
|
52
|
+
for line in stdout.splitlines():
|
|
53
|
+
if len(line) < 4:
|
|
54
|
+
continue
|
|
55
|
+
path = line[3:].strip()
|
|
56
|
+
paths = path.split(" -> ", 1) if " -> " in path else [path]
|
|
57
|
+
for candidate in paths:
|
|
58
|
+
candidate = candidate.strip()
|
|
59
|
+
if candidate and candidate not in seen:
|
|
60
|
+
changed.append(candidate)
|
|
61
|
+
seen.add(candidate)
|
|
62
|
+
return tuple(changed)
|
|
63
|
+
|
|
64
|
+
|
|
49
65
|
def _changed_paths_in(project_root: Path, paths: Sequence[str]) -> tuple[str, ...]:
|
|
50
66
|
result = run_git_command(project_root, ("status", "--porcelain", "--", *paths))
|
|
51
67
|
if result.return_code != 0:
|
|
52
68
|
return ()
|
|
53
|
-
|
|
54
|
-
for line in result.stdout.splitlines():
|
|
55
|
-
path = line[3:].strip()
|
|
56
|
-
if " -> " in path:
|
|
57
|
-
path = path.split(" -> ", 1)[1].strip()
|
|
58
|
-
if path:
|
|
59
|
-
changed.append(path)
|
|
60
|
-
return tuple(changed)
|
|
69
|
+
return _paths_from_status(result.stdout)
|
|
61
70
|
|
|
62
71
|
|
|
63
72
|
def commit_bookkeeping_changes(
|
|
@@ -80,14 +89,15 @@ def commit_preflight_ready_changes(project_root: Path, item_id: str) -> Bookkeep
|
|
|
80
89
|
visible_status = _visible_status_result(project_root)
|
|
81
90
|
if visible_status.return_code != 0:
|
|
82
91
|
return BookkeepingResult(attempted=True, committed=False, result=visible_status)
|
|
83
|
-
|
|
92
|
+
paths = _paths_from_status(visible_status.stdout)
|
|
93
|
+
if not paths:
|
|
84
94
|
return BookkeepingResult(attempted=False, committed=False)
|
|
85
|
-
add_result = run_git_command(project_root, ("add", "-A", "
|
|
95
|
+
add_result = run_git_command(project_root, ("add", "-A", "-f", "--", *paths))
|
|
86
96
|
if add_result.return_code != 0:
|
|
87
97
|
return BookkeepingResult(attempted=True, committed=False, result=add_result)
|
|
88
98
|
result = run_git_command(
|
|
89
99
|
project_root,
|
|
90
|
-
("commit", "--no-verify", "-m", f"chore: ready for {item_id}", "--",
|
|
100
|
+
("commit", "--no-verify", "-m", f"chore: ready for {item_id}", "--", *paths),
|
|
91
101
|
)
|
|
92
102
|
if result.return_code != 0:
|
|
93
103
|
return BookkeepingResult(attempted=True, committed=False, result=result)
|
|
@@ -1771,7 +1771,8 @@ def test_git_status_safe_ignores_worktree_support_assets(monkeypatch, tmp_path):
|
|
|
1771
1771
|
joined = " ".join(status_args)
|
|
1772
1772
|
assert ":(top,exclude).prizmkit-worktree" in status_args
|
|
1773
1773
|
assert ":(top,exclude).claude" in status_args
|
|
1774
|
-
assert ":(top,exclude).prizmkit/dev-pipeline
|
|
1774
|
+
assert ":(top,exclude).prizmkit/dev-pipeline" in status_args
|
|
1775
|
+
assert ":(top,exclude,glob).prizmkit/dev-pipeline/**" in status_args
|
|
1775
1776
|
assert all(exclude in status_args for exclude in HIDDEN_TOOL_WORKTREE_EXCLUDES)
|
|
1776
1777
|
assert ".prizmkit-worktree" in joined
|
|
1777
1778
|
|
|
@@ -1958,6 +1959,26 @@ def test_preflight_ready_commit_preserves_dirty_changes_without_repo_git_identit
|
|
|
1958
1959
|
assert _short_status(repo) == ""
|
|
1959
1960
|
|
|
1960
1961
|
|
|
1962
|
+
def test_preflight_ready_commit_force_stages_visible_file_when_prizmkit_dir_is_ignored(tmp_path):
|
|
1963
|
+
from prizmkit_runtime.runner_bookkeeping import commit_preflight_ready_changes
|
|
1964
|
+
|
|
1965
|
+
repo = tmp_path / "repo"
|
|
1966
|
+
_init_temp_repo(repo)
|
|
1967
|
+
(repo / ".gitignore").write_text(".prizmkit/*\n", encoding="utf-8")
|
|
1968
|
+
subprocess.run(["git", "add", ".gitignore"], cwd=repo, check=True)
|
|
1969
|
+
subprocess.run(["git", "commit", "-m", "ignore prizmkit"], cwd=repo, check=True, stdout=subprocess.DEVNULL)
|
|
1970
|
+
(repo / ".prizmkit" / "dev-pipeline" / "templates").mkdir(parents=True)
|
|
1971
|
+
(repo / ".prizmkit" / "dev-pipeline" / "templates" / "bootstrap-prompt.md").write_text("ignored runtime\n", encoding="utf-8")
|
|
1972
|
+
(repo / "visible.txt").write_text("dirty\n", encoding="utf-8")
|
|
1973
|
+
|
|
1974
|
+
result = commit_preflight_ready_changes(repo, "F-008")
|
|
1975
|
+
|
|
1976
|
+
assert result.committed
|
|
1977
|
+
assert _head_commit_message(repo) == "chore: ready for F-008"
|
|
1978
|
+
assert _head_files(repo) == {"visible.txt"}
|
|
1979
|
+
assert _short_status(repo) == ""
|
|
1980
|
+
|
|
1981
|
+
|
|
1961
1982
|
def test_materialize_worktree_support_assets_copies_ignored_assets_without_retired_shell_sources(tmp_path):
|
|
1962
1983
|
from prizmkit_runtime.gitops import (
|
|
1963
1984
|
BranchContext,
|
|
@@ -46,13 +46,15 @@ Before any action, validate:
|
|
|
46
46
|
|
|
47
47
|
1. **bugfix pipeline exists**: Confirm `.prizmkit/dev-pipeline/cli.py` is present
|
|
48
48
|
2. **For start**: `.prizmkit/plans/bug-fix-list.json` must exist in `.prizmkit/plans/` (or user-specified path)
|
|
49
|
-
3. **Dependencies**: `python3`, `git`, and AI CLI
|
|
49
|
+
3. **Dependencies**: `python3`, `git`, and the configured AI CLI must be in PATH. Resolve and report the AI CLI from `AI_CLI` env, then `.prizmkit/config.json` `ai_cli`, then fallback to `claude` only when neither is configured. Read `${SKILL_DIR}/references/configuration.md` §Configured AI CLI Prerequisite Check before running the AI CLI check.
|
|
50
50
|
4. **Python version**: Requires Python 3.10+ for the unified dev-pipeline runtime
|
|
51
51
|
5. **Browser tools** (optional): If any bug has `browser_interaction` field, check the corresponding tool is available. Bugs may specify `tool: "playwright-cli"`, `tool: "opencli"`, or `tool: "auto"` (AI chooses at runtime).
|
|
52
52
|
|
|
53
53
|
Quick check:
|
|
54
54
|
```bash
|
|
55
|
-
command -v python3 && command -v git
|
|
55
|
+
command -v python3 >/dev/null && command -v git >/dev/null && echo "Core dependencies OK"
|
|
56
|
+
# AI CLI check: read `${SKILL_DIR}/references/configuration.md` §Configured AI CLI Prerequisite Check.
|
|
57
|
+
# It must print `Configured AI CLI: <name>` and verify that exact executable.
|
|
56
58
|
# Optional: browser interaction support (check both tools — bugs may use either)
|
|
57
59
|
command -v playwright-cli && echo "playwright-cli OK" || echo "playwright-cli not found (playwright browser verification will be skipped)"
|
|
58
60
|
command -v opencli && echo "opencli OK" || echo "opencli not found (opencli browser verification will be skipped)"
|
|
@@ -2,6 +2,45 @@
|
|
|
2
2
|
|
|
3
3
|
Environment variable mappings for the bugfix launcher.
|
|
4
4
|
|
|
5
|
+
## Configured AI CLI Prerequisite Check
|
|
6
|
+
|
|
7
|
+
Read this section during launcher prerequisite validation before reporting AI CLI availability.
|
|
8
|
+
|
|
9
|
+
Runtime AI CLI selection is config-driven. Resolve the executable name in this order:
|
|
10
|
+
1. `AI_CLI` environment variable when set.
|
|
11
|
+
2. `.prizmkit/config.json` `ai_cli` when present.
|
|
12
|
+
3. `claude` fallback only when neither is configured.
|
|
13
|
+
|
|
14
|
+
Run this quick check from the project root:
|
|
15
|
+
```bash
|
|
16
|
+
command -v python3 >/dev/null && command -v git >/dev/null || { echo "python3 or git missing"; exit 1; }
|
|
17
|
+
AI_CLI="$(
|
|
18
|
+
python3 - <<'PY'
|
|
19
|
+
import json, os, shlex
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
cli = os.environ.get("AI_CLI", "").strip()
|
|
22
|
+
if not cli:
|
|
23
|
+
config_path = Path(".prizmkit/config.json")
|
|
24
|
+
if config_path.is_file():
|
|
25
|
+
try:
|
|
26
|
+
data = json.loads(config_path.read_text(encoding="utf-8"))
|
|
27
|
+
cli = str(data.get("ai_cli") or "").strip()
|
|
28
|
+
except (OSError, json.JSONDecodeError):
|
|
29
|
+
cli = ""
|
|
30
|
+
cli = cli or "claude"
|
|
31
|
+
try:
|
|
32
|
+
print(shlex.split(cli)[0])
|
|
33
|
+
except ValueError:
|
|
34
|
+
print(cli.split()[0] if cli.split() else "claude")
|
|
35
|
+
PY
|
|
36
|
+
)"
|
|
37
|
+
printf 'Configured AI CLI: %s\n' "$AI_CLI"
|
|
38
|
+
command -v "$AI_CLI" >/dev/null && printf 'AI CLI OK: %s\n' "$(command -v "$AI_CLI")" || { printf 'AI CLI not found: %s\n' "$AI_CLI"; exit 1; }
|
|
39
|
+
echo "All dependencies OK"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Report the configured executable, for example `Configured AI CLI: claude`. Do not report the first arbitrary PATH match such as `cbc` when project config selects a different AI CLI.
|
|
43
|
+
|
|
5
44
|
## Environment Variable Mapping
|
|
6
45
|
|
|
7
46
|
Translating user responses to env vars:
|
|
@@ -73,7 +112,7 @@ Note: Bug filter defaults to all bugs. Runtime selects eligible bugs in stable l
|
|
|
73
112
|
| `.prizmkit/plans/bug-fix-list.json` not found | Tell user to run `bug-planner` skill first |
|
|
74
113
|
| `python3` not installed | Install Python 3.10+ and rerun the Python runtime command |
|
|
75
114
|
| `git` not installed | Install git; the Python runtime uses git for branch/worktree/status operations |
|
|
76
|
-
|
|
|
115
|
+
| Configured AI CLI not in PATH | Install the executable selected by `AI_CLI` or `.prizmkit/config.json` `ai_cli`, or update the config to a CLI available in PATH. |
|
|
77
116
|
| Bugfix pipeline already running | Show status, ask if user wants to stop and restart |
|
|
78
117
|
| PID file stale (process dead) | `python3 ./.prizmkit/dev-pipeline/cli.py daemon bugfix start .prizmkit/plans/bug-fix-list.json` auto-cleans, retry start |
|
|
79
118
|
| Launch failed (process died immediately) | Show last 20 lines of log: `python3 ./.prizmkit/dev-pipeline/cli.py daemon bugfix logs --lines 20` |
|
|
@@ -40,13 +40,15 @@ Before any action, validate:
|
|
|
40
40
|
|
|
41
41
|
1. **dev-pipeline exists**: Confirm `.prizmkit/dev-pipeline/cli.py` is present
|
|
42
42
|
2. **For start**: `.prizmkit/plans/feature-list.json` must exist in `.prizmkit/plans/` (or user-specified path)
|
|
43
|
-
3. **Dependencies**: `python3`, `git`, and AI CLI
|
|
43
|
+
3. **Dependencies**: `python3`, `git`, and the configured AI CLI must be in PATH. Resolve and report the AI CLI from `AI_CLI` env, then `.prizmkit/config.json` `ai_cli`, then fallback to `claude` only when neither is configured. Read `${SKILL_DIR}/references/configuration.md` §Configured AI CLI Prerequisite Check before running the AI CLI check.
|
|
44
44
|
4. **Python version**: Requires Python 3.10+ for the unified dev-pipeline runtime
|
|
45
45
|
5. **Browser tools** (optional): If any feature has `browser_interaction` field, check the corresponding tool is available. Features may specify `tool: "playwright-cli"`, `tool: "opencli"`, or `tool: "auto"` (AI chooses at runtime).
|
|
46
46
|
|
|
47
47
|
Quick check:
|
|
48
48
|
```bash
|
|
49
|
-
command -v python3 && command -v git
|
|
49
|
+
command -v python3 >/dev/null && command -v git >/dev/null && echo "Core dependencies OK"
|
|
50
|
+
# AI CLI check: read `${SKILL_DIR}/references/configuration.md` §Configured AI CLI Prerequisite Check.
|
|
51
|
+
# It must print `Configured AI CLI: <name>` and verify that exact executable.
|
|
50
52
|
# Optional: browser interaction support (check both tools — features may use either)
|
|
51
53
|
command -v playwright-cli && echo "playwright-cli OK" || echo "playwright-cli not found (playwright browser verification will be skipped)"
|
|
52
54
|
command -v opencli && echo "opencli OK" || echo "opencli not found (opencli browser verification will be skipped)"
|
|
@@ -22,6 +22,45 @@ Asked only when the user chose "Yes" to Advanced config in step 6.
|
|
|
22
22
|
- xhigh — Extensive reasoning (`PRIZMKIT_EFFORT=xhigh`)
|
|
23
23
|
- max — Maximum reasoning, Claude Code only (`PRIZMKIT_EFFORT=max`)
|
|
24
24
|
|
|
25
|
+
## Configured AI CLI Prerequisite Check
|
|
26
|
+
|
|
27
|
+
Read this section during launcher prerequisite validation before reporting AI CLI availability.
|
|
28
|
+
|
|
29
|
+
Runtime AI CLI selection is config-driven. Resolve the executable name in this order:
|
|
30
|
+
1. `AI_CLI` environment variable when set.
|
|
31
|
+
2. `.prizmkit/config.json` `ai_cli` when present.
|
|
32
|
+
3. `claude` fallback only when neither is configured.
|
|
33
|
+
|
|
34
|
+
Run this quick check from the project root:
|
|
35
|
+
```bash
|
|
36
|
+
command -v python3 >/dev/null && command -v git >/dev/null || { echo "python3 or git missing"; exit 1; }
|
|
37
|
+
AI_CLI="$(
|
|
38
|
+
python3 - <<'PY'
|
|
39
|
+
import json, os, shlex
|
|
40
|
+
from pathlib import Path
|
|
41
|
+
cli = os.environ.get("AI_CLI", "").strip()
|
|
42
|
+
if not cli:
|
|
43
|
+
config_path = Path(".prizmkit/config.json")
|
|
44
|
+
if config_path.is_file():
|
|
45
|
+
try:
|
|
46
|
+
data = json.loads(config_path.read_text(encoding="utf-8"))
|
|
47
|
+
cli = str(data.get("ai_cli") or "").strip()
|
|
48
|
+
except (OSError, json.JSONDecodeError):
|
|
49
|
+
cli = ""
|
|
50
|
+
cli = cli or "claude"
|
|
51
|
+
try:
|
|
52
|
+
print(shlex.split(cli)[0])
|
|
53
|
+
except ValueError:
|
|
54
|
+
print(cli.split()[0] if cli.split() else "claude")
|
|
55
|
+
PY
|
|
56
|
+
)"
|
|
57
|
+
printf 'Configured AI CLI: %s\n' "$AI_CLI"
|
|
58
|
+
command -v "$AI_CLI" >/dev/null && printf 'AI CLI OK: %s\n' "$(command -v "$AI_CLI")" || { printf 'AI CLI not found: %s\n' "$AI_CLI"; exit 1; }
|
|
59
|
+
echo "All dependencies OK"
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Report the configured executable, for example `Configured AI CLI: claude`. Do not report the first arbitrary PATH match such as `cbc` when project config selects a different AI CLI.
|
|
63
|
+
|
|
25
64
|
## Environment Variable Mapping
|
|
26
65
|
|
|
27
66
|
Translating user responses to env vars:
|
|
@@ -55,7 +94,7 @@ Not exposed in interactive menu, pass via `--env`:
|
|
|
55
94
|
| `.prizmkit/plans/feature-list.json` not found | Tell user to run `feature-planner` skill first |
|
|
56
95
|
| `python3` not installed | Install Python 3.10+ and rerun the Python runtime command |
|
|
57
96
|
| `git` not installed | Install git; the Python runtime uses git for branch/worktree/status operations |
|
|
58
|
-
|
|
|
97
|
+
| Configured AI CLI not in PATH | Install the executable selected by `AI_CLI` or `.prizmkit/config.json` `ai_cli`, or update the config to a CLI available in PATH. |
|
|
59
98
|
| Pipeline already running | Show status, ask if user wants to stop and restart |
|
|
60
99
|
| PID file stale (process dead) | `python3 ./.prizmkit/dev-pipeline/cli.py daemon feature start .prizmkit/plans/feature-list.json` auto-cleans, retry start |
|
|
61
100
|
| Launch failed (process died immediately) | Show last 20 lines of log: `python3 ./.prizmkit/dev-pipeline/cli.py daemon feature logs --lines 20` |
|
|
@@ -47,13 +47,15 @@ Before any action, validate:
|
|
|
47
47
|
|
|
48
48
|
1. **refactor pipeline exists**: Confirm `.prizmkit/dev-pipeline/cli.py` is present
|
|
49
49
|
2. **For start**: `.prizmkit/plans/refactor-list.json` must exist in `.prizmkit/plans/` (or user-specified path)
|
|
50
|
-
3. **Dependencies**: `python3`, `git`, and AI CLI
|
|
50
|
+
3. **Dependencies**: `python3`, `git`, and the configured AI CLI must be in PATH. Resolve and report the AI CLI from `AI_CLI` env, then `.prizmkit/config.json` `ai_cli`, then fallback to `claude` only when neither is configured. Read `${SKILL_DIR}/references/configuration.md` §Configured AI CLI Prerequisite Check before running the AI CLI check.
|
|
51
51
|
4. **Python version**: Requires Python 3.10+ for the unified dev-pipeline runtime
|
|
52
52
|
5. **Browser tools** (optional): If any refactor has `browser_interaction` field, check the corresponding tool is available. Refactors may specify `tool: "playwright-cli"`, `tool: "opencli"`, or `tool: "auto"` (AI chooses at runtime).
|
|
53
53
|
|
|
54
54
|
Quick check:
|
|
55
55
|
```bash
|
|
56
|
-
command -v python3 && command -v git
|
|
56
|
+
command -v python3 >/dev/null && command -v git >/dev/null && echo "Core dependencies OK"
|
|
57
|
+
# AI CLI check: read `${SKILL_DIR}/references/configuration.md` §Configured AI CLI Prerequisite Check.
|
|
58
|
+
# It must print `Configured AI CLI: <name>` and verify that exact executable.
|
|
57
59
|
# Optional: browser interaction support (check both tools — refactors may use either)
|
|
58
60
|
command -v playwright-cli && echo "playwright-cli OK" || echo "playwright-cli not found (playwright browser verification will be skipped)"
|
|
59
61
|
command -v opencli && echo "opencli OK" || echo "opencli not found (opencli browser verification will be skipped)"
|
|
@@ -2,6 +2,45 @@
|
|
|
2
2
|
|
|
3
3
|
Environment variable mappings for the refactor launcher.
|
|
4
4
|
|
|
5
|
+
## Configured AI CLI Prerequisite Check
|
|
6
|
+
|
|
7
|
+
Read this section during launcher prerequisite validation before reporting AI CLI availability.
|
|
8
|
+
|
|
9
|
+
Runtime AI CLI selection is config-driven. Resolve the executable name in this order:
|
|
10
|
+
1. `AI_CLI` environment variable when set.
|
|
11
|
+
2. `.prizmkit/config.json` `ai_cli` when present.
|
|
12
|
+
3. `claude` fallback only when neither is configured.
|
|
13
|
+
|
|
14
|
+
Run this quick check from the project root:
|
|
15
|
+
```bash
|
|
16
|
+
command -v python3 >/dev/null && command -v git >/dev/null || { echo "python3 or git missing"; exit 1; }
|
|
17
|
+
AI_CLI="$(
|
|
18
|
+
python3 - <<'PY'
|
|
19
|
+
import json, os, shlex
|
|
20
|
+
from pathlib import Path
|
|
21
|
+
cli = os.environ.get("AI_CLI", "").strip()
|
|
22
|
+
if not cli:
|
|
23
|
+
config_path = Path(".prizmkit/config.json")
|
|
24
|
+
if config_path.is_file():
|
|
25
|
+
try:
|
|
26
|
+
data = json.loads(config_path.read_text(encoding="utf-8"))
|
|
27
|
+
cli = str(data.get("ai_cli") or "").strip()
|
|
28
|
+
except (OSError, json.JSONDecodeError):
|
|
29
|
+
cli = ""
|
|
30
|
+
cli = cli or "claude"
|
|
31
|
+
try:
|
|
32
|
+
print(shlex.split(cli)[0])
|
|
33
|
+
except ValueError:
|
|
34
|
+
print(cli.split()[0] if cli.split() else "claude")
|
|
35
|
+
PY
|
|
36
|
+
)"
|
|
37
|
+
printf 'Configured AI CLI: %s\n' "$AI_CLI"
|
|
38
|
+
command -v "$AI_CLI" >/dev/null && printf 'AI CLI OK: %s\n' "$(command -v "$AI_CLI")" || { printf 'AI CLI not found: %s\n' "$AI_CLI"; exit 1; }
|
|
39
|
+
echo "All dependencies OK"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Report the configured executable, for example `Configured AI CLI: claude`. Do not report the first arbitrary PATH match such as `cbc` when project config selects a different AI CLI.
|
|
43
|
+
|
|
5
44
|
## Environment Variable Mapping
|
|
6
45
|
|
|
7
46
|
Translating user responses to env vars:
|
|
@@ -38,7 +77,7 @@ Not exposed in interactive menu, pass via `--env`:
|
|
|
38
77
|
| Test baseline failing | Fix failing tests before starting refactoring — behavior preservation requires a green baseline |
|
|
39
78
|
| `python3` not installed | Install Python 3.10+ and rerun the Python runtime command |
|
|
40
79
|
| `git` not installed | Install git; the Python runtime uses git for branch/worktree/status operations |
|
|
41
|
-
|
|
|
80
|
+
| Configured AI CLI not in PATH | Install the executable selected by `AI_CLI` or `.prizmkit/config.json` `ai_cli`, or update the config to a CLI available in PATH. |
|
|
42
81
|
| Refactor pipeline already running | Show status, ask if user wants to stop and restart |
|
|
43
82
|
| PID file stale (process dead) | `python3 ./.prizmkit/dev-pipeline/cli.py daemon refactor start .prizmkit/plans/refactor-list.json` auto-cleans, retry start |
|
|
44
83
|
| Launch failed (process died immediately) | Show last 20 lines of log: `python3 ./.prizmkit/dev-pipeline/cli.py daemon refactor logs --lines 20` |
|