prizmkit 1.1.118 → 1.1.120

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.
Files changed (70) hide show
  1. package/bin/create-prizmkit.js +1 -5
  2. package/bundled/VERSION.json +3 -3
  3. package/bundled/dev-pipeline/README.md +41 -38
  4. package/bundled/dev-pipeline/assets/skill-subagent-integration.md +76 -0
  5. package/bundled/dev-pipeline/prizmkit_runtime/config.py +2 -8
  6. package/bundled/dev-pipeline/prizmkit_runtime/gitops.py +2 -4
  7. package/bundled/dev-pipeline/prizmkit_runtime/interoperability.py +1 -1
  8. package/bundled/dev-pipeline/prizmkit_runtime/platform_detection.py +3 -3
  9. package/bundled/dev-pipeline/prizmkit_runtime/runner_bookkeeping.py +21 -11
  10. package/bundled/dev-pipeline/prizmkit_runtime/runners.py +45 -3
  11. package/bundled/dev-pipeline/prizmkit_runtime/sessions.py +28 -6
  12. package/bundled/dev-pipeline/scripts/generate-bootstrap-prompt.py +60 -102
  13. package/bundled/dev-pipeline/scripts/generate-bugfix-prompt.py +1 -19
  14. package/bundled/dev-pipeline/scripts/generate-refactor-prompt.py +1 -19
  15. package/bundled/dev-pipeline/scripts/{init-dev-team.py → init-change-artifact.py} +6 -16
  16. package/bundled/dev-pipeline/scripts/parse-stream-progress.py +364 -76
  17. package/bundled/dev-pipeline/scripts/utils.py +1 -1
  18. package/bundled/dev-pipeline/templates/bootstrap-prompt.md +2 -2
  19. package/bundled/dev-pipeline/templates/bootstrap-tier3.md +7 -9
  20. package/bundled/dev-pipeline/templates/sections/bugfix-phase-review.md +2 -2
  21. package/bundled/dev-pipeline/templates/sections/context-budget-rules.md +1 -1
  22. package/bundled/dev-pipeline/templates/sections/critical-paths-agent.md +0 -1
  23. package/bundled/dev-pipeline/templates/sections/critical-paths-full.md +0 -2
  24. package/bundled/dev-pipeline/templates/sections/phase-commit-full.md +8 -1
  25. package/bundled/dev-pipeline/templates/sections/phase-implement-agent.md +6 -7
  26. package/bundled/dev-pipeline/templates/sections/phase-implement-full.md +6 -7
  27. package/bundled/dev-pipeline/templates/sections/phase-implement-lite.md +4 -2
  28. package/bundled/dev-pipeline/templates/sections/phase-review-agent.md +2 -2
  29. package/bundled/dev-pipeline/templates/sections/phase-review-full.md +4 -2
  30. package/bundled/dev-pipeline/templates/sections/phase-specify-plan-full.md +20 -0
  31. package/bundled/dev-pipeline/templates/sections/refactor-phase-review.md +2 -2
  32. package/bundled/dev-pipeline/tests/test_generate_bootstrap_prompt.py +204 -141
  33. package/bundled/dev-pipeline/tests/test_generate_bugfix_prompt.py +16 -10
  34. package/bundled/dev-pipeline/tests/test_generate_refactor_prompt.py +2 -13
  35. package/bundled/dev-pipeline/tests/test_python_runner_parity.py +13 -14
  36. package/bundled/dev-pipeline/tests/test_unified_cli.py +227 -7
  37. package/bundled/skills/_metadata.json +1 -1
  38. package/bundled/skills/app-planner/SKILL.md +2 -2
  39. package/bundled/skills/app-planner/references/architecture-decisions.md +1 -3
  40. package/bundled/skills/bugfix-pipeline-launcher/SKILL.md +4 -2
  41. package/bundled/skills/bugfix-pipeline-launcher/references/configuration.md +40 -1
  42. package/bundled/skills/feature-pipeline-launcher/SKILL.md +4 -2
  43. package/bundled/skills/feature-pipeline-launcher/references/configuration.md +40 -1
  44. package/bundled/skills/prizmkit-code-review/SKILL.md +16 -14
  45. package/bundled/skills/prizmkit-code-review/references/reviewer-agent-prompt.md +9 -9
  46. package/bundled/skills/prizmkit-implement/SKILL.md +21 -1
  47. package/bundled/skills/prizmkit-implement/references/implementation-subagent-procedure.md +67 -0
  48. package/bundled/skills/refactor-pipeline-launcher/SKILL.md +4 -2
  49. package/bundled/skills/refactor-pipeline-launcher/references/configuration.md +40 -1
  50. package/package.json +1 -1
  51. package/src/clean.js +12 -8
  52. package/src/config.js +24 -42
  53. package/src/index.js +1 -10
  54. package/src/manifest.js +3 -9
  55. package/src/metadata.js +0 -26
  56. package/src/prompts.js +0 -13
  57. package/src/scaffold.js +76 -201
  58. package/src/upgrade.js +16 -33
  59. package/bundled/adapters/claude/agent-adapter.js +0 -96
  60. package/bundled/adapters/claude/team-adapter.js +0 -183
  61. package/bundled/adapters/codebuddy/agent-adapter.js +0 -42
  62. package/bundled/adapters/codebuddy/team-adapter.js +0 -46
  63. package/bundled/adapters/codex/agent-adapter.js +0 -38
  64. package/bundled/adapters/codex/team-adapter.js +0 -37
  65. package/bundled/agents/prizm-dev-team-dev.md +0 -123
  66. package/bundled/agents/prizm-dev-team-reviewer.md +0 -113
  67. package/bundled/dev-pipeline/assets/prizm-dev-team-integration.md +0 -65
  68. package/bundled/dev-pipeline/templates/bootstrap-tier1.md +0 -436
  69. package/bundled/dev-pipeline/templates/bootstrap-tier2.md +0 -510
  70. package/bundled/team/prizm-dev-team.json +0 -27
