claude-code-workflow 7.2.14 → 7.2.15

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 (75) hide show
  1. package/.claude/commands/workflow/analyze-with-file.md +7 -0
  2. package/.codex/skills/analyze-with-file/SKILL.md +1181 -1182
  3. package/.codex/skills/brainstorm/SKILL.md +723 -725
  4. package/.codex/skills/brainstorm-with-file/SKILL.md +10 -5
  5. package/.codex/skills/clean/SKILL.md +33 -26
  6. package/.codex/skills/collaborative-plan-with-file/SKILL.md +830 -831
  7. package/.codex/skills/csv-wave-pipeline/SKILL.md +906 -906
  8. package/.codex/skills/issue-discover/SKILL.md +57 -50
  9. package/.codex/skills/issue-discover/phases/01-issue-new.md +18 -11
  10. package/.codex/skills/issue-discover/phases/02-discover.md +31 -26
  11. package/.codex/skills/issue-discover/phases/03-discover-by-prompt.md +13 -11
  12. package/.codex/skills/issue-discover/phases/04-quick-execute.md +32 -27
  13. package/.codex/skills/parallel-dev-cycle/SKILL.md +402 -402
  14. package/.codex/skills/project-documentation-workflow/SKILL.md +13 -3
  15. package/.codex/skills/roadmap-with-file/SKILL.md +901 -897
  16. package/.codex/skills/session-sync/SKILL.md +222 -212
  17. package/.codex/skills/spec-add/SKILL.md +620 -613
  18. package/.codex/skills/spec-generator/SKILL.md +2 -2
  19. package/.codex/skills/spec-generator/phases/01-5-requirement-clarification.md +10 -10
  20. package/.codex/skills/spec-generator/phases/01-discovery.md +11 -18
  21. package/.codex/skills/spec-generator/phases/02-product-brief.md +5 -5
  22. package/.codex/skills/spec-generator/phases/03-requirements.md +7 -7
  23. package/.codex/skills/spec-generator/phases/04-architecture.md +4 -4
  24. package/.codex/skills/spec-generator/phases/05-epics-stories.md +5 -6
  25. package/.codex/skills/spec-generator/phases/06-readiness-check.md +10 -17
  26. package/.codex/skills/spec-generator/phases/07-issue-export.md +326 -329
  27. package/.codex/skills/spec-setup/SKILL.md +669 -657
  28. package/.codex/skills/team-arch-opt/SKILL.md +50 -50
  29. package/.codex/skills/team-arch-opt/agents/completion-handler.md +3 -3
  30. package/.codex/skills/team-brainstorm/SKILL.md +724 -725
  31. package/.codex/skills/team-coordinate/SKILL.md +51 -51
  32. package/.codex/skills/team-coordinate/agents/completion-handler.md +3 -3
  33. package/.codex/skills/team-coordinate/agents/plan-reviewer.md +4 -4
  34. package/.codex/skills/team-designer/SKILL.md +691 -691
  35. package/.codex/skills/team-designer/agents/requirement-clarifier.md +11 -12
  36. package/.codex/skills/team-executor/SKILL.md +45 -45
  37. package/.codex/skills/team-frontend/SKILL.md +45 -45
  38. package/.codex/skills/team-frontend/agents/completion-handler.md +3 -3
  39. package/.codex/skills/team-frontend/agents/qa-gate-reviewer.md +4 -4
  40. package/.codex/skills/team-frontend-debug/SKILL.md +50 -50
  41. package/.codex/skills/team-frontend-debug/agents/completion-handler.md +3 -3
  42. package/.codex/skills/team-frontend-debug/agents/conditional-skip-gate.md +4 -4
  43. package/.codex/skills/team-issue/SKILL.md +751 -740
  44. package/.codex/skills/team-iterdev/SKILL.md +825 -826
  45. package/.codex/skills/team-lifecycle-v4/SKILL.md +775 -775
  46. package/.codex/skills/team-lifecycle-v4/agents/quality-gate.md +165 -165
  47. package/.codex/skills/team-lifecycle-v4/agents/requirement-clarifier.md +163 -163
  48. package/.codex/skills/team-perf-opt/SKILL.md +50 -50
  49. package/.codex/skills/team-perf-opt/agents/completion-handler.md +3 -3
  50. package/.codex/skills/team-planex-v2/SKILL.md +652 -637
  51. package/.codex/skills/team-quality-assurance/SKILL.md +51 -52
  52. package/.codex/skills/team-review/SKILL.md +40 -40
  53. package/.codex/skills/team-roadmap-dev/SKILL.md +51 -51
  54. package/.codex/skills/team-roadmap-dev/agents/roadmap-discusser.md +8 -8
  55. package/.codex/skills/team-tech-debt/SKILL.md +50 -50
  56. package/.codex/skills/team-tech-debt/agents/plan-approver.md +5 -5
  57. package/.codex/skills/team-testing/SKILL.md +51 -52
  58. package/.codex/skills/team-uidesign/SKILL.md +40 -40
  59. package/.codex/skills/team-uidesign/agents/completion-handler.md +177 -177
  60. package/.codex/skills/team-ultra-analyze/SKILL.md +786 -787
  61. package/.codex/skills/team-ultra-analyze/agents/discussion-feedback.md +8 -8
  62. package/.codex/skills/team-ux-improve/SKILL.md +51 -52
  63. package/.codex/skills/team-ux-improve/agents/ux-designer.md +2 -2
  64. package/.codex/skills/team-ux-improve/agents/ux-explorer.md +1 -1
  65. package/.codex/skills/unified-execute-with-file/SKILL.md +797 -796
  66. package/.codex/skills/workflow-execute/SKILL.md +1117 -1118
  67. package/.codex/skills/workflow-lite-planex/SKILL.md +1144 -1141
  68. package/.codex/skills/workflow-plan/SKILL.md +631 -636
  69. package/.codex/skills/workflow-tdd-plan/SKILL.md +753 -759
  70. package/.codex/skills/workflow-test-fix-cycle/SKILL.md +402 -392
  71. package/README.md +25 -0
  72. package/ccw/dist/commands/install.d.ts.map +1 -1
  73. package/ccw/dist/commands/install.js +12 -0
  74. package/ccw/dist/commands/install.js.map +1 -1
  75. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: issue-discover
