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.
- package/.claude/commands/workflow/analyze-with-file.md +7 -0
- package/.codex/skills/analyze-with-file/SKILL.md +1181 -1182
- package/.codex/skills/brainstorm/SKILL.md +723 -725
- package/.codex/skills/brainstorm-with-file/SKILL.md +10 -5
- package/.codex/skills/clean/SKILL.md +33 -26
- package/.codex/skills/collaborative-plan-with-file/SKILL.md +830 -831
- package/.codex/skills/csv-wave-pipeline/SKILL.md +906 -906
- package/.codex/skills/issue-discover/SKILL.md +57 -50
- package/.codex/skills/issue-discover/phases/01-issue-new.md +18 -11
- package/.codex/skills/issue-discover/phases/02-discover.md +31 -26
- package/.codex/skills/issue-discover/phases/03-discover-by-prompt.md +13 -11
- package/.codex/skills/issue-discover/phases/04-quick-execute.md +32 -27
- package/.codex/skills/parallel-dev-cycle/SKILL.md +402 -402
- package/.codex/skills/project-documentation-workflow/SKILL.md +13 -3
- package/.codex/skills/roadmap-with-file/SKILL.md +901 -897
- package/.codex/skills/session-sync/SKILL.md +222 -212
- package/.codex/skills/spec-add/SKILL.md +620 -613
- package/.codex/skills/spec-generator/SKILL.md +2 -2
- package/.codex/skills/spec-generator/phases/01-5-requirement-clarification.md +10 -10
- package/.codex/skills/spec-generator/phases/01-discovery.md +11 -18
- package/.codex/skills/spec-generator/phases/02-product-brief.md +5 -5
- package/.codex/skills/spec-generator/phases/03-requirements.md +7 -7
- package/.codex/skills/spec-generator/phases/04-architecture.md +4 -4
- package/.codex/skills/spec-generator/phases/05-epics-stories.md +5 -6
- package/.codex/skills/spec-generator/phases/06-readiness-check.md +10 -17
- package/.codex/skills/spec-generator/phases/07-issue-export.md +326 -329
- package/.codex/skills/spec-setup/SKILL.md +669 -657
- package/.codex/skills/team-arch-opt/SKILL.md +50 -50
- package/.codex/skills/team-arch-opt/agents/completion-handler.md +3 -3
- package/.codex/skills/team-brainstorm/SKILL.md +724 -725
- package/.codex/skills/team-coordinate/SKILL.md +51 -51
- package/.codex/skills/team-coordinate/agents/completion-handler.md +3 -3
- package/.codex/skills/team-coordinate/agents/plan-reviewer.md +4 -4
- package/.codex/skills/team-designer/SKILL.md +691 -691
- package/.codex/skills/team-designer/agents/requirement-clarifier.md +11 -12
- package/.codex/skills/team-executor/SKILL.md +45 -45
- package/.codex/skills/team-frontend/SKILL.md +45 -45
- package/.codex/skills/team-frontend/agents/completion-handler.md +3 -3
- package/.codex/skills/team-frontend/agents/qa-gate-reviewer.md +4 -4
- package/.codex/skills/team-frontend-debug/SKILL.md +50 -50
- package/.codex/skills/team-frontend-debug/agents/completion-handler.md +3 -3
- package/.codex/skills/team-frontend-debug/agents/conditional-skip-gate.md +4 -4
- package/.codex/skills/team-issue/SKILL.md +751 -740
- package/.codex/skills/team-iterdev/SKILL.md +825 -826
- package/.codex/skills/team-lifecycle-v4/SKILL.md +775 -775
- package/.codex/skills/team-lifecycle-v4/agents/quality-gate.md +165 -165
- package/.codex/skills/team-lifecycle-v4/agents/requirement-clarifier.md +163 -163
- package/.codex/skills/team-perf-opt/SKILL.md +50 -50
- package/.codex/skills/team-perf-opt/agents/completion-handler.md +3 -3
- package/.codex/skills/team-planex-v2/SKILL.md +652 -637
- package/.codex/skills/team-quality-assurance/SKILL.md +51 -52
- package/.codex/skills/team-review/SKILL.md +40 -40
- package/.codex/skills/team-roadmap-dev/SKILL.md +51 -51
- package/.codex/skills/team-roadmap-dev/agents/roadmap-discusser.md +8 -8
- package/.codex/skills/team-tech-debt/SKILL.md +50 -50
- package/.codex/skills/team-tech-debt/agents/plan-approver.md +5 -5
- package/.codex/skills/team-testing/SKILL.md +51 -52
- package/.codex/skills/team-uidesign/SKILL.md +40 -40
- package/.codex/skills/team-uidesign/agents/completion-handler.md +177 -177
- package/.codex/skills/team-ultra-analyze/SKILL.md +786 -787
- package/.codex/skills/team-ultra-analyze/agents/discussion-feedback.md +8 -8
- package/.codex/skills/team-ux-improve/SKILL.md +51 -52
- package/.codex/skills/team-ux-improve/agents/ux-designer.md +2 -2
- package/.codex/skills/team-ux-improve/agents/ux-explorer.md +1 -1
- package/.codex/skills/unified-execute-with-file/SKILL.md +797 -796
- package/.codex/skills/workflow-execute/SKILL.md +1117 -1118
- package/.codex/skills/workflow-lite-planex/SKILL.md +1144 -1141
- package/.codex/skills/workflow-plan/SKILL.md +631 -636
- package/.codex/skills/workflow-tdd-plan/SKILL.md +753 -759
- package/.codex/skills/workflow-test-fix-cycle/SKILL.md +402 -392
- package/README.md +25 -0
- package/ccw/dist/commands/install.d.ts.map +1 -1
- package/ccw/dist/commands/install.js +12 -0
- package/ccw/dist/commands/install.js.map +1 -1
- 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,
|
|
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
|
-
├─
|
|
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**:
|
|
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 →
|
|
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 (
|
|
171
|
+
### Action Selection (request_user_input)
|
|
172
172
|
|
|
173
173
|
```javascript
|
|
174
174
|
// When action cannot be auto-detected
|
|
175
|
-
const answer =
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
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] ←
|
|
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
|
|
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
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
}]
|
|
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
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
}]
|
|
345
|
-
//
|
|
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 =
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
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 │
|
|
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
|
|
90
|
-
const response =
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
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
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
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
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
}]
|
|
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 →
|
|
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
|
-
|
|
157
|
+
request_user_input:
|
|
158
158
|
|
|
159
159
|
```javascript
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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" → 重新
|
|
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:
|
|
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
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
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 |
|
|
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/ 目录已存在 |
|
|
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 保留各自标准 |
|