@@ -1,20 +1,20 @@
1
1
  ---
2
2
  name: "prizmkit-code-review"
3
- description: "Iterative review-fix loop against spec and plan. Always uses the dedicated prizm-dev-team-reviewer agent in the active checkout with current-workspace / active-checkout / no-worktree launch; the Main Agent filters findings and applies accepted fixes directly. If the current platform cannot start an active-checkout reviewer, stop with tool incompatibility instead of falling back to Main-Agent self-review. Loops until PASS or max 3 rounds. Use after /prizmkit-implement for Full path quality gate or when the user says 'review', 'check code', 'code review', or 'is it ready to commit'. (project)"
3
+ description: "Iterative review-fix loop against spec and plan. Always uses an independent inline reviewer subagent in the active checkout with a skill-owned prompt reference and no worktree/copy/remote isolation; the Main Agent filters findings and applies accepted fixes directly. If the platform cannot start an active-checkout inline reviewer, stop with checkout-isolation incompatibility instead of falling back to Main-Agent self-review. Loops until PASS or max 3 rounds. Use after /prizmkit-implement for Full path quality gate or when the user says 'review', 'check code', 'code review', or 'is it ready to commit'. (project)"
4
4
  ---
5
5
 
6
6
  # PrizmKit Code Review
7
7
 
8
- An iterative review-fix loop that checks workspace changes against the task spec and plan. It separates review judgment from fix application by requiring a dedicated `prizm-dev-team-reviewer` subagent in the active checkout. Main Agent applies accepted fixes directly after filtering reviewer findings.
8
+ An iterative review-fix loop that checks workspace changes against the task spec and plan. It separates review judgment from fix application by requiring an independent inline reviewer subagent launched from the active checkout with a prompt loaded from this skill's references. Main Agent applies accepted fixes directly after filtering reviewer findings.
9
9
 
10
10
  Review modes:
11
- - `reviewer-agent-active-checkout`: required mode. Always spawn `prizm-dev-team-reviewer` in the current active checkout with no worktree or remote isolation.
11
+ - `inline-reviewer-active-checkout`: required mode. Always spawn an independent reviewer subagent in the current active checkout with no worktree, copied checkout, remote checkout, or branch isolation.
12
12
  - `not-run-no-changes`: no workspace changes were detected.
13
13
 
14
- If the platform cannot launch `prizm-dev-team-reviewer` in current-workspace / active-checkout / no-worktree mode, stop with this tool incompatibility message:
14
+ If the platform cannot launch an inline reviewer subagent in current-workspace / active-checkout / no-worktree mode, stop with this checkout-isolation incompatibility message:
15
15
 
16
16
  ```text
17
- Cannot run /prizmkit-code-review because this platform cannot start prizm-dev-team-reviewer in the active checkout without worktree isolation.
17
+ Cannot run /prizmkit-code-review because this platform cannot start an inline reviewer subagent in the active checkout without worktree, copy, remote, or branch isolation.
18
18
  ```
19
19
 
20
20
  ### When to Use
@@ -48,6 +48,7 @@ Cannot run /prizmkit-code-review because this platform cannot start prizm-dev-te
48
48
  - `git diff`
49
49
  - `git diff --cached`
50
50
  - full paths for untracked and renamed files
51
+ - expected active checkout git top-level from `git rev-parse --show-toplevel`
51
52
  - relevant root.prizm RULES and plan decisions
52
53
  6. If no changes are detected, skip Phase 1 and write `review-report.md` with verdict PASS, rounds 0, and review mode `not-run-no-changes`.
53
54
 
@@ -69,22 +70,23 @@ python3 --version 2>/dev/null && echo "SCRIPT_MODE" || echo "TEXT_MODE"
69
70
  - `round = 1`
70
71
  - `max_rounds = 3`
71
72
  - `findings_history = []`
72
- - `review_mode = reviewer-agent-active-checkout` after confirming the dedicated reviewer can launch in the active checkout
73
+ - `review_mode = inline-reviewer-active-checkout` after confirming an inline reviewer subagent can launch in the active checkout
73
74
 
74
- ### Step 1: Launch Required Reviewer
75
+ ### Step 1: Launch Required Inline Reviewer
75
76
 
76
- Always spawn `prizm-dev-team-reviewer` using the dedicated subagent contract:
77
+ Always spawn an independent reviewer subagent using this skill-owned inline contract:
77
78
 
78
79
  ```yaml
79
- subagent_type: prizm-dev-team-reviewer
80
+ prompt_reference: ${SKILL_DIR}/references/reviewer-agent-prompt.md
80
81
  isolation: current-workspace / active-checkout / no-worktree
82
+ subagent_kind: inline reviewer prompt, not a platform-installed named agent
81
83
  ```
82
84
 
83
- 1. Pass the active-checkout context from Phase 0 and the prompt template from `${SKILL_DIR}/references/reviewer-agent-prompt.md`.
85
+ 1. Read `${SKILL_DIR}/references/reviewer-agent-prompt.md` and fill it with the active-checkout context from Phase 0.
84
86
  2. The captured git diff, staged diff, untracked files, spec, plan, dev rules, and scoped test report are the primary review scope.
