mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-12 02:37:45 +08:00
Refactor API calls to use csrfFetch for enhanced security across multiple views, including loop-monitor, mcp-manager, memory, prompt-history, rules-manager, session-detail, and skills-manager. Additionally, add Phase 1 and Phase 2 documentation for session initialization and orchestration loop in the ccw-loop-b skill.
This commit is contained in:
168
.codex/skills/ccw-loop-b/workers/worker-complete.md
Normal file
168
.codex/skills/ccw-loop-b/workers/worker-complete.md
Normal file
@@ -0,0 +1,168 @@
|
||||
# Worker: COMPLETE
|
||||
|
||||
Session finalization worker. Aggregate results, generate summary, cleanup.
|
||||
|
||||
## Purpose
|
||||
|
||||
- Aggregate all worker results into comprehensive summary
|
||||
- Verify completeness of tasks
|
||||
- Generate commit message suggestion
|
||||
- Offer expansion options
|
||||
- Mark loop as completed
|
||||
|
||||
## Preconditions
|
||||
|
||||
- `state.status === 'running'`
|
||||
|
||||
## Execution
|
||||
|
||||
### Step 1: Read All Worker Outputs
|
||||
|
||||
```javascript
|
||||
const workerOutputs = {}
|
||||
for (const action of ['init', 'develop', 'debug', 'validate']) {
|
||||
const outputPath = `${workersDir}/${action}.output.json`
|
||||
if (fs.existsSync(outputPath)) {
|
||||
workerOutputs[action] = JSON.parse(Read(outputPath))
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Step 2: Aggregate Statistics
|
||||
|
||||
```javascript
|
||||
const stats = {
|
||||
duration: Date.now() - new Date(state.created_at).getTime(),
|
||||
iterations: state.current_iteration,
|
||||
tasks_completed: state.skill_state.completed_tasks.length,
|
||||
tasks_total: state.skill_state.completed_tasks.length + state.skill_state.pending_tasks.length,
|
||||
files_changed: collectAllFilesChanged(workerOutputs),
|
||||
test_passed: workerOutputs.validate?.summary?.passed || 0,
|
||||
test_total: workerOutputs.validate?.summary?.total || 0,
|
||||
coverage: workerOutputs.validate?.coverage || 'N/A'
|
||||
}
|
||||
```
|
||||
|
||||
### Step 3: Generate Summary
|
||||
|
||||
```javascript
|
||||
Write(`${progressDir}/summary.md`, `# CCW Loop-B Session Summary
|
||||
|
||||
**Loop ID**: ${loopId}
|
||||
**Task**: ${state.description}
|
||||
**Mode**: ${state.mode}
|
||||
**Started**: ${state.created_at}
|
||||
**Completed**: ${getUtc8ISOString()}
|
||||
**Duration**: ${formatDuration(stats.duration)}
|
||||
|
||||
---
|
||||
|
||||
## Results
|
||||
|
||||
| Metric | Value |
|
||||
|--------|-------|
|
||||
| Iterations | ${stats.iterations} |
|
||||
| Tasks Completed | ${stats.tasks_completed}/${stats.tasks_total} |
|
||||
| Tests | ${stats.test_passed}/${stats.test_total} |
|
||||
| Coverage | ${stats.coverage} |
|
||||
| Files Changed | ${stats.files_changed.length} |
|
||||
|
||||
## Files Changed
|
||||
|
||||
${stats.files_changed.map(f => `- \`${f}\``).join('\n') || '- None'}
|
||||
|
||||
## Worker Summary
|
||||
|
||||
${Object.entries(workerOutputs).map(([action, output]) => `
|
||||
### ${action}
|
||||
- Status: ${output.status}
|
||||
- Summary: ${output.summary}
|
||||
`).join('\n')}
|
||||
|
||||
## Recommendations
|
||||
|
||||
${generateRecommendations(stats, state)}
|
||||
|
||||
---
|
||||
|
||||
*Generated by CCW Loop-B at ${getUtc8ISOString()}*
|
||||
`)
|
||||
```
|
||||
|
||||
### Step 4: Generate Commit Suggestion
|
||||
|
||||
```javascript
|
||||
const commitSuggestion = {
|
||||
message: generateCommitMessage(state.description, stats),
|
||||
files: stats.files_changed,
|
||||
ready_for_pr: stats.test_passed > 0 && stats.tasks_completed === stats.tasks_total
|
||||
}
|
||||
```
|
||||
|
||||
### Step 5: Update State
|
||||
|
||||
```javascript
|
||||
state.status = 'completed'
|
||||
state.completed_at = getUtc8ISOString()
|
||||
state.skill_state.phase = 'complete'
|
||||
state.skill_state.workers_completed.push('complete')
|
||||
saveState(loopId, state)
|
||||
```
|
||||
|
||||
## Output Format
|
||||
|
||||
```
|
||||
WORKER_RESULT:
|
||||
- action: complete
|
||||
- status: success
|
||||
- summary: Loop completed. {tasks_completed} tasks, {test_passed} tests pass
|
||||
- files_changed: []
|
||||
- next_suggestion: null
|
||||
- loop_back_to: null
|
||||
|
||||
DETAILED_OUTPUT:
|
||||
SESSION_SUMMARY:
|
||||
achievements: [...]
|
||||
files_changed: [...]
|
||||
test_results: { passed: N, total: N }
|
||||
|
||||
COMMIT_SUGGESTION:
|
||||
message: "feat: ..."
|
||||
files: [...]
|
||||
ready_for_pr: true
|
||||
|
||||
EXPANSION_OPTIONS:
|
||||
1. [test] Add more test cases
|
||||
2. [enhance] Feature enhancements
|
||||
3. [refactor] Code refactoring
|
||||
4. [doc] Documentation updates
|
||||
```
|
||||
|
||||
## Helper Functions
|
||||
|
||||
```javascript
|
||||
function formatDuration(ms) {
|
||||
const seconds = Math.floor(ms / 1000)
|
||||
const minutes = Math.floor(seconds / 60)
|
||||
const hours = Math.floor(minutes / 60)
|
||||
if (hours > 0) return `${hours}h ${minutes % 60}m`
|
||||
if (minutes > 0) return `${minutes}m ${seconds % 60}s`
|
||||
return `${seconds}s`
|
||||
}
|
||||
|
||||
function generateRecommendations(stats, state) {
|
||||
const recs = []
|
||||
if (stats.tasks_completed < stats.tasks_total) recs.push('- Complete remaining tasks')
|
||||
if (stats.test_passed < stats.test_total) recs.push('- Fix failing tests')
|
||||
if (stats.coverage !== 'N/A' && parseFloat(stats.coverage) < 80) recs.push(`- Improve coverage (${stats.coverage}%)`)
|
||||
if (recs.length === 0) recs.push('- Consider code review', '- Update documentation')
|
||||
return recs.join('\n')
|
||||
}
|
||||
```
|
||||
|
||||
## Error Handling
|
||||
|
||||
| Error | Recovery |
|
||||
|-------|----------|
|
||||
| Missing worker outputs | Generate partial summary |
|
||||
| State write failed | Retry, then report |
|
||||
Reference in New Issue
Block a user