3
3
  description: Unified issue discovery and creation. Create issues from GitHub/text, discover issues via multi-perspective analysis, or prompt-driven iterative exploration. Triggers on "issue:new", "issue:discover", "issue:discover-by-prompt", "create issue", "discover issues", "find issues".
4
- allowed-tools: spawn_agent, wait, send_input, close_agent, AskUserQuestion, Read, Write, Edit, Bash, Glob, Grep, mcp__ace-tool__search_context, mcp__exa__search
4
+ allowed-tools: spawn_agent, wait, send_input, close_agent, request_user_input, Read, Write, Edit, Bash, Glob, Grep, mcp__ace-tool__search_context, mcp__exa__search
5
5
  ---
6
6
 
7
7
  # Issue Discover
@@ -16,7 +16,7 @@ Unified issue discovery and creation skill covering three entry points: manual i
16
16
  │ → Action selection → Route to phase → Execute → Summary │
17
17
  └───────────────┬─────────────────────────────────────────────────┘
18
18
 
19
- ├─ ASK_USER: Select action
19
+ ├─ request_user_input: Select action
20
20
 
21
21
  ┌───────────┼───────────┬───────────┐
22
22
  ↓ ↓ ↓ │
@@ -50,7 +50,7 @@ Unified issue discovery and creation skill covering three entry points: manual i
50
50
 
51
51
  ## Key Design Principles
52
52
 
53
- 1. **Action-Driven Routing**: ASK_USER selects action, then load single phase
53
+ 1. **Action-Driven Routing**: request_user_input selects action, then load single phase
54
54
  2. **Progressive Phase Loading**: Only read the selected phase document
55
55
  3. **CLI-First Data Access**: All issue CRUD via `ccw issue` CLI commands