85
- 3. Never use `worktree`, remote isolation, copied checkouts, `Explore`, or a generic code explorer as a substitute for the PrizmKit reviewer. Do not request or create worktree isolation for this review path, including tool-created `.claude/worktrees/...` directories or pipeline-managed `.prizmkit/state/worktrees/...` directories. Pipeline `USE_WORKTREE` controls implementation infrastructure only; it does not change `/prizmkit-code-review` active-checkout review location.
87
+ 3. Never use worktree isolation, remote isolation, copied checkouts, branch switching, broad repository exploration, or a generic code explorer as a substitute for the required inline reviewer prompt. Do not request or create tool-managed worktrees, pipeline-managed worktrees, copied repositories, or remote checkouts. Do not use `.claude/worktrees/...` or `.prizmkit/state/worktrees/...`. Pipeline runner `USE_WORKTREE` controls outer infrastructure only; it does not change this skill's active-checkout reviewer requirement.
86
88
  4. Never perform Main-Agent self-review or fallback review; the Main Agent's job is filtering and fixing, not acting as the reviewer.
87
- 5. If the platform cannot launch the reviewer in the active checkout without worktree isolation, stop with the tool incompatibility message from this skill's introduction.
89
+ 5. If the platform cannot launch the reviewer in the active checkout without worktree/copy/remote/branch isolation, stop with the checkout-isolation incompatibility message from this skill's introduction.
88
90
 
89
91
  ### Step 2: Run Review
90
92
 
@@ -141,7 +143,7 @@ After filtering, call the Loop Exit Gate. If `endLoop=true`, proceed to Phase 2.
141
143
 
142
144
  ### Step 5: Main Agent Applies Accepted Fixes
143
145
 
144
- The Main Agent applies accepted findings directly in the active checkout. Do not spawn a separate Dev Agent for fixes.
146
+ The Main Agent applies accepted findings directly in the active checkout. Do not spawn a separate implementation subagent for review fixes.
145
147
 
146
148
  If an accepted finding cannot be safely fixed within scope, record the reason and carry it into `review-report.md` as unresolved.
147
149
 
@@ -153,7 +155,7 @@ Always write `review-report.md` to the artifact directory, including no-change P
153
155
 
154
156
  Required report fields:
155
157
  - Verdict: `PASS` or `NEEDS_FIXES`
156
- - Review Mode: `reviewer-agent-active-checkout` or `not-run-no-changes`
158
+ - Review Mode: `inline-reviewer-active-checkout` or `not-run-no-changes`
157
159
  - Rounds and total findings
158
160
  - Fixed, rejected, and unresolved findings
159
161
  - Final summary
@@ -1,9 +1,9 @@
1
- # Reviewer Agent Prompt Template
1
+ # Reviewer Subagent Prompt Template
2
2
 
3
- Used in Phase 1 Step 1 of `/prizmkit-code-review`. The orchestrator fills `{goals}`, `{plan decisions}`, `{scoped test report}`, `{workspace context}`, `{dev rules}`, `{round N}`, and `{round_context}` before spawning the dedicated `prizm-dev-team-reviewer` agent.
3
+ Used in Phase 1 Step 1 of `/prizmkit-code-review`. The orchestrator fills `{goals}`, `{plan decisions}`, `{scoped test report}`, `{workspace context}`, `{dev rules}`, `{round N}`, and `{round_context}` before spawning an independent inline reviewer subagent from the active checkout.
4
4
 
