devflow-kit 0.8.0 → 0.9.0
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/CHANGELOG.md +33 -0
- package/README.md +3 -1
- package/dist/cli.js +1 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +160 -61
- package/dist/commands/init.js.map +1 -1
- package/package.json +1 -1
- package/src/claude/agents/devflow/get-issue.md +286 -0
- package/src/claude/agents/devflow/pr-comments.md +1 -1
- package/src/claude/agents/devflow/project-state.md +1 -1
- package/src/claude/agents/devflow/pull-request.md +76 -6
- package/src/claude/agents/devflow/tech-debt.md +1 -1
- package/src/claude/commands/devflow/get-issue.md +16 -0
- package/src/claude/commands/devflow/pull-request.md +11 -260
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,37 @@ All notable changes to DevFlow will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.9.0] - 2025-12-04
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- **`/get-issue` command** - Fetch GitHub issue details and create working branch
|
|
12
|
+
- Fetch issue by number (`/get-issue 42`) or search term (`/get-issue fix login`)
|
|
13
|
+
- Display comprehensive issue details (title, body, labels, assignees, comments)
|
|
14
|
+
- Auto-generate branch names: `{type}/{number}-{slug}`
|
|
15
|
+
- Branch type derived from labels (feature, fix, docs, refactor, chore)
|
|
16
|
+
- Pre-flight checks for gh authentication and repository validation
|
|
17
|
+
- **`get-issue` sub-agent** - Specialized agent for GitHub issue workflow
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
- Optimized sub-agent model selection - 5 sub-agents switched to haiku model (get-issue, pull-request, project-state, tech-debt, pr-comments)
|
|
21
|
+
- Minimized command files - `/get-issue` (16 lines) and `/pull-request` (20 lines) delegate to sub-agents
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## [0.8.1] - 2025-12-02
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
- **`--verbose` flag for `devflow init`** - Clean, command-focused output by default
|
|
29
|
+
- Default output shows only version, available commands, and docs link
|
|
30
|
+
- Use `--verbose` for detailed installation progress, paths, and skills list
|
|
31
|
+
- Improves first-run experience by reducing noise
|
|
32
|
+
|
|
33
|
+
### Changed
|
|
34
|
+
- Refactored init command output rendering into separate functions
|
|
35
|
+
- Extracted command and skill lists into maintainable constants
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
8
39
|
## [0.8.0] - 2025-11-21
|
|
9
40
|
|
|
10
41
|
### Added
|
|
@@ -552,6 +583,8 @@ devflow init
|
|
|
552
583
|
|
|
553
584
|
---
|
|
554
585
|
|
|
586
|
+
[0.9.0]: https://github.com/dean0x/devflow/releases/tag/v0.9.0
|
|
587
|
+
[0.8.1]: https://github.com/dean0x/devflow/releases/tag/v0.8.1
|
|
555
588
|
[0.8.0]: https://github.com/dean0x/devflow/releases/tag/v0.8.0
|
|
556
589
|
[0.7.0]: https://github.com/dean0x/devflow/releases/tag/v0.7.0
|
|
557
590
|
[0.6.1]: https://github.com/dean0x/devflow/releases/tag/v0.6.1
|
package/README.md
CHANGED
|
@@ -73,6 +73,7 @@ This gives you the best of both worlds: automatic assistance when needed, manual
|
|
|
73
73
|
| `/design` | Create detailed implementation plan with integration points | After brainstorming, ready for detailed design |
|
|
74
74
|
| `/plan` | Triage issues - implement now, defer to GitHub issue, or skip | After code-review or discussion, deciding what to tackle |
|
|
75
75
|
| `/breakdown` | Quickly break down discussion into actionable tasks | After planning discussion, quick task capture |
|
|
76
|
+
| `/get-issue` | Fetch GitHub issue details and create working branch | Starting work on a GitHub issue |
|
|
76
77
|
| `/implement` | Streamlined todo implementation, only stopping for design decisions | After planning, ready to implement todos |
|
|
77
78
|
| `/debug` | Systematic debugging workflow with hypothesis testing | When errors occur, tests fail, or investigating issues |
|
|
78
79
|
| `/code-review` | Comprehensive code review using specialized sub-agents | Before committing or creating PR |
|
|
@@ -99,6 +100,7 @@ This gives you the best of both worlds: automatic assistance when needed, manual
|
|
|
99
100
|
| `design` | Implementation Planning | Detailed implementation design with integration points and edge cases |
|
|
100
101
|
| `catch-up` | Context Restoration | Project status and context restoration with validation |
|
|
101
102
|
| `commit` | Git Operations | Intelligent commit creation with safety checks |
|
|
103
|
+
| `get-issue` | GitHub Issues | Fetch issue details and create working branches |
|
|
102
104
|
| `pull-request` | PR Creation | Analyze commits/changes and generate comprehensive PR descriptions |
|
|
103
105
|
| `release` | Release Automation | Project-agnostic release workflow with version management |
|
|
104
106
|
| `debug` | Debugging | Systematic debugging with hypothesis testing and issue tracking |
|
|
@@ -259,7 +261,7 @@ The `.docs/` structure provides a searchable history of decisions, designs, and
|
|
|
259
261
|
|
|
260
262
|
| Command | Purpose | Options |
|
|
261
263
|
|---------|---------|---------|
|
|
262
|
-
| `npx devflow-kit init` | Initialize DevFlow for Claude Code | `--scope <user\|local>` - Installation scope (user: user-wide, local: project-only)<br>`--skip-docs` - Skip creating `.docs/` structure |
|
|
264
|
+
| `npx devflow-kit init` | Initialize DevFlow for Claude Code | `--scope <user\|local>` - Installation scope (user: user-wide, local: project-only)<br>`--verbose` - Show detailed installation output<br>`--skip-docs` - Skip creating `.docs/` structure |
|
|
263
265
|
| `npx devflow-kit uninstall` | Remove DevFlow from Claude Code | `--scope <user\|local>` - Uninstall from specific scope only (default: auto-detect all)<br>`--keep-docs` - Keep `.docs/` directory |
|
|
264
266
|
|
|
265
267
|
**What `npx devflow-kit init` does:**
|
package/dist/cli.js
CHANGED
|
@@ -15,7 +15,7 @@ program
|
|
|
15
15
|
.description('Agentic Development Toolkit for Claude Code\n\nEnhance your AI-assisted development with intelligent commands and workflows.')
|
|
16
16
|
.version(packageJson.version, '-v, --version', 'Display version number')
|
|
17
17
|
.helpOption('-h, --help', 'Display help information')
|
|
18
|
-
.addHelpText('after', '\nExamples:\n $ devflow init
|
|
18
|
+
.addHelpText('after', '\nExamples:\n $ devflow init Install DevFlow for Claude Code\n $ devflow init --verbose Install with detailed output\n $ devflow init --skip-docs Install without creating .docs/ structure\n $ devflow uninstall Remove DevFlow from Claude Code\n $ devflow --version Show version\n $ devflow --help Show help\n\nDocumentation:\n https://github.com/dean0x/devflow#readme');
|
|
19
19
|
// Register commands
|
|
20
20
|
program.addCommand(initCommand);
|
|
21
21
|
program.addCommand(uninstallCommand);
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,iCAAiC;AACjC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAC7D,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,8HAA8H,CAAC;KAC3I,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,wBAAwB,CAAC;KACvE,UAAU,CAAC,YAAY,EAAE,0BAA0B,CAAC;KACpD,WAAW,CAAC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,iCAAiC;AACjC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAC7D,CAAC;AAEF,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,SAAS,CAAC;KACf,WAAW,CAAC,8HAA8H,CAAC;KAC3I,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,wBAAwB,CAAC;KACvE,UAAU,CAAC,YAAY,EAAE,0BAA0B,CAAC;KACpD,WAAW,CAAC,OAAO,EAAE,maAAma,CAAC,CAAC;AAE7b,oBAAoB;AACpB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;AAErC,oBAAoB;AACpB,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE;IAClB,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAC;AAEhB,4BAA4B;AAC5B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAClC,OAAO,CAAC,UAAU,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0KpC,eAAO,MAAM,WAAW,SAyiBpB,CAAC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -28,10 +28,101 @@ async function promptUser(question) {
|
|
|
28
28
|
});
|
|
29
29
|
});
|
|
30
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* DevFlow commands with user-friendly descriptions.
|
|
33
|
+
* Used for displaying available commands in init output.
|
|
34
|
+
*/
|
|
35
|
+
const DEVFLOW_COMMANDS = [
|
|
36
|
+
{ name: '/catch-up', description: 'Get up to speed on project state' },
|
|
37
|
+
{ name: '/brainstorm', description: 'Explore design decisions' },
|
|
38
|
+
{ name: '/design', description: 'Create implementation plan' },
|
|
39
|
+
{ name: '/plan', description: 'Triage issues from discussion' },
|
|
40
|
+
{ name: '/breakdown', description: 'Break down tasks quickly' },
|
|
41
|
+
{ name: '/get-issue', description: 'Fetch issue and create branch' },
|
|
42
|
+
{ name: '/implement', description: 'Interactive implementation' },
|
|
43
|
+
{ name: '/code-review', description: 'Comprehensive code review' },
|
|
44
|
+
{ name: '/commit', description: 'Smart atomic commits' },
|
|
45
|
+
{ name: '/pull-request', description: 'Create PR with description' },
|
|
46
|
+
{ name: '/release', description: 'Automated releases' },
|
|
47
|
+
{ name: '/devlog', description: 'Document session progress' },
|
|
48
|
+
{ name: '/debug', description: 'Systematic debugging' },
|
|
49
|
+
{ name: '/resolve-comments', description: 'Address PR feedback' },
|
|
50
|
+
];
|
|
51
|
+
/**
|
|
52
|
+
* DevFlow skills with descriptions.
|
|
53
|
+
* Displayed only in verbose mode to show auto-activating capabilities.
|
|
54
|
+
*/
|
|
55
|
+
const DEVFLOW_SKILLS = [
|
|
56
|
+
{ name: 'pattern-check', description: 'Architectural pattern validation' },
|
|
57
|
+
{ name: 'test-design', description: 'Test quality enforcement' },
|
|
58
|
+
{ name: 'code-smell', description: 'Anti-pattern detection' },
|
|
59
|
+
{ name: 'research', description: 'Pre-implementation planning (auto)' },
|
|
60
|
+
{ name: 'debug', description: 'Systematic debugging (auto)' },
|
|
61
|
+
{ name: 'input-validation', description: 'Boundary validation' },
|
|
62
|
+
{ name: 'error-handling', description: 'Result type consistency' },
|
|
63
|
+
];
|
|
64
|
+
/**
|
|
65
|
+
* Render clean, minimal output for default (non-verbose) mode.
|
|
66
|
+
* Shows only essential information: version, available commands, and docs link.
|
|
67
|
+
*
|
|
68
|
+
* @param version - The DevFlow version string to display
|
|
69
|
+
*/
|
|
70
|
+
function renderCleanOutput(version) {
|
|
71
|
+
console.log(`\n✓ DevFlow v${version} installed\n`);
|
|
72
|
+
console.log('Commands available:');
|
|
73
|
+
// Calculate max command name length for alignment
|
|
74
|
+
const maxLen = Math.max(...DEVFLOW_COMMANDS.map(c => c.name.length));
|
|
75
|
+
for (const cmd of DEVFLOW_COMMANDS) {
|
|
76
|
+
const padding = ' '.repeat(maxLen - cmd.name.length + 2);
|
|
77
|
+
console.log(` ${cmd.name}${padding}${cmd.description}`);
|
|
78
|
+
}
|
|
79
|
+
console.log('\nRun any command in Claude Code to get started.');
|
|
80
|
+
console.log('\nDocs: https://github.com/dean0x/devflow');
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Render detailed output for verbose mode.
|
|
84
|
+
* Shows full installation details including paths, merge instructions, and skills.
|
|
85
|
+
*
|
|
86
|
+
* @param version - The DevFlow version string to display
|
|
87
|
+
* @param scope - Installation scope ('user' for user-wide, 'local' for project-only)
|
|
88
|
+
* @param claudeDir - Path to the Claude Code directory
|
|
89
|
+
* @param devflowDir - Path to the DevFlow directory
|
|
90
|
+
* @param settingsExists - Whether existing settings.json was preserved
|
|
91
|
+
* @param claudeMdExists - Whether existing CLAUDE.md was preserved
|
|
92
|
+
*/
|
|
93
|
+
function renderVerboseOutput(version, scope, claudeDir, devflowDir, settingsExists, claudeMdExists) {
|
|
94
|
+
console.log(`\n✅ DevFlow v${version} installed!\n`);
|
|
95
|
+
console.log(`📍 Installation scope: ${scope}`);
|
|
96
|
+
console.log(` Claude dir: ${claudeDir}`);
|
|
97
|
+
console.log(` DevFlow dir: ${devflowDir}\n`);
|
|
98
|
+
// Show manual merge instructions if needed
|
|
99
|
+
if (settingsExists || claudeMdExists) {
|
|
100
|
+
console.log('📝 Manual merge recommended:\n');
|
|
101
|
+
if (settingsExists) {
|
|
102
|
+
console.log(' Settings: Review settings.devflow.json and merge desired config into settings.json');
|
|
103
|
+
console.log(' Key setting: statusLine configuration for DevFlow statusline\n');
|
|
104
|
+
}
|
|
105
|
+
if (claudeMdExists) {
|
|
106
|
+
console.log(' Instructions: Review CLAUDE.devflow.md and adopt desired practices');
|
|
107
|
+
console.log(" This contains DevFlow's recommended development patterns\n");
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
console.log('Available commands:');
|
|
111
|
+
for (const cmd of DEVFLOW_COMMANDS) {
|
|
112
|
+
console.log(` ${cmd.name.padEnd(18)}${cmd.description}`);
|
|
113
|
+
}
|
|
114
|
+
console.log('\nInstalled skills (auto-activate):');
|
|
115
|
+
for (const skill of DEVFLOW_SKILLS) {
|
|
116
|
+
console.log(` ${skill.name.padEnd(18)}${skill.description}`);
|
|
117
|
+
}
|
|
118
|
+
console.log('\nNote: debug exists as both command (manual) and skill (auto)');
|
|
119
|
+
console.log('Docs: https://github.com/dean0x/devflow');
|
|
120
|
+
}
|
|
31
121
|
export const initCommand = new Command('init')
|
|
32
122
|
.description('Initialize DevFlow for Claude Code')
|
|
33
123
|
.option('--skip-docs', 'Skip creating .docs/ structure')
|
|
34
124
|
.option('--scope <type>', 'Installation scope: user (user-wide) or local (project-only)', /^(user|local)$/i)
|
|
125
|
+
.option('--verbose', 'Show detailed installation output')
|
|
35
126
|
.action(async (options) => {
|
|
36
127
|
// Get package version
|
|
37
128
|
const packageJsonPath = path.resolve(__dirname, '../../package.json');
|
|
@@ -43,33 +134,49 @@ export const initCommand = new Command('init')
|
|
|
43
134
|
catch {
|
|
44
135
|
version = 'unknown';
|
|
45
136
|
}
|
|
46
|
-
|
|
137
|
+
const verbose = options.verbose ?? false;
|
|
138
|
+
if (verbose) {
|
|
139
|
+
console.log(`🚀 DevFlow v${version}\n`);
|
|
140
|
+
}
|
|
47
141
|
// Determine installation scope
|
|
48
142
|
let scope = 'user'; // Default to user for backwards compatibility
|
|
49
143
|
if (options.scope) {
|
|
50
|
-
|
|
144
|
+
const normalizedScope = options.scope.toLowerCase();
|
|
145
|
+
// Runtime validation (Commander regex already validates, but be defensive)
|
|
146
|
+
if (normalizedScope !== 'user' && normalizedScope !== 'local') {
|
|
147
|
+
console.error('❌ Invalid scope. Use "user" or "local"\n');
|
|
148
|
+
process.exit(1);
|
|
149
|
+
}
|
|
150
|
+
scope = normalizedScope;
|
|
51
151
|
}
|
|
52
152
|
else {
|
|
53
153
|
// Check if running in interactive terminal (TTY)
|
|
54
154
|
if (!process.stdin.isTTY) {
|
|
55
155
|
// Non-interactive environment (CI/CD, scripts) - use default
|
|
56
|
-
|
|
57
|
-
|
|
156
|
+
if (verbose) {
|
|
157
|
+
console.log('📦 Non-interactive environment detected, using default scope: user');
|
|
158
|
+
console.log(' To specify scope in CI/CD, use: devflow init --scope <user|local>\n');
|
|
159
|
+
}
|
|
58
160
|
scope = 'user';
|
|
59
161
|
}
|
|
60
162
|
else {
|
|
61
163
|
// Interactive prompt for scope
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
164
|
+
if (verbose) {
|
|
165
|
+
console.log('📦 Installation Scope:\n');
|
|
166
|
+
console.log(' user - Install for all projects (user-wide)');
|
|
167
|
+
console.log(' └─ ~/.claude/ and ~/.devflow/');
|
|
168
|
+
console.log(' local - Install for current project only');
|
|
169
|
+
console.log(' └─ <git-root>/.claude/ and <git-root>/.devflow/\n');
|
|
170
|
+
}
|
|
67
171
|
const rl = readline.createInterface({
|
|
68
172
|
input: process.stdin,
|
|
69
173
|
output: process.stdout
|
|
70
174
|
});
|
|
175
|
+
const prompt = verbose
|
|
176
|
+
? 'Choose scope (user/local) [user]: '
|
|
177
|
+
: 'Install scope - user (all projects) or local (this project only) [user]: ';
|
|
71
178
|
const answer = await new Promise((resolve) => {
|
|
72
|
-
rl.question(
|
|
179
|
+
rl.question(prompt, (input) => {
|
|
73
180
|
rl.close();
|
|
74
181
|
resolve(input.trim().toLowerCase() || 'user');
|
|
75
182
|
});
|
|
@@ -84,7 +191,9 @@ export const initCommand = new Command('init')
|
|
|
84
191
|
console.error('❌ Invalid scope. Use "user" or "local"\n');
|
|
85
192
|
process.exit(1);
|
|
86
193
|
}
|
|
87
|
-
|
|
194
|
+
if (verbose) {
|
|
195
|
+
console.log();
|
|
196
|
+
}
|
|
88
197
|
}
|
|
89
198
|
}
|
|
90
199
|
// Get installation paths with proper validation
|
|
@@ -97,9 +206,11 @@ export const initCommand = new Command('init')
|
|
|
97
206
|
devflowDir = paths.devflowDir;
|
|
98
207
|
// Cache git root for later use (already computed in getInstallationPaths for local scope)
|
|
99
208
|
gitRoot = await getGitRoot();
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
209
|
+
if (verbose) {
|
|
210
|
+
console.log(`📍 Installation scope: ${scope}`);
|
|
211
|
+
console.log(` Claude dir: ${claudeDir}`);
|
|
212
|
+
console.log(` DevFlow dir: ${devflowDir}\n`);
|
|
213
|
+
}
|
|
103
214
|
}
|
|
104
215
|
catch (error) {
|
|
105
216
|
console.error('❌ Path configuration error:', error instanceof Error ? error.message : error);
|
|
@@ -116,13 +227,17 @@ export const initCommand = new Command('init')
|
|
|
116
227
|
console.error(' Or set CLAUDE_CODE_DIR if installed elsewhere\n');
|
|
117
228
|
process.exit(1);
|
|
118
229
|
}
|
|
119
|
-
|
|
230
|
+
if (verbose) {
|
|
231
|
+
console.log('✓ Claude Code detected');
|
|
232
|
+
}
|
|
120
233
|
}
|
|
121
234
|
else {
|
|
122
235
|
// Local scope - create .claude directory if it doesn't exist
|
|
123
236
|
try {
|
|
124
237
|
await fs.mkdir(claudeDir, { recursive: true });
|
|
125
|
-
|
|
238
|
+
if (verbose) {
|
|
239
|
+
console.log('✓ Local .claude directory ready');
|
|
240
|
+
}
|
|
126
241
|
}
|
|
127
242
|
catch (error) {
|
|
128
243
|
console.error(`❌ Failed to create ${claudeDir}:`, error);
|
|
@@ -208,7 +323,9 @@ export const initCommand = new Command('init')
|
|
|
208
323
|
for (const script of scripts) {
|
|
209
324
|
await fs.chmod(path.join(scriptsDir, script), 0o755);
|
|
210
325
|
}
|
|
211
|
-
|
|
326
|
+
if (verbose) {
|
|
327
|
+
console.log('✓ Installing components... (commands, agents, skills, scripts)');
|
|
328
|
+
}
|
|
212
329
|
// Install settings.json - never override existing files (atomic operation)
|
|
213
330
|
const settingsPath = path.join(claudeDir, 'settings.json');
|
|
214
331
|
const devflowSettingsPath = path.join(claudeDir, 'settings.devflow.json');
|
|
@@ -220,14 +337,18 @@ export const initCommand = new Command('init')
|
|
|
220
337
|
try {
|
|
221
338
|
// Atomic exclusive create - fails if file already exists
|
|
222
339
|
await fs.writeFile(settingsPath, settingsContent, { encoding: 'utf-8', flag: 'wx' });
|
|
223
|
-
|
|
340
|
+
if (verbose) {
|
|
341
|
+
console.log('✓ Settings configured');
|
|
342
|
+
}
|
|
224
343
|
}
|
|
225
344
|
catch (error) {
|
|
226
345
|
if (isNodeSystemError(error) && error.code === 'EEXIST') {
|
|
227
346
|
// Existing settings.json found - install as settings.devflow.json
|
|
228
347
|
settingsExists = true;
|
|
229
348
|
await fs.writeFile(devflowSettingsPath, settingsContent, 'utf-8');
|
|
230
|
-
|
|
349
|
+
if (verbose) {
|
|
350
|
+
console.log('⚠️ Existing settings.json preserved → DevFlow config: settings.devflow.json');
|
|
351
|
+
}
|
|
231
352
|
}
|
|
232
353
|
else {
|
|
233
354
|
throw error;
|
|
@@ -242,14 +363,18 @@ export const initCommand = new Command('init')
|
|
|
242
363
|
// Atomic exclusive create - fails if file already exists
|
|
243
364
|
const content = await fs.readFile(sourceClaudeMdPath, 'utf-8');
|
|
244
365
|
await fs.writeFile(claudeMdPath, content, { encoding: 'utf-8', flag: 'wx' });
|
|
245
|
-
|
|
366
|
+
if (verbose) {
|
|
367
|
+
console.log('✓ CLAUDE.md configured');
|
|
368
|
+
}
|
|
246
369
|
}
|
|
247
370
|
catch (error) {
|
|
248
371
|
if (isNodeSystemError(error) && error.code === 'EEXIST') {
|
|
249
372
|
// Existing CLAUDE.md found - install as CLAUDE.devflow.md
|
|
250
373
|
claudeMdExists = true;
|
|
251
374
|
await fs.copyFile(sourceClaudeMdPath, devflowClaudeMdPath);
|
|
252
|
-
|
|
375
|
+
if (verbose) {
|
|
376
|
+
console.log('⚠️ Existing CLAUDE.md preserved → DevFlow guide: CLAUDE.devflow.md');
|
|
377
|
+
}
|
|
253
378
|
}
|
|
254
379
|
else {
|
|
255
380
|
throw error;
|
|
@@ -460,7 +585,7 @@ Pipfile.lock
|
|
|
460
585
|
catch (error) {
|
|
461
586
|
// Not a git repository or other error - skip .claudeignore creation
|
|
462
587
|
}
|
|
463
|
-
if (claudeignoreCreated) {
|
|
588
|
+
if (claudeignoreCreated && verbose) {
|
|
464
589
|
console.log('✓ .claudeignore created');
|
|
465
590
|
}
|
|
466
591
|
// For local scope, update .gitignore to exclude .claude/ and .devflow/
|
|
@@ -487,11 +612,15 @@ Pipfile.lock
|
|
|
487
612
|
? `${gitignoreContent.trimEnd()}\n\n# DevFlow local scope installation\n${linesToAdd.join('\n')}\n`
|
|
488
613
|
: `# DevFlow local scope installation\n${linesToAdd.join('\n')}\n`;
|
|
489
614
|
await fs.writeFile(gitignorePath, newContent, 'utf-8');
|
|
490
|
-
|
|
615
|
+
if (verbose) {
|
|
616
|
+
console.log('✓ .gitignore updated (excluded .claude/ and .devflow/)');
|
|
617
|
+
}
|
|
491
618
|
}
|
|
492
619
|
}
|
|
493
620
|
catch (error) {
|
|
494
|
-
|
|
621
|
+
if (verbose) {
|
|
622
|
+
console.warn('⚠️ Could not update .gitignore:', error instanceof Error ? error.message : error);
|
|
623
|
+
}
|
|
495
624
|
}
|
|
496
625
|
}
|
|
497
626
|
// Offer to install project documentation structure
|
|
@@ -509,46 +638,16 @@ Pipfile.lock
|
|
|
509
638
|
// .docs/ structure may already exist
|
|
510
639
|
}
|
|
511
640
|
}
|
|
512
|
-
if (docsCreated) {
|
|
641
|
+
if (docsCreated && verbose) {
|
|
513
642
|
console.log('✓ .docs/ structure ready');
|
|
514
643
|
}
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
console.log(' Key setting: statusLine configuration for DevFlow statusline\n');
|
|
522
|
-
}
|
|
523
|
-
if (claudeMdExists) {
|
|
524
|
-
console.log(' Instructions: Review CLAUDE.devflow.md and adopt desired practices');
|
|
525
|
-
console.log(' This contains DevFlow\'s recommended development patterns\n');
|
|
526
|
-
}
|
|
644
|
+
// Render output based on verbose flag
|
|
645
|
+
if (verbose) {
|
|
646
|
+
renderVerboseOutput(version, scope, claudeDir, devflowDir, settingsExists, claudeMdExists);
|
|
647
|
+
}
|
|
648
|
+
else {
|
|
649
|
+
renderCleanOutput(version);
|
|
527
650
|
}
|
|
528
|
-
console.log('Available commands:');
|
|
529
|
-
console.log(' /catch-up Session context and status');
|
|
530
|
-
console.log(' /brainstorm Explore design decisions and approaches');
|
|
531
|
-
console.log(' /design Create detailed implementation plan');
|
|
532
|
-
console.log(' /debug Systematic debugging (manual)');
|
|
533
|
-
console.log(' /plan Triage issues - now, defer to GH issue, or skip');
|
|
534
|
-
console.log(' /breakdown Quickly break down discussion into tasks');
|
|
535
|
-
console.log(' /implement Interactive implementation orchestrator');
|
|
536
|
-
console.log(' /code-review Comprehensive code review');
|
|
537
|
-
console.log(' /commit Intelligent atomic commits');
|
|
538
|
-
console.log(' /pull-request Create PR with smart description');
|
|
539
|
-
console.log(' /resolve-comments Address PR review feedback');
|
|
540
|
-
console.log(' /devlog Session documentation');
|
|
541
|
-
console.log(' /release Release automation');
|
|
542
|
-
console.log('\nInstalled skills (auto-activate):');
|
|
543
|
-
console.log(' pattern-check Architectural pattern validation');
|
|
544
|
-
console.log(' test-design Test quality enforcement');
|
|
545
|
-
console.log(' code-smell Anti-pattern detection');
|
|
546
|
-
console.log(' research Pre-implementation planning (auto)');
|
|
547
|
-
console.log(' debug Systematic debugging (auto)');
|
|
548
|
-
console.log(' input-validation Boundary validation');
|
|
549
|
-
console.log(' error-handling Result type consistency');
|
|
550
|
-
console.log('\nNote: debug exists as both command (manual) and skill (auto)');
|
|
551
|
-
console.log('Docs: npm home devflow-kit');
|
|
552
651
|
}
|
|
553
652
|
catch (error) {
|
|
554
653
|
console.error('❌ Installation failed:', error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: get-issue
|
|
3
|
+
description: Fetch GitHub issue details and create a working branch for implementation
|
|
4
|
+
tools: Bash, Read, Grep, Glob
|
|
5
|
+
model: haiku
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
You are a GitHub issue specialist focused on fetching issue details and preparing the development environment for implementation. Your task is to retrieve comprehensive issue information and create an appropriately named branch.
|
|
9
|
+
|
|
10
|
+
**CRITICAL PHILOSOPHY**: Developers should start working on issues with full context. Fetch all relevant details, understand the scope, and create a clean branch name that reflects the work.
|
|
11
|
+
|
|
12
|
+
## Your Task
|
|
13
|
+
|
|
14
|
+
Fetch GitHub issue details and create a working branch. You will receive:
|
|
15
|
+
- `ISSUE_INPUT`: Either an issue number (e.g., "123") or a search term/description (e.g., "fix login bug")
|
|
16
|
+
|
|
17
|
+
### Step 1: Determine Input Type and Fetch Issue
|
|
18
|
+
|
|
19
|
+
Determine if input is a number or search term, then fetch the issue:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
ISSUE_INPUT="$ISSUE_INPUT"
|
|
23
|
+
|
|
24
|
+
# Check if input is a number
|
|
25
|
+
if [[ "$ISSUE_INPUT" =~ ^[0-9]+$ ]]; then
|
|
26
|
+
echo "=== FETCHING ISSUE #$ISSUE_INPUT ==="
|
|
27
|
+
ISSUE_NUMBER="$ISSUE_INPUT"
|
|
28
|
+
else
|
|
29
|
+
echo "=== SEARCHING FOR ISSUE: $ISSUE_INPUT ==="
|
|
30
|
+
|
|
31
|
+
# Search for matching issues
|
|
32
|
+
echo "Search results:"
|
|
33
|
+
gh issue list --search "$ISSUE_INPUT" --limit 5 --json number,title,state --jq '.[] | "#\(.number) [\(.state)] \(.title)"'
|
|
34
|
+
echo ""
|
|
35
|
+
|
|
36
|
+
# Get the first matching open issue
|
|
37
|
+
ISSUE_NUMBER=$(gh issue list --search "$ISSUE_INPUT" --state open --limit 1 --json number --jq '.[0].number // empty')
|
|
38
|
+
|
|
39
|
+
if [ -z "$ISSUE_NUMBER" ]; then
|
|
40
|
+
# Try closed issues if no open ones found
|
|
41
|
+
ISSUE_NUMBER=$(gh issue list --search "$ISSUE_INPUT" --state closed --limit 1 --json number --jq '.[0].number // empty')
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
if [ -z "$ISSUE_NUMBER" ]; then
|
|
45
|
+
echo "ERROR: No issues found matching '$ISSUE_INPUT'"
|
|
46
|
+
echo ""
|
|
47
|
+
echo "Try:"
|
|
48
|
+
echo " - Using the exact issue number: /get-issue 123"
|
|
49
|
+
echo " - Different search terms"
|
|
50
|
+
echo " - Check if you're in the correct repository"
|
|
51
|
+
exit 1
|
|
52
|
+
fi
|
|
53
|
+
|
|
54
|
+
echo "Selected issue: #$ISSUE_NUMBER"
|
|
55
|
+
fi
|
|
56
|
+
echo ""
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Step 2: Fetch Complete Issue Details
|
|
60
|
+
|
|
61
|
+
Get all relevant information about the issue:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
echo "=== ISSUE DETAILS ==="
|
|
65
|
+
|
|
66
|
+
# Get comprehensive issue data
|
|
67
|
+
gh issue view "$ISSUE_NUMBER" --json number,title,body,state,labels,assignees,milestone,author,createdAt,comments --jq '
|
|
68
|
+
"Number: #\(.number)
|
|
69
|
+
Title: \(.title)
|
|
70
|
+
State: \(.state)
|
|
71
|
+
Author: \(.author.login)
|
|
72
|
+
Created: \(.createdAt)
|
|
73
|
+
Labels: \(if .labels | length > 0 then [.labels[].name] | join(", ") else "none" end)
|
|
74
|
+
Assignees: \(if .assignees | length > 0 then [.assignees[].login] | join(", ") else "unassigned" end)
|
|
75
|
+
Milestone: \(.milestone.title // "none")
|
|
76
|
+
Comments: \(.comments | length)
|
|
77
|
+
|
|
78
|
+
--- DESCRIPTION ---
|
|
79
|
+
\(.body // "No description provided")
|
|
80
|
+
"'
|
|
81
|
+
|
|
82
|
+
echo ""
|
|
83
|
+
|
|
84
|
+
# Show recent comments if any exist
|
|
85
|
+
COMMENT_COUNT=$(gh issue view "$ISSUE_NUMBER" --json comments --jq '.comments | length')
|
|
86
|
+
if [ "$COMMENT_COUNT" -gt 0 ]; then
|
|
87
|
+
echo "=== RECENT COMMENTS (last 3) ==="
|
|
88
|
+
gh issue view "$ISSUE_NUMBER" --json comments --jq '.comments | .[-3:] | .[] | "[\(.author.login) - \(.createdAt[0:10])]\n\(.body)\n---"'
|
|
89
|
+
echo ""
|
|
90
|
+
fi
|
|
91
|
+
|
|
92
|
+
# Get linked PRs if any
|
|
93
|
+
echo "=== LINKED PULL REQUESTS ==="
|
|
94
|
+
gh pr list --search "linked:issue:$ISSUE_NUMBER" --json number,title,state --jq '.[] | "#\(.number) [\(.state)] \(.title)"' 2>/dev/null || echo "None"
|
|
95
|
+
echo ""
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Step 3: Generate Branch Name
|
|
99
|
+
|
|
100
|
+
Create a clean, descriptive branch name from the issue:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
echo "=== GENERATING BRANCH NAME ==="
|
|
104
|
+
|
|
105
|
+
# Get issue title and type from labels
|
|
106
|
+
ISSUE_TITLE=$(gh issue view "$ISSUE_NUMBER" --json title --jq '.title')
|
|
107
|
+
ISSUE_LABELS=$(gh issue view "$ISSUE_NUMBER" --json labels --jq '[.labels[].name] | join(",")')
|
|
108
|
+
|
|
109
|
+
# Determine branch prefix from labels
|
|
110
|
+
PREFIX="feature"
|
|
111
|
+
if echo "$ISSUE_LABELS" | grep -qiE "bug|fix"; then
|
|
112
|
+
PREFIX="fix"
|
|
113
|
+
elif echo "$ISSUE_LABELS" | grep -qiE "enhancement|feature"; then
|
|
114
|
+
PREFIX="feature"
|
|
115
|
+
elif echo "$ISSUE_LABELS" | grep -qiE "docs|documentation"; then
|
|
116
|
+
PREFIX="docs"
|
|
117
|
+
elif echo "$ISSUE_LABELS" | grep -qiE "refactor"; then
|
|
118
|
+
PREFIX="refactor"
|
|
119
|
+
elif echo "$ISSUE_LABELS" | grep -qiE "chore|maintenance"; then
|
|
120
|
+
PREFIX="chore"
|
|
121
|
+
fi
|
|
122
|
+
|
|
123
|
+
# Sanitize title for branch name:
|
|
124
|
+
# - Convert to lowercase
|
|
125
|
+
# - Replace spaces and special chars with dashes
|
|
126
|
+
# - Remove consecutive dashes
|
|
127
|
+
# - Trim to reasonable length (50 chars max for slug)
|
|
128
|
+
# - Remove leading/trailing dashes
|
|
129
|
+
SLUG=$(echo "$ISSUE_TITLE" | \
|
|
130
|
+
tr '[:upper:]' '[:lower:]' | \
|
|
131
|
+
sed 's/[^a-z0-9]/-/g' | \
|
|
132
|
+
sed 's/--*/-/g' | \
|
|
133
|
+
cut -c1-50 | \
|
|
134
|
+
sed 's/^-//' | \
|
|
135
|
+
sed 's/-$//')
|
|
136
|
+
|
|
137
|
+
BRANCH_NAME="${PREFIX}/${ISSUE_NUMBER}-${SLUG}"
|
|
138
|
+
|
|
139
|
+
echo "Suggested branch: $BRANCH_NAME"
|
|
140
|
+
echo ""
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Step 4: Check Branch State and Create
|
|
144
|
+
|
|
145
|
+
Verify branch doesn't exist and create it:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
echo "=== CREATING BRANCH ==="
|
|
149
|
+
|
|
150
|
+
# Check if branch already exists locally
|
|
151
|
+
if git show-ref --verify --quiet "refs/heads/$BRANCH_NAME" 2>/dev/null; then
|
|
152
|
+
echo "Branch '$BRANCH_NAME' already exists locally."
|
|
153
|
+
echo ""
|
|
154
|
+
echo "Options:"
|
|
155
|
+
echo " 1. Switch to it: git checkout $BRANCH_NAME"
|
|
156
|
+
echo " 2. Delete and recreate: git branch -D $BRANCH_NAME"
|
|
157
|
+
echo ""
|
|
158
|
+
|
|
159
|
+
# Ask if user wants to switch to existing branch
|
|
160
|
+
echo "Switching to existing branch..."
|
|
161
|
+
git checkout "$BRANCH_NAME"
|
|
162
|
+
exit 0
|
|
163
|
+
fi
|
|
164
|
+
|
|
165
|
+
# Check if branch exists on remote
|
|
166
|
+
if git ls-remote --heads origin "$BRANCH_NAME" 2>/dev/null | grep -q "$BRANCH_NAME"; then
|
|
167
|
+
echo "Branch '$BRANCH_NAME' exists on remote."
|
|
168
|
+
echo "Checking out and tracking remote branch..."
|
|
169
|
+
git checkout -b "$BRANCH_NAME" --track "origin/$BRANCH_NAME"
|
|
170
|
+
exit 0
|
|
171
|
+
fi
|
|
172
|
+
|
|
173
|
+
# Get default branch to branch from
|
|
174
|
+
DEFAULT_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@' || echo "main")
|
|
175
|
+
|
|
176
|
+
# Ensure we're up to date with the default branch
|
|
177
|
+
echo "Updating from $DEFAULT_BRANCH..."
|
|
178
|
+
git fetch origin "$DEFAULT_BRANCH" 2>/dev/null || true
|
|
179
|
+
|
|
180
|
+
# Create and switch to new branch
|
|
181
|
+
echo "Creating branch from $DEFAULT_BRANCH..."
|
|
182
|
+
git checkout -b "$BRANCH_NAME" "origin/$DEFAULT_BRANCH" 2>/dev/null || \
|
|
183
|
+
git checkout -b "$BRANCH_NAME" "$DEFAULT_BRANCH" 2>/dev/null || \
|
|
184
|
+
git checkout -b "$BRANCH_NAME"
|
|
185
|
+
|
|
186
|
+
echo ""
|
|
187
|
+
echo "Branch '$BRANCH_NAME' created and checked out."
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Step 5: Output Summary
|
|
191
|
+
|
|
192
|
+
Present a clear summary of the issue and branch:
|
|
193
|
+
|
|
194
|
+
```markdown
|
|
195
|
+
## ISSUE READY FOR IMPLEMENTATION
|
|
196
|
+
|
|
197
|
+
**Issue:** #{ISSUE_NUMBER} - {ISSUE_TITLE}
|
|
198
|
+
**Branch:** {BRANCH_NAME}
|
|
199
|
+
**State:** {STATE}
|
|
200
|
+
**Labels:** {LABELS}
|
|
201
|
+
|
|
202
|
+
### Description
|
|
203
|
+
{ISSUE_BODY or summary}
|
|
204
|
+
|
|
205
|
+
### Acceptance Criteria
|
|
206
|
+
{Extract from issue body if present, or mark as "Not specified"}
|
|
207
|
+
|
|
208
|
+
### Next Steps
|
|
209
|
+
1. Review the issue description above
|
|
210
|
+
2. Start implementation on branch `{BRANCH_NAME}`
|
|
211
|
+
3. Reference this issue in commits: `fix #{ISSUE_NUMBER}` or `closes #{ISSUE_NUMBER}`
|
|
212
|
+
4. Create PR when ready: `/pull-request`
|
|
213
|
+
|
|
214
|
+
### Useful Commands
|
|
215
|
+
```bash
|
|
216
|
+
# View issue in browser
|
|
217
|
+
gh issue view {ISSUE_NUMBER} --web
|
|
218
|
+
|
|
219
|
+
# Add yourself as assignee
|
|
220
|
+
gh issue edit {ISSUE_NUMBER} --add-assignee @me
|
|
221
|
+
|
|
222
|
+
# Add a comment
|
|
223
|
+
gh issue comment {ISSUE_NUMBER} --body "Starting work on this"
|
|
224
|
+
```
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
## Error Handling
|
|
228
|
+
|
|
229
|
+
### Issue Not Found
|
|
230
|
+
```markdown
|
|
231
|
+
ERROR: Issue not found
|
|
232
|
+
|
|
233
|
+
The issue #{NUMBER} does not exist or you don't have access.
|
|
234
|
+
|
|
235
|
+
Verify:
|
|
236
|
+
- Issue number is correct
|
|
237
|
+
- You're in the correct repository
|
|
238
|
+
- You have access to this repository
|
|
239
|
+
- Run `gh auth status` to check authentication
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### No Search Results
|
|
243
|
+
```markdown
|
|
244
|
+
ERROR: No issues match "{SEARCH_TERM}"
|
|
245
|
+
|
|
246
|
+
Try:
|
|
247
|
+
- Using exact issue number: `/get-issue 123`
|
|
248
|
+
- Broader search terms
|
|
249
|
+
- Checking issue state (open vs closed)
|
|
250
|
+
- Running `gh issue list` to see available issues
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### Git Errors
|
|
254
|
+
```markdown
|
|
255
|
+
ERROR: Git operation failed
|
|
256
|
+
|
|
257
|
+
Common causes:
|
|
258
|
+
- Not in a git repository
|
|
259
|
+
- Uncommitted changes blocking checkout
|
|
260
|
+
- Remote not accessible
|
|
261
|
+
|
|
262
|
+
Solutions:
|
|
263
|
+
- Run `git status` to check state
|
|
264
|
+
- Commit or stash changes: `git stash`
|
|
265
|
+
- Check remote: `gh repo view`
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
## Quality Standards
|
|
269
|
+
|
|
270
|
+
### Issue Fetch Quality:
|
|
271
|
+
- [ ] All issue metadata retrieved (title, body, labels, etc.)
|
|
272
|
+
- [ ] Comments included for context
|
|
273
|
+
- [ ] Linked PRs identified
|
|
274
|
+
- [ ] State clearly displayed
|
|
275
|
+
|
|
276
|
+
### Branch Quality:
|
|
277
|
+
- [ ] Name follows pattern: `{type}/{number}-{slug}`
|
|
278
|
+
- [ ] Type derived from labels (feature, fix, docs, etc.)
|
|
279
|
+
- [ ] Slug is readable and descriptive
|
|
280
|
+
- [ ] Branch created from up-to-date default branch
|
|
281
|
+
|
|
282
|
+
### Output Quality:
|
|
283
|
+
- [ ] Clear summary of issue details
|
|
284
|
+
- [ ] Actionable next steps provided
|
|
285
|
+
- [ ] Useful commands included
|
|
286
|
+
- [ ] Error cases handled gracefully
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: pr-comments
|
|
3
3
|
description: Creates individual PR comments with fix suggestions for code review findings
|
|
4
4
|
tools: Bash, Read, Grep, Glob
|
|
5
|
-
model:
|
|
5
|
+
model: haiku
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
You are a PR comment specialist responsible for creating actionable, well-formatted comments on pull requests for issues found during code review.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: project-state
|
|
3
3
|
description: Analyze current project state including git history, file changes, TODOs, and documentation for status reporting
|
|
4
4
|
tools: Bash, Read, Grep, Glob
|
|
5
|
-
model:
|
|
5
|
+
model: haiku
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
You are a project state analysis specialist focused on gathering comprehensive codebase insights for status reporting and documentation. Your role is to analyze git history, recent changes, pending work, and documentation structure.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: pull-request
|
|
3
3
|
description: Analyze commits and changes to generate comprehensive PR title and description
|
|
4
4
|
tools: Bash, Read, Grep, Glob
|
|
5
|
-
model:
|
|
5
|
+
model: haiku
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
You are a pull request specialist focused on analyzing code changes and generating comprehensive, accurate PR descriptions. Your task is to understand what changed, why it changed, and communicate that clearly to human reviewers.
|
|
@@ -11,11 +11,54 @@ You are a pull request specialist focused on analyzing code changes and generati
|
|
|
11
11
|
|
|
12
12
|
## Your Task
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
Create a pull request from the current branch with comprehensive analysis and description.
|
|
15
15
|
|
|
16
|
-
You will receive:
|
|
17
|
-
-
|
|
18
|
-
- `
|
|
16
|
+
You will receive arguments that may contain:
|
|
17
|
+
- Base branch name (e.g., `main`, `develop`)
|
|
18
|
+
- `--draft` flag for draft PR
|
|
19
|
+
|
|
20
|
+
### Step 0: Setup and Pre-Flight Checks
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Parse arguments
|
|
24
|
+
ARGS="$1"
|
|
25
|
+
BASE_BRANCH=""
|
|
26
|
+
DRAFT_FLAG=""
|
|
27
|
+
|
|
28
|
+
for arg in $ARGS; do
|
|
29
|
+
case $arg in
|
|
30
|
+
--draft) DRAFT_FLAG="--draft" ;;
|
|
31
|
+
*) [ -z "$BASE_BRANCH" ] && BASE_BRANCH="$arg" ;;
|
|
32
|
+
esac
|
|
33
|
+
done
|
|
34
|
+
|
|
35
|
+
# Get current branch
|
|
36
|
+
CURRENT_BRANCH=$(git branch --show-current)
|
|
37
|
+
if [ -z "$CURRENT_BRANCH" ]; then
|
|
38
|
+
echo "ERROR: Not on a branch (detached HEAD)"
|
|
39
|
+
exit 1
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
# Auto-detect base branch
|
|
43
|
+
if [ -z "$BASE_BRANCH" ]; then
|
|
44
|
+
for branch in main master develop; do
|
|
45
|
+
git show-ref --verify --quiet refs/heads/$branch && BASE_BRANCH=$branch && break
|
|
46
|
+
done
|
|
47
|
+
fi
|
|
48
|
+
[ -z "$BASE_BRANCH" ] && echo "ERROR: Could not detect base branch" && exit 1
|
|
49
|
+
|
|
50
|
+
# Pre-flight checks
|
|
51
|
+
COMMITS_AHEAD=$(git rev-list --count $BASE_BRANCH..HEAD)
|
|
52
|
+
[ "$COMMITS_AHEAD" -eq 0 ] && echo "ERROR: No commits ahead of $BASE_BRANCH" && exit 1
|
|
53
|
+
|
|
54
|
+
EXISTING_PR=$(gh pr list --head "$CURRENT_BRANCH" --json number --jq '.[0].number' 2>/dev/null || echo "")
|
|
55
|
+
[ -n "$EXISTING_PR" ] && echo "ERROR: PR #$EXISTING_PR already exists" && exit 1
|
|
56
|
+
|
|
57
|
+
# Push if needed
|
|
58
|
+
git ls-remote --exit-code --heads origin "$CURRENT_BRANCH" >/dev/null 2>&1 || git push -u origin "$CURRENT_BRANCH"
|
|
59
|
+
|
|
60
|
+
echo "Branch: $CURRENT_BRANCH -> $BASE_BRANCH ($COMMITS_AHEAD commits)"
|
|
61
|
+
```
|
|
19
62
|
|
|
20
63
|
### Step 1: Analyze Commit History
|
|
21
64
|
|
|
@@ -420,4 +463,31 @@ END OF PR CONTENT
|
|
|
420
463
|
- [ ] PR size assessed accurately
|
|
421
464
|
- [ ] Split recommendations if needed
|
|
422
465
|
|
|
423
|
-
|
|
466
|
+
### Step 9: Create the Pull Request
|
|
467
|
+
|
|
468
|
+
After generating the title and description, create the PR:
|
|
469
|
+
|
|
470
|
+
```bash
|
|
471
|
+
# Create PR with generated content
|
|
472
|
+
gh pr create \
|
|
473
|
+
--base "$BASE_BRANCH" \
|
|
474
|
+
--head "$CURRENT_BRANCH" \
|
|
475
|
+
--title "{GENERATED_TITLE}" \
|
|
476
|
+
--body "$(cat <<'EOF'
|
|
477
|
+
{GENERATED_DESCRIPTION}
|
|
478
|
+
EOF
|
|
479
|
+
)" $DRAFT_FLAG
|
|
480
|
+
|
|
481
|
+
# Get PR URL
|
|
482
|
+
PR_URL=$(gh pr view --json url --jq '.url')
|
|
483
|
+
echo ""
|
|
484
|
+
echo "PR Created: $PR_URL"
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
**Final Output:**
|
|
488
|
+
```
|
|
489
|
+
PR Created: {PR_URL}
|
|
490
|
+
Branch: {CURRENT_BRANCH} -> {BASE_BRANCH}
|
|
491
|
+
Commits: {N}
|
|
492
|
+
Status: {Draft/Ready for review}
|
|
493
|
+
```
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: tech-debt
|
|
3
3
|
description: Manages tech debt GitHub issue - adds new items and cleans up fixed ones
|
|
4
4
|
tools: Bash, Read, Grep, Glob
|
|
5
|
-
model:
|
|
5
|
+
model: haiku
|
|
6
6
|
---
|
|
7
7
|
|
|
8
8
|
You are a tech debt management specialist responsible for maintaining the Tech Debt Backlog GitHub issue. You add new pre-existing issues found during code reviews and clean up items that have been fixed.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
allowed-tools: Task
|
|
3
|
+
description: Fetch GitHub issue details and create a working branch for implementation
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## Your task
|
|
7
|
+
|
|
8
|
+
Launch the `get-issue` sub-agent with the issue identifier: `$ARGUMENTS`
|
|
9
|
+
|
|
10
|
+
The agent will:
|
|
11
|
+
1. Fetch issue by number or search term
|
|
12
|
+
2. Display issue details (title, body, labels, comments)
|
|
13
|
+
3. Create and checkout a branch named `{type}/{number}-{slug}`
|
|
14
|
+
4. Provide next steps for implementation
|
|
15
|
+
|
|
16
|
+
Pass the full `$ARGUMENTS` to the sub-agent as the issue input.
|
|
@@ -1,269 +1,20 @@
|
|
|
1
1
|
---
|
|
2
|
-
allowed-tools: Task
|
|
2
|
+
allowed-tools: Task
|
|
3
3
|
description: Create pull request with comprehensive analysis and smart description generation
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
## Your task
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Launch the `pull-request` sub-agent to create a PR from the current branch.
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
Pass `$ARGUMENTS` to the sub-agent (may contain base branch and/or `--draft` flag).
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
The agent will:
|
|
13
|
+
1. Detect current branch and base branch (auto-detect if not specified)
|
|
14
|
+
2. Run pre-flight checks (commits exist, no existing PR, branch pushed)
|
|
15
|
+
3. Analyze commits and code changes
|
|
16
|
+
4. Generate PR title and comprehensive description
|
|
17
|
+
5. Create the PR using `gh pr create`
|
|
18
|
+
6. Return the PR URL
|
|
13
19
|
|
|
14
|
-
|
|
15
|
-
# Parse arguments
|
|
16
|
-
BASE_BRANCH=""
|
|
17
|
-
DRAFT_FLAG=""
|
|
18
|
-
|
|
19
|
-
for arg in $ARGUMENTS; do
|
|
20
|
-
case $arg in
|
|
21
|
-
--draft)
|
|
22
|
-
DRAFT_FLAG="--draft"
|
|
23
|
-
;;
|
|
24
|
-
*)
|
|
25
|
-
if [ -z "$BASE_BRANCH" ]; then
|
|
26
|
-
BASE_BRANCH="$arg"
|
|
27
|
-
fi
|
|
28
|
-
;;
|
|
29
|
-
esac
|
|
30
|
-
done
|
|
31
|
-
|
|
32
|
-
# Get current branch
|
|
33
|
-
CURRENT_BRANCH=$(git branch --show-current)
|
|
34
|
-
if [ -z "$CURRENT_BRANCH" ]; then
|
|
35
|
-
echo "❌ Not on a branch (detached HEAD). Checkout a feature branch first."
|
|
36
|
-
exit 1
|
|
37
|
-
fi
|
|
38
|
-
|
|
39
|
-
# Auto-detect base branch if not specified
|
|
40
|
-
if [ -z "$BASE_BRANCH" ]; then
|
|
41
|
-
for branch in main master develop; do
|
|
42
|
-
if git show-ref --verify --quiet refs/heads/$branch; then
|
|
43
|
-
BASE_BRANCH=$branch
|
|
44
|
-
break
|
|
45
|
-
fi
|
|
46
|
-
done
|
|
47
|
-
fi
|
|
48
|
-
|
|
49
|
-
if [ -z "$BASE_BRANCH" ]; then
|
|
50
|
-
echo "❌ Could not auto-detect base branch. Specify manually: /pull-request <base-branch>"
|
|
51
|
-
exit 1
|
|
52
|
-
fi
|
|
53
|
-
|
|
54
|
-
echo "=== PR CREATION CONTEXT ==="
|
|
55
|
-
echo "Current branch: $CURRENT_BRANCH"
|
|
56
|
-
echo "Base branch: $BASE_BRANCH"
|
|
57
|
-
echo "Draft mode: ${DRAFT_FLAG:-disabled}"
|
|
58
|
-
echo ""
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
### Step 2: Pre-Flight Checks
|
|
62
|
-
|
|
63
|
-
Verify the branch state and catch common issues:
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
echo "=== PRE-FLIGHT CHECKS ==="
|
|
67
|
-
|
|
68
|
-
# Check if branch has commits ahead of base
|
|
69
|
-
COMMITS_AHEAD=$(git rev-list --count $BASE_BRANCH..HEAD)
|
|
70
|
-
if [ "$COMMITS_AHEAD" -eq 0 ]; then
|
|
71
|
-
echo "❌ No commits to create PR. Branch is up to date with $BASE_BRANCH."
|
|
72
|
-
exit 1
|
|
73
|
-
fi
|
|
74
|
-
|
|
75
|
-
# Check if PR already exists for this branch
|
|
76
|
-
EXISTING_PR=$(gh pr list --head "$CURRENT_BRANCH" --json number --jq '.[0].number' 2>/dev/null || echo "")
|
|
77
|
-
if [ -n "$EXISTING_PR" ]; then
|
|
78
|
-
echo "⚠️ PR #$EXISTING_PR already exists for branch $CURRENT_BRANCH"
|
|
79
|
-
echo "View: gh pr view $EXISTING_PR"
|
|
80
|
-
echo "Update: git push to update existing PR"
|
|
81
|
-
exit 1
|
|
82
|
-
fi
|
|
83
|
-
|
|
84
|
-
# Check if branch is pushed to remote
|
|
85
|
-
if ! git ls-remote --exit-code --heads origin "$CURRENT_BRANCH" >/dev/null 2>&1; then
|
|
86
|
-
echo "⚠️ Branch not pushed to remote. Pushing now..."
|
|
87
|
-
git push -u origin "$CURRENT_BRANCH"
|
|
88
|
-
fi
|
|
89
|
-
|
|
90
|
-
# Show quick summary
|
|
91
|
-
echo "✅ Ready to create PR"
|
|
92
|
-
echo " Commits: $COMMITS_AHEAD ahead of $BASE_BRANCH"
|
|
93
|
-
git log --oneline $BASE_BRANCH..HEAD | head -5
|
|
94
|
-
echo ""
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### Step 3: Launch Pull Request Sub-Agent
|
|
98
|
-
|
|
99
|
-
Launch the `pull-request` sub-agent to analyze commits and generate PR content:
|
|
100
|
-
|
|
101
|
-
**IMPORTANT**: Pass these variables to the sub-agent:
|
|
102
|
-
- `CURRENT_BRANCH`: The branch being reviewed
|
|
103
|
-
- `BASE_BRANCH`: The base branch for comparison
|
|
104
|
-
|
|
105
|
-
The sub-agent will:
|
|
106
|
-
1. Analyze commit history and messages
|
|
107
|
-
2. Analyze code changes and impact
|
|
108
|
-
3. Extract issue references
|
|
109
|
-
4. Detect breaking changes
|
|
110
|
-
5. Generate PR title and comprehensive description
|
|
111
|
-
6. Assess PR size and suggest splits if needed
|
|
112
|
-
|
|
113
|
-
Use the Task tool to launch the sub-agent with subagent_type="pull-request":
|
|
114
|
-
|
|
115
|
-
```
|
|
116
|
-
Launch pull-request sub-agent with:
|
|
117
|
-
- Current branch: {CURRENT_BRANCH}
|
|
118
|
-
- Base branch: {BASE_BRANCH}
|
|
119
|
-
|
|
120
|
-
The sub-agent will analyze all commits and changes between {BASE_BRANCH} and {CURRENT_BRANCH}, then generate:
|
|
121
|
-
- PR title following conventional commit format
|
|
122
|
-
- Comprehensive PR description with:
|
|
123
|
-
- Summary of changes
|
|
124
|
-
- Breaking changes (if any)
|
|
125
|
-
- Testing recommendations
|
|
126
|
-
- Related issues
|
|
127
|
-
- Size assessment and recommendations
|
|
128
|
-
|
|
129
|
-
Return the complete PR title and description ready for `gh pr create`.
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
### Step 4: Review Sub-Agent Output
|
|
133
|
-
|
|
134
|
-
After the sub-agent completes, extract the generated PR content and present it to the user for review:
|
|
135
|
-
|
|
136
|
-
```markdown
|
|
137
|
-
📝 GENERATED PR CONTENT
|
|
138
|
-
|
|
139
|
-
**Title:**
|
|
140
|
-
{generated PR title}
|
|
141
|
-
|
|
142
|
-
**Description:**
|
|
143
|
-
{generated PR description}
|
|
144
|
-
|
|
145
|
-
---
|
|
146
|
-
|
|
147
|
-
**Size Assessment:**
|
|
148
|
-
- Files changed: {X}
|
|
149
|
-
- Lines changed: {Y}
|
|
150
|
-
- Complexity: {Simple/Medium/Complex/Too Large}
|
|
151
|
-
|
|
152
|
-
{If too large, show recommendations for splitting}
|
|
153
|
-
|
|
154
|
-
**Recommendations from analysis:**
|
|
155
|
-
{Any warnings or suggestions from sub-agent}
|
|
156
|
-
```
|
|
157
|
-
|
|
158
|
-
### Step 5: Create Pull Request
|
|
159
|
-
|
|
160
|
-
Create the PR using `gh pr create` with the generated content:
|
|
161
|
-
|
|
162
|
-
```bash
|
|
163
|
-
# Save PR body to temp file to preserve formatting
|
|
164
|
-
PR_BODY=$(cat <<'EOF'
|
|
165
|
-
{generated PR description from sub-agent}
|
|
166
|
-
EOF
|
|
167
|
-
)
|
|
168
|
-
|
|
169
|
-
# Create the PR
|
|
170
|
-
gh pr create \
|
|
171
|
-
--base "$BASE_BRANCH" \
|
|
172
|
-
--head "$CURRENT_BRANCH" \
|
|
173
|
-
--title "{generated PR title}" \
|
|
174
|
-
--body "$PR_BODY" \
|
|
175
|
-
$DRAFT_FLAG
|
|
176
|
-
|
|
177
|
-
# Capture the PR URL
|
|
178
|
-
PR_URL=$(gh pr view --json url --jq '.url' 2>/dev/null || echo "")
|
|
179
|
-
```
|
|
180
|
-
|
|
181
|
-
### Step 6: Provide Success Summary
|
|
182
|
-
|
|
183
|
-
Present the final summary to the user:
|
|
184
|
-
|
|
185
|
-
```markdown
|
|
186
|
-
✅ PULL REQUEST CREATED
|
|
187
|
-
|
|
188
|
-
🔗 **PR URL:** {PR_URL}
|
|
189
|
-
|
|
190
|
-
📊 **Summary:**
|
|
191
|
-
- Branch: {CURRENT_BRANCH} → {BASE_BRANCH}
|
|
192
|
-
- Commits: {X} commits
|
|
193
|
-
- Files: {Y} files changed
|
|
194
|
-
- Status: {Draft/Ready for review}
|
|
195
|
-
|
|
196
|
-
💡 **Next Steps:**
|
|
197
|
-
- View PR: gh pr view {PR_NUMBER}
|
|
198
|
-
- Request reviews: gh pr edit {PR_NUMBER} --add-reviewer @username
|
|
199
|
-
- Monitor CI checks: gh pr checks {PR_NUMBER}
|
|
200
|
-
- If changes needed, push commits or use /resolve-comments after review
|
|
201
|
-
|
|
202
|
-
📝 **Full PR details:** {PR_URL}
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
---
|
|
206
|
-
|
|
207
|
-
## Usage Examples
|
|
208
|
-
|
|
209
|
-
### Basic Usage
|
|
210
|
-
```bash
|
|
211
|
-
# Create PR to main branch (auto-detected)
|
|
212
|
-
/pull-request
|
|
213
|
-
|
|
214
|
-
# Create PR to develop branch
|
|
215
|
-
/pull-request develop
|
|
216
|
-
|
|
217
|
-
# Create draft PR
|
|
218
|
-
/pull-request --draft
|
|
219
|
-
|
|
220
|
-
# Create draft PR to specific base
|
|
221
|
-
/pull-request develop --draft
|
|
222
|
-
```
|
|
223
|
-
|
|
224
|
-
### When to Use
|
|
225
|
-
|
|
226
|
-
**✅ Use /pull-request when:**
|
|
227
|
-
- You have commits ready for review
|
|
228
|
-
- Branch is ready for team review
|
|
229
|
-
- You want comprehensive PR description
|
|
230
|
-
- You want to detect breaking changes automatically
|
|
231
|
-
|
|
232
|
-
**⚠️ Before using:**
|
|
233
|
-
- Run `/code-review` to validate quality
|
|
234
|
-
- Ensure all commits are meaningful (not WIP)
|
|
235
|
-
- Consider if PR is too large (should it be split?)
|
|
236
|
-
|
|
237
|
-
**💡 Pro Tips:**
|
|
238
|
-
- For small PRs (<10 files), this generates great descriptions automatically
|
|
239
|
-
- For large PRs (>20 files), consider the split recommendations
|
|
240
|
-
- Draft PRs are great for early feedback without formal review requests
|
|
241
|
-
- PR description can be edited after creation with `gh pr edit`
|
|
242
|
-
|
|
243
|
-
---
|
|
244
|
-
|
|
245
|
-
## Command Behavior
|
|
246
|
-
|
|
247
|
-
### Pre-Flight Validation:
|
|
248
|
-
- ✅ Verifies branch has commits ahead of base
|
|
249
|
-
- ✅ Checks for existing PRs on this branch
|
|
250
|
-
- ✅ Ensures branch is pushed to remote
|
|
251
|
-
- ✅ Validates base branch exists
|
|
252
|
-
|
|
253
|
-
### PR Content Generation:
|
|
254
|
-
- ✅ Analyzes all commits since branching from base
|
|
255
|
-
- ✅ Groups changes by feature/fix/refactor
|
|
256
|
-
- ✅ Extracts issue references automatically
|
|
257
|
-
- ✅ Detects breaking changes from commit messages
|
|
258
|
-
- ✅ Generates testing recommendations
|
|
259
|
-
|
|
260
|
-
### Safety Features:
|
|
261
|
-
- ⚠️ Warns if PR is too large (>500 lines changed)
|
|
262
|
-
- ⚠️ Suggests splitting strategy for large PRs
|
|
263
|
-
- ⚠️ Detects missing tests or documentation
|
|
264
|
-
- ⚠️ Highlights security-sensitive changes
|
|
265
|
-
|
|
266
|
-
### Integration:
|
|
267
|
-
- Works seamlessly with `/code-review` (run before PR creation)
|
|
268
|
-
- Complements `/resolve-comments` (for handling feedback after PR)
|
|
269
|
-
- Follows conventional commit format for consistency
|
|
20
|
+
Trust the agent's judgment. It handles all validation and creation.
|