56
56
  4. **Auto Mode Support**: `-y` flag skips action selection with auto-detection
@@ -101,7 +101,7 @@ Action Selection:
101
101
  │ ├─ Path pattern (src/**, *.ts) → Discover (Phase 2)
102
102
  │ ├─ Short text (< 80 chars) → Create New (Phase 1)
103
103
  │ └─ Long descriptive text (≥ 80 chars) → Discover by Prompt (Phase 3)
104
- └─ Otherwise → ASK_USER to select action
104
+ └─ Otherwise → request_user_input to select action
105
105
 
106
106
  Phase Execution (load one phase):
107
107
  ├─ Phase 1: Create New → phases/01-issue-new.md
@@ -168,33 +168,36 @@ function detectAction(input, flags) {
168
168
  }
169
169
  ```
170
170
 
171
- ### Action Selection (ASK_USER)
171
+ ### Action Selection (request_user_input)
172
172
 
173
173
  ```javascript
174
174
  // When action cannot be auto-detected
175
- const answer = ASK_USER([{
176
- id: "action",
177
- type: "select",
178
- prompt: "What would you like to do?",
179
- options: [
180
- {
181
- label: "Create New Issue (Recommended)",
182
- description: "Create issue from GitHub URL, text description, or structured input"
183
- },
184
- {
185
- label: "Discover Issues",
186
- description: "Multi-perspective discovery: bug, security, test, quality, performance, etc."
187
- },
188
- {
189
- label: "Discover by Prompt",
190
- description: "Describe what to find — Gemini plans the exploration strategy iteratively"
191
- }
192
- ]
193
- }]); // BLOCKS (wait for user response)
175
+ const answer = request_user_input({
176
+ questions: [{
177
+ header: "Action",
178
+ id: "action",
179
+ question: "What would you like to do?",
180
+ options: [
181
+ {
182
+ label: "Create New Issue (Recommended)",
183
+ description: "Create issue from GitHub URL, text description, or structured input"
184
+ },
185
+ {
186
+ label: "Discover Issues",
187
+ description: "Multi-perspective discovery: bug, security, test, quality, performance, etc."
188
+ },
189
+ {
190
+ label: "Discover by Prompt",
191
+ description: "Describe what to find — Gemini plans the exploration strategy iteratively"
192
+ }
193
+ ]
194
+ }]
195
+ }); // BLOCKS (wait for user response)
194
196
 
195
197
  // Route based on selection
198
+ // answer.answers.action.answers[0] → selected label
196
199
  const actionMap = {
197
- "Create New Issue": "new",
200
+ "Create New Issue (Recommended)": "new",
198
201
  "Discover Issues": "discover",
199
202
  "Discover by Prompt": "discover-by-prompt"
200
203
  };
@@ -207,7 +210,7 @@ User Input (URL / text / path pattern / descriptive prompt)
207
210
 
208
211
  [Parse Flags + Auto-Detect Action]
209
212
 
210
- [Action Selection] ← ASK_USER (if needed)
213
+ [Action Selection] ← request_user_input (if needed)
211
214
 
212
215
  [Read Selected Phase Document]
213
216
 
@@ -305,7 +308,7 @@ close_agent({ id: agentId })
305
308
 
306
309
  | Error | Resolution |
307
310
  |-------|------------|
308
- | No action detected | Show ASK_USER with all 3 options |
311
+ | No action detected | Show request_user_input with all 3 options |
309
312
  | Invalid action type | Show available actions, re-prompt |
310
313
  | Phase execution fails | Report error, suggest manual intervention |
311
314
  | No files matched (discover) | Check target pattern, verify path exists |
@@ -318,31 +321,35 @@ After successful phase execution, recommend next action:
318
321
 
319
322
  ```javascript
320
323
  // After Create New (issue created)
321
- ASK_USER([{
322
- id: "next_after_create",
323
- type: "select",
324
- prompt: "Issue created. What next?",
325
- options: [
326
- { label: "Plan Solution", description: "Generate solution via issue-resolve" },
327
- { label: "Create Another", description: "Create more issues" },
328
- { label: "View Issues", description: "Review all issues" },
329
- { label: "Done", description: "Exit workflow" }
330
- ]
331
- }]); // BLOCKS (wait for user response)
324
+ request_user_input({
325
+ questions: [{
326
+ header: "Next Step",
327
+ id: "next_after_create",
328
+ question: "Issue created. What next?",
329
+ options: [
330
+ { label: "Plan Solution (Recommended)", description: "Generate solution via issue-resolve" },
331
+ { label: "Create Another", description: "Create more issues" },
332
+ { label: "Done", description: "Exit workflow" }
333
+ ]
334
+ }]
335
+ }); // BLOCKS (wait for user response)
336
+ // answer.answers.next_after_create.answers[0] → selected label
332
337
 
333
338
  // After Discover / Discover by Prompt (discoveries generated)
334
- ASK_USER([{
335
- id: "next_after_discover",
336
- type: "select",
337
- prompt: `Discovery complete: ${findings.length} findings, ${executableFindings.length} executable. What next?`,
338
- options: [
339
- { label: "Quick Plan & Execute (Recommended)", description: `Fix ${executableFindings.length} high-confidence findings directly` },
340
- { label: "Export to Issues", description: "Convert discoveries to issues" },
341
- { label: "Plan Solutions", description: "Plan solutions for exported issues via issue-resolve" },
342
- { label: "Done", description: "Exit workflow" }
343
- ]
344
- }]); // BLOCKS (wait for user response)
345
- // If "Quick Plan & Execute" → Read phases/04-quick-execute.md, execute
339
+ request_user_input({
340
+ questions: [{
341
+ header: "Next Step",
342
+ id: "next_after_discover",
343
+ question: `Discovery complete: ${findings.length} findings, ${executableFindings.length} executable. What next?`,
344
+ options: [
345
+ { label: "Quick Plan & Execute (Recommended)", description: `Fix ${executableFindings.length} high-confidence findings directly` },
346
+ { label: "Export to Issues", description: "Convert discoveries to issues" },
347
+ { label: "Done", description: "Exit workflow" }
348
+ ]
349
+ }]
350
+ }); // BLOCKS (wait for user response)
351
+ // answer.answers.next_after_discover.answers[0] → selected label
352
+ // If "Quick Plan & Execute (Recommended)" → Read phases/04-quick-execute.md, execute
346
353
  ```
347
354
 
348
355
  ## Related Skills & Commands
@@ -145,16 +145,23 @@ if (clarityScore >= 1 && clarityScore <= 2 && !issueData.affected_components?.le
145
145
  ```javascript
146
146
  // ONLY ask questions if clarity is low
147
147
  if (clarityScore < 2 && (!issueData.context || issueData.context.length < 20)) {
148
- const answer = ASK_USER([{
149
- id: "clarify",
150
- type: "input",
151
- prompt: "Please describe the issue in more detail:",
152
- description: "Describe what, where, and expected behavior"
153
- }]); // BLOCKS (wait for user response)
154
-
155
- if (answer.customText) {
156
- issueData.context = answer.customText;
157
- issueData.title = answer.customText.split(/[.\n]/)[0].substring(0, 60);
148
+ const answer = request_user_input({
149
+ questions: [{
150
+ header: "Clarify",
151
+ id: "clarify",
152
+ question: "Please describe the issue in more detail.",
153
+ options: [
154
+ { label: "Provide Details", description: "Describe what, where, and expected behavior" },
155
+ { label: "Skip", description: "Create issue with current information" }
156
+ ]
157
+ }]
158
+ }); // BLOCKS (wait for user response)
159
+
160
+ const selection = answer.answers.clarify.answers[0];
161
+ if (selection === "Provide Details") {
162
+ // User provides details via follow-up
163
+ issueData.context = selection;
164
+ issueData.title = selection.split(/[.\n]/)[0].substring(0, 60);
158
165
  issueData.feedback = [{
159
166
  type: 'clarification',
160
167
  stage: 'new',
@@ -228,7 +235,7 @@ Phase 2: Data Extraction (branched by clarity)
228
235
  │ Score 3 │ Score 1-2 │ Score 0 │
229
236
  │ GitHub │ Text + ACE │ Vague │
230
237
  ├────────────┼─────────────────┼──────────────┤
231
- │ gh CLI │ Parse struct │ ASK_USER
238
+ │ gh CLI │ Parse struct │ request_user_input
232
239
  │ → parse │ + quick hint │ (1 question) │
233
240
  │ │ (3 files max) │ → feedback │
234
241
  └────────────┴─────────────────┴──────────────┘
@@ -86,18 +86,20 @@ let selectedPerspectives = [];
86
86
  if (args.perspectives) {
87
87
  selectedPerspectives = args.perspectives.split(',').map(p => p.trim());
88
88
  } else {
89
- // Interactive selection via ASK_USER
90
- const response = ASK_USER([{
91
- id: "focus",
92
- type: "select",
93
- prompt: "Select primary discovery focus:",
94
- options: [
95
- { label: "Bug + Test + Quality", description: "Quick scan: potential bugs, test gaps, code quality (Recommended)" },
96
- { label: "Security + Performance", description: "System audit: security issues, performance bottlenecks" },
97
- { label: "Maintainability + Best-practices", description: "Long-term health: coupling, tech debt, conventions" },
98
- { label: "Full analysis", description: "All 8 perspectives (comprehensive, takes longer)" }
99
- ]
100
- }]); // BLOCKS (wait for user response)
89
+ // Interactive selection via request_user_input
90
+ const response = request_user_input({
91
+ questions: [{
92
+ header: "Focus",
93
+ id: "focus",
94
+ question: "Select primary discovery focus.",
95
+ options: [
96
+ { label: "Bug + Test + Quality (Recommended)", description: "Quick scan: potential bugs, test gaps, code quality" },
97
+ { label: "Security + Performance", description: "System audit: security issues, performance bottlenecks" },
98
+ { label: "Full analysis", description: "All 8 perspectives (comprehensive, takes longer)" }
99
+ ]
100
+ }]
101
+ }); // BLOCKS (wait for user response)
102
+ // response.answers.focus.answers[0] → selected label
101
103
  selectedPerspectives = parseSelectedPerspectives(response);
102
104
  }
103
105
  ```
@@ -271,20 +273,23 @@ await updateDiscoveryState(outputDir, {
271
273
  ```javascript
272
274
  const hasHighPriority = issues.some(i => i.priority === 'critical' || i.priority === 'high');
273
275
 
274
- await ASK_USER([{
275
- id: "next_step",
276
- type: "select",
277
- prompt: `Discovery complete: ${issues.length} issues generated, ${prioritizedFindings.length} total findings. What next?`,
278
- options: hasHighPriority ? [
279
- { label: "Export to Issues (Recommended)", description: `${issues.length} high-priority issues found - export to tracker` },
280
- { label: "Open Dashboard", description: "Review findings in ccw view before exporting" },
281
- { label: "Skip", description: "Complete discovery without exporting" }
282
- ] : [
283
- { label: "Open Dashboard (Recommended)", description: "Review findings in ccw view to decide which to export" },
284
- { label: "Export to Issues", description: `Export ${issues.length} issues to tracker` },
285
- { label: "Skip", description: "Complete discovery without exporting" }
286
- ]
287
- }]); // BLOCKS (wait for user response)
276
+ await request_user_input({
277
+ questions: [{
278
+ header: "Next Step",
279
+ id: "next_step",
280
+ question: `Discovery complete: ${issues.length} issues generated, ${prioritizedFindings.length} total findings. What next?`,
281
+ options: hasHighPriority ? [
282
+ { label: "Export to Issues (Recommended)", description: `${issues.length} high-priority issues found - export to tracker` },
283
+ { label: "Open Dashboard", description: "Review findings in ccw view before exporting" },
284
+ { label: "Skip", description: "Complete discovery without exporting" }
285
+ ] : [
286
+ { label: "Open Dashboard (Recommended)", description: "Review findings in ccw view to decide which to export" },
287
+ { label: "Export to Issues", description: `Export ${issues.length} issues to tracker` },
288
+ { label: "Skip", description: "Complete discovery without exporting" }
289
+ ]
290
+ }]
291
+ }); // BLOCKS (wait for user response)
292
+ // response.answers.next_step.answers[0] → selected label
288
293
 
289
294
  if (response === "Export to Issues") {
290
295
  await appendJsonl(`${projectRoot}/.workflow/issues/issues.jsonl`, issues);
@@ -389,17 +389,19 @@ await updateDiscoveryState(outputDir, {
389
389
  });
390
390
 
391
391
  // Prompt user for next action
392
- await ASK_USER([{
393
- id: "next_step",
394
- type: "select",
395
- prompt: `Discovery complete: ${issues.length} issues from ${cumulativeFindings.length} findings across ${iteration} iterations. What next?`,
396
- options: [
397
- { label: "Export to Issues (Recommended)", description: `Export ${issues.length} issues for planning` },
398
- { label: "Review Details", description: "View comparison analysis and iteration details" },
399
- { label: "Run Deeper", description: "Continue with more iterations" },
400
- { label: "Skip", description: "Complete without exporting" }
401
- ]
402
- }]); // BLOCKS (wait for user response)
392
+ await request_user_input({
393
+ questions: [{
394
+ header: "Next Step",
395
+ id: "next_step",
396
+ question: `Discovery complete: ${issues.length} issues from ${cumulativeFindings.length} findings across ${iteration} iterations. What next?`,
397
+ options: [
398
+ { label: "Export to Issues (Recommended)", description: `Export ${issues.length} issues for planning` },
399
+ { label: "Review Details", description: "View comparison analysis and iteration details" },
400
+ { label: "Run Deeper", description: "Continue with more iterations" }
401
+ ]
402
+ }]
403
+ }); // BLOCKS (wait for user response)
404
+ // answer.answers.next_step.answers[0] → selected label
403
405
  ```
404
406
 
405
407
  ## Dimension Agent Prompt Template
@@ -44,7 +44,7 @@ executableFindings = allFindings.filter(f =>
44
44
  ```
45
45
 
46
46
  - 如果 0 个可执行 findings → 提示 "No executable findings (all below threshold)",建议用户走 "Export to Issues" 路径
47
- - 如果超过 10 个 findings → ASK_USER 确认是否全部执行或选择子集 (Auto mode: 全部执行)
47
+ - 如果超过 10 个 findings → request_user_input 确认是否全部执行或选择子集 (Auto mode: 全部执行)
48
48
 
49
49
  **同文件聚合**:
50
50
 
@@ -154,23 +154,26 @@ Quick Execute Summary:
154
154
  - File conflicts: {conflicts.length}
155
155
  ```
156
156
 
157
- ASK_USER:
157
+ request_user_input:
158
158
 
159
159
  ```javascript
160
- ASK_USER([{
161
- id: "confirm_execute",
162
- type: "select",
163
- prompt: `${tasks.length} tasks ready. Start execution?`,
164
- options: [
165
- { label: "Start Execution", description: "Execute all tasks" },
166
- { label: "Adjust Filter", description: "Change confidence/priority threshold" },
167
- { label: "Cancel", description: "Skip execution, return to post-phase options" }
168
- ]
169
- }]);
160
+ request_user_input({
161
+ questions: [{
162
+ header: "Confirm",
163
+ id: "confirm_execute",
164
+ question: `${tasks.length} tasks ready. Start execution?`,
165
+ options: [
166
+ { label: "Start Execution (Recommended)", description: "Execute all tasks" },
167
+ { label: "Adjust Filter", description: "Change confidence/priority threshold" },
168
+ { label: "Cancel", description: "Skip execution, return to post-phase options" }
169
+ ]
170
+ }]
171
+ });
172
+ // answer.answers.confirm_execute.answers[0] → selected label
170
173
  // Auto mode: Start Execution
171
174
  ```
172
175
 
173
- - "Adjust Filter" → 重新 ASK_USER 输入 confidence 和 priority 阈值,返回 Step 4.1
176
+ - "Adjust Filter" → 重新 request_user_input 输入 confidence 和 priority 阈值,返回 Step 4.1
174
177
  - "Cancel" → 退出 Phase 4
175
178
 
176
179
  ### Step 4.5: Direct Inline Execution
@@ -192,7 +195,7 @@ for each task in sortedTasks:
192
195
  6. Update .task/TASK-{id}.json _execution status
193
196
  7. If failed:
194
197
  - Auto mode: Skip & Continue
195
- - Interactive: ASK_USER → Retry / Skip / Abort
198
+ - Interactive: request_user_input → Retry / Skip / Abort
196
199
  ```
197
200
 
198
201
  **可选 auto-commit**: 每个成功 task 后 `git add {files} && git commit -m "fix: {task.title}"`
@@ -209,17 +212,19 @@ for each task in sortedTasks:
209
212
  // 计算未执行 findings
210
213
  const remainingFindings = allFindings.filter(f => !executedFindingIds.has(f.id))
211
214
 
212
- ASK_USER([{
213
- id: "post_quick_execute",
214
- type: "select",
215
- prompt: `Quick Execute: ${completedCount}/${tasks.length} succeeded. ${remainingFindings.length} findings not executed.`,
216
- options: [
217
- { label: "Retry Failed", description: `Re-execute ${failedCount} failed tasks` },
218
- { label: "Export Remaining", description: `Export ${remainingFindings.length} remaining findings to issues` },
219
- { label: "View Events", description: "Display execution-events.md" },
220
- { label: "Done", description: "End workflow" }
221
- ]
222
- }]);
215
+ request_user_input({
216
+ questions: [{
217
+ header: "Post Execute",
218
+ id: "post_quick_execute",
219
+ question: `Quick Execute: ${completedCount}/${tasks.length} succeeded. ${remainingFindings.length} findings not executed.`,
220
+ options: [
221
+ { label: "Done (Recommended)", description: "End workflow" },
222
+ { label: "Retry Failed", description: `Re-execute ${failedCount} failed tasks` },
223
+ { label: "Export Remaining", description: `Export ${remainingFindings.length} remaining findings to issues` }
224
+ ]
225
+ }]
226
+ });
227
+ // answer.answers.post_quick_execute.answers[0] → selected label
223
228
  // Auto mode: Done
224
229
  ```
225
230
 
@@ -231,11 +236,11 @@ ASK_USER([{
231
236
  |---------|---------|
232
237
  | 0 个可执行 findings | 提示 "No executable findings",建议 Export to Issues |
233
238
  | 只有 1 个 finding | 正常生成 1 个 TASK-001.json,简化确认对话 |
234
- | 超过 10 个 findings | ASK_USER 确认全部执行或选择子集 |
239
+ | 超过 10 个 findings | request_user_input 确认全部执行或选择子集 |
235
240
  | finding 缺少 recommendation | criteria 退化为 "Review and fix {category} in {file}:{line}" |
236
241
  | finding 缺少 confidence | 默认 confidence=0.5,不满足过滤阈值 → 排除 |
237
242
  | discovery 输出不存在 | 报错 "No discoveries found. Run discover first." |
238
- | .task/ 目录已存在 | ASK_USER 追加 (TASK-{max+1}) 或覆盖 |
243
+ | .task/ 目录已存在 | request_user_input 追加 (TASK-{max+1}) 或覆盖 |
239
244
  | 执行中文件被外部修改 | convergence verification 检测到差异,标记为 FAIL |
240
245
  | 所有 tasks 执行失败 | 建议 "Export to Issues → issue-resolve" 完整路径 |
241
246
  | finding 来自不同 perspective 但同文件 | 仍合并为一个 task,convergence.criteria 保留各自标准 |