5
5
  ```
6
- You are the dedicated PrizmKit Reviewer agent (`prizm-dev-team-reviewer`). Review workspace changes against the spec goals, plan decisions, scoped test evidence, and per-layer dev rules. Do not modify files and do not apply fixes; the Main Agent will filter findings and apply accepted fixes directly.
6
+ You are an independent PrizmKit reviewer subagent launched by `/prizmkit-code-review` from the active checkout. Review workspace changes against the spec goals, plan decisions, scoped test evidence, and per-layer dev rules. Do not modify files and do not apply fixes; the Main Agent will filter findings and apply accepted fixes directly.
7
7
 
8
8
  ## Spec Goals
9
9
  {goals and acceptance criteria from spec.md}
@@ -15,18 +15,18 @@ You are the dedicated PrizmKit Reviewer agent (`prizm-dev-team-reviewer`). Revie
15
15
  {summary from artifact_dir/test-report-path.txt and test-report.md, including Scope, Generated / Updated Tests, In-Scope Failures, Baseline Failures, Out of Scope Gaps, Boundary Matrix / Boundary Completion Gate if present, and Verdict. If no scoped report exists for a change artifact, write "No scoped /prizmkit-test report found (expected for pre-test review)." Treat that absence as informational unless the calling workflow explicitly requires a prior test report.}
16
16
 
17
17
  ## Workspace Context
18
- {git status, unstaged diff summary, staged diff summary, current working directory, expected active checkout git top-level, and new-file paths captured by the Main Agent in Phase 0 from the active checkout. This is your primary review scope — use this context to understand what changed. Request targeted file reads only when you need specific line-level detail for a finding, not to re-discover or re-index the repository. Do not read files that are not in the workspace context unless you need them to verify impact (callers, dependents, shared patterns). Do not switch to a separate worktree or repository copy — the Main Agent has provided everything needed to understand the change set.}
18
+ {git status, unstaged diff summary, staged diff summary, current working directory, expected active checkout git top-level, and new-file paths captured by the Main Agent in Phase 0 from the active checkout. This is your primary review scope — use this context to understand what changed. Request targeted file reads only when you need specific line-level detail for a finding, not to re-discover or re-index the repository. Do not read files that are not in the workspace context unless you need them to verify impact (callers, dependents, shared patterns).}
19
19
 
20
20
  ## Active Checkout Guard
21
21
  The orchestrator must provide the expected active checkout git top-level in Workspace Context. Before reviewing, verify that your current git top-level matches that expected active checkout.
22
22
 
23
- If your current checkout is different, or appears to be under `.claude/worktrees/`, `.prizmkit/state/worktrees/`, a remote checkout, or any copied/temporary checkout:
23
+ If your current checkout is different, or appears to be under `.claude/worktrees/`, `.prizmkit/state/worktrees/`, a copied checkout, a remote isolated checkout, a temporary repository clone, or any branch/top-level other than the orchestrator-provided active checkout:
24
24
  - Stop immediately.
25
25
  - Do not review files.
26
26
  - Do not produce normal findings.
27
27
  - Report `WRONG_CHECKOUT` and state that `/prizmkit-code-review` cannot continue because the reviewer subagent was not started in the active checkout/no-worktree mode required by this skill.
28
28
 
29
- Worktree review is not supported by `/prizmkit-code-review`; do not continue from a worktree even if the files appear similar.
29
+ Worktree, copied-checkout, remote-checkout, and branch-switched review are not supported by `/prizmkit-code-review`; do not continue even if the files appear similar. Do not request or create worktrees, copied repositories, branch switches, or remote checkouts.
30
30
 
31
31
  ## Dev Rules (per-layer conventions)
32
32
  {rules from .prizmkit/rules/<layer>-rules.md, or "No custom dev rules configured — use general best practices."}
@@ -38,7 +38,7 @@ Round {N}. {round_context}
38
38
  Use the orchestrator-provided workspace context as the source of truth for changed files:
39
39
  - For new files listed in workspace status, read their full content.
40
40
  - For modified files, read enough surrounding context to understand the change.
41
- - Do not edit files, stage changes, run test suites, or spawn other agents.
41
+ - Do not edit files, stage changes, run test suites, spawn other agents, or invoke tools that modify the workspace.
42
42
  - Do not request or create worktrees — you are reviewing the active checkout's changes. The orchestrator has already captured the full diff and status context; re-discovering the whole repository is wasteful and unnecessary.
43
43
 
44
44
  ## Review Dimensions
@@ -55,10 +55,10 @@ Evaluate the changes across these dimensions (focus on what's relevant):
55
55
  ## Output Format
56
56
  Respond with EXACTLY this format:
57
57
 
58
- ### Result: PASS | NEEDS_FIXES
58
+ ### Result: PASS | NEEDS_FIXES | WRONG_CHECKOUT
59
59
 
60
60
  ### Findings
61
- (If PASS, write "No issues found.")
61
+ (If PASS, write "No issues found." If WRONG_CHECKOUT, include only checkout mismatch evidence and do not include normal review findings.)
62
62
 
63
63
  #### Finding N
64
64
  - **Severity**: high | medium | low
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: "prizmkit-implement"
3
- description: "Execute plan.md tasks with a TDD-oriented approach. Respects task ordering, checkpoints, and dependencies for Fast path or Full path change artifacts. Reads Prizm docs before editing; when relevant L2 docs are missing, falls back to target source files and lets /prizmkit-retrospective create L2 later if needed. Use after /prizmkit-plan. Trigger on: 'implement', 'build', 'code it', 'start coding', 'execute', 'write the code'. (project)"
3
+ description: "Execute plan.md tasks with a TDD-oriented approach. Respects task ordering, checkpoints, and dependencies for Fast path or Full path change artifacts. Reads Prizm docs before editing; optional inline implementation subagent delegation uses this skill's references and active-checkout/no-worktree constraints. Use after /prizmkit-plan. Trigger on: 'implement', 'build', 'code it', 'start coding', 'execute', 'write the code'. (project)"
4
4
  ---
5
5
 
6
6
  # PrizmKit Implement
@@ -39,6 +39,26 @@ Before implementation, load context once:
39
39
 
40
40
  If a dev rule conflicts with `plan.md`, call out the conflict and ask the user unless the plan clearly supersedes the rule.
41
41
 
42
+ ## Optional Inline Implementation Subagent Delegation
43
+
44
+ The default execution mode is direct Main Agent implementation. If delegation is useful for a narrow implementation slice, use only this skill's local reference:
45
+
46
+ ```yaml
47
+ prompt_reference: ${SKILL_DIR}/references/implementation-subagent-procedure.md
48
+ isolation: current-workspace / active-checkout / no-worktree
49
+ subagent_kind: inline implementation prompt, not a platform-installed named agent
50
+ ```
51
+
52
+ Delegation rules:
53
+ - Read `${SKILL_DIR}/references/implementation-subagent-procedure.md` before preparing the subagent prompt.
54
+ - Pass the expected active checkout git top-level and the exact delegated task/file scope.
55
+ - Do not use worktree isolation, copied checkouts, remote isolated checkouts, branch switching, or a platform-installed named implementation agent.
56
+ - If active-checkout/no-worktree launch cannot be satisfied, stop with:
57
+
58
+ ```text
59
+ Cannot delegate /prizmkit-implement because this platform cannot start an inline implementation subagent in the active checkout without worktree, copy, remote, or branch isolation.
60
+ ```
61
+
42
62
  ## Execution
43
63
 
44
64
  For each unchecked task in `plan.md`, in order:
@@ -0,0 +1,67 @@
1
+ # Implementation Subagent Procedure
2
+
3
+ Use this reference only when `/prizmkit-implement` deliberately delegates implementation work to an inline implementation subagent. The default path remains direct Main Agent implementation. Delegation is allowed only when the active-checkout/no-worktree contract below can be satisfied.
4
+
5
+ ## Launch Contract
6
+
7
+ The Main Agent must provide:
8
+ - Artifact directory containing `spec.md`, `plan.md`, and `context-snapshot.md` when available.
9
+ - Expected active checkout git top-level from the Main Agent's workspace.
10
+ - The exact plan tasks or files delegated.
11
+ - Any loaded Prizm docs traps/rules relevant to the delegated files.
12
+
13
+ The implementation subagent must run in the same active checkout as the Main Agent.
14
+
15
+ ## Active Checkout Guard
16
+
17
+ Before reading or editing files, verify your current git top-level matches the expected active checkout git top-level provided by the Main Agent.
18
+
19
+ Stop immediately and report `WRONG_CHECKOUT` if any of these are true:
20
+ - You are running from a git worktree, tool-created worktree, `.claude/worktrees/`, `.prizmkit/state/worktrees/`, copied repository checkout, remote isolated checkout, or temporary clone.
21
+ - Your current git top-level differs from the expected active checkout git top-level.
22
+ - You are on a different branch because the launch path switched branches.
23
+ - You would need to create or enter another checkout to complete the work.
24
+
25
+ Do not create worktrees, copied repositories, remote checkouts, or branch switches. Do not continue from the wrong checkout even if files appear identical.
26
+
27
+ ## Context Loading
28
+
29
+ 1. Read `context-snapshot.md` first when it exists.
30
+ 2. Use Section 3 for relevant Prizm rules/traps and Section 4 File Manifest for file summaries.
31
+ 3. Do not re-read files already summarized in the File Manifest unless a specific implementation detail is missing.
32
+ 4. If no context snapshot exists, read `.prizmkit/prizm-docs/root.prizm`, relevant L1/L2 docs, then targeted source files.
33
+ 5. If a relevant L2 doc is missing, use source fallback and note that retrospective may create or update docs later.
34
+
35
+ ## Implementation Rules
36
+
37
+ - Implement only the tasks delegated by the Main Agent and follow `plan.md` task order.
38
+ - Use TDD where meaningful: update/write the smallest relevant test first for behavior changes, then implement, then run the smallest useful check.
39
+ - For docs/config/mechanical refactors where test-first is not meaningful, use the smallest verification that proves the change.
40
+ - Mark delegated `plan.md` tasks `[x]` immediately after completion when the Main Agent explicitly authorizes task marking; otherwise report completed task IDs to the Main Agent for marking.
41
+ - Do not execute git `add`, `commit`, `reset`, `push`, branch checkout, rebase, merge, or stash operations.
42
+ - Do not spawn further agents.
43
+ - Do not perform broad repository rediscovery. Read only delegated files and targeted dependencies needed for correctness.
44
+ - Do not write PrizmKit feature/bug/refactor/task/session/run IDs, pipeline IDs, workflow IDs, branch names, absolute worktree paths, or `.prizmkit/specs` / `.prizmkit/dev-pipeline` artifact paths into `.prizmkit/prizm-docs/`, user-visible UI text, API responses, emails, notifications, or expected product-copy tests.
45
+ - If creating a new sub-module, note the durable facts needed for retrospective; do not overwrite existing `.prizmkit/prizm-docs/` files in full.
46
+
47
+ ## Output Format
48
+
49
+ Report exactly:
50
+
51
+ ```text
52
+ ### Result: COMPLETED | BLOCKED | WRONG_CHECKOUT
53
+
54
+ ### Completed Tasks
55
+ - [task id or description]
56
+
57
+ ### Files Changed
58
+ - path: summary
59
+
60
+ ### Verification
61
+ - command/check: result
62
+
63
+ ### Notes for Main Agent
64
+ - durable decisions, missing L2 docs, or blockers
65
+ ```
66
+
67
+ For `WRONG_CHECKOUT`, include only the checkout mismatch evidence and do not include normal implementation findings.
@@ -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 (`cbc` or `claude`) must be in PATH
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 && (command -v cbc || command -v claude) && echo "All dependencies OK"
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
- | `cbc`/`claude` not in PATH | Check AI CLI installation |
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` |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prizmkit",
3
- "version": "1.1.118",
3
+ "version": "1.1.120",
4
4
  "description": "Create a new PrizmKit-powered project with clean initialization — no framework dev files, just what you need.",
