mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-28 09:23:08 +08:00
- Implement Discuss Subagent for multi-perspective critique with dynamic perspectives. - Create Explore Subagent for shared codebase exploration with centralized caching. - Add tests for CcwToolsMcpCard component to ensure enabled tools are preserved on config save. - Introduce SessionPreviewPanel component for previewing and selecting sessions for Memory V2 extraction. - Develop CommandCreateDialog component for creating/importing commands with import and CLI generate modes.
186 lines
3.9 KiB
Markdown
186 lines
3.9 KiB
Markdown
# Phase 5: File Generation
|
|
|
|
Write the formatted content to the target command file.
|
|
|
|
## Objective
|
|
|
|
Generate the final command file by:
|
|
1. Checking for existing file (warn if present)
|
|
2. Writing formatted content to target path
|
|
3. Confirming successful generation
|
|
|
|
## Input
|
|
|
|
From Phase 4:
|
|
```javascript
|
|
{
|
|
status: 'formatted',
|
|
content: string,
|
|
targetPath: string,
|
|
summary: {
|
|
name: string,
|
|
description: string,
|
|
location: string,
|
|
group: string | null,
|
|
hasArgumentHint: boolean
|
|
}
|
|
}
|
|
```
|
|
|
|
## Execution Steps
|
|
|
|
### Step 1: Pre-Write Check
|
|
|
|
```javascript
|
|
// Check if file already exists
|
|
const fileExists = Bash(`test -f "${targetPath}" && echo "EXISTS" || echo "NOT_FOUND"`);
|
|
|
|
if (fileExists.includes('EXISTS')) {
|
|
console.warn(`
|
|
WARNING: Command file already exists at: ${targetPath}
|
|
The file will be overwritten with new content.
|
|
`);
|
|
}
|
|
```
|
|
|
|
### Step 2: Ensure Directory Exists
|
|
|
|
```javascript
|
|
// Get directory from target path
|
|
const targetDir = path.dirname(targetPath);
|
|
|
|
// Create directory if it doesn't exist
|
|
Bash(`mkdir -p "${targetDir}"`);
|
|
```
|
|
|
|
### Step 3: Write File
|
|
|
|
```javascript
|
|
// Write the formatted content
|
|
Write(targetPath, content);
|
|
```
|
|
|
|
### Step 4: Verify Write
|
|
|
|
```javascript
|
|
// Confirm file was created
|
|
const verifyExists = Bash(`test -f "${targetPath}" && echo "SUCCESS" || echo "FAILED"`);
|
|
|
|
if (!verifyExists.includes('SUCCESS')) {
|
|
throw new Error(`Failed to create command file at ${targetPath}`);
|
|
}
|
|
|
|
// Verify content was written
|
|
const writtenContent = Read(targetPath);
|
|
if (!writtenContent || writtenContent.length === 0) {
|
|
throw new Error(`Command file created but appears to be empty`);
|
|
}
|
|
```
|
|
|
|
### Step 5: Generate Success Report
|
|
|
|
```javascript
|
|
const report = {
|
|
status: 'completed',
|
|
file: {
|
|
path: targetPath,
|
|
name: summary.name,
|
|
location: summary.location,
|
|
group: summary.group,
|
|
size: writtenContent.length,
|
|
created: new Date().toISOString()
|
|
},
|
|
command: {
|
|
name: summary.name,
|
|
description: summary.description,
|
|
hasArgumentHint: summary.hasArgumentHint
|
|
},
|
|
nextSteps: [
|
|
`Edit ${targetPath} to add implementation details`,
|
|
'Add usage examples and execution flow',
|
|
'Test the command with Claude Code'
|
|
]
|
|
};
|
|
```
|
|
|
|
## Output
|
|
|
|
### Success Output
|
|
|
|
```javascript
|
|
{
|
|
status: 'completed',
|
|
file: {
|
|
path: '.claude/commands/issue/create.md',
|
|
name: 'create',
|
|
location: 'project',
|
|
group: 'issue',
|
|
size: 1234,
|
|
created: '2026-02-27T12:00:00.000Z'
|
|
},
|
|
command: {
|
|
name: 'create',
|
|
description: 'Create structured issue from GitHub URL...',
|
|
hasArgumentHint: true
|
|
},
|
|
nextSteps: [
|
|
'Edit .claude/commands/issue/create.md to add implementation details',
|
|
'Add usage examples and execution flow',
|
|
'Test the command with Claude Code'
|
|
]
|
|
}
|
|
```
|
|
|
|
### Console Output
|
|
|
|
```
|
|
Command generated successfully!
|
|
|
|
File: .claude/commands/issue/create.md
|
|
Name: create
|
|
Description: Create structured issue from GitHub URL...
|
|
Location: project
|
|
Group: issue
|
|
|
|
Next Steps:
|
|
1. Edit .claude/commands/issue/create.md to add implementation details
|
|
2. Add usage examples and execution flow
|
|
3. Test the command with Claude Code
|
|
```
|
|
|
|
## Error Handling
|
|
|
|
| Error | Action |
|
|
|-------|--------|
|
|
| Directory creation failed | Throw error with directory path |
|
|
| File write failed | Throw error with target path |
|
|
| Empty file detected | Throw error and attempt cleanup |
|
|
| Permission denied | Throw error with permission hint |
|
|
|
|
## Cleanup on Failure
|
|
|
|
```javascript
|
|
// If any step fails, attempt to clean up partial artifacts
|
|
function cleanup(targetPath) {
|
|
try {
|
|
Bash(`rm -f "${targetPath}"`);
|
|
} catch (e) {
|
|
// Ignore cleanup errors
|
|
}
|
|
}
|
|
```
|
|
|
|
## Completion
|
|
|
|
The command file has been successfully generated. The skill execution is complete.
|
|
|
|
### Usage Example
|
|
|
|
```bash
|
|
# Use the generated command
|
|
/issue:create https://github.com/owner/repo/issues/123
|
|
|
|
# Or with the group prefix
|
|
/issue:create "Login fails with special chars"
|
|
```
|