5
5
  "type": "module",
6
6
  "bin": {
package/src/clean.js CHANGED
@@ -17,6 +17,10 @@ const PRIZMKIT_GITIGNORE_ENTRIES = new Set([
17
17
  'CODEBUDDY.private.md',
18
18
  ]);
19
19
 
20
+ const LEGACY_TEAM_NAME = ['prizm', 'dev', 'team'].join('-');
21
+ const LEGACY_DEV_AGENT_FILE = `${LEGACY_TEAM_NAME}-dev.md`;
22
+ const LEGACY_REVIEWER_AGENT_FILE = `${LEGACY_TEAM_NAME}-reviewer.md`;
23
+
20
24
  async function removePath(targetPath, dryRun) {
21
25
  if (!await fs.pathExists(targetPath)) {
22
26
  return { path: targetPath, removed: false, reason: 'not_found' };
@@ -175,7 +179,7 @@ export async function runClean(directory, options = {}) {
175
179
  console.log('');
176
180
  console.log(chalk.bold(' PrizmKit 清理模式'));
177
181
  console.log(` 目标目录: ${projectRoot}`);
178
- console.log(` 全局 Team: ${cleanGlobalTeam ? chalk.yellow('将清理') : chalk.gray('跳过')}`);
182
+ console.log(` 全局旧团队配置: ${cleanGlobalTeam ? chalk.yellow('将清理') : chalk.gray('跳过')}`);
179
183
  console.log(` 预览模式: ${dryRun ? chalk.yellow('是') : chalk.green('否')}`);
180
184
  console.log('');
181
185
 
@@ -193,10 +197,10 @@ export async function runClean(directory, options = {}) {
193
197
  const manifestSkillNames = manifest?.files?.skills || [];
194
198
  const allSkillNames = [...new Set([...metadataSkillNames, ...externalSkillNames, ...manifestSkillNames])];
195
199
 
196
- // Agent file names installed by PrizmKit (union of hardcoded + manifest)
200
+ // Retired PrizmKit named-agent files (legacy installs + manifest)
197
201
  const knownAgentFiles = [
198
- 'prizm-dev-team-dev.md',
199
- 'prizm-dev-team-reviewer.md',
202
+ LEGACY_DEV_AGENT_FILE,
203
+ LEGACY_REVIEWER_AGENT_FILE,
200
204
  ];
201
205
  const manifestAgentFiles = manifest?.files?.agents || [];
202
206
  const agentFiles = [...new Set([...knownAgentFiles, ...manifestAgentFiles])];
@@ -248,15 +252,15 @@ export async function runClean(directory, options = {}) {
248
252
  const codexSkillsDir = path.join(projectRoot, '.agents', 'skills');
249
253
  results.push(...await removeKnownEntries(codexSkillsDir, allSkillNames, dryRun));
250
254
 
251
- // .claude/agents/ — PrizmKit agent files
255
+ // .claude/agents/ — retired PrizmKit named-agent files
252
256
  const claudeAgentsDir = path.join(projectRoot, '.claude', 'agents');
253
257
  results.push(...await removeKnownEntries(claudeAgentsDir, agentFiles, dryRun));
254
258
 
255
- // .codebuddy/agents/ — same agent files
259
+ // .codebuddy/agents/ — retired PrizmKit named-agent files
256
260
  const cbAgentsDir = path.join(projectRoot, '.codebuddy', 'agents');
257
261
  results.push(...await removeKnownEntries(cbAgentsDir, agentFiles, dryRun));
258
262
 
259
- // .codex/agents/ — same agent reference files
263
+ // .codex/agents/ — retired PrizmKit named-agent files
260
264
  const codexAgentsDir = path.join(projectRoot, '.codex', 'agents');
261
265
  results.push(...await removeKnownEntries(codexAgentsDir, codexAgentFiles, dryRun));
262
266
 
@@ -292,7 +296,7 @@ export async function runClean(directory, options = {}) {
292
296
  if (cleanGlobalTeam) {
293
297
  const homeDir = process.env.HOME || process.env.USERPROFILE;
294
298
  if (homeDir) {
295
- const globalTeamPath = path.join(homeDir, '.codebuddy', 'teams', 'prizm-dev-team');
299
+ const globalTeamPath = path.join(homeDir, '.codebuddy', 'teams', LEGACY_TEAM_NAME);
296
300
  results.push(await removePath(globalTeamPath, dryRun));
297
301
  }
298
302
  }
package/src/config.js CHANGED
@@ -2,7 +2,7 @@
2
2
  * PrizmKit Config Command
3
3
  *
4
4
  * Reconfigure an existing PrizmKit installation without a full reinstall.
5
- * Supports changing platform, AI CLI, skills suite, rules, team, and pipeline.
5
+ * Supports changing platform, AI CLI, skills suite, rules, and pipeline.
6
6
  *
7
7
  * Flow: READ manifest → PROMPT user → COMPUTE DIFF → DISPLAY SUMMARY → EXECUTE
8
8
  *
@@ -21,13 +21,10 @@ import { readManifest, writeManifest, buildManifest, diffManifest } from './mani
21
21
  import {
22
22
  loadMetadata,
23
23
  loadRulesMetadata,
24
- getAgentsDir,
25
24
  } from './metadata.js';
26
25
  import {
27
26
  installSkills,
28
- installAgents,
29
27
  installSettings,
30
- installTeamConfig,
31
28
  installProjectMemory,
32
29
  installPipeline,
33
30
  installGitignore,
@@ -39,6 +36,7 @@ import {
39
36
  findStaleManagedPipelineFiles,
40
37
  removeStaleManagedPipelineFiles,
41
38
  normalizeMainProjectMemoryContent,
39
+ removeRetiredAgentTeamArtifacts,
42
40
  } from './scaffold.js';
43
41
  import {
44
42
  removeSkillFiles,
@@ -52,7 +50,6 @@ import {
52
50
  selectAiCliLaunch,
53
51
  selectSkillSuite,
54
52
  selectRulesPreset,
55
- confirmTeamMode,
56
53
  confirmPipeline,
57
54
  } from './prompts.js';
58
55
  import { isKnownPlatform, platformLabel, privateProjectMemoryFile, privateProjectMemoryFiles, projectMemoryFile, resolvePayloadPlatforms } from './platforms.js';
@@ -61,6 +58,9 @@ import { applyAiCliLaunchToConfig, resolveAiCliLaunchSelection, storedAiCliLaunc
61
58
 
62
59
  const __dirname = dirname(fileURLToPath(import.meta.url));
63
60
  const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
61
+ const LEGACY_TEAM_NAME = ['prizm', 'dev', 'team'].join('-');
62
+ const LEGACY_DEV_AGENT_FILE = `${LEGACY_TEAM_NAME}-dev.md`;
63
+ const LEGACY_REVIEWER_AGENT_FILE = `${LEGACY_TEAM_NAME}-reviewer.md`;
64
64
 
65
65
  // ============================================================
66
66
  // Helpers
@@ -96,12 +96,9 @@ async function detectInstalledPlatforms(projectRoot) {
96
96
  }
97
97
  };
98
98
 
99
- const hasClaude = await hasPlatformFiles(path.join(projectRoot, '.claude', 'commands'))
100
- || await hasPlatformFiles(path.join(projectRoot, '.claude', 'agents'));
101
- const hasCodeBuddy = await hasPlatformFiles(path.join(projectRoot, '.codebuddy', 'skills'))
102
- || await hasPlatformFiles(path.join(projectRoot, '.codebuddy', 'agents'));
103
- const hasCodex = await hasPlatformFiles(path.join(projectRoot, '.agents', 'skills'))
104
- || await hasPlatformFiles(path.join(projectRoot, '.codex', 'agents'));
99
+ const hasClaude = await hasPlatformFiles(path.join(projectRoot, '.claude', 'commands'));
100
+ const hasCodeBuddy = await hasPlatformFiles(path.join(projectRoot, '.codebuddy', 'skills'));
101
+ const hasCodex = await hasPlatformFiles(path.join(projectRoot, '.agents', 'skills'));
105
102
 
106
103
  if (hasClaude && hasCodeBuddy && hasCodex) return 'all';
107
104
  if (hasClaude && hasCodeBuddy) return 'both';
@@ -216,8 +213,14 @@ async function migrateProjectMemoryOnPlatformDrop(droppedPlatform, newPlatforms,
216
213
  */
217
214
  async function removePlatformFiles(platform, projectRoot, manifest, dryRun) {
218
215
  const skillNames = manifest?.files?.skills || [];
219
- const agentFileNames = manifest?.files?.agents || [];
220
216
  const ruleFileNames = manifest?.files?.rules || [];
217
+ const agentFileNames = [
218
+ ...new Set([
219
+ ...(manifest?.files?.agents || []),
220
+ LEGACY_DEV_AGENT_FILE,
221
+ LEGACY_REVIEWER_AGENT_FILE,
222
+ ]),
223
+ ];
221
224
 
222
225
  if (skillNames.length) {
223
226
  console.log(chalk.blue(`\n 删除 ${platformLabel(platform)} skills:`));
@@ -273,13 +276,13 @@ async function removePlatformFiles(platform, projectRoot, manifest, dryRun) {
273
276
  }
274
277
  } else if (platform === 'codebuddy') {
275
278
  const homeDir = process.env.HOME || process.env.USERPROFILE;
276
- const teamDir = path.join(homeDir, '.codebuddy', 'teams', 'prizm-dev-team');
279
+ const teamDir = path.join(homeDir, '.codebuddy', 'teams', LEGACY_TEAM_NAME);
277
280
  if (await fs.pathExists(teamDir)) {
278
281
  if (dryRun) {
279
- console.log(chalk.gray(' [dry-run] remove ~/.codebuddy/teams/prizm-dev-team/'));
282
+ console.log(chalk.gray(' [dry-run] remove legacy CodeBuddy team config'));
280
283
  } else {
281
284
  await fs.remove(teamDir);
282
- console.log(chalk.red(' ✗ removed ~/.codebuddy/teams/prizm-dev-team/'));
285
+ console.log(chalk.red(' ✗ removed legacy CodeBuddy team config'));
283
286
  }
284
287
  }
285
288
  } else if (platform === 'codex') {
@@ -405,7 +408,6 @@ export async function runConfig(directory, options = {}) {
405
408
  runtime: normalizedManifestRuntime,
406
409
  suite: oldManifest.suite || 'core',
407
410
  rules: oldManifest.options?.rules || 'recommended',
408
- team: oldManifest.options?.team ?? true,
409
411
  pipeline: oldManifest.options?.pipeline ?? true,
410
412
  aiCli: userConfig.ai_cli || oldManifest.options?.aiCli || '',
411
413
  aiCliLaunch: storedAiCliLaunch(userConfig),
@@ -422,7 +424,6 @@ export async function runConfig(directory, options = {}) {
422
424
  console.log(` AI CLI: ${currentConfig.aiCli ? chalk.cyan(currentConfig.aiCli) : chalk.gray('(未设置)')}`);
423
425
  console.log(` 技能套件: ${chalk.cyan(currentConfig.suite)}`);
424
426
  console.log(` 规则: ${chalk.cyan(currentConfig.rules)}`);
425
- console.log(` 团队模式: ${currentConfig.team ? chalk.green('启用') : chalk.gray('禁用')}`);
426
427
  console.log(` 流水线: ${currentConfig.pipeline ? chalk.green('启用') : chalk.gray('禁用')}`);
427
428
  console.log('');
428
429
 
@@ -435,9 +436,9 @@ export async function runConfig(directory, options = {}) {
435
436
  if (nonInteractive) {
436
437
  // Non-interactive: only change what's explicitly specified via CLI options
437
438
  if (!platformManifestNeedsNormalization && !runtimeManifestNeedsNormalization && !runtimeOptionNeedsNormalization && !options.platform && !options.skills && !options.rules && options.runtime === undefined
438
- && options.aiCli === undefined && options.headlessPromptArg === undefined && options.headlessExtraArgs === undefined && options.team === undefined && options.pipeline === undefined) {
439
+ && options.aiCli === undefined && options.headlessPromptArg === undefined && options.headlessExtraArgs === undefined && options.pipeline === undefined) {
439
440
  console.log(chalk.yellow(' ⚠ 非交互式模式下未指定任何变更。'));
440
- console.log(chalk.gray(' 使用 --platform, --runtime, --skills, --rules, --ai-cli, --headless-prompt-arg, --headless-extra-args, --team/--no-team, --pipeline/--no-pipeline'));
441
+ console.log(chalk.gray(' 使用 --platform, --runtime, --skills, --rules, --ai-cli, --headless-prompt-arg, --headless-extra-args, --pipeline/--no-pipeline'));
441
442
  return;
442
443
  }
443
444
 
@@ -452,7 +453,6 @@ export async function runConfig(directory, options = {}) {
452
453
  runtime: optionRuntime || currentConfig.runtime,
453
454
  suite: options.skills || currentConfig.suite,
454
455
  rules: options.rules || currentConfig.rules,
455
- team: options.team !== undefined ? options.team : currentConfig.team,
456
456
  pipeline: options.pipeline !== undefined ? options.pipeline : currentConfig.pipeline,
457
457
  aiCli: aiCliLaunchValue.aiCli,
458
458
  aiCliLaunch: aiCliLaunchValue.aiCliLaunch,
@@ -471,7 +471,6 @@ export async function runConfig(directory, options = {}) {
471
471
  const metadata = await loadMetadata();
472
472
  const newSuite = await selectSkillSuite(currentConfig.suite, metadata);
473
473
  const newRules = await selectRulesPreset(currentConfig.rules);
474
- const newTeam = await confirmTeamMode(currentConfig.team);
475
474
  const newPipeline = await confirmPipeline(currentConfig.pipeline);
476
475
 
477
476
  newConfig = {
@@ -479,7 +478,6 @@ export async function runConfig(directory, options = {}) {
479
478
  runtime: newRuntime,
480
479
  suite: newSuite,
481
480
  rules: newRules,
482
- team: newTeam,
483
481
  pipeline: newPipeline,
484
482
  aiCli: aiCliSelection.aiCli,
485
483
  aiCliLaunch: aiCliSelection.aiCliLaunch,
@@ -522,9 +520,6 @@ export async function runConfig(directory, options = {}) {
522
520
  if (newConfig.rules !== currentConfig.rules) {
523
521
  changes.push(`规则: ${currentConfig.rules} → ${newConfig.rules}`);
524
522
  }
525
- if (newConfig.team !== currentConfig.team) {
526
- changes.push(`团队模式: ${currentConfig.team ? '启用' : '禁用'} → ${newConfig.team ? '启用' : '禁用'}`);
527
- }
528
523
  if (newConfig.pipeline !== currentConfig.pipeline) {
529
524
  changes.push(`流水线: ${currentConfig.pipeline ? '启用' : '禁用'} → ${newConfig.pipeline ? '启用' : '禁用'}`);
530
525
  }
@@ -582,8 +577,6 @@ export async function runConfig(directory, options = {}) {
582
577
 
583
578
  // Resolve new file lists
584
579
  const newSkillList = await resolveSkillList(newConfig.suite);
585
- const agentsDir = getAgentsDir();
586
- const newAgentFiles = (await fs.readdir(agentsDir)).filter(f => f.endsWith('.md'));
587
580
  const rulesMeta = await loadRulesMetadata();
588
581
  const newRuleFiles = resolveRuleNamesForRuntime(rulesMeta, newConfig.rules, newConfig.runtime).map(name => `${name}.md`);
589
582
  const newPipelineFiles = newConfig.pipeline ? resolvePipelineFileList(newConfig.runtime) : [];
@@ -605,8 +598,8 @@ export async function runConfig(directory, options = {}) {
605
598
  || newConfig.runtime !== currentConfig.runtime) {
606
599
  const newTempManifest = buildManifest({
607
600
  version: pkg.version, platform: newConfig.platform, suite: newConfig.suite,
608
- skills: newSkillList, agents: newAgentFiles, rules: newRuleFiles,
609
- pipeline: newPipelineFiles, team: newConfig.team, aiCli: newConfig.aiCli,
601
+ skills: newSkillList, rules: newRuleFiles,
602
+ pipeline: newPipelineFiles, aiCli: newConfig.aiCli,
610
603
  runtime: newConfig.runtime, rulesPreset: newConfig.rules, extras: oldManifest?.files?.extras || [], payloadPlatforms: newPlatforms,
611
604
  });
612
605
  const diff = diffManifest(oldManifest, newTempManifest);
@@ -633,11 +626,11 @@ export async function runConfig(directory, options = {}) {
633
626
  || newConfig.runtime !== currentConfig.runtime
634
627
  || newConfig.suite !== currentConfig.suite
635
628
  || newConfig.rules !== currentConfig.rules
636
- || newConfig.aiCli !== currentConfig.aiCli
637
- || newConfig.team !== currentConfig.team;
629
+ || newConfig.aiCli !== currentConfig.aiCli;
638
630
 
639
631
  for (const p of allTargetPlatforms) {
640
632
  const isNew = platformsToAdd.includes(p);
633
+ await removeRetiredAgentTeamArtifacts(p, projectRoot, false);
641
634
 
642
635
  if (isNew || needsReinstall) {
643
636
  console.log(chalk.bold(`\n ${isNew ? '安装' : '更新'} ${platformLabel(p)} 环境...\n`));
@@ -645,19 +638,11 @@ export async function runConfig(directory, options = {}) {
645
638
  console.log(chalk.blue(' Skills:'));
646
639
  await installSkills(p, newSkillList, projectRoot, false, newConfig.runtime);
647
640
 
648
- console.log(chalk.blue('\n Agents:'));
649
- await installAgents(p, projectRoot, false);
650
-
651
641
  console.log(chalk.blue('\n Settings & Rules:'));
652
642
  await installSettings(p, projectRoot, { pipeline: newConfig.pipeline, rules: newConfig.rules }, false, newConfig.runtime);
653
643
 
654
644
  console.log(chalk.blue('\n Project Memory:'));
655
645
  await installProjectMemory(p, projectRoot, false);
656
-
657
- if (newConfig.team) {
658
- console.log(chalk.blue('\n Team Config:'));
659
- await installTeamConfig(p, projectRoot, false);
660
- }
661
646
  }
662
647
  }
663
648
 
@@ -723,10 +708,8 @@ export async function runConfig(directory, options = {}) {
723
708
  runtime: newConfig.runtime,
724
709
  suite: newConfig.suite,
725
710
  skills: newSkillList,
726
- agents: newAgentFiles,
727
711
  rules: newRuleFiles,
728
712
  pipeline: newPipelineFiles,
729
- team: newConfig.team,
730
713
  aiCli: newConfig.aiCli,
731
714
  rulesPreset: newConfig.rules,
732
715
  payloadPlatforms: newPlatforms,
@@ -755,7 +738,6 @@ export async function runConfig(directory, options = {}) {
755
738
  console.log(chalk.gray(` AI CLI: ${newConfig.aiCli || '(未设置)'}`));
756
739
  console.log(chalk.gray(` 技能套件: ${newConfig.suite}`));
757
740
  console.log(chalk.gray(` 规则: ${newConfig.rules}`));
758
- console.log(chalk.gray(` 团队模式: ${newConfig.team ? '启用' : '禁用'}`));
759
741
  console.log(chalk.gray(` 流水线: ${newConfig.pipeline ? '启用' : '禁用'}`));
760
742
  console.log('');
761